Skip to content

Commit a8fb886

Browse files
authored
Merge pull request #3614 from IgniteUI/dTsvekov/fix-data-analysis-sample-master
fix(data-analysis): charts update functionality and extras update
2 parents 2ddf8f4 + 8b1d6f2 commit a8fb886

File tree

6 files changed

+91
-18
lines changed

6 files changed

+91
-18
lines changed

package-lock.json

Lines changed: 4 additions & 4 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 & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
"igniteui-angular": "^19.1.0",
6969
"igniteui-angular-charts": "^19.0.0",
7070
"igniteui-angular-core": "^19.0.0",
71-
"igniteui-angular-extras": "^19.0.3",
71+
"igniteui-angular-extras": "^19.1.1",
7272
"igniteui-angular-i18n": "^19.1.0",
7373
"igniteui-dockmanager": "^1.16.0",
7474
"igniteui-live-editing": "^3.0.0",

projects/app-lob/src/app/grid-dynamic-chart-data/data-analysis-dock-manager/data-analysis-dock-manager.component.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<igc-dockmanager #dock class="light-theme dock-m-position" [layout]="docLayout">
22
<div slot="grid" igxOverlayOutlet style="height: 100%">
33
<igx-grid #grid columnSelection="multiple" [moving]="true" igxChartIntegration igxConditionalFormatting igxContextMenu
4-
[chartData]="chartData" primaryKey="id" [data]="data" [allowFiltering]="true" [filterMode]="'excelStyleFilter'">
4+
primaryKey="id" [data]="data" [allowFiltering]="true" [filterMode]="'excelStyleFilter'">
55
<igx-column [sortable]="true" [disablePinning]="true" [disableHiding]="true" field="id" [hidden]="true"></igx-column>
66
<igx-column [sortable]="true" [disablePinning]="true" [disableHiding]="true" field="category" [width]="'110px'"></igx-column>
77
<igx-column [sortable]="true" [disablePinning]="true" [disableHiding]="true" field="type" [filterable]="false" [width]="'130px'"></igx-column>
@@ -111,7 +111,7 @@
111111
<div
112112
(click)="createChart(chart)"
113113
title="{{chart}}"
114-
[ngClass]="{'disabled': allCharts.indexOf(chart) === -1, 'selected': chart | hastDuplicateLayouts: dock.layout: selectedCharts}"
114+
[ngClass]="{'disabled': availableCharts.indexOf(chart) === -1, 'selected': chart | hastDuplicateLayouts: dock.layout: selectedCharts}"
115115
style="width: 60px; margin-right: 20px; cursor: pointer; position: relative;">
116116
<img src="assets/images/svg/charts/{{chart}}.svg" />
117117
@if (selectedCharts[chart]) {
@@ -133,3 +133,6 @@
133133
}
134134
</igc-dockmanager>
135135

136+
<ng-template #template>
137+
<span>Incompatible data</span>
138+
</ng-template>

projects/app-lob/src/app/grid-dynamic-chart-data/data-analysis-dock-manager/data-analysis-dock-manager.component.ts

Lines changed: 74 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
/* eslint-disable max-len */
2-
import { AfterViewInit, ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, OnInit, Pipe, PipeTransform, QueryList, ViewChild, ViewChildren } from '@angular/core';
3-
import { IgxChartIntegrationDirective, IgxContextMenuDirective, OPTIONS_TYPE, CHART_TYPE } from 'igniteui-angular-extras';
2+
import { AfterViewInit, ChangeDetectorRef, ViewContainerRef, Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, OnInit, Pipe, PipeTransform, QueryList, ViewChild, ViewChildren, TemplateRef } from '@angular/core';
3+
import { IgxChartIntegrationDirective, IgxConditionalFormattingDirective, IgxContextMenuDirective, OPTIONS_TYPE, CHART_TYPE, IDeterminedChartTypesArgs } from 'igniteui-angular-extras';
44
import { IgcDockManagerLayout, IgcDockManagerPaneType, IgcSplitPane, IgcSplitPaneOrientation } from 'igniteui-dockmanager';
55
import { FinancialData } from '../../data/financialData';
66
import { FloatingPanesService } from '../../services/floating-panes.service';
77
import { DockSlotComponent } from './dock-slot/dock-slot.component';
8-
import { IgxGridComponent, IgxColumnComponent, IgxCellTemplateDirective, IgxDividerDirective, IgxBadgeComponent } from 'igniteui-angular';
8+
import { IgxGridComponent, IgxColumnComponent, IgxCellTemplateDirective, IgxDividerDirective, IgxBadgeComponent, IColumnSelectionEventArgs } from 'igniteui-angular';
99
import { NgClass, DecimalPipe, TitleCasePipe, CurrencyPipe } from '@angular/common';
10+
import { debounceTime } from 'rxjs/operators';
1011

1112
@Pipe({
1213
name: 'filterType'
@@ -53,10 +54,12 @@ export class HastDuplicateLayouts implements PipeTransform {
5354
templateUrl: './data-analysis-dock-manager.component.html',
5455
styleUrls: ['./data-analysis-dock-manager.component.scss'],
5556
providers: [FloatingPanesService],
56-
imports: [IgxGridComponent, IgxChartIntegrationDirective, IgxContextMenuDirective, IgxBadgeComponent, IgxColumnComponent, IgxCellTemplateDirective, NgClass, IgxDividerDirective, DockSlotComponent, DecimalPipe, TitleCasePipe, CurrencyPipe, FilterTypePipe, HastDuplicateLayouts],
57+
imports: [IgxGridComponent, IgxConditionalFormattingDirective, IgxChartIntegrationDirective, IgxContextMenuDirective, IgxBadgeComponent, IgxColumnComponent, IgxCellTemplateDirective, NgClass, IgxDividerDirective, DockSlotComponent, DecimalPipe, TitleCasePipe, CurrencyPipe, FilterTypePipe, HastDuplicateLayouts],
5758
schemas: [CUSTOM_ELEMENTS_SCHEMA]
5859
})
59-
export class DataAnalysisDockManagerComponent implements OnInit, AfterViewInit {
60+
export class DataAnalysisDockManagerComponent implements OnInit, AfterViewInit {
61+
@ViewChild('grid', { read: IgxGridComponent, static: true })
62+
public grid: IgxGridComponent;
6063

6164
@ViewChild('dock', { read: ElementRef })
6265
public dockManager: ElementRef<HTMLIgcDockmanagerElement>;
@@ -67,6 +70,10 @@ export class DataAnalysisDockManagerComponent implements OnInit, AfterViewInit {
6770
@ViewChildren(DockSlotComponent)
6871
public dockSlots: QueryList<DockSlotComponent>;
6972

73+
@ViewChild('template', { read: TemplateRef })
74+
public emptyChartTemplate: TemplateRef<any>;
75+
76+
public availableCharts: CHART_TYPE[] = [];
7077
public allCharts: CHART_TYPE[] = [];
7178
public data;
7279
public chartData = [];
@@ -81,7 +88,7 @@ export class DataAnalysisDockManagerComponent implements OnInit, AfterViewInit {
8188
}
8289

8390
public ngAfterViewInit() {
84-
this.allCharts = this.chartIntegration.getAvailableCharts();
91+
this.allCharts = this.chartIntegration.getAllChartTypes();
8592
this.cdr.detectChanges();
8693
const pieChartOptions = {
8794
labelsPosition: 4,
@@ -96,6 +103,30 @@ export class DataAnalysisDockManagerComponent implements OnInit, AfterViewInit {
96103
chart.indexOf('Bar') === -1 ||
97104
chart !== CHART_TYPE.PIE)
98105
.forEach(chart => this.chartIntegration.setChartComponentOptions(chart, OPTIONS_TYPE.X_AXIS, { labelAngle: 30 }));
106+
107+
this.chartIntegration.onChartTypesDetermined.subscribe((args: IDeterminedChartTypesArgs) => {
108+
if (args.chartsAvailability.size === 0 || args.chartsForCreation.length === 0) {
109+
this.chartIntegration.disableCharts(this.allCharts);
110+
} else {
111+
args.chartsAvailability.forEach((isAvailable, chart) => {
112+
if (args.chartsForCreation.indexOf(chart) === -1) {
113+
this.chartIntegration.disableCharts([chart]);
114+
} else {
115+
this.chartIntegration.enableCharts([chart]);
116+
}
117+
});
118+
}
119+
this.availableCharts = this.chartIntegration.getAvailableCharts();
120+
});
121+
this.cdr.detectChanges();
122+
123+
this.grid.rangeSelected.subscribe(range => {
124+
this.createChartCommonLogic();
125+
});
126+
127+
this.grid.columnSelectionChanging.pipe(debounceTime(100)).subscribe((args: IColumnSelectionEventArgs) => {
128+
this.createChartCommonLogic();
129+
});
99130
}
100131

101132
// eslint-disable-next-line @typescript-eslint/member-ordering
@@ -163,12 +194,47 @@ export class DataAnalysisDockManagerComponent implements OnInit, AfterViewInit {
163194
this.paneService.appendPane(splitPane);
164195
const chartHost = this.getChartHostFromSlot(type);
165196
chartHost.viewContainerRef.clear();
166-
this.chartIntegration.chartFactory
167197
const chart = this.chartIntegration.chartFactory(type, chartHost.viewContainerRef);
168198

169199
this.dockManager.nativeElement.layout.floatingPanes.push(splitPane);
170200
this.docLayout = { ...this.dockManager.nativeElement.layout };
171201
this.selectedCharts[type] = chart;
172202
this.cdr.detectChanges();
173203
}
174-
}
204+
205+
public createChartCommonLogic() {
206+
if (Object.keys(this.selectedCharts).length !== 0) {
207+
setTimeout(() => {
208+
Object.keys(this.selectedCharts).forEach((c: CHART_TYPE) => {
209+
const chartHost = this.getChartHostFromSlot(c);
210+
if (this.availableCharts.indexOf(c) !== -1) {
211+
if (c !== CHART_TYPE.PIE && typeof this.selectedCharts[c] === 'object') {
212+
this.selectedCharts[c] = this.chartIntegration.chartFactory(c, null, this.selectedCharts[c]);
213+
} else {
214+
chartHost.viewContainerRef.clear();
215+
this.selectedCharts[c] = this.chartIntegration.chartFactory(c, chartHost.viewContainerRef);
216+
}
217+
} else {
218+
this.clearViewContainer(chartHost.viewContainerRef);
219+
const embeddedView = chartHost.viewContainerRef.createEmbeddedView(this.emptyChartTemplate);
220+
embeddedView.detectChanges();
221+
this.selectedCharts[c] = 'Empty';
222+
}
223+
});
224+
});
225+
}
226+
}
227+
228+
private clearViewContainer(viewContainerRef: ViewContainerRef) {
229+
for (let i = viewContainerRef.length -1; i >= 0; i--) {
230+
const viewRef = viewContainerRef.get(i);
231+
if (viewRef) {
232+
const componentInstance = (viewRef as any).context;
233+
if (componentInstance && (componentInstance as any).destroy) {
234+
(componentInstance as any).destroy();
235+
}
236+
}
237+
}
238+
viewContainerRef.clear();
239+
}
240+
}

projects/app-lob/src/app/grid-dynamic-chart-data/grid-dynamic-chart-data.component.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable max-len */
22
import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core';
3-
import { IgxChartIntegrationDirective, IgxContextMenuDirective, OPTIONS_TYPE, CHART_TYPE, PageHeaderComponent } from 'igniteui-angular-extras';
3+
import { IgxChartIntegrationDirective, IgxContextMenuDirective, IgxConditionalFormattingDirective, OPTIONS_TYPE, CHART_TYPE, PageHeaderComponent } from 'igniteui-angular-extras';
44

55
import { FinancialData } from '../data/financialData';
66
import { IgxGridComponent, IgxColumnComponent, IgxCellTemplateDirective } from 'igniteui-angular';
@@ -10,7 +10,7 @@ import { DecimalPipe, CurrencyPipe } from '@angular/common';
1010
selector: 'app-grid-dynamic-chart-data',
1111
templateUrl: './grid-dynamic-chart-data.component.html',
1212
styleUrls: ['./grid-dynamic-chart-data.component.scss'],
13-
imports: [IgxGridComponent, PageHeaderComponent, IgxChartIntegrationDirective, IgxContextMenuDirective, IgxColumnComponent, IgxCellTemplateDirective, DecimalPipe, CurrencyPipe]
13+
imports: [IgxGridComponent, PageHeaderComponent, IgxChartIntegrationDirective, IgxConditionalFormattingDirective, IgxContextMenuDirective, IgxColumnComponent, IgxCellTemplateDirective, DecimalPipe, CurrencyPipe]
1414
})
1515
export class GridDynamicChartDataComponent implements OnInit, AfterViewInit {
1616

@@ -42,4 +42,4 @@ export class GridDynamicChartDataComponent implements OnInit, AfterViewInit {
4242
public formatCurrency(value: number) {
4343
return '$' + value.toFixed(3);
4444
}
45-
}
45+
}

projects/app-lob/src/app/index/index.component.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
.main {
66
width: calc(100% - 300px);
7+
igx-navbar {
8+
position: relative;
9+
z-index: 0;
10+
}
711
}
812

913
.content {

0 commit comments

Comments
 (0)