Skip to content

Commit

Permalink
Number formatting in tables respects user locale
Browse files Browse the repository at this point in the history
  • Loading branch information
Polleps committed Jan 9, 2024
1 parent 66b3f33 commit 31e3afb
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 18 deletions.
19 changes: 3 additions & 16 deletions browser/data-browser/src/views/TablePage/EditorCells/FloatCell.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,10 @@ import { styled } from 'styled-components';
import { InputBase } from './InputBase';
import { ProgressBar } from './ProgressBar';
import { CellContainer, DisplayCellProps, EditCellProps } from './Type';
import { formatNumber } from '../helpers/formatNumber';

const { numberFormats } = urls.instances;

function formatValue(
value: number | undefined,
numberFormatting: string | undefined,
decimalPlaces: number | undefined,
) {
const isPercentage = numberFormatting === numberFormats.percentage;
const suffix = isPercentage ? ' %' : '';

const formattedValue =
decimalPlaces !== undefined ? value?.toFixed(decimalPlaces) : value;

return `${formattedValue}${suffix}`;
}

function FloatCellEdit({
value,
onChange,
Expand Down Expand Up @@ -65,10 +52,10 @@ function FloatCellDisplay({

const isPercentage = numberFormatting === numberFormats.percentage;

const formattedValue = formatValue(
const formattedValue = formatNumber(
value as number | undefined,
decimalPlaces ?? 2,
numberFormatting,
decimalPlaces,
);

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { styled } from 'styled-components';
import { InputBase } from './InputBase';
import { ProgressBar } from './ProgressBar';
import { CellContainer, DisplayCellProps, EditCellProps } from './Type';
import { formatNumber } from '../helpers/formatNumber';

const { numberFormats } = urls.instances;

Expand Down Expand Up @@ -40,11 +41,12 @@ function IntegerCellDisplay({
);

const isPercentage = numberFormatting === numberFormats.percentage;
const suffix = isPercentage ? ' %' : '';

return (
<>
<Aligned>{value && `${value}${suffix}`}</Aligned>
<Aligned>
{formatNumber(value as number | undefined, 0, numberFormatting)}
</Aligned>
{isPercentage && <ProgressBar percentage={value as number} />}
</>
);
Expand Down
27 changes: 27 additions & 0 deletions browser/data-browser/src/views/TablePage/helpers/formatNumber.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { urls } from '@tomic/react';

export function formatNumber(
value: number | undefined,
numberOfDecimalPlaces: number,
formatting?: string,
): string {
if (value === undefined) {
return '';
}

if (formatting === urls.instances.numberFormats.percentage) {
const formatter = new Intl.NumberFormat('default', {
style: 'percent',
minimumFractionDigits: numberOfDecimalPlaces,
});

return formatter.format(value);
}

const formatter = new Intl.NumberFormat('default', {
style: 'decimal',
minimumFractionDigits: numberOfDecimalPlaces,
});

return formatter.format(value);
}

0 comments on commit 31e3afb

Please sign in to comment.