Skip to content

Commit edfd1c2

Browse files
authored
DataGrid: Fix UI update if values change in the header filter and collatorOptions are used (T1273020) (#29368)
Co-authored-by: Alyar <>
1 parent bc4e356 commit edfd1c2

File tree

13 files changed

+162
-9
lines changed

13 files changed

+162
-9
lines changed
1.96 KB
Loading
2.05 KB
Loading
1.96 KB
Loading
2.05 KB
Loading
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import { createScreenshotsComparer } from 'devextreme-screenshot-comparer';
2+
import DataGrid from 'devextreme-testcafe-models/dataGrid';
3+
import url from '../../helpers/getPageUrl';
4+
import { createWidget } from '../../helpers/createWidget';
5+
6+
fixture.disablePageReloads`Filtering`
7+
.page(url(__dirname, '../../container.html'));
8+
9+
const GRID_CONTAINER = '#container';
10+
11+
test('Data should be filtered if True is selected via the filter method when case sensitive is enabled', async (t) => {
12+
// arrange
13+
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
14+
const dataGrid = new DataGrid(GRID_CONTAINER);
15+
16+
// act
17+
await dataGrid.apiFilter(['text', '=', 'true']);
18+
19+
// assert
20+
await t.expect(dataGrid.isReady()).ok();
21+
22+
await takeScreenshot('filter-method-with-case-sensitive-1.png', dataGrid.element);
23+
24+
// act
25+
await dataGrid.apiFilter(['text', '=', 'True']);
26+
27+
// assert
28+
await t.expect(dataGrid.isReady()).ok();
29+
30+
await takeScreenshot('filter-method-with-case-sensitive-2.png', dataGrid.element);
31+
32+
await t
33+
.expect(compareResults.isValid())
34+
.ok(compareResults.errorMessages());
35+
}).before(async () => createWidget('dxDataGrid', {
36+
dataSource: {
37+
store: [
38+
{ ID: 1, text: 'true' },
39+
{ ID: 2, text: 'True' },
40+
],
41+
langParams: {
42+
locale: 'en-US',
43+
collatorOptions: {
44+
sensitivity: 'case',
45+
},
46+
},
47+
},
48+
keyExpr: 'ID',
49+
showBorders: true,
50+
}));
51+
52+
test('Data should be filtered if True is selected via the option method when case sensitive is enabled', async (t) => {
53+
// arrange
54+
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
55+
const dataGrid = new DataGrid(GRID_CONTAINER);
56+
57+
// assert
58+
await t.expect(dataGrid.isReady()).ok();
59+
60+
await takeScreenshot('filtering-via-option-method-with-case-sensitive-1.png', dataGrid.element);
61+
62+
// act
63+
await dataGrid.option('columns', ['ID', { dataField: 'text', filterValue: 'True' }]);
64+
65+
// assert
66+
await t.expect(dataGrid.isReady()).ok();
67+
68+
await takeScreenshot('filtering-via-option-method-with-case-sensitive-2.png', dataGrid.element);
69+
70+
await t
71+
.expect(compareResults.isValid())
72+
.ok(compareResults.errorMessages());
73+
}).before(async () => createWidget('dxDataGrid', {
74+
dataSource: {
75+
store: [
76+
{ ID: 1, text: 'true' },
77+
{ ID: 2, text: 'True' },
78+
],
79+
langParams: {
80+
locale: 'en-US',
81+
collatorOptions: {
82+
sensitivity: 'case',
83+
},
84+
},
85+
},
86+
keyExpr: 'ID',
87+
showBorders: true,
88+
columns: ['ID', {
89+
dataField: 'text',
90+
filterValue: 'true',
91+
}],
92+
}));
2.27 KB
Loading
2.32 KB
Loading

e2e/testcafe-devextreme/tests/dataGrid/headerFilter/headerFilter.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,3 +234,52 @@ test('DataGrid - Column Header filter does not properly work if the column capti
234234
'FirstName',
235235
],
236236
}));
237+
238+
test('Data should be filtered if True is selected in the header filter when case sensitive is enabled (T1273020)', async (t) => {
239+
// arrange
240+
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
241+
const dataGrid = new DataGrid(GRID_CONTAINER);
242+
const headerCell = dataGrid.getHeaders().getHeaderRow(0).getHeaderCell(1);
243+
const filterIconElement = headerCell.getFilterIcon();
244+
const headerFilter = new HeaderFilter();
245+
const buttons = headerFilter.getButtons();
246+
const list = headerFilter.getList();
247+
248+
// act
249+
await t
250+
.click(filterIconElement)
251+
.click(list.getItem(0).element) // Select first item with value 'true'
252+
.click(buttons.nth(0)); // Click OK
253+
254+
await takeScreenshot('T1273020-header-filter-with-case-sensitive-1.png', dataGrid.element);
255+
256+
// act
257+
await t
258+
.click(filterIconElement)
259+
.click(list.getItem(0).element) // Deselect first item with value 'true'
260+
.click(list.getItem(1).element) // Select second item with value 'True'
261+
.click(buttons.nth(0)); // Click OK
262+
263+
await takeScreenshot('T1273020-header-filter-with-case-sensitive-2.png', dataGrid.element);
264+
265+
// assert
266+
await t
267+
.expect(compareResults.isValid())
268+
.ok(compareResults.errorMessages());
269+
}).before(async () => createWidget('dxDataGrid', {
270+
dataSource: {
271+
store: [
272+
{ ID: 1, text: 'true' },
273+
{ ID: 2, text: 'True' },
274+
],
275+
langParams: {
276+
locale: 'en-US',
277+
collatorOptions: {
278+
sensitivity: 'case',
279+
},
280+
},
281+
},
282+
keyExpr: 'ID',
283+
showBorders: true,
284+
headerFilter: { visible: true },
285+
}));

