Skip to content
Snippets Groups Projects
Unverified Commit b1eca0f9 authored by Anton Kulyk's avatar Anton Kulyk Committed by GitHub
Browse files

Keep a single null dimension value (#43246)

* Keep a single null dimension value

* Add Loki test

* Remove Loki test

* Throw an error if dataset is empty after filtering

* Extract error message into a constant
parent a4add278
Branches
Tags
No related merge requests found
......@@ -456,6 +456,8 @@ const Y_AXIS_CROSSING_ERROR = Error(
t`Y-axis must not cross 0 when using log scale.`,
);
export const NO_X_AXIS_VALUES_ERROR_MESSAGE = t`There is no data to display. Check the query to ensure there are non-null x-axis values.`;
export function replaceZeroesForLogScale(
dataset: ChartDataset,
seriesDataKeys: DataKey[],
......@@ -622,6 +624,9 @@ export const applyVisualizationSettingsDataTransformations = (
xAxisModel.isHistogram
) {
dataset = filterNullDimensionValues(dataset, showWarning);
if (dataset.length === 0) {
throw new Error(NO_X_AXIS_VALUES_ERROR_MESSAGE);
}
}
if (settings["graph.y_axis.scale"] === "log") {
......
......@@ -32,6 +32,7 @@ import {
getDatasetExtents,
applyVisualizationSettingsDataTransformations,
sortDataset,
NO_X_AXIS_VALUES_ERROR_MESSAGE,
} from "./dataset";
import type {
ChartDataset,
......@@ -495,6 +496,66 @@ describe("dataset transform functions", () => {
});
});
describe("null dimension values", () => {
const validDatum = {
[X_AXIS_DATA_KEY]: dayjs().toISOString(),
count: 110,
created_at: dayjs().toISOString(),
};
const nullishDatum = {
[X_AXIS_DATA_KEY]: null,
count: 250,
created_at: null,
};
const xAxisModel: XAxisModel = {
axisType: "time",
intervalsCount: 0,
interval: { unit: "year", count: 100 },
timezone: "UTC",
range: [dayjs(), dayjs()],
formatter: value => String(value),
fromEChartsAxisValue: () => dayjs(),
toEChartsAxisValue: val => String(val),
};
const seriesModels = [createMockSeriesModel({ dataKey: "count" })];
it("should filter out null dimension values", () => {
const dataset = [validDatum, nullishDatum];
const result = applyVisualizationSettingsDataTransformations(
dataset,
[],
xAxisModel,
seriesModels,
yAxisScaleTransforms,
createMockComputedVisualizationSettings(),
);
expect(result).toEqual([
{
...validDatum,
[ORIGINAL_INDEX_DATA_KEY]: 0,
},
]);
});
it("should throw an error if dataset ends up empty after filtering null dimension values", () => {
expect(() =>
applyVisualizationSettingsDataTransformations(
[nullishDatum],
[],
xAxisModel,
seriesModels,
yAxisScaleTransforms,
createMockComputedVisualizationSettings(),
),
).toThrow(NO_X_AXIS_VALUES_ERROR_MESSAGE);
});
});
it("should work on empty datasets", () => {
const result = applyVisualizationSettingsDataTransformations(
[],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment