Skip to content

Commit f268b71

Browse files
authored
DataGrid: Fix sorting when it and filtering are changed at the same time (T1237863) (#28532)
Co-authored-by: Alyar <>
1 parent 8ea8ffb commit f268b71

File tree

5 files changed

+90
-4
lines changed

5 files changed

+90
-4
lines changed
5.13 KB
Loading

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

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,3 +381,42 @@ test('DataGrid loses grouping after the expandAll method if a grouped column has
381381
},
382382
],
383383
}));
384+
385+
test('Grouping and filtering should be applied correctly when they change at runtime (T1237863)', async (t) => {
386+
const dataGrid = new DataGrid('#container');
387+
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
388+
389+
await t.expect(dataGrid.isReady()).ok();
390+
391+
await dataGrid.option({
392+
'columns[2].groupIndex': 0,
393+
filterValue: ['room', '=', '1'],
394+
});
395+
396+
await t.expect(dataGrid.isReady()).ok();
397+
398+
await takeScreenshot('T1237863_datagrid-grouping_and_filtering.png', dataGrid.element);
399+
400+
await t
401+
.expect(compareResults.isValid())
402+
.ok(compareResults.errorMessages());
403+
}).before(() => createWidget('dxDataGrid', {
404+
dataSource: [
405+
{
406+
ID: 1,
407+
FirstName: 'Bob',
408+
room: 1,
409+
},
410+
{
411+
ID: 2,
412+
FirstName: 'Alex',
413+
room: 2,
414+
},
415+
{
416+
ID: 3,
417+
FirstName: 'John',
418+
room: 1,
419+
},
420+
],
421+
keyExpr: 'ID',
422+
}));
4.8 KB
Loading

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,46 @@ test('Multiple sorting alphabetical icons should be correct in Fluent Theme (T12
8787
});
8888
},
8989
).after(async () => { await changeTheme(Themes.genericLight); });
90+
91+
test('Sorting and filtering should be applied correctly when they change at runtime (T1237863)', async (t) => {
92+
const dataGrid = new DataGrid('#container');
93+
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
94+
95+
await t.expect(dataGrid.isReady()).ok();
96+
97+
await dataGrid.option({
98+
'columns[1].sortIndex': 0,
99+
'columns[1].sortOrder': 'desc',
100+
filterValue: ['room', '=', '1'],
101+
});
102+
103+
await t.expect(dataGrid.isReady()).ok();
104+
105+
await takeScreenshot('T1237863_datagrid-sorting_and_filtering.png', dataGrid.element);
106+
107+
await t
108+
.expect(compareResults.isValid())
109+
.ok(compareResults.errorMessages());
110+
}).before(() => createWidget('dxDataGrid', {
111+
dataSource: [
112+
{
113+
ID: 1,
114+
FirstName: 'Bob',
115+
room: 1,
116+
},
117+
{
118+
ID: 2,
119+
FirstName: 'Alex',
120+
room: 2,
121+
},
122+
{
123+
ID: 3,
124+
FirstName: 'John',
125+
room: 1,
126+
},
127+
],
128+
keyExpr: 'ID',
129+
sorting: {
130+
mode: 'multiple',
131+
},
132+
}));

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,7 +1267,6 @@ export class ColumnsController extends modules.Controller {
12671267

12681268
public updateSortingGrouping(dataSource, fromDataSource?) {
12691269
const that = this;
1270-
let sortParameters;
12711270
let isColumnsChanged;
12721271
const updateSortGroupParameterIndexes = function (columns, sortParameters, indexParameterName) {
12731272
each(columns, (index, column) => {
@@ -1304,10 +1303,14 @@ export class ColumnsController extends modules.Controller {
13041303
});
13051304
};
13061305
if (dataSource) {
1307-
sortParameters = gridCoreUtils.normalizeSortingInfo(dataSource.sort());
1306+
const sortParameters = gridCoreUtils.normalizeSortingInfo(dataSource.sort());
13081307
const groupParameters = gridCoreUtils.normalizeSortingInfo(dataSource.group());
13091308
const columnsGroupParameters = that.getGroupDataSourceParameters();
13101309
const columnsSortParameters = that.getSortDataSourceParameters();
1310+
const changeTypes = this._columnChanges?.changeTypes;
1311+
const sortingChanged = !gridCoreUtils.equalSortParameters(sortParameters, columnsSortParameters);
1312+
const needToApplySortingFromDataSource = fromDataSource && !changeTypes?.sorting;
1313+
const needToApplyGroupingFromDataSource = fromDataSource && !changeTypes?.grouping;
13111314
const groupingChanged = !gridCoreUtils.equalSortParameters(groupParameters, columnsGroupParameters, true);
13121315
const groupExpandingChanged = !groupingChanged && !gridCoreUtils.equalSortParameters(groupParameters, columnsGroupParameters);
13131316

@@ -1323,7 +1326,7 @@ export class ColumnsController extends modules.Controller {
13231326
assignColumns(that, createColumnsFromOptions(that, that._columns));
13241327
}
13251328

1326-
if ((fromDataSource || (!columnsGroupParameters && !that._hasUserState)) && (groupingChanged || groupExpandingChanged)) {
1329+
if ((needToApplyGroupingFromDataSource || (!columnsGroupParameters && !that._hasUserState)) && (groupingChanged || groupExpandingChanged)) {
13271330
/// #DEBUG
13281331
that.__groupingUpdated = true;
13291332
/// #ENDDEBUG
@@ -1334,7 +1337,8 @@ export class ColumnsController extends modules.Controller {
13341337
isColumnsChanged = true;
13351338
}
13361339
}
1337-
if ((fromDataSource || (!columnsSortParameters && !that._hasUserState)) && !gridCoreUtils.equalSortParameters(sortParameters, columnsSortParameters)) {
1340+
1341+
if ((needToApplySortingFromDataSource || (!columnsSortParameters && !that._hasUserState)) && sortingChanged) {
13381342
/// #DEBUG
13391343
that.__sortingUpdated = true;
13401344
/// #ENDDEBUG

0 commit comments

Comments
 (0)