Skip to content

Commit c52ae75

Browse files
authored
Merge pull request #3648 from IgniteUI/gedinakova/qb-request-sample
QB sample requesting data from an endpoint
2 parents 52c7190 + 8a6195a commit c52ae75

File tree

5 files changed

+106
-1
lines changed

5 files changed

+106
-1
lines changed

src/app/interactions/interactions-routes-data.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,6 @@ export const interactionsRoutesData = {
5050
'icons-sample': { displayName: 'Icons sample', parentName: 'Drag and Drop' },
5151
'query-builder-sample-1': { displayName: 'Query Builder Sample 1', parentName: 'Query Builder' },
5252
'query-builder-style': { displayName: 'Query Builder Style Sample', parentName: 'Query Builder' },
53-
'query-builder-template-sample': { displayName: 'Query Builder Template Sample', parentName: 'Query Builder' }
53+
'query-builder-template-sample': { displayName: 'Query Builder Template Sample', parentName: 'Query Builder' },
54+
'query-builder-request-sample': { displayName: 'Query Builder Request Sample', parentName: 'Query Builder' }
5455
};

src/app/interactions/interactions.routes.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { OverlayStylingComponent } from './overlay/overlay-styling/overlay-styli
2323
import { QueryBuilderSample1Component } from './query-builder/query-builder-sample-1/query-builder-sample-1.component';
2424
import { QueryBuilderStyleComponent } from './query-builder/query-builder-style/query-builder-style.component';
2525
import { QueryBuilderTemplateSampleComponent } from './query-builder/query-builder-template-sample/query-builder-template-sample.component';
26+
import { QueryBuilderRequestSampleComponent } from './query-builder/query-builder-request-sample/query-builder-request-sample.component';
2627
import { RippleSample2Component } from './ripple/ripple-sample-2/ripple-sample-2.component';
2728
import { RippleSample3Component } from './ripple/ripple-sample-3/ripple-sample-3.component';
2829
import { RippleSample4Component } from './ripple/ripple-sample-4/ripple-sample-4.component';
@@ -304,5 +305,10 @@ export const InteractionsRoutes: Routes = [
304305
component: QueryBuilderTemplateSampleComponent,
305306
data: interactionsRoutesData['query-builder-template-sample'],
306307
path: 'query-builder-template-sample'
308+
},
309+
{
310+
component: QueryBuilderRequestSampleComponent,
311+
data: interactionsRoutesData['query-builder-request-sample'],
312+
path: 'query-builder-request-sample'
307313
}
308314
];
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<div class="wrapper">
2+
<igx-query-builder #queryBuilder
3+
[entities]="entities"
4+
[(expressionTree)]="expressionTree"
5+
(expressionTreeChange)="onChange()">
6+
</igx-query-builder>
7+
8+
<div class="output-area">
9+
<igx-grid #grid [data]="data" [autoGenerate]="true"></igx-grid>
10+
</div>
11+
</div>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.wrapper{
2+
margin: 10px;
3+
height: 100%;
4+
overflow-y: auto;
5+
}
6+
7+
.output-area{
8+
box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.75);
9+
border-radius: 4px;
10+
margin: 0 20px 20px 20px;
11+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import { HttpClient } from '@angular/common/http';
2+
import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
3+
import { FilteringExpressionsTree, FilteringLogic, IExpressionTree, IgxColumnComponent, IgxGridComponent, IgxQueryBuilderComponent } from 'igniteui-angular';
4+
5+
const API_ENDPOINT = 'https://data-northwind.indigo.design';
6+
7+
@Component({
8+
selector: 'query-builder-request-sample',
9+
styleUrls: ['./query-builder-request-sample.component.scss'],
10+
templateUrl: 'query-builder-request-sample.component.html',
11+
imports: [IgxQueryBuilderComponent, IgxGridComponent, IgxColumnComponent]
12+
})
13+
export class QueryBuilderRequestSampleComponent implements OnInit {
14+
@ViewChild('grid', { static: true })
15+
public grid: IgxGridComponent;
16+
17+
public entities: any[];
18+
public customersFields: any[];
19+
public ordersFields: any[];
20+
public expressionTree: IExpressionTree;
21+
public data: any[] = [];
22+
23+
constructor(private http: HttpClient, private cdr: ChangeDetectorRef) {}
24+
25+
public ngOnInit(): void {
26+
this.customersFields = [
27+
{ field: "customerId", dataType: "string" },
28+
{ field: "companyName", dataType: "string" },
29+
{ field: "contactName", dataType: "string" },
30+
{ field: "contactTitle", dataType: "string" }
31+
];
32+
33+
this.ordersFields = [
34+
{ field: "orderId", dataType: "number" },
35+
{ field: "customerId", dataType: "string" },
36+
{ field: "employeeId", dataType: "number" },
37+
{ field: "shipperId", dataType: "number" },
38+
{ field: "orderDate", dataType: "date" },
39+
{ field: "requiredDate", dataType: "date" },
40+
{ field: "shipVia", dataType: "number" },
41+
{ field: "freight", dataType: "number" },
42+
{ field: "shipName", dataType: "string" },
43+
{ field: "completed", dataType: "boolean" }
44+
];
45+
46+
this.entities = [
47+
{
48+
name: "Customers",
49+
fields: this.customersFields
50+
},
51+
{
52+
name: "Orders",
53+
fields: this.ordersFields
54+
}
55+
];
56+
57+
const tree = new FilteringExpressionsTree(FilteringLogic.And, undefined, 'Orders', ['orderId', 'customerId', 'employeeId', 'shipperId', 'orderDate', 'requiredDate', 'shipVia', 'freight', 'shipName', 'completed']);
58+
this.expressionTree = tree;
59+
60+
this.onChange();
61+
}
62+
63+
public onChange() {
64+
this.grid.isLoading = true;
65+
this.http.post(`${API_ENDPOINT}/QueryBuilder/ExecuteQuery`, this.expressionTree).subscribe(data =>{
66+
this.data = Object.values(data)[0];
67+
this.grid.isLoading = false;
68+
});
69+
this.cdr.detectChanges();
70+
this.calculateColsInView();
71+
}
72+
73+
private calculateColsInView() {
74+
this.grid.columns.forEach(column => column.hidden = !this.expressionTree.returnFields.includes(column.field));
75+
}
76+
}

0 commit comments

Comments
 (0)