Skip to content

Commit fdac91a

Browse files
committed
fix(query-builder): prevent changing fields collection
1 parent e87c35b commit fdac91a

File tree

2 files changed

+20
-35
lines changed

2 files changed

+20
-35
lines changed

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

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -176,13 +176,8 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
176176
if (!this._fields && this.isAdvancedFiltering()) {
177177
this._fields = this.entities[0].fields;
178178
}
179-
180-
if (this._fields) {
181-
this._fields.forEach(field => {
182-
this.setFilters(field);
183-
this.setFormat(field);
184-
});
185-
}
179+
180+
this._fields = this._fields.map(f => ({...f, filters: this.getFilters(f), pipeArgs: this.getPipeArgs(f) }));
186181
}
187182

188183
/**
@@ -1180,7 +1175,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
11801175
if (!this.selectedField) {
11811176
this.fieldSelect.input.nativeElement.focus();
11821177
} else if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary) {
1183-
this.conditionSelect.input.nativeElement.focus();
1178+
this.conditionSelect?.input.nativeElement.focus();
11841179
} else {
11851180
const input = this.searchValueInput?.nativeElement || this.picker?.getEditElement();
11861181
input?.focus();
@@ -1483,16 +1478,19 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
14831478
return ctx;
14841479
}
14851480

1486-
private setFormat(field: FieldType) {
1487-
if (!field.pipeArgs) {
1488-
field.pipeArgs = { digitsInfo: DEFAULT_PIPE_DIGITS_INFO };
1481+
private getPipeArgs(field: FieldType) {
1482+
let pipeArgs = {...field.pipeArgs};
1483+
if (!pipeArgs) {
1484+
pipeArgs = { digitsInfo: DEFAULT_PIPE_DIGITS_INFO };
14891485
}
14901486

1491-
if (!field.pipeArgs.format) {
1492-
field.pipeArgs.format = field.dataType === DataType.Time ?
1487+
if (!pipeArgs.format) {
1488+
pipeArgs.format = field.dataType === DataType.Time ?
14931489
DEFAULT_PIPE_TIME_FORMAT : field.dataType === DataType.DateTime ?
14941490
DEFAULT_PIPE_DATE_TIME_FORMAT : DEFAULT_PIPE_DATE_FORMAT;
14951491
}
1492+
1493+
return pipeArgs;
14961494
}
14971495

14981496
private selectDefaultCondition() {
@@ -1501,30 +1499,24 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
15011499
}
15021500
}
15031501

1504-
private setFilters(field: FieldType) {
1502+
private getFilters(field: FieldType) {
15051503
if (!field.filters) {
15061504
switch (field.dataType) {
15071505
case DataType.Boolean:
1508-
field.filters = IgxBooleanFilteringOperand.instance();
1509-
break;
1506+
return IgxBooleanFilteringOperand.instance();
15101507
case DataType.Number:
15111508
case DataType.Currency:
15121509
case DataType.Percent:
1513-
field.filters = IgxNumberFilteringOperand.instance();
1514-
break;
1510+
return IgxNumberFilteringOperand.instance();
15151511
case DataType.Date:
1516-
field.filters = IgxDateFilteringOperand.instance();
1517-
break;
1512+
return IgxDateFilteringOperand.instance();
15181513
case DataType.Time:
1519-
field.filters = IgxTimeFilteringOperand.instance();
1520-
break;
1514+
return IgxTimeFilteringOperand.instance();
15211515
case DataType.DateTime:
1522-
field.filters = IgxDateTimeFilteringOperand.instance();
1523-
break;
1516+
return IgxDateTimeFilteringOperand.instance();
15241517
case DataType.String:
15251518
default:
1526-
field.filters = IgxStringFilteringOperand.instance();
1527-
break;
1519+
return IgxStringFilteringOperand.instance();
15281520
}
15291521
}
15301522
}

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

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3269,8 +3269,7 @@ export class IgxQueryBuilderSampleTestComponent implements OnInit {
32693269
<p class="selectedField">{{selectedField.field}}</p>
32703270
<p class="selectedCondition">{{selectedCondition}}</p>
32713271
} @else if (selectedField?.field === 'OrderId' && selectedCondition === 'equals') {
3272-
<igx-combo [data]="comboData" [(ngModel)]="searchValue.value"
3273-
(selectionChanging)="handleChange($event, selectedField, searchValue)" [displayKey]="'field'">
3272+
<igx-combo [data]="comboData" [(ngModel)]="searchValue.value" [displayKey]="'field'">
32743273
</igx-combo>
32753274
} @else {
32763275
<ng-container #defaultTemplate *ngTemplateOutlet="defaultSearchValueTemplate"></ng-container>
@@ -3299,6 +3298,7 @@ export class IgxQueryBuilderCustomTemplateSampleTestComponent implements OnInit
32993298

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

33033303
const tree = new FilteringExpressionsTree(FilteringLogic.And, null, 'Orders', ['*']);
33043304
tree.filteringOperands.push({
@@ -3316,11 +3316,4 @@ export class IgxQueryBuilderCustomTemplateSampleTestComponent implements OnInit
33163316
{ id: 1, field: 'B' }
33173317
];
33183318
}
3319-
3320-
public handleChange(ev, selectedField, searchVal) {
3321-
if (selectedField.field === 'OrderId') {
3322-
searchVal.value = ev.newValue[0];
3323-
selectedField.formatter = (value: any, rowData: any) => rowData === 'equals' ? (Array.from(value)[0] as any).id : value;
3324-
}
3325-
}
33263319
}

0 commit comments

Comments
 (0)