Skip to content

Commit 0f15b30

Browse files
authored
Merge pull request #9233 from IgniteUI/update-finjs-devdemo-11.1
Dev demos update - add sample to test nested props update
2 parents ec41ee3 + 6010044 commit 0f15b30

16 files changed

+779
-198
lines changed

src/app/app.component.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,11 @@ export class AppComponent implements OnInit {
268268
icon: 'view_column',
269269
name: 'Grid FinJS'
270270
},
271+
{
272+
link: '/gridUpdates',
273+
icon: 'view_column',
274+
name: 'Grid Nested Props Update'
275+
},
271276
{
272277
link: '/gridRemoteVirtualization',
273278
icon: 'view_column',

src/app/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ import { MainComponent } from './grid-finjs/main.component';
142142
import { ControllerComponent } from './grid-finjs/controllers.component';
143143
import { CommonModule } from '@angular/common';
144144
import { GridEventsComponent } from './grid-events/grid-events.component';
145+
import { GridUpdatesComponent } from './grid-updates-test/grid-updates.component';
145146

146147
const components = [
147148
ActionStripSampleComponent,
@@ -258,6 +259,7 @@ const components = [
258259
GridEventsComponent,
259260
GridFilteringComponent,
260261
GridFinJSComponent,
262+
GridUpdatesComponent,
261263
MainComponent,
262264
ControllerComponent,
263265
GridExternalFilteringComponent,

src/app/app.routing.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ import { AnimationsSampleComponent } from './styleguide/animations/animations.sa
8585
import { GridFormattingComponent } from './grid-formatting/grid-formatting.component';
8686
import { MainComponent } from './grid-finjs/main.component';
8787
import { GridEventsComponent } from './grid-events/grid-events.component';
88+
import { GridUpdatesComponent } from './grid-updates-test/grid-updates.component';
8889

8990
const appRoutes = [
9091
{
@@ -405,6 +406,10 @@ const appRoutes = [
405406
path: 'gridEvents',
406407
component: GridEventsComponent
407408
},
409+
{
410+
path: 'gridUpdates',
411+
component: GridUpdatesComponent
412+
},
408413
];
409414

410415
export const routing = RouterModule.forRoot(appRoutes);

src/app/grid-finjs/controllers.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="controls-holder">
33
<div class="switches">
44
<div class="control-item">
5-
<igx-switch [checked]="false" [(ngModel)]="theme" (change)="onChange('theme', $event)">Dark</igx-switch>
5+
<igx-switch [checked]="false" (change)="onChange('theme', $event)">Dark</igx-switch>
66
</div>
77
<div class="control-item">
88
<igx-switch [checked]="true" (change)="onChange('grouped', $event)" color="blue" cssClass="finjs-sample-switch">

src/app/grid-finjs/controllers.component.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ export class ControllerComponent implements OnInit, OnDestroy {
1818
@Output() public volumeChanged = new EventEmitter<any>();
1919
@Output() public playAction = new EventEmitter<any>();
2020

21-
public selectionMode = 'multiple';
22-
public theme = false;
21+
public darkTheme = true;
2322
public volume = 1000;
2423
public frequency = 500;
2524
public controls = [

src/app/grid-finjs/grid-finjs.component.html

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
1-
<igx-grid #grid1 igxPreventDocumentScroll [data]="data" width="100%" height="800px" [autoGenerate]='false' displayDensity='compact' hiddenColumnsText="Hidden" primaryKey='ID' [rowSelection]="selectionMode" [allowFiltering]="true" [filterMode]="'excelStyleFilter'">
1+
<igx-grid #grid1
2+
igxPreventDocumentScroll
3+
width="100%" height="800px"
4+
displayDensity='compact'
5+
hiddenColumnsText="Hidden"
6+
primaryKey='ID'
7+
[(groupingExpressions)]="groupingExpressions"
8+
[autoGenerate]='false'
9+
[data]="data"
10+
[hideGroupedColumns]="true"
11+
[rowSelection]="selectionMode"
12+
[allowFiltering]="true"
13+
[filterMode]="'excelStyleFilter'">
214

315
<igx-grid-toolbar *ngIf="showToolbar">
416
<igx-grid-toolbar-actions>
@@ -35,7 +47,7 @@
3547
</ng-template>
3648
</igx-column>
3749
<igx-column [field]="'LastUpdated'" [width]="'120px'" [editable]='true' header="Last Update" dataType="date"></igx-column>
38-
<igx-column [field]="'Open Price'" [width]="'120px'" dataType="number" [formatter]="formatCurrency" [movable]="true" [sortable]="true"></igx-column>
50+
<igx-column [field]="'Open Price'" [width]="'120px'" dataType="currency" [pipeArgs]="columnFormat" [movable]="true" [sortable]="true"></igx-column>
3951
<igx-column [field]="'Price'" [width]="'110px'" dataType="number" [cellClasses]="trends" [movable]="true" [sortable]="true">
4052
<ng-template igxCell let-cell="cell">
4153
<div class="finjs-icons">
@@ -45,6 +57,9 @@
4557
</div>
4658
</ng-template>
4759
</igx-column>
60+
61+
<igx-column [field]="'Obj.Price'" [width]="'120px'"></igx-column>
62+
4863
<igx-column [field]="'Chart'" [width]="'60px'" [hidden]="false" [filterable]='false'>
4964
<ng-template igxCell let-cell="cell" class="center-text">
5065
<button class="button-icon" igxButton="icon" igxRippleCentered="true" tabindex="-1">
@@ -53,22 +68,22 @@
5368
</ng-template>
5469
</igx-column>
5570

56-
<igx-column [field]="'Change'" [width]="'120px'" dataType="number" [headerClasses]="'headerAlignSyle'" [sortable]="true" [cellClasses]="trendsChange" [formatter]="formatNumber" [movable]="true">
71+
<igx-column [field]="'Change'" [width]="'120px'" dataType="number" [headerClasses]="'headerAlignSyle'" [sortable]="true" [cellClasses]="trendsChange" [movable]="true">
5772
</igx-column>
5873

59-
<igx-column [field]="'Change(%)'" [width]="'110px'" dataType="number" [formatter]="percentage" [movable]="true" [sortable]="true" [cellClasses]="trendsChange">
74+
<igx-column [field]="'Change(%)'" [width]="'110px'" dataType="percent" [movable]="true" [sortable]="true" [cellClasses]="trendsChange">
6075
</igx-column>
6176

62-
<igx-column [field]="'Buy'" [width]="'110px'" dataType="number" [formatter]="formatCurrency" [movable]="true" [sortable]="true"></igx-column>
63-
<igx-column [field]="'Sell'" [width]="'110px'" dataType="number" [formatter]="formatCurrency" [movable]="true" [sortable]="true"></igx-column>
64-
<igx-column [field]="'Spread'" [width]="'110px'" dataType="number" [formatter]="formatNumber" [movable]="true">
77+
<igx-column [field]="'Buy'" [width]="'110px'" dataType="currency" [pipeArgs]="columnFormat" [movable]="true" [sortable]="true"></igx-column>
78+
<igx-column [field]="'Sell'" [width]="'110px'" dataType="currency" [pipeArgs]="columnFormat" [movable]="true" [sortable]="true"></igx-column>
79+
<igx-column [field]="'Spread'" [width]="'110px'" dataType="number" [pipeArgs]="columnFormat" [movable]="true">
6580
</igx-column>
66-
<igx-column [field]="'Volume'" [width]="'110px'" dataType="number" [formatter]="formatNumber" [movable]="true" [sortable]="true"></igx-column>
67-
<igx-column [field]="'High(D)'" [width]="'110px'" dataType="number" [formatter]="formatCurrency" [movable]="true" [sortable]="true"></igx-column>
68-
<igx-column [field]="'Low(D)'" [width]="'110px'" dataType="number" [formatter]="formatCurrency" [movable]="true" [sortable]="true"></igx-column>
69-
<igx-column [field]="'High(Y)'" [width]="'110px'" dataType="number" [formatter]="formatCurrency" [movable]="true" [sortable]="true"></igx-column>
70-
<igx-column [field]="'Low(Y)'" [width]="'110px'" dataType="number" [formatter]="formatCurrency" [movable]="true" [sortable]="true"></igx-column>
71-
<igx-column [field]="'Start(Y)'" [width]="'110px'" dataType="number" [formatter]="formatCurrency" [movable]="true" [sortable]="true"></igx-column>
81+
<igx-column [field]="'Volume'" [width]="'110px'" dataType="number" [movable]="true" [sortable]="true"></igx-column>
82+
<igx-column [field]="'High(D)'" [width]="'110px'" dataType="currency" [movable]="true" [sortable]="true"></igx-column>
83+
<igx-column [field]="'Low(D)'" [width]="'110px'" dataType="currency" [movable]="true" [sortable]="true"></igx-column>
84+
<igx-column [field]="'High(Y)'" [width]="'110px'" dataType="currency" [movable]="true" [sortable]="true"></igx-column>
85+
<igx-column [field]="'Low(Y)'" [width]="'110px'" dataType="currency" [movable]="true" [sortable]="true"></igx-column>
86+
<igx-column [field]="'Start(Y)'" [width]="'110px'" dataType="currency" [movable]="true" [sortable]="true"></igx-column>
7287
<igx-column [field]="'IndGrou'" [width]="'100px'" [filterable]='false'></igx-column>
7388
<igx-column [field]="'IndSect'" [width]="'120px'" [filterable]='false' [resizable]='true'></igx-column>
7489
<igx-column [field]="'IndSubg'" [width]="'100px'" [filterable]='false'></igx-column>
Lines changed: 34 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -1,146 +1,58 @@
11
import {
2-
AfterViewInit,
32
Component,
4-
EventEmitter,
5-
OnDestroy,
6-
OnInit,
7-
Output,
3+
Input,
84
ViewChild } from '@angular/core';
95
import {
106
DefaultSortingStrategy,
7+
GridSelectionMode,
8+
IGroupingExpression,
119
IgxGridComponent,
1210
SortingDirection
1311
} from 'igniteui-angular';
1412
import { Contract, REGIONS } from '../shared/financialData';
15-
import { LocalService } from '../shared/local.service';
13+
14+
const GROUPING_EXPRESSIONS: IGroupingExpression[] = [{
15+
dir: SortingDirection.Desc,
16+
fieldName: 'Category',
17+
ignoreCase: false,
18+
strategy: DefaultSortingStrategy.instance()
19+
},
20+
{
21+
dir: SortingDirection.Desc,
22+
fieldName: 'Type',
23+
ignoreCase: false,
24+
strategy: DefaultSortingStrategy.instance()
25+
},
26+
{
27+
dir: SortingDirection.Desc,
28+
fieldName: 'Contract',
29+
ignoreCase: false,
30+
strategy: DefaultSortingStrategy.instance()
31+
}
32+
];
1633

1734
@Component({
1835
selector: 'app-finjs-grid',
1936
styleUrls: ['./grid-finjs.component.scss'],
2037
templateUrl: './grid-finjs.component.html'
2138
})
22-
export class GridFinJSComponent implements OnInit, AfterViewInit, OnDestroy {
39+
export class GridFinJSComponent {
2340
@ViewChild('grid1', { static: true }) public grid: IgxGridComponent;
2441

25-
@Output() public selectedDataChanged = new EventEmitter<any>();
26-
@Output() public keyDown = new EventEmitter<any>();
27-
@Output() public chartColumnKeyDown = new EventEmitter<any>();
42+
@Input()
43+
public data: any;
2844

29-
public data = [];
30-
public multiCellSelection: { data: any[] } = { data: [] };
31-
public selectionMode = 'multiple';
45+
public selectionMode: GridSelectionMode = GridSelectionMode.multiple;
3246
public contracts = Contract;
3347
public regions = REGIONS;
48+
public columnFormat = { digitsInfo: '1.3-3'};
3449
public showToolbar = true;
35-
public volume = 1000;
36-
public frequency = 500;
37-
private subscription$;
38-
39-
constructor(public finService: LocalService) {
40-
this.finService.getFinancialData(this.volume);
41-
this.subscription$ = this.finService.records.subscribe(x => {
42-
this.data = x;
43-
});
44-
}
45-
46-
public ngOnInit() {
47-
this.grid.groupingExpressions = [{
48-
dir: SortingDirection.Desc,
49-
fieldName: 'Category',
50-
ignoreCase: false,
51-
strategy: DefaultSortingStrategy.instance()
52-
},
53-
{
54-
dir: SortingDirection.Desc,
55-
fieldName: 'Type',
56-
ignoreCase: false,
57-
strategy: DefaultSortingStrategy.instance()
58-
},
59-
{
60-
dir: SortingDirection.Desc,
61-
fieldName: 'Settlement',
62-
ignoreCase: false,
63-
strategy: DefaultSortingStrategy.instance()
64-
}
65-
];
66-
}
67-
68-
public ngAfterViewInit() {
69-
this.grid.hideGroupedColumns = true;
70-
this.grid.reflow();
71-
}
72-
73-
public ngOnDestroy() {
74-
if (this.subscription$) {
75-
this.subscription$.unsubscribe();
76-
}
77-
}
50+
public groupingExpressions: IGroupingExpression[] = GROUPING_EXPRESSIONS;
7851

79-
/** Event Handlers */
52+
constructor() { }
8053

81-
public onChange() {
82-
if (this.grid.groupingExpressions.length > 0) {
83-
this.grid.groupingExpressions = [];
84-
} else {
85-
this.grid.groupingExpressions = [{
86-
dir: SortingDirection.Desc,
87-
fieldName: 'Category',
88-
ignoreCase: false,
89-
strategy: DefaultSortingStrategy.instance()
90-
},
91-
{
92-
dir: SortingDirection.Desc,
93-
fieldName: 'Type',
94-
ignoreCase: false,
95-
strategy: DefaultSortingStrategy.instance()
96-
},
97-
{
98-
dir: SortingDirection.Desc,
99-
fieldName: 'Contract',
100-
ignoreCase: false,
101-
strategy: DefaultSortingStrategy.instance()
102-
}
103-
];
104-
}
105-
}
106-
107-
public toggleGrouping() {
108-
if (this.grid.groupingExpressions.length > 0) {
109-
this.grid.groupingExpressions = [];
110-
} else {
111-
this.grid.groupingExpressions = [{
112-
dir: SortingDirection.Desc,
113-
fieldName: 'Category',
114-
ignoreCase: false,
115-
strategy: DefaultSortingStrategy.instance()
116-
},
117-
{
118-
dir: SortingDirection.Desc,
119-
fieldName: 'Type',
120-
ignoreCase: false,
121-
strategy: DefaultSortingStrategy.instance()
122-
},
123-
{
124-
dir: SortingDirection.Desc,
125-
fieldName: 'Contract',
126-
ignoreCase: false,
127-
strategy: DefaultSortingStrategy.instance()
128-
}
129-
];
130-
}
131-
}
132-
133-
/** Grid Formatters */
134-
public formatNumber(value: number) {
135-
return value.toFixed(2);
136-
}
137-
138-
public percentage(value: number) {
139-
return value.toFixed(2) + '%';
140-
}
141-
142-
public formatCurrency(value: number) {
143-
return '$' + value.toFixed(3);
54+
public toggleGrouping(newValue: boolean) {
55+
this.groupingExpressions = newValue ? GROUPING_EXPRESSIONS : [];
14456
}
14557

14658
/** Grid CellStyles and CellClasses */
@@ -151,7 +63,7 @@ export class GridFinJSComponent implements OnInit, AfterViewInit, OnDestroy {
15163
private strongPositive = (rowData: any): boolean => rowData['Change(%)'] >= 1;
15264
private strongNegative = (rowData: any): boolean => rowData['Change(%)'] <= -1;
15365

154-
/* eslint-disable @typescript-eslint/member-ordering */
66+
// eslint-disable-next-line @typescript-eslint/member-ordering
15567
public trends = {
15668
changeNeg: this.changeNegative,
15769
changePos: this.changePositive,
@@ -161,15 +73,11 @@ export class GridFinJSComponent implements OnInit, AfterViewInit, OnDestroy {
16173
strongPositive: this.strongPositive
16274
};
16375

76+
// eslint-disable-next-line @typescript-eslint/member-ordering
16477
public trendsChange = {
16578
changeNeg2: this.changeNegative,
16679
changePos2: this.changePositive,
16780
strongNegative2: this.strongNegative,
16881
strongPositive2: this.strongPositive
16982
};
170-
/* eslint-enable @typescript-eslint/member-ordering */
171-
172-
public get grouped(): boolean {
173-
return this.grid.groupingExpressions.length > 0;
174-
}
17583
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
<div class="grid__wrapper" [class.fin-dark-theme]="theme">
1+
<div class="grid__wrapper" [class.fin-dark-theme]="darkTheme">
22
<app-finjs-controllers #controllers
33
(switchChanged)="onSwitchChanged($event)"
44
(volumeChanged)="onVolumeChanged($event)"
55
(playAction)="onPlayAction($event)">
66
</app-finjs-controllers>
7-
<app-finjs-grid #grid>
7+
<app-finjs-grid #grid [data]="data$ | async">
88
</app-finjs-grid>
99
</div>

src/app/grid-finjs/main.component.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
position: relative;
33
width: 100%;
44
height: 100%;
5+
min-height: 100%;
6+
display: flex;
7+
flex-direction: column;
58
top: 0;
69
left: 0;
710
padding: 15px;

0 commit comments

Comments
 (0)