mirror of
https://github.com/apache/druid.git
synced 2025-02-10 12:05:00 +00:00
fix NPE in number formatting (#16760)
This commit is contained in:
parent
a34a06e192
commit
72eeeec024
@ -33,6 +33,7 @@ import {
|
|||||||
columnToWidth,
|
columnToWidth,
|
||||||
formatNumber,
|
formatNumber,
|
||||||
getNumericColumnBraces,
|
getNumericColumnBraces,
|
||||||
|
isNumberLike,
|
||||||
} from '../../utils';
|
} from '../../utils';
|
||||||
import { BracedText } from '../braced-text/braced-text';
|
import { BracedText } from '../braced-text/braced-text';
|
||||||
import { CellFilterMenu } from '../cell-filter-menu/cell-filter-menu';
|
import { CellFilterMenu } from '../cell-filter-menu/cell-filter-menu';
|
||||||
@ -157,7 +158,7 @@ export const RecordTablePane = React.memo(function RecordTablePane(props: Record
|
|||||||
{numericColumnBraces[i] ? (
|
{numericColumnBraces[i] ? (
|
||||||
<BracedText
|
<BracedText
|
||||||
className="table-padding"
|
className="table-padding"
|
||||||
text={formatNumber(value)}
|
text={isNumberLike(value) ? formatNumber(value) : String(value)}
|
||||||
braces={numericColumnBraces[i]}
|
braces={numericColumnBraces[i]}
|
||||||
padFractionalPart
|
padFractionalPart
|
||||||
/>
|
/>
|
||||||
|
@ -24,6 +24,7 @@ import {
|
|||||||
formatInteger,
|
formatInteger,
|
||||||
formatMegabytes,
|
formatMegabytes,
|
||||||
formatMillions,
|
formatMillions,
|
||||||
|
formatNumber,
|
||||||
formatPercent,
|
formatPercent,
|
||||||
hashJoaat,
|
hashJoaat,
|
||||||
moveElement,
|
moveElement,
|
||||||
@ -96,6 +97,15 @@ describe('general', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('formatNumber', () => {
|
||||||
|
it('works', () => {
|
||||||
|
expect(formatNumber(null as any)).toEqual('0');
|
||||||
|
expect(formatNumber(0)).toEqual('0');
|
||||||
|
expect(formatNumber(5)).toEqual('5');
|
||||||
|
expect(formatNumber(5.1)).toEqual('5.1');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('formatInteger', () => {
|
describe('formatInteger', () => {
|
||||||
it('works', () => {
|
it('works', () => {
|
||||||
expect(formatInteger(10000)).toEqual('10,000');
|
expect(formatInteger(10000)).toEqual('10,000');
|
||||||
|
@ -240,7 +240,7 @@ export function formatInteger(n: NumberLike): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function formatNumber(n: NumberLike): string {
|
export function formatNumber(n: NumberLike): string {
|
||||||
return n.toLocaleString('en-US', { maximumFractionDigits: 20 });
|
return (n || 0).toLocaleString('en-US', { maximumFractionDigits: 20 });
|
||||||
}
|
}
|
||||||
|
|
||||||
export function formatRate(n: NumberLike) {
|
export function formatRate(n: NumberLike) {
|
||||||
|
@ -20,7 +20,7 @@ import type { QueryResult } from '@druid-toolkit/query';
|
|||||||
import { C } from '@druid-toolkit/query';
|
import { C } from '@druid-toolkit/query';
|
||||||
import type { Filter } from 'react-table';
|
import type { Filter } from 'react-table';
|
||||||
|
|
||||||
import { filterMap, formatNumber, oneOf } from './general';
|
import { filterMap, formatNumber, isNumberLike, oneOf } from './general';
|
||||||
import { deepSet } from './object-change';
|
import { deepSet } from './object-change';
|
||||||
|
|
||||||
export interface Pagination {
|
export interface Pagination {
|
||||||
@ -55,9 +55,7 @@ export function getNumericColumnBraces(
|
|||||||
queryResult.header.forEach((column, i) => {
|
queryResult.header.forEach((column, i) => {
|
||||||
if (!oneOf(column.nativeType, 'LONG', 'FLOAT', 'DOUBLE')) return;
|
if (!oneOf(column.nativeType, 'LONG', 'FLOAT', 'DOUBLE')) return;
|
||||||
const formatter = columnHints?.get(column.name)?.formatter || formatNumber;
|
const formatter = columnHints?.get(column.name)?.formatter || formatNumber;
|
||||||
const braces = filterMap(rows, row =>
|
const braces = filterMap(rows, row => (isNumberLike(row[i]) ? formatter(row[i]) : undefined));
|
||||||
oneOf(typeof row[i], 'number', 'bigint') ? formatter(row[i]) : undefined,
|
|
||||||
);
|
|
||||||
if (braces.length) {
|
if (braces.length) {
|
||||||
numericColumnBraces[i] = braces;
|
numericColumnBraces[i] = braces;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user