Skip to content

Commit 10455e4

Browse files
authored
DataGrid – Header filters show "No data to display" when "not and" or "not or" operations are used in the filter panel (T1291737) (DevExpress#29931)
1 parent d8dc6de commit 10455e4

File tree

5 files changed

+67
-0
lines changed

5 files changed

+67
-0
lines changed

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,3 +358,33 @@ test('Header filter search input loses focus on first key in datetime columns (T
358358
},
359359
}],
360360
}));
361+
362+
test('DataGrid – Header filters show "No data to display" when "not and" or "not or" operations are used in the filter panel (T1291737)', async (t) => {
363+
const dataGrid = new DataGrid(GRID_CONTAINER);
364+
const headerFilterButton = dataGrid.getHeaders()
365+
.getHeaderRow(0)
366+
.getHeaderCell(0)
367+
.getFilterIcon();
368+
const headerFilter = new HeaderFilter();
369+
const listCount = headerFilter.getList().getItems();
370+
371+
await dataGrid.isReady();
372+
await t.click(headerFilterButton);
373+
374+
await t
375+
.expect(listCount.count)
376+
.eql(9);
377+
}).before(async () => createWidget('dxDataGrid', {
378+
dataSource: getData(10, 1),
379+
keyExpr: 'field_0',
380+
filterValue: [
381+
'!',
382+
[['field_0', '=', 'val_0_0']],
383+
],
384+
filterPanel: {
385+
visible: true,
386+
},
387+
headerFilter: {
388+
visible: true,
389+
},
390+
}));

packages/devextreme/js/__internal/filter_builder/m_utils.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,8 @@ export function removeFieldConditionsFromFilter(filter, dataField) {
779779

780780
function syncConditionIntoGroup(filter, addedFilter, canPush) {
781781
const result: any[] = [];
782+
const isNegation = isNegationGroup(filter);
783+
782784
filter.forEach((item) => {
783785
if (isCondition(item)) {
784786
if (isMatchedCondition(item, addedFilter[0])) {
@@ -805,6 +807,10 @@ function syncConditionIntoGroup(filter, addedFilter, canPush) {
805807
result.push(addedFilter);
806808
}
807809

810+
if (isNegation) {
811+
return ['!', result.length === 1 ? result[0] : result];
812+
}
813+
808814
return result.length === 1 ? result[0] : result;
809815
}
810816

packages/devextreme/js/__internal/grids/new/grid_core/filtering/header_filter/__snapshots__/view.intergration.test.tsx.snap renamed to packages/devextreme/js/__internal/grids/new/grid_core/filtering/header_filter/__snapshots__/view.integration.test.tsx.snap

File renamed without changes.

packages/devextreme/js/__internal/grids/new/grid_core/filtering/header_filter/options.integration.test.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
afterEach, describe, expect, it,
44
} from '@jest/globals';
55
import $ from '@js/core/renderer';
6+
import type { Filter } from '@ts/grids/grid_core/data_controller/m_data_controller';
67
import CardView from '@ts/grids/new/card_view/widget';
78
import type {
89
HeaderFilterSearchColumnOptions,
@@ -270,6 +271,36 @@ describe('Options', () => {
270271

271272
expect(popupContentElement).toMatchSnapshot();
272273
});
274+
275+
it.each<{
276+
filterValue: Filter; result: number;
277+
}>([
278+
{
279+
filterValue: ['!', [['A', '=', 'A_0']]], result: 4,
280+
},
281+
])('should render correct list total count if filterValue has negation', ({ filterValue, result }) => {
282+
const cardView = setup({
283+
dataSource: [
284+
{ A: 'A_0' }, { A: 'A_1' }, { A: 'A_2' }, { A: 'A_3' }, { A: 'A_4' },
285+
],
286+
columns: [{
287+
dataField: 'A',
288+
}],
289+
filterValue,
290+
headerFilter: {
291+
visible: true,
292+
},
293+
filterSyncEnabled: true,
294+
filterPanel: { visible: true },
295+
});
296+
297+
openHeaderFilterPopup(cardView);
298+
const { element: popupContentElement } = getPopup();
299+
const { instance } = getPopupList(popupContentElement);
300+
const listCount = instance._selection.options.totalCount();
301+
302+
expect(listCount).toStrictEqual(result);
303+
});
273304
});
274305

275306
describe('Column.HeaderFilter', () => {

packages/devextreme/js/__internal/grids/new/grid_core/filtering/header_filter/view.intergration.test.tsx renamed to packages/devextreme/js/__internal/grids/new/grid_core/filtering/header_filter/view.integration.test.tsx

File renamed without changes.

0 commit comments

Comments
 (0)