From e559fed5d0a82a62baf6776275639f0d7ff80998 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Tue, 3 Mar 2026 17:59:54 +0800 Subject: [PATCH 01/11] test --- .../dataGrid/common/markup/noDataText.ts | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts index b0114896f015..d6bf94b8062e 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts @@ -1,5 +1,6 @@ import { createScreenshotsComparer } from 'devextreme-screenshot-comparer'; import DataGrid from 'devextreme-testcafe-models/dataGrid'; +import List from 'devextreme-testcafe-models/list'; import url from '../../../../helpers/getPageUrl'; import { createWidget } from '../../../../helpers/createWidget'; import { testScreenshot } from '../../../../helpers/themeUtils'; @@ -8,6 +9,7 @@ fixture.disablePageReloads`No Data` .page(url(__dirname, '../../../container.html')); const GRID_CONTAINER = '#container'; +const OVERLAY_SELECTOR = '.dx-overlay-wrapper'; test('The noDataText element should be centered (T1178289)', async (t) => { const { takeScreenshot, compareResults } = createScreenshotsComparer(t); @@ -31,3 +33,50 @@ test('The noDataText element should be centered (T1178289)', async (t) => { }, }); }); + +test('The noDataText element should be rendered when a lookup column is filtered (T1293839)', async (t) => { + // arrange + const { takeScreenshot, compareResults } = createScreenshotsComparer(t); + const dataGrid = new DataGrid(GRID_CONTAINER); + const filterRow = dataGrid.getHeaders().getFilterRow(); + const nameFilterCell = filterRow.getFilterCell(0); + const nameFilterEditor = nameFilterCell.getEditorInput(); + const lookupFilterCell = filterRow.getFilterCell(1); + + // act + await t.click(lookupFilterCell.element); + const lookupList = new List(OVERLAY_SELECTOR); + const lookupItem = lookupList.getItem(1); + await t.click(lookupItem.element); + + await t.typeText(nameFilterEditor.element, 'test'); + + await dataGrid.isReady(); + + // assert + await testScreenshot(t, takeScreenshot, 'T1293839-grid-no-data-text-rendered.png', { element: dataGrid.element }); + await t + .expect(compareResults.isValid()) + .ok(compareResults.errorMessages()); +}).before(async () => { + await createWidget('dxDataGrid', { + dataSource: [ + { ID: 1, Name: 'John', Lookup: 1 }, + { ID: 2, Name: 'Jane', Lookup: 2 }, + ], + keyExpr: 'ID', + columns: ['Name', { + dataField: 'Lookup', + lookup: { + dataSource: [ + { ID: 1, Text: 'Item 1' }, + { ID: 2, Text: 'Item 2' }, + ], + valueExpr: 'ID', + displayExpr: 'Text', + }, + }], + showBorders: true, + filterRow: { visible: true }, + }); +}); From a0da72cfaac3757b8e346bb844989a33678d298e Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Tue, 3 Mar 2026 18:22:47 +0800 Subject: [PATCH 02/11] update test --- .../dataGrid/common/markup/noDataText.ts | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts index d6bf94b8062e..7c0325815f8e 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts @@ -11,29 +11,6 @@ fixture.disablePageReloads`No Data` const GRID_CONTAINER = '#container'; const OVERLAY_SELECTOR = '.dx-overlay-wrapper'; -test('The noDataText element should be centered (T1178289)', async (t) => { - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - const dataGrid = new DataGrid(GRID_CONTAINER); - - await dataGrid.option('dataSource', []); - - await testScreenshot(t, takeScreenshot, 'grid-no-data-text-position.png', { element: dataGrid.element }); - await t - .expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => { - await createWidget('dxDataGrid', { - columns: ['column1', 'column2', 'column3', 'column4', 'column5'], - showBorders: true, - columnMinWidth: 200, - width: 600, - stateStoring: { - enabled: true, - storageKey: 'testStorageKey', - }, - }); -}); - test('The noDataText element should be rendered when a lookup column is filtered (T1293839)', async (t) => { // arrange const { takeScreenshot, compareResults } = createScreenshotsComparer(t); @@ -48,12 +25,13 @@ test('The noDataText element should be rendered when a lookup column is filtered const lookupList = new List(OVERLAY_SELECTOR); const lookupItem = lookupList.getItem(1); await t.click(lookupItem.element); - await t.typeText(nameFilterEditor.element, 'test'); - await dataGrid.isReady(); - // assert + await t + .expect(dataGrid.isReady()) + .ok(); + await testScreenshot(t, takeScreenshot, 'T1293839-grid-no-data-text-rendered.png', { element: dataGrid.element }); await t .expect(compareResults.isValid()) @@ -80,3 +58,26 @@ test('The noDataText element should be rendered when a lookup column is filtered filterRow: { visible: true }, }); }); + +test('The noDataText element should be centered (T1178289)', async (t) => { + const { takeScreenshot, compareResults } = createScreenshotsComparer(t); + const dataGrid = new DataGrid(GRID_CONTAINER); + + await dataGrid.option('dataSource', []); + + await testScreenshot(t, takeScreenshot, 'grid-no-data-text-position.png', { element: dataGrid.element }); + await t + .expect(compareResults.isValid()) + .ok(compareResults.errorMessages()); +}).before(async () => { + await createWidget('dxDataGrid', { + columns: ['column1', 'column2', 'column3', 'column4', 'column5'], + showBorders: true, + columnMinWidth: 200, + width: 600, + stateStoring: { + enabled: true, + storageKey: 'testStorageKey', + }, + }); +}); From f502f01f3405ad1b4230868d7e369e6a85868bf7 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Tue, 3 Mar 2026 18:23:08 +0800 Subject: [PATCH 03/11] fix --- .../js/__internal/grids/grid_core/m_utils.ts | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts b/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts index f48397602623..bb772a1eb8a0 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts @@ -211,8 +211,6 @@ export default { const noDataClass = that.addWidgetPrefix(NO_DATA_CLASS); let noDataElement = $element.find(`.${noDataClass}`).last(); - const isVisible = this._dataController.isEmpty(); - const isLoading = this._dataController.isLoading(); if (!noDataElement.length) { noDataElement = $('') @@ -223,14 +221,17 @@ export default { noDataElement.appendTo($element); } - if (isVisible && !isLoading) { - noDataElement - .removeClass('dx-hidden') - .text(that._getNoDataText()); - } else { - noDataElement - .addClass('dx-hidden'); - } + this._dataController.waitReady().done(() => { + const isVisible = this._dataController.isEmpty(); + if (isVisible) { + noDataElement + .removeClass('dx-hidden') + .text(that._getNoDataText()); + } else { + noDataElement + .addClass('dx-hidden'); + } + }); }, renderLoadPanel($element, $container, isLocalStore) { From 8e763ca26a0b2a8e197ed26945238256a9ce2e2f Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Tue, 3 Mar 2026 19:53:15 +0800 Subject: [PATCH 04/11] update test --- .../tests/dataGrid/common/markup/noDataText.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts index 7c0325815f8e..85171e6c6bf7 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/markup/noDataText.ts @@ -56,6 +56,9 @@ test('The noDataText element should be rendered when a lookup column is filtered }], showBorders: true, filterRow: { visible: true }, + onEditorPreparing(e) { + e.updateValueTimeout = 0; + }, }); }); From 3a1c68ec594f0ccdfc83eef3124c041d4281a018 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Tue, 3 Mar 2026 20:21:59 +0800 Subject: [PATCH 05/11] etalon --- ...no-data-text-rendered (fluent.blue.light).png | Bin 0 -> 6552 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 e2e/testcafe-devextreme/tests/dataGrid/common/markup/etalons/T1293839-grid-no-data-text-rendered (fluent.blue.light).png diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/markup/etalons/T1293839-grid-no-data-text-rendered (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/dataGrid/common/markup/etalons/T1293839-grid-no-data-text-rendered (fluent.blue.light).png new file mode 100644 index 0000000000000000000000000000000000000000..6b8fd751c6005f5ff50de06856966c65ef14e1bd GIT binary patch literal 6552 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 v?zs=2{=fO3guvp^5gnbqKP;eu Date: Tue, 3 Mar 2026 20:22:31 +0800 Subject: [PATCH 06/11] update fix --- .../js/__internal/grids/grid_core/m_utils.ts | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts b/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts index bb772a1eb8a0..1fcd89383ef5 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts @@ -211,6 +211,7 @@ export default { const noDataClass = that.addWidgetPrefix(NO_DATA_CLASS); let noDataElement = $element.find(`.${noDataClass}`).last(); + const isVisible = this._dataController.isEmpty(); if (!noDataElement.length) { noDataElement = $('') @@ -221,17 +222,14 @@ export default { noDataElement.appendTo($element); } - this._dataController.waitReady().done(() => { - const isVisible = this._dataController.isEmpty(); - if (isVisible) { - noDataElement - .removeClass('dx-hidden') - .text(that._getNoDataText()); - } else { - noDataElement - .addClass('dx-hidden'); - } - }); + if (isVisible) { + noDataElement + .removeClass('dx-hidden') + .text(that._getNoDataText()); + } else { + noDataElement + .addClass('dx-hidden'); + } }, renderLoadPanel($element, $container, isLocalStore) { From d7997b1a9d03df45eebbdf7b07dcd157e1270f14 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Wed, 4 Mar 2026 20:30:13 +0800 Subject: [PATCH 07/11] Revert "update fix" This reverts commit 9ffb359f30c42ec99fc47742a6ed2b97d75a8dfb. --- .../js/__internal/grids/grid_core/m_utils.ts | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts b/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts index 1fcd89383ef5..bb772a1eb8a0 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts @@ -211,7 +211,6 @@ export default { const noDataClass = that.addWidgetPrefix(NO_DATA_CLASS); let noDataElement = $element.find(`.${noDataClass}`).last(); - const isVisible = this._dataController.isEmpty(); if (!noDataElement.length) { noDataElement = $('') @@ -222,14 +221,17 @@ export default { noDataElement.appendTo($element); } - if (isVisible) { - noDataElement - .removeClass('dx-hidden') - .text(that._getNoDataText()); - } else { - noDataElement - .addClass('dx-hidden'); - } + this._dataController.waitReady().done(() => { + const isVisible = this._dataController.isEmpty(); + if (isVisible) { + noDataElement + .removeClass('dx-hidden') + .text(that._getNoDataText()); + } else { + noDataElement + .addClass('dx-hidden'); + } + }); }, renderLoadPanel($element, $container, isLocalStore) { From b0f6d6d28e5a18b770b5fa88a98f92253f22addb Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Wed, 4 Mar 2026 20:31:55 +0800 Subject: [PATCH 08/11] fix --- .../js/__internal/grids/grid_core/filter/m_filter_row.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts b/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts index 9d6e2ffd439d..a819f471e4cc 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts @@ -729,7 +729,9 @@ const columnHeadersView = (Base: ModuleType) => class ColumnH super._handleDataChanged.apply(this, arguments); if (e.operationTypes?.filtering || e.operationTypes?.fullReload) { - this.updateLookupDataSource(e.operationTypes?.filtering || lastLoadOptions?.filter); + this._dataController.waitReady().then(() => { + this.updateLookupDataSource(e.operationTypes?.filtering || lastLoadOptions?.filter); + }); } } From 7d238f0440411feac8c899baf17331059dc9eddc Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Wed, 4 Mar 2026 20:36:43 +0800 Subject: [PATCH 09/11] Revert "fix" This reverts commit b7836c119f300d388caacadc81441d0fadbecd7c. --- .../js/__internal/grids/grid_core/m_utils.ts | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts b/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts index bb772a1eb8a0..f48397602623 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/m_utils.ts @@ -211,6 +211,8 @@ export default { const noDataClass = that.addWidgetPrefix(NO_DATA_CLASS); let noDataElement = $element.find(`.${noDataClass}`).last(); + const isVisible = this._dataController.isEmpty(); + const isLoading = this._dataController.isLoading(); if (!noDataElement.length) { noDataElement = $('') @@ -221,17 +223,14 @@ export default { noDataElement.appendTo($element); } - this._dataController.waitReady().done(() => { - const isVisible = this._dataController.isEmpty(); - if (isVisible) { - noDataElement - .removeClass('dx-hidden') - .text(that._getNoDataText()); - } else { - noDataElement - .addClass('dx-hidden'); - } - }); + if (isVisible && !isLoading) { + noDataElement + .removeClass('dx-hidden') + .text(that._getNoDataText()); + } else { + noDataElement + .addClass('dx-hidden'); + } }, renderLoadPanel($element, $container, isLocalStore) { From f200c9c191a3cbd6b90a3a100ac6ace598a26d04 Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Thu, 5 Mar 2026 15:11:42 +0800 Subject: [PATCH 10/11] Revert "fix" This reverts commit 9a233a74cb6e9aad336b0c89895502398d072a2f. --- .../js/__internal/grids/grid_core/filter/m_filter_row.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts b/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts index a819f471e4cc..9d6e2ffd439d 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts @@ -729,9 +729,7 @@ const columnHeadersView = (Base: ModuleType) => class ColumnH super._handleDataChanged.apply(this, arguments); if (e.operationTypes?.filtering || e.operationTypes?.fullReload) { - this._dataController.waitReady().then(() => { - this.updateLookupDataSource(e.operationTypes?.filtering || lastLoadOptions?.filter); - }); + this.updateLookupDataSource(e.operationTypes?.filtering || lastLoadOptions?.filter); } } From e66ecca9bbe095442d3e8e18c36d1a5e6c8e089e Mon Sep 17 00:00:00 2001 From: Mark Allen Ramirez Date: Thu, 5 Mar 2026 15:12:02 +0800 Subject: [PATCH 11/11] fix --- .../js/__internal/grids/grid_core/views/m_rows_view.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/devextreme/js/__internal/grids/grid_core/views/m_rows_view.ts b/packages/devextreme/js/__internal/grids/grid_core/views/m_rows_view.ts index 90320c2c1edd..41d02b517cbe 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/views/m_rows_view.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/views/m_rows_view.ts @@ -148,6 +148,9 @@ export class RowsView extends ColumnsView { this._contentChanges = []; this._dataController.loadingChanged.add((isLoading, messageText) => { this.setLoading(isLoading, messageText); + if (!isLoading) { + this.renderNoDataText(); + } }); this._dataController.dataSourceChanged.add(() => {