From 1a7870979437f11023f48a6b03836b172e1e77ee Mon Sep 17 00:00:00 2001 From: Rahman Date: Tue, 25 Nov 2025 09:19:09 +0100 Subject: [PATCH 1/2] fix(combobox-web): remove redundant selection set --- packages/pluggableWidgets/combobox-web/CHANGELOG.md | 4 ++++ packages/pluggableWidgets/combobox-web/package.json | 2 +- .../helpers/Database/DatabaseSingleSelectionSelector.ts | 9 --------- packages/pluggableWidgets/combobox-web/src/package.xml | 2 +- 4 files changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/pluggableWidgets/combobox-web/CHANGELOG.md b/packages/pluggableWidgets/combobox-web/CHANGELOG.md index ae917dccb7..a485f3aced 100644 --- a/packages/pluggableWidgets/combobox-web/CHANGELOG.md +++ b/packages/pluggableWidgets/combobox-web/CHANGELOG.md @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +### Fixed + +- We fixed an issue with on change event firing unexpectedly when datasource type is set to database. + ## [2.6.2] - 2025-10-29 ### Fixed diff --git a/packages/pluggableWidgets/combobox-web/package.json b/packages/pluggableWidgets/combobox-web/package.json index 424bf49113..5a02f50a99 100644 --- a/packages/pluggableWidgets/combobox-web/package.json +++ b/packages/pluggableWidgets/combobox-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/combobox-web", "widgetName": "Combobox", - "version": "2.6.2", + "version": "2.6.3", "description": "Configurable Combo box widget with suggestions and autocomplete.", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseSingleSelectionSelector.ts b/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseSingleSelectionSelector.ts index 55944a48fe..1cfa24173a 100644 --- a/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseSingleSelectionSelector.ts +++ b/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseSingleSelectionSelector.ts @@ -133,15 +133,6 @@ export class DatabaseSingleSelectionSelector { - return targetAttribute && _valuesIsEqual(targetAttribute?.value, this.values.get(option)); - }); - if (objectId) { - this.selection.setSelection(this.options._optionToValue(objectId)); - } - } } setValue(objectId: string | null): void { diff --git a/packages/pluggableWidgets/combobox-web/src/package.xml b/packages/pluggableWidgets/combobox-web/src/package.xml index d789ec8abc..0b0bca36f8 100644 --- a/packages/pluggableWidgets/combobox-web/src/package.xml +++ b/packages/pluggableWidgets/combobox-web/src/package.xml @@ -1,6 +1,6 @@ - + From fb74915ecf9eeaa094dfea0dd6cf00a563c58c01 Mon Sep 17 00:00:00 2001 From: Rahman Date: Mon, 1 Dec 2025 15:55:10 +0100 Subject: [PATCH 2/2] fix(combobox-web): remove the onChange binding to selector --- .../combobox-web/src/Combobox.xml | 2 +- .../Database/DatabaseMultiSelectionSelector.ts | 6 +++++- .../Database/DatabaseSingleSelectionSelector.ts | 15 ++++++++++++++- .../combobox-web/typings/ComboboxProps.d.ts | 1 + 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/pluggableWidgets/combobox-web/src/Combobox.xml b/packages/pluggableWidgets/combobox-web/src/Combobox.xml index 274e3ba9af..05a78ddd7e 100644 --- a/packages/pluggableWidgets/combobox-web/src/Combobox.xml +++ b/packages/pluggableWidgets/combobox-web/src/Combobox.xml @@ -50,7 +50,7 @@ Selectable objects - + Selection type diff --git a/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseMultiSelectionSelector.ts b/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseMultiSelectionSelector.ts index 6d083ab8b8..0595dd0995 100644 --- a/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseMultiSelectionSelector.ts +++ b/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseMultiSelectionSelector.ts @@ -1,5 +1,6 @@ import { ThreeStateCheckBoxEnum } from "@mendix/widget-plugin-component-kit/ThreeStateCheckBox"; -import { ListAttributeValue, ObjectItem, SelectionMultiValue } from "mendix"; +import { ActionValue, ListAttributeValue, ObjectItem, SelectionMultiValue } from "mendix"; +import { executeAction } from "@mendix/widget-plugin-platform/framework/execute-action"; import { ComboboxContainerProps, LoadingTypeEnum, @@ -33,6 +34,7 @@ export class DatabaseMultiSelectionSelector implements MultiSelector { protected lazyLoader: LazyLoadProvider = new LazyLoadProvider(); private _objectsMap: Map = new Map(); selectedItemsSorting: SelectedItemsSortingEnum = "none"; + private onChangeEvent?: ActionValue; constructor(props: { filterInputDebounceInterval: number }) { this.caption = new DatabaseCaptionsProvider(this._objectsMap); @@ -124,6 +126,7 @@ export class DatabaseMultiSelectionSelector implements MultiSelector { this.selection.setKeepSelection?.(() => true); this.selectionMethod = props.selectionMethod; this.selectedItemsSorting = props.selectedItemsSorting; + this.onChangeEvent = props.onChangeDatabaseEvent; this.currentId = sortSelectedItems( this.selection?.selection, @@ -154,5 +157,6 @@ export class DatabaseMultiSelectionSelector implements MultiSelector { if (newValue) { this.selection?.setSelection(newValue); } + executeAction(this.onChangeEvent); } } diff --git a/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseSingleSelectionSelector.ts b/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseSingleSelectionSelector.ts index 1cfa24173a..f138ee1ddf 100644 --- a/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseSingleSelectionSelector.ts +++ b/packages/pluggableWidgets/combobox-web/src/helpers/Database/DatabaseSingleSelectionSelector.ts @@ -1,4 +1,5 @@ -import { EditableValue, ListAttributeValue, ObjectItem, SelectionSingleValue } from "mendix"; +import { ActionValue, EditableValue, ListAttributeValue, ObjectItem, SelectionSingleValue } from "mendix"; +import { executeAction } from "@mendix/widget-plugin-platform/framework/execute-action"; import { ComboboxContainerProps, LoadingTypeEnum, @@ -32,6 +33,7 @@ export class DatabaseSingleSelectionSelector { + return targetAttribute && _valuesIsEqual(targetAttribute?.value, this.values.get(option)); + }); + if (objectId) { + this.selection.setSelection(this.options._optionToValue(objectId)); + } + } } setValue(objectId: string | null): void { @@ -142,5 +154,6 @@ export class DatabaseSingleSelectionSelector; readOnlyStyle: ReadOnlyStyleEnum; onChangeEvent?: ActionValue; + onChangeDatabaseEvent?: ActionValue; onEnterEvent?: ActionValue; onLeaveEvent?: ActionValue; onChangeFilterInputEvent?: ActionValue<{ filterInput: Option }>;