truncateString.ts 924 B

1234567891011121314151617181920212223
  1. /**
  2. * Truncates a string to the given number of chars (maxLength) by inserting '...' in the middle of that string.
  3. * Partially taken from https://stackoverflow.com/a/5723274/3192470.
  4. */
  5. const separator = '...'
  6. export default function truncateString(
  7. string: string,
  8. maxLength: number,
  9. ): string {
  10. // Return the empty string if maxLength is zero
  11. if (maxLength === 0) return ''
  12. // Return original string if it's already shorter than maxLength
  13. if (string.length <= maxLength) return string
  14. // Return truncated substring appended of the ellipsis char if string can't be meaningfully truncated
  15. if (maxLength <= separator.length + 1)
  16. return `${string.slice(0, maxLength - 1)}…`
  17. const charsToShow = maxLength - separator.length
  18. const frontChars = Math.ceil(charsToShow / 2)
  19. const backChars = Math.floor(charsToShow / 2)
  20. return string.slice(0, frontChars) + separator + string.slice(-backChars)
  21. }