Skip to content

Commit 16c86c1

Browse files
authored
ref(starfish): Show 3 significant digits for queries per minute (#54033)
1. Add precision arg to `formatAbbreviatedNumber` to set # of significant digits 2. Update `getFieldRenderer` rate renderer to use constant precision of 3 for sig digs.
1 parent db2bae4 commit 16c86c1

File tree

3 files changed

+41
-11
lines changed

3 files changed

+41
-11
lines changed

static/app/utils/discover/fieldRenderers.tsx

+8-6
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ type FieldFormatters = {
119119

120120
export type FieldTypes = keyof FieldFormatters;
121121

122+
const DEFAULT_RATE_SIG_DIGITS = 3;
123+
122124
const EmptyValueContainer = styled('span')`
123125
color: ${p => p.theme.gray300};
124126
`;
@@ -234,12 +236,12 @@ export const FIELD_FORMATTERS: FieldFormatters = {
234236
isSortable: true,
235237
renderFunc: (field, data, baggage) => {
236238
const {unit} = baggage ?? {};
237-
238-
return (
239-
<NumberContainer>
240-
{`${formatAbbreviatedNumber(data[field])}${unit ? RATE_UNIT_LABELS[unit] : ''}`}
241-
</NumberContainer>
242-
);
239+
const renderedUnit = unit ? RATE_UNIT_LABELS[unit] : '';
240+
const formattedNumber = `${formatAbbreviatedNumber(
241+
data[field],
242+
DEFAULT_RATE_SIG_DIGITS
243+
)}${renderedUnit}`;
244+
return <NumberContainer>{formattedNumber}</NumberContainer>;
243245
},
244246
},
245247
integer: {

static/app/utils/formatters.spec.tsx

+12
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,18 @@ describe('formatAbbreviatedNumber()', function () {
202202
expect(formatAbbreviatedNumber(1500)).toBe('1.5k');
203203
expect(formatAbbreviatedNumber(1213122)).toBe('1.2m');
204204
});
205+
206+
it('should round to set amount of significant digits', () => {
207+
expect(formatAbbreviatedNumber(100.12, 3)).toBe('100');
208+
expect(formatAbbreviatedNumber(199.99, 3)).toBe('200');
209+
expect(formatAbbreviatedNumber(1500, 3)).toBe('1.5k');
210+
expect(formatAbbreviatedNumber(1213122, 3)).toBe('1.21m');
211+
expect(formatAbbreviatedNumber(1500000000000, 3)).toBe('1500b');
212+
213+
expect(formatAbbreviatedNumber('1249.23421', 3)).toBe('1.25k');
214+
expect(formatAbbreviatedNumber('1239567891299', 3)).toBe('1240b');
215+
expect(formatAbbreviatedNumber('158.80421626984128', 3)).toBe('159');
216+
});
205217
});
206218

207219
describe('formatFloat()', function () {

static/app/utils/formatters.tsx

+21-5
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,16 @@ const numberFormats = [
286286
[1000, 'k'],
287287
] as const;
288288

289-
export function formatAbbreviatedNumber(number: number | string) {
289+
/**
290+
* Formats a number to a string with a suffix
291+
*
292+
* @param number the number to format
293+
* @param precision the number of significant digits to include
294+
*/
295+
export function formatAbbreviatedNumber(
296+
number: number | string,
297+
precision?: number
298+
): string {
290299
number = Number(number);
291300

292301
let lookup: (typeof numberFormats)[number];
@@ -301,12 +310,19 @@ export function formatAbbreviatedNumber(number: number | string) {
301310
continue;
302311
}
303312

304-
return shortValue / 10 > 1 || !fitsBound
305-
? `${shortValue}${suffix}`
306-
: `${formatFloat(number / suffixNum, 1)}${suffix}`;
313+
const formattedNumber =
314+
shortValue / 10 > 1 || !fitsBound
315+
? precision === undefined
316+
? shortValue
317+
: parseFloat(shortValue.toPrecision(precision)).toString()
318+
: formatFloat(number / suffixNum, precision || 1).toLocaleString(undefined, {
319+
maximumSignificantDigits: precision,
320+
});
321+
322+
return `${formattedNumber}${suffix}`;
307323
}
308324

309-
return number.toLocaleString();
325+
return number.toLocaleString(undefined, {maximumSignificantDigits: precision});
310326
}
311327

312328
export function formatRate(value: number, unit: RateUnits = RateUnits.PER_SECOND) {

0 commit comments

Comments
 (0)