diff --git a/src/app/interactions/interactions-routes-data.ts b/src/app/interactions/interactions-routes-data.ts index 99535f672e..aec5026988 100644 --- a/src/app/interactions/interactions-routes-data.ts +++ b/src/app/interactions/interactions-routes-data.ts @@ -50,5 +50,6 @@ export const interactionsRoutesData = { 'icons-sample': { displayName: 'Icons sample', parentName: 'Drag and Drop' }, 'query-builder-sample-1': { displayName: 'Query Builder Sample 1', parentName: 'Query Builder' }, 'query-builder-style': { displayName: 'Query Builder Style Sample', parentName: 'Query Builder' }, - 'query-builder-template-sample': { displayName: 'Query Builder Template Sample', parentName: 'Query Builder' } + 'query-builder-template-sample': { displayName: 'Query Builder Template Sample', parentName: 'Query Builder' }, + 'query-builder-request-sample': { displayName: 'Query Builder Request Sample', parentName: 'Query Builder' } }; diff --git a/src/app/interactions/interactions.routes.ts b/src/app/interactions/interactions.routes.ts index 331b92e785..c08e838b57 100644 --- a/src/app/interactions/interactions.routes.ts +++ b/src/app/interactions/interactions.routes.ts @@ -23,6 +23,7 @@ import { OverlayStylingComponent } from './overlay/overlay-styling/overlay-styli import { QueryBuilderSample1Component } from './query-builder/query-builder-sample-1/query-builder-sample-1.component'; import { QueryBuilderStyleComponent } from './query-builder/query-builder-style/query-builder-style.component'; import { QueryBuilderTemplateSampleComponent } from './query-builder/query-builder-template-sample/query-builder-template-sample.component'; +import { QueryBuilderRequestSampleComponent } from './query-builder/query-builder-request-sample/query-builder-request-sample.component'; import { RippleSample2Component } from './ripple/ripple-sample-2/ripple-sample-2.component'; import { RippleSample3Component } from './ripple/ripple-sample-3/ripple-sample-3.component'; import { RippleSample4Component } from './ripple/ripple-sample-4/ripple-sample-4.component'; @@ -304,5 +305,10 @@ export const InteractionsRoutes: Routes = [ component: QueryBuilderTemplateSampleComponent, data: interactionsRoutesData['query-builder-template-sample'], path: 'query-builder-template-sample' + }, + { + component: QueryBuilderRequestSampleComponent, + data: interactionsRoutesData['query-builder-request-sample'], + path: 'query-builder-request-sample' } ]; diff --git a/src/app/interactions/query-builder/query-builder-request-sample/query-builder-request-sample.component.html b/src/app/interactions/query-builder/query-builder-request-sample/query-builder-request-sample.component.html new file mode 100644 index 0000000000..1bfda85338 --- /dev/null +++ b/src/app/interactions/query-builder/query-builder-request-sample/query-builder-request-sample.component.html @@ -0,0 +1,11 @@ +
+ + + +
+ +
+
\ No newline at end of file diff --git a/src/app/interactions/query-builder/query-builder-request-sample/query-builder-request-sample.component.scss b/src/app/interactions/query-builder/query-builder-request-sample/query-builder-request-sample.component.scss new file mode 100644 index 0000000000..8c7b87e635 --- /dev/null +++ b/src/app/interactions/query-builder/query-builder-request-sample/query-builder-request-sample.component.scss @@ -0,0 +1,11 @@ +.wrapper{ + margin: 10px; + height: 100%; + overflow-y: auto; +} + +.output-area{ + box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.75); + border-radius: 4px; + margin: 0 20px 20px 20px; +} \ No newline at end of file diff --git a/src/app/interactions/query-builder/query-builder-request-sample/query-builder-request-sample.component.ts b/src/app/interactions/query-builder/query-builder-request-sample/query-builder-request-sample.component.ts new file mode 100644 index 0000000000..319109b425 --- /dev/null +++ b/src/app/interactions/query-builder/query-builder-request-sample/query-builder-request-sample.component.ts @@ -0,0 +1,76 @@ +import { HttpClient } from '@angular/common/http'; +import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; +import { FilteringExpressionsTree, FilteringLogic, IExpressionTree, IgxColumnComponent, IgxGridComponent, IgxQueryBuilderComponent } from 'igniteui-angular'; + +const API_ENDPOINT = 'https://data-northwind.indigo.design'; + +@Component({ + selector: 'query-builder-request-sample', + styleUrls: ['./query-builder-request-sample.component.scss'], + templateUrl: 'query-builder-request-sample.component.html', + imports: [IgxQueryBuilderComponent, IgxGridComponent, IgxColumnComponent] +}) +export class QueryBuilderRequestSampleComponent implements OnInit { + @ViewChild('grid', { static: true }) + public grid: IgxGridComponent; + + public entities: any[]; + public customersFields: any[]; + public ordersFields: any[]; + public expressionTree: IExpressionTree; + public data: any[] = []; + + constructor(private http: HttpClient, private cdr: ChangeDetectorRef) {} + + public ngOnInit(): void { + this.customersFields = [ + { field: "customerId", dataType: "string" }, + { field: "companyName", dataType: "string" }, + { field: "contactName", dataType: "string" }, + { field: "contactTitle", dataType: "string" } + ]; + + this.ordersFields = [ + { field: "orderId", dataType: "number" }, + { field: "customerId", dataType: "string" }, + { field: "employeeId", dataType: "number" }, + { field: "shipperId", dataType: "number" }, + { field: "orderDate", dataType: "date" }, + { field: "requiredDate", dataType: "date" }, + { field: "shipVia", dataType: "number" }, + { field: "freight", dataType: "number" }, + { field: "shipName", dataType: "string" }, + { field: "completed", dataType: "boolean" } + ]; + + this.entities = [ + { + name: "Customers", + fields: this.customersFields + }, + { + name: "Orders", + fields: this.ordersFields + } + ]; + + const tree = new FilteringExpressionsTree(FilteringLogic.And, undefined, 'Orders', ['orderId', 'customerId', 'employeeId', 'shipperId', 'orderDate', 'requiredDate', 'shipVia', 'freight', 'shipName', 'completed']); + this.expressionTree = tree; + + this.onChange(); + } + + public onChange() { + this.grid.isLoading = true; + this.http.post(`${API_ENDPOINT}/QueryBuilder/ExecuteQuery`, this.expressionTree).subscribe(data =>{ + this.data = Object.values(data)[0]; + this.grid.isLoading = false; + }); + this.cdr.detectChanges(); + this.calculateColsInView(); + } + + private calculateColsInView() { + this.grid.columns.forEach(column => column.hidden = !this.expressionTree.returnFields.includes(column.field)); + } +} \ No newline at end of file