Skip to content

Commit 270ac2b

Browse files
committed
feat(h-grid): fixed adv filtering for date and time columns on nested levels
1 parent d1d7acc commit 270ac2b

File tree

2 files changed

+33
-13
lines changed

2 files changed

+33
-13
lines changed

projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { FilteringLogic, IFilteringExpression } from './filtering-expression.interface';
22
import { FilteringExpressionsTree, IFilteringExpressionsTree } from './filtering-expressions-tree';
33
import { resolveNestedPath, parseDate, formatDate, formatCurrency } from '../core/utils';
4-
import { ColumnType, GridType } from '../grids/common/grid.interface';
4+
import { ColumnType, EntityType, GridType } from '../grids/common/grid.interface';
55
import { GridColumnDataType } from './data-util';
66
import { SortingDirection } from './sorting-strategy';
77
import { formatNumber, formatPercent, getLocaleCurrencyCode } from '@angular/common';
88
import { IFilteringState } from './filtering-state.interface';
99
import { isTree } from './expressions-tree-util';
10+
import { IgxHierarchicalGridComponent } from '../grids/hierarchical-grid/hierarchical-grid.component';
1011

1112
const DateType = 'date';
1213
const DateTimeType = 'dateTime';
@@ -94,23 +95,42 @@ export abstract class BaseFilteringStrategy implements IFilteringStrategy {
9495
return true;
9596
} else {
9697
const expression = expressions;
97-
let isDate = false;
98-
let isTime = false;
98+
let dataType = null;
9999
if (!entity) {
100100
const column = grid && grid.getColumnByName(expression.fieldName);
101-
isDate = column ? column.dataType === DateType || column.dataType === DateTimeType : false;
102-
isTime = column ? column.dataType === TimeType : false;
103-
} else {
104-
// TODO: check for date and time
101+
dataType = column.dataType;
102+
} else if (grid.type === 'hierarchical') {
103+
const schema = (grid as IgxHierarchicalGridComponent).schema;
104+
const entityMatch = this.findEntityByName(schema, 'entity');
105+
dataType = entityMatch?.fields.find(f => f.field === expression.fieldName)?.dataType;
105106
}
106107

108+
const isDate = dataType ? dataType === DateType || dataType === DateTimeType : false;
109+
const isTime = dataType ? dataType === TimeType : false;
110+
107111
return this.findMatchByExpression(rec, expression, isDate, isTime, grid);
108112
}
109113
}
110114

111115
return true;
112116
}
113117

118+
private findEntityByName(schema: EntityType[], name: string): EntityType | null {
119+
for (const entity of schema) {
120+
if (entity.name === name) {
121+
return entity;
122+
}
123+
124+
if (entity.childEntities && entity.childEntities.length > 0) {
125+
const found = this.findEntityByName(entity.childEntities, name);
126+
if (found) {
127+
return found;
128+
}
129+
}
130+
}
131+
return null;
132+
}
133+
114134
public getFilterItems(column: ColumnType, tree: IFilteringExpressionsTree): Promise<IgxFilterItem[]> {
115135

116136
let data = column.grid.gridAPI.filterDataByExpressions(tree);

src/app/hierarchical-grid-advanced-filtering/hierarchical-grid-advanced-filtering.sample.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import {
44
IGX_HIERARCHICAL_GRID_DIRECTIVES,
55
FilteringExpressionsTree,
66
FilteringLogic,
7-
IgxNumberFilteringOperand,
8-
IgxStringFilteringOperand
7+
IgxStringFilteringOperand,
8+
IgxDateFilteringOperand
99
} from 'igniteui-angular';
1010
import { SINGERS } from './data';
1111

@@ -29,10 +29,10 @@ export class HierarchicalGridAdvancedFilteringSampleComponent implements AfterVi
2929
public ngAfterViewInit() {
3030
const albumsTree = new FilteringExpressionsTree(FilteringLogic.And, undefined, 'Albums', ['Artist']);
3131
albumsTree.filteringOperands.push({
32-
fieldName: 'USBillboard200',
33-
condition: IgxNumberFilteringOperand.instance().condition('lessThanOrEqualTo'),
34-
conditionName: IgxNumberFilteringOperand.instance().condition('lessThanOrEqualTo').name,
35-
searchVal: 5
32+
fieldName: 'LaunchDate',
33+
condition: IgxDateFilteringOperand.instance().condition('after'),
34+
conditionName: IgxDateFilteringOperand.instance().condition('after').name,
35+
searchVal: new Date(2018, 1, 1)
3636
});
3737
// const toursTree = new FilteringExpressionsTree(FilteringLogic.And, undefined, 'Tours', ['TouredBy']);
3838
// toursTree.filteringOperands.push({

0 commit comments

Comments
 (0)