Skip to content

Commit 237ec54

Browse files
authored
Merge branch 'master' into dmdimitrov/hgrid-advanced-filtering
2 parents ae5062e + eb58644 commit 237ec54

File tree

2 files changed

+31
-36
lines changed

2 files changed

+31
-36
lines changed

projects/igniteui-angular/src/lib/query-builder/query-builder-tree.component.ts

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -172,17 +172,12 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
172172
@Input()
173173
public set fields(fields: FieldType[]) {
174174
this._fields = fields;
175-
175+
176+
this._fields = this._fields?.map(f => ({...f, filters: this.getFilters(f), pipeArgs: this.getPipeArgs(f) }));
177+
176178
if (!this._fields && this.isAdvancedFiltering()) {
177179
this._fields = this.entities[0].fields;
178180
}
179-
180-
if (this._fields) {
181-
this._fields.forEach(field => {
182-
this.setFilters(field);
183-
this.setFormat(field);
184-
});
185-
}
186181
}
187182

188183
/**
@@ -1188,7 +1183,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
11881183
if (!this.selectedField) {
11891184
this.fieldSelect.input.nativeElement.focus();
11901185
} else if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary) {
1191-
this.conditionSelect.input.nativeElement.focus();
1186+
this.conditionSelect?.input.nativeElement.focus();
11921187
} else {
11931188
const input = this.searchValueInput?.nativeElement || this.picker?.getEditElement();
11941189
input?.focus();
@@ -1492,16 +1487,19 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
14921487
return ctx;
14931488
}
14941489

1495-
private setFormat(field: FieldType) {
1496-
if (!field.pipeArgs) {
1497-
field.pipeArgs = { digitsInfo: DEFAULT_PIPE_DIGITS_INFO };
1490+
private getPipeArgs(field: FieldType) {
1491+
let pipeArgs = {...field.pipeArgs};
1492+
if (!pipeArgs) {
1493+
pipeArgs = { digitsInfo: DEFAULT_PIPE_DIGITS_INFO };
14981494
}
14991495

1500-
if (!field.pipeArgs.format) {
1501-
field.pipeArgs.format = field.dataType === DataType.Time ?
1496+
if (!pipeArgs.format) {
1497+
pipeArgs.format = field.dataType === DataType.Time ?
15021498
DEFAULT_PIPE_TIME_FORMAT : field.dataType === DataType.DateTime ?
15031499
DEFAULT_PIPE_DATE_TIME_FORMAT : DEFAULT_PIPE_DATE_FORMAT;
15041500
}
1501+
1502+
return pipeArgs;
15051503
}
15061504

15071505
private selectDefaultCondition() {
@@ -1510,30 +1508,24 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
15101508
}
15111509
}
15121510

1513-
private setFilters(field: FieldType) {
1511+
private getFilters(field: FieldType) {
15141512
if (!field.filters) {
15151513
switch (field.dataType) {
15161514
case DataType.Boolean:
1517-
field.filters = IgxBooleanFilteringOperand.instance();
1518-
break;
1515+
return IgxBooleanFilteringOperand.instance();
15191516
case DataType.Number:
15201517
case DataType.Currency:
15211518
case DataType.Percent:
1522-
field.filters = IgxNumberFilteringOperand.instance();
1523-
break;
1519+
return IgxNumberFilteringOperand.instance();
15241520
case DataType.Date:
1525-
field.filters = IgxDateFilteringOperand.instance();
1526-
break;
1521+
return IgxDateFilteringOperand.instance();
15271522
case DataType.Time:
1528-
field.filters = IgxTimeFilteringOperand.instance();
1529-
break;
1523+
return IgxTimeFilteringOperand.instance();
15301524
case DataType.DateTime:
1531-
field.filters = IgxDateTimeFilteringOperand.instance();
1532-
break;
1525+
return IgxDateTimeFilteringOperand.instance();
15331526
case DataType.String:
15341527
default:
1535-
field.filters = IgxStringFilteringOperand.instance();
1536-
break;
1528+
return IgxStringFilteringOperand.instance();
15371529
}
15381530
}
15391531
}

projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,16 @@ describe('IgxQueryBuilder', () => {
119119
expect(mainEntityContainer.children[1].children[1].tagName).toBe('IGX-COMBO');
120120
expect(nestedEntityContainer.children[1].children[1].tagName).toBe('IGX-SELECT');
121121
}));
122+
123+
it('Should return proper fields collection without additional props.', fakeAsync(() => {
124+
queryBuilder.expressionTree = QueryBuilderFunctions.generateExpressionTree();
125+
fix.detectChanges();
126+
127+
queryBuilder.entities[0].fields.forEach(field => {
128+
expect(field.filters).toBeUndefined();
129+
expect(field.pipeArgs).toBeUndefined();
130+
});
131+
}));
122132
});
123133

124134
describe('Interactions', () => {
@@ -3243,8 +3253,7 @@ export class IgxQueryBuilderSampleTestComponent implements OnInit {
32433253
<p class="selectedField">{{selectedField.field}}</p>
32443254
<p class="selectedCondition">{{selectedCondition}}</p>
32453255
} @else if (selectedField?.field === 'OrderId' && selectedCondition === 'equals') {
3246-
<igx-combo [data]="comboData" [(ngModel)]="searchValue.value"
3247-
(selectionChanging)="handleChange($event, selectedField, searchValue)" [displayKey]="'field'">
3256+
<igx-combo [data]="comboData" [(ngModel)]="searchValue.value" [displayKey]="'field'">
32483257
</igx-combo>
32493258
} @else {
32503259
<ng-container #defaultTemplate *ngTemplateOutlet="defaultSearchValueTemplate"></ng-container>
@@ -3273,6 +3282,7 @@ export class IgxQueryBuilderCustomTemplateSampleTestComponent implements OnInit
32733282

32743283
public ngOnInit(): void {
32753284
this.entities = SampleEntities.map(a => ({ ...a }));
3285+
this.entities[1].fields[0].formatter = (value: any, rowData: any) => rowData === 'equals' ? (Array.from(value)[0] as any).id : value;
32763286

32773287
const tree = new FilteringExpressionsTree(FilteringLogic.And, null, 'Orders', ['*']);
32783288
tree.filteringOperands.push({
@@ -3290,11 +3300,4 @@ export class IgxQueryBuilderCustomTemplateSampleTestComponent implements OnInit
32903300
{ id: 1, field: 'B' }
32913301
];
32923302
}
3293-
3294-
public handleChange(ev, selectedField, searchVal) {
3295-
if (selectedField.field === 'OrderId') {
3296-
searchVal.value = ev.newValue[0];
3297-
selectedField.formatter = (value: any, rowData: any) => rowData === 'equals' ? (Array.from(value)[0] as any).id : value;
3298-
}
3299-
}
33003303
}

0 commit comments

Comments
 (0)