Skip to content

Commit d386c13

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

File tree

5 files changed

+90
-4
lines changed

5 files changed

+90
-4
lines changed

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
@@ -1259,7 +1259,6 @@ export class ColumnsController extends modules.Controller {
12591259

12601260
public updateSortingGrouping(dataSource, fromDataSource?) {
12611261
const that = this;
1262-
let sortParameters;
12631262
let isColumnsChanged;
12641263
const updateSortGroupParameterIndexes = function (columns, sortParameters, indexParameterName) {
12651264
each(columns, (index, column) => {
@@ -1296,10 +1295,14 @@ export class ColumnsController extends modules.Controller {
12961295
});
12971296
};
12981297
if (dataSource) {
1299-
sortParameters = gridCoreUtils.normalizeSortingInfo(dataSource.sort());
1298+
const sortParameters = gridCoreUtils.normalizeSortingInfo(dataSource.sort());
13001299
const groupParameters = gridCoreUtils.normalizeSortingInfo(dataSource.group());
13011300
const columnsGroupParameters = that.getGroupDataSourceParameters();
13021301
const columnsSortParameters = that.getSortDataSourceParameters();
1302+
const changeTypes = this._columnChanges?.changeTypes;
1303+
const sortingChanged = !gridCoreUtils.equalSortParameters(sortParameters, columnsSortParameters);
1304+
const needToApplySortingFromDataSource = fromDataSource && !changeTypes?.sorting;
1305+
const needToApplyGroupingFromDataSource = fromDataSource && !changeTypes?.grouping;
13031306
const groupingChanged = !gridCoreUtils.equalSortParameters(groupParameters, columnsGroupParameters, true);
13041307
const groupExpandingChanged = !groupingChanged && !gridCoreUtils.equalSortParameters(groupParameters, columnsGroupParameters);
13051308

@@ -1315,7 +1318,7 @@ export class ColumnsController extends modules.Controller {
13151318
assignColumns(that, createColumnsFromOptions(that, that._columns));
13161319
}
13171320

1318-
if ((fromDataSource || (!columnsGroupParameters && !that._hasUserState)) && (groupingChanged || groupExpandingChanged)) {
1321+
if ((needToApplyGroupingFromDataSource || (!columnsGroupParameters && !that._hasUserState)) && (groupingChanged || groupExpandingChanged)) {
13191322
/// #DEBUG
13201323
that.__groupingUpdated = true;
13211324
/// #ENDDEBUG
@@ -1326,7 +1329,8 @@ export class ColumnsController extends modules.Controller {
13261329
isColumnsChanged = true;
13271330
}
13281331
}
1329-
if ((fromDataSource || (!columnsSortParameters && !that._hasUserState)) && !gridCoreUtils.equalSortParameters(sortParameters, columnsSortParameters)) {
1332+
1333+
if ((needToApplySortingFromDataSource || (!columnsSortParameters && !that._hasUserState)) && sortingChanged) {
13301334
/// #DEBUG
13311335
that.__sortingUpdated = true;
13321336
/// #ENDDEBUG
5.13 KB
Loading

packages/devextreme/testing/testcafe/tests/dataGrid/grouping/grouping.ts

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

packages/devextreme/testing/testcafe/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+
}));

0 commit comments

Comments
 (0)