Skip to content

Commit 055628b

Browse files
committed
feat(query-builder): fixed initial load and visible columns
1 parent 97dfe6e commit 055628b

File tree

4 files changed

+39
-34
lines changed

4 files changed

+39
-34
lines changed

src/app/interactions/query-builder/query-builder-request-sample/query-builder-request-sample.component.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { HttpClient } from '@angular/common/http';
2-
import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
2+
import { AfterViewInit, ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
33
import { FilteringExpressionsTree, FilteringLogic, IExpressionTree, IgxColumnComponent, IgxGridComponent, IgxQueryBuilderComponent } from 'igniteui-angular';
44

55
const API_ENDPOINT = 'https://data-northwind.indigo.design';
@@ -10,7 +10,7 @@ const API_ENDPOINT = 'https://data-northwind.indigo.design';
1010
templateUrl: 'query-builder-request-sample.component.html',
1111
imports: [IgxQueryBuilderComponent, IgxGridComponent, IgxColumnComponent]
1212
})
13-
export class QueryBuilderRequestSampleComponent implements OnInit {
13+
export class QueryBuilderRequestSampleComponent implements OnInit, AfterViewInit {
1414
@ViewChild('grid', { static: true })
1515
public grid: IgxGridComponent;
1616

@@ -56,18 +56,21 @@ export class QueryBuilderRequestSampleComponent implements OnInit {
5656

5757
const tree = new FilteringExpressionsTree(FilteringLogic.And, undefined, 'Orders', ['orderId', 'customerId', 'employeeId', 'shipperId', 'orderDate', 'requiredDate', 'shipVia', 'freight', 'shipName', 'completed']);
5858
this.expressionTree = tree;
59-
59+
}
60+
61+
public ngAfterViewInit(): void {
6062
this.onChange();
6163
}
6264

65+
6366
public onChange() {
6467
this.grid.isLoading = true;
6568
this.http.post(`${API_ENDPOINT}/QueryBuilder/ExecuteQuery`, this.expressionTree).subscribe(data =>{
6669
this.data = Object.values(data)[0];
6770
this.grid.isLoading = false;
71+
this.cdr.detectChanges();
72+
this.calculateColsInView();
6873
});
69-
this.cdr.detectChanges();
70-
this.calculateColsInView();
7174
}
7275

7376
private calculateColsInView() {
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
<div class="wrapper">
2-
<div class="container">
2+
<div class="flex-container">
33
<igx-query-builder #queryBuilder
44
[entities]="entities"
55
[(expressionTree)]="expressionTree"
6-
(expressionTreeChange)="executeQuery()"
7-
class="output-area">
6+
(expressionTreeChange)="onChange()"
7+
class="container">
88
</igx-query-builder>
99

10-
<div class="output-area">
10+
<div class="container">
1111
<pre>{{sqlQuery}}</pre>
1212
</div>
1313
</div>
1414

15-
<igx-grid #grid [data]="gridData" [autoGenerate]="true" height="270px" [width]="'calc(100% - 40px)'">
15+
<igx-grid #grid [data]="data" [autoGenerate]="true" height="270px" [width]="'calc(100% - 40px)'">
1616
</igx-grid>
1717
</div>

src/app/interactions/query-builder/query-builder-sql-sample/query-builder-sql-sample.component.scss

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,13 @@
44
overflow-y: auto;
55
}
66

7-
.container {
7+
.flex-container {
88
display: flex;
99
flex-wrap: wrap;
1010
margin-right: 20px;
1111
}
1212

13-
igx-query-builder {
14-
flex: 1 100px;
15-
}
16-
17-
.output-area{
13+
.container {
1814
flex: 1 200px;
1915
box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.75);
2016
border-radius: 0.75rem;
@@ -27,6 +23,10 @@ igx-query-builder {
2723
}
2824
}
2925

26+
igx-query-builder {
27+
flex: 1 100px;
28+
}
29+
3030
igx-grid {
3131
margin-left: 20px;
3232
}

src/app/interactions/query-builder/query-builder-sql-sample/query-builder-sql-sample.component.ts

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { HttpClient } from '@angular/common/http';
2-
import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
3-
import { EntityType, FilteringExpressionsTree, IExpressionTree, IgxGridComponent, IgxQueryBuilderComponent, IgxStringFilteringOperand } from 'igniteui-angular';
2+
import { AfterViewInit, ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
3+
import { EntityType, FilteringExpressionsTree, IExpressionTree, IgxColumnComponent, IgxGridComponent, IgxNumberFilteringOperand, IgxQueryBuilderComponent, IgxStringFilteringOperand } from 'igniteui-angular';
44
import { format } from 'sql-formatter';
55

66
const API_ENDPOINT = 'https://data-northwind.indigo.design';
@@ -9,16 +9,13 @@ const API_ENDPOINT = 'https://data-northwind.indigo.design';
99
selector: 'app-query-builder-sql-sample',
1010
styleUrls: ['./query-builder-sql-sample.component.scss'],
1111
templateUrl: 'query-builder-sql-sample.component.html',
12-
imports: [IgxQueryBuilderComponent, IgxGridComponent]
12+
imports: [IgxQueryBuilderComponent, IgxGridComponent, IgxColumnComponent]
1313
})
14-
export class QueryBuilderSqlSampleComponent implements OnInit {
15-
@ViewChild('queryBuilder', { static: true })
16-
public queryBuilder: IgxQueryBuilderComponent;
17-
14+
export class QueryBuilderSqlSampleComponent implements OnInit, AfterViewInit {
1815
@ViewChild('grid', { static: true })
1916
public grid: IgxGridComponent;
2017

21-
public gridData = [];
18+
public data: any[] = [];
2219
public entities: EntityType[] = [];
2320
public expressionTree: IExpressionTree;
2421
public sqlQuery: string = 'SQL Query will be displayed here';
@@ -28,13 +25,10 @@ export class QueryBuilderSqlSampleComponent implements OnInit {
2825
public ngOnInit(): void {
2926
this.setEntities();
3027
this.setInitialExpressionTree();
31-
this.executeQuery();
3228
}
3329

34-
public executeQuery() {
35-
const sqlQuery = this.transformExpressionTreeToSqlQuery(this.expressionTree);
36-
this.sqlQuery = format(sqlQuery);
37-
this.setGridData();
30+
public ngAfterViewInit(): void {
31+
this.onChange();
3832
}
3933

4034
private setEntities() {
@@ -97,7 +91,7 @@ export class QueryBuilderSqlSampleComponent implements OnInit {
9791
searchTree: categoriesTree
9892
});
9993

100-
const suppliersTree = new FilteringExpressionsTree(0, undefined, 'Suppliers', ['*']);
94+
const suppliersTree = new FilteringExpressionsTree(0, undefined, 'Suppliers', ['supplierId', 'companyName', 'contactName', 'contactTitle']);
10195
suppliersTree.filteringOperands.push({
10296
fieldName: 'supplierId',
10397
conditionName: IgxStringFilteringOperand.instance().condition('inQuery').name,
@@ -190,12 +184,20 @@ export class QueryBuilderSqlSampleComponent implements OnInit {
190184
}
191185
}
192186

193-
private setGridData() {
187+
public onChange() {
188+
const sqlQuery = this.transformExpressionTreeToSqlQuery(this.expressionTree);
189+
this.sqlQuery = format(sqlQuery);
190+
194191
this.grid.isLoading = true;
195-
this.http.post(`${API_ENDPOINT}/QueryBuilder/ExecuteQuery`, this.expressionTree).subscribe(data => {
196-
this.gridData = Object.values(data)[0] as any[];
192+
this.http.post(`${API_ENDPOINT}/QueryBuilder/ExecuteQuery`, this.expressionTree).subscribe(data =>{
193+
this.data = Object.values(data)[0];
197194
this.grid.isLoading = false;
195+
this.cdr.detectChanges();
196+
this.calculateColsInView();
198197
});
199-
this.cdr.detectChanges();
198+
}
199+
200+
private calculateColsInView() {
201+
this.grid.columns.forEach(column => column.hidden = !this.expressionTree.returnFields.includes(column.field));
200202
}
201203
}

0 commit comments

Comments
 (0)