barsa-tiles 1.0.456 → 2.0.2
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/{esm2020 → esm2022}/barsa-tiles.mjs +4 -4
- package/esm2022/lib/action-item/action-item.component.mjs +17 -0
- package/{esm2020 → esm2022}/lib/action-links.pipe.mjs +16 -16
- package/esm2022/lib/actions-link/actions-link.component.mjs +41 -0
- package/esm2022/lib/app-finder/app-finder.component.mjs +52 -0
- package/esm2022/lib/app-finder-app-list/app-finder-app-list.component.mjs +39 -0
- package/esm2022/lib/app-finder-group/app-finder-group.component.mjs +41 -0
- package/esm2022/lib/app-finder.service.mjs +121 -0
- package/esm2022/lib/barsa-shellbar/barsa-shellbar.component.mjs +183 -0
- package/esm2022/lib/barsa-tiles.module.mjs +225 -0
- package/esm2022/lib/change-app-tile/change-app-tile.component.mjs +46 -0
- package/esm2022/lib/create-app-group/create-app-group.component.mjs +43 -0
- package/esm2022/lib/directives/emptylist.directive.mjs +36 -0
- package/esm2022/lib/feed-tile/feed-tile.component.mjs +31 -0
- package/{esm2020 → esm2022}/lib/footer-edit-tile/footer-edit-tile.component.mjs +13 -13
- package/esm2022/lib/footer-tile/footer-tile.component.mjs +27 -0
- package/esm2022/lib/form-app-finder/form-app-finder.component.mjs +95 -0
- package/esm2022/lib/form-tile/form-tile.component.mjs +34 -0
- package/esm2022/lib/logo-tile/logo-tile.component.mjs +23 -0
- package/{esm2020 → esm2022}/lib/micro-tile-chart-area/micro-tile-chart-area.component.mjs +40 -40
- package/{esm2020 → esm2022}/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.mjs +29 -29
- package/esm2022/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +26 -0
- package/{esm2020 → esm2022}/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.mjs +20 -20
- package/{esm2020 → esm2022}/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.mjs +31 -31
- package/{esm2020 → esm2022}/lib/micro-tile-chart-line/micro-tile-chart-line.component.mjs +32 -32
- package/{esm2020 → esm2022}/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.mjs +27 -27
- package/{esm2020 → esm2022}/lib/models/app-tile-footer-section.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/app-tile-footer.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/app-tile-group-pin.mjs +1 -1
- package/esm2022/lib/models/base-bt-tile-component.mjs +26 -0
- package/{esm2020 → esm2022}/lib/models/base-tile-component.mjs +58 -58
- package/{esm2020 → esm2022}/lib/models/base-tile-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/feed-tile-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/index.mjs +13 -13
- package/{esm2020 → esm2022}/lib/models/logo-tile-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/micro-tile-chart-bullet-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/news-tile-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/numeric-tile-setting.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/profile-tile-setting.mjs +1 -1
- package/esm2022/lib/models/tile-setting.mjs +2 -0
- package/{esm2020 → esm2022}/lib/models/user-portal-settings.mjs +1 -1
- package/esm2022/lib/news-tile/news-tile.component.mjs +53 -0
- package/esm2022/lib/notification-group/notification-group.component.mjs +116 -0
- package/esm2022/lib/notification-group-header/notification-group-header.component.mjs +38 -0
- package/esm2022/lib/numeric-tile/numeric-tile.component.mjs +64 -0
- package/esm2022/lib/pin-tile/pin-tile.component.mjs +110 -0
- package/esm2022/lib/pipes/group-tiles.pipe.mjs +31 -0
- package/{esm2020 → esm2022}/lib/pipes/home-group.pipe.mjs +17 -17
- package/esm2022/lib/pipes/tile-home-filter.pipe.mjs +28 -0
- package/esm2022/lib/pipes/tile-prop.pipe.mjs +32 -0
- package/esm2022/lib/popover-app-finder/filter-apps-grouped.pipe.mjs +36 -0
- package/esm2022/lib/popover-app-finder/popover-app-finder.component.mjs +112 -0
- package/esm2022/lib/profile-tile/profile-tile.component.mjs +25 -0
- package/esm2022/lib/shellbar/shellbar.component.mjs +201 -0
- package/esm2022/lib/simple-tile/simple-tile.component.mjs +22 -0
- package/esm2022/lib/tile/tile.component.mjs +70 -0
- package/esm2022/lib/tile-renderer.directive.mjs +70 -0
- package/esm2022/lib/tile-style.directive.mjs +29 -0
- package/esm2022/lib/tiles-viewer/tiles-viewer.component.mjs +167 -0
- package/esm2022/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +164 -0
- package/esm2022/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +88 -0
- package/esm2022/lib/tiles-viewer.service.mjs +130 -0
- package/esm2022/lib/tiles.service.mjs +589 -0
- package/{esm2020 → esm2022}/public-api.mjs +46 -45
- package/fesm2022/barsa-tiles.mjs +3179 -0
- package/fesm2022/barsa-tiles.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/action-item/action-item.component.d.ts +6 -6
- package/lib/action-links.pipe.d.ts +7 -7
- package/lib/actions-link/actions-link.component.d.ts +17 -17
- package/lib/app-finder/app-finder.component.d.ts +24 -24
- package/lib/app-finder-app-list/app-finder-app-list.component.d.ts +20 -20
- package/lib/app-finder-group/app-finder-group.component.d.ts +14 -14
- package/lib/app-finder.service.d.ts +33 -33
- package/lib/barsa-shellbar/barsa-shellbar.component.d.ts +104 -97
- package/lib/barsa-tiles.module.d.ts +91 -86
- package/lib/change-app-tile/change-app-tile.component.d.ts +20 -20
- package/lib/create-app-group/create-app-group.component.d.ts +19 -19
- package/lib/directives/emptylist.directive.d.ts +14 -14
- package/lib/feed-tile/feed-tile.component.d.ts +11 -11
- package/lib/footer-edit-tile/footer-edit-tile.component.d.ts +6 -6
- package/lib/footer-tile/footer-tile.component.d.ts +11 -11
- package/lib/form-app-finder/form-app-finder.component.d.ts +38 -38
- package/lib/form-tile/form-tile.component.d.ts +24 -24
- package/lib/logo-tile/logo-tile.component.d.ts +7 -7
- package/lib/micro-tile-chart-area/micro-tile-chart-area.component.d.ts +8 -8
- package/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.d.ts +12 -12
- package/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.d.ts +16 -16
- package/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.d.ts +7 -7
- package/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.d.ts +8 -8
- package/lib/micro-tile-chart-line/micro-tile-chart-line.component.d.ts +8 -8
- package/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.d.ts +8 -8
- package/lib/models/app-tile-footer-section.d.ts +6 -6
- package/lib/models/app-tile-footer.d.ts +8 -8
- package/lib/models/app-tile-group-pin.d.ts +5 -5
- package/lib/models/base-bt-tile-component.d.ts +9 -9
- package/lib/models/base-tile-component.d.ts +26 -26
- package/lib/models/base-tile-setting.d.ts +5 -5
- package/lib/models/feed-tile-setting.d.ts +7 -7
- package/lib/models/index.d.ts +13 -13
- package/lib/models/logo-tile-setting.d.ts +6 -6
- package/lib/models/micro-tile-chart-bullet-setting.d.ts +10 -10
- package/lib/models/news-tile-setting.d.ts +4 -4
- package/lib/models/numeric-tile-setting.d.ts +9 -9
- package/lib/models/profile-tile-setting.d.ts +7 -7
- package/lib/models/tile-setting.d.ts +10 -10
- package/lib/models/user-portal-settings.d.ts +9 -9
- package/lib/news-tile/news-tile.component.d.ts +19 -19
- package/lib/notification-group/notification-group.component.d.ts +54 -55
- package/lib/notification-group-header/notification-group-header.component.d.ts +15 -15
- package/lib/numeric-tile/numeric-tile.component.d.ts +16 -12
- package/lib/pin-tile/pin-tile.component.d.ts +30 -30
- package/lib/pipes/group-tiles.pipe.d.ts +14 -14
- package/lib/pipes/home-group.pipe.d.ts +9 -9
- package/lib/pipes/tile-home-filter.pipe.d.ts +8 -8
- package/lib/pipes/tile-prop.pipe.d.ts +8 -8
- package/lib/popover-app-finder/filter-apps-grouped.pipe.d.ts +13 -0
- package/lib/popover-app-finder/popover-app-finder.component.d.ts +39 -0
- package/lib/profile-tile/profile-tile.component.d.ts +7 -7
- package/lib/shellbar/shellbar.component.d.ts +94 -94
- package/lib/simple-tile/simple-tile.component.d.ts +10 -10
- package/lib/tile/tile.component.d.ts +22 -20
- package/lib/tile-renderer.directive.d.ts +28 -28
- package/lib/tile-style.directive.d.ts +12 -0
- package/lib/tiles-viewer/tiles-viewer.component.d.ts +65 -63
- package/lib/tiles-viewer-container/tiles-viewer-container.component.d.ts +59 -57
- package/lib/tiles-viewer-group/tiles-viewer-group.component.d.ts +39 -39
- package/lib/tiles-viewer.service.d.ts +42 -42
- package/lib/tiles.service.d.ts +75 -75
- package/package.json +7 -13
- package/public-api.d.ts +42 -41
- package/esm2020/lib/action-item/action-item.component.mjs +0 -18
- package/esm2020/lib/actions-link/actions-link.component.mjs +0 -42
- package/esm2020/lib/app-finder/app-finder.component.mjs +0 -53
- package/esm2020/lib/app-finder-app-list/app-finder-app-list.component.mjs +0 -40
- package/esm2020/lib/app-finder-group/app-finder-group.component.mjs +0 -42
- package/esm2020/lib/app-finder.service.mjs +0 -121
- package/esm2020/lib/barsa-shellbar/barsa-shellbar.component.mjs +0 -166
- package/esm2020/lib/barsa-tiles.module.mjs +0 -206
- package/esm2020/lib/change-app-tile/change-app-tile.component.mjs +0 -47
- package/esm2020/lib/create-app-group/create-app-group.component.mjs +0 -44
- package/esm2020/lib/directives/emptylist.directive.mjs +0 -36
- package/esm2020/lib/feed-tile/feed-tile.component.mjs +0 -32
- package/esm2020/lib/footer-tile/footer-tile.component.mjs +0 -28
- package/esm2020/lib/form-app-finder/form-app-finder.component.mjs +0 -95
- package/esm2020/lib/form-tile/form-tile.component.mjs +0 -35
- package/esm2020/lib/logo-tile/logo-tile.component.mjs +0 -23
- package/esm2020/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +0 -27
- package/esm2020/lib/models/base-bt-tile-component.mjs +0 -30
- package/esm2020/lib/models/tile-setting.mjs +0 -2
- package/esm2020/lib/news-tile/news-tile.component.mjs +0 -54
- package/esm2020/lib/notification-group/notification-group.component.mjs +0 -116
- package/esm2020/lib/notification-group-header/notification-group-header.component.mjs +0 -39
- package/esm2020/lib/numeric-tile/numeric-tile.component.mjs +0 -34
- package/esm2020/lib/pin-tile/pin-tile.component.mjs +0 -111
- package/esm2020/lib/pipes/group-tiles.pipe.mjs +0 -31
- package/esm2020/lib/pipes/tile-home-filter.pipe.mjs +0 -28
- package/esm2020/lib/pipes/tile-prop.pipe.mjs +0 -32
- package/esm2020/lib/profile-tile/profile-tile.component.mjs +0 -26
- package/esm2020/lib/shellbar/shellbar.component.mjs +0 -200
- package/esm2020/lib/simple-tile/simple-tile.component.mjs +0 -23
- package/esm2020/lib/tile/tile.component.mjs +0 -61
- package/esm2020/lib/tile-renderer.directive.mjs +0 -70
- package/esm2020/lib/tiles-viewer/tiles-viewer.component.mjs +0 -157
- package/esm2020/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +0 -158
- package/esm2020/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +0 -88
- package/esm2020/lib/tiles-viewer.service.mjs +0 -130
- package/esm2020/lib/tiles.service.mjs +0 -589
- package/fesm2015/barsa-tiles.mjs +0 -2977
- package/fesm2015/barsa-tiles.mjs.map +0 -1
- package/fesm2020/barsa-tiles.mjs +0 -2941
- package/fesm2020/barsa-tiles.mjs.map +0 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
|
+
import { debounceTime, exhaustMap, finalize, takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { ChangeAppTileComponent } from './change-app-tile/change-app-tile.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@fundamental-ngx/core";
|
|
7
|
+
import * as i2 from "./tiles.service";
|
|
8
|
+
export class TilesViewerService {
|
|
9
|
+
constructor(dialogService, tilesService) {
|
|
10
|
+
this.dialogService = dialogService;
|
|
11
|
+
this.tilesService = tilesService;
|
|
12
|
+
this._onDestroy$ = new Subject();
|
|
13
|
+
this._hideTileSource = new Subject();
|
|
14
|
+
this._updateAppTileSettingSource = new Subject();
|
|
15
|
+
this._deleteGroupSource = new Subject();
|
|
16
|
+
this._loadAppGroupSource = new Subject();
|
|
17
|
+
this._saveAppGroupOrdersSource = new Subject();
|
|
18
|
+
this.saveAppGroupOrders$ = this._saveAppGroupOrdersSource.asObservable();
|
|
19
|
+
this._resetAppGroupSource = new Subject();
|
|
20
|
+
this.resetAppGroup$ = this._resetAppGroupSource.asObservable();
|
|
21
|
+
this._hideAppGroupSource = new Subject();
|
|
22
|
+
this.hideAppGroup$ = this._hideAppGroupSource.asObservable();
|
|
23
|
+
this._viewLoadingSource = new BehaviorSubject(false);
|
|
24
|
+
this.viewLoading$ = this._viewLoadingSource.asObservable().pipe(debounceTime(200));
|
|
25
|
+
this.hideTile$ = this._hideTileSource.asObservable();
|
|
26
|
+
this.updateAppTileSetting$ = this._updateAppTileSettingSource.asObservable();
|
|
27
|
+
this.deleteAppGroup$ = this._deleteGroupSource.asObservable();
|
|
28
|
+
this._loadAppGroupSource
|
|
29
|
+
.asObservable()
|
|
30
|
+
.pipe(takeUntil(this._onDestroy$))
|
|
31
|
+
.subscribe((group) => {
|
|
32
|
+
this.tilesService.loadAppTileGroups(group);
|
|
33
|
+
});
|
|
34
|
+
this.hideTile$
|
|
35
|
+
.pipe(tap(() => this.setLoading()), takeUntil(this._onDestroy$), exhaustMap((appTile) => this.tilesService
|
|
36
|
+
.singlePinTileChanged(appTile.AppTile ? appTile.AppTile.Id : appTile.Id)
|
|
37
|
+
.pipe(finalize(() => this.setLoaded()))), finalize(() => this.setLoaded()))
|
|
38
|
+
.subscribe();
|
|
39
|
+
this.updateAppTileSetting$
|
|
40
|
+
.pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appTile) => this.tilesService.changeAppTileSetting(appTile).pipe(finalize(() => {
|
|
41
|
+
this.setLoaded();
|
|
42
|
+
}))), finalize(() => {
|
|
43
|
+
this.setLoaded();
|
|
44
|
+
}))
|
|
45
|
+
.subscribe();
|
|
46
|
+
this.deleteAppGroup$
|
|
47
|
+
.pipe(tap(() => this.setLoading()), takeUntil(this._onDestroy$), exhaustMap((appGroup) => this.tilesService.deleteAppGroup(appGroup).pipe(finalize(() => {
|
|
48
|
+
this.setLoaded();
|
|
49
|
+
}))))
|
|
50
|
+
.subscribe();
|
|
51
|
+
this.resetAppGroup$
|
|
52
|
+
.pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroup) => this.tilesService.resetAppGroupSetting(appGroup).pipe(finalize(() => {
|
|
53
|
+
this.setLoaded();
|
|
54
|
+
}))), finalize(() => {
|
|
55
|
+
this.setLoaded();
|
|
56
|
+
}))
|
|
57
|
+
.subscribe();
|
|
58
|
+
this.hideAppGroup$
|
|
59
|
+
.pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroup) => this.tilesService.toggleAppGroupSettingVisible(appGroup).pipe(finalize(() => {
|
|
60
|
+
this.setLoaded();
|
|
61
|
+
}))), finalize(() => {
|
|
62
|
+
this.setLoaded();
|
|
63
|
+
}))
|
|
64
|
+
.subscribe();
|
|
65
|
+
this.saveAppGroupOrders$
|
|
66
|
+
.pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroups) => this.tilesService.saveAppGroupOrders(appGroups).pipe(finalize(() => {
|
|
67
|
+
this.setLoaded();
|
|
68
|
+
}))), finalize(() => {
|
|
69
|
+
this.setLoaded();
|
|
70
|
+
}))
|
|
71
|
+
.subscribe();
|
|
72
|
+
}
|
|
73
|
+
get selectedAppGroupId() {
|
|
74
|
+
return localStorage.getItem('selectedTab') ?? '';
|
|
75
|
+
}
|
|
76
|
+
set selectedAppGroupId(groupId) {
|
|
77
|
+
localStorage.setItem('selectedTab', groupId);
|
|
78
|
+
}
|
|
79
|
+
setSelectedTab(group) {
|
|
80
|
+
this.selectedAppGroupId = group.Id;
|
|
81
|
+
}
|
|
82
|
+
loadAppGroup(group) {
|
|
83
|
+
this._loadAppGroupSource.next(group);
|
|
84
|
+
}
|
|
85
|
+
ngOnDestroy() {
|
|
86
|
+
this._onDestroy$.next();
|
|
87
|
+
}
|
|
88
|
+
openRenameForm(appTile) {
|
|
89
|
+
const newGroupDialogRef = this.dialogService.open(ChangeAppTileComponent, {
|
|
90
|
+
data: appTile,
|
|
91
|
+
verticalPadding: true,
|
|
92
|
+
responsivePadding: true
|
|
93
|
+
});
|
|
94
|
+
newGroupDialogRef.afterClosed.subscribe((setting) => {
|
|
95
|
+
if (setting) {
|
|
96
|
+
const newAppTile = { ...appTile };
|
|
97
|
+
newAppTile.Title = newAppTile.TileTitle = setting.title;
|
|
98
|
+
newAppTile.Subtitle = setting.subtitle;
|
|
99
|
+
this._updateAppTileSettingSource.next(newAppTile);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
resetAppGroup(appGroup) {
|
|
104
|
+
this._resetAppGroupSource.next(appGroup);
|
|
105
|
+
}
|
|
106
|
+
toggleAppGroupSettingVisible(appGroup) {
|
|
107
|
+
this._hideAppGroupSource.next(appGroup);
|
|
108
|
+
}
|
|
109
|
+
deleteAppGroup(appGroup) {
|
|
110
|
+
this._deleteGroupSource.next(appGroup);
|
|
111
|
+
}
|
|
112
|
+
hideTile(appTile) {
|
|
113
|
+
this._hideTileSource.next(appTile);
|
|
114
|
+
}
|
|
115
|
+
saveAppGroupOrders(appGroups) {
|
|
116
|
+
this._saveAppGroupOrdersSource.next(appGroups);
|
|
117
|
+
}
|
|
118
|
+
setLoaded() {
|
|
119
|
+
this._viewLoadingSource.next(false);
|
|
120
|
+
}
|
|
121
|
+
setLoading() {
|
|
122
|
+
this._viewLoadingSource.next(true);
|
|
123
|
+
}
|
|
124
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerService, deps: [{ token: i1.DialogService }, { token: i2.TilesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
125
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerService }); }
|
|
126
|
+
}
|
|
127
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerService, decorators: [{
|
|
128
|
+
type: Injectable
|
|
129
|
+
}], ctorParameters: () => [{ type: i1.DialogService }, { type: i2.TilesService }] });
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZXMtdmlld2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGVzLXZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU1wRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7OztBQUdyRixNQUFNLE9BQU8sa0JBQWtCO0lBb0IzQixZQUFvQixhQUE0QixFQUFVLFlBQTBCO1FBQWhFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFkakUsZ0JBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU1RCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3JELGdDQUEyQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ2pFLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3hELHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3pELDhCQUF5QixHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO1FBQ2pFLHdCQUFtQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwRSx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztRQUMxRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxRCx3QkFBbUIsR0FBRyxJQUFJLE9BQU8s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c0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGV4aGF1c3RNYXAsIGZpbmFsaXplLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTWV0YW9iamVjdERhdGFNb2RlbCB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgVGlsZXNTZXJ2aWNlIH0gZnJvbSAnLi90aWxlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hhbmdlQXBwVGlsZUNvbXBvbmVudCB9IGZyb20gJy4vY2hhbmdlLWFwcC10aWxlL2NoYW5nZS1hcHAtdGlsZS5jb21wb25lbnQnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVGlsZXNWaWV3ZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAgIHZpZXdMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGhpZGVUaWxlJDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsPjtcclxuICAgIHVwZGF0ZUFwcFRpbGVTZXR0aW5nJDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsPjtcclxuICAgIGRlbGV0ZUFwcEdyb3VwJDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIHByaXZhdGUgX2hpZGVUaWxlU291cmNlID0gbmV3IFN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIHByaXZhdGUgX3VwZGF0ZUFwcFRpbGVTZXR0aW5nU291cmNlID0gbmV3IFN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIHByaXZhdGUgX2RlbGV0ZUdyb3VwU291cmNlID0gbmV3IFN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIHByaXZhdGUgX2xvYWRBcHBHcm91cFNvdXJjZSA9IG5ldyBTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBwcml2YXRlIF9zYXZlQXBwR3JvdXBPcmRlcnNTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsW10+KCk7XHJcbiAgICBwcml2YXRlIHNhdmVBcHBHcm91cE9yZGVycyQgPSB0aGlzLl9zYXZlQXBwR3JvdXBPcmRlcnNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwcml2YXRlIF9yZXNldEFwcEdyb3VwU291cmNlID0gbmV3IFN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIHByaXZhdGUgcmVzZXRBcHBHcm91cCQgPSB0aGlzLl9yZXNldEFwcEdyb3VwU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfaGlkZUFwcEdyb3VwU291cmNlID0gbmV3IFN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIHByaXZhdGUgaGlkZUFwcEdyb3VwJCA9IHRoaXMuX2hpZGVBcHBHcm91cFNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3ZpZXdMb2FkaW5nU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLCBwcml2YXRlIHRpbGVzU2VydmljZTogVGlsZXNTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy52aWV3TG9hZGluZyQgPSB0aGlzLl92aWV3TG9hZGluZ1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSgyMDApKTtcclxuICAgICAgICB0aGlzLmhpZGVUaWxlJCA9IHRoaXMuX2hpZGVUaWxlU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXBwVGlsZVNldHRpbmckID0gdGhpcy5fdXBkYXRlQXBwVGlsZVNldHRpbmdTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5kZWxldGVBcHBHcm91cCQgPSB0aGlzLl9kZWxldGVHcm91cFNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLl9sb2FkQXBwR3JvdXBTb3VyY2VcclxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZ3JvdXApID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGlsZXNTZXJ2aWNlLmxvYWRBcHBUaWxlR3JvdXBzKGdyb3VwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5oaWRlVGlsZSRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgZXhoYXVzdE1hcCgoYXBwVGlsZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbGVzU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2luZ2xlUGluVGlsZUNoYW5nZWQoYXBwVGlsZS5BcHBUaWxlID8gYXBwVGlsZS5BcHBUaWxlLklkIDogYXBwVGlsZS5JZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5zZXRMb2FkZWQoKSkpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5zZXRMb2FkZWQoKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQXBwVGlsZVNldHRpbmckXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0TG9hZGluZygpKSxcclxuICAgICAgICAgICAgICAgIGV4aGF1c3RNYXAoKGFwcFRpbGUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aWxlc1NlcnZpY2UuY2hhbmdlQXBwVGlsZVNldHRpbmcoYXBwVGlsZSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5kZWxldGVBcHBHcm91cCRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgZXhoYXVzdE1hcCgoYXBwR3JvdXApID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aWxlc1NlcnZpY2UuZGVsZXRlQXBwR3JvdXAoYXBwR3JvdXApLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXNldEFwcEdyb3VwJFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldExvYWRpbmcoKSksXHJcbiAgICAgICAgICAgICAgICBleGhhdXN0TWFwKChhcHBHcm91cCkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbGVzU2VydmljZS5yZXNldEFwcEdyb3VwU2V0dGluZyhhcHBHcm91cCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5oaWRlQXBwR3JvdXAkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0TG9hZGluZygpKSxcclxuICAgICAgICAgICAgICAgIGV4aGF1c3RNYXAoKGFwcEdyb3VwKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlsZXNTZXJ2aWNlLnRvZ2dsZUFwcEdyb3VwU2V0dGluZ1Zpc2libGUoYXBwR3JvdXApLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRlZCgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZUFwcEdyb3VwT3JkZXJzJFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldExvYWRpbmcoKSksXHJcbiAgICAgICAgICAgICAgICBleGhhdXN0TWFwKChhcHBHcm91cHMpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aWxlc1NlcnZpY2Uuc2F2ZUFwcEdyb3VwT3JkZXJzKGFwcEdyb3VwcykucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGdldCBzZWxlY3RlZEFwcEdyb3VwSWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NlbGVjdGVkVGFiJykgPz8gJyc7XHJcbiAgICB9XHJcbiAgICBzZXQgc2VsZWN0ZWRBcHBHcm91cElkKGdyb3VwSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWxlY3RlZFRhYicsIGdyb3VwSWQpO1xyXG4gICAgfVxyXG4gICAgc2V0U2VsZWN0ZWRUYWIoZ3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQXBwR3JvdXBJZCA9IGdyb3VwLklkO1xyXG4gICAgfVxyXG4gICAgbG9hZEFwcEdyb3VwKGdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbG9hZEFwcEdyb3VwU291cmNlLm5leHQoZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblJlbmFtZUZvcm0oYXBwVGlsZTogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5ld0dyb3VwRGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2hhbmdlQXBwVGlsZUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBkYXRhOiBhcHBUaWxlLFxyXG4gICAgICAgICAgICB2ZXJ0aWNhbFBhZGRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpdmVQYWRkaW5nOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG5ld0dyb3VwRGlhbG9nUmVmLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3QXBwVGlsZSA9IHsgLi4uYXBwVGlsZSB9O1xyXG4gICAgICAgICAgICAgICAgbmV3QXBwVGlsZS5UaXRsZSA9IG5ld0FwcFRpbGUuVGlsZVRpdGxlID0gc2V0dGluZy50aXRsZTtcclxuICAgICAgICAgICAgICAgIG5ld0FwcFRpbGUuU3VidGl0bGUgPSBzZXR0aW5nLnN1YnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlQXBwVGlsZVNldHRpbmdTb3VyY2UubmV4dChuZXdBcHBUaWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmVzZXRBcHBHcm91cChhcHBHcm91cDogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0QXBwR3JvdXBTb3VyY2UubmV4dChhcHBHcm91cCk7XHJcbiAgICB9XHJcbiAgICB0b2dnbGVBcHBHcm91cFNldHRpbmdWaXNpYmxlKGFwcEdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faGlkZUFwcEdyb3VwU291cmNlLm5leHQoYXBwR3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUFwcEdyb3VwKGFwcEdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGVsZXRlR3JvdXBTb3VyY2UubmV4dChhcHBHcm91cCk7XHJcbiAgICB9XHJcbiAgICBoaWRlVGlsZShhcHBUaWxlOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faGlkZVRpbGVTb3VyY2UubmV4dChhcHBUaWxlKTtcclxuICAgIH1cclxuICAgIHNhdmVBcHBHcm91cE9yZGVycyhhcHBHcm91cHM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NhdmVBcHBHcm91cE9yZGVyc1NvdXJjZS5uZXh0KGFwcEdyb3Vwcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TG9hZGVkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdMb2FkaW5nU291cmNlLm5leHQoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgc2V0TG9hZGluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl92aWV3TG9hZGluZ1NvdXJjZS5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|