From b6291b4dbced34c746c20ae8423b60b4d5ead2b8 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Mon, 1 Jun 2026 15:24:12 +0800 Subject: [PATCH 01/13] fix --- .../js/__internal/grids/new/grid_core/selection/controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts index aeb452890f66..6e27595121dd 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts @@ -159,7 +159,7 @@ export class SelectionController { const isLoaded = this.dataController.isLoaded.value; if (isLoaded) { - const selectedCardKeys = this.selectedCardKeys.peek(); + const selectedCardKeys = this.selectedCardKeys.value; this.selectCards(selectedCardKeys); } From 3ba92f19359ea3524184e76a1db09806ea7bf3d7 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Mon, 1 Jun 2026 15:31:49 +0800 Subject: [PATCH 02/13] test --- .../selection/controller.integration.test.ts | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.integration.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.integration.test.ts index 46ae9740c078..472c817e89e9 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.integration.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.integration.test.ts @@ -13,6 +13,7 @@ const SELECTORS = { card: '.dx-cardview-card', cardCheckbox: '.dx-checkbox-container', selectAllButton: '[aria-label="Select all"]', + clearSelectionButton: '[aria-label="Clear selection"]', }; const setup = (options: GridCoreOptions = {}): CardView => { @@ -31,6 +32,8 @@ const getCardCheckboxes = (): NodeListOf => document.querySelectorAll(S const getSelectAllButton = (): Element | null => document.querySelector(SELECTORS.selectAllButton); +const getClearSelectionButton = (): Element | null => document.querySelector(SELECTORS.clearSelectionButton); + const checkError = (): void => expect(throwError).toHaveBeenCalledWith('E1042', 'CardView'); jest.mock('@ts/grids/new/grid_core/options_validation/utils', () => ({ @@ -299,3 +302,27 @@ describe('selectAll with filters', () => { expect(cardView.getSelectedCardKeys()).toEqual([1]); }); }); + +describe('clear selection toolbar button', () => { + it('should clear selection after runtime selectedCardKeys option update', () => { + const cardView = setup({ + keyExpr: 'id', + dataSource: [{ id: 1 }, { id: 2 }], + selection: { + mode: 'multiple', + }, + selectedCardKeys: [], + }); + + expect(cardView.getSelectedCardKeys()).toEqual([]); + + cardView.option('selectedCardKeys', [2]); + + expect(cardView.getSelectedCardKeys()).toEqual([2]); + + const clearSelectionButton = getClearSelectionButton(); + clearSelectionButton?.dispatchEvent(new MouseEvent('click')); + + expect(cardView.getSelectedCardKeys()).toEqual([]); + }); +}); From 657da1fb14c5212eb3a32eda1f9307103ae12bae Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Mon, 1 Jun 2026 16:38:27 +0800 Subject: [PATCH 03/13] test fix --- .../selection/controller.integration.test.ts | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.integration.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.integration.test.ts index 472c817e89e9..64742a87903b 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.integration.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.integration.test.ts @@ -178,6 +178,30 @@ describe('when keyExpr is missing', () => { }); }); +describe('clear selection toolbar button', () => { + it('should clear selection after runtime selectedCardKeys option update', () => { + const cardView = setup({ + keyExpr: 'id', + dataSource: [{ id: 1 }, { id: 2 }], + selection: { + mode: 'multiple', + }, + selectedCardKeys: [], + }); + + expect(cardView.getSelectedCardKeys()).toEqual([]); + + cardView.option('selectedCardKeys', [2]); + + expect(cardView.getSelectedCardKeys()).toEqual([2]); + + const clearSelectionButton = getClearSelectionButton(); + clearSelectionButton?.dispatchEvent(new MouseEvent('click')); + + expect(cardView.getSelectedCardKeys()).toEqual([]); + }); +}); + describe('selectAll with filters', () => { it('should select only cards matching filterValue', () => { const cardView = setup({ @@ -302,27 +326,3 @@ describe('selectAll with filters', () => { expect(cardView.getSelectedCardKeys()).toEqual([1]); }); }); - -describe('clear selection toolbar button', () => { - it('should clear selection after runtime selectedCardKeys option update', () => { - const cardView = setup({ - keyExpr: 'id', - dataSource: [{ id: 1 }, { id: 2 }], - selection: { - mode: 'multiple', - }, - selectedCardKeys: [], - }); - - expect(cardView.getSelectedCardKeys()).toEqual([]); - - cardView.option('selectedCardKeys', [2]); - - expect(cardView.getSelectedCardKeys()).toEqual([2]); - - const clearSelectionButton = getClearSelectionButton(); - clearSelectionButton?.dispatchEvent(new MouseEvent('click')); - - expect(cardView.getSelectedCardKeys()).toEqual([]); - }); -}); From b05ffaee60d4291b5287fee0d74fe3f31cb10d58 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Thu, 4 Jun 2026 18:09:54 +0800 Subject: [PATCH 04/13] extra fix --- .../grids/new/grid_core/selection/controller.ts | 10 ++++++---- .../js/__internal/ui/selection/selection.ts | 12 ++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts index 6e27595121dd..85f22e66f521 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts @@ -154,14 +154,16 @@ export class SelectionController { Need to get rid of `selectionHelper.peek()` inside of selectCards() and pass selectionHelper from here */ - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - this.selectionHelper.value; - + const selectionHelper = this.selectionHelper.value; const isLoaded = this.dataController.isLoaded.value; if (isLoaded) { const selectedCardKeys = this.selectedCardKeys.value; + const previousSelectedKeys = selectionHelper?.getSelectedItemKeys() ?? []; + const areKeysEqual = selectionHelper?.areKeysEqual(selectedCardKeys, previousSelectedKeys); - this.selectCards(selectedCardKeys); + if (!areKeysEqual) { + this.selectCards(selectedCardKeys); + } } }); diff --git a/packages/devextreme/js/__internal/ui/selection/selection.ts b/packages/devextreme/js/__internal/ui/selection/selection.ts index cf5ba98cbb3f..e0edc0713740 100644 --- a/packages/devextreme/js/__internal/ui/selection/selection.ts +++ b/packages/devextreme/js/__internal/ui/selection/selection.ts @@ -402,4 +402,16 @@ export default class Selection< loadSelectedItemsWithFilter(): DeferredObj { return this._selectionStrategy.loadSelectedItemsWithFilter(); } + + areKeysEqual(keys1: TKey[], keys2: TKey[]): boolean { + if (keys1.length !== keys2.length) { + return false; + } + for (let i = 0; i < keys1.length; i += 1) { + if (!this._selectionStrategy.equalKeys(keys1[i], keys2[i])) { + return false; + } + } + return true; + } } From 7817a70b76b258d716c2423191e979dcfe499b24 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Thu, 4 Jun 2026 18:10:23 +0800 Subject: [PATCH 05/13] additional test --- .../grid_core/selection/controller.test.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts index 5f47fca4b12d..f55b9717d8b2 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts @@ -42,6 +42,25 @@ describe('SelectionController', () => { selectionController.selectCards([1]); expect(itemsController.items).toMatchSnapshot(); }); + + it('should only be called once when selectedCardKeys are updated', () => { + const { + selectionController, + optionsController, + } = setup({ + keyExpr: 'id', + dataSource: [{ id: 1, value: 'test' }, { id: 2, value: 'test2' }], + selection: { + mode: 'multiple', + }, + }); + + const selectCardsSpy = jest.spyOn(selectionController, 'selectCards'); + + optionsController.option('selectedCardKeys', [1]); + + expect(selectCardsSpy).toHaveBeenCalledTimes(1); + }); }); describe('deselectCards', () => { From 191d1f01eac30d92cb308cf1afcf4d8d326e6303 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Thu, 4 Jun 2026 19:03:42 +0800 Subject: [PATCH 06/13] move fix --- .../new/grid_core/selection/controller.ts | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts index 85f22e66f521..3d04861b2701 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts @@ -154,16 +154,14 @@ export class SelectionController { Need to get rid of `selectionHelper.peek()` inside of selectCards() and pass selectionHelper from here */ - const selectionHelper = this.selectionHelper.value; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions + this.selectionHelper.value; + const isLoaded = this.dataController.isLoaded.value; if (isLoaded) { - const selectedCardKeys = this.selectedCardKeys.value; - const previousSelectedKeys = selectionHelper?.getSelectedItemKeys() ?? []; - const areKeysEqual = selectionHelper?.areKeysEqual(selectedCardKeys, previousSelectedKeys); + const selectedCardKeys = this.selectedCardKeys.peek(); - if (!areKeysEqual) { - this.selectCards(selectedCardKeys); - } + this.selectCards(selectedCardKeys); } }); @@ -172,7 +170,16 @@ export class SelectionController { this.dataController.items.value; // eslint-disable-next-line @typescript-eslint/no-unused-expressions this.dataController.isLoaded.value; - this.updateSelectionToolbarButtons(this.normalizedSelectedCardKeys.value); + + const selectedCardKeys = this.normalizedSelectedCardKeys.value; + this.updateSelectionToolbarButtons(selectedCardKeys); + + const selectionHelper = this.selectionHelper.peek(); + const previousSelectedKeys = selectionHelper?.getSelectedItemKeys() ?? []; + const areKeysEqual = selectionHelper?.areKeysEqual(selectedCardKeys, previousSelectedKeys); + if (!areKeysEqual) { + this.selectCards(selectedCardKeys); + } }); } From 4949de886dc222c769d4f9c6ca4dc458f10841c5 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Fri, 5 Jun 2026 14:59:53 +0800 Subject: [PATCH 07/13] Revert "move fix" This reverts commit e9c48d5d7f5e99a126db3651b9052ab3da74cae4. --- .../new/grid_core/selection/controller.ts | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts index 3d04861b2701..85f22e66f521 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts @@ -154,14 +154,16 @@ export class SelectionController { Need to get rid of `selectionHelper.peek()` inside of selectCards() and pass selectionHelper from here */ - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - this.selectionHelper.value; - + const selectionHelper = this.selectionHelper.value; const isLoaded = this.dataController.isLoaded.value; if (isLoaded) { - const selectedCardKeys = this.selectedCardKeys.peek(); + const selectedCardKeys = this.selectedCardKeys.value; + const previousSelectedKeys = selectionHelper?.getSelectedItemKeys() ?? []; + const areKeysEqual = selectionHelper?.areKeysEqual(selectedCardKeys, previousSelectedKeys); - this.selectCards(selectedCardKeys); + if (!areKeysEqual) { + this.selectCards(selectedCardKeys); + } } }); @@ -170,16 +172,7 @@ export class SelectionController { this.dataController.items.value; // eslint-disable-next-line @typescript-eslint/no-unused-expressions this.dataController.isLoaded.value; - - const selectedCardKeys = this.normalizedSelectedCardKeys.value; - this.updateSelectionToolbarButtons(selectedCardKeys); - - const selectionHelper = this.selectionHelper.peek(); - const previousSelectedKeys = selectionHelper?.getSelectedItemKeys() ?? []; - const areKeysEqual = selectionHelper?.areKeysEqual(selectedCardKeys, previousSelectedKeys); - if (!areKeysEqual) { - this.selectCards(selectedCardKeys); - } + this.updateSelectionToolbarButtons(this.normalizedSelectedCardKeys.value); }); } From 2fa1ff06636f4ce986950a7b4b3c2b90ab2c02ae Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Fri, 5 Jun 2026 15:52:35 +0800 Subject: [PATCH 08/13] fix --- .../grids/new/grid_core/selection/controller.ts | 9 ++++----- .../js/__internal/ui/selection/selection.ts | 14 ++++---------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts index 85f22e66f521..7fb81d3e6ff9 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts @@ -157,12 +157,11 @@ export class SelectionController { const selectionHelper = this.selectionHelper.value; const isLoaded = this.dataController.isLoaded.value; if (isLoaded) { - const selectedCardKeys = this.selectedCardKeys.value; - const previousSelectedKeys = selectionHelper?.getSelectedItemKeys() ?? []; - const areKeysEqual = selectionHelper?.areKeysEqual(selectedCardKeys, previousSelectedKeys); + const keys = this.selectedCardKeys.value; + const allKeysHaveData = keys.every((key) => selectionHelper?.isKeyHaveData(key)); - if (!areKeysEqual) { - this.selectCards(selectedCardKeys); + if (!allKeysHaveData) { + this.selectCards(keys); } } }); diff --git a/packages/devextreme/js/__internal/ui/selection/selection.ts b/packages/devextreme/js/__internal/ui/selection/selection.ts index e0edc0713740..9091e839afe0 100644 --- a/packages/devextreme/js/__internal/ui/selection/selection.ts +++ b/packages/devextreme/js/__internal/ui/selection/selection.ts @@ -403,15 +403,9 @@ export default class Selection< return this._selectionStrategy.loadSelectedItemsWithFilter(); } - areKeysEqual(keys1: TKey[], keys2: TKey[]): boolean { - if (keys1.length !== keys2.length) { - return false; - } - for (let i = 0; i < keys1.length; i += 1) { - if (!this._selectionStrategy.equalKeys(keys1[i], keys2[i])) { - return false; - } - } - return true; + isKeyHaveData(key: TKey): boolean { + const { equalKeys } = this._selectionStrategy; + const { selectedItems, keyOf } = this.options; + return selectedItems.some((item) => equalKeys(keyOf(item), key)); } } From 266bf25e9faba84ea77ec650ff5e40ac8e178540 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Fri, 5 Jun 2026 16:25:10 +0800 Subject: [PATCH 09/13] fix --- packages/devextreme/js/__internal/ui/selection/selection.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/devextreme/js/__internal/ui/selection/selection.ts b/packages/devextreme/js/__internal/ui/selection/selection.ts index 9091e839afe0..bd00907ddc72 100644 --- a/packages/devextreme/js/__internal/ui/selection/selection.ts +++ b/packages/devextreme/js/__internal/ui/selection/selection.ts @@ -404,8 +404,7 @@ export default class Selection< } isKeyHaveData(key: TKey): boolean { - const { equalKeys } = this._selectionStrategy; const { selectedItems, keyOf } = this.options; - return selectedItems.some((item) => equalKeys(keyOf(item), key)); + return selectedItems.some((item) => this._selectionStrategy.equalKeys(keyOf(item), key)); } } From d69efa469772bebfea042e40d5b36b60974a4d51 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Fri, 5 Jun 2026 16:34:21 +0800 Subject: [PATCH 10/13] extend test --- .../grids/new/grid_core/selection/controller.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts index f55b9717d8b2..042eeff4b9cf 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts @@ -60,6 +60,10 @@ describe('SelectionController', () => { optionsController.option('selectedCardKeys', [1]); expect(selectCardsSpy).toHaveBeenCalledTimes(1); + + optionsController.option('selectedCardKeys', []); + + expect(selectCardsSpy).toHaveBeenCalledTimes(2); }); }); From 0330c76ef6e04e63189bdd9b0eb2195adbf53a64 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Fri, 5 Jun 2026 16:59:22 +0800 Subject: [PATCH 11/13] fix --- .../grids/new/grid_core/selection/controller.ts | 4 ++-- .../devextreme/js/__internal/ui/selection/selection.ts | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts index 7fb81d3e6ff9..b7c2852b1ec4 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts @@ -158,9 +158,9 @@ export class SelectionController { const isLoaded = this.dataController.isLoaded.value; if (isLoaded) { const keys = this.selectedCardKeys.value; - const allKeysHaveData = keys.every((key) => selectionHelper?.isKeyHaveData(key)); + const hasMatchingSelectedItems = selectionHelper?.hasMatchingSelectedItems(keys); - if (!allKeysHaveData) { + if (!hasMatchingSelectedItems) { this.selectCards(keys); } } diff --git a/packages/devextreme/js/__internal/ui/selection/selection.ts b/packages/devextreme/js/__internal/ui/selection/selection.ts index bd00907ddc72..30edbb0b8f32 100644 --- a/packages/devextreme/js/__internal/ui/selection/selection.ts +++ b/packages/devextreme/js/__internal/ui/selection/selection.ts @@ -403,8 +403,14 @@ export default class Selection< return this._selectionStrategy.loadSelectedItemsWithFilter(); } - isKeyHaveData(key: TKey): boolean { + hasMatchingSelectedItems(keys: TKey[]): boolean { const { selectedItems, keyOf } = this.options; - return selectedItems.some((item) => this._selectionStrategy.equalKeys(keyOf(item), key)); + if (keys.length === selectedItems.length) { + return keys.every((key) => selectedItems.some((item) => { + const isKeysEqual = this._selectionStrategy.equalKeys(keyOf(item), key); + return isKeysEqual; + })); + } + return false; } } From c54f8be3e67925fc67d7a7e6baa212d6b3ec1c13 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Fri, 5 Jun 2026 17:42:58 +0800 Subject: [PATCH 12/13] rename method --- .../js/__internal/grids/new/grid_core/selection/controller.ts | 4 ++-- packages/devextreme/js/__internal/ui/selection/selection.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts index b7c2852b1ec4..d16e8036c40f 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts @@ -158,9 +158,9 @@ export class SelectionController { const isLoaded = this.dataController.isLoaded.value; if (isLoaded) { const keys = this.selectedCardKeys.value; - const hasMatchingSelectedItems = selectionHelper?.hasMatchingSelectedItems(keys); + const selectedItemsMatchAllKeys = selectionHelper?.selectedItemsMatchAllKeys(keys); - if (!hasMatchingSelectedItems) { + if (!selectedItemsMatchAllKeys) { this.selectCards(keys); } } diff --git a/packages/devextreme/js/__internal/ui/selection/selection.ts b/packages/devextreme/js/__internal/ui/selection/selection.ts index 30edbb0b8f32..862f97094bfd 100644 --- a/packages/devextreme/js/__internal/ui/selection/selection.ts +++ b/packages/devextreme/js/__internal/ui/selection/selection.ts @@ -403,7 +403,7 @@ export default class Selection< return this._selectionStrategy.loadSelectedItemsWithFilter(); } - hasMatchingSelectedItems(keys: TKey[]): boolean { + selectedItemsMatchAllKeys(keys: TKey[]): boolean { const { selectedItems, keyOf } = this.options; if (keys.length === selectedItems.length) { return keys.every((key) => selectedItems.some((item) => { From 8d06844ae3affbbf35bf8a060f76fd66808381c3 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Fri, 5 Jun 2026 17:54:49 +0800 Subject: [PATCH 13/13] rename method v2 --- .../js/__internal/grids/new/grid_core/selection/controller.ts | 4 ++-- packages/devextreme/js/__internal/ui/selection/selection.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts index d16e8036c40f..98ef90b6d003 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.ts @@ -158,9 +158,9 @@ export class SelectionController { const isLoaded = this.dataController.isLoaded.value; if (isLoaded) { const keys = this.selectedCardKeys.value; - const selectedItemsMatchAllKeys = selectionHelper?.selectedItemsMatchAllKeys(keys); + const hasExactSelectedItems = selectionHelper?.hasExactSelectedItems(keys); - if (!selectedItemsMatchAllKeys) { + if (!hasExactSelectedItems) { this.selectCards(keys); } } diff --git a/packages/devextreme/js/__internal/ui/selection/selection.ts b/packages/devextreme/js/__internal/ui/selection/selection.ts index 862f97094bfd..20a62ae1a6a2 100644 --- a/packages/devextreme/js/__internal/ui/selection/selection.ts +++ b/packages/devextreme/js/__internal/ui/selection/selection.ts @@ -403,7 +403,7 @@ export default class Selection< return this._selectionStrategy.loadSelectedItemsWithFilter(); } - selectedItemsMatchAllKeys(keys: TKey[]): boolean { + hasExactSelectedItems(keys: TKey[]): boolean { const { selectedItems, keyOf } = this.options; if (keys.length === selectedItems.length) { return keys.every((key) => selectedItems.some((item) => {