diff --git a/projects/igniteui-angular/src/lib/query-builder/query-builder-tree.component.ts b/projects/igniteui-angular/src/lib/query-builder/query-builder-tree.component.ts index c5874a2267c..59c38798d0f 100644 --- a/projects/igniteui-angular/src/lib/query-builder/query-builder-tree.component.ts +++ b/projects/igniteui-angular/src/lib/query-builder/query-builder-tree.component.ts @@ -610,7 +610,9 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy { if (this._expressionTree) { this._expressionTree.entity = this._entityNewValue.name; - this._expressionTree.returnFields = []; + + this._expressionTree.returnFields = this.fields.length === this._selectedReturnFields.length ? ['*'] : this._selectedReturnFields; + this._expressionTree.filteringOperands = []; this._editedExpression = null; @@ -643,7 +645,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy { this._selectedReturnFields = value; if (this._expressionTree && !this.parentExpression) { - this._expressionTree.returnFields = value; + this._expressionTree.returnFields = value.length === this.fields.length ? ['*'] : value; this.expressionTreeChange.emit(this._expressionTree); } } diff --git a/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts b/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts index 3590621ab81..f5412c39d2c 100644 --- a/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts +++ b/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts @@ -444,6 +444,56 @@ describe('IgxQueryBuilder', () => { expect((dropdownItems[4] as HTMLElement).innerText).toBe('Released'); })); + it('ReturnFields should be properly calculated on entity change.', fakeAsync(() => { + queryBuilder.expressionTree = QueryBuilderFunctions.generateExpressionTree(); + queryBuilder.showEntityChangeDialog = false; + fix.detectChanges(); + + // Verify the returnFields + let exprTreeReturnFields = JSON.stringify(fix.componentInstance.queryBuilder.expressionTree.returnFields); + expect(exprTreeReturnFields).toBe(`["*"]`); + + // Change the selected return fields + QueryBuilderFunctions.selectFieldsInEditModeExpression(fix, [1]); + tick(100); + fix.detectChanges(); + + // Verify the returnFields + exprTreeReturnFields = JSON.stringify(fix.componentInstance.queryBuilder.expressionTree.returnFields); + expect(exprTreeReturnFields).toBe(`["OrderId"]`); + + // Change the entity + QueryBuilderFunctions.selectEntityAndClickInitialAddCondition(fix, 0); + + // Verify the returnFields + exprTreeReturnFields = JSON.stringify(fix.componentInstance.queryBuilder.expressionTree.returnFields); + expect(exprTreeReturnFields).toBe(`["*"]`); + })); + + it('ReturnFields should be properly calculated on selectAll click.', fakeAsync(() => { + queryBuilder.expressionTree = QueryBuilderFunctions.generateExpressionTree(); + queryBuilder.showEntityChangeDialog = false; + fix.detectChanges(); + + // Click selectAll button in order to deselect all fields + QueryBuilderFunctions.selectFieldsInEditModeExpression(fix, [0]); + tick(100); + fix.detectChanges(); + + // Verify the returnFields + let exprTreeReturnFields = JSON.stringify(fix.componentInstance.queryBuilder.expressionTree.returnFields); + expect(exprTreeReturnFields).toBe(`[]`); + + // Click selectAll button in order to select all fields + QueryBuilderFunctions.selectFieldsInEditModeExpression(fix, [0]); + tick(100); + fix.detectChanges(); + + // Verify the returnFields + exprTreeReturnFields = JSON.stringify(fix.componentInstance.queryBuilder.expressionTree.returnFields); + expect(exprTreeReturnFields).toBe(`["*"]`); + })); + it('Column dropdown should contain proper fields based on the entity.', fakeAsync(() => { const queryBuilderElement: HTMLElement = fix.debugElement.queryAll(By.css(`.${QueryBuilderSelectors.QUERY_BUILDER_TREE}`))[0].nativeElement;