@mcdevsl/superset-ui
Version:
55 lines (46 loc) • 1.45 kB
text/typescript
import { QueryFormMetric, AdhocMetric } from '@superset-ui/core';
import { createSelector } from 'reselect';
import { PlainObject } from './types';
type inputType = {
timeseriesLimitMetric: QueryFormMetric;
orderDesc: boolean;
records: PlainObject[];
metrics: string[];
};
function processData(
timeseriesLimitMetric: QueryFormMetric,
orderDesc: boolean,
records: PlainObject[],
metrics: string[],
) {
const sortByKey =
timeseriesLimitMetric &&
((timeseriesLimitMetric as AdhocMetric).label || (timeseriesLimitMetric as string));
let processedRecords = records;
if (sortByKey) {
processedRecords = records
.slice()
.sort(
orderDesc ? (a, b) => b[sortByKey] - a[sortByKey] : (a, b) => a[sortByKey] - b[sortByKey],
);
}
return processedRecords.map(
sortByKey && !metrics.includes(sortByKey)
? row => {
const data = { ...row };
delete data[sortByKey];
return { data };
}
: row => ({ data: row }),
);
}
const getCreateSelectorFunction = () =>
createSelector(
(data: inputType) => data.timeseriesLimitMetric,
data => data.orderDesc,
data => data.records,
data => data.metrics,
(timeseriesLimitMetric, orderDesc, records, metrics) =>
processData(timeseriesLimitMetric, orderDesc, records, metrics),
);
export default getCreateSelectorFunction;