Skip to content

Commit 5a92ec8

Browse files
authored
Merge branch '17.2.x' into ganastasov/fix-15019-17.2.x
2 parents 0f842b7 + bc6338a commit 5a92ec8

File tree

3 files changed

+120
-10
lines changed

3 files changed

+120
-10
lines changed

projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-filtering.component.ts

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -221,13 +221,13 @@ export class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent
221221

222222
/**
223223
* Gets the minimum height.
224-
*
225-
* Setting value in template:
224+
*
225+
* Setting value in template:
226226
* ```ts
227-
* [minHeight]="'<number><unit (px|rem|etc..)>'"
227+
* [minHeight]="'<number><unit (px|rem|etc..)>'"
228228
* ```
229-
*
230-
* Example for setting a value:
229+
*
230+
* Example for setting a value:
231231
* ```ts
232232
* [minHeight]="'700px'"
233233
* ```
@@ -268,13 +268,13 @@ export class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent
268268

269269
/**
270270
* Gets the maximum height.
271-
*
272-
* Setting value in template:
271+
*
272+
* Setting value in template:
273273
* ```ts
274-
* [maxHeight]="'<number><unit (px|rem|etc..)>'"
274+
* [maxHeight]="'<number><unit (px|rem|etc..)>'"
275275
* ```
276-
*
277-
* Example for setting a value:
276+
*
277+
* Example for setting a value:
278278
* ```ts
279279
* [maxHeight]="'700px'"
280280
* ```
@@ -555,6 +555,11 @@ export class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent
555555
private renderValues() {
556556
this.filterValues = this.generateFilterValues();
557557
this.generateListData();
558+
this.expressionsList.forEach(expr => {
559+
if (this.column.dataType === GridColumnDataType.String && this.column.filteringIgnoreCase && expr.expression.searchVal) {
560+
this.modifyExpression(expr);
561+
}
562+
});
558563
}
559564

560565
private generateFilterValues() {
@@ -585,6 +590,16 @@ export class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent
585590
return filterValues;
586591
}
587592

593+
private modifyExpression(expr: ExpressionUI) {
594+
const lowerCaseFilterValues = new Set(Array.from(expr.expression.searchVal).map((value: string) => value.toLowerCase()));
595+
596+
this.grid.data.forEach(item => {
597+
if (lowerCaseFilterValues.has(item[this.column.field]?.toLowerCase())) {
598+
expr.expression.searchVal.add(item[this.column.field]);
599+
}
600+
});
601+
}
602+
588603
private generateListData() {
589604
this.listData = new Array<FilterListItem>();
590605
const shouldUpdateSelection = this.areExpressionsSelectable();

projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5635,6 +5635,32 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => {
56355635
expect(gridCellValues).toEqual(listItems);
56365636
}));
56375637

5638+
it('Should filter grid correctly with case insensitive duplicates', fakeAsync(() => {
5639+
grid.data = SampleTestData.excelFilteringDataDuplicateValues();
5640+
fix.detectChanges();
5641+
// Open excel style custom filtering dialog.
5642+
GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'AnotherField');
5643+
5644+
// Type string in search box.
5645+
const searchComponent = GridFunctions.getExcelStyleSearchComponent(fix);
5646+
const inputNativeElement = GridFunctions.getExcelStyleSearchComponentInput(fix, searchComponent);
5647+
UIInteractions.clickAndSendInputElementValue(inputNativeElement, 'cust', fix);
5648+
tick(100);
5649+
fix.detectChanges();
5650+
5651+
// Click 'apply' button to apply filter.
5652+
GridFunctions.clickApplyExcelStyleFiltering(fix);
5653+
tick(100);
5654+
fix.detectChanges();
5655+
5656+
// Get the results and verify their count.
5657+
const gridCellValues = GridFunctions.getColumnCells(fix, 'AnotherField')
5658+
.map(c => c.nativeElement.innerText)
5659+
.sort();
5660+
5661+
expect(gridCellValues.length).toEqual(5);
5662+
}));
5663+
56385664
it('Should disable the apply button when there are no results.', fakeAsync(() => {
56395665
GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'Downloads');
56405666

projects/igniteui-angular/src/lib/test-utils/sample-test-data.spec.ts

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1988,6 +1988,75 @@ export class SampleTestData {
19881988
}
19891989
]);
19901990

1991+
public static excelFilteringDataDuplicateValues = () => ([
1992+
{
1993+
Downloads: 254,
1994+
ID: 1,
1995+
ProductName: 'Ignite UI for JavaScript',
1996+
ReleaseDate: SampleTestData.timeGenerator.timedelta(SampleTestData.today, 'day', 1),
1997+
ReleaseDateTime: SampleTestData.timeGenerator.timedelta(SampleTestData.todayFullDate, 'hour', 1),
1998+
ReleaseTime: SampleTestData.timeGenerator.timedelta(SampleTestData.todayFullDate, 'hour', 1),
1999+
Released: false,
2000+
AnotherField: 'a',
2001+
Revenue: 100000
2002+
},
2003+
{
2004+
Downloads: 702,
2005+
ID: 2,
2006+
ProductName: 'Some other item with Script',
2007+
ReleaseDate: SampleTestData.timeGenerator.timedelta(SampleTestData.today, 'day', 1),
2008+
ReleaseDateTime: SampleTestData.timeGenerator.timedelta(SampleTestData.todayFullDate, 'second', 20),
2009+
ReleaseTime: SampleTestData.timeGenerator.timedelta(SampleTestData.todayFullDate, 'second', 20),
2010+
Released: null,
2011+
AnotherField: 'Custom',
2012+
Revenue: 60000
2013+
},
2014+
{
2015+
Downloads: 0,
2016+
ID: 3,
2017+
ProductName: null,
2018+
ReleaseDate: SampleTestData.timeGenerator.timedelta(SampleTestData.today, 'month', 1),
2019+
ReleaseDateTime: SampleTestData.timeGenerator.timedelta(SampleTestData.todayFullDate, 'minute', +10),
2020+
ReleaseTime: SampleTestData.timeGenerator.timedelta(SampleTestData.todayFullDate, 'minute', +10),
2021+
Released: true,
2022+
AnotherField: 'custoM',
2023+
Revenue: 10000
2024+
},
2025+
{
2026+
Downloads: 1000,
2027+
ID: 4,
2028+
ProductName: null,
2029+
ReleaseDate: SampleTestData.today,
2030+
ReleaseDateTime: SampleTestData.todayFullDate,
2031+
ReleaseTime: SampleTestData.todayFullDate,
2032+
Released: undefined,
2033+
AnotherField: 'custom',
2034+
Revenue: 50000
2035+
},
2036+
{
2037+
Downloads: 1000,
2038+
ID: 5,
2039+
ProductName: null,
2040+
ReleaseDate: SampleTestData.today,
2041+
ReleaseDateTime: SampleTestData.todayFullDate,
2042+
ReleaseTime: SampleTestData.todayFullDate,
2043+
Released: undefined,
2044+
AnotherField: 'custom_1',
2045+
Revenue: 50000
2046+
},
2047+
{
2048+
Downloads: 1000,
2049+
ID: 6,
2050+
ProductName: null,
2051+
ReleaseDate: SampleTestData.today,
2052+
ReleaseDateTime: SampleTestData.todayFullDate,
2053+
ReleaseTime: SampleTestData.todayFullDate,
2054+
Released: undefined,
2055+
AnotherField: 'custom_A',
2056+
Revenue: 50000
2057+
}
2058+
]);
2059+
19912060
/* Data fields: Price: number, Brand: string, Model: string, Edition: string */
19922061
public static exportGroupedDataColumns = () => ([
19932062
{ Price: 75000, Brand: 'Tesla', Model: 'Model S', Edition: 'Sport' },

0 commit comments

Comments
 (0)