Skip to content

Commit b098ef8

Browse files
authored
DataGrid - The filterType property is reset if client state storing contains no filtering settings (DevExpress#30831)
1 parent 5a33f72 commit b098ef8

File tree

2 files changed

+62
-10
lines changed

2 files changed

+62
-10
lines changed

e2e/testcafe-devextreme/tests/dataGrid/common/stateStoring/stateStoring.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,53 @@ test('DataGrid - Cannot read properties of undefined (reading \'done\') error oc
142142
}).before(async () => {
143143
await createWidget('dxDataGrid', { ...dataGridConfig });
144144
});
145+
146+
test('DataGrid - The filterType property is reset if client state storing contains no filtering settings (T1296608)', async (t) => {
147+
const dataGrid = new DataGrid('#container');
148+
149+
// assert
150+
await t
151+
.expect(dataGrid.isReady())
152+
.ok()
153+
.expect(dataGrid.getDataCell(0, 0).element().innerText)
154+
.eql('1');
155+
}).before(async () => {
156+
await createWidget('dxDataGrid', {
157+
dataSource: [
158+
{ id: 0, textID: '0', text: 'item 0' },
159+
{ id: 1, textID: '1', text: 'item 1' },
160+
],
161+
keyExpr: 'id',
162+
filterSyncEnabled: true,
163+
columns: [
164+
{
165+
dataField: 'id',
166+
caption: 'ID',
167+
dataType: 'string',
168+
},
169+
{
170+
dataField: 'textID',
171+
filterType: 'exclude',
172+
name: 'textID',
173+
dataType: 'string',
174+
filterValues: ['0'],
175+
},
176+
],
177+
stateStoring: {
178+
enabled: true,
179+
type: 'custom',
180+
customLoad() {
181+
return Promise.resolve({
182+
columns: [
183+
{
184+
dataField: 'id',
185+
},
186+
{
187+
dataField: 'textID',
188+
},
189+
],
190+
});
191+
},
192+
},
193+
});
194+
});

packages/devextreme/js/__internal/grids/grid_core/state_storing/m_state_storing.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,22 +71,24 @@ const processLoadState = (that) => {
7171
}
7272
};
7373

74-
const DEFAULT_FILTER_VALUE = null;
75-
7674
const getFilterValue = (that, state) => {
7775
// TODO: getController
7876
const filterSyncController = that.getController('filterSync');
79-
const columnsController = that.getController('columns');
80-
const hasFilterState = state.columns || state.filterValue !== undefined;
77+
if (!filterSyncController) {
78+
return null;
79+
}
8180

82-
if (filterSyncController) {
83-
if (hasFilterState) {
84-
return state.filterValue || filterSyncController.getFilterValueFromColumns(state.columns);
85-
}
86-
return that._initialFilterValue || filterSyncController.getFilterValueFromColumns(columnsController.getColumns());
81+
if (state.filterValue !== undefined) {
82+
return state.filterValue;
83+
}
84+
85+
const filterValueFromColumns = filterSyncController.getFilterValueFromColumns?.(state.columns);
86+
if (filterValueFromColumns?.length > 0) {
87+
return filterValueFromColumns;
8788
}
8889

89-
return DEFAULT_FILTER_VALUE;
90+
const columns = that.getController('columns').getColumns();
91+
return that._initialFilterValue ?? filterSyncController.getFilterValueFromColumns(columns);
9092
};
9193

9294
const rowsView = (Base: ModuleType<RowsView>) => class StateStoringRowsViewExtender extends Base {

0 commit comments

Comments
 (0)