Skip to content

Commit f3610a3

Browse files
[WC-2440]: pie chart issue (#1362)
2 parents 4ffa869 + 26669ef commit f3610a3

File tree

11 files changed

+69
-14
lines changed

11 files changed

+69
-14
lines changed

packages/pluggableWidgets/charts-web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@mendix/charts-web",
3-
"version": "5.1.0",
3+
"version": "5.1.1",
44
"description": "Chart widgets collection for data visualization",
55
"license": "Apache-2.0",
66
"private": false,

packages/pluggableWidgets/charts-web/src/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8" ?>
22
<package xmlns="http://www.mendix.com/package/1.0/">
3-
<clientModule name="Charts" version="5.1.0" xmlns="http://www.mendix.com/clientModule/1.0/">
3+
<clientModule name="Charts" version="5.1.1" xmlns="http://www.mendix.com/clientModule/1.0/">
44
<widgetFiles>
55
<widgetFile path="AreaChart/AreaChart.xml" />
66
<widgetFile path="BarChart/BarChart.xml" />

packages/pluggableWidgets/pie-doughnut-chart-web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66

77
## [Unreleased]
88

9+
### Fixed
10+
11+
- We fixed an issue on pie chart onClick when multiple points are added to the same item.
12+
913
## [5.1.0] - 2024-10-28
1014

1115
### Changed

packages/pluggableWidgets/pie-doughnut-chart-web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@mendix/pie-doughnut-chart-web",
33
"widgetName": "PieChart",
4-
"version": "5.1.0",
4+
"version": "5.1.1",
55
"description": "Shows data in a pie format graph.",
66
"copyright": "© Mendix Technology BV 2023. All rights reserved.",
77
"license": "Apache-2.0",

packages/pluggableWidgets/pie-doughnut-chart-web/src/PieChart.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@
117117
</propertyGroup>
118118
<propertyGroup caption="Events">
119119
<propertyGroup caption="Events">
120-
<property key="onClickAction" type="action" required="false">
120+
<property key="onClickAction" type="action" required="false" dataSource="seriesDataSource">
121121
<caption>On click action</caption>
122122
<description />
123123
</property>

packages/pluggableWidgets/pie-doughnut-chart-web/src/__tests__/PieChart.spec.tsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ describe("The PieChart widget", () => {
8282
seriesSortAttribute.get = jest
8383
.fn()
8484
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(20)).build())
85+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(15)).build())
86+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(20)).build())
87+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(15)).build())
88+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(20)).build())
8589
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(15)).build());
8690

8791
const pieChart = renderPieChart({ seriesSortAttribute });
@@ -97,6 +101,10 @@ describe("The PieChart widget", () => {
97101
seriesSortAttribute.get = jest
98102
.fn()
99103
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(20)).build())
104+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(15)).build())
105+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(20)).build())
106+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(15)).build())
107+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(20)).build())
100108
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(15)).build());
101109

102110
const pieChart = renderPieChart({ seriesSortAttribute, seriesSortOrder: "desc" });
@@ -127,10 +135,21 @@ function setupBasicAttributes(): Partial<PieChartContainerProps> {
127135
const seriesColorAttribute = listExp(() => "name");
128136
seriesColorAttribute.get = jest.fn().mockReturnValueOnce(dynamic("red")).mockReturnValueOnce(dynamic("blue"));
129137

138+
const seriesSortAttribute = new ListAttributeValueBuilder().build();
139+
seriesSortAttribute.get = jest
140+
.fn()
141+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(15)).build())
142+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(20)).build())
143+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(15)).build())
144+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(20)).build())
145+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(15)).build())
146+
.mockReturnValueOnce(new EditableValueBuilder<Big>().withValue(new Big(20)).build());
147+
130148
return {
131149
seriesColorAttribute,
132150
seriesDataSource,
133151
seriesName,
134-
seriesValueAttribute
152+
seriesValueAttribute,
153+
seriesSortAttribute
135154
};
136155
}

packages/pluggableWidgets/pie-doughnut-chart-web/src/hooks/data.ts

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ValueStatus } from "mendix";
1+
import { ObjectItem, ValueStatus } from "mendix";
22
import { useEffect, useMemo, useState } from "react";
33
import { ensure } from "@mendix/pluggable-widgets-tools";
44
import Big from "big.js";
@@ -71,7 +71,7 @@ export const usePieChartDataSeries = ({
7171
tooltipHoverText
7272
]);
7373

74-
const onClick = useMemo(() => (onClickAction ? () => executeAction(onClickAction) : undefined), [onClickAction]);
74+
const onClick = onClickAction ? (item: ObjectItem) => executeAction(onClickAction?.get(item)) : undefined;
7575

7676
return useMemo<ChartWidgetProps["data"]>(
7777
() => [
@@ -87,10 +87,40 @@ export const usePieChartDataSeries = ({
8787
hoverinfo: pieChartData.some(({ itemHoverText }) => itemHoverText !== undefined && itemHoverText !== "")
8888
? "text"
8989
: "none",
90-
dataSourceItems: seriesDataSource.items ?? [],
90+
dataSourceItems: sortDatasourceItems(
91+
seriesDataSource.items ?? [],
92+
seriesSortOrder,
93+
seriesSortAttribute
94+
),
9195
onClick
9296
}
9397
],
94-
[customSeriesOptions, holeRadius, pieChartData, onClick, seriesDataSource.items]
98+
[
99+
customSeriesOptions,
100+
holeRadius,
101+
pieChartData,
102+
onClick,
103+
seriesDataSource.items,
104+
seriesSortAttribute,
105+
seriesSortOrder
106+
]
95107
);
96108
};
109+
110+
function sortDatasourceItems(
111+
items: ObjectItem[],
112+
seriesSortOrder: "asc" | "desc",
113+
seriesSortAttribute: PieChartContainerProps["seriesSortAttribute"]
114+
): ObjectItem[] {
115+
const sortedItems = [...items].sort((firstItem, secondItem) => {
116+
const first = seriesSortAttribute?.get(firstItem).value;
117+
const second = seriesSortAttribute?.get(secondItem).value;
118+
return compareAttrValuesAsc(first, second);
119+
});
120+
121+
if (seriesSortOrder === "desc") {
122+
sortedItems.reverse();
123+
}
124+
125+
return sortedItems;
126+
}

packages/pluggableWidgets/pie-doughnut-chart-web/src/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8" ?>
22
<package xmlns="http://www.mendix.com/package/1.0/">
3-
<clientModule name="PieChart" version="5.1.0" xmlns="http://www.mendix.com/clientModule/1.0/">
3+
<clientModule name="PieChart" version="5.1.1" xmlns="http://www.mendix.com/clientModule/1.0/">
44
<widgetFiles>
55
<widgetFile path="PieChart.xml" />
66
</widgetFiles>

packages/pluggableWidgets/pie-doughnut-chart-web/typings/PieChartProps.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* @author Mendix Widgets Framework Team
55
*/
66
import { ComponentType, CSSProperties, ReactNode } from "react";
7-
import { ActionValue, ListValue, ListAttributeValue, ListExpressionValue } from "mendix";
7+
import { ListValue, ListActionValue, ListAttributeValue, ListExpressionValue } from "mendix";
88
import { Big } from "big.js";
99

1010
export type SeriesSortOrderEnum = "asc" | "desc";
@@ -34,7 +34,7 @@ export interface PieChartContainerProps {
3434
width: number;
3535
heightUnit: HeightUnitEnum;
3636
height: number;
37-
onClickAction?: ActionValue;
37+
onClickAction?: ListActionValue;
3838
enableThemeConfig: boolean;
3939
customLayout: string;
4040
customConfigurations: string;

packages/shared/charts/src/components/ChartView.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ export const ChartView = ({
2929
const handleChartClick = useCallback<NonNullable<PlotParams["onClick"]>>(
3030
event => {
3131
// As this is click handler, this event has single, "clicked" point, so we can destruct.
32-
const [{ curveNumber, pointIndex, pointIndices, pointNumber }] = event.points;
32+
const [{ curveNumber, pointIndex, pointIndices, pointNumber, pointNumbers }] = event.points;
3333
const index = pointIndex ?? pointNumber;
34+
const indices = pointIndices ?? pointNumbers;
35+
const itemIndex = getItemIndex(index, indices);
3436
const { dataSourceItems, onClick } = data[curveNumber];
35-
const itemIndex = getItemIndex(index, pointIndices);
3637
const item = dataSourceItems[itemIndex];
3738
onClick?.(item);
3839
},

0 commit comments

Comments
 (0)