From 78ab8efefdcfeca9e5bb4e7a005ef529677eabb4 Mon Sep 17 00:00:00 2001 From: Rahman Date: Thu, 22 Oct 2026 11:42:05 +0200 Subject: [PATCH 1/2] chore(data-widgets): bump version to 3.11.8 --- packages/modules/data-widgets/package.json | 2 +- .../datagrid-date-filter-web/package.json | 2 +- .../datagrid-date-filter-web/src/package.xml | 2 +- .../datagrid-dropdown-filter-web/package.json | 2 +- .../src/package.xml | 2 +- .../datagrid-number-filter-web/package.json | 2 +- .../src/package.xml | 2 +- .../datagrid-text-filter-web/package.json | 2 +- .../datagrid-text-filter-web/src/package.xml | 2 +- .../datagrid-web/package.json | 2 +- .../datagrid-web/src/package.xml | 2 +- .../dropdown-sort-web/package.json | 2 +- .../dropdown-sort-web/src/package.xml | 2 +- .../pluggableWidgets/gallery-web/package.json | 2 +- .../gallery-web/src/package.xml | 2 +- .../selection-helper-web/package.json | 2 +- .../selection-helper-web/src/package.xml | 2 +- .../tree-node-web/package.json | 2 +- .../__tests__/repro-stuck-spinner.spec.ts | 61 +++++++++++++++++++ .../tree-node-web/src/package.xml | 2 +- 20 files changed, 80 insertions(+), 19 deletions(-) create mode 100644 packages/pluggableWidgets/tree-node-web/src/components/v2/hooks/__tests__/repro-stuck-spinner.spec.ts diff --git a/packages/modules/data-widgets/package.json b/packages/modules/data-widgets/package.json index 4d229e0695..08471361dd 100644 --- a/packages/modules/data-widgets/package.json +++ b/packages/modules/data-widgets/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/data-widgets", "moduleName": "Data Widgets", - "version": "3.11.7", + "version": "3.11.8", "description": "Data Widgets module containing a set of widgets to display data in various ways.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/datagrid-date-filter-web/package.json b/packages/pluggableWidgets/datagrid-date-filter-web/package.json index e7e566ea7f..3c48e0ee72 100644 --- a/packages/pluggableWidgets/datagrid-date-filter-web/package.json +++ b/packages/pluggableWidgets/datagrid-date-filter-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/datagrid-date-filter-web", "widgetName": "DatagridDateFilter", - "version": "3.11.7", + "version": "3.11.8", "description": "Filter Data Grid 2 rows by date or date range, using a calendar picker.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/datagrid-date-filter-web/src/package.xml b/packages/pluggableWidgets/datagrid-date-filter-web/src/package.xml index c388c60219..5c40423f96 100644 --- a/packages/pluggableWidgets/datagrid-date-filter-web/src/package.xml +++ b/packages/pluggableWidgets/datagrid-date-filter-web/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/packages/pluggableWidgets/datagrid-dropdown-filter-web/package.json b/packages/pluggableWidgets/datagrid-dropdown-filter-web/package.json index c04244a0ca..3757e07200 100644 --- a/packages/pluggableWidgets/datagrid-dropdown-filter-web/package.json +++ b/packages/pluggableWidgets/datagrid-dropdown-filter-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/datagrid-dropdown-filter-web", "widgetName": "DatagridDropdownFilter", - "version": "3.11.7", + "version": "3.11.8", "description": "Filter Data Grid 2 rows by selecting values from a drop-down list.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/package.xml b/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/package.xml index 5ca8672fea..d03d2041d3 100644 --- a/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/package.xml +++ b/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/packages/pluggableWidgets/datagrid-number-filter-web/package.json b/packages/pluggableWidgets/datagrid-number-filter-web/package.json index ef460ac7ac..1fbbf6dcdb 100644 --- a/packages/pluggableWidgets/datagrid-number-filter-web/package.json +++ b/packages/pluggableWidgets/datagrid-number-filter-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/datagrid-number-filter-web", "widgetName": "DatagridNumberFilter", - "version": "3.11.7", + "version": "3.11.8", "description": "Filter Data Grid 2 rows by numeric values, supporting equals, greater than, and less than operations.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/datagrid-number-filter-web/src/package.xml b/packages/pluggableWidgets/datagrid-number-filter-web/src/package.xml index 1f6e3e3107..507e6aefc6 100644 --- a/packages/pluggableWidgets/datagrid-number-filter-web/src/package.xml +++ b/packages/pluggableWidgets/datagrid-number-filter-web/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/packages/pluggableWidgets/datagrid-text-filter-web/package.json b/packages/pluggableWidgets/datagrid-text-filter-web/package.json index 3b5be30b4b..e55b262ecb 100644 --- a/packages/pluggableWidgets/datagrid-text-filter-web/package.json +++ b/packages/pluggableWidgets/datagrid-text-filter-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/datagrid-text-filter-web", "widgetName": "DatagridTextFilter", - "version": "3.11.7", + "version": "3.11.8", "description": "Filter Data Grid 2 rows by text input, supporting contains, starts with, and equals operations.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/datagrid-text-filter-web/src/package.xml b/packages/pluggableWidgets/datagrid-text-filter-web/src/package.xml index 094066c107..4bea177d42 100644 --- a/packages/pluggableWidgets/datagrid-text-filter-web/src/package.xml +++ b/packages/pluggableWidgets/datagrid-text-filter-web/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/packages/pluggableWidgets/datagrid-web/package.json b/packages/pluggableWidgets/datagrid-web/package.json index c648af308a..403cd2a4fa 100644 --- a/packages/pluggableWidgets/datagrid-web/package.json +++ b/packages/pluggableWidgets/datagrid-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/datagrid-web", "widgetName": "Datagrid", - "version": "3.11.7", + "version": "3.11.8", "description": "A powerful, flexible grid for displaying, sorting, and editing data collections in Mendix web apps.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/datagrid-web/src/package.xml b/packages/pluggableWidgets/datagrid-web/src/package.xml index 444dd12c61..90b8793ed4 100644 --- a/packages/pluggableWidgets/datagrid-web/src/package.xml +++ b/packages/pluggableWidgets/datagrid-web/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/packages/pluggableWidgets/dropdown-sort-web/package.json b/packages/pluggableWidgets/dropdown-sort-web/package.json index eb68cb1d33..f472e162ad 100644 --- a/packages/pluggableWidgets/dropdown-sort-web/package.json +++ b/packages/pluggableWidgets/dropdown-sort-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/dropdown-sort-web", "widgetName": "DropdownSort", - "version": "3.11.7", + "version": "3.11.8", "description": "Adds sorting functionality to Gallery widget.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/dropdown-sort-web/src/package.xml b/packages/pluggableWidgets/dropdown-sort-web/src/package.xml index f4996d7d36..88dc2cc88a 100644 --- a/packages/pluggableWidgets/dropdown-sort-web/src/package.xml +++ b/packages/pluggableWidgets/dropdown-sort-web/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/packages/pluggableWidgets/gallery-web/package.json b/packages/pluggableWidgets/gallery-web/package.json index 75697dc376..2a1d6b049e 100644 --- a/packages/pluggableWidgets/gallery-web/package.json +++ b/packages/pluggableWidgets/gallery-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/gallery-web", "widgetName": "Gallery", - "version": "3.11.7", + "version": "3.11.8", "description": "A flexible gallery widget that renders columns, rows and layouts.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/gallery-web/src/package.xml b/packages/pluggableWidgets/gallery-web/src/package.xml index 7b7dc7b483..865782d4da 100644 --- a/packages/pluggableWidgets/gallery-web/src/package.xml +++ b/packages/pluggableWidgets/gallery-web/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/packages/pluggableWidgets/selection-helper-web/package.json b/packages/pluggableWidgets/selection-helper-web/package.json index f0e9ccc9ba..b600692ba4 100644 --- a/packages/pluggableWidgets/selection-helper-web/package.json +++ b/packages/pluggableWidgets/selection-helper-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/selection-helper-web", "widgetName": "SelectionHelper", - "version": "3.11.7", + "version": "3.11.8", "description": "Makes it easier for users to select multiple items in Gallery widget.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/selection-helper-web/src/package.xml b/packages/pluggableWidgets/selection-helper-web/src/package.xml index 48611d3c6f..4acc9a772f 100644 --- a/packages/pluggableWidgets/selection-helper-web/src/package.xml +++ b/packages/pluggableWidgets/selection-helper-web/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/packages/pluggableWidgets/tree-node-web/package.json b/packages/pluggableWidgets/tree-node-web/package.json index 5fb79405d4..0204d540f0 100644 --- a/packages/pluggableWidgets/tree-node-web/package.json +++ b/packages/pluggableWidgets/tree-node-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/tree-node-web", "widgetName": "TreeNode", - "version": "3.11.7", + "version": "3.11.8", "description": "A Mendix pluggable widget to display a tree view structure.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/tree-node-web/src/components/v2/hooks/__tests__/repro-stuck-spinner.spec.ts b/packages/pluggableWidgets/tree-node-web/src/components/v2/hooks/__tests__/repro-stuck-spinner.spec.ts new file mode 100644 index 0000000000..4658ae377d --- /dev/null +++ b/packages/pluggableWidgets/tree-node-web/src/components/v2/hooks/__tests__/repro-stuck-spinner.spec.ts @@ -0,0 +1,61 @@ +// TEMPORARY triage repro — not for merge. +import { renderHook } from "@testing-library/react"; +import { ObjectItem } from "mendix"; +import { TreeNodeState } from "../../../common/TreeNodeState"; +import { TreeConfigRef, useIncrementalTreeData } from "../useIncrementalTreeData"; + +function makeItem(id: string): ObjectItem { + return { id } as ObjectItem; +} + +function makeConfig(parentMap: Record, startExpanded: boolean): TreeConfigRef { + return { + headerType: "text", + headerCaption: { get: (item: ObjectItem) => ({ status: "available", value: String(item.id) }) } as any, + headerContent: undefined, + parentAssociation: { + id: "parent", + get: (item: ObjectItem) => { + const parentId = parentMap[String(item.id)]; + return { status: "available", value: parentId ? makeItem(parentId) : undefined }; + } + } as any, + startExpanded + }; +} + +describe("REPRO stuck spinner v2", () => { + it("keeps every node LOADING when the datasource delivers items exactly once", () => { + const config = makeConfig({ root: undefined, child: "root" }, true); + const items = [makeItem("root"), makeItem("child")]; + const { result } = renderHook(() => useIncrementalTreeData(items, config)); + + // Data is present... + expect(result.current[0].id).toBe("root"); + expect(result.current[0].children.map(c => c.id)).toEqual(["child"]); + // ...but the state never leaves LOADING -> spinner instead of chevron, body rendered collapsed. + expect(result.current[0].treeNodeState).toBe(TreeNodeState.LOADING); + expect(result.current[0].children[0].treeNodeState).toBe(TreeNodeState.LOADING); + }); + + it("falls back to LOADING for the whole tree after a refresh that returns new object ids", () => { + const config = makeConfig({ root: undefined, child: "root", "root#2": undefined, "child#2": "root#2" }, true); + const { result, rerender } = renderHook( + ({ items }: { items: ObjectItem[] }) => useIncrementalTreeData(items, config), + { initialProps: { items: [makeItem("root"), makeItem("child")] } } + ); + + // second update carrying the same ids clears LOADING (the happy path) + rerender({ items: [makeItem("root"), makeItem("child")] }); + expect(result.current[0].treeNodeState).toBe(TreeNodeState.EXPANDED); + + // search refresh: microflow returns freshly created objects -> new GUIDs + rerender({ items: [makeItem("root#2"), makeItem("child#2")] }); + + const root = result.current[0]; + expect(root.id).toBe("root#2"); + expect(root.children.map(c => c.id)).toEqual(["child#2"]); + // stuck: no further datasource update arrives, so this spinner never clears + expect(root.treeNodeState).toBe(TreeNodeState.LOADING); + }); +}); diff --git a/packages/pluggableWidgets/tree-node-web/src/package.xml b/packages/pluggableWidgets/tree-node-web/src/package.xml index 067c5df849..4348f33ec3 100644 --- a/packages/pluggableWidgets/tree-node-web/src/package.xml +++ b/packages/pluggableWidgets/tree-node-web/src/package.xml @@ -1,6 +1,6 @@ - + From a2773ac8b58900eaca0b961e57cf1fbd40e2d379 Mon Sep 17 00:00:00 2001 From: Content Teams Date: Thu, 22 Oct 2026 09:56:26 +0000 Subject: [PATCH 2/2] chore(@mendix/data-widgets): update changelog --- packages/modules/data-widgets/CHANGELOG.md | 14 ++++++++++++++ .../pluggableWidgets/datagrid-web/CHANGELOG.md | 2 ++ packages/pluggableWidgets/gallery-web/CHANGELOG.md | 2 ++ 3 files changed, 18 insertions(+) diff --git a/packages/modules/data-widgets/CHANGELOG.md b/packages/modules/data-widgets/CHANGELOG.md index 793009e2cf..109423e20a 100644 --- a/packages/modules/data-widgets/CHANGELOG.md +++ b/packages/modules/data-widgets/CHANGELOG.md @@ -6,6 +6,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +## [3.11.8] DataWidgets - 2026-10-22 + +### Datagrid + +#### Fixed + +- We fixed an issue where clicking a label inside a custom content column, such as the label of a checkbox, triggered the double click action with a single click. + +### Gallery + +#### Fixed + +- We fixed an issue where clicking a label inside the item content, such as the label of a checkbox, triggered the double click action with a single click. + ## [3.11.7] DataWidgets - 2026-10-02 ### Fixed diff --git a/packages/pluggableWidgets/datagrid-web/CHANGELOG.md b/packages/pluggableWidgets/datagrid-web/CHANGELOG.md index 2aacdacc03..ee035b5bde 100644 --- a/packages/pluggableWidgets/datagrid-web/CHANGELOG.md +++ b/packages/pluggableWidgets/datagrid-web/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +## [3.11.8] - 2026-10-22 + ### Fixed - We fixed an issue where clicking a label inside a custom content column, such as the label of a checkbox, triggered the double click action with a single click. diff --git a/packages/pluggableWidgets/gallery-web/CHANGELOG.md b/packages/pluggableWidgets/gallery-web/CHANGELOG.md index 8b781149aa..197ba57260 100644 --- a/packages/pluggableWidgets/gallery-web/CHANGELOG.md +++ b/packages/pluggableWidgets/gallery-web/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +## [3.11.8] - 2026-10-22 + ### Fixed - We fixed an issue where clicking a label inside the item content, such as the label of a checkbox, triggered the double click action with a single click.