diff --git a/app/client/src/widgets/ChartWidget/component/index.tsx b/app/client/src/widgets/ChartWidget/component/index.tsx index c8bde55f49..88beccce1d 100644 --- a/app/client/src/widgets/ChartWidget/component/index.tsx +++ b/app/client/src/widgets/ChartWidget/component/index.tsx @@ -14,6 +14,7 @@ import { LabelOrientation, LABEL_ORIENTATION_COMPATIBLE_CHARTS, } from "../constants"; +import { getSeriesChartData } from "./utils"; import log from "loglevel"; import { Colors } from "constants/Colors"; // Leaving this require here. Ref: https://stackoverflow.com/questions/41292559/could-not-find-a-declaration-file-for-module-module-name-path-to-module-nam/42505940#42505940 @@ -198,28 +199,6 @@ class ChartComponent extends React.Component { }); }; - getSeriesChartData = (data: ChartDataPoint[], categories: string[]) => { - const dataMap: { [key: string]: string } = {}; - - // if not array or (is array and array length is zero) - if (!Array.isArray(data) || (Array.isArray(data) && data.length === 0)) { - return [ - { - value: "", - }, - ]; - } - for (let index = 0; index < data.length; index++) { - const item: ChartDataPoint = data[index]; - dataMap[item.x] = item.y; - } - return categories.map((category: string) => { - return { - value: dataMap[category] ? dataMap[category] : null, - }; - }); - }; - /** * creates dataset need by fusion chart from widget object-data * @@ -235,7 +214,7 @@ class ChartComponent extends React.Component { const seriesChartData: Array> = this.getSeriesChartData(get(item, "data", []), categories); + >> = getSeriesChartData(get(item, "data", []), categories); return { seriesName: item.seriesName, color: item.color diff --git a/app/client/src/widgets/ChartWidget/component/utils.test.ts b/app/client/src/widgets/ChartWidget/component/utils.test.ts new file mode 100644 index 0000000000..485b2e5862 --- /dev/null +++ b/app/client/src/widgets/ChartWidget/component/utils.test.ts @@ -0,0 +1,29 @@ +import { getSeriesChartData } from "./utils"; + +describe("getSeriesChartData", () => { + it("should return 0 in value when some y axis inputs are 0", () => { + const data = [ + { x: "Jul", y: 3 }, + { x: "Aug", y: 2 }, + { x: "Sep", y: 2 }, + { x: "Oct", y: 0 }, + { x: "Nov", y: 2 }, + { x: "Dec", y: 0 }, + { x: "Jan", y: 1 }, + ]; + const categories = ["Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan"]; + + const result = getSeriesChartData(data, categories); + const expected = [ + { value: 3 }, + { value: 2 }, + { value: 2 }, + { value: 0 }, + { value: 2 }, + { value: 0 }, + { value: 1 }, + ]; + + expect(result).toStrictEqual(expected); + }); +}); diff --git a/app/client/src/widgets/ChartWidget/component/utils.ts b/app/client/src/widgets/ChartWidget/component/utils.ts new file mode 100644 index 0000000000..bd7ce95f54 --- /dev/null +++ b/app/client/src/widgets/ChartWidget/component/utils.ts @@ -0,0 +1,29 @@ +import { ChartDataPoint } from "../constants"; + +export const getSeriesChartData = ( + data: ChartDataPoint[], + categories: string[], +) => { + const dataMap: { [key: string]: string } = {}; + + // if not array or (is array and array length is zero) + if (!Array.isArray(data) || (Array.isArray(data) && data.length === 0)) { + return [ + { + value: "", + }, + ]; + } + for (let index = 0; index < data.length; index++) { + const item: ChartDataPoint = data[index]; + dataMap[item.x] = item.y; + } + return categories.map((category: string) => { + return { + value: + dataMap[category] || dataMap[category]?.toString() + ? dataMap[category] + : null, + }; + }); +};