Skip to content

Commit d1bf181

Browse files
authored
Merge pull request #8566 from IgniteUI/hanastasov/fix-issue-esf-m
ESF use date iso strings in filterValues list
2 parents 664e829 + fbf881c commit d1bf181

File tree

2 files changed

+67
-4
lines changed

2 files changed

+67
-4
lines changed

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy {
451451
}
452452

453453
for (let index = 0; index < this.uniqueValues.length; index++) {
454-
const value = this.column.dataType === DataType.Date ? this.uniqueValues[index].label : this.uniqueValues[index];
454+
const value = this.getExpressionValue(this.uniqueValues[index]);
455455
if (this.filterValues.has(value)) {
456456
return true;
457457
}
@@ -531,9 +531,10 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy {
531531
if (isDateColumn) {
532532
this.filterValues = new Set<any>(this.expressionsList.reduce((arr, e) => {
533533
if (e.expression.condition.name === 'in') {
534-
return [ ...arr, ...Array.from((e.expression.searchVal as Set<any>).values()).map(v => this.getFilterItemLabel(v))];
534+
return [ ...arr, ...Array.from((e.expression.searchVal as Set<any>).values()).map(v =>
535+
new Date(v).toISOString()) ];
535536
}
536-
return [ ...arr, ...[e.expression.searchVal ? this.getFilterItemLabel(e.expression.searchVal) : e.expression.searchVal] ];
537+
return [ ...arr, ...[e.expression.searchVal ? e.expression.searchVal.toISOString() : e.expression.searchVal] ];
537538
}, []));
538539
} else {
539540
this.filterValues = new Set<any>(this.expressionsList.reduce((arr, e) => {
@@ -642,7 +643,8 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy {
642643
filterListItem.isFiltered = false;
643644

644645
if (shouldUpdateSelection) {
645-
if (this.filterValues.has(element.label || element)) {
646+
const value = this.getExpressionValue(element);
647+
if (this.filterValues.has(value)) {
646648
filterListItem.isSelected = true;
647649
filterListItem.isFiltered = true;
648650
}
@@ -736,6 +738,16 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy {
736738
return element;
737739
}
738740

741+
private getExpressionValue(element: any): string {
742+
let value;
743+
if (this.column.dataType === DataType.Date) {
744+
value = element && element.value ? new Date(element.value).toISOString() : element.value;
745+
} else {
746+
value = element;
747+
}
748+
return value;
749+
}
750+
739751
// TODO: sort members by access modifier
740752

741753
/**

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

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5322,6 +5322,57 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => {
53225322
expect(loadingIndicator).toBeNull('esf loading indicator is visible');
53235323
}));
53245324

5325+
it('Verify date values are displayed in correct format according to column formatter after filtering', fakeAsync(() => {
5326+
registerLocaleData(localeFR);
5327+
const grid = fix.componentInstance.grid;
5328+
grid.locale = 'fr-FR';
5329+
const datePipe = new DatePipe(grid.locale);
5330+
grid.getColumnByName('ReleaseDate').formatter = ((value: any) => {
5331+
const pipe = new DatePipe('fr-FR');
5332+
const val = value !== null && value !== undefined && value !== '' ? pipe.transform(value, 'longDate') : 'No value!';
5333+
return val;
5334+
});
5335+
5336+
const dates = fix.componentInstance.data.filter(d => d.ReleaseDate !== null && d.ReleaseDate !== undefined)
5337+
.map(el => new Date(el.ReleaseDate)).sort((a, b) => a - b);
5338+
fix.detectChanges();
5339+
5340+
// Open excel style custom filtering dialog and wait a bit.
5341+
GridFunctions.clickExcelFilterIcon(fix, 'ReleaseDate');
5342+
tick(1050);
5343+
fix.detectChanges();
5344+
5345+
// Verify items in search have loaded and that the loading indicator is not visible.
5346+
let listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix);
5347+
expect(listItems.length).toBe(8, 'incorrect rendered list items count');
5348+
5349+
const checkboxElements = GridFunctions.getExcelStyleFilteringCheckboxes(fix);
5350+
checkboxElements[2].click();
5351+
tick();
5352+
fix.detectChanges();
5353+
5354+
GridFunctions.clickApplyExcelStyleFiltering(fix);
5355+
fix.detectChanges();
5356+
5357+
// Open excel style custom filtering dialog and wait a bit.
5358+
GridFunctions.clickExcelFilterIcon(fix, 'ReleaseDate');
5359+
tick(1050);
5360+
fix.detectChanges();
5361+
5362+
listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix);
5363+
expect(listItems.length).toBe(8, 'incorrect rendered list items count');
5364+
5365+
expect(listItems[1].innerText).toBe('No value!');
5366+
for (let i = 2; i < listItems.length; i++) {
5367+
const date = dates[i - 2];
5368+
const label = date !== null && date !== undefined && date !== '' ? datePipe.transform(date, 'longDate') : 'No value!';
5369+
expect(listItems[i].innerText).toBe(label);
5370+
}
5371+
5372+
const loadingIndicator = GridFunctions.getExcelFilteringLoadingIndicator(fix);
5373+
expect(loadingIndicator).toBeNull('esf loading indicator is visible');
5374+
}));
5375+
53255376
it('Done callback should be executed only once per column', fakeAsync(() => {
53265377
const compInstance = fix.componentInstance as IgxGridFilteringESFLoadOnDemandComponent;
53275378
// Open excel style custom filtering dialog and wait a bit.

0 commit comments

Comments
 (0)