formatTooltipValue.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import {formatBytesBase2} from 'sentry/utils/bytes/formatBytesBase2';
  2. import {formatBytesBase10} from 'sentry/utils/bytes/formatBytesBase10';
  3. import {ABYTE_UNITS} from 'sentry/utils/discover/fieldRenderers';
  4. import {DurationUnit, type RateUnit, SizeUnit} from 'sentry/utils/discover/fields';
  5. import getDuration from 'sentry/utils/duration/getDuration';
  6. import {formatRate} from 'sentry/utils/formatters';
  7. import {formatPercentage} from 'sentry/utils/number/formatPercentage';
  8. import {convertDuration} from 'sentry/utils/unitConversion/convertDuration';
  9. import {convertSize} from 'sentry/utils/unitConversion/convertSize';
  10. import {isADurationUnit, isASizeUnit} from '../common/typePredicates';
  11. export function formatTooltipValue(value: number, type: string, unit?: string): string {
  12. switch (type) {
  13. case 'integer':
  14. case 'number':
  15. return value.toLocaleString();
  16. case 'percentage':
  17. return formatPercentage(value, 2);
  18. case 'duration':
  19. const durationUnit = isADurationUnit(unit) ? unit : DurationUnit.MILLISECOND;
  20. const durationInSeconds = convertDuration(value, durationUnit, DurationUnit.SECOND);
  21. return getDuration(durationInSeconds, 2, true);
  22. case 'size':
  23. const sizeUnit = isASizeUnit(unit) ? unit : SizeUnit.BYTE;
  24. const sizeInBytes = convertSize(value, sizeUnit, SizeUnit.BYTE);
  25. const formatter = ABYTE_UNITS.includes(unit ?? 'byte')
  26. ? formatBytesBase10
  27. : formatBytesBase2;
  28. return formatter(sizeInBytes);
  29. case 'rate':
  30. // Always show rate in the original dataset's unit. If the unit is not
  31. // appropriate, always convert the unit in the original dataset first.
  32. // This way, named rate functions like `epm()` will be shows in per minute
  33. // units
  34. return formatRate(value, unit as RateUnit);
  35. default:
  36. return value.toString();
  37. }
  38. }