mirror of
https://github.com/apache/superset.git
synced 2026-04-20 16:44:46 +00:00
fix(time-series table): display null values in time-series table and sortable (#19024)
* fix: display null values in time-series table and sortable * add unit test * fix unit test * Add sortNumericValues with different nan treatment Co-authored-by: Jesse Yang <jesse.yang@airbnb.com>
This commit is contained in:
@@ -27,6 +27,7 @@ import {
|
||||
MetricOption,
|
||||
} from '@superset-ui/chart-controls';
|
||||
import moment from 'moment';
|
||||
import sortNumericValues from 'src/utils/sortNumericValues';
|
||||
|
||||
import FormattedNumber from './FormattedNumber';
|
||||
import SparklineCell from './SparklineCell';
|
||||
@@ -34,6 +35,15 @@ import './TimeTable.less';
|
||||
|
||||
const ACCESSIBLE_COLOR_BOUNDS = ['#ca0020', '#0571b0'];
|
||||
|
||||
const sortNumberWithMixedTypes = (rowA, rowB, columnId, descending) =>
|
||||
sortNumericValues(
|
||||
rowA.values[columnId].props['data-value'],
|
||||
rowB.values[columnId].props['data-value'],
|
||||
{ descending, nanTreatment: 'asSmallest' },
|
||||
) *
|
||||
// react-table sort function always expects -1 for smaller number
|
||||
(descending ? -1 : 1);
|
||||
|
||||
function colorFromBounds(value, bounds, colorBounds = ACCESSIBLE_COLOR_BOUNDS) {
|
||||
if (bounds) {
|
||||
const [min, max] = bounds;
|
||||
@@ -126,11 +136,7 @@ const TimeTable = ({
|
||||
)}
|
||||
</>
|
||||
),
|
||||
sortType: (rowA, rowB, columnId) => {
|
||||
const rowAVal = rowA.values[columnId].props['data-value'];
|
||||
const rowBVal = rowB.values[columnId].props['data-value'];
|
||||
return rowAVal - rowBVal;
|
||||
},
|
||||
sortType: sortNumberWithMixedTypes,
|
||||
})),
|
||||
],
|
||||
[columnConfigs],
|
||||
@@ -192,14 +198,17 @@ const TimeTable = ({
|
||||
} else {
|
||||
v = reversedEntries[timeLag][valueField];
|
||||
}
|
||||
if (column.comparisonType === 'diff') {
|
||||
v = recent - v;
|
||||
} else if (column.comparisonType === 'perc') {
|
||||
v = recent / v;
|
||||
} else if (column.comparisonType === 'perc_change') {
|
||||
v = recent / v - 1;
|
||||
if (typeof v === 'number' && typeof recent === 'number') {
|
||||
if (column.comparisonType === 'diff') {
|
||||
v = recent - v;
|
||||
} else if (column.comparisonType === 'perc') {
|
||||
v = recent / v;
|
||||
} else if (column.comparisonType === 'perc_change') {
|
||||
v = recent / v - 1;
|
||||
}
|
||||
} else {
|
||||
v = null;
|
||||
}
|
||||
v = v || 0;
|
||||
} else if (column.colType === 'contrib') {
|
||||
// contribution to column total
|
||||
v =
|
||||
|
||||
Reference in New Issue
Block a user