truncateValue.ts 759 B

12345678910111213141516171819202122232425
  1. import { isFunction } from 'lodash';
  2. export default function truncateValue(options: {
  3. value: string;
  4. maxLength: number;
  5. getValueLength?: (value: string) => number
  6. }): string {
  7. const { value, maxLength, getValueLength } = options;
  8. if (isFunction(getValueLength)) {
  9. let left = 0;
  10. let right = value.length;
  11. while (left < right) {
  12. const mid = left + Math.floor((right - left) / 2);
  13. const currentValue = value.slice(0, mid + 1);
  14. if (getValueLength(currentValue) > maxLength) {
  15. right = mid;
  16. } else {
  17. left = mid + 1;
  18. }
  19. }
  20. return value.slice(0, left);
  21. } else {
  22. return value.slice(0, maxLength);
  23. }
  24. }