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 cc0e061f535..a4301304d78 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 @@ -500,7 +500,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) { 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 a9c145b4707..498a4aea981 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 @@ -4384,10 +4384,42 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { expect(listItems.length).toBe(0, 'incorrect rendered list items count'); })); - it('Should display "Add to current filter selection" button on typing in input', fakeAsync(() => { - // Open excel style filtering dialog. - GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'Downloads'); + 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'); + expect(listItems[1].innerText).toBe('Custom', 'incorrect list item label'); + })); + + 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'); + 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'); + })); + + it('Should display "Add to current filter selection" button on typing in input', fakeAsync(() => { + // Open excel style filtering dialog. + GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'Downloads'); // Type string in search box. const searchComponent = GridFunctions.getExcelStyleSearchComponent(fix); const inputNativeElement = GridFunctions.getExcelStyleSearchComponentInput(fix, searchComponent); 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 267a851c225..d9cf991b8da 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,