From dd9823f10f5fd6d550781dbfd64ad9279b25b155 Mon Sep 17 00:00:00 2001 From: teodosiah Date: Tue, 4 Mar 2025 11:53:00 +0200 Subject: [PATCH 1/2] fix(query-builder): returnFields should be '*' on entity change --- .../query-builder-tree.component.ts | 8 +++++- .../query-builder.component.spec.ts | 26 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) 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..f0f93ffe906 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,13 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy { if (this._expressionTree) { this._expressionTree.entity = this._entityNewValue.name; - this._expressionTree.returnFields = []; + + if (this.fields.length === this._selectedReturnFields.length) { + this._expressionTree.returnFields = ['*']; + } else { + this._expressionTree.returnFields = this._selectedReturnFields; + } + this._expressionTree.filteringOperands = []; this._editedExpression = null; 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..29bcc407213 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,32 @@ describe('IgxQueryBuilder', () => { expect((dropdownItems[4] as HTMLElement).innerText).toBe('Released'); })); + it('ReturnFields should be properly calculated.', 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('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; From c14b3eb5f7e1287e78e364e61cd9754050720efe Mon Sep 17 00:00:00 2001 From: teodosiah Date: Fri, 7 Mar 2025 12:40:31 +0200 Subject: [PATCH 2/2] fix(query-builder): on select all click return fields should be * --- .../query-builder-tree.component.ts | 8 ++---- .../query-builder.component.spec.ts | 26 ++++++++++++++++++- 2 files changed, 27 insertions(+), 7 deletions(-) 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 f0f93ffe906..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 @@ -611,11 +611,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy { if (this._expressionTree) { this._expressionTree.entity = this._entityNewValue.name; - if (this.fields.length === this._selectedReturnFields.length) { - this._expressionTree.returnFields = ['*']; - } else { - this._expressionTree.returnFields = this._selectedReturnFields; - } + this._expressionTree.returnFields = this.fields.length === this._selectedReturnFields.length ? ['*'] : this._selectedReturnFields; this._expressionTree.filteringOperands = []; @@ -649,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 29bcc407213..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,7 +444,7 @@ describe('IgxQueryBuilder', () => { expect((dropdownItems[4] as HTMLElement).innerText).toBe('Released'); })); - it('ReturnFields should be properly calculated.', fakeAsync(() => { + it('ReturnFields should be properly calculated on entity change.', fakeAsync(() => { queryBuilder.expressionTree = QueryBuilderFunctions.generateExpressionTree(); queryBuilder.showEntityChangeDialog = false; fix.detectChanges(); @@ -470,6 +470,30 @@ describe('IgxQueryBuilder', () => { 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;