Skip to content

Commit 78e285c

Browse files
authored
refactor(query-builder-sample): update QB sample 1 with nested entities (#3532)
* refactor(query-builder-sample): update QB sample 1 with nested entities * fix(query-builder): remove header template from main sample
1 parent 3a54eb8 commit 78e285c

2 files changed

Lines changed: 75 additions & 43 deletions

File tree

src/app/interactions/query-builder/query-builder-sample-1/query-builder-sample-1.component.html

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
<div class="wrapper">
22
<igx-query-builder #queryBuilder
3-
[entities]="[{ name: '', fields: fields}]"
3+
[entities]="entities"
44
[expressionTree]="expressionTree">
5-
<igx-query-builder-header [title]="'Query Builder Overview'" [showLegend]="true">
6-
</igx-query-builder-header>
75
</igx-query-builder>
86
<div class="output-area">
97
<pre>{{ printExpressionTree(queryBuilder.expressionTree) }}</pre>

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

Lines changed: 74 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,92 @@
11
import { Component, OnInit } from '@angular/core';
2-
import { FilteringExpressionsTree, FilteringLogic, IExpressionTree, IgxQueryBuilderComponent, IgxStringFilteringOperand } from 'igniteui-angular';
2+
import { FilteringExpressionsTree, FilteringLogic, IExpressionTree, IgxBooleanFilteringOperand, IgxDateFilteringOperand, IgxNumberFilteringOperand, IgxStringFilteringOperand } from 'igniteui-angular';
33

44
@Component({
55
selector: 'app-query-builder-sample-1',
66
styleUrls: ['./query-builder-sample-1.component.scss'],
77
templateUrl: 'query-builder-sample-1.component.html'
88
})
99
export class QueryBuilderSample1Component implements OnInit {
10+
public entities: any[];
11+
public companiesFields: any[];
12+
public ordersFields: any[];
1013
public expressionTree: IExpressionTree;
11-
12-
public fields: any[] = [
13-
{ field: 'ID', dataType: 'string' },
14-
{ field: 'CompanyName', dataType: 'string' },
15-
{ field: 'ContactName', dataType: 'string' },
16-
{ field: 'Employees', dataType: 'number' },
17-
{ field: 'ContactTitle', dataType: 'string' },
18-
{ field: 'DateCreated', dataType: 'date' },
19-
{ field: 'TimeCreated', dataType: 'time' },
20-
{ field: 'Address', dataType: 'string' },
21-
{ field: 'City', dataType: 'string' },
22-
{ field: 'Region', dataType: 'string' },
23-
{ field: 'PostalCode', dataType: 'string' },
24-
{ field: 'Phone', dataType: 'string' },
25-
{ field: 'Fax', dataType: 'string' },
26-
{ field: 'Contract', dataType: 'boolean' }
27-
];
2814

2915
public ngOnInit(): void {
30-
const tree = new FilteringExpressionsTree(FilteringLogic.And);
31-
tree.filteringOperands.push({
32-
fieldName: 'ID',
33-
condition: IgxStringFilteringOperand.instance().condition('contains'),
34-
searchVal: 'a',
35-
ignoreCase: true
16+
this.companiesFields = [
17+
{ field: "ID", dataType: "string" },
18+
{ field: "CompanyName", dataType: "string" },
19+
{ field: "ContactName", dataType: "string" },
20+
{ field: "Employees", dataType: "number" },
21+
{ field: "ContactTitle", dataType: "string" },
22+
{ field: "DateCreated", dataType: "date" },
23+
{ field: "TimeCreated", dataType: "time" },
24+
{ field: "Address", dataType: "string" },
25+
{ field: "City", dataType: "string" },
26+
{ field: "Region", dataType: "string" },
27+
{ field: "PostalCode", dataType: "string" },
28+
{ field: "Phone", dataType: "string" },
29+
{ field: "Fax", dataType: "string" },
30+
{ field: "Contract", dataType: "boolean" }
31+
];
32+
33+
this.ordersFields = [
34+
{ field: "CompanyID", dataType: "string" },
35+
{ field: "OrderID", dataType: "number" },
36+
{ field: "EmployeeId", dataType: "number" },
37+
{ field: "OrderDate", dataType: "date" },
38+
{ field: "RequiredDate", dataType: "date" },
39+
{ field: "ShippedDate", dataType: "date" },
40+
{ field: "ShipVia", dataType: "number" },
41+
{ field: "Freight", dataType: "number" },
42+
{ field: "ShipName", dataType: "string" },
43+
{ field: "ShipCity", dataType: "string" },
44+
{ field: "ShipPostalCode", dataType: "string" },
45+
{ field: "ShipCountry", dataType: "string" },
46+
{ field: "Region", dataType: "string" }
47+
];
48+
49+
this.entities = [
50+
{
51+
name: "Companies",
52+
fields: this.companiesFields
53+
},
54+
{
55+
name: "Orders",
56+
fields: this.ordersFields
57+
}
58+
];
59+
60+
const innerTree = new FilteringExpressionsTree(FilteringLogic.And, undefined, 'Companies', ['ID']);
61+
innerTree.filteringOperands.push({
62+
fieldName: 'Employees',
63+
condition: IgxNumberFilteringOperand.instance().condition('greaterThan'),
64+
conditionName: 'greaterThan',
65+
searchVal: 100
3666
});
37-
const orTree = new FilteringExpressionsTree(FilteringLogic.Or);
38-
orTree.filteringOperands.push({
39-
fieldName: 'ID',
40-
condition: IgxStringFilteringOperand.instance().condition('contains'),
41-
searchVal: 'b',
42-
ignoreCase: true
67+
innerTree.filteringOperands.push({
68+
fieldName: 'Contract',
69+
condition: IgxBooleanFilteringOperand.instance().condition('true'),
70+
conditionName: 'true'
4371
});
44-
orTree.filteringOperands.push({
45-
fieldName: 'CompanyName',
46-
condition: IgxStringFilteringOperand.instance().condition('contains'),
47-
searchVal: 'c',
48-
ignoreCase: true
72+
73+
const tree = new FilteringExpressionsTree(FilteringLogic.And, undefined, 'Orders', ['*']);
74+
tree.filteringOperands.push({
75+
fieldName: 'CompanyID',
76+
condition: IgxStringFilteringOperand.instance().condition('in'),
77+
conditionName: 'in',
78+
searchTree: innerTree
79+
});
80+
tree.filteringOperands.push({
81+
fieldName: 'OrderDate',
82+
condition: IgxDateFilteringOperand.instance().condition('before'),
83+
conditionName: 'before',
84+
searchVal: new Date('2024-01-01T00:00:00.000Z')
4985
});
50-
tree.filteringOperands.push(orTree);
5186
tree.filteringOperands.push({
52-
fieldName: 'CompanyName',
53-
condition: IgxStringFilteringOperand.instance().condition('contains'),
54-
searchVal: 'd',
55-
ignoreCase: true
87+
fieldName: 'ShippedDate',
88+
condition: IgxDateFilteringOperand.instance().condition('null'),
89+
conditionName: 'null'
5690
});
5791

5892
this.expressionTree = tree;

0 commit comments

Comments
 (0)