Skip to content

Commit 56b7fb8

Browse files
authored
Merge pull request #3631 from IgniteUI/dmdimitrov/query-builder-sql-sample
feat(query-builder): add SQL query sample
2 parents f7bda65 + 41dd42e commit 56b7fb8

9 files changed

Lines changed: 356 additions & 10 deletions

File tree

live-editing/configs/QueryBuilderConfigGenerator.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { Config, IConfigGenerator} from 'igniteui-live-editing'
22
import { BaseAppConfig } from './BaseConfig';
33
export class QueryBuilderConfigGenerator implements IConfigGenerator {
4-
5-
64
public generateConfigs(): Config[] {
75
const configs = new Array<Config>();
86

@@ -25,6 +23,13 @@ export class QueryBuilderConfigGenerator implements IConfigGenerator {
2523
shortenComponentPathBy: "/interactions/query-builder/"
2624
}));
2725

26+
// configs.push(new Config({
27+
// component: 'QueryBuilderSqlSampleComponent',
28+
// additionalDependencies: ["sql-formatter"],
29+
// appConfig: BaseAppConfig,
30+
// shortenComponentPathBy: "/interactions/query-builder/"
31+
// })); // sql-formatter is not available in the live editing environment and cannot be enabled per config atm
32+
2833
return configs;
2934
}
3035
}

package-lock.json

Lines changed: 80 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
"igniteui-webcomponents": "^5.3.0",
8282
"minireset.css": "0.0.6",
8383
"rxjs": "^7.8.2",
84+
"sql-formatter": "^15.4.11",
8485
"tslib": "^2.6.1",
8586
"zone.js": "~0.15.0"
8687
},

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,6 @@ export const interactionsRoutesData = {
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' },
5353
'query-builder-template-sample': { displayName: 'Query Builder Template Sample', parentName: 'Query Builder' },
54+
'query-builder-sql-sample': { displayName: 'Query Builder SQL Sample', parentName: 'Query Builder' },
5455
'query-builder-request-sample': { displayName: 'Query Builder Request Sample', parentName: 'Query Builder' }
5556
};

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 { QueryBuilderSqlSampleComponent } from './query-builder/query-builder-sql-sample/query-builder-sql-sample.component';
2627
import { QueryBuilderRequestSampleComponent } from './query-builder/query-builder-request-sample/query-builder-request-sample.component';
2728
import { RippleSample2Component } from './ripple/ripple-sample-2/ripple-sample-2.component';
2829
import { RippleSample3Component } from './ripple/ripple-sample-3/ripple-sample-3.component';
@@ -306,6 +307,11 @@ export const InteractionsRoutes: Routes = [
306307
data: interactionsRoutesData['query-builder-template-sample'],
307308
path: 'query-builder-template-sample'
308309
},
310+
{
311+
component: QueryBuilderSqlSampleComponent,
312+
data: interactionsRoutesData['query-builder-sql-sample'],
313+
path: 'query-builder-sql-sample'
314+
},
309315
{
310316
component: QueryBuilderRequestSampleComponent,
311317
data: interactionsRoutesData['query-builder-request-sample'],

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: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<div class="wrapper">
2+
<div class="flex-container">
3+
<igx-query-builder #queryBuilder
4+
[entities]="entities"
5+
[(expressionTree)]="expressionTree"
6+
(expressionTreeChange)="onChange()"
7+
class="container">
8+
</igx-query-builder>
9+
10+
<div class="container">
11+
<pre>{{sqlQuery}}</pre>
12+
</div>
13+
</div>
14+
15+
<igx-grid #grid [data]="data" [autoGenerate]="true" height="270px" [width]="'calc(100% - 40px)'">
16+
</igx-grid>
17+
</div>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
.wrapper {
2+
margin: 10px;
3+
height: 100%;
4+
overflow-y: auto;
5+
}
6+
7+
.flex-container {
8+
display: flex;
9+
flex-wrap: wrap;
10+
margin-right: 20px;
11+
}
12+
13+
.container {
14+
flex: 1 200px;
15+
box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.75);
16+
border-radius: 0.75rem;
17+
margin: 5px 0px 20px 20px;
18+
word-break: break-all;
19+
word-wrap: break-word;
20+
21+
pre {
22+
margin-left: 10px
23+
}
24+
}
25+
26+
igx-query-builder {
27+
flex: 1 100px;
28+
}
29+
30+
igx-grid {
31+
margin-left: 20px;
32+
}

0 commit comments

Comments
 (0)