packages/devextreme/js/__internal/grids/grid_core/columns_controller/m_columns_controller.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1238,6 +1238,8 @@ export class ColumnsController extends modules.Controller {
12381238
}
12391239

12401240
private _updateChanges(dataSource, parameters) {
1241+
const langParams = dataSource?.loadOptions?.()?.langParams;
1242+
12411243
if (dataSource) {
12421244
this.updateColumnDataTypes(dataSource);
12431245
this._dataSourceApplied = true;
@@ -1251,7 +1253,7 @@ export class ColumnsController extends modules.Controller {
12511253
}
12521254

12531255
if (this._dataController
1254-
&& !gridCoreUtils.equalFilterParameters(parameters.filtering, this._dataController.getCombinedFilter())) {
1256+
&& !gridCoreUtils.equalFilterParameters(parameters.filtering, this._dataController.getCombinedFilter(), langParams)) {
12551257
updateColumnChanges(this, 'filtering');
12561258
}
12571259
updateColumnChanges(this, 'columns');

packages/devextreme/js/__internal/grids/grid_core/data_controller/m_data_controller.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,15 +1310,16 @@ export class DataController extends DataHelperMixin(modules.Controller) {
13101310

13111311
private filter(filterExpr) {
13121312
const dataSource = this._dataSource;
1313-
const filter = dataSource && dataSource.filter();
1313+
const filter = dataSource?.filter();
1314+
const langParams = dataSource?.loadOptions?.()?.langParams;
13141315

13151316
if (arguments.length === 0) {
13161317
return filter;
13171318
}
13181319

13191320
filterExpr = arguments.length > 1 ? Array.prototype.slice.call(arguments, 0) : filterExpr;
13201321

1321-
if (gridCoreUtils.equalFilterParameters(filter, filterExpr)) {
1322+
if (gridCoreUtils.equalFilterParameters(filter, filterExpr, langParams)) {
13221323
return;
13231324
}
13241325
if (dataSource) {

0 commit comments

Comments
 (0)