cloud-ide-layout 1.0.7 → 1.0.9
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 +34 -448
- package/fesm2022/{cloud-ide-layout-cloud-ide-layout-D3xzVSNA.mjs → cloud-ide-layout-cloud-ide-layout-DLceZY3Y.mjs} +335 -343
- package/fesm2022/{cloud-ide-layout-cloud-ide-layout-D3xzVSNA.mjs.map → cloud-ide-layout-cloud-ide-layout-DLceZY3Y.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-layout-drawer-theme.component-BSUFE_o2.mjs → cloud-ide-layout-drawer-theme.component-Bn5--C_Q.mjs} +69 -67
- package/fesm2022/{cloud-ide-layout-drawer-theme.component-BSUFE_o2.mjs.map → cloud-ide-layout-drawer-theme.component-Bn5--C_Q.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-layout-home-wrapper.component-Dr4MO4MB.mjs → cloud-ide-layout-home-wrapper.component-Bo-4LNLx.mjs} +56 -51
- package/fesm2022/{cloud-ide-layout-home-wrapper.component-Dr4MO4MB.mjs.map → cloud-ide-layout-home-wrapper.component-Bo-4LNLx.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-BWx03JYS.mjs → cloud-ide-layout-sidedrawer-notes.component-BmadMzdl.mjs} +28 -32
- package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-BWx03JYS.mjs.map → cloud-ide-layout-sidedrawer-notes.component-BmadMzdl.mjs.map} +1 -1
- package/fesm2022/cloud-ide-layout.mjs +1 -1
- package/index.d.ts +579 -3
- package/package.json +4 -6
- package/esm2022/cloud-ide-layout.mjs +0 -5
- package/esm2022/lib/cloud-ide-layout.component.mjs +0 -16
- package/esm2022/lib/cloud-ide-layout.routes.mjs +0 -28
- package/esm2022/lib/cloud-ide-layout.service.mjs +0 -14
- package/esm2022/lib/layout/console/console-wrapper/console-wrapper.component.mjs +0 -11
- package/esm2022/lib/layout/console/console.service.mjs +0 -28
- package/esm2022/lib/layout/footer/footer-wrapper/footer-wrapper.component.mjs +0 -20
- package/esm2022/lib/layout/footer/footer.service.mjs +0 -28
- package/esm2022/lib/layout/header/header-wrapper/header-wrapper.component.mjs +0 -84
- package/esm2022/lib/layout/header/header.service.mjs +0 -28
- package/esm2022/lib/layout/home/home-wrapper/home-wrapper.component.mjs +0 -198
- package/esm2022/lib/layout/layout/layout-wrapper/layout-wrapper.component.mjs +0 -28
- package/esm2022/lib/layout/request/request-wrapper/request-wrapper.component.mjs +0 -60
- package/esm2022/lib/layout/request/request.service.mjs +0 -235
- package/esm2022/lib/layout/request/tab-content/tab-content.component.mjs +0 -84
- package/esm2022/lib/layout/shared/shared-wrapper/shared-wrapper.component.mjs +0 -49
- package/esm2022/lib/layout/shared/shared.service.mjs +0 -508
- package/esm2022/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.mjs +0 -488
- package/esm2022/lib/layout/sidebar/sidebar.service.mjs +0 -35
- package/esm2022/lib/layout/sidedrawer/cide-lyt-drawer-base.class.mjs +0 -40
- package/esm2022/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.mjs +0 -296
- package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.mjs +0 -175
- package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.mjs +0 -51
- package/esm2022/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.mjs +0 -257
- package/esm2022/lib/layout/sidedrawer/sidedrawer.service.mjs +0 -70
- package/esm2022/lib/services/app-state/app-state-helper.service.mjs +0 -222
- package/esm2022/lib/services/app-state/app-state.service.mjs +0 -256
- package/esm2022/lib/services/app-state/index.mjs +0 -3
- package/esm2022/lib/services/cache-manager/cache-manager.service.mjs +0 -112
- package/esm2022/lib/services/file-manager/file-manager.service.mjs +0 -21
- package/esm2022/lib/services/tab-state.service.mjs +0 -128
- package/esm2022/lib/services/theme/theme.service.mjs +0 -151
- package/esm2022/lib/services/user-status/user-status.service.mjs +0 -135
- package/esm2022/lib/utils/custom-route-reuse-strategy.mjs +0 -61
- package/esm2022/lib/utils/index.mjs +0 -2
- package/esm2022/public-api.mjs +0 -18
- package/lib/cloud-ide-layout.component.d.ts +0 -5
- package/lib/cloud-ide-layout.routes.d.ts +0 -3
- package/lib/cloud-ide-layout.service.d.ts +0 -6
- package/lib/layout/console/console-wrapper/console-wrapper.component.d.ts +0 -5
- package/lib/layout/console/console.service.d.ts +0 -9
- package/lib/layout/footer/footer-wrapper/footer-wrapper.component.d.ts +0 -9
- package/lib/layout/footer/footer.service.d.ts +0 -9
- package/lib/layout/header/header-wrapper/header-wrapper.component.d.ts +0 -25
- package/lib/layout/header/header.service.d.ts +0 -9
- package/lib/layout/home/home-wrapper/home-wrapper.component.d.ts +0 -94
- package/lib/layout/layout/layout-wrapper/layout-wrapper.component.d.ts +0 -5
- package/lib/layout/request/request-wrapper/request-wrapper.component.d.ts +0 -14
- package/lib/layout/request/request.service.d.ts +0 -60
- package/lib/layout/request/tab-content/tab-content.component.d.ts +0 -19
- package/lib/layout/shared/shared-wrapper/shared-wrapper.component.d.ts +0 -17
- package/lib/layout/shared/shared.service.d.ts +0 -114
- package/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.d.ts +0 -140
- package/lib/layout/sidebar/sidebar.service.d.ts +0 -12
- package/lib/layout/sidedrawer/cide-lyt-drawer-base.class.d.ts +0 -16
- package/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.d.ts +0 -71
- package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.d.ts +0 -48
- package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.d.ts +0 -13
- package/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.d.ts +0 -30
- package/lib/layout/sidedrawer/sidedrawer.service.d.ts +0 -30
- package/lib/services/app-state/app-state-helper.service.d.ts +0 -150
- package/lib/services/app-state/app-state.service.d.ts +0 -85
- package/lib/services/app-state/index.d.ts +0 -3
- package/lib/services/cache-manager/cache-manager.service.d.ts +0 -64
- package/lib/services/file-manager/file-manager.service.d.ts +0 -9
- package/lib/services/tab-state.service.d.ts +0 -79
- package/lib/services/theme/theme.service.d.ts +0 -71
- package/lib/services/user-status/user-status.service.d.ts +0 -57
- package/lib/utils/custom-route-reuse-strategy.d.ts +0 -15
- package/lib/utils/index.d.ts +0 -1
- package/public-api.d.ts +0 -12
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import { Injectable, inject, signal, computed } from '@angular/core';
|
|
2
|
-
import { Router, RouteReuseStrategy } from '@angular/router';
|
|
3
|
-
import { CustomRouteReuseStrategy } from '../../utils/custom-route-reuse-strategy';
|
|
4
|
-
import { TabStateService } from '../../services/tab-state.service';
|
|
5
|
-
import { CideLytSidedrawerService } from '../sidedrawer/sidedrawer.service';
|
|
6
|
-
import { CideLytSharedService } from '../shared/shared.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class CideLytRequestService {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.requestVisible = false;
|
|
11
|
-
// Modern Angular v20+ pattern: Use Signals instead of BehaviorSubject
|
|
12
|
-
this.tabsSignal = signal([]);
|
|
13
|
-
this.activeTabIdSignal = signal(null);
|
|
14
|
-
// Computed signals for derived state and public readonly access
|
|
15
|
-
this.tabs = computed(() => this.tabsSignal());
|
|
16
|
-
this.activeTabId = computed(() => this.activeTabIdSignal());
|
|
17
|
-
this.activeTab = computed(() => this.tabsSignal().find(tab => tab.active));
|
|
18
|
-
// Use inject() for all dependencies
|
|
19
|
-
this.router = inject(Router);
|
|
20
|
-
this.routeReuseStrategy = inject(RouteReuseStrategy);
|
|
21
|
-
this.tabStateService = inject(TabStateService);
|
|
22
|
-
this.sidedrawerService = inject(CideLytSidedrawerService);
|
|
23
|
-
this.sharedService = inject(CideLytSharedService);
|
|
24
|
-
// Initialize router
|
|
25
|
-
this.router = inject(Router);
|
|
26
|
-
this.router.routeReuseStrategy = new CustomRouteReuseStrategy();
|
|
27
|
-
// Register tab management callback with shared service to avoid circular dependency
|
|
28
|
-
this.sharedService.registerTabManagement(this.handleRouteBasedTabManagement.bind(this));
|
|
29
|
-
// Register request visibility callback
|
|
30
|
-
this.sharedService.registerRequestVisibility(this.handleRequestVisibility.bind(this));
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Handle request visibility changes from shared service
|
|
34
|
-
*/
|
|
35
|
-
handleRequestVisibility(show) {
|
|
36
|
-
if (show) {
|
|
37
|
-
this.showRequest();
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
this.hideRequest();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Handle sidebar sync when tab becomes active
|
|
45
|
-
*/
|
|
46
|
-
handleSidebarSync(tabInfo) {
|
|
47
|
-
// The sidebar sync will be handled automatically by the shared service
|
|
48
|
-
// when page data is loaded, so we don't need additional logic here
|
|
49
|
-
console.log('🔗 REQUEST SERVICE: Tab activated, sidebar sync handled by shared service:', tabInfo.title);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Handle route-based tab management - called by shared service
|
|
53
|
-
* This method checks for existing tabs and creates/activates as needed
|
|
54
|
-
*/
|
|
55
|
-
handleRouteBasedTabManagement(currentRoutePath, queryParams, layout, pageData, pageCode) {
|
|
56
|
-
console.log('handleRouteBasedTabManagement', currentRoutePath, queryParams, layout, pageData, pageCode);
|
|
57
|
-
const currentTabs = this.tabsSignal();
|
|
58
|
-
const tabAlreadyExists = currentTabs.find((t) => {
|
|
59
|
-
const tRoutePath = t.route.startsWith('/') ? t.route : '/' + t.route;
|
|
60
|
-
const tParamsMatch = JSON.stringify(t.params || {}) === JSON.stringify(queryParams || {});
|
|
61
|
-
return tRoutePath === currentRoutePath && tParamsMatch;
|
|
62
|
-
});
|
|
63
|
-
console.log('tabAlreadyExists', tabAlreadyExists);
|
|
64
|
-
if (!tabAlreadyExists) {
|
|
65
|
-
const title = pageData.data?.page?.sypg_title || pageCode.toString() || 'Untitled Tab';
|
|
66
|
-
console.log(`🆕 Adding new tab: ${title}`);
|
|
67
|
-
this.addTab(title, currentRoutePath, queryParams, layout);
|
|
68
|
-
}
|
|
69
|
-
else if (tabAlreadyExists && !tabAlreadyExists.active) {
|
|
70
|
-
console.log(`🔄 Activating existing tab: ${tabAlreadyExists.title}`);
|
|
71
|
-
this.activateTab(tabAlreadyExists.id);
|
|
72
|
-
}
|
|
73
|
-
else if (tabAlreadyExists && tabAlreadyExists.active) {
|
|
74
|
-
console.log(`🔄 Activating existing tab: ${tabAlreadyExists.title}`);
|
|
75
|
-
this.activateTab(tabAlreadyExists.id);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
addTab(title, route, params, layout) {
|
|
79
|
-
console.log('addTab', title, route, params, layout);
|
|
80
|
-
const id = this.generateId();
|
|
81
|
-
const currentTabs = this.tabsSignal();
|
|
82
|
-
console.log('currentTabs', currentTabs, route);
|
|
83
|
-
// Check if a tab with the same route and params already exists
|
|
84
|
-
const existingTab = currentTabs.find((tab) => {
|
|
85
|
-
const paramsMatch = JSON.stringify(tab.params || {}) === JSON.stringify(params || {});
|
|
86
|
-
return tab.route === route && paramsMatch;
|
|
87
|
-
});
|
|
88
|
-
console.log('existingTab', existingTab);
|
|
89
|
-
if (existingTab) {
|
|
90
|
-
this.activateTab(existingTab.id);
|
|
91
|
-
return existingTab.id;
|
|
92
|
-
}
|
|
93
|
-
// Create new tab
|
|
94
|
-
const newTab = {
|
|
95
|
-
id,
|
|
96
|
-
title,
|
|
97
|
-
route,
|
|
98
|
-
params,
|
|
99
|
-
active: true,
|
|
100
|
-
layout,
|
|
101
|
-
sytm_page_id_sypg: '',
|
|
102
|
-
themeId: ''
|
|
103
|
-
};
|
|
104
|
-
// Deactivate all other tabs
|
|
105
|
-
currentTabs.forEach((tab) => tab.active = false);
|
|
106
|
-
console.log('currentTabs after deactivate', currentTabs, 'activateTab', id);
|
|
107
|
-
// Add new tab
|
|
108
|
-
this.tabsSignal.set([...currentTabs, newTab]);
|
|
109
|
-
this.activeTabIdSignal.set(id);
|
|
110
|
-
// Sync with TabStateService
|
|
111
|
-
this.tabStateService.addTab(title, id);
|
|
112
|
-
// Request visibility is now controlled by layout configuration in setPageData
|
|
113
|
-
// No need to automatically show request wrapper here
|
|
114
|
-
// Navigate to the new route
|
|
115
|
-
if (params) {
|
|
116
|
-
this.router.navigate([route], { queryParams: params });
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
this.router.navigate([route]);
|
|
120
|
-
}
|
|
121
|
-
return id;
|
|
122
|
-
}
|
|
123
|
-
activateTab(tabId) {
|
|
124
|
-
console.log('🔍 REQUEST SERVICE: Activating tab:', tabId);
|
|
125
|
-
const tabs = this.tabsSignal();
|
|
126
|
-
const tabToActivate = tabs.find(tab => tab.id === tabId);
|
|
127
|
-
if (!tabToActivate) {
|
|
128
|
-
console.warn('⚠️ Tab not found:', tabId);
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
// Update tabs: deactivate all, then activate the target
|
|
132
|
-
const updatedTabs = tabs.map(tab => ({
|
|
133
|
-
...tab,
|
|
134
|
-
active: tab.id === tabId
|
|
135
|
-
}));
|
|
136
|
-
this.tabsSignal.set(updatedTabs);
|
|
137
|
-
this.activeTabIdSignal.set(tabId);
|
|
138
|
-
console.log('✅ REQUEST SERVICE: Tab activated:', tabToActivate.title);
|
|
139
|
-
// Navigate to the tab's route
|
|
140
|
-
this.router.navigate([tabToActivate.route], {
|
|
141
|
-
queryParams: tabToActivate.params || {},
|
|
142
|
-
replaceUrl: false
|
|
143
|
-
});
|
|
144
|
-
// Trigger sidebar sync for the activated tab by calling shared service
|
|
145
|
-
// The shared service will handle the sidebar sync when the route loads
|
|
146
|
-
console.log('🔗 REQUEST SERVICE: Sidebar sync will be handled by route change');
|
|
147
|
-
}
|
|
148
|
-
closeTab(id) {
|
|
149
|
-
const currentTabs = this.tabsSignal();
|
|
150
|
-
const tabIndex = currentTabs.findIndex((tab) => tab.id === id);
|
|
151
|
-
if (tabIndex === -1)
|
|
152
|
-
return;
|
|
153
|
-
const tabToClose = currentTabs[tabIndex];
|
|
154
|
-
const wasActive = tabToClose.active;
|
|
155
|
-
// Sync with TabStateService by removing the tab state
|
|
156
|
-
this.tabStateService.removeTab(id);
|
|
157
|
-
// Clear stored route from strategy
|
|
158
|
-
if (this.routeReuseStrategy instanceof CustomRouteReuseStrategy) {
|
|
159
|
-
let pathKey = tabToClose.route.startsWith('/') ? tabToClose.route.substring(1) : tabToClose.route;
|
|
160
|
-
if (tabToClose.params && Object.keys(tabToClose.params).length > 0) {
|
|
161
|
-
const queryParamsString = Object.keys(tabToClose.params)
|
|
162
|
-
.sort()
|
|
163
|
-
.map(key => `${key}=${tabToClose.params[key]}`)
|
|
164
|
-
.join('&');
|
|
165
|
-
pathKey += '?' + queryParamsString;
|
|
166
|
-
}
|
|
167
|
-
this.routeReuseStrategy.clearStoredRoute(pathKey);
|
|
168
|
-
}
|
|
169
|
-
// Remove the tab from this service's list
|
|
170
|
-
const newTabs = currentTabs.filter((tab) => tab.id !== id);
|
|
171
|
-
// If we're closing the active tab, activate the next available tab
|
|
172
|
-
if (wasActive && newTabs.length > 0) {
|
|
173
|
-
const newActiveIndex = Math.max(0, Math.min(tabIndex, newTabs.length - 1));
|
|
174
|
-
const newActiveTab = newTabs[newActiveIndex];
|
|
175
|
-
// Update sidedrawer for the new active tab
|
|
176
|
-
this.sidedrawerService.updateDrawerItems(newActiveTab.layout);
|
|
177
|
-
newTabs[newActiveIndex].active = true;
|
|
178
|
-
this.activeTabIdSignal.set(newActiveTab.id);
|
|
179
|
-
this.tabStateService.setActiveTab(newActiveTab.id);
|
|
180
|
-
// Navigate to the new active tab's route
|
|
181
|
-
if (newActiveTab.params) {
|
|
182
|
-
this.router.navigate([newActiveTab.route], { queryParams: newActiveTab.params });
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
this.router.navigate([newActiveTab.route]);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
else if (newTabs.length === 0) {
|
|
189
|
-
this.activeTabIdSignal.set(null);
|
|
190
|
-
this.tabStateService.setActiveTab(null);
|
|
191
|
-
// Clear sidedrawer as no tabs are open
|
|
192
|
-
this.sidedrawerService.updateDrawerItems(undefined);
|
|
193
|
-
}
|
|
194
|
-
this.tabsSignal.set(newTabs);
|
|
195
|
-
// Request wrapper visibility is now controlled by layout configuration
|
|
196
|
-
// The wrapper will be hidden/shown based on sytm_layout_request.status in setPageData
|
|
197
|
-
}
|
|
198
|
-
// Hide Request
|
|
199
|
-
hideRequest() {
|
|
200
|
-
console.log('🚫 REQUEST SERVICE - Hiding request wrapper');
|
|
201
|
-
this.requestVisible = false;
|
|
202
|
-
document.querySelector(`#cide-lyt-request-wrapper`)?.classList.add('cide-lyt-request-wrapper-hide');
|
|
203
|
-
document.querySelector(`body`)?.classList.remove('cide-lyt-request-exist');
|
|
204
|
-
}
|
|
205
|
-
// Show Request
|
|
206
|
-
showRequest() {
|
|
207
|
-
console.log('✅ REQUEST SERVICE - Showing request wrapper');
|
|
208
|
-
this.requestVisible = true;
|
|
209
|
-
document.querySelector(`#cide-lyt-request-wrapper`)?.classList.remove('cide-lyt-request-wrapper-hide');
|
|
210
|
-
document.querySelector(`body`)?.classList.add('cide-lyt-request-exist');
|
|
211
|
-
}
|
|
212
|
-
generateId() {
|
|
213
|
-
return 'tab-' + Math.random().toString(36).substr(2, 9);
|
|
214
|
-
}
|
|
215
|
-
updateTabScrollPosition(tabId, scrollTop, scrollLeft) {
|
|
216
|
-
const currentTabs = this.tabsSignal();
|
|
217
|
-
const tabIndex = currentTabs.findIndex((t) => t.id === tabId);
|
|
218
|
-
if (tabIndex !== -1) {
|
|
219
|
-
const tabToUpdate = currentTabs[tabIndex];
|
|
220
|
-
tabToUpdate.scrollTop = scrollTop;
|
|
221
|
-
tabToUpdate.scrollLeft = scrollLeft;
|
|
222
|
-
// Create a new array reference to trigger change detection
|
|
223
|
-
this.tabsSignal.set([...currentTabs]);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytRequestService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
227
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytRequestService, providedIn: 'root' }); }
|
|
228
|
-
}
|
|
229
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytRequestService, decorators: [{
|
|
230
|
-
type: Injectable,
|
|
231
|
-
args: [{
|
|
232
|
-
providedIn: 'root'
|
|
233
|
-
}]
|
|
234
|
-
}], ctorParameters: () => [] });
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9yZXF1ZXN0L3JlcXVlc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQTBCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQTZCaEUsTUFBTSxPQUFPLHFCQUFxQjtJQW9CaEM7UUFuQk8sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDdkMsc0VBQXNFO1FBQy9ELGVBQVUsR0FBOEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELHNCQUFpQixHQUFrQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkUsZ0VBQWdFO1FBQ3pELFNBQUksR0FBc0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQTBCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLGNBQVMsR0FBZ0MsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUM1RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMs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LEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3ZHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBYSxFQUFFLFNBQWlCLEVBQUUsVUFBa0I7UUFDMUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDdkUsSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwQixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDbEMsV0FBVyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDcEMsMkRBQTJEO1lBQzNELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDOzhHQWhRVSxxQkFBcUI7a0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0LCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsLCBTaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlUmV1c2VTdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDdXN0b21Sb3V0ZVJldXNlU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi91dGlscy9jdXN0b20tcm91dGUtcmV1c2Utc3RyYXRlZ3knO1xuaW1wb3J0IHsgVGFiU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFiLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2lkZUx5dFNpZGVkcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2lkZWRyYXdlci9zaWRlZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2lkZUx5dFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVN5dG1MYXlvdXQgfSBmcm9tICdjbG91ZC1pZGUtbG1zLW1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJJbmZvIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgcm91dGU6IHN0cmluZztcbiAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgc3l0bV9wYWdlX2lkX3N5cGc6IHN0cmluZztcbiAgdGhlbWVJZDogc3RyaW5nO1xuICBsb2FkZWRDb21wb25lbnQ/OiB1bmtub3duO1xuICBzY3JvbGxUb3A/OiBudW1iZXI7XG4gIHNjcm9sbExlZnQ/OiBudW1iZXI7XG4gIGxheW91dD86IElTeXRtTGF5b3V0O1xufVxuXG4vLyBJbnRlcmZhY2UgZm9yIHBhZ2UgZGF0YSBwYXNzZWQgZnJvbSBzaGFyZWQgc2VydmljZVxuaW50ZXJmYWNlIFBhZ2VEYXRhUmVzcG9uc2Uge1xuICBkYXRhPzoge1xuICAgIHBhZ2U/OiB7XG4gICAgICBzeXBnX3RpdGxlPzogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENpZGVMeXRSZXF1ZXN0U2VydmljZSB7XG4gIHB1YmxpYyByZXF1ZXN0VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBNb2Rlcm4gQW5ndWxhciB2MjArIHBhdHRlcm46IFVzZSBTaWduYWxzIGluc3RlYWQgb2YgQmVoYXZpb3JTdWJqZWN0XG4gIHB1YmxpYyB0YWJzU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxUYWJJbmZvW10+ID0gc2lnbmFsKFtdKTtcbiAgcHVibGljIGFjdGl2ZVRhYklkU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgXG4gIC8vIENvbXB1dGVkIHNpZ25hbHMgZm9yIGRlcml2ZWQgc3RhdGUgYW5kIHB1YmxpYyByZWFkb25seSBhY2Nlc3NcbiAgcHVibGljIHRhYnM6IFNpZ25hbDxUYWJJbmZvW10+ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50YWJzU2lnbmFsKCkpO1xuICBwdWJsaWMgYWN0aXZlVGFiSWQ6IFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aXZlVGFiSWRTaWduYWwoKSk7XG4gIHB1YmxpYyBhY3RpdmVUYWI6IFNpZ25hbDxUYWJJbmZvIHwgdW5kZWZpbmVkPiA9IGNvbXB1dGVkKCgpID0+IFxuICAgIHRoaXMudGFic1NpZ25hbCgpLmZpbmQodGFiID0+IHRhYi5hY3RpdmUpXG4gICk7XG5cbiAgLy8gVXNlIGluamVjdCgpIGZvciBhbGwgZGVwZW5kZW5jaWVzXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcm91dGVSZXVzZVN0cmF0ZWd5ID0gaW5qZWN0KFJvdXRlUmV1c2VTdHJhdGVneSk7XG4gIHByaXZhdGUgdGFiU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFRhYlN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgc2lkZWRyYXdlclNlcnZpY2UgPSBpbmplY3QoQ2lkZUx5dFNpZGVkcmF3ZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlID0gaW5qZWN0KENpZGVMeXRTaGFyZWRTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBJbml0aWFsaXplIHJvdXRlclxuICAgIHRoaXMucm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5ID0gbmV3IEN1c3RvbVJvdXRlUmV1c2VTdHJhdGVneSgpO1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIHRhYiBtYW5hZ2VtZW50IGNhbGxiYWNrIHdpdGggc2hhcmVkIHNlcnZpY2UgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZWdpc3RlclRhYk1hbmFnZW1lbnQodGhpcy5oYW5kbGVSb3V0ZUJhc2VkVGFiTWFuYWdlbWVudC5iaW5kKHRoaXMpKTtcbiAgICBcbiAgICAvLyBSZWdpc3RlciByZXF1ZXN0IHZpc2liaWxpdHkgY2FsbGJhY2tcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVnaXN0ZXJSZXF1ZXN0VmlzaWJpbGl0eSh0aGlzLmhhbmRsZVJlcXVlc3RWaXNpYmlsaXR5LmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSByZXF1ZXN0IHZpc2liaWxpdHkgY2hhbmdlcyBmcm9tIHNoYXJlZCBzZXJ2aWNlXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlcXVlc3RWaXNpYmlsaXR5KHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoc2hvdykge1xuICAgICAgdGhpcy5zaG93UmVxdWVzdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGVSZXF1ZXN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzaWRlYmFyIHN5bmMgd2hlbiB0YWIgYmVjb21lcyBhY3RpdmVcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlU2lkZWJhclN5bmModGFiSW5mbzogVGFiSW5mbyk6IHZvaWQge1xuICAgIC8vIFRoZSBzaWRlYmFyIHN5bmMgd2lsbCBiZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHNoYXJlZCBzZXJ2aWNlXG4gICAgLy8gd2hlbiBwYWdlIGRhdGEgaXMgbG9hZGVkLCBzbyB3ZSBkb24ndCBuZWVkIGFkZGl0aW9uYWwgbG9naWMgaGVyZVxuICAgIGNvbnNvbGUubG9nKCfwn5SXIFJFUVVFU1QgU0VSVklDRTogVGFiIGFjdGl2YXRlZCwgc2lkZWJhciBzeW5jIGhhbmRsZWQgYnkgc2hhcmVkIHNlcnZpY2U6JywgdGFiSW5mby50aXRsZSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHJvdXRlLWJhc2VkIHRhYiBtYW5hZ2VtZW50IC0gY2FsbGVkIGJ5IHNoYXJlZCBzZXJ2aWNlXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3IgZXhpc3RpbmcgdGFicyBhbmQgY3JlYXRlcy9hY3RpdmF0ZXMgYXMgbmVlZGVkXG4gICAqL1xuICBoYW5kbGVSb3V0ZUJhc2VkVGFiTWFuYWdlbWVudChcbiAgICBjdXJyZW50Um91dGVQYXRoOiBzdHJpbmcsXG4gICAgcXVlcnlQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGxheW91dDogSVN5dG1MYXlvdXQsXG4gICAgcGFnZURhdGE6IFBhZ2VEYXRhUmVzcG9uc2UsXG4gICAgcGFnZUNvZGU6IHN0cmluZ1xuICApIHtcbiAgICBjb25zb2xlLmxvZygnaGFuZGxlUm91dGVCYXNlZFRhYk1hbmFnZW1lbnQnLCBjdXJyZW50Um91dGVQYXRoLCBxdWVyeVBhcmFtcywgbGF5b3V0LCBwYWdlRGF0YSwgcGFnZUNvZGUpO1xuICAgIGNvbnN0IGN1cnJlbnRUYWJzID0gdGhpcy50YWJzU2lnbmFsKCk7XG4gICAgY29uc3QgdGFiQWxyZWFkeUV4aXN0cyA9IGN1cnJlbnRUYWJzLmZpbmQoKHQ6IFRhYkluZm8pID0+IHtcbiAgICAgIGNvbnN0IHRSb3V0ZVBhdGggPSB0LnJvdXRlLnN0YXJ0c1dpdGgoJy8nKSA/IHQucm91dGUgOiAnLycgKyB0LnJvdXRlO1xuICAgICAgY29uc3QgdFBhcmFtc01hdGNoID0gSlNPTi5zdHJpbmdpZnkodC5wYXJhbXMgfHwge30pID09PSBKU09OLnN0cmluZ2lmeShxdWVyeVBhcmFtcyB8fCB7fSk7XG4gICAgICByZXR1cm4gdFJvdXRlUGF0aCA9PT0gY3VycmVudFJvdXRlUGF0aCAmJiB0UGFyYW1zTWF0Y2g7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coJ3RhYkFscmVhZHlFeGlzdHMnLCB0YWJBbHJlYWR5RXhpc3RzKTtcbiAgICBpZiAoIXRhYkFscmVhZHlFeGlzdHMpIHtcbiAgICAgIGNvbnN0IHRpdGxlID0gcGFnZURhdGEuZGF0YT8ucGFnZT8uc3lwZ190aXRsZSB8fCBwYWdlQ29kZS50b1N0cmluZygpIHx8ICdVbnRpdGxlZCBUYWInO1xuICAgICAgY29uc29sZS5sb2coYPCfhpUgQWRkaW5nIG5ldyB0YWI6ICR7dGl0bGV9YCk7XG4gICAgICB0aGlzLmFkZFRhYih0aXRsZSwgY3VycmVudFJvdXRlUGF0aCwgcXVlcnlQYXJhbXMsIGxheW91dCk7XG4gICAgfSBlbHNlIGlmICh0YWJBbHJlYWR5RXhpc3RzICYmICF0YWJBbHJlYWR5RXhpc3RzLmFjdGl2ZSkge1xuICAgICAgY29uc29sZS5sb2coYPCflIQgQWN0aXZhdGluZyBleGlzdGluZyB0YWI6ICR7dGFiQWxyZWFkeUV4aXN0cy50aXRsZX1gKTtcbiAgICAgIHRoaXMuYWN0aXZhdGVUYWIodGFiQWxyZWFkeUV4aXN0cy5pZCk7XG4gICAgfWVsc2UgaWYgKHRhYkFscmVhZHlFeGlzdHMgJiYgdGFiQWxyZWFkeUV4aXN0cy5hY3RpdmUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGDwn5SEIEFjdGl2YXRpbmcgZXhpc3RpbmcgdGFiOiAke3RhYkFscmVhZHlFeGlzdHMudGl0bGV9YCk7XG4gICAgICB0aGlzLmFjdGl2YXRlVGFiKHRhYkFscmVhZHlFeGlzdHMuaWQpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFRhYih0aXRsZTogc3RyaW5nLCByb3V0ZTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbGF5b3V0PzogSVN5dG1MYXlvdXQpOiBzdHJpbmcge1xuICAgIGNvbnNvbGUubG9nKCdhZGRUYWInLCB0aXRsZSwgcm91dGUsIHBhcmFtcywgbGF5b3V0KTtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2VuZXJhdGVJZCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUYWJzID0gdGhpcy50YWJzU2lnbmFsKCk7XG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRUYWJzJywgY3VycmVudFRhYnMsIHJvdXRlKTtcbiAgICAvLyBDaGVjayBpZiBhIHRhYiB3aXRoIHRoZSBzYW1lIHJvdXRlIGFuZCBwYXJhbXMgYWxyZWFkeSBleGlzdHNcbiAgICBjb25zdCBleGlzdGluZ1RhYiA9IGN1cnJlbnRUYWJzLmZpbmQoKHRhYjogVGFiSW5mbykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zTWF0Y2ggPSBKU09OLnN0cmluZ2lmeSh0YWIucGFyYW1zIHx8IHt9KSA9PT0gSlNPTi5zdHJpbmdpZnkocGFyYW1zIHx8IHt9KTtcbiAgICAgIHJldHVybiB0YWIucm91dGUgPT09IHJvdXRlICYmIHBhcmFtc01hdGNoO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKCdleGlzdGluZ1RhYicsIGV4aXN0aW5nVGFiKTtcbiAgICBpZiAoZXhpc3RpbmdUYWIpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVUYWIoZXhpc3RpbmdUYWIuaWQpO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nVGFiLmlkO1xuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgbmV3IHRhYlxuICAgIGNvbnN0IG5ld1RhYjogVGFiSW5mbyA9IHtcbiAgICAgIGlkLFxuICAgICAgdGl0bGUsXG4gICAgICByb3V0ZSxcbiAgICAgIHBhcmFtcyxcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIGxheW91dCxcbiAgICAgIHN5dG1fcGFnZV9pZF9zeXBnOiAnJyxcbiAgICAgIHRoZW1lSWQ6ICcnXG4gICAgfTtcblxuICAgIC8vIERlYWN0aXZhdGUgYWxsIG90aGVyIHRhYnNcbiAgICBjdXJyZW50VGFicy5mb3JFYWNoKCh0YWI6IFRhYkluZm8pID0+IHRhYi5hY3RpdmUgPSBmYWxzZSk7XG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRUYWJzIGFmdGVyIGRlYWN0aXZhdGUnLCBjdXJyZW50VGFicywgJ2FjdGl2YXRlVGFiJywgaWQpO1xuICAgIC8vIEFkZCBuZXcgdGFiXG4gICAgdGhpcy50YWJzU2lnbmFsLnNldChbLi4uY3VycmVudFRhYnMsIG5ld1RhYl0pO1xuICAgIHRoaXMuYWN0aXZlVGFiSWRTaWduYWwuc2V0KGlkKTtcblxuICAgIC8vIFN5bmMgd2l0aCBUYWJTdGF0ZVNlcnZpY2VcbiAgICB0aGlzLnRhYlN0YXRlU2VydmljZS5hZGRUYWIodGl0bGUsIGlkKTtcbiAgICBcbiAgICAvLyBSZXF1ZXN0IHZpc2liaWxpdHkgaXMgbm93IGNvbnRyb2xsZWQgYnkgbGF5b3V0IGNvbmZpZ3VyYXRpb24gaW4gc2V0UGFnZURhdGFcbiAgICAvLyBObyBuZWVkIHRvIGF1dG9tYXRpY2FsbHkgc2hvdyByZXF1ZXN0IHdyYXBwZXIgaGVyZVxuICAgIFxuICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBuZXcgcm91dGVcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGVdLCB7IHF1ZXJ5UGFyYW1zOiBwYXJhbXMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIGFjdGl2YXRlVGFiKHRhYklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygn8J+UjSBSRVFVRVNUIFNFUlZJQ0U6IEFjdGl2YXRpbmcgdGFiOicsIHRhYklkKTtcbiAgICBjb25zdCB0YWJzID0gdGhpcy50YWJzU2lnbmFsKCk7XG4gICAgY29uc3QgdGFiVG9BY3RpdmF0ZSA9IHRhYnMuZmluZCh0YWIgPT4gdGFiLmlkID09PSB0YWJJZCk7XG4gICAgXG4gICAgaWYgKCF0YWJUb0FjdGl2YXRlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyBUYWIgbm90IGZvdW5kOicsIHRhYklkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGFiczogZGVhY3RpdmF0ZSBhbGwsIHRoZW4gYWN0aXZhdGUgdGhlIHRhcmdldFxuICAgIGNvbnN0IHVwZGF0ZWRUYWJzID0gdGFicy5tYXAodGFiID0+ICh7XG4gICAgICAuLi50YWIsXG4gICAgICBhY3RpdmU6IHRhYi5pZCA9PT0gdGFiSWRcbiAgICB9KSk7XG5cbiAgICB0aGlzLnRhYnNTaWduYWwuc2V0KHVwZGF0ZWRUYWJzKTtcbiAgICB0aGlzLmFjdGl2ZVRhYklkU2lnbmFsLnNldCh0YWJJZCk7XG4gICAgXG4gICAgY29uc29sZS5sb2coJ+KchSBSRVFVRVNUIFNFUlZJQ0U6IFRhYiBhY3RpdmF0ZWQ6JywgdGFiVG9BY3RpdmF0ZS50aXRsZSk7XG5cbiAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgdGFiJ3Mgcm91dGVcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGFiVG9BY3RpdmF0ZS5yb3V0ZV0sIHsgXG4gICAgICBxdWVyeVBhcmFtczogdGFiVG9BY3RpdmF0ZS5wYXJhbXMgfHwge30sXG4gICAgICByZXBsYWNlVXJsOiBmYWxzZSBcbiAgICB9KTtcbiAgICBcbiAgICAvLyBUcmlnZ2VyIHNpZGViYXIgc3luYyBmb3IgdGhlIGFjdGl2YXRlZCB0YWIgYnkgY2FsbGluZyBzaGFyZWQgc2VydmljZVxuICAgIC8vIFRoZSBzaGFyZWQgc2VydmljZSB3aWxsIGhhbmRsZSB0aGUgc2lkZWJhciBzeW5jIHdoZW4gdGhlIHJvdXRlIGxvYWRzXG4gICAgY29uc29sZS5sb2coJ/CflJcgUkVRVUVTVCBTRVJWSUNFOiBTaWRlYmFyIHN5bmMgd2lsbCBiZSBoYW5kbGVkIGJ5IHJvdXRlIGNoYW5nZScpO1xuICB9XG5cbiAgY2xvc2VUYWIoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUYWJzID0gdGhpcy50YWJzU2lnbmFsKCk7XG4gICAgY29uc3QgdGFiSW5kZXggPSBjdXJyZW50VGFicy5maW5kSW5kZXgoKHRhYjogVGFiSW5mbykgPT4gdGFiLmlkID09PSBpZCk7XG5cbiAgICBpZiAodGFiSW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICBjb25zdCB0YWJUb0Nsb3NlID0gY3VycmVudFRhYnNbdGFiSW5kZXhdO1xuICAgIGNvbnN0IHdhc0FjdGl2ZSA9IHRhYlRvQ2xvc2UuYWN0aXZlO1xuXG4gICAgLy8gU3luYyB3aXRoIFRhYlN0YXRlU2VydmljZSBieSByZW1vdmluZyB0aGUgdGFiIHN0YXRlXG4gICAgdGhpcy50YWJTdGF0ZVNlcnZpY2UucmVtb3ZlVGFiKGlkKTtcblxuICAgIC8vIENsZWFyIHN0b3JlZCByb3V0ZSBmcm9tIHN0cmF0ZWd5XG4gICAgaWYgKHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5IGluc3RhbmNlb2YgQ3VzdG9tUm91dGVSZXVzZVN0cmF0ZWd5KSB7XG4gICAgICBsZXQgcGF0aEtleSA9IHRhYlRvQ2xvc2Uucm91dGUuc3RhcnRzV2l0aCgnLycpID8gdGFiVG9DbG9zZS5yb3V0ZS5zdWJzdHJpbmcoMSkgOiB0YWJUb0Nsb3NlLnJvdXRlO1xuXG4gICAgICBpZiAodGFiVG9DbG9zZS5wYXJhbXMgJiYgT2JqZWN0LmtleXModGFiVG9DbG9zZS5wYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXNTdHJpbmcgPSBPYmplY3Qua2V5cyh0YWJUb0Nsb3NlLnBhcmFtcylcbiAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgLm1hcChrZXkgPT4gYCR7a2V5fT0ke3RhYlRvQ2xvc2UucGFyYW1zIVtrZXldfWApXG4gICAgICAgICAgLmpvaW4oJyYnKTtcbiAgICAgICAgcGF0aEtleSArPSAnPycgKyBxdWVyeVBhcmFtc1N0cmluZztcbiAgICAgIH1cblxuICAgICAgKHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5IGFzIEN1c3RvbVJvdXRlUmV1c2VTdHJhdGVneSkuY2xlYXJTdG9yZWRSb3V0ZShwYXRoS2V5KTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIHRhYiBmcm9tIHRoaXMgc2VydmljZSdzIGxpc3RcbiAgICBjb25zdCBuZXdUYWJzID0gY3VycmVudFRhYnMuZmlsdGVyKCh0YWI6IFRhYkluZm8pID0+IHRhYi5pZCAhPT0gaWQpO1xuXG4gICAgLy8gSWYgd2UncmUgY2xvc2luZyB0aGUgYWN0aXZlIHRhYiwgYWN0aXZhdGUgdGhlIG5leHQgYXZhaWxhYmxlIHRhYlxuICAgIGlmICh3YXNBY3RpdmUgJiYgbmV3VGFicy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXdBY3RpdmVJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRhYkluZGV4LCBuZXdUYWJzLmxlbmd0aCAtIDEpKTtcbiAgICAgIGNvbnN0IG5ld0FjdGl2ZVRhYiA9IG5ld1RhYnNbbmV3QWN0aXZlSW5kZXhdO1xuXG4gICAgICAvLyBVcGRhdGUgc2lkZWRyYXdlciBmb3IgdGhlIG5ldyBhY3RpdmUgdGFiXG4gICAgICB0aGlzLnNpZGVkcmF3ZXJTZXJ2aWNlLnVwZGF0ZURyYXdlckl0ZW1zKG5ld0FjdGl2ZVRhYi5sYXlvdXQpO1xuXG4gICAgICBuZXdUYWJzW25ld0FjdGl2ZUluZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5hY3RpdmVUYWJJZFNpZ25hbC5zZXQobmV3QWN0aXZlVGFiLmlkKTtcbiAgICAgIHRoaXMudGFiU3RhdGVTZXJ2aWNlLnNldEFjdGl2ZVRhYihuZXdBY3RpdmVUYWIuaWQpO1xuXG4gICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgbmV3IGFjdGl2ZSB0YWIncyByb3V0ZVxuICAgICAgaWYgKG5ld0FjdGl2ZVRhYi5wYXJhbXMpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW25ld0FjdGl2ZVRhYi5yb3V0ZV0sIHsgcXVlcnlQYXJhbXM6IG5ld0FjdGl2ZVRhYi5wYXJhbXMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbmV3QWN0aXZlVGFiLnJvdXRlXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXdUYWJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hY3RpdmVUYWJJZFNpZ25hbC5zZXQobnVsbCk7XG4gICAgICB0aGlzLnRhYlN0YXRlU2VydmljZS5zZXRBY3RpdmVUYWIobnVsbCk7XG4gICAgICAvLyBDbGVhciBzaWRlZHJhd2VyIGFzIG5vIHRhYnMgYXJlIG9wZW5cbiAgICAgIHRoaXMuc2lkZWRyYXdlclNlcnZpY2UudXBkYXRlRHJhd2VySXRlbXModW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy50YWJzU2lnbmFsLnNldChuZXdUYWJzKTtcbiAgICAvLyBSZXF1ZXN0IHdyYXBwZXIgdmlzaWJpbGl0eSBpcyBub3cgY29udHJvbGxlZCBieSBsYXlvdXQgY29uZmlndXJhdGlvblxuICAgIC8vIFRoZSB3cmFwcGVyIHdpbGwgYmUgaGlkZGVuL3Nob3duIGJhc2VkIG9uIHN5dG1fbGF5b3V0X3JlcXVlc3Quc3RhdHVzIGluIHNldFBhZ2VEYXRhXG4gIH1cblxuICAvLyBIaWRlIFJlcXVlc3RcbiAgaGlkZVJlcXVlc3QoKSB7XG4gICAgY29uc29sZS5sb2coJ/CfmqsgUkVRVUVTVCBTRVJWSUNFIC0gSGlkaW5nIHJlcXVlc3Qgd3JhcHBlcicpO1xuICAgIHRoaXMucmVxdWVzdFZpc2libGUgPSBmYWxzZTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjY2lkZS1seXQtcmVxdWVzdC13cmFwcGVyYCk/LmNsYXNzTGlzdC5hZGQoJ2NpZGUtbHl0LXJlcXVlc3Qtd3JhcHBlci1oaWRlJyk7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgYm9keWApPy5jbGFzc0xpc3QucmVtb3ZlKCdjaWRlLWx5dC1yZXF1ZXN0LWV4aXN0Jyk7XG4gIH1cblxuICAvLyBTaG93IFJlcXVlc3RcbiAgc2hvd1JlcXVlc3QoKSB7XG4gICAgY29uc29sZS5sb2coJ+KchSBSRVFVRVNUIFNFUlZJQ0UgLSBTaG93aW5nIHJlcXVlc3Qgd3JhcHBlcicpO1xuICAgIHRoaXMucmVxdWVzdFZpc2libGUgPSB0cnVlO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNjaWRlLWx5dC1yZXF1ZXN0LXdyYXBwZXJgKT8uY2xhc3NMaXN0LnJlbW92ZSgnY2lkZS1seXQtcmVxdWVzdC13cmFwcGVyLWhpZGUnKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBib2R5YCk/LmNsYXNzTGlzdC5hZGQoJ2NpZGUtbHl0LXJlcXVlc3QtZXhpc3QnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAndGFiLScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSk7XG4gIH1cblxuICB1cGRhdGVUYWJTY3JvbGxQb3NpdGlvbih0YWJJZDogc3RyaW5nLCBzY3JvbGxUb3A6IG51bWJlciwgc2Nyb2xsTGVmdDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFRhYnMgPSB0aGlzLnRhYnNTaWduYWwoKTtcbiAgICBjb25zdCB0YWJJbmRleCA9IGN1cnJlbnRUYWJzLmZpbmRJbmRleCgodDogVGFiSW5mbykgPT4gdC5pZCA9PT0gdGFiSWQpO1xuICAgIGlmICh0YWJJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IHRhYlRvVXBkYXRlID0gY3VycmVudFRhYnNbdGFiSW5kZXhdO1xuICAgICAgdGFiVG9VcGRhdGUuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgdGFiVG9VcGRhdGUuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgdGhpcy50YWJzU2lnbmFsLnNldChbLi4uY3VycmVudFRhYnNdKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { Component, ViewChild, effect } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { NavigationEnd, RouterModule } from '@angular/router';
|
|
4
|
-
import { filter } from 'rxjs/operators';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../request.service";
|
|
7
|
-
import * as i2 from "@angular/router";
|
|
8
|
-
export class TabContentComponent {
|
|
9
|
-
constructor(requestService, router, // Inject Router to listen for NavigationEnd
|
|
10
|
-
cdr) {
|
|
11
|
-
this.requestService = requestService;
|
|
12
|
-
this.router = router;
|
|
13
|
-
this.cdr = cdr;
|
|
14
|
-
this.currentActiveTabId = null;
|
|
15
|
-
this.isRestoringScroll = false; // Flag to prevent saving scroll during restoration attempts
|
|
16
|
-
// Modern Angular signal pattern: Use effect to react to active tab changes
|
|
17
|
-
effect(() => {
|
|
18
|
-
const activeTab = this.requestService.activeTab();
|
|
19
|
-
if (activeTab && activeTab.id !== this.currentActiveTabId) {
|
|
20
|
-
this.currentActiveTabId = activeTab.id;
|
|
21
|
-
// Delay scroll restoration to ensure DOM is ready
|
|
22
|
-
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
23
|
-
delay(100).then(() => this.restoreScrollPosition(activeTab));
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
// Listen to route changes for scroll restoration
|
|
27
|
-
this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe({
|
|
28
|
-
next: () => {
|
|
29
|
-
// Use signal to get active tab after navigation
|
|
30
|
-
const activeTab = this.requestService.activeTab();
|
|
31
|
-
if (activeTab && activeTab.id !== this.currentActiveTabId) {
|
|
32
|
-
this.currentActiveTabId = activeTab.id;
|
|
33
|
-
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
34
|
-
delay(150).then(() => this.restoreScrollPosition(activeTab));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
ngAfterViewInit() {
|
|
40
|
-
// Initial scroll restoration for the active tab
|
|
41
|
-
const activeTab = this.requestService.activeTab();
|
|
42
|
-
if (activeTab) {
|
|
43
|
-
this.currentActiveTabId = activeTab.id;
|
|
44
|
-
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
45
|
-
delay(50).then(() => this.restoreScrollPosition(activeTab));
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
onScroll() {
|
|
49
|
-
if (this.isRestoringScroll || !this.scrollContainerRef || !this.currentActiveTabId) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const { scrollTop, scrollLeft } = this.scrollContainerRef.nativeElement;
|
|
53
|
-
this.requestService.updateTabScrollPosition(this.currentActiveTabId, scrollTop, scrollLeft);
|
|
54
|
-
}
|
|
55
|
-
restoreScrollPosition(tab) {
|
|
56
|
-
if (tab && this.scrollContainerRef?.nativeElement) {
|
|
57
|
-
this.isRestoringScroll = true;
|
|
58
|
-
const container = this.scrollContainerRef.nativeElement;
|
|
59
|
-
container.scrollTop = tab.scrollTop ?? 0;
|
|
60
|
-
container.scrollLeft = tab.scrollLeft ?? 0;
|
|
61
|
-
// Modern ES2022+ pattern: Use Promise-based delay
|
|
62
|
-
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
63
|
-
delay(150).then(() => { this.isRestoringScroll = false; }); // Allow scroll event to settle
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TabContentComponent, deps: [{ token: i1.CideLytRequestService }, { token: i2.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
67
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: TabContentComponent, isStandalone: true, selector: "cide-lyt-tab-content", viewQueries: [{ propertyName: "scrollContainerRef", first: true, predicate: ["scrollContainer"], descendants: true }], ngImport: i0, template: `
|
|
68
|
-
<div class="tab-content-container" #scrollContainer (scroll)="onScroll()">
|
|
69
|
-
<router-outlet></router-outlet>
|
|
70
|
-
</div>
|
|
71
|
-
`, isInline: true, styles: [":host{height:100%;display:flex;flex-direction:column}.tab-content-container{height:100%;width:100%;position:relative;overflow:auto;display:flex;flex-direction:column;flex:1}::ng-deep router-outlet+*{height:100%;flex:1;display:flex;flex-direction:column}::ng-deep cide-lyt-home-wrapper,::ng-deep cide-adm-home-wrapper,::ng-deep cide-adm-entity,::ng-deep cide-adm-entity-list{height:100%!important;flex:1!important;display:flex!important;flex-direction:column!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
|
|
72
|
-
}
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TabContentComponent, decorators: [{
|
|
74
|
-
type: Component,
|
|
75
|
-
args: [{ selector: 'cide-lyt-tab-content', standalone: true, imports: [CommonModule, RouterModule], template: `
|
|
76
|
-
<div class="tab-content-container" #scrollContainer (scroll)="onScroll()">
|
|
77
|
-
<router-outlet></router-outlet>
|
|
78
|
-
</div>
|
|
79
|
-
`, styles: [":host{height:100%;display:flex;flex-direction:column}.tab-content-container{height:100%;width:100%;position:relative;overflow:auto;display:flex;flex-direction:column;flex:1}::ng-deep router-outlet+*{height:100%;flex:1;display:flex;flex-direction:column}::ng-deep cide-lyt-home-wrapper,::ng-deep cide-adm-home-wrapper,::ng-deep cide-adm-entity,::ng-deep cide-adm-entity-list{height:100%!important;flex:1!important;display:flex!important;flex-direction:column!important}\n"] }]
|
|
80
|
-
}], ctorParameters: () => [{ type: i1.CideLytRequestService }, { type: i2.Router }, { type: i0.ChangeDetectorRef }], propDecorators: { scrollContainerRef: [{
|
|
81
|
-
type: ViewChild,
|
|
82
|
-
args: ['scrollContainer']
|
|
83
|
-
}] } });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWNvbnRlbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9yZXF1ZXN0L3RhYi1jb250ZW50L3RhYi1jb250ZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFNBQVMsRUFBb0MsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFVLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWdEeEMsTUFBTSxPQUFPLG1CQUFtQjtJQU05QixZQUNVLGNBQXFDLEVBQ3JDLE1BQWMsRUFBRSw0Q0FBNEM7SUFDNUQsR0FBc0I7UUFGdEIsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQU54Qix1QkFBa0IsR0FBa0IsSUFBSSxDQUFDO1FBQ3pDLHNCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLDREQUE0RDtRQU83RiwyRUFBMkU7UUFDM0UsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEQsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLGtEQUFrRDtnQkFDbEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFB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O1lBQ2xELE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUM3RixDQUFDO0lBQ0gsQ0FBQzs4R0FsRVUsbUJBQW1CO2tHQUFuQixtQkFBbUIsdU1BMUNwQjs7OztHQUlULCtoQkFMUyxZQUFZLDhCQUFFLFlBQVk7OzJGQTJDekIsbUJBQW1CO2tCQTlDL0IsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUMzQjs7OztHQUlUOytJQXVDNkIsa0JBQWtCO3NCQUEvQyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgZWZmZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ2lkZUx5dFJlcXVlc3RTZXJ2aWNlLCBUYWJJbmZvIH0gZnJvbSAnLi4vcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2lkZS1seXQtdGFiLWNvbnRlbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSb3V0ZXJNb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudC1jb250YWluZXJcIiAjc2Nyb2xsQ29udGFpbmVyIChzY3JvbGwpPVwib25TY3JvbGwoKVwiPlxuICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIFxuICAgIC50YWItY29udGVudC1jb250YWluZXIge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZmxleDogMTtcbiAgICB9XG4gICAgXG4gICAgLyogRW5zdXJlIHJvdXRlciBvdXRsZXQgY29tcG9uZW50cyB0YWtlIGZ1bGwgaGVpZ2h0ICovXG4gICAgOjpuZy1kZWVwIHJvdXRlci1vdXRsZXQgKyAqIHtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gICAgXG4gICAgLyogU3BlY2lmaWMgaGVpZ2h0IGZpeGVzIGZvciBjb21tb24gY29tcG9uZW50IHNlbGVjdG9ycyAqL1xuICAgIDo6bmctZGVlcCBjaWRlLWx5dC1ob21lLXdyYXBwZXIsXG4gICAgOjpuZy1kZWVwIGNpZGUtYWRtLWhvbWUtd3JhcHBlcixcbiAgICA6Om5nLWRlZXAgY2lkZS1hZG0tZW50aXR5LFxuICAgIDo6bmctZGVlcCBjaWRlLWFkbS1lbnRpdHktbGlzdCB7XG4gICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgIGZsZXg6IDEgIWltcG9ydGFudDtcbiAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYkNvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGFpbmVyJykgc2Nyb2xsQ29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgcHJpdmF0ZSBjdXJyZW50QWN0aXZlVGFiSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzUmVzdG9yaW5nU2Nyb2xsID0gZmFsc2U7IC8vIEZsYWcgdG8gcHJldmVudCBzYXZpbmcgc2Nyb2xsIGR1cmluZyByZXN0b3JhdGlvbiBhdHRlbXB0c1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IENpZGVMeXRSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLCAvLyBJbmplY3QgUm91dGVyIHRvIGxpc3RlbiBmb3IgTmF2aWdhdGlvbkVuZFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICAvLyBNb2Rlcm4gQW5ndWxhciBzaWduYWwgcGF0dGVybjogVXNlIGVmZmVjdCB0byByZWFjdCB0byBhY3RpdmUgdGFiIGNoYW5nZXNcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5yZXF1ZXN0U2VydmljZS5hY3RpdmVUYWIoKTtcbiAgICAgIGlmIChhY3RpdmVUYWIgJiYgYWN0aXZlVGFiLmlkICE9PSB0aGlzLmN1cnJlbnRBY3RpdmVUYWJJZCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVUYWJJZCA9IGFjdGl2ZVRhYi5pZDtcbiAgICAgICAgLy8gRGVsYXkgc2Nyb2xsIHJlc3RvcmF0aW9uIHRvIGVuc3VyZSBET00gaXMgcmVhZHlcbiAgICAgICAgY29uc3QgZGVsYXkgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gICAgICAgIGRlbGF5KDEwMCkudGhlbigoKSA9PiB0aGlzLnJlc3RvcmVTY3JvbGxQb3NpdGlvbihhY3RpdmVUYWIpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExpc3RlbiB0byByb3V0ZSBjaGFuZ2VzIGZvciBzY3JvbGwgcmVzdG9yYXRpb25cbiAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpXG4gICAgKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAvLyBVc2Ugc2lnbmFsIHRvIGdldCBhY3RpdmUgdGFiIGFmdGVyIG5hdmlnYXRpb25cbiAgICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5yZXF1ZXN0U2VydmljZS5hY3RpdmVUYWIoKTtcbiAgICAgICAgaWYgKGFjdGl2ZVRhYiAmJiBhY3RpdmVUYWIuaWQgIT09IHRoaXMuY3VycmVudEFjdGl2ZVRhYklkKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlVGFiSWQgPSBhY3RpdmVUYWIuaWQ7XG4gICAgICAgICAgY29uc3QgZGVsYXkgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gICAgICAgICAgZGVsYXkoMTUwKS50aGVuKCgpID0+IHRoaXMucmVzdG9yZVNjcm9sbFBvc2l0aW9uKGFjdGl2ZVRhYikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbCBzY3JvbGwgcmVzdG9yYXRpb24gZm9yIHRoZSBhY3RpdmUgdGFiXG4gICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5yZXF1ZXN0U2VydmljZS5hY3RpdmVUYWIoKTtcbiAgICBpZiAoYWN0aXZlVGFiKSB7XG4gICAgICB0aGlzLmN1cnJlbnRBY3RpdmVUYWJJZCA9IGFjdGl2ZVRhYi5pZDtcbiAgICAgIGNvbnN0IGRlbGF5ID0gKG1zOiBudW1iZXIpID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICAgICAgZGVsYXkoNTApLnRoZW4oKCkgPT4gdGhpcy5yZXN0b3JlU2Nyb2xsUG9zaXRpb24oYWN0aXZlVGFiKSk7XG4gICAgfVxuICB9XG5cbiAgb25TY3JvbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZXN0b3JpbmdTY3JvbGwgfHwgIXRoaXMuc2Nyb2xsQ29udGFpbmVyUmVmIHx8ICF0aGlzLmN1cnJlbnRBY3RpdmVUYWJJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCB9ID0gdGhpcy5zY3JvbGxDb250YWluZXJSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlLnVwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKHRoaXMuY3VycmVudEFjdGl2ZVRhYklkLCBzY3JvbGxUb3AsIHNjcm9sbExlZnQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlU2Nyb2xsUG9zaXRpb24odGFiOiBUYWJJbmZvIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKHRhYiAmJiB0aGlzLnNjcm9sbENvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5pc1Jlc3RvcmluZ1Njcm9sbCA9IHRydWU7XG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNjcm9sbENvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IHRhYi5zY3JvbGxUb3AgPz8gMDtcbiAgICAgIGNvbnRhaW5lci5zY3JvbGxMZWZ0ID0gdGFiLnNjcm9sbExlZnQgPz8gMDtcbiAgICAgIC8vIE1vZGVybiBFUzIwMjIrIHBhdHRlcm46IFVzZSBQcm9taXNlLWJhc2VkIGRlbGF5XG4gICAgICBjb25zdCBkZWxheSA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgICAgIGRlbGF5KDE1MCkudGhlbigoKSA9PiB7IHRoaXMuaXNSZXN0b3JpbmdTY3JvbGwgPSBmYWxzZTsgfSk7IC8vIEFsbG93IHNjcm9sbCBldmVudCB0byBzZXR0bGVcbiAgICB9XG4gIH1cblxuXG59XG4iXX0=
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Component, inject } from '@angular/core';
|
|
2
|
-
import { CideLytSharedService } from '../shared.service';
|
|
3
|
-
import { CideLytSidedrawerService } from '../../sidedrawer/sidedrawer.service';
|
|
4
|
-
import { AppStateHelperService } from '../../../services/app-state/app-state-helper.service';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class CideLytSharedWrapperComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.shared_wrapper_setup_param = {};
|
|
9
|
-
this.page_data = {};
|
|
10
|
-
this.sharedService = inject(CideLytSharedService);
|
|
11
|
-
this.sidedrawerService = inject(CideLytSidedrawerService);
|
|
12
|
-
this.appState = inject(AppStateHelperService);
|
|
13
|
-
}
|
|
14
|
-
ngOnInit() {
|
|
15
|
-
// Load and process page data using modern approach
|
|
16
|
-
if (this.shared_wrapper_setup_param?.sypg_page_code) {
|
|
17
|
-
const entityId = this.appState.getActiveEntityId();
|
|
18
|
-
const page_data_payload = {
|
|
19
|
-
sypg_page_code: this.shared_wrapper_setup_param?.sypg_page_code,
|
|
20
|
-
sytm_entity_id_syen: entityId || undefined
|
|
21
|
-
};
|
|
22
|
-
console.log('🔍 Page data payload:', page_data_payload);
|
|
23
|
-
this.sharedService.loadAndProcessPageData(page_data_payload, {
|
|
24
|
-
setTitle: true,
|
|
25
|
-
setSidebarContext: true,
|
|
26
|
-
updateLayout: true
|
|
27
|
-
}).subscribe({
|
|
28
|
-
next: (page_data_response) => {
|
|
29
|
-
console.log('✅ SHARED WRAPPER: Page data loaded and processed for:', page_data_payload.sypg_page_code);
|
|
30
|
-
this.page_data = page_data_response?.data || {};
|
|
31
|
-
// Sidebar context is automatically set by loadAndProcessPageData when setSidebarContext: true
|
|
32
|
-
const pageId = page_data_response?.data?.page?._id || '';
|
|
33
|
-
const themeId = page_data_response?.data?.theme?._id || '';
|
|
34
|
-
this.sidedrawerService.setContext(pageId, themeId);
|
|
35
|
-
},
|
|
36
|
-
error: (err) => {
|
|
37
|
-
console.error('❌ SHARED WRAPPER: Error loading page data:', err);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytSharedWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideLytSharedWrapperComponent, isStandalone: true, selector: "cide-lyt-shared-wrapper", ngImport: i0, template: "<p>shared-wrapper works!</p>\r\n", styles: [""] }); }
|
|
44
|
-
}
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytSharedWrapperComponent, decorators: [{
|
|
46
|
-
type: Component,
|
|
47
|
-
args: [{ selector: 'cide-lyt-shared-wrapper', standalone: true, imports: [], template: "<p>shared-wrapper works!</p>\r\n" }]
|
|
48
|
-
}] });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7O0FBUzdGLE1BQU0sT0FBTyw2QkFBNkI7SUFQMUM7UUFRUywrQkFBMEIsR0FBNEMsRUFBRSxDQUFDO1FBQ3pFLGNBQVMsR0FBNkIsRUFBRSxDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0Msc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbkQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0tBa0NwRDtJQWhDQyxRQUFRO1FBQ04sbURBQW1EO1FBQ25ELElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuRCxNQUFNLGlCQUFpQixHQUFrQjtnQkFDdkMsY0FBYyxFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxjQUFjO2dCQUMvRCxtQkFBbUIsRUFBRSxRQUFRLElBQUksU0FBUzthQUMzQyxDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBRXhELElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxJQUFJO2dCQUNkLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLENBQUMsa0JBQWtELEVBQUUsRUFBRTtvQkFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1REFBdUQsRUFBRSxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDdkcsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUVoRCw4RkFBOEY7b0JBQzlGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDekQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO29CQUMzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDckQsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBcENVLDZCQUE2QjtrR0FBN0IsNkJBQTZCLG1GQ2IxQyxrQ0FDQTs7MkZEWWEsNkJBQTZCO2tCQVB6QyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLFdBQ1AsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENpZGVMeXRTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVzaWduQ29uZmlnQ29udHJvbGxlclJlc3BvbnNlLCBkZXNpZ25Db25maWdSZXNwb25zZURhdGEsIE1EZXNpZ25Db25maWcgfSBmcm9tICdjbG91ZC1pZGUtbG1zLW1vZGVsJztcbmltcG9ydCB7IENpZGVMeXRTaWRlZHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NpZGVkcmF3ZXIvc2lkZWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFN0YXRlSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcC1zdGF0ZS9hcHAtc3RhdGUtaGVscGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjaWRlLWx5dC1zaGFyZWQtd3JhcHBlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQ2lkZUx5dFNoYXJlZFdyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgc2hhcmVkX3dyYXBwZXJfc2V0dXBfcGFyYW06IFBhcnRpYWw8Q2lkZUx5dFNoYXJlZFdyYXBwZXJTZXR1cFBhcmFtPiA9IHt9O1xuICBwdWJsaWMgcGFnZV9kYXRhOiBkZXNpZ25Db25maWdSZXNwb25zZURhdGEgPSB7fTtcbiAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlID0gaW5qZWN0KENpZGVMeXRTaGFyZWRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzaWRlZHJhd2VyU2VydmljZSA9IGluamVjdChDaWRlTHl0U2lkZWRyYXdlclNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgYXBwU3RhdGUgPSBpbmplY3QoQXBwU3RhdGVIZWxwZXJTZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBMb2FkIGFuZCBwcm9jZXNzIHBhZ2UgZGF0YSB1c2luZyBtb2Rlcm4gYXBwcm9hY2hcbiAgICBpZiAodGhpcy5zaGFyZWRfd3JhcHBlcl9zZXR1cF9wYXJhbT8uc3lwZ19wYWdlX2NvZGUpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gdGhpcy5hcHBTdGF0ZS5nZXRBY3RpdmVFbnRpdHlJZCgpO1xuICAgICAgY29uc3QgcGFnZV9kYXRhX3BheWxvYWQ6IE1EZXNpZ25Db25maWcgPSB7IFxuICAgICAgICBzeXBnX3BhZ2VfY29kZTogdGhpcy5zaGFyZWRfd3JhcHBlcl9zZXR1cF9wYXJhbT8uc3lwZ19wYWdlX2NvZGUsIFxuICAgICAgICBzeXRtX2VudGl0eV9pZF9zeWVuOiBlbnRpdHlJZCB8fCB1bmRlZmluZWQgXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ/CflI0gUGFnZSBkYXRhIHBheWxvYWQ6JywgcGFnZV9kYXRhX3BheWxvYWQpO1xuICAgICAgXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UubG9hZEFuZFByb2Nlc3NQYWdlRGF0YShwYWdlX2RhdGFfcGF5bG9hZCwge1xuICAgICAgICBzZXRUaXRsZTogdHJ1ZSxcbiAgICAgICAgc2V0U2lkZWJhckNvbnRleHQ6IHRydWUsXG4gICAgICAgIHVwZGF0ZUxheW91dDogdHJ1ZVxuICAgICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHBhZ2VfZGF0YV9yZXNwb25zZTogZGVzaWduQ29uZmlnQ29udHJvbGxlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ+KchSBTSEFSRUQgV1JBUFBFUjogUGFnZSBkYXRhIGxvYWRlZCBhbmQgcHJvY2Vzc2VkIGZvcjonLCBwYWdlX2RhdGFfcGF5bG9hZC5zeXBnX3BhZ2VfY29kZSk7XG4gICAgICAgICAgdGhpcy5wYWdlX2RhdGEgPSBwYWdlX2RhdGFfcmVzcG9uc2U/LmRhdGEgfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2lkZWJhciBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgc2V0IGJ5IGxvYWRBbmRQcm9jZXNzUGFnZURhdGEgd2hlbiBzZXRTaWRlYmFyQ29udGV4dDogdHJ1ZVxuICAgICAgICAgIGNvbnN0IHBhZ2VJZCA9IHBhZ2VfZGF0YV9yZXNwb25zZT8uZGF0YT8ucGFnZT8uX2lkIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IHRoZW1lSWQgPSBwYWdlX2RhdGFfcmVzcG9uc2U/LmRhdGE/LnRoZW1lPy5faWQgfHwgJyc7XG4gICAgICAgICAgdGhpcy5zaWRlZHJhd2VyU2VydmljZS5zZXRDb250ZXh0KHBhZ2VJZCwgdGhlbWVJZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIFNIQVJFRCBXUkFQUEVSOiBFcnJvciBsb2FkaW5nIHBhZ2UgZGF0YTonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2lkZUx5dFNoYXJlZFdyYXBwZXJTZXR1cFBhcmFtIHtcbiAgc3lwZ19wYWdlX2NvZGU6IHN0cmluZ1xufSIsIjxwPnNoYXJlZC13cmFwcGVyIHdvcmtzITwvcD5cclxuIl19
|