igniteui-angular-extras 16.1.0 → 17.0.0
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/esm2022/igniteui-angular-extras.mjs +4 -4
- package/esm2022/images/charts.mjs +17 -17
- package/esm2022/images/conditions.mjs +11 -11
- package/esm2022/lib/context-menu/chart-dialog/chart-dialog.component.mjs +67 -67
- package/esm2022/lib/context-menu/context-menu.component.mjs +176 -176
- package/esm2022/lib/context-menu/igx-context-menu.directive.mjs +154 -154
- package/esm2022/lib/directives/chart-integration/chart-integration.directive.mjs +312 -312
- package/esm2022/lib/directives/chart-integration/chart-types.mjs +27 -27
- package/esm2022/lib/directives/chart-integration/initializers.mjs +102 -102
- package/esm2022/lib/directives/conditional-formatting/conditional-formatting.directive.mjs +303 -303
- package/esm2022/lib/igniteui-angular-extras.module.mjs +107 -107
- package/esm2022/lib/pipes/svg.pipe.mjs +19 -19
- package/esm2022/public-api.mjs +20 -20
- package/fesm2022/igniteui-angular-extras.mjs +1228 -1228
- package/fesm2022/igniteui-angular-extras.mjs.map +1 -1
- package/images/charts.d.ts +16 -16
- package/images/conditions.d.ts +10 -10
- package/index.d.ts +5 -5
- package/lib/context-menu/chart-dialog/chart-dialog.component.d.ts +31 -31
- package/lib/context-menu/context-menu.component.d.ts +37 -37
- package/lib/context-menu/igx-context-menu.directive.d.ts +33 -33
- package/lib/directives/chart-integration/chart-integration.directive.d.ts +52 -52
- package/lib/directives/chart-integration/chart-types.d.ts +25 -25
- package/lib/directives/chart-integration/initializers.d.ts +39 -39
- package/lib/directives/conditional-formatting/conditional-formatting.directive.d.ts +95 -95
- package/lib/igniteui-angular-extras.module.d.ts +15 -15
- package/lib/pipes/svg.pipe.d.ts +10 -10
- package/package.json +6 -6
- package/public-api.d.ts +17 -17
|
@@ -1,154 +1,154 @@
|
|
|
1
|
-
import { Directive, EventEmitter, Optional, Output } from '@angular/core';
|
|
2
|
-
import { AbsoluteScrollStrategy, AutoPositionStrategy, HorizontalAlignment, VerticalAlignment } from '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 "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
|
-
}
|
|
85
|
-
renderButton() {
|
|
86
|
-
if (!this._range) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
let rowIndex = this._range.rowEnd;
|
|
90
|
-
let colIndex = +this._range.columnEnd;
|
|
91
|
-
while (colIndex >= this._range.columnStart && !this.grid.navigation.isColumnFullyVisible(colIndex)) {
|
|
92
|
-
colIndex--;
|
|
93
|
-
}
|
|
94
|
-
while (rowIndex >= this._range.rowStart && this.grid.navigation.shouldPerformVerticalScroll(rowIndex, -1)) {
|
|
95
|
-
rowIndex--;
|
|
96
|
-
}
|
|
97
|
-
const field = this.grid.visibleColumns[colIndex] ? this.grid.visibleColumns[colIndex].field : '';
|
|
98
|
-
const cell = this.grid.gridAPI.get_cell_by_index(rowIndex, field);
|
|
99
|
-
if (!cell || !this.isWithInRange(cell.row.key, cell.column.index - 1)) {
|
|
100
|
-
this.close();
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
this._analyticsBtnSettings.positionStrategy = new AutoPositionStrategy({
|
|
104
|
-
horizontalDirection: HorizontalAlignment.Right,
|
|
105
|
-
horizontalStartPoint: HorizontalAlignment.Right,
|
|
106
|
-
verticalStartPoint: VerticalAlignment.Bottom,
|
|
107
|
-
verticalDirection: VerticalAlignment.Bottom, closeAnimation: null,
|
|
108
|
-
target: cell.nativeElement
|
|
109
|
-
});
|
|
110
|
-
this._analyticsBtnSettings.scrollStrategy = new AbsoluteScrollStrategy();
|
|
111
|
-
const info = this.overlayService.getOverlayById(this._id);
|
|
112
|
-
if (info) {
|
|
113
|
-
info.settings.positionStrategy = this._analyticsBtnSettings.positionStrategy;
|
|
114
|
-
}
|
|
115
|
-
this._collapsed ? this.show() : this.overlayService.reposition(this._id);
|
|
116
|
-
}
|
|
117
|
-
show() {
|
|
118
|
-
if (!this._collapsed) {
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
this._collapsed = false;
|
|
122
|
-
this._id = this._id ? this._id :
|
|
123
|
-
this.overlayService.attach(IgxContextMenuComponent, this._analyticsBtnSettings);
|
|
124
|
-
this.overlayService.show(this._id);
|
|
125
|
-
}
|
|
126
|
-
close() {
|
|
127
|
-
if (this._collapsed) {
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
this._collapsed = true;
|
|
131
|
-
this.overlayService.hide(this._id);
|
|
132
|
-
this.onButtonClose.emit();
|
|
133
|
-
this._id = undefined;
|
|
134
|
-
}
|
|
135
|
-
isWithInRange(rInex, cIndex) {
|
|
136
|
-
return rInex >= this._range.rowStart && rInex <= this._range.rowEnd
|
|
137
|
-
&& cIndex >= this._range.columnStart && cIndex <= this._range.columnEnd;
|
|
138
|
-
}
|
|
139
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
140
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
141
|
-
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
143
|
-
type: Directive,
|
|
144
|
-
args: [{
|
|
145
|
-
selector: '[igxContextMenu]'
|
|
146
|
-
}]
|
|
147
|
-
}], ctorParameters:
|
|
148
|
-
type: Optional
|
|
149
|
-
}] }, { type: i3.IgxChartIntegrationDirective, decorators: [{
|
|
150
|
-
type: Optional
|
|
151
|
-
}] }, { type: i1.IgxOverlayService }]
|
|
152
|
-
type: Output
|
|
153
|
-
}] } });
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWd4LWNvbnRleHQtbWVudS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyLWV4dHJhcy9zcmMvbGliL2NvbnRleHQtbWVudS9pZ3gtY29udGV4dC1tZW51LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUN2QixpQkFBaUIsRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBS3pELE1BQU0sT0FBTyx1QkFBdUI7SUFnQmhDLFlBQW1CLElBQXNCLEVBQ1YsYUFBZ0QsRUFDaEQsZUFBNkMsRUFDeEQsY0FBaUM7UUFIbEMsU0FBSSxHQUFKLElBQUksQ0FBa0I7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBbUM7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQThCO1FBQ3hELG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQWpCcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWxELGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFJaEMsZUFBVSxHQUFHLElBQUks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YSxDQUFDLEtBQUssRUFBRSxNQUFNO1FBQy9CLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07ZUFDNUQsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUNoRixDQUFDOzhHQXhJUSx1QkFBdUI7a0dBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO2lCQUMvQjs7MEJBa0JnQixRQUFROzswQkFDUixRQUFROzRFQWhCSixhQUFhO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIE9wdGlvbmFsLCBPdXRwdXQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksIEF1dG9Qb3NpdGlvblN0cmF0ZWd5LCBIb3Jpem9udGFsQWxpZ25tZW50LCBJZ3hHcmlkQ29tcG9uZW50LFxyXG4gICAgSWd4T3ZlcmxheVNlcnZpY2UsIE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzLCBWZXJ0aWNhbEFsaWdubWVudCwgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnaWduaXRldWktYW5ndWxhcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1lcmdlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElneENoYXJ0SW50ZWdyYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2NoYXJ0LWludGVncmF0aW9uL2NoYXJ0LWludGVncmF0aW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElneENvbmRpdGlvbmFsRm9ybWF0dGluZ0RpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY29uZGl0aW9uYWwtZm9ybWF0dGluZy9jb25kaXRpb25hbC1mb3JtYXR0aW5nLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElneENvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9jb250ZXh0LW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICdAanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlcic7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2lneENvbnRleHRNZW51XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIElneENvbnRleHRNZW51RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25CdXR0b25DbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIHB1YmxpYyBmb3JtYXR0ZXJzID0gW107XHJcbiAgICBwdWJsaWMgY2hhcnRzID0gW107XHJcbiAgICBwdWJsaWMgZ3JpZFJlc2l6ZU5vdGlmeSA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBwcml2YXRlIGNvbnRlbnRPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XHJcbiAgICBwcml2YXRlIF9yYW5nZTtcclxuICAgIHByaXZhdGUgX2lkO1xyXG4gICAgcHJpdmF0ZSBfY29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBwcml2YXRlIF9hbmFseXRpY3NCdG5TZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xyXG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IGZhbHNlLFxyXG4gICAgICAgIG1vZGFsOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIHRleHRGb3JtYXR0ZXI6IElneENvbmRpdGlvbmFsRm9ybWF0dGluZ0RpcmVjdGl2ZSxcclxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBjaGFydHNEaXJlY3RpdmU6IElneENoYXJ0SW50ZWdyYXRpb25EaXJlY3RpdmUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSkgeyB9XHJcblxyXG4gICAgcHVibGljIG5nT25Jbml0ICgpIHtcclxuICAgICAgICB0aGlzLmdyaWRSZXNpemVOb3RpZnkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faWQgJiYgIXRoaXMuX2NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQnV0dG9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNldFVwR3JpZExpc3RlbmVycygpO1xyXG4gICAgICAgIGlmICh0aGlzLnRleHRGb3JtYXR0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy50ZXh0Rm9ybWF0dGVyLm9uRm9ybWF0dGVyc1JlYWR5LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShuYW1lcyA9PiB0aGlzLmZvcm1hdHRlcnMgPSBuYW1lcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0c0RpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXJ0c0RpcmVjdGl2ZS5vbkNoYXJ0VHlwZXNEZXRlcm1pbmVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoYXJncykgPT4gdGhpcy5jaGFydHMgPSBhcmdzLmNoYXJ0c0ZvckNyZWF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5vcGVuaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChhcmdzOiBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuY29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSAoYXJncy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgSWd4Q29udGV4dE1lbnVDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbnRleHREaXJlY3RpdmUgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0VXBHcmlkTGlzdGVuZXJzKCkge1xyXG4gICAgICAgIHRoaXMuY29udGVudE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMuZ3JpZFJlc2l6ZU5vdGlmeS5uZXh0KCkpO1xyXG4gICAgICAgIHRoaXMuY29udGVudE9ic2VydmVyLm9ic2VydmUodGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgICAgICB0aGlzLmdyaWQucmFuZ2VTZWxlY3RlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmFuZ2UgPSBhcmdzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnRzRGlyZWN0aXZlICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5ncmlkLmdldFNlbGVjdGVkUmFuZ2VzKCkubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRzRGlyZWN0aXZlLmNoYXJ0RGF0YSA9IHRoaXMuZ3JpZC5nZXRTZWxlY3RlZERhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0c0RpcmVjdGl2ZS5jaGFydERhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25CdXR0b25DbG9zZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJCdXR0b24oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmNodW5rTG9hZC5waXBlKFxyXG4gICAgICAgICAgICBtZXJnZSh0aGlzLmdyaWQucGFyZW50VmlydERpci5jaHVua0xvYWQsIHRoaXMuZ3JpZC5maWx0ZXJpbmdEb25lLCB0aGlzLmdyaWQuY29sdW1uUmVzaXplZCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZC5waXBlKGRlYm91bmNlVGltZSgzMCkpKSxcclxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX3JhbmdlKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkJ1dHRvbkNsb3NlLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQnV0dG9uKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVuZGVyQnV0dG9uKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcmFuZ2UpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgbGV0IHJvd0luZGV4ID0gdGhpcy5fcmFuZ2Uucm93RW5kO1xyXG4gICAgICAgIGxldCBjb2xJbmRleCA9ICt0aGlzLl9yYW5nZS5jb2x1bW5FbmQ7XHJcbiAgICAgICAgd2hpbGUgKGNvbEluZGV4ID49IHRoaXMuX3JhbmdlLmNvbHVtblN0YXJ0ICYmICF0aGlzLmdyaWQubmF2aWdhdGlvbi5pc0NvbHVtbkZ1bGx5VmlzaWJsZShjb2xJbmRleCkpIHtcclxuICAgICAgICAgICAgY29sSW5kZXgtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2hpbGUgKHJvd0luZGV4ID49IHRoaXMuX3JhbmdlLnJvd1N0YXJ0ICYmIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbChyb3dJbmRleCwgLTEpKSB7XHJcbiAgICAgICAgICAgIHJvd0luZGV4LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zW2NvbEluZGV4XSA/IHRoaXMuZ3JpZC52aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0uZmllbGQgOiAnJztcclxuICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2NlbGxfYnlfaW5kZXgocm93SW5kZXgsIGZpZWxkKTtcclxuICAgICAgICBpZiAoIWNlbGwgfHwgIXRoaXMuaXNXaXRoSW5SYW5nZShjZWxsLnJvdy5rZXksIGNlbGwuY29sdW1uLmluZGV4IC0gMSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2FuYWx5dGljc0J0blNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kgPSBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koe1xyXG4gICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0LFxyXG4gICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodCxcclxuICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXHJcbiAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sIGNsb3NlQW5pbWF0aW9uOiBudWxsLFxyXG4gICAgICAgICAgICB0YXJnZXQ6IGNlbGwubmF0aXZlRWxlbWVudFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2FuYWx5dGljc0J0blNldHRpbmdzLnNjcm9sbFN0cmF0ZWd5ID0gbmV3IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3koKTtcclxuICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5vdmVybGF5U2VydmljZS5nZXRPdmVybGF5QnlJZCh0aGlzLl9pZCk7XHJcbiAgICAgICAgaWYgKGluZm8pIHtcclxuICAgICAgICAgICAgaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5fYW5hbHl0aWNzQnRuU2V0dGluZ3MucG9zaXRpb25TdHJhdGVneTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29sbGFwc2VkID8gdGhpcy5zaG93KCkgOiB0aGlzLm92ZXJsYXlTZXJ2aWNlLnJlcG9zaXRpb24odGhpcy5faWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvdygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxhcHNlZCkgeyByZXR1cm47IH1cclxuICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pZCA9IHRoaXMuX2lkID8gdGhpcy5faWQgOlxyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmF0dGFjaChJZ3hDb250ZXh0TWVudUNvbXBvbmVudCwgdGhpcy5fYW5hbHl0aWNzQnRuU2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2Uuc2hvdyh0aGlzLl9pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9zZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fY29sbGFwc2VkKSB7IHJldHVybjsgfVxyXG4gICAgICAgIHRoaXMuX2NvbGxhcHNlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5oaWRlKHRoaXMuX2lkKTtcclxuICAgICAgICB0aGlzLm9uQnV0dG9uQ2xvc2UuZW1pdCgpO1xyXG4gICAgICAgIHRoaXMuX2lkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNXaXRoSW5SYW5nZShySW5leCwgY0luZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHJJbmV4ID49IHRoaXMuX3JhbmdlLnJvd1N0YXJ0ICYmIHJJbmV4IDw9IHRoaXMuX3JhbmdlLnJvd0VuZFxyXG4gICAgICAgICAgICAmJiBjSW5kZXggPj0gdGhpcy5fcmFuZ2UuY29sdW1uU3RhcnQgJiYgY0luZGV4IDw9IHRoaXMuX3JhbmdlLmNvbHVtbkVuZDtcclxuICAgIH1cclxufVxyXG5cclxuIl19
|
|
1
|
+
import { Directive, EventEmitter, Optional, Output } from '@angular/core';
|
|
2
|
+
import { AbsoluteScrollStrategy, AutoPositionStrategy, HorizontalAlignment, VerticalAlignment } from '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 "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
|
+
}
|
|
85
|
+
renderButton() {
|
|
86
|
+
if (!this._range) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
let rowIndex = this._range.rowEnd;
|
|
90
|
+
let colIndex = +this._range.columnEnd;
|
|
91
|
+
while (colIndex >= this._range.columnStart && !this.grid.navigation.isColumnFullyVisible(colIndex)) {
|
|
92
|
+
colIndex--;
|
|
93
|
+
}
|
|
94
|
+
while (rowIndex >= this._range.rowStart && this.grid.navigation.shouldPerformVerticalScroll(rowIndex, -1)) {
|
|
95
|
+
rowIndex--;
|
|
96
|
+
}
|
|
97
|
+
const field = this.grid.visibleColumns[colIndex] ? this.grid.visibleColumns[colIndex].field : '';
|
|
98
|
+
const cell = this.grid.gridAPI.get_cell_by_index(rowIndex, field);
|
|
99
|
+
if (!cell || !this.isWithInRange(cell.row.key, cell.column.index - 1)) {
|
|
100
|
+
this.close();
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
this._analyticsBtnSettings.positionStrategy = new AutoPositionStrategy({
|
|
104
|
+
horizontalDirection: HorizontalAlignment.Right,
|
|
105
|
+
horizontalStartPoint: HorizontalAlignment.Right,
|
|
106
|
+
verticalStartPoint: VerticalAlignment.Bottom,
|
|
107
|
+
verticalDirection: VerticalAlignment.Bottom, closeAnimation: null,
|
|
108
|
+
target: cell.nativeElement
|
|
109
|
+
});
|
|
110
|
+
this._analyticsBtnSettings.scrollStrategy = new AbsoluteScrollStrategy();
|
|
111
|
+
const info = this.overlayService.getOverlayById(this._id);
|
|
112
|
+
if (info) {
|
|
113
|
+
info.settings.positionStrategy = this._analyticsBtnSettings.positionStrategy;
|
|
114
|
+
}
|
|
115
|
+
this._collapsed ? this.show() : this.overlayService.reposition(this._id);
|
|
116
|
+
}
|
|
117
|
+
show() {
|
|
118
|
+
if (!this._collapsed) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
this._collapsed = false;
|
|
122
|
+
this._id = this._id ? this._id :
|
|
123
|
+
this.overlayService.attach(IgxContextMenuComponent, this._analyticsBtnSettings);
|
|
124
|
+
this.overlayService.show(this._id);
|
|
125
|
+
}
|
|
126
|
+
close() {
|
|
127
|
+
if (this._collapsed) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
this._collapsed = true;
|
|
131
|
+
this.overlayService.hide(this._id);
|
|
132
|
+
this.onButtonClose.emit();
|
|
133
|
+
this._id = undefined;
|
|
134
|
+
}
|
|
135
|
+
isWithInRange(rInex, cIndex) {
|
|
136
|
+
return rInex >= this._range.rowStart && rInex <= this._range.rowEnd
|
|
137
|
+
&& cIndex >= this._range.columnStart && cIndex <= this._range.columnEnd;
|
|
138
|
+
}
|
|
139
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0", 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 }); }
|
|
140
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.0", type: IgxContextMenuDirective, selector: "[igxContextMenu]", outputs: { onButtonClose: "onButtonClose" }, ngImport: i0 }); }
|
|
141
|
+
}
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: IgxContextMenuDirective, decorators: [{
|
|
143
|
+
type: Directive,
|
|
144
|
+
args: [{
|
|
145
|
+
selector: '[igxContextMenu]'
|
|
146
|
+
}]
|
|
147
|
+
}], ctorParameters: () => [{ type: i1.IgxGridComponent }, { type: i2.IgxConditionalFormattingDirective, decorators: [{
|
|
148
|
+
type: Optional
|
|
149
|
+
}] }, { type: i3.IgxChartIntegrationDirective, decorators: [{
|
|
150
|
+
type: Optional
|
|
151
|
+
}] }, { type: i1.IgxOverlayService }], propDecorators: { onButtonClose: [{
|
|
152
|
+
type: Output
|
|
153
|
+
}] } });
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWd4LWNvbnRleHQtbWVudS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyLWV4dHJhcy9zcmMvbGliL2NvbnRleHQtbWVudS9pZ3gtY29udGV4dC1tZW51LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUN2QixpQkFBaUIsRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBS3pELE1BQU0sT0FBTyx1QkFBdUI7SUFnQmhDLFlBQW1CLElBQXNCLEVBQ1YsYUFBZ0QsRUFDaEQsZUFBNkMsRUFDeEQsY0FBaUM7UUFIbEMsU0FBSSxHQUFKLElBQUksQ0FBa0I7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBbUM7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQThCO1FBQ3hELG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQWpCcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWxELGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFJaEMsZUFBVSxHQUFHLElBQUks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YSxDQUFDLEtBQUssRUFBRSxNQUFNO1FBQy9CLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07ZUFDNUQsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUNoRixDQUFDOzhHQXhJUSx1QkFBdUI7a0dBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO2lCQUMvQjs7MEJBa0JnQixRQUFROzswQkFDUixRQUFRO3lFQWhCSixhQUFhO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIE9wdGlvbmFsLCBPdXRwdXQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksIEF1dG9Qb3NpdGlvblN0cmF0ZWd5LCBIb3Jpem9udGFsQWxpZ25tZW50LCBJZ3hHcmlkQ29tcG9uZW50LFxyXG4gICAgSWd4T3ZlcmxheVNlcnZpY2UsIE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzLCBWZXJ0aWNhbEFsaWdubWVudCwgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnaWduaXRldWktYW5ndWxhcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1lcmdlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElneENoYXJ0SW50ZWdyYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2NoYXJ0LWludGVncmF0aW9uL2NoYXJ0LWludGVncmF0aW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElneENvbmRpdGlvbmFsRm9ybWF0dGluZ0RpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY29uZGl0aW9uYWwtZm9ybWF0dGluZy9jb25kaXRpb25hbC1mb3JtYXR0aW5nLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElneENvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9jb250ZXh0LW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICdAanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlcic7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2lneENvbnRleHRNZW51XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIElneENvbnRleHRNZW51RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25CdXR0b25DbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIHB1YmxpYyBmb3JtYXR0ZXJzID0gW107XHJcbiAgICBwdWJsaWMgY2hhcnRzID0gW107XHJcbiAgICBwdWJsaWMgZ3JpZFJlc2l6ZU5vdGlmeSA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBwcml2YXRlIGNvbnRlbnRPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XHJcbiAgICBwcml2YXRlIF9yYW5nZTtcclxuICAgIHByaXZhdGUgX2lkO1xyXG4gICAgcHJpdmF0ZSBfY29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBwcml2YXRlIF9hbmFseXRpY3NCdG5TZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xyXG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IGZhbHNlLFxyXG4gICAgICAgIG1vZGFsOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIHRleHRGb3JtYXR0ZXI6IElneENvbmRpdGlvbmFsRm9ybWF0dGluZ0RpcmVjdGl2ZSxcclxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBjaGFydHNEaXJlY3RpdmU6IElneENoYXJ0SW50ZWdyYXRpb25EaXJlY3RpdmUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSkgeyB9XHJcblxyXG4gICAgcHVibGljIG5nT25Jbml0ICgpIHtcclxuICAgICAgICB0aGlzLmdyaWRSZXNpemVOb3RpZnkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faWQgJiYgIXRoaXMuX2NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQnV0dG9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNldFVwR3JpZExpc3RlbmVycygpO1xyXG4gICAgICAgIGlmICh0aGlzLnRleHRGb3JtYXR0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy50ZXh0Rm9ybWF0dGVyLm9uRm9ybWF0dGVyc1JlYWR5LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShuYW1lcyA9PiB0aGlzLmZvcm1hdHRlcnMgPSBuYW1lcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0c0RpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXJ0c0RpcmVjdGl2ZS5vbkNoYXJ0VHlwZXNEZXRlcm1pbmVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoYXJncykgPT4gdGhpcy5jaGFydHMgPSBhcmdzLmNoYXJ0c0ZvckNyZWF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5vcGVuaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChhcmdzOiBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuY29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSAoYXJncy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgSWd4Q29udGV4dE1lbnVDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbnRleHREaXJlY3RpdmUgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0VXBHcmlkTGlzdGVuZXJzKCkge1xyXG4gICAgICAgIHRoaXMuY29udGVudE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMuZ3JpZFJlc2l6ZU5vdGlmeS5uZXh0KCkpO1xyXG4gICAgICAgIHRoaXMuY29udGVudE9ic2VydmVyLm9ic2VydmUodGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgICAgICB0aGlzLmdyaWQucmFuZ2VTZWxlY3RlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmFuZ2UgPSBhcmdzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnRzRGlyZWN0aXZlICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5ncmlkLmdldFNlbGVjdGVkUmFuZ2VzKCkubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRzRGlyZWN0aXZlLmNoYXJ0RGF0YSA9IHRoaXMuZ3JpZC5nZXRTZWxlY3RlZERhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0c0RpcmVjdGl2ZS5jaGFydERhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25CdXR0b25DbG9zZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJCdXR0b24oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmNodW5rTG9hZC5waXBlKFxyXG4gICAgICAgICAgICBtZXJnZSh0aGlzLmdyaWQucGFyZW50VmlydERpci5jaHVua0xvYWQsIHRoaXMuZ3JpZC5maWx0ZXJpbmdEb25lLCB0aGlzLmdyaWQuY29sdW1uUmVzaXplZCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZC5waXBlKGRlYm91bmNlVGltZSgzMCkpKSxcclxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX3JhbmdlKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkJ1dHRvbkNsb3NlLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQnV0dG9uKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVuZGVyQnV0dG9uKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcmFuZ2UpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgbGV0IHJvd0luZGV4ID0gdGhpcy5fcmFuZ2Uucm93RW5kO1xyXG4gICAgICAgIGxldCBjb2xJbmRleCA9ICt0aGlzLl9yYW5nZS5jb2x1bW5FbmQ7XHJcbiAgICAgICAgd2hpbGUgKGNvbEluZGV4ID49IHRoaXMuX3JhbmdlLmNvbHVtblN0YXJ0ICYmICF0aGlzLmdyaWQubmF2aWdhdGlvbi5pc0NvbHVtbkZ1bGx5VmlzaWJsZShjb2xJbmRleCkpIHtcclxuICAgICAgICAgICAgY29sSW5kZXgtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2hpbGUgKHJvd0luZGV4ID49IHRoaXMuX3JhbmdlLnJvd1N0YXJ0ICYmIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbChyb3dJbmRleCwgLTEpKSB7XHJcbiAgICAgICAgICAgIHJvd0luZGV4LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zW2NvbEluZGV4XSA/IHRoaXMuZ3JpZC52aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0uZmllbGQgOiAnJztcclxuICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2NlbGxfYnlfaW5kZXgocm93SW5kZXgsIGZpZWxkKTtcclxuICAgICAgICBpZiAoIWNlbGwgfHwgIXRoaXMuaXNXaXRoSW5SYW5nZShjZWxsLnJvdy5rZXksIGNlbGwuY29sdW1uLmluZGV4IC0gMSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2FuYWx5dGljc0J0blNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kgPSBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koe1xyXG4gICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0LFxyXG4gICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodCxcclxuICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXHJcbiAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sIGNsb3NlQW5pbWF0aW9uOiBudWxsLFxyXG4gICAgICAgICAgICB0YXJnZXQ6IGNlbGwubmF0aXZlRWxlbWVudFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2FuYWx5dGljc0J0blNldHRpbmdzLnNjcm9sbFN0cmF0ZWd5ID0gbmV3IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3koKTtcclxuICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5vdmVybGF5U2VydmljZS5nZXRPdmVybGF5QnlJZCh0aGlzLl9pZCk7XHJcbiAgICAgICAgaWYgKGluZm8pIHtcclxuICAgICAgICAgICAgaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5fYW5hbHl0aWNzQnRuU2V0dGluZ3MucG9zaXRpb25TdHJhdGVneTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29sbGFwc2VkID8gdGhpcy5zaG93KCkgOiB0aGlzLm92ZXJsYXlTZXJ2aWNlLnJlcG9zaXRpb24odGhpcy5faWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvdygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxhcHNlZCkgeyByZXR1cm47IH1cclxuICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pZCA9IHRoaXMuX2lkID8gdGhpcy5faWQgOlxyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmF0dGFjaChJZ3hDb250ZXh0TWVudUNvbXBvbmVudCwgdGhpcy5fYW5hbHl0aWNzQnRuU2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2Uuc2hvdyh0aGlzLl9pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9zZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fY29sbGFwc2VkKSB7IHJldHVybjsgfVxyXG4gICAgICAgIHRoaXMuX2NvbGxhcHNlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5oaWRlKHRoaXMuX2lkKTtcclxuICAgICAgICB0aGlzLm9uQnV0dG9uQ2xvc2UuZW1pdCgpO1xyXG4gICAgICAgIHRoaXMuX2lkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNXaXRoSW5SYW5nZShySW5leCwgY0luZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHJJbmV4ID49IHRoaXMuX3JhbmdlLnJvd1N0YXJ0ICYmIHJJbmV4IDw9IHRoaXMuX3JhbmdlLnJvd0VuZFxyXG4gICAgICAgICAgICAmJiBjSW5kZXggPj0gdGhpcy5fcmFuZ2UuY29sdW1uU3RhcnQgJiYgY0luZGV4IDw9IHRoaXMuX3JhbmdlLmNvbHVtbkVuZDtcclxuICAgIH1cclxufVxyXG5cclxuIl19
|