From 04dcf94da8bc20bcb99994fb420756a19e166797 Mon Sep 17 00:00:00 2001 From: IBarakov Date: Tue, 6 Oct 2020 10:49:14 +0300 Subject: [PATCH 1/6] fix(esf): don't duplicate records in esf menu when filteringIgnoreCase is true --- .../excel-style/grid.excel-style-filtering.component.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts index 38fa9c41fb5..83010155304 100644 --- a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts +++ b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts @@ -599,6 +599,14 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy { this.uniqueValues.forEach(element => { if (element !== undefined && element !== null && element !== '') { + const listDataLabels = this.listData.map(el => el.label.toLowerCase()); + + if (this.column.dataType === DataType.String && + this.column.filteringIgnoreCase && + listDataLabels.indexOf(element.toLowerCase()) !== -1) { + return; + } + const filterListItem = new FilterListItem(); if (this.column.filteringExpressionsTree) { if (shouldUpdateSelection) { From 96e6c6fbfe508a1e6473ddfbbfec1adcd5a22e2c Mon Sep 17 00:00:00 2001 From: IBarakov Date: Tue, 6 Oct 2020 12:45:36 +0300 Subject: [PATCH 2/6] fix(esf): add new tests + fix old tests --- .../grid.excel-style-filtering.component.ts | 5 ++-- .../lib/grids/grid/grid-filtering-ui.spec.ts | 27 +++++++++++++++++++ .../src/lib/test-utils/grid-samples.spec.ts | 2 +- .../lib/test-utils/sample-test-data.spec.ts | 4 +-- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts index 83010155304..bd941e40d31 100644 --- a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts +++ b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts @@ -599,11 +599,10 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy { this.uniqueValues.forEach(element => { if (element !== undefined && element !== null && element !== '') { - const listDataLabels = this.listData.map(el => el.label.toLowerCase()); - if (this.column.dataType === DataType.String && this.column.filteringIgnoreCase && - listDataLabels.indexOf(element.toLowerCase()) !== -1) { + this.listData.length > 0 && + this.listData.map(el => el.label.toLowerCase()).indexOf(element.toLowerCase()) !== -1) { return; } diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts index eac67af0c08..a2f9899c48b 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts @@ -4344,6 +4344,33 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix, searchComponent); expect(listItems.length).toBe(0, 'incorrect rendered list items count'); })); + + it('Should ignore duplicate records when column\'\s filteringIgnoreCase is true', fakeAsync(() => { + const column = grid.getColumnByName('AnotherField'); + expect(column.filteringIgnoreCase).toBeTrue(); + + GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'AnotherField'); + tick(100); + fix.detectChanges(); + + const searchComponent = GridFunctions.getExcelStyleSearchComponent(fix); + const listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix, searchComponent); + expect(listItems.length).toBe(3, 'incorrect rendered list items count'); + })); + + it('Should not ignore duplicate records when column\'\s filteringIgnoreCase is false', fakeAsync(() => { + const column = grid.getColumnByName('AnotherField'); + column.filteringIgnoreCase = false; + expect(column.filteringIgnoreCase).toBeFalse(); + + GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'AnotherField'); + tick(100); + fix.detectChanges(); + + const searchComponent = GridFunctions.getExcelStyleSearchComponent(fix); + const listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix, searchComponent); + expect(listItems.length).toBe(5, 'incorrect rendered list items count'); + })); }); describe('Templates: ', () => { diff --git a/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts b/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts index e7365ef3045..22c4e01ebd8 100644 --- a/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts +++ b/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts @@ -998,7 +998,7 @@ export class CustomFilter extends IgxFilteringOperand { - ` diff --git a/projects/igniteui-angular/src/lib/test-utils/sample-test-data.spec.ts b/projects/igniteui-angular/src/lib/test-utils/sample-test-data.spec.ts index 71da91a09e8..1a2eef04bfc 100644 --- a/projects/igniteui-angular/src/lib/test-utils/sample-test-data.spec.ts +++ b/projects/igniteui-angular/src/lib/test-utils/sample-test-data.spec.ts @@ -1515,7 +1515,7 @@ export class SampleTestData { ProductName: 'Some other item with Script', ReleaseDate: SampleTestData.timeGenerator.timedelta(SampleTestData.today, 'day', 1), Released: null, - AnotherField: 'a' + AnotherField: 'Custom' }, { Downloads: 0, @@ -1523,7 +1523,7 @@ export class SampleTestData { ProductName: null, ReleaseDate: SampleTestData.timeGenerator.timedelta(SampleTestData.today, 'month', 1), Released: true, - AnotherField: 'a' + AnotherField: 'custoM' }, { Downloads: 1000, From 03e94a21237e4d9b5440b82e4aadce5605e07502 Mon Sep 17 00:00:00 2001 From: IBarakov Date: Thu, 8 Oct 2020 15:55:40 +0300 Subject: [PATCH 3/6] fix(esf): improve how column values are generated --- .../grid.excel-style-filtering.component.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts index bd941e40d31..162e002a8e4 100644 --- a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts +++ b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts @@ -494,7 +494,15 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy { } private generateUniqueValues(columnValues: any[]) { - this.uniqueValues = Array.from(new Set(columnValues)); + if (this.column.dataType === DataType.String && this.column.filteringIgnoreCase) { + const filteredUniqueValues = columnValues.map(s => + s.toLowerCase()).reduce((map, val, i) => map.get(val) ? map : map.set(val, columnValues[i]), + new Map); + + this.uniqueValues = Array.from(filteredUniqueValues.values()); + } else { + this.uniqueValues = Array.from(new Set(columnValues)); + } } private generateFilterValues(isDateColumn: boolean = false) { @@ -599,13 +607,6 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy { this.uniqueValues.forEach(element => { if (element !== undefined && element !== null && element !== '') { - if (this.column.dataType === DataType.String && - this.column.filteringIgnoreCase && - this.listData.length > 0 && - this.listData.map(el => el.label.toLowerCase()).indexOf(element.toLowerCase()) !== -1) { - return; - } - const filterListItem = new FilterListItem(); if (this.column.filteringExpressionsTree) { if (shouldUpdateSelection) { From 4a086874b063f9fba075c329147984d61f3b08a6 Mon Sep 17 00:00:00 2001 From: IBarakov Date: Fri, 9 Oct 2020 10:39:55 +0300 Subject: [PATCH 4/6] fix(esf): improve how column values are generated --- .../excel-style/grid.excel-style-filtering.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts index ad162756dbe..909505f5f04 100644 --- a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts +++ b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts @@ -502,8 +502,8 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy { private generateUniqueValues(columnValues: any[]) { if (this.column.dataType === DataType.String && this.column.filteringIgnoreCase) { - const filteredUniqueValues = columnValues.map(s => - s.toLowerCase()).reduce((map, val, i) => map.get(val) ? map : map.set(val, columnValues[i]), + const filteredUniqueValues = columnValues.map(s => s?.toLowerCase()) + .reduce((map, val, i) => map.get(val) ? map : map.set(val, columnValues[i]), new Map); this.uniqueValues = Array.from(filteredUniqueValues.values()); From eacd85f2ed0ee7838e70af67d794dacb78a68904 Mon Sep 17 00:00:00 2001 From: IBarakov Date: Fri, 9 Oct 2020 11:02:05 +0300 Subject: [PATCH 5/6] chore(*): add label check to tests --- .../src/lib/grids/grid/grid-filtering-ui.spec.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts index bdca0eb619b..3802a0d453d 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts @@ -4395,6 +4395,7 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { const searchComponent = GridFunctions.getExcelStyleSearchComponent(fix); const listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix, searchComponent); expect(listItems.length).toBe(3, 'incorrect rendered list items count'); + expect(listItems[2].innerText).toBe('Custom', 'incorrect list item label'); })); it('Should not ignore duplicate records when column\'\s filteringIgnoreCase is false', fakeAsync(() => { @@ -4409,6 +4410,9 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { const searchComponent = GridFunctions.getExcelStyleSearchComponent(fix); const listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix, searchComponent); expect(listItems.length).toBe(5, 'incorrect rendered list items count'); + expect(listItems[2].innerText).toBe('Custom', 'incorrect list item label'); + expect(listItems[3].innerText).toBe('custoM', 'incorrect list item label'); + expect(listItems[4].innerText).toBe('custom', 'incorrect list item label'); })); it('Should display "Add to current filter selection" button on typing in input', fakeAsync(() => { From caa3f677afdef92ff933f627797f6a2b6d42d179 Mon Sep 17 00:00:00 2001 From: IBarakov Date: Fri, 9 Oct 2020 12:35:12 +0300 Subject: [PATCH 6/6] chore(*): fix which labels should be checked --- .../src/lib/grids/grid/grid-filtering-ui.spec.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts index 3802a0d453d..5c726b9cd5a 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts @@ -4394,8 +4394,9 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { const searchComponent = GridFunctions.getExcelStyleSearchComponent(fix); const listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix, searchComponent); + expect(listItems.length).toBe(3, 'incorrect rendered list items count'); - expect(listItems[2].innerText).toBe('Custom', 'incorrect list item label'); + expect(listItems[1].innerText).toBe('Custom', 'incorrect list item label'); })); it('Should not ignore duplicate records when column\'\s filteringIgnoreCase is false', fakeAsync(() => { @@ -4409,8 +4410,9 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { const searchComponent = GridFunctions.getExcelStyleSearchComponent(fix); const listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix, searchComponent); + expect(listItems.length).toBe(5, 'incorrect rendered list items count'); - expect(listItems[2].innerText).toBe('Custom', 'incorrect list item label'); + expect(listItems[1].innerText).toBe('Custom', 'incorrect list item label'); expect(listItems[3].innerText).toBe('custoM', 'incorrect list item label'); expect(listItems[4].innerText).toBe('custom', 'incorrect list item label'); }));