igniteui-angular-extras 15.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/esm2020/igniteui-angular-extras.mjs +5 -0
- package/esm2020/images/charts.mjs +408 -0
- package/esm2020/images/conditions.mjs +95 -0
- package/esm2020/lib/context-menu/chart-dialog/chart-dialog.component.mjs +67 -0
- package/esm2020/lib/context-menu/context-menu.component.mjs +177 -0
- package/esm2020/lib/context-menu/igx-context-menu.directive.mjs +160 -0
- package/esm2020/lib/directives/chart-integration/chart-integration.directive.mjs +312 -0
- package/esm2020/lib/directives/chart-integration/chart-types.mjs +28 -0
- package/esm2020/lib/directives/chart-integration/initializers.mjs +103 -0
- package/esm2020/lib/directives/conditional-formatting/conditional-formatting.directive.mjs +311 -0
- package/esm2020/lib/igniteui-angular-extras.module.mjs +104 -0
- package/esm2020/lib/pipes/svg.pipe.mjs +20 -0
- package/esm2020/public-api.mjs +21 -0
- package/fesm2015/igniteui-angular-extras.mjs +1789 -0
- package/fesm2015/igniteui-angular-extras.mjs.map +1 -0
- package/fesm2020/igniteui-angular-extras.mjs +1782 -0
- package/fesm2020/igniteui-angular-extras.mjs.map +1 -0
- package/images/charts.d.ts +16 -0
- package/images/conditions.d.ts +10 -0
- package/index.d.ts +5 -0
- package/lib/context-menu/chart-dialog/chart-dialog.component.d.ts +31 -0
- package/lib/context-menu/context-menu.component.d.ts +38 -0
- package/lib/context-menu/igx-context-menu.directive.d.ts +33 -0
- package/lib/directives/chart-integration/chart-integration.directive.d.ts +52 -0
- package/lib/directives/chart-integration/chart-types.d.ts +25 -0
- package/lib/directives/chart-integration/initializers.d.ts +39 -0
- package/lib/directives/conditional-formatting/conditional-formatting.directive.d.ts +95 -0
- package/lib/igniteui-angular-extras.module.d.ts +14 -0
- package/lib/pipes/svg.pipe.d.ts +10 -0
- package/package.json +35 -0
- package/public-api.d.ts +17 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { Directive, EventEmitter, Optional, Output } from '@angular/core';
|
|
2
|
+
import { AbsoluteScrollStrategy, AutoPositionStrategy, HorizontalAlignment, VerticalAlignment } from '@infragistics/igniteui-angular';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { debounceTime, filter, merge, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { IgxContextMenuComponent } from './context-menu.component';
|
|
6
|
+
import { ResizeObserver } from '@juggle/resize-observer';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@infragistics/igniteui-angular";
|
|
9
|
+
import * as i2 from "../directives/conditional-formatting/conditional-formatting.directive";
|
|
10
|
+
import * as i3 from "../directives/chart-integration/chart-integration.directive";
|
|
11
|
+
export class IgxContextMenuDirective {
|
|
12
|
+
constructor(grid, textFormatter, chartsDirective, overlayService) {
|
|
13
|
+
this.grid = grid;
|
|
14
|
+
this.textFormatter = textFormatter;
|
|
15
|
+
this.chartsDirective = chartsDirective;
|
|
16
|
+
this.overlayService = overlayService;
|
|
17
|
+
this.onButtonClose = new EventEmitter();
|
|
18
|
+
this.formatters = [];
|
|
19
|
+
this.charts = [];
|
|
20
|
+
this.gridResizeNotify = new Subject();
|
|
21
|
+
this._collapsed = true;
|
|
22
|
+
this.destroy$ = new Subject();
|
|
23
|
+
this._analyticsBtnSettings = {
|
|
24
|
+
closeOnOutsideClick: false,
|
|
25
|
+
modal: false
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
ngOnInit() {
|
|
29
|
+
this.gridResizeNotify.pipe(takeUntil(this.destroy$))
|
|
30
|
+
.subscribe(() => {
|
|
31
|
+
if (this._id && !this._collapsed) {
|
|
32
|
+
this.renderButton();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
ngAfterViewInit() {
|
|
37
|
+
this.setUpGridListeners();
|
|
38
|
+
if (this.textFormatter) {
|
|
39
|
+
this.textFormatter.onFormattersReady.pipe(takeUntil(this.destroy$))
|
|
40
|
+
.subscribe(names => this.formatters = names);
|
|
41
|
+
}
|
|
42
|
+
if (this.chartsDirective) {
|
|
43
|
+
this.chartsDirective.onChartTypesDetermined.pipe(takeUntil(this.destroy$))
|
|
44
|
+
.subscribe((args) => this.charts = args.chartsForCreation);
|
|
45
|
+
}
|
|
46
|
+
this.overlayService.opening.pipe(takeUntil(this.destroy$))
|
|
47
|
+
.subscribe((args) => {
|
|
48
|
+
if (args.componentRef) {
|
|
49
|
+
const instance = args.componentRef.instance;
|
|
50
|
+
instance.contextDirective = this;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
ngOnDestroy() {
|
|
55
|
+
this.destroy$.next(true);
|
|
56
|
+
this.destroy$.complete();
|
|
57
|
+
if (!this._collapsed) {
|
|
58
|
+
this.close();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
setUpGridListeners() {
|
|
62
|
+
this.contentObserver = new ResizeObserver(() => this.gridResizeNotify.next());
|
|
63
|
+
this.contentObserver.observe(this.grid.nativeElement);
|
|
64
|
+
this.grid.rangeSelected.pipe(takeUntil(this.destroy$))
|
|
65
|
+
.subscribe((args) => {
|
|
66
|
+
this._range = args;
|
|
67
|
+
if (this.chartsDirective) {
|
|
68
|
+
if (this.grid.getSelectedRanges().length === 1) {
|
|
69
|
+
this.chartsDirective.chartData = this.grid.getSelectedData();
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.chartsDirective.chartData = [];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!this._collapsed) {
|
|
76
|
+
this.onButtonClose.emit();
|
|
77
|
+
}
|
|
78
|
+
this.renderButton();
|
|
79
|
+
});
|
|
80
|
+
this.grid.verticalScrollContainer.chunkLoad.pipe(merge(this.grid.parentVirtDir.chunkLoad, this.grid.filteringDone, this.grid.columnResized, this.grid.columnVisibilityChanged.pipe(debounceTime(30))), filter(() => this._range), takeUntil(this.destroy$)).subscribe(() => {
|
|
81
|
+
this.onButtonClose.emit();
|
|
82
|
+
this.renderButton();
|
|
83
|
+
});
|
|
84
|
+
this.grid.selected.pipe(merge(this.grid.pagingDone, this.grid.onGroupingDone, this.grid.perPageChange), takeUntil(this.destroy$)).subscribe((args) => {
|
|
85
|
+
if (this.grid.selectedCells.length < 2 || args.expressions) {
|
|
86
|
+
this._range = undefined;
|
|
87
|
+
this.close();
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
renderButton() {
|
|
92
|
+
if (!this._range) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
let rowIndex = this._range.rowEnd;
|
|
96
|
+
let colIndex = +this._range.columnEnd;
|
|
97
|
+
while (colIndex >= this._range.columnStart && !this.grid.navigation.isColumnFullyVisible(colIndex)) {
|
|
98
|
+
colIndex--;
|
|
99
|
+
}
|
|
100
|
+
while (rowIndex >= this._range.rowStart && this.grid.navigation.shouldPerformVerticalScroll(rowIndex, -1)) {
|
|
101
|
+
rowIndex--;
|
|
102
|
+
}
|
|
103
|
+
const field = this.grid.visibleColumns[colIndex] ? this.grid.visibleColumns[colIndex].field : '';
|
|
104
|
+
const cell = this.grid.gridAPI.get_cell_by_index(rowIndex, field);
|
|
105
|
+
if (!cell || !this.isWithInRange(cell.row.key, cell.column.index - 1)) {
|
|
106
|
+
this.close();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this._analyticsBtnSettings.positionStrategy = new AutoPositionStrategy({
|
|
110
|
+
horizontalDirection: HorizontalAlignment.Right,
|
|
111
|
+
horizontalStartPoint: HorizontalAlignment.Right,
|
|
112
|
+
verticalStartPoint: VerticalAlignment.Bottom,
|
|
113
|
+
verticalDirection: VerticalAlignment.Bottom, closeAnimation: null,
|
|
114
|
+
target: cell.nativeElement
|
|
115
|
+
});
|
|
116
|
+
this._analyticsBtnSettings.scrollStrategy = new AbsoluteScrollStrategy();
|
|
117
|
+
const info = this.overlayService.getOverlayById(this._id);
|
|
118
|
+
if (info) {
|
|
119
|
+
info.settings.positionStrategy = this._analyticsBtnSettings.positionStrategy;
|
|
120
|
+
}
|
|
121
|
+
this._collapsed ? this.show() : this.overlayService.reposition(this._id);
|
|
122
|
+
}
|
|
123
|
+
show() {
|
|
124
|
+
if (!this._collapsed) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
this._collapsed = false;
|
|
128
|
+
this._id = this._id ? this._id :
|
|
129
|
+
this.overlayService.attach(IgxContextMenuComponent, this._analyticsBtnSettings);
|
|
130
|
+
this.overlayService.show(this._id);
|
|
131
|
+
}
|
|
132
|
+
close() {
|
|
133
|
+
if (this._collapsed) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
this._collapsed = true;
|
|
137
|
+
this.overlayService.hide(this._id);
|
|
138
|
+
this.onButtonClose.emit();
|
|
139
|
+
this._id = undefined;
|
|
140
|
+
}
|
|
141
|
+
isWithInRange(rInex, cIndex) {
|
|
142
|
+
return rInex >= this._range.rowStart && rInex <= this._range.rowEnd
|
|
143
|
+
&& cIndex >= this._range.columnStart && cIndex <= this._range.columnEnd;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
IgxContextMenuDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: IgxContextMenuDirective, deps: [{ token: i1.IgxGridComponent }, { token: i2.IgxConditionalFormattingDirective, optional: true }, { token: i3.IgxChartIntegrationDirective, optional: true }, { token: i1.IgxOverlayService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
147
|
+
IgxContextMenuDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: IgxContextMenuDirective, selector: "[igxContextMenu]", outputs: { onButtonClose: "onButtonClose" }, ngImport: i0 });
|
|
148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: IgxContextMenuDirective, decorators: [{
|
|
149
|
+
type: Directive,
|
|
150
|
+
args: [{
|
|
151
|
+
selector: '[igxContextMenu]'
|
|
152
|
+
}]
|
|
153
|
+
}], ctorParameters: function () { return [{ type: i1.IgxGridComponent }, { type: i2.IgxConditionalFormattingDirective, decorators: [{
|
|
154
|
+
type: Optional
|
|
155
|
+
}] }, { type: i3.IgxChartIntegrationDirective, decorators: [{
|
|
156
|
+
type: Optional
|
|
157
|
+
}] }, { type: i1.IgxOverlayService }]; }, propDecorators: { onButtonClose: [{
|
|
158
|
+
type: Output
|
|
159
|
+
}] } });
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWd4LWNvbnRleHQtbWVudS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyLWV4dHJhcy9zcmMvbGliL2NvbnRleHQtbWVudS9pZ3gtY29udGV4dC1tZW51LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUN2QixpQkFBaUIsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5SCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBS3pELE1BQU0sT0FBTyx1QkFBdUI7SUFnQmhDLFlBQW1CLElBQXNCLEVBQ1YsYUFBZ0QsRUFDaEQsZUFBNkMsRUFDeEQsY0FBaUM7UUFIbEMsU0FBSSxHQUFKLElBQUksQ0FBa0I7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBbUM7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQThCO1FBQ3hELG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQWpCcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWxELGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFJaEMsZUFBVSxHQUFHLElBQUks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QztZQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLEtBQUs7UUFDVCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7SUFDekIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTTtRQUMvQixPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2VBQzVELE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDaEYsQ0FBQzs7b0hBOUlRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtpQkFDL0I7OzBCQWtCZ0IsUUFBUTs7MEJBQ1IsUUFBUTs0RUFoQkosYUFBYTtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBPcHRpb25hbCwgT3V0cHV0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5LCBBdXRvUG9zaXRpb25TdHJhdGVneSwgSG9yaXpvbnRhbEFsaWdubWVudCwgSWd4R3JpZENvbXBvbmVudCxcclxuICAgIElneE92ZXJsYXlTZXJ2aWNlLCBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncywgVmVydGljYWxBbGlnbm1lbnQsIE92ZXJsYXlTZXR0aW5ncyB9IGZyb20gJ0BpbmZyYWdpc3RpY3MvaWduaXRldWktYW5ndWxhcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1lcmdlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElneENoYXJ0SW50ZWdyYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2NoYXJ0LWludGVncmF0aW9uL2NoYXJ0LWludGVncmF0aW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElneENvbmRpdGlvbmFsRm9ybWF0dGluZ0RpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY29uZGl0aW9uYWwtZm9ybWF0dGluZy9jb25kaXRpb25hbC1mb3JtYXR0aW5nLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElneENvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9jb250ZXh0LW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICdAanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlcic7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2lneENvbnRleHRNZW51XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIElneENvbnRleHRNZW51RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25CdXR0b25DbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIHB1YmxpYyBmb3JtYXR0ZXJzID0gW107XHJcbiAgICBwdWJsaWMgY2hhcnRzID0gW107XHJcbiAgICBwdWJsaWMgZ3JpZFJlc2l6ZU5vdGlmeSA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBwcml2YXRlIGNvbnRlbnRPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XHJcbiAgICBwcml2YXRlIF9yYW5nZTtcclxuICAgIHByaXZhdGUgX2lkO1xyXG4gICAgcHJpdmF0ZSBfY29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBwcml2YXRlIF9hbmFseXRpY3NCdG5TZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xyXG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IGZhbHNlLFxyXG4gICAgICAgIG1vZGFsOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIHRleHRGb3JtYXR0ZXI6IElneENvbmRpdGlvbmFsRm9ybWF0dGluZ0RpcmVjdGl2ZSxcclxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBjaGFydHNEaXJlY3RpdmU6IElneENoYXJ0SW50ZWdyYXRpb25EaXJlY3RpdmUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSkgeyB9XHJcblxyXG4gICAgcHVibGljIG5nT25Jbml0ICgpIHtcclxuICAgICAgICB0aGlzLmdyaWRSZXNpemVOb3RpZnkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faWQgJiYgIXRoaXMuX2NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQnV0dG9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNldFVwR3JpZExpc3RlbmVycygpO1xyXG4gICAgICAgIGlmICh0aGlzLnRleHRGb3JtYXR0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy50ZXh0Rm9ybWF0dGVyLm9uRm9ybWF0dGVyc1JlYWR5LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShuYW1lcyA9PiB0aGlzLmZvcm1hdHRlcnMgPSBuYW1lcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0c0RpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXJ0c0RpcmVjdGl2ZS5vbkNoYXJ0VHlwZXNEZXRlcm1pbmVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoYXJncykgPT4gdGhpcy5jaGFydHMgPSBhcmdzLmNoYXJ0c0ZvckNyZWF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5vcGVuaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChhcmdzOiBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuY29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSAoYXJncy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgSWd4Q29udGV4dE1lbnVDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbnRleHREaXJlY3RpdmUgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0VXBHcmlkTGlzdGVuZXJzKCkge1xyXG4gICAgICAgIHRoaXMuY29udGVudE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMuZ3JpZFJlc2l6ZU5vdGlmeS5uZXh0KCkpO1xyXG4gICAgICAgIHRoaXMuY29udGVudE9ic2VydmVyLm9ic2VydmUodGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgICAgICB0aGlzLmdyaWQucmFuZ2VTZWxlY3RlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmFuZ2UgPSBhcmdzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnRzRGlyZWN0aXZlICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5ncmlkLmdldFNlbGVjdGVkUmFuZ2VzKCkubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRzRGlyZWN0aXZlLmNoYXJ0RGF0YSA9IHRoaXMuZ3JpZC5nZXRTZWxlY3RlZERhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0c0RpcmVjdGl2ZS5jaGFydERhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25CdXR0b25DbG9zZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJCdXR0b24oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmNodW5rTG9hZC5waXBlKFxyXG4gICAgICAgICAgICBtZXJnZSh0aGlzLmdyaWQucGFyZW50VmlydERpci5jaHVua0xvYWQsIHRoaXMuZ3JpZC5maWx0ZXJpbmdEb25lLCB0aGlzLmdyaWQuY29sdW1uUmVzaXplZCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZC5waXBlKGRlYm91bmNlVGltZSgzMCkpKSxcclxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX3JhbmdlKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkJ1dHRvbkNsb3NlLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQnV0dG9uKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZ3JpZC5zZWxlY3RlZC5waXBlKG1lcmdlKHRoaXMuZ3JpZC5wYWdpbmdEb25lLCB0aGlzLmdyaWQub25Hcm91cGluZ0RvbmUsIHRoaXMuZ3JpZC5wZXJQYWdlQ2hhbmdlKSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGFyZ3M6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zZWxlY3RlZENlbGxzLmxlbmd0aCA8IDIgfHwgYXJncy5leHByZXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW5kZXJCdXR0b24oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9yYW5nZSkgeyByZXR1cm47IH1cclxuICAgICAgICBsZXQgcm93SW5kZXggPSB0aGlzLl9yYW5nZS5yb3dFbmQ7XHJcbiAgICAgICAgbGV0IGNvbEluZGV4ID0gK3RoaXMuX3JhbmdlLmNvbHVtbkVuZDtcclxuICAgICAgICB3aGlsZSAoY29sSW5kZXggPj0gdGhpcy5fcmFuZ2UuY29sdW1uU3RhcnQgJiYgIXRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmlzQ29sdW1uRnVsbHlWaXNpYmxlKGNvbEluZGV4KSkge1xyXG4gICAgICAgICAgICBjb2xJbmRleC0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZSAocm93SW5kZXggPj0gdGhpcy5fcmFuZ2Uucm93U3RhcnQgJiYgdGhpcy5ncmlkLm5hdmlnYXRpb24uc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKHJvd0luZGV4LCAtMSkpIHtcclxuICAgICAgICAgICAgcm93SW5kZXgtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdID8gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zW2NvbEluZGV4XS5maWVsZCA6ICcnO1xyXG4gICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfY2VsbF9ieV9pbmRleChyb3dJbmRleCwgZmllbGQpO1xyXG4gICAgICAgIGlmICghY2VsbCB8fCAhdGhpcy5pc1dpdGhJblJhbmdlKGNlbGwucm93LmtleSwgY2VsbC5jb2x1bW4uaW5kZXggLSAxKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fYW5hbHl0aWNzQnRuU2V0dGluZ3MucG9zaXRpb25TdHJhdGVneSA9IG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneSh7XHJcbiAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQsXHJcbiAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0LFxyXG4gICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcclxuICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSwgY2xvc2VBbmltYXRpb246IG51bGwsXHJcbiAgICAgICAgICAgIHRhcmdldDogY2VsbC5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fYW5hbHl0aWNzQnRuU2V0dGluZ3Muc2Nyb2xsU3RyYXRlZ3kgPSBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpO1xyXG4gICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLmdldE92ZXJsYXlCeUlkKHRoaXMuX2lkKTtcclxuICAgICAgICBpZiAoaW5mbykge1xyXG4gICAgICAgICAgICBpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLl9hbmFseXRpY3NCdG5TZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPyB0aGlzLnNob3coKSA6IHRoaXMub3ZlcmxheVNlcnZpY2UucmVwb3NpdGlvbih0aGlzLl9pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGFwc2VkKSB7IHJldHVybjsgfVxyXG4gICAgICAgIHRoaXMuX2NvbGxhcHNlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lkID0gdGhpcy5faWQgPyB0aGlzLl9pZCA6XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuYXR0YWNoKElneENvbnRleHRNZW51Q29tcG9uZW50LCB0aGlzLl9hbmFseXRpY3NCdG5TZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5zaG93KHRoaXMuX2lkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb3NlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb2xsYXBzZWQpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgdGhpcy5fY29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmhpZGUodGhpcy5faWQpO1xyXG4gICAgICAgIHRoaXMub25CdXR0b25DbG9zZS5lbWl0KCk7XHJcbiAgICAgICAgdGhpcy5faWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1dpdGhJblJhbmdlKHJJbmV4LCBjSW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gckluZXggPj0gdGhpcy5fcmFuZ2Uucm93U3RhcnQgJiYgckluZXggPD0gdGhpcy5fcmFuZ2Uucm93RW5kXHJcbiAgICAgICAgICAgICYmIGNJbmRleCA+PSB0aGlzLl9yYW5nZS5jb2x1bW5TdGFydCAmJiBjSW5kZXggPD0gdGhpcy5fcmFuZ2UuY29sdW1uRW5kO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { Directive, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { IgxAreaSeriesComponent, IgxBarSeriesComponent, IgxBubbleSeriesComponent, IgxColumnSeriesComponent, IgxDataChartComponent, IgxItemLegendComponent, IgxLegendComponent, IgxLineSeriesComponent, IgxPieChartComponent, IgxScatterLineSeriesComponent, IgxScatterSeriesComponent, IgxSizeScaleComponent, IgxStacked100AreaSeriesComponent, IgxStacked100BarSeriesComponent, IgxStacked100ColumnSeriesComponent, IgxStacked100LineSeriesComponent, IgxStackedAreaSeriesComponent, IgxStackedBarSeriesComponent, IgxStackedColumnSeriesComponent, IgxStackedLineSeriesComponent } from 'igniteui-angular-charts';
|
|
3
|
+
import { CHART_TYPE } from './chart-types';
|
|
4
|
+
import { IgxDataChartInitializer, IgxPieChartInitializer, IgxStackedDataChartInitializer } from './initializers';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class IgxChartIntegrationDirective {
|
|
7
|
+
get chartData() {
|
|
8
|
+
return this._chartData;
|
|
9
|
+
}
|
|
10
|
+
set chartData(selectedData) {
|
|
11
|
+
const charts = new Set(this._dataChartTypes);
|
|
12
|
+
const dataModel = selectedData.length ? selectedData[0] : {};
|
|
13
|
+
this._labelMemberPaths = Object.keys(dataModel).filter(key => typeof dataModel[key] === 'string');
|
|
14
|
+
this._valueMemberPaths = Object.keys(dataModel).filter(key => typeof dataModel[key] === 'number');
|
|
15
|
+
this._chartData = selectedData.map((dataRecord, index) => this.addIndexMemberPath(dataRecord, index + 1));
|
|
16
|
+
const args = {
|
|
17
|
+
chartsAvailabilty: new Map(),
|
|
18
|
+
chartsForCreation: []
|
|
19
|
+
};
|
|
20
|
+
if (selectedData.length === 0 || this._valueMemberPaths.length === 0) {
|
|
21
|
+
this.onChartTypesDetermined.emit(args);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (selectedData.length === 1) {
|
|
25
|
+
charts.forEach((chart, _, set) => {
|
|
26
|
+
const isColumnChart = chart.indexOf('Column') !== -1;
|
|
27
|
+
const isBarChart = chart.indexOf('Bar') !== -1;
|
|
28
|
+
const isPieChart = chart.indexOf('Pie') !== -1;
|
|
29
|
+
if (!(isColumnChart || isBarChart || isPieChart)) {
|
|
30
|
+
set.delete(chart);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// Config pie chart
|
|
35
|
+
const cannotCreatePieChart = selectedData.some(record => record[this._valueMemberPaths[0]] <= 0);
|
|
36
|
+
if (cannotCreatePieChart) {
|
|
37
|
+
charts.delete(CHART_TYPE.PIE);
|
|
38
|
+
}
|
|
39
|
+
// Config scatter chart member paths
|
|
40
|
+
const canCreateScatterChart = this._valueMemberPaths.length >= 2;
|
|
41
|
+
const canCreateBubbleChart = this._valueMemberPaths.length >= 3;
|
|
42
|
+
if (!canCreateScatterChart) {
|
|
43
|
+
charts.delete(CHART_TYPE.SCATTER_BUBBLE);
|
|
44
|
+
charts.delete(CHART_TYPE.SCATTER_LINE);
|
|
45
|
+
charts.delete(CHART_TYPE.SCATTER_POINT);
|
|
46
|
+
}
|
|
47
|
+
if (!canCreateBubbleChart) {
|
|
48
|
+
charts.delete(CHART_TYPE.SCATTER_BUBBLE);
|
|
49
|
+
}
|
|
50
|
+
args.chartsAvailabilty = this.chartTypesAvailability;
|
|
51
|
+
args.chartsForCreation = [...charts];
|
|
52
|
+
this.onChartTypesDetermined.emit(args);
|
|
53
|
+
}
|
|
54
|
+
set scatterChartYAxisValueMemberPath(path) {
|
|
55
|
+
this._scatterChartYAxisValueMemberPath = path;
|
|
56
|
+
}
|
|
57
|
+
get scatterChartYAxisValueMemberPath() {
|
|
58
|
+
return this._scatterChartYAxisValueMemberPath &&
|
|
59
|
+
this._valueMemberPaths.indexOf(this._scatterChartYAxisValueMemberPath) !== -1 ?
|
|
60
|
+
this._scatterChartYAxisValueMemberPath : this._valueMemberPaths[0];
|
|
61
|
+
}
|
|
62
|
+
set bubbleChartRadiusMemberPath(path) {
|
|
63
|
+
this._bubbleChartRadiusMemberPath = path;
|
|
64
|
+
}
|
|
65
|
+
get bubbleChartRadiusMemberPath() {
|
|
66
|
+
return this._bubbleChartRadiusMemberPath &&
|
|
67
|
+
this._valueMemberPaths.indexOf(this._bubbleChartRadiusMemberPath) !== -1 ?
|
|
68
|
+
this._bubbleChartRadiusMemberPath : this._valueMemberPaths[1];
|
|
69
|
+
}
|
|
70
|
+
get _labelMemberPath() {
|
|
71
|
+
return this.defaultLabelMemberPath && this._chartData.some(r => r[this.defaultLabelMemberPath] !== undefined) ?
|
|
72
|
+
this.defaultLabelMemberPath : this._labelMemberPaths.length > 0 ? this._labelMemberPaths[0] : 'Index';
|
|
73
|
+
}
|
|
74
|
+
get pieChartOptions() {
|
|
75
|
+
return {
|
|
76
|
+
width: '85%',
|
|
77
|
+
height: '75%',
|
|
78
|
+
dataSource: this.chartData,
|
|
79
|
+
valueMemberPath: this._valueMemberPaths[0],
|
|
80
|
+
legendLabelMemberPath: this._labelMemberPath,
|
|
81
|
+
labelMemberPath: this._labelMemberPath,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
get dataChartOptions() {
|
|
85
|
+
return {
|
|
86
|
+
width: '100%',
|
|
87
|
+
height: '85%',
|
|
88
|
+
autoMarginWidth: 50,
|
|
89
|
+
isVerticalZoomEnabled: true,
|
|
90
|
+
isHorizontalZoomEnabled: true,
|
|
91
|
+
dataSource: this.chartData
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
constructor(factoryResolver) {
|
|
95
|
+
this.factoryResolver = factoryResolver;
|
|
96
|
+
this.onChartTypesDetermined = new EventEmitter();
|
|
97
|
+
this.onChartCreationDone = new EventEmitter();
|
|
98
|
+
this.useLegend = true;
|
|
99
|
+
this.defaultLabelMemberPath = undefined;
|
|
100
|
+
this.chartTypesAvailability = new Map();
|
|
101
|
+
this.customChartComponentOptions = new Map();
|
|
102
|
+
this.dataCharts = new Map();
|
|
103
|
+
this._scatterChartYAxisValueMemberPath = undefined;
|
|
104
|
+
this._bubbleChartRadiusMemberPath = undefined;
|
|
105
|
+
this._valueMemberPaths = [];
|
|
106
|
+
this._labelMemberPaths = [];
|
|
107
|
+
this._sizeScale = new IgxSizeScaleComponent();
|
|
108
|
+
this._dataChartTypes = new Set();
|
|
109
|
+
this.dataChartSeriesOptionsModel = {
|
|
110
|
+
isHighlightingEnabled: true,
|
|
111
|
+
areaFillOpacity: .4,
|
|
112
|
+
markerType: 3,
|
|
113
|
+
showDefaultTooltip: true
|
|
114
|
+
};
|
|
115
|
+
this.scatterChartSeriesOptionsModel = {
|
|
116
|
+
markerType: 3,
|
|
117
|
+
showDefaultTooltip: true
|
|
118
|
+
};
|
|
119
|
+
this.bubbleChartSeriesOptionsModel = {
|
|
120
|
+
radiusScale: this._sizeScale
|
|
121
|
+
};
|
|
122
|
+
this.dataCharts.set(CHART_TYPE.COLUMN_GROUPED, IgxColumnSeriesComponent);
|
|
123
|
+
this.dataCharts.set(CHART_TYPE.AREA_GROUPED, IgxAreaSeriesComponent);
|
|
124
|
+
this.dataCharts.set(CHART_TYPE.LINE_GROUPED, IgxLineSeriesComponent);
|
|
125
|
+
this.dataCharts.set(CHART_TYPE.BAR_GROUPED, IgxBarSeriesComponent);
|
|
126
|
+
this.dataCharts.set(CHART_TYPE.COLUMN_STACKED, IgxStackedColumnSeriesComponent);
|
|
127
|
+
this.dataCharts.set(CHART_TYPE.AREA_STACKED, IgxStackedAreaSeriesComponent);
|
|
128
|
+
this.dataCharts.set(CHART_TYPE.LINE_STACKED, IgxStackedLineSeriesComponent);
|
|
129
|
+
this.dataCharts.set(CHART_TYPE.BAR_STACKED, IgxStackedBarSeriesComponent);
|
|
130
|
+
this.dataCharts.set(CHART_TYPE.COLUMN_100_STACKED, IgxStacked100ColumnSeriesComponent);
|
|
131
|
+
this.dataCharts.set(CHART_TYPE.AREA_100_STACKED, IgxStacked100AreaSeriesComponent);
|
|
132
|
+
this.dataCharts.set(CHART_TYPE.LINE_100_STACKED, IgxStacked100LineSeriesComponent);
|
|
133
|
+
this.dataCharts.set(CHART_TYPE.BAR_100_STACKED, IgxStacked100BarSeriesComponent);
|
|
134
|
+
this.dataCharts.set(CHART_TYPE.SCATTER_POINT, IgxScatterSeriesComponent);
|
|
135
|
+
this.dataCharts.set(CHART_TYPE.SCATTER_BUBBLE, IgxBubbleSeriesComponent);
|
|
136
|
+
this.dataCharts.set(CHART_TYPE.SCATTER_LINE, IgxScatterLineSeriesComponent);
|
|
137
|
+
this.dataCharts.set(CHART_TYPE.PIE, IgxPieChartComponent);
|
|
138
|
+
const iterable = this.dataCharts.keys();
|
|
139
|
+
for (let head = iterable.next().value; head !== undefined; head = iterable.next().value) {
|
|
140
|
+
this._dataChartTypes.add(head);
|
|
141
|
+
this.chartTypesAvailability.set(head, true);
|
|
142
|
+
this.customChartComponentOptions.set(head, {});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
getAvailableCharts() {
|
|
146
|
+
const res = [];
|
|
147
|
+
this.chartTypesAvailability.forEach((isAvailable, chartType) => {
|
|
148
|
+
if (isAvailable) {
|
|
149
|
+
res.push(chartType);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
return res;
|
|
153
|
+
}
|
|
154
|
+
disableCharts(types) {
|
|
155
|
+
types.forEach(type => {
|
|
156
|
+
if (this.chartTypesAvailability.get(type)) {
|
|
157
|
+
this.chartTypesAvailability.set(type, false);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
enableCharts(types) {
|
|
162
|
+
types.forEach(type => {
|
|
163
|
+
if (!this.chartTypesAvailability.get(type)) {
|
|
164
|
+
this.chartTypesAvailability.set(type, true);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
chartFactory(type, viewContainerRef) {
|
|
169
|
+
if (!this.chartTypesAvailability.get(type)) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
let componentFactory;
|
|
173
|
+
let componentRef;
|
|
174
|
+
this._sizeScale.maximumValue = 60;
|
|
175
|
+
this._sizeScale.minimumValue = 10;
|
|
176
|
+
const chartType = this.dataCharts.get(type);
|
|
177
|
+
if (type === CHART_TYPE.PIE) {
|
|
178
|
+
componentFactory = this.factoryResolver.resolveComponentFactory(IgxPieChartComponent);
|
|
179
|
+
componentRef = viewContainerRef.createComponent(componentFactory);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
componentFactory = this.factoryResolver.resolveComponentFactory(IgxDataChartComponent);
|
|
183
|
+
componentRef = viewContainerRef.createComponent(componentFactory);
|
|
184
|
+
}
|
|
185
|
+
const options = this.getChartOptions(type);
|
|
186
|
+
const initializer = this.getInitializer(type, chartType);
|
|
187
|
+
if (this.useLegend) {
|
|
188
|
+
const legendType = type === CHART_TYPE.PIE ? IgxItemLegendComponent : IgxLegendComponent;
|
|
189
|
+
const legendFactory = this.factoryResolver.resolveComponentFactory(legendType);
|
|
190
|
+
const legendComponentRef = viewContainerRef.createComponent(legendFactory);
|
|
191
|
+
options.chartOptions['legend'] = legendComponentRef.instance;
|
|
192
|
+
}
|
|
193
|
+
const chart = initializer.initChart(componentRef.instance, options);
|
|
194
|
+
this.onChartCreationDone.emit(chart);
|
|
195
|
+
}
|
|
196
|
+
getInitializer(chartType, componentClassRef) {
|
|
197
|
+
if (chartType.includes('Pie')) {
|
|
198
|
+
return new IgxPieChartInitializer();
|
|
199
|
+
}
|
|
200
|
+
else if (chartType.includes('Stacked')) {
|
|
201
|
+
return new IgxStackedDataChartInitializer(componentClassRef);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
return new IgxDataChartInitializer(componentClassRef);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
getChartOptions(type) {
|
|
208
|
+
const chartComponentOptions = {};
|
|
209
|
+
return type === CHART_TYPE.PIE ? this.addPieChartDataOptions(chartComponentOptions) :
|
|
210
|
+
this.addDataChartDataOptions(type, chartComponentOptions, type.includes('Stacked'));
|
|
211
|
+
}
|
|
212
|
+
addPieChartDataOptions(chartComponentOptions) {
|
|
213
|
+
// tslint:disable-next-line: max-line-length
|
|
214
|
+
chartComponentOptions.chartOptions = Object.assign(this.pieChartOptions, this.customChartComponentOptions.get(CHART_TYPE.PIE).chartOptions);
|
|
215
|
+
return chartComponentOptions;
|
|
216
|
+
}
|
|
217
|
+
addDataChartDataOptions(type, chartComponentOptions, stacked) {
|
|
218
|
+
chartComponentOptions.chartOptions = Object.assign(this.dataChartOptions, this.customChartComponentOptions.get(type));
|
|
219
|
+
if (type.indexOf('Scatter') !== -1) {
|
|
220
|
+
this.addScatterChartDataOptions(type, chartComponentOptions);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// tslint:disable-next-line: max-line-length
|
|
224
|
+
chartComponentOptions.seriesModel = Object.assign(this.dataChartSeriesOptionsModel, this.customChartComponentOptions.get(type).seriesModel);
|
|
225
|
+
this.setAxisLabelOption(type, chartComponentOptions);
|
|
226
|
+
const options = [];
|
|
227
|
+
this._valueMemberPaths.forEach(valueMemberPath => {
|
|
228
|
+
const dataOptions = {
|
|
229
|
+
title: valueMemberPath,
|
|
230
|
+
valueMemberPath
|
|
231
|
+
};
|
|
232
|
+
if (stacked) {
|
|
233
|
+
options.push({ ...dataOptions });
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
options.push({ ...dataOptions, ...chartComponentOptions.seriesModel });
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
stacked ? chartComponentOptions.stackedFragmentOptions = options :
|
|
240
|
+
chartComponentOptions.seriesOptions = options;
|
|
241
|
+
}
|
|
242
|
+
return chartComponentOptions;
|
|
243
|
+
}
|
|
244
|
+
addScatterChartDataOptions(scatterChart, chartComponentOptions) {
|
|
245
|
+
// tslint:disable-next-line: max-line-length
|
|
246
|
+
chartComponentOptions.seriesModel = Object.assign(this.scatterChartSeriesOptionsModel, this.customChartComponentOptions.get(scatterChart).seriesModel);
|
|
247
|
+
chartComponentOptions.seriesModel['yMemberPath'] = this.scatterChartYAxisValueMemberPath;
|
|
248
|
+
if (scatterChart === CHART_TYPE.SCATTER_BUBBLE) {
|
|
249
|
+
chartComponentOptions.seriesModel = Object.assign(chartComponentOptions.seriesModel, this.bubbleChartSeriesOptionsModel);
|
|
250
|
+
chartComponentOptions.seriesModel['radiusMemberPath'] = this.bubbleChartRadiusMemberPath;
|
|
251
|
+
}
|
|
252
|
+
const model = chartComponentOptions.seriesModel;
|
|
253
|
+
const seriesOptions = [];
|
|
254
|
+
this._valueMemberPaths.filter(v => !(v === model['yMemberPath'] ||
|
|
255
|
+
v === model['radiusMemberPath'])).forEach(valueMemberPath => {
|
|
256
|
+
const dataOptions = {
|
|
257
|
+
title: `${model['yMemberPath']} vs ${valueMemberPath}`,
|
|
258
|
+
xMemberPath: valueMemberPath,
|
|
259
|
+
labelMemberPath: this._labelMemberPath
|
|
260
|
+
};
|
|
261
|
+
seriesOptions.push({ ...dataOptions, ...model });
|
|
262
|
+
});
|
|
263
|
+
chartComponentOptions.seriesOptions = seriesOptions;
|
|
264
|
+
}
|
|
265
|
+
addIndexMemberPath(dataRecord, index) {
|
|
266
|
+
dataRecord = { ...{ [this._labelMemberPath]: index }, ...dataRecord };
|
|
267
|
+
return dataRecord;
|
|
268
|
+
}
|
|
269
|
+
setAxisLabelOption(type, options) {
|
|
270
|
+
if (type.indexOf('Bar') !== -1) {
|
|
271
|
+
options.yAxisOptions = Object.assign({
|
|
272
|
+
label: this._labelMemberPath
|
|
273
|
+
}, this.customChartComponentOptions.get(type).yAxisOptions);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
options.xAxisOptions = Object.assign({
|
|
277
|
+
label: this._labelMemberPath
|
|
278
|
+
}, this.customChartComponentOptions.get(type).xAxisOptions);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
setChartComponentOptions(chart, optionsType, options) {
|
|
282
|
+
if (!this.customChartComponentOptions.get(chart)[optionsType]) {
|
|
283
|
+
this.customChartComponentOptions.get(chart)[optionsType] = {};
|
|
284
|
+
}
|
|
285
|
+
Object.keys(options).forEach(property => {
|
|
286
|
+
this.customChartComponentOptions.get(chart)[optionsType][property] = options[property];
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
IgxChartIntegrationDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: IgxChartIntegrationDirective, deps: [{ token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Directive });
|
|
291
|
+
IgxChartIntegrationDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: IgxChartIntegrationDirective, selector: "[igxChartIntegration]", inputs: { chartData: "chartData", useLegend: "useLegend", defaultLabelMemberPath: "defaultLabelMemberPath", scatterChartYAxisValueMemberPath: "scatterChartYAxisValueMemberPath", bubbleChartRadiusMemberPath: "bubbleChartRadiusMemberPath" }, outputs: { onChartTypesDetermined: "onChartTypesDetermined", onChartCreationDone: "onChartCreationDone" }, ngImport: i0 });
|
|
292
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: IgxChartIntegrationDirective, decorators: [{
|
|
293
|
+
type: Directive,
|
|
294
|
+
args: [{
|
|
295
|
+
selector: '[igxChartIntegration]'
|
|
296
|
+
}]
|
|
297
|
+
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }]; }, propDecorators: { chartData: [{
|
|
298
|
+
type: Input
|
|
299
|
+
}], onChartTypesDetermined: [{
|
|
300
|
+
type: Output
|
|
301
|
+
}], onChartCreationDone: [{
|
|
302
|
+
type: Output
|
|
303
|
+
}], useLegend: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], defaultLabelMemberPath: [{
|
|
306
|
+
type: Input
|
|
307
|
+
}], scatterChartYAxisValueMemberPath: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}], bubbleChartRadiusMemberPath: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}] } });
|
|
312
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaW50ZWdyYXRpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci1leHRyYXMvc3JjL2xpYi9kaXJlY3RpdmVzL2NoYXJ0LWludGVncmF0aW9uL2NoYXJ0LWludGVncmF0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRELFNBQVMsRUFDeEUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFDSCxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0IsRUFDakcscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQy9HLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLGdDQUFnQyxFQUNqSCwrQkFBK0IsRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFDckcsNkJBQTZCLEVBQUUsNEJBQTRCLEVBQUUsK0JBQStCLEVBQzVGLDZCQUE2QixFQUNoQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBNEMsdUJBQXVCLEVBQ3RFLHNCQUFzQixFQUFFLDhCQUE4QixFQUFZLE1BQU0sZ0JBQWdCLENBQUM7O0FBVTdGLE1BQU0sT0FBTyw0QkFBNEI7SUFDckMsSUFDVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxTQUFTLENBQUMsWUFBbUI7UUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMs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LENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMzRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNqRTtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9GLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7eUhBOVRRLDRCQUE0Qjs2R0FBNUIsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7a0JBSHhDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHVCQUF1QjtpQkFDcEM7K0dBR2MsU0FBUztzQkFEbkIsS0FBSztnQkFxREMsc0JBQXNCO3NCQUQ1QixNQUFNO2dCQUlBLG1CQUFtQjtzQkFEekIsTUFBTTtnQkFJQSxTQUFTO3NCQURmLEtBQUs7Z0JBSUMsc0JBQXNCO3NCQUQ1QixLQUFLO2dCQUlLLGdDQUFnQztzQkFEMUMsS0FBSztnQkFZSywyQkFBMkI7c0JBRHJDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgRGlyZWN0aXZlLFxyXG4gICAgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUeXBlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBJZ3hBcmVhU2VyaWVzQ29tcG9uZW50LCBJZ3hCYXJTZXJpZXNDb21wb25lbnQsIElneEJ1YmJsZVNlcmllc0NvbXBvbmVudCwgSWd4Q29sdW1uU2VyaWVzQ29tcG9uZW50LFxyXG4gICAgSWd4RGF0YUNoYXJ0Q29tcG9uZW50LCBJZ3hJdGVtTGVnZW5kQ29tcG9uZW50LCBJZ3hMZWdlbmRDb21wb25lbnQsIElneExpbmVTZXJpZXNDb21wb25lbnQsIElneFBpZUNoYXJ0Q29tcG9uZW50LFxyXG4gICAgSWd4U2NhdHRlckxpbmVTZXJpZXNDb21wb25lbnQsIElneFNjYXR0ZXJTZXJpZXNDb21wb25lbnQsIElneFNpemVTY2FsZUNvbXBvbmVudCwgSWd4U3RhY2tlZDEwMEFyZWFTZXJpZXNDb21wb25lbnQsXHJcbiAgICBJZ3hTdGFja2VkMTAwQmFyU2VyaWVzQ29tcG9uZW50LCBJZ3hTdGFja2VkMTAwQ29sdW1uU2VyaWVzQ29tcG9uZW50LCBJZ3hTdGFja2VkMTAwTGluZVNlcmllc0NvbXBvbmVudCxcclxuICAgIElneFN0YWNrZWRBcmVhU2VyaWVzQ29tcG9uZW50LCBJZ3hTdGFja2VkQmFyU2VyaWVzQ29tcG9uZW50LCBJZ3hTdGFja2VkQ29sdW1uU2VyaWVzQ29tcG9uZW50LFxyXG4gICAgSWd4U3RhY2tlZExpbmVTZXJpZXNDb21wb25lbnRcclxufSBmcm9tICdpZ25pdGV1aS1hbmd1bGFyLWNoYXJ0cyc7XHJcbmltcG9ydCB7IENIQVJUX1RZUEUsIE9QVElPTlNfVFlQRSB9IGZyb20gJy4vY2hhcnQtdHlwZXMnO1xyXG5pbXBvcnQgeyBDaGFydEluaXRpYWxpemVyLCBJQ2hhcnRDb21wb25lbnRPcHRpb25zLCBJZ3hEYXRhQ2hhcnRJbml0aWFsaXplcixcclxuICAgIElneFBpZUNoYXJ0SW5pdGlhbGl6ZXIsIElneFN0YWNrZWREYXRhQ2hhcnRJbml0aWFsaXplciwgSU9wdGlvbnMgfSBmcm9tICcuL2luaXRpYWxpemVycyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElEZXRlcm1pbmVkQ2hhcnRUeXBlc0FyZ3Mge1xyXG4gICAgY2hhcnRzQXZhaWxhYmlsdHk6IE1hcDxDSEFSVF9UWVBFLCBib29sZWFuPjtcclxuICAgIGNoYXJ0c0ZvckNyZWF0aW9uOiBDSEFSVF9UWVBFW107XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbaWd4Q2hhcnRJbnRlZ3JhdGlvbl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJZ3hDaGFydEludGVncmF0aW9uRGlyZWN0aXZlIHtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IGNoYXJ0RGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hhcnREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgY2hhcnREYXRhKHNlbGVjdGVkRGF0YTogYW55W10pIHtcclxuICAgICAgICBjb25zdCBjaGFydHMgPSBuZXcgU2V0KHRoaXMuX2RhdGFDaGFydFR5cGVzKTtcclxuICAgICAgICBjb25zdCBkYXRhTW9kZWwgPSBzZWxlY3RlZERhdGEubGVuZ3RoID8gc2VsZWN0ZWREYXRhWzBdIDoge307XHJcbiAgICAgICAgdGhpcy5fbGFiZWxNZW1iZXJQYXRocyA9IE9iamVjdC5rZXlzKGRhdGFNb2RlbCkuZmlsdGVyKGtleSA9PiB0eXBlb2YgZGF0YU1vZGVsW2tleV0gPT09ICdzdHJpbmcnKTtcclxuICAgICAgICB0aGlzLl92YWx1ZU1lbWJlclBhdGhzID0gT2JqZWN0LmtleXMoZGF0YU1vZGVsKS5maWx0ZXIoa2V5ID0+IHR5cGVvZiBkYXRhTW9kZWxba2V5XSA9PT0gJ251bWJlcicpO1xyXG4gICAgICAgIHRoaXMuX2NoYXJ0RGF0YSA9IHNlbGVjdGVkRGF0YS5tYXAoKGRhdGFSZWNvcmQsIGluZGV4KSA9PiB0aGlzLmFkZEluZGV4TWVtYmVyUGF0aChkYXRhUmVjb3JkLCBpbmRleCArIDEpKTtcclxuICAgICAgICBjb25zdCBhcmdzOiBJRGV0ZXJtaW5lZENoYXJ0VHlwZXNBcmdzID0ge1xyXG4gICAgICAgICAgICBjaGFydHNBdmFpbGFiaWx0eTogbmV3IE1hcDxDSEFSVF9UWVBFLCBib29sZWFuPigpLFxyXG4gICAgICAgICAgICBjaGFydHNGb3JDcmVhdGlvbjogW11cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoc2VsZWN0ZWREYXRhLmxlbmd0aCA9PT0gMCB8fCB0aGlzLl92YWx1ZU1lbWJlclBhdGhzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhcnRUeXBlc0RldGVybWluZWQuZW1pdChhcmdzKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0ZWREYXRhLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICBjaGFydHMuZm9yRWFjaCgoY2hhcnQsIF8sIHNldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNDb2x1bW5DaGFydCA9IGNoYXJ0LmluZGV4T2YoJ0NvbHVtbicpICE9PSAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQmFyQ2hhcnQgPSBjaGFydC5pbmRleE9mKCdCYXInKSAhPT0gLTE7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1BpZUNoYXJ0ID0gY2hhcnQuaW5kZXhPZignUGllJykgIT09IC0xO1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoaXNDb2x1bW5DaGFydCB8fCBpc0JhckNoYXJ0IHx8IGlzUGllQ2hhcnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShjaGFydCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDb25maWcgcGllIGNoYXJ0XHJcbiAgICAgICAgY29uc3QgY2Fubm90Q3JlYXRlUGllQ2hhcnQgPSBzZWxlY3RlZERhdGEuc29tZShyZWNvcmQgPT4gcmVjb3JkW3RoaXMuX3ZhbHVlTWVtYmVyUGF0aHNbMF1dIDw9IDApO1xyXG4gICAgICAgIGlmIChjYW5ub3RDcmVhdGVQaWVDaGFydCkge1xyXG4gICAgICAgICAgICBjaGFydHMuZGVsZXRlKENIQVJUX1RZUEUuUElFKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ29uZmlnIHNjYXR0ZXIgY2hhcnQgbWVtYmVyIHBhdGhzXHJcbiAgICAgICAgY29uc3QgY2FuQ3JlYXRlU2NhdHRlckNoYXJ0ID0gdGhpcy5fdmFsdWVNZW1iZXJQYXRocy5sZW5ndGggPj0gMjtcclxuICAgICAgICBjb25zdCBjYW5DcmVhdGVCdWJibGVDaGFydCA9IHRoaXMuX3ZhbHVlTWVtYmVyUGF0aHMubGVuZ3RoID49IDM7XHJcbiAgICAgICAgaWYgKCFjYW5DcmVhdGVTY2F0dGVyQ2hhcnQpIHtcclxuICAgICAgICAgICAgY2hhcnRzLmRlbGV0ZShDSEFSVF9UWVBFLlNDQVRURVJfQlVCQkxFKTtcclxuICAgICAgICAgICAgY2hhcnRzLmRlbGV0ZShDSEFSVF9UWVBFLlNDQVRURVJfTElORSk7XHJcbiAgICAgICAgICAgIGNoYXJ0cy5kZWxldGUoQ0hBUlRfVFlQRS5TQ0FUVEVSX1BPSU5UKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjYW5DcmVhdGVCdWJibGVDaGFydCkge1xyXG4gICAgICAgICAgICBjaGFydHMuZGVsZXRlKENIQVJUX1RZUEUuU0NBVFRFUl9CVUJCTEUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJncy5jaGFydHNBdmFpbGFiaWx0eSA9IHRoaXMuY2hhcnRUeXBlc0F2YWlsYWJpbGl0eTtcclxuICAgICAgICBhcmdzLmNoYXJ0c0ZvckNyZWF0aW9uID0gWy4uLmNoYXJ0c107XHJcbiAgICAgICAgdGhpcy5vbkNoYXJ0VHlwZXNEZXRlcm1pbmVkLmVtaXQoYXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgb25DaGFydFR5cGVzRGV0ZXJtaW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8SURldGVybWluZWRDaGFydFR5cGVzQXJncz4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBvbkNoYXJ0Q3JlYXRpb25Eb25lID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB1c2VMZWdlbmQgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGVmYXVsdExhYmVsTWVtYmVyUGF0aDogc3RyaW5nID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHNjYXR0ZXJDaGFydFlBeGlzVmFsdWVNZW1iZXJQYXRoKHBhdGg6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3NjYXR0ZXJDaGFydFlBeGlzVmFsdWVNZW1iZXJQYXRoID0gcGF0aDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNjYXR0ZXJDaGFydFlBeGlzVmFsdWVNZW1iZXJQYXRoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY2F0dGVyQ2hhcnRZQXhpc1ZhbHVlTWVtYmVyUGF0aCAmJlxyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZU1lbWJlclBhdGhzLmluZGV4T2YodGhpcy5fc2NhdHRlckNoYXJ0WUF4aXNWYWx1ZU1lbWJlclBhdGgpICE9PSAtMSA/XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYXR0ZXJDaGFydFlBeGlzVmFsdWVNZW1iZXJQYXRoIDogdGhpcy5fdmFsdWVNZW1iZXJQYXRoc1swXTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBidWJibGVDaGFydFJhZGl1c01lbWJlclBhdGgocGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fYnViYmxlQ2hhcnRSYWRpdXNNZW1iZXJQYXRoID0gcGF0aDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGJ1YmJsZUNoYXJ0UmFkaXVzTWVtYmVyUGF0aCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYnViYmxlQ2hhcnRSYWRpdXNNZW1iZXJQYXRoICYmXHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlTWVtYmVyUGF0aHMuaW5kZXhPZih0aGlzLl9idWJibGVDaGFydFJhZGl1c01lbWJlclBhdGgpICE9PSAtMSA/XHJcbiAgICAgICAgICAgIHRoaXMuX2J1YmJsZUNoYXJ0UmFkaXVzTWVtYmVyUGF0aCA6IHRoaXMuX3ZhbHVlTWVtYmVyUGF0aHNbMV07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGFydFR5cGVzQXZhaWxhYmlsaXR5ID0gbmV3IE1hcDxDSEFSVF9UWVBFLCBib29sZWFuPigpO1xyXG4gICAgcHJpdmF0ZSBjdXN0b21DaGFydENvbXBvbmVudE9wdGlvbnMgPSBuZXcgTWFwPENIQVJUX1RZUEUsIElDaGFydENvbXBvbmVudE9wdGlvbnM+KCk7XHJcbiAgICBwcml2YXRlIGRhdGFDaGFydHMgPSBuZXcgTWFwPHN0cmluZywgVHlwZTxhbnk+PigpO1xyXG4gICAgcHJpdmF0ZSBfc2NhdHRlckNoYXJ0WUF4aXNWYWx1ZU1lbWJlclBhdGggPSB1bmRlZmluZWQ7XHJcbiAgICBwcml2YXRlIF9idWJibGVDaGFydFJhZGl1c01lbWJlclBhdGggPSB1bmRlZmluZWQ7XHJcbiAgICBwcml2YXRlIF92YWx1ZU1lbWJlclBhdGhzID0gW107XHJcbiAgICBwcml2YXRlIF9sYWJlbE1lbWJlclBhdGhzID0gW107XHJcbiAgICBwcml2YXRlIF9jaGFydERhdGE6IGFueVtdO1xyXG4gICAgcHJpdmF0ZSBfc2l6ZVNjYWxlID0gbmV3IElneFNpemVTY2FsZUNvbXBvbmVudCgpO1xyXG4gICAgcHJpdmF0ZSBfZGF0YUNoYXJ0VHlwZXMgPSBuZXcgU2V0PENIQVJUX1RZUEU+KCk7XHJcbiAgICBwcml2YXRlIGdldCBfbGFiZWxNZW1iZXJQYXRoKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdExhYmVsTWVtYmVyUGF0aCAmJiB0aGlzLl9jaGFydERhdGEuc29tZShyID0+IHJbdGhpcy5kZWZhdWx0TGFiZWxNZW1iZXJQYXRoXSAhPT0gdW5kZWZpbmVkKSA/XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdExhYmVsTWVtYmVyUGF0aCA6IHRoaXMuX2xhYmVsTWVtYmVyUGF0aHMubGVuZ3RoID4gMCA/IHRoaXMuX2xhYmVsTWVtYmVyUGF0aHNbMF0gOiAnSW5kZXgnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IHBpZUNoYXJ0T3B0aW9ucygpOiBJT3B0aW9ucyB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6ICc4NSUnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICc3NSUnLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlOiB0aGlzLmNoYXJ0RGF0YSxcclxuICAgICAgICAgICAgdmFsdWVNZW1iZXJQYXRoOiB0aGlzLl92YWx1ZU1lbWJlclBhdGhzWzBdLFxyXG4gICAgICAgICAgICBsZWdlbmRMYWJlbE1lbWJlclBhdGg6IHRoaXMuX2xhYmVsTWVtYmVyUGF0aCxcclxuICAgICAgICAgICAgbGFiZWxNZW1iZXJQYXRoOiB0aGlzLl9sYWJlbE1lbWJlclBhdGgsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRhdGFDaGFydFNlcmllc09wdGlvbnNNb2RlbDogSU9wdGlvbnMgPSB7XHJcbiAgICAgICAgaXNIaWdobGlnaHRpbmdFbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGFyZWFGaWxsT3BhY2l0eTogLjQsXHJcbiAgICAgICAgbWFya2VyVHlwZTogMyxcclxuICAgICAgICBzaG93RGVmYXVsdFRvb2x0aXA6IHRydWVcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBzY2F0dGVyQ2hhcnRTZXJpZXNPcHRpb25zTW9kZWw6IElPcHRpb25zID0ge1xyXG4gICAgICAgIG1hcmtlclR5cGU6IDMsXHJcbiAgICAgICAgc2hvd0RlZmF1bHRUb29sdGlwOiB0cnVlXHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgYnViYmxlQ2hhcnRTZXJpZXNPcHRpb25zTW9kZWw6IElPcHRpb25zID0ge1xyXG4gICAgICAgIHJhZGl1c1NjYWxlOiB0aGlzLl9zaXplU2NhbGVcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgZGF0YUNoYXJ0T3B0aW9ucygpOiBJT3B0aW9ucyB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnODUlJyxcclxuICAgICAgICAgICAgYXV0b01hcmdpbldpZHRoOiA1MCxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbFpvb21FbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICBpc0hvcml6b250YWxab29tRW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgICAgZGF0YVNvdXJjZTogdGhpcy5jaGFydERhdGFcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikge1xyXG4gICAgICAgIHRoaXMuZGF0YUNoYXJ0cy5zZXQoQ0hBUlRfVFlQRS5DT0xVTU5fR1JPVVBFRCwgSWd4Q29sdW1uU2VyaWVzQ29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLmRhdGFDaGFydHMuc2V0KENIQVJUX1RZUEUuQVJFQV9HUk9VUEVELCBJZ3hBcmVhU2VyaWVzQ29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLmRhdGFDaGFydHMuc2V0KENIQVJUX1RZUEUuTElORV9HUk9VUEVELCBJZ3hMaW5lU2VyaWVzQ29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLmRhdGFDaGFydHMuc2V0KENIQVJUX1RZUEUuQkFSX0dST1VQRUQsIElneEJhclNlcmllc0NvbXBvbmVudCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YUNoYXJ0cy5zZXQoQ0hBUlRfVFlQRS5DT0xVTU5fU1RBQ0tFRCwgSWd4U3RhY2tlZENvbHVtblNlcmllc0NvbXBvbmVudCk7XHJcbiAgICAgICAgdGhpcy5kYXRhQ2hhcnRzLnNldChDSEFSVF9UWVBFLkFSRUFfU1RBQ0tFRCwgSWd4U3RhY2tlZEFyZWFTZXJpZXNDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuZGF0YUNoYXJ0cy5zZXQoQ0hBUlRfVFlQRS5MSU5FX1NUQUNLRUQsIElneFN0YWNrZWRMaW5lU2VyaWVzQ29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLmRhdGFDaGFydHMuc2V0KENIQVJUX1RZUEUuQkFSX1NUQUNLRUQsIElneFN0YWNrZWRCYXJTZXJpZXNDb21wb25lbnQpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFDaGFydHMuc2V0KENIQVJUX1RZUEUuQ09MVU1OXzEwMF9TVEFDS0VELCBJZ3hTdGFja2VkMTAwQ29sdW1uU2VyaWVzQ29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLmRhdGFDaGFydHMuc2V0KENIQVJUX1RZUEUuQVJFQV8xMDBfU1RBQ0tFRCwgSWd4U3RhY2tlZDEwMEFyZWFTZXJpZXNDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuZGF0YUNoYXJ0cy5zZXQoQ0hBUlRfVFlQRS5MSU5FXzEwMF9TVEFDS0VELCBJZ3hTdGFja2VkMTAwTGluZVNlcmllc0NvbXBvbmVudCk7XHJcbiAgICAgICAgdGhpcy5kYXRhQ2hhcnRzLnNldChDSEFSVF9UWVBFLkJBUl8xMDBfU1RBQ0tFRCwgSWd4U3RhY2tlZDEwMEJhclNlcmllc0NvbXBvbmVudCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YUNoYXJ0cy5zZXQoQ0hBUlRfVFlQRS5TQ0FUVEVSX1BPSU5ULCBJZ3hTY2F0dGVyU2VyaWVzQ29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLmRhdGFDaGFydHMuc2V0KENIQVJUX1RZUEUuU0NBVFRFUl9CVUJCTEUsIElneEJ1YmJsZVNlcmllc0NvbXBvbmVudCk7XHJcbiAgICAgICAgdGhpcy5kYXRhQ2hhcnRzLnNldChDSEFSVF9UWVBFLlNDQVRURVJfTElORSwgSWd4U2NhdHRlckxpbmVTZXJpZXNDb21wb25lbnQpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFDaGFydHMuc2V0KENIQVJUX1RZUEUuUElFLCBJZ3hQaWVDaGFydENvbXBvbmVudCk7XHJcbiAgICAgICAgY29uc3QgaXRlcmFibGUgPSB0aGlzLmRhdGFDaGFydHMua2V5cygpO1xyXG4gICAgICAgIGZvciAobGV0IGhlYWQgPSBpdGVyYWJsZS5uZXh0KCkudmFsdWU7IGhlYWQgIT09IHVuZGVmaW5lZDsgaGVhZCA9IGl0ZXJhYmxlLm5leHQoKS52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9kYXRhQ2hhcnRUeXBlcy5hZGQoaGVhZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnRUeXBlc0F2YWlsYWJpbGl0eS5zZXQoaGVhZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb21wb25lbnRPcHRpb25zLnNldChoZWFkLCB7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdmFpbGFibGVDaGFydHMoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gW107XHJcbiAgICAgICAgdGhpcy5jaGFydFR5cGVzQXZhaWxhYmlsaXR5LmZvckVhY2goKGlzQXZhaWxhYmxlLCBjaGFydFR5cGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXMucHVzaChjaGFydFR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZUNoYXJ0cyh0eXBlczogQ0hBUlRfVFlQRVtdKSB7XHJcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnRUeXBlc0F2YWlsYWJpbGl0eS5nZXQodHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRUeXBlc0F2YWlsYWJpbGl0eS5zZXQodHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuYWJsZUNoYXJ0cyh0eXBlczogQ0hBUlRfVFlQRVtdKSB7XHJcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoYXJ0VHlwZXNBdmFpbGFiaWxpdHkuZ2V0KHR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0VHlwZXNBdmFpbGFiaWxpdHkuc2V0KHR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYXJ0RmFjdG9yeSh0eXBlOiBDSEFSVF9UWVBFLCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0VHlwZXNBdmFpbGFiaWxpdHkuZ2V0KHR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55PjtcclxuICAgICAgICBsZXQgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PjtcclxuICAgICAgICB0aGlzLl9zaXplU2NhbGUubWF4aW11bVZhbHVlID0gNjA7XHJcbiAgICAgICAgdGhpcy5fc2l6ZVNjYWxlLm1pbmltdW1WYWx1ZSA9IDEwO1xyXG4gICAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IHRoaXMuZGF0YUNoYXJ0cy5nZXQodHlwZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBDSEFSVF9UWVBFLlBJRSkge1xyXG4gICAgICAgICAgICBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5mYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoSWd4UGllQ2hhcnRDb21wb25lbnQpO1xyXG4gICAgICAgICAgICBjb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5mYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoSWd4RGF0YUNoYXJ0Q29tcG9uZW50KTtcclxuICAgICAgICAgICAgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnM6IElDaGFydENvbXBvbmVudE9wdGlvbnMgPSB0aGlzLmdldENoYXJ0T3B0aW9ucyh0eXBlKTtcclxuICAgICAgICBjb25zdCBpbml0aWFsaXplcjogQ2hhcnRJbml0aWFsaXplciA9IHRoaXMuZ2V0SW5pdGlhbGl6ZXIodHlwZSwgY2hhcnRUeXBlKTtcclxuICAgICAgICBpZiAodGhpcy51c2VMZWdlbmQpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVnZW5kVHlwZSA9IHR5cGUgPT09IENIQVJUX1RZUEUuUElFID8gSWd4SXRlbUxlZ2VuZENvbXBvbmVudCA6IElneExlZ2VuZENvbXBvbmVudDtcclxuICAgICAgICAgICAgY29uc3QgbGVnZW5kRmFjdG9yeSA9IHRoaXMuZmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGxlZ2VuZFR5cGUgYXMgYW55KTtcclxuICAgICAgICAgICAgY29uc3QgbGVnZW5kQ29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGxlZ2VuZEZhY3RvcnkpO1xyXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJ0T3B0aW9uc1snbGVnZW5kJ10gPSBsZWdlbmRDb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gaW5pdGlhbGl6ZXIuaW5pdENoYXJ0KGNvbXBvbmVudFJlZi5pbnN0YW5jZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYXJ0Q3JlYXRpb25Eb25lLmVtaXQoY2hhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0SW5pdGlhbGl6ZXIoY2hhcnRUeXBlOiBDSEFSVF9UWVBFLCBjb21wb25lbnRDbGFzc1JlZik6IENoYXJ0SW5pdGlhbGl6ZXIge1xyXG4gICAgICAgIGlmIChjaGFydFR5cGUuaW5jbHVkZXMoJ1BpZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWd4UGllQ2hhcnRJbml0aWFsaXplcigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcnRUeXBlLmluY2x1ZGVzKCdTdGFja2VkJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJZ3hTdGFja2VkRGF0YUNoYXJ0SW5pdGlhbGl6ZXIoY29tcG9uZW50Q2xhc3NSZWYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWd4RGF0YUNoYXJ0SW5pdGlhbGl6ZXIoY29tcG9uZW50Q2xhc3NSZWYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENoYXJ0T3B0aW9ucyh0eXBlOiBDSEFSVF9UWVBFKTogSUNoYXJ0Q29tcG9uZW50T3B0aW9ucyB7XHJcbiAgICAgICAgY29uc3QgY2hhcnRDb21wb25lbnRPcHRpb25zOiBJQ2hhcnRDb21wb25lbnRPcHRpb25zID0ge307XHJcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IENIQVJUX1RZUEUuUElFID8gdGhpcy5hZGRQaWVDaGFydERhdGFPcHRpb25zKGNoYXJ0Q29tcG9uZW50T3B0aW9ucykgOlxyXG4gICAgICAgICAgICB0aGlzLmFkZERhdGFDaGFydERhdGFPcHRpb25zKHR5cGUsIGNoYXJ0Q29tcG9uZW50T3B0aW9ucywgdHlwZS5pbmNsdWRlcygnU3RhY2tlZCcpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZFBpZUNoYXJ0RGF0YU9wdGlvbnMoY2hhcnRDb21wb25lbnRPcHRpb25zOiBJQ2hhcnRDb21wb25lbnRPcHRpb25zKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICBjaGFydENvbXBvbmVudE9wdGlvbnMuY2hhcnRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih0aGlzLnBpZUNoYXJ0T3B0aW9ucywgdGhpcy5jdXN0b21DaGFydENvbXBvbmVudE9wdGlvbnMuZ2V0KENIQVJUX1RZUEUuUElFKS5jaGFydE9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBjaGFydENvbXBvbmVudE9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGREYXRhQ2hhcnREYXRhT3B0aW9ucyh0eXBlOiBDSEFSVF9UWVBFLCBjaGFydENvbXBvbmVudE9wdGlvbnM6IElDaGFydENvbXBvbmVudE9wdGlvbnMsIHN0YWNrZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBjaGFydENvbXBvbmVudE9wdGlvbnMuY2hhcnRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih0aGlzLmRhdGFDaGFydE9wdGlvbnMsIHRoaXMuY3VzdG9tQ2hhcnRDb21wb25lbnRPcHRpb25zLmdldCh0eXBlKSk7XHJcbiAgICAgICAgaWYgKHR5cGUuaW5kZXhPZignU2NhdHRlcicpICE9PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFNjYXR0ZXJDaGFydERhdGFPcHRpb25zKHR5cGUsIGNoYXJ0Q29tcG9uZW50T3B0aW9ucyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgICAgY2hhcnRDb21wb25lbnRPcHRpb25zLnNlcmllc01vZGVsID0gT2JqZWN0LmFzc2lnbih0aGlzLmRhdGFDaGFydFNlcmllc09wdGlvbnNNb2RlbCwgdGhpcy5jdXN0b21DaGFydENvbXBvbmVudE9wdGlvbnMuZ2V0KHR5cGUpLnNlcmllc01vZGVsKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRBeGlzTGFiZWxPcHRpb24odHlwZSwgY2hhcnRDb21wb25lbnRPcHRpb25zKTtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uczogSU9wdGlvbnNbXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZU1lbWJlclBhdGhzLmZvckVhY2godmFsdWVNZW1iZXJQYXRoID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB2YWx1ZU1lbWJlclBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVNZW1iZXJQYXRoXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YWNrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2goeyAuLi5kYXRhT3B0aW9ucyB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKHsgLi4uZGF0YU9wdGlvbnMsIC4uLmNoYXJ0Q29tcG9uZW50T3B0aW9ucy5zZXJpZXNNb2RlbCB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHN0YWNrZWQgPyBjaGFydENvbXBvbmVudE9wdGlvbnMuc3RhY2tlZEZyYWdtZW50T3B0aW9ucyA9IG9wdGlvbnMgOlxyXG4gICAgICAgICAgICBjaGFydENvbXBvbmVudE9wdGlvbnMuc2VyaWVzT3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjaGFydENvbXBvbmVudE9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRTY2F0dGVyQ2hhcnREYXRhT3B0aW9ucyhzY2F0dGVyQ2hhcnQ6IENIQVJUX1RZUEUsIGNoYXJ0Q29tcG9uZW50T3B0aW9uczogSUNoYXJ0Q29tcG9uZW50T3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICBjaGFydENvbXBvbmVudE9wdGlvbnMuc2VyaWVzTW9kZWwgPSBPYmplY3QuYXNzaWduKHRoaXMuc2NhdHRlckNoYXJ0U2VyaWVzT3B0aW9uc01vZGVsLCB0aGlzLmN1c3RvbUNoYXJ0Q29tcG9uZW50T3B0aW9ucy5nZXQoc2NhdHRlckNoYXJ0KS5zZXJpZXNNb2RlbCk7XHJcbiAgICAgICAgY2hhcnRDb21wb25lbnRPcHRpb25zLnNlcmllc01vZGVsWyd5TWVtYmVyUGF0aCddID0gdGhpcy5zY2F0dGVyQ2hhcnRZQXhpc1ZhbHVlTWVtYmVyUGF0aDtcclxuICAgICAgICBpZiAoc2NhdHRlckNoYXJ0ID09PSBDSEFSVF9UWVBFLlNDQVRURVJfQlVCQkxFKSB7XHJcbiAgICAgICAgICAgIGNoYXJ0Q29tcG9uZW50T3B0aW9ucy5zZXJpZXNNb2RlbCA9IE9iamVjdC5hc3NpZ24oY2hhcnRDb21wb25lbnRPcHRpb25zLnNlcmllc01vZGVsLCB0aGlzLmJ1YmJsZUNoYXJ0U2VyaWVzT3B0aW9uc01vZGVsKTtcclxuICAgICAgICAgICAgY2hhcnRDb21wb25lbnRPcHRpb25zLnNlcmllc01vZGVsWydyYWRpdXNNZW1iZXJQYXRoJ10gPSB0aGlzLmJ1YmJsZUNoYXJ0UmFkaXVzTWVtYmVyUGF0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZGVsID0gY2hhcnRDb21wb25lbnRPcHRpb25zLnNlcmllc01vZGVsO1xyXG4gICAgICAgIGNvbnN0IHNlcmllc09wdGlvbnM6IElPcHRpb25zW10gPSBbXTtcclxuICAgICAgICB0aGlzLl92YWx1ZU1lbWJlclBhdGhzLmZpbHRlcih2ID0+ICEodiA9PT0gbW9kZWxbJ3lNZW1iZXJQYXRoJ10gfHxcclxuICAgICAgICAgICAgdiA9PT0gbW9kZWxbJ3JhZGl1c01lbWJlclBhdGgnXSkpLmZvckVhY2godmFsdWVNZW1iZXJQYXRoID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBgJHttb2RlbFsneU1lbWJlclBhdGgnXX0gdnMgJHt2YWx1ZU1lbWJlclBhdGh9YCxcclxuICAgICAgICAgICAgICAgICAgICB4TWVtYmVyUGF0aDogdmFsdWVNZW1iZXJQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsTWVtYmVyUGF0aDogdGhpcy5fbGFiZWxNZW1iZXJQYXRoXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgc2VyaWVzT3B0aW9ucy5wdXNoKHsgLi4uZGF0YU9wdGlvbnMsIC4uLm1vZGVsIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBjaGFydENvbXBvbmVudE9wdGlvbnMuc2VyaWVzT3B0aW9ucyA9IHNlcmllc09wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRJbmRleE1lbWJlclBhdGgoZGF0YVJlY29yZCwgaW5kZXgpIHtcclxuICAgICAgICBkYXRhUmVjb3JkID0geyAuLi57IFt0aGlzLl9sYWJlbE1lbWJlclBhdGhdOiBpbmRleCB9LCAuLi5kYXRhUmVjb3JkIH07XHJcbiAgICAgICAgcmV0dXJuIGRhdGFSZWNvcmQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRBeGlzTGFiZWxPcHRpb24odHlwZTogQ0hBUlRfVFlQRSwgb3B0aW9uczogSUNoYXJ0Q29tcG9uZW50T3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0eXBlLmluZGV4T2YoJ0JhcicpICE9PSAtMSkge1xyXG4gICAgICAgICAgICBvcHRpb25zLnlBeGlzT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX2xhYmVsTWVtYmVyUGF0aFxyXG4gICAgICAgICAgICB9LCB0aGlzLmN1c3RvbUNoYXJ0Q29tcG9uZW50T3B0aW9ucy5nZXQodHlwZSkueUF4aXNPcHRpb25zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb25zLnhBeGlzT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX2xhYmVsTWVtYmVyUGF0aFxyXG4gICAgICAgICAgICB9LCB0aGlzLmN1c3RvbUNoYXJ0Q29tcG9uZW50T3B0aW9ucy5nZXQodHlwZSkueEF4aXNPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldENoYXJ0Q29tcG9uZW50T3B0aW9ucyhjaGFydDogQ0hBUlRfVFlQRSwgb3B0aW9uc1R5cGU6IE9QVElPTlNfVFlQRSwgb3B0aW9uczogSU9wdGlvbnMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tQ2hhcnRDb21wb25lbnRPcHRpb25zLmdldChjaGFydClbb3B0aW9uc1R5cGVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb21wb25lbnRPcHRpb25zLmdldChjaGFydClbb3B0aW9uc1R5cGVdID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2gocHJvcGVydHkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbXBvbmVudE9wdGlvbnMuZ2V0KGNoYXJ0KVtvcHRpb25zVHlwZV1bcHJvcGVydHldID0gb3B0aW9uc1twcm9wZXJ0eV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export var CHART_TYPE;
|
|
2
|
+
(function (CHART_TYPE) {
|
|
3
|
+
CHART_TYPE["PIE"] = "Pie";
|
|
4
|
+
CHART_TYPE["COLUMN_GROUPED"] = "ColumnGrouped";
|
|
5
|
+
CHART_TYPE["AREA_GROUPED"] = "AreaGrouped";
|
|
6
|
+
CHART_TYPE["LINE_GROUPED"] = "LineGrouped";
|
|
7
|
+
CHART_TYPE["BAR_GROUPED"] = "BarGrouped";
|
|
8
|
+
CHART_TYPE["COLUMN_STACKED"] = "ColumnStacked";
|
|
9
|
+
CHART_TYPE["AREA_STACKED"] = "AreaStacked";
|
|
10
|
+
CHART_TYPE["LINE_STACKED"] = "LineStacked";
|
|
11
|
+
CHART_TYPE["BAR_STACKED"] = "BarStacked";
|
|
12
|
+
CHART_TYPE["COLUMN_100_STACKED"] = "Column100Stacked";
|
|
13
|
+
CHART_TYPE["AREA_100_STACKED"] = "Area100Stacked";
|
|
14
|
+
CHART_TYPE["LINE_100_STACKED"] = "Line100Stacked";
|
|
15
|
+
CHART_TYPE["BAR_100_STACKED"] = "Bar100Stacked";
|
|
16
|
+
CHART_TYPE["SCATTER_POINT"] = "ScatterPoint";
|
|
17
|
+
CHART_TYPE["SCATTER_BUBBLE"] = "ScatterBubble";
|
|
18
|
+
CHART_TYPE["SCATTER_LINE"] = "ScatterLine";
|
|
19
|
+
})(CHART_TYPE || (CHART_TYPE = {}));
|
|
20
|
+
export var OPTIONS_TYPE;
|
|
21
|
+
(function (OPTIONS_TYPE) {
|
|
22
|
+
OPTIONS_TYPE["CHART"] = "chartOptions";
|
|
23
|
+
OPTIONS_TYPE["SERIES"] = "seriesModel";
|
|
24
|
+
OPTIONS_TYPE["X_AXIS"] = "xAxisOptions";
|
|
25
|
+
OPTIONS_TYPE["Y_AXIS"] = "yAxisOptions";
|
|
26
|
+
OPTIONS_TYPE["STACKED_SERIES"] = "stackedFragmentOptions";
|
|
27
|
+
})(OPTIONS_TYPE || (OPTIONS_TYPE = {}));
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyLWV4dHJhcy9zcmMvbGliL2RpcmVjdGl2ZXMvY2hhcnQtaW50ZWdyYXRpb24vY2hhcnQtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksVUFpQlg7QUFqQkQsV0FBWSxVQUFVO0lBQ2xCLHlCQUFVLENBQUE7SUFDViw4Q0FBZ0MsQ0FBQTtJQUNoQywwQ0FBNEIsQ0FBQTtJQUM1QiwwQ0FBNEIsQ0FBQTtJQUM1Qix3Q0FBMEIsQ0FBQTtJQUMxQiw4Q0FBZ0MsQ0FBQTtJQUNoQywwQ0FBNEIsQ0FBQTtJQUM1QiwwQ0FBNEIsQ0FBQTtJQUM1Qix3Q0FBMEIsQ0FBQTtJQUMxQixxREFBdUMsQ0FBQTtJQUN2QyxpREFBbUMsQ0FBQTtJQUNuQyxpREFBbUMsQ0FBQTtJQUNuQywrQ0FBaUMsQ0FBQTtJQUNqQyw0Q0FBOEIsQ0FBQTtJQUM5Qiw4Q0FBZ0MsQ0FBQTtJQUNoQywwQ0FBNEIsQ0FBQTtBQUNoQyxDQUFDLEVBakJXLFVBQVUsS0FBVixVQUFVLFFBaUJyQjtBQUVELE1BQU0sQ0FBTixJQUFZLFlBTVg7QUFORCxXQUFZLFlBQVk7SUFDcEIsc0NBQXNCLENBQUE7SUFDdEIsc0NBQXNCLENBQUE7SUFDdEIsdUNBQXVCLENBQUE7SUFDdkIsdUNBQXVCLENBQUE7SUFDdkIseURBQXlDLENBQUE7QUFDN0MsQ0FBQyxFQU5XLFlBQVksS0FBWixZQUFZLFFBTXZCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gQ0hBUlRfVFlQRSB7XHJcbiAgICBQSUU9ICdQaWUnLFxyXG4gICAgQ09MVU1OX0dST1VQRUQgPSAnQ29sdW1uR3JvdXBlZCcsXHJcbiAgICBBUkVBX0dST1VQRUQgPSAnQXJlYUdyb3VwZWQnLFxyXG4gICAgTElORV9HUk9VUEVEID0gJ0xpbmVHcm91cGVkJyxcclxuICAgIEJBUl9HUk9VUEVEID0gJ0Jhckdyb3VwZWQnLFxyXG4gICAgQ09MVU1OX1NUQUNLRUQgPSAnQ29sdW1uU3RhY2tlZCcsXHJcbiAgICBBUkVBX1NUQUNLRUQgPSAnQXJlYVN0YWNrZWQnLFxyXG4gICAgTElORV9TVEFDS0VEID0gJ0xpbmVTdGFja2VkJyxcclxuICAgIEJBUl9TVEFDS0VEID0gJ0JhclN0YWNrZWQnLFxyXG4gICAgQ09MVU1OXzEwMF9TVEFDS0VEID0gJ0NvbHVtbjEwMFN0YWNrZWQnLFxyXG4gICAgQVJFQV8xMDBfU1RBQ0tFRCA9ICdBcmVhMTAwU3RhY2tlZCcsXHJcbiAgICBMSU5FXzEwMF9TVEFDS0VEID0gJ0xpbmUxMDBTdGFja2VkJyxcclxuICAgIEJBUl8xMDBfU1RBQ0tFRCA9ICdCYXIxMDBTdGFja2VkJyxcclxuICAgIFNDQVRURVJfUE9JTlQgPSAnU2NhdHRlclBvaW50JyxcclxuICAgIFNDQVRURVJfQlVCQkxFID0gJ1NjYXR0ZXJCdWJibGUnLFxyXG4gICAgU0NBVFRFUl9MSU5FID0gJ1NjYXR0ZXJMaW5lJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBPUFRJT05TX1RZUEUge1xyXG4gICAgQ0hBUlQgPSAnY2hhcnRPcHRpb25zJyxcclxuICAgIFNFUklFUyA9ICdzZXJpZXNNb2RlbCcsXHJcbiAgICBYX0FYSVMgPSAneEF4aXNPcHRpb25zJyxcclxuICAgIFlfQVhJUyA9ICd5QXhpc09wdGlvbnMnLFxyXG4gICAgU1RBQ0tFRF9TRVJJRVMgPSAnc3RhY2tlZEZyYWdtZW50T3B0aW9ucydcclxufVxyXG4iXX0=
|