qms-angular 1.1.15 → 1.1.17
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/bundles/qms-angular.umd.js +1470 -21
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/common/models/qms-flat-node.model.js +1 -1
- package/esm2015/lib/components/qms-nav-drawer/qms-nav-drawer.component.js +3 -3
- package/esm2015/lib/components/select-access-dialog/common/animation.js +10 -0
- package/esm2015/lib/components/select-access-dialog/common/option-select-access.enum.js +7 -0
- package/esm2015/lib/components/select-access-dialog/index.js +2 -0
- package/esm2015/lib/components/select-access-dialog/model/access-item.model.js +6 -0
- package/esm2015/lib/components/select-access-dialog/model/option-select-access.model.js +3 -0
- package/esm2015/lib/components/select-access-dialog/model/select-access-data.js +17 -0
- package/esm2015/lib/components/select-access-dialog/public-api.js +8 -0
- package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +330 -0
- package/esm2015/lib/components/select-access-dialog/select-access-dialog.module.js +60 -0
- package/esm2015/lib/components/select-access-dialog/service/select-access-global.service.js +11 -0
- package/esm2015/lib/components/select-department/common/animation.js +30 -0
- package/esm2015/lib/components/select-department/index.js +2 -0
- package/esm2015/lib/components/select-department/model/select-department-popup-data.model.js +15 -0
- package/esm2015/lib/components/select-department/public-api.js +5 -0
- package/esm2015/lib/components/select-department/select-department.component.js +98 -0
- package/esm2015/lib/components/select-department/select-department.module.js +62 -0
- package/esm2015/lib/components/select-department/service/select-department-global.service.js +22 -0
- package/esm2015/lib/components/select-department-tree/animation/animation.js +54 -0
- package/esm2015/lib/components/select-department-tree/index.js +2 -0
- package/esm2015/lib/components/select-department-tree/model/department-search-result.model.js +6 -0
- package/esm2015/lib/components/select-department-tree/model/select-department-tree.config.js +10 -0
- package/esm2015/lib/components/select-department-tree/public-api.js +7 -0
- package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +611 -0
- package/esm2015/lib/components/select-department-tree/select-department-tree.module.js +60 -0
- package/esm2015/lib/components/select-department-tree/service/select-department-tree-global.service.js +22 -0
- package/esm2015/lib/components/select-include-children/services/select-include-children-global.service.js +1 -1
- package/esm2015/lib/components/select-one/select-one-next.component.js +1 -1
- package/esm2015/lib/components/tree/basic-tree.component.js +1 -1
- package/esm2015/lib/model/en.js +19 -2
- package/esm2015/lib/model/no.js +18 -1
- package/esm2015/lib/services/translation-registry.service.js +2 -2
- package/esm2015/public-api.js +4 -1
- package/fesm2015/qms-angular.js +1370 -22
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/common/models/qms-flat-node.model.d.ts +3 -0
- package/lib/components/select-access-dialog/common/animation.d.ts +1 -0
- package/lib/components/select-access-dialog/common/option-select-access.enum.d.ts +5 -0
- package/lib/components/select-access-dialog/index.d.ts +1 -0
- package/lib/components/select-access-dialog/model/access-item.model.d.ts +7 -0
- package/lib/components/select-access-dialog/model/option-select-access.model.d.ts +5 -0
- package/lib/components/select-access-dialog/model/select-access-data.d.ts +15 -0
- package/lib/components/select-access-dialog/public-api.d.ts +7 -0
- package/lib/components/select-access-dialog/select-access-dialog.component.d.ts +74 -0
- package/lib/components/select-access-dialog/select-access-dialog.module.d.ts +2 -0
- package/lib/components/select-access-dialog/service/select-access-global.service.d.ts +2 -0
- package/lib/components/select-department/common/animation.d.ts +1 -0
- package/lib/components/select-department/index.d.ts +1 -0
- package/lib/components/select-department/model/select-department-popup-data.model.d.ts +16 -0
- package/lib/components/select-department/public-api.d.ts +4 -0
- package/lib/components/select-department/select-department.component.d.ts +37 -0
- package/lib/components/select-department/select-department.module.d.ts +2 -0
- package/lib/components/select-department/service/select-department-global.service.d.ts +9 -0
- package/lib/components/select-department-tree/animation/animation.d.ts +1 -0
- package/lib/components/select-department-tree/index.d.ts +1 -0
- package/lib/components/select-department-tree/model/department-search-result.model.d.ts +11 -0
- package/lib/components/select-department-tree/model/select-department-tree.config.d.ts +9 -0
- package/lib/components/select-department-tree/public-api.d.ts +6 -0
- package/lib/components/select-department-tree/select-department-tree.component.d.ts +121 -0
- package/lib/components/select-department-tree/select-department-tree.module.d.ts +2 -0
- package/lib/components/select-department-tree/service/select-department-tree-global.service.d.ts +9 -0
- package/lib/model/en.d.ts +17 -0
- package/lib/model/no.d.ts +17 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/qms-angular.metadata.json +1 -1
- package/src/lib/components/select-access-dialog/select-access-dialog.component.scss +285 -0
- package/src/lib/components/select-department/select-department.component.scss +185 -0
- package/src/lib/components/select-department-tree/select-department-tree.component.scss +445 -0
- package/src/themes/_qms-icon-font.scss +1 -1
- package/src/themes/core/_checkbox.scss +16 -2
- package/src/themes/core/_radio.scss +16 -3
- package/src/themes/core/_slide-toggle.scss +18 -5
- package/src/themes/core/_table-pure-gap.scss +134 -19
- package/src/themes/theme/_variable.scss +22 -2
@@ -0,0 +1,611 @@
|
|
1
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
2
|
+
import { FlatTreeControl } from '@angular/cdk/tree';
|
3
|
+
import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output } from '@angular/core';
|
4
|
+
import { FormControl } from '@angular/forms';
|
5
|
+
import { MatIconRegistry } from '@angular/material/icon';
|
6
|
+
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
|
7
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
8
|
+
import { BehaviorSubject, of, Subject, timer } from 'rxjs';
|
9
|
+
import { delay, switchMap, takeUntil } from 'rxjs/operators';
|
10
|
+
import { QMSFlatNodeTree } from '../../common/models/qms-flat-node.model';
|
11
|
+
import { TranslateLibraryService } from '../../services/translation-registry.service';
|
12
|
+
import { QMSIconRegistryService } from '../app-icon/icon-registry.service';
|
13
|
+
import { PaginationSize } from '../qms-paginator';
|
14
|
+
import { ItemIconType } from '../related/common/item-icon-type.enum';
|
15
|
+
import { AnimationTreeDepartment } from './animation/animation';
|
16
|
+
import { QMSSelectDepartmentTreeConfig } from './model/select-department-tree.config';
|
17
|
+
import * as _ from 'lodash';
|
18
|
+
export class SelectDepartmentTreeComponent {
|
19
|
+
constructor(cdRef, domSanitizer, appIconService, iconRegistry, eleRef, trans) {
|
20
|
+
this.cdRef = cdRef;
|
21
|
+
this.domSanitizer = domSanitizer;
|
22
|
+
this.appIconService = appIconService;
|
23
|
+
this.iconRegistry = iconRegistry;
|
24
|
+
this.eleRef = eleRef;
|
25
|
+
this.trans = trans;
|
26
|
+
this.enableIncludeChild = false;
|
27
|
+
this.enableTreeSearch = false;
|
28
|
+
this.isSelectOne = false;
|
29
|
+
this.activeViewSearch = false;
|
30
|
+
this.treeDataSourceConfig = new QMSSelectDepartmentTreeConfig();
|
31
|
+
this.checkSearchMappingTree = true;
|
32
|
+
this.enablePagingSearch = true;
|
33
|
+
this.onSearchEvent = new EventEmitter();
|
34
|
+
this.onPagingSearchEvent = new EventEmitter();
|
35
|
+
this.ngUnsubscribe = new Subject();
|
36
|
+
this.isLoaded = false;
|
37
|
+
this.resultGroupSelected = [];
|
38
|
+
this.resultSingleSelected = [];
|
39
|
+
this.resultSearchSelected = [];
|
40
|
+
this.resultSelected = [];
|
41
|
+
this.getDataTree$ = new BehaviorSubject([]);
|
42
|
+
this.onValueChangeEvent = new EventEmitter();
|
43
|
+
this.searchDepartment$ = new Subject();
|
44
|
+
this.resultSearch = [];
|
45
|
+
this.pagingResultSearch = [];
|
46
|
+
this.isSelectAllResultSearch = false;
|
47
|
+
this.indeterminateSearchResult = false;
|
48
|
+
this.currentPaginationConfig = {
|
49
|
+
pageIndex: 0,
|
50
|
+
pageSize: 10,
|
51
|
+
length: 0
|
52
|
+
};
|
53
|
+
this.indexView = 0;
|
54
|
+
this.scrollToNodeEvent$ = new Subject();
|
55
|
+
this.activeNode = '';
|
56
|
+
this.getActiveNodeEvent$ = new Subject();
|
57
|
+
this.PAGINATION_SIZE = PaginationSize;
|
58
|
+
this.nestedTreeNodeMap = new Map();
|
59
|
+
this.flatTreeNodeMap = new Map();
|
60
|
+
this.checkListSelection = new SelectionModel(true);
|
61
|
+
this.checkListSelectionSearch = new SelectionModel(true);
|
62
|
+
this.formSearchControl = new FormControl('');
|
63
|
+
this.isSearching = false;
|
64
|
+
this.textResultSearch = '';
|
65
|
+
this.itemIconType = ItemIconType;
|
66
|
+
this._transformer = (node, level) => {
|
67
|
+
var _a;
|
68
|
+
const flatNode = this.convertToFlatNode(node) || new QMSFlatNodeTree();
|
69
|
+
flatNode.id = node.id;
|
70
|
+
flatNode.name = node.name;
|
71
|
+
flatNode.expandable = (node.children && node.children.length > 0) || (!!node.childCount);
|
72
|
+
flatNode.level = level;
|
73
|
+
flatNode.parentId = node.parentId;
|
74
|
+
flatNode.markedGetChildren = !!((_a = node.children) === null || _a === void 0 ? void 0 : _a.length);
|
75
|
+
flatNode.parentId = node.parentId;
|
76
|
+
flatNode.itemIcon = node.itemIcon;
|
77
|
+
flatNode.itemIconSvg = node.itemIconSvg;
|
78
|
+
flatNode.isFile = node.isFile;
|
79
|
+
flatNode.disabled = node.disabled;
|
80
|
+
this.flatTreeNodeMap.set(flatNode, node);
|
81
|
+
this.nestedTreeNodeMap.set(node, flatNode);
|
82
|
+
return flatNode;
|
83
|
+
};
|
84
|
+
this.getLevel = (node) => node === null || node === void 0 ? void 0 : node.level;
|
85
|
+
this._getChild = (node) => node.children;
|
86
|
+
this.isExpandable = (node) => node.expandable;
|
87
|
+
this.hasChild = (_, node) => node.expandable;
|
88
|
+
this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);
|
89
|
+
this.treeFlattener = new MatTreeFlattener(this._transformer, this.getLevel, this.isExpandable, this._getChild);
|
90
|
+
this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
|
91
|
+
// Init tree data
|
92
|
+
this.getDataTree$
|
93
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
94
|
+
.subscribe(data => {
|
95
|
+
this.dataSource.data = data;
|
96
|
+
});
|
97
|
+
// Register icon
|
98
|
+
appIconService.registerProcessIcon(iconRegistry, domSanitizer);
|
99
|
+
appIconService.registerProcessAreaIcon(iconRegistry, domSanitizer);
|
100
|
+
appIconService.registerDocumentIcon(iconRegistry, domSanitizer);
|
101
|
+
appIconService.registerFolderIcon(iconRegistry, domSanitizer);
|
102
|
+
appIconService.registerDeviationIcon(iconRegistry, domSanitizer);
|
103
|
+
appIconService.registerChecklistIcon(iconRegistry, domSanitizer);
|
104
|
+
appIconService.registerRiskIcon(iconRegistry, domSanitizer);
|
105
|
+
this.trans.getLanguageSubject$.pipe().subscribe((res) => {
|
106
|
+
if (res) {
|
107
|
+
this.LANG = this.trans.getObjectLang(res);
|
108
|
+
}
|
109
|
+
});
|
110
|
+
this.searchDepartment$
|
111
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
112
|
+
.subscribe(result => {
|
113
|
+
this.resultSearch = [];
|
114
|
+
if (result && result.length) {
|
115
|
+
result.forEach(item => {
|
116
|
+
const node = this.treeControl.dataNodes.find(node => node.id === item.id);
|
117
|
+
const parents = node ? this._getAllParentNode(node) : [];
|
118
|
+
this.resultSearch.push(Object.assign(Object.assign({}, item), { disabled: this.checkSearchMappingTree && !node, path: [
|
119
|
+
...(parents.map((x, index) => ({
|
120
|
+
id: x.id,
|
121
|
+
name: x.name,
|
122
|
+
})).reverse() || []),
|
123
|
+
{
|
124
|
+
id: item.id,
|
125
|
+
name: item.name,
|
126
|
+
}
|
127
|
+
] }));
|
128
|
+
});
|
129
|
+
}
|
130
|
+
this.currentPaginationConfig.pageIndex = 0;
|
131
|
+
this.currentPaginationConfig.pageSize = 10;
|
132
|
+
this.isSearching = false;
|
133
|
+
this.textResultSearch = this.formSearchControl.value;
|
134
|
+
this.onPagingSearchResult(this.currentPaginationConfig);
|
135
|
+
this._mapToResultSearch();
|
136
|
+
this._checkStateCheckboxAllSearch();
|
137
|
+
this.setIndexView(1);
|
138
|
+
this.cdRef.detectChanges();
|
139
|
+
});
|
140
|
+
this.scrollToNodeEvent$.pipe(takeUntil(this.ngUnsubscribe), switchMap((val) => {
|
141
|
+
const delayTiming = this.indexView === 1 ? 700 : 0;
|
142
|
+
this.setIndexView(0);
|
143
|
+
return of(val).pipe(delay(delayTiming));
|
144
|
+
})).subscribe(res => {
|
145
|
+
this.onScrollIntoNode(res);
|
146
|
+
});
|
147
|
+
this.getActiveNodeEvent$.pipe(takeUntil(this.ngUnsubscribe), switchMap(val => {
|
148
|
+
this.activeNode = val;
|
149
|
+
return timer(1500);
|
150
|
+
})).subscribe(_ => {
|
151
|
+
this.activeNode = '';
|
152
|
+
});
|
153
|
+
// this.checkListSelectionSearch.changed
|
154
|
+
// .pipe(takeUntil(this.ngUnsubscribe))
|
155
|
+
// .subscribe(result =>{
|
156
|
+
// const { added, removed } = result;
|
157
|
+
// if(added.length){
|
158
|
+
// const nodes = added.map(item =>({
|
159
|
+
// id: item.id,
|
160
|
+
// name: item.name,
|
161
|
+
// children: null,
|
162
|
+
// } as QMSTreeNode)).filter(item => !this.treeControl.dataNodes.find(x => item.id == x.id));
|
163
|
+
// this.resultSelected.push(...nodes);
|
164
|
+
// }
|
165
|
+
// if(removed.length){
|
166
|
+
// removed.forEach(item =>{
|
167
|
+
// const index = this.resultSelected.findIndex(x => x.id === item.id );
|
168
|
+
// if(index>=0){
|
169
|
+
// this.resultSelected.splice(index, 1);
|
170
|
+
// }
|
171
|
+
// })
|
172
|
+
// }
|
173
|
+
// });
|
174
|
+
}
|
175
|
+
set treeData(value) {
|
176
|
+
this.treeDataSourceConfig.treeData = value || [];
|
177
|
+
this.updateDataTree(this.treeDataSourceConfig.treeData);
|
178
|
+
}
|
179
|
+
set selectedList(value) {
|
180
|
+
this.treeDataSourceConfig.selectedList = value || [];
|
181
|
+
}
|
182
|
+
set selectIncludeLabel(label) {
|
183
|
+
this.treeDataSourceConfig.selectIncludeLabel = label;
|
184
|
+
}
|
185
|
+
get currentTreeData() {
|
186
|
+
return this.getDataTree$.value;
|
187
|
+
}
|
188
|
+
ngOnInit() {
|
189
|
+
this._initTreeData();
|
190
|
+
this._initCheckListSelected();
|
191
|
+
}
|
192
|
+
ngOnDestroy() {
|
193
|
+
this.ngUnsubscribe.next();
|
194
|
+
this.ngUnsubscribe.complete();
|
195
|
+
}
|
196
|
+
_initTreeData() {
|
197
|
+
if (this.treeDataSourceConfig.treeData.length) {
|
198
|
+
const rootNode = this.treeDataSourceConfig.treeData.filter(item => !item.parentId)
|
199
|
+
.map((item, _index) => {
|
200
|
+
const node = {
|
201
|
+
id: item.id,
|
202
|
+
name: item.name,
|
203
|
+
markedGetChildren: item.markedGetChildren,
|
204
|
+
children: [],
|
205
|
+
disabled: this.treeDataSourceConfig.disabledList.includes(item.id),
|
206
|
+
itemIcon: item.itemIcon,
|
207
|
+
itemMatIcon: item.itemMatIcon,
|
208
|
+
itemIconSvg: item.itemIconSvg
|
209
|
+
};
|
210
|
+
return node;
|
211
|
+
});
|
212
|
+
if (!rootNode.length)
|
213
|
+
throw ('Data invalid.');
|
214
|
+
this.updateDataTree(rootNode);
|
215
|
+
const groupResult = this.treeDataSourceConfig.treeData.filter(x => x.parentId).reduce((result, currentValue) => {
|
216
|
+
(result[currentValue['parentId']] = result[currentValue['parentId']] || []).push(currentValue);
|
217
|
+
return result;
|
218
|
+
}, {});
|
219
|
+
const getAllParent = (parentId) => {
|
220
|
+
const parents = [];
|
221
|
+
let parent = this.treeDataSourceConfig.treeData.find(x => x.id == parentId);
|
222
|
+
while (parent) {
|
223
|
+
parents.push(parent);
|
224
|
+
parent = this.treeDataSourceConfig.treeData.find(x => x.id == parent.parentId);
|
225
|
+
}
|
226
|
+
return parents;
|
227
|
+
};
|
228
|
+
if (!(rootNode && !!rootNode.length))
|
229
|
+
return;
|
230
|
+
let groupResultKey = Object.keys(groupResult).filter(x => getAllParent(x).length);
|
231
|
+
while (groupResultKey.length) {
|
232
|
+
groupResultKey = groupResultKey.filter((key) => {
|
233
|
+
const parentFlatNode = this.treeControl.dataNodes.find(node => node.id === key);
|
234
|
+
if (parentFlatNode) {
|
235
|
+
const parentNestedNode = this.convertToNestedNode(parentFlatNode);
|
236
|
+
parentNestedNode.markedGetChildren = true;
|
237
|
+
parentNestedNode.children = _.cloneDeep(groupResult[key]);
|
238
|
+
parentNestedNode.childCount = parentNestedNode.children.length;
|
239
|
+
this.updateDataTree(this.currentTreeData);
|
240
|
+
groupResult[key] = [];
|
241
|
+
return false;
|
242
|
+
}
|
243
|
+
return true;
|
244
|
+
});
|
245
|
+
}
|
246
|
+
}
|
247
|
+
}
|
248
|
+
_initCheckListSelected() {
|
249
|
+
if (!this.treeDataSourceConfig.selectedList.length)
|
250
|
+
return;
|
251
|
+
this.resultGroupSelected = this.treeDataSourceConfig.selectedList.filter(item => item.children);
|
252
|
+
this.resultSingleSelected = this.treeDataSourceConfig.selectedList.filter(item => item.children === null);
|
253
|
+
this.treeDataSourceConfig.selectedList.forEach(item => {
|
254
|
+
var _a;
|
255
|
+
const flatNode = this.treeControl.dataNodes.find(node => node.id === item.id);
|
256
|
+
if (flatNode) {
|
257
|
+
this.checkListSelection.select(flatNode);
|
258
|
+
((_a = item.children) === null || _a === void 0 ? void 0 : _a.length) && item.children.forEach(child => {
|
259
|
+
const node = this.treeControl.dataNodes.find(_x => _x.id === child.id);
|
260
|
+
if (node) {
|
261
|
+
this.checkListSelection.select(node);
|
262
|
+
this.onExpandAllParent(node);
|
263
|
+
}
|
264
|
+
});
|
265
|
+
this.onExpandAllParent(flatNode);
|
266
|
+
}
|
267
|
+
this.resultSelected = [...this.resultSingleSelected, ...this.resultGroupSelected];
|
268
|
+
this.onValueChangeEvent.emit(this.resultSelected);
|
269
|
+
});
|
270
|
+
}
|
271
|
+
updateDataTree(data) {
|
272
|
+
this.getDataTree$.next(data);
|
273
|
+
}
|
274
|
+
setResultSearch(data) {
|
275
|
+
this.searchDepartment$.next(data);
|
276
|
+
}
|
277
|
+
onExpandNode(node) {
|
278
|
+
}
|
279
|
+
onOptionSearchSelected(value) {
|
280
|
+
const flatNode = this.treeControl.dataNodes.find(node => node.id === value.id);
|
281
|
+
if (!flatNode)
|
282
|
+
return;
|
283
|
+
this.checkListSelection.select(flatNode);
|
284
|
+
this._handleCheckNode(flatNode);
|
285
|
+
this.onScrollIntoNode(flatNode.id);
|
286
|
+
}
|
287
|
+
onSlideToggleChange() {
|
288
|
+
}
|
289
|
+
displayWhenSelectDepartmentOption($event) {
|
290
|
+
return '';
|
291
|
+
}
|
292
|
+
onCheckNode(node) {
|
293
|
+
this.checkListSelection.toggle(node);
|
294
|
+
if (this.isSelectOne) {
|
295
|
+
this._handleSelectOne(node);
|
296
|
+
}
|
297
|
+
else {
|
298
|
+
this._handleCheckNode(node);
|
299
|
+
}
|
300
|
+
this.onValueChangeEvent.emit(this.resultSelected);
|
301
|
+
this._mapToResultSearch();
|
302
|
+
this._checkStateCheckboxAllSearch();
|
303
|
+
}
|
304
|
+
_handleSelectOne(node) {
|
305
|
+
const selected = this.checkListSelection.selected.filter(x => x.id !== node.id);
|
306
|
+
this.checkListSelection.deselect(...selected);
|
307
|
+
if (this.checkListSelection.isSelected(node)) {
|
308
|
+
const nestedNode = this.convertToNestedNode(this.checkListSelection.selected[0]);
|
309
|
+
const itemSelected = Object.assign(Object.assign({}, nestedNode), { children: null });
|
310
|
+
this.resultSelected = [itemSelected];
|
311
|
+
return;
|
312
|
+
}
|
313
|
+
this.resultSelected = [];
|
314
|
+
}
|
315
|
+
onExpandAllParent(node) {
|
316
|
+
const parents = this._getAllParentNode(node);
|
317
|
+
if (parents === null || parents === void 0 ? void 0 : parents.length) {
|
318
|
+
parents.forEach(parent => {
|
319
|
+
this.treeControl.expand(parent);
|
320
|
+
});
|
321
|
+
}
|
322
|
+
}
|
323
|
+
onRemoveNode(nodeId) {
|
324
|
+
const flatNode = this.treeControl.dataNodes.find(item => item.id === nodeId);
|
325
|
+
this.checkListSelection.deselect(flatNode);
|
326
|
+
flatNode && this._handleCheckNode(flatNode);
|
327
|
+
this._checkStateCheckboxAllSearch();
|
328
|
+
}
|
329
|
+
isIndeterminate(node) {
|
330
|
+
const childSelected = this.getListChildrenOfNode(node).filter(item => this.checkListSelection.isSelected(item));
|
331
|
+
return (!!childSelected.length && !this.checkListSelection.isSelected(node));
|
332
|
+
}
|
333
|
+
isCheckAll(node) {
|
334
|
+
const listCheck = [...this.getListChildrenOfNode(node), node];
|
335
|
+
return listCheck.every(item => this.checkListSelection.isSelected(item));
|
336
|
+
}
|
337
|
+
_handleCheckNode(node) {
|
338
|
+
const isSelectedNode = this.checkListSelection.isSelected(node);
|
339
|
+
const isOwnerGroup = !!this.resultGroupSelected.find(gr => (gr === null || gr === void 0 ? void 0 : gr.id) === node.id);
|
340
|
+
if (isSelectedNode) {
|
341
|
+
const children = this.treeDataSourceConfig.includeChildren && this.getListChildrenOfNode(node);
|
342
|
+
children && this.checkListSelection.select(...children);
|
343
|
+
}
|
344
|
+
else {
|
345
|
+
const childSelected = this.getChildrenSelected(node);
|
346
|
+
// check node is owner group or mode is 'include children' and remove all children
|
347
|
+
(isOwnerGroup || this.treeDataSourceConfig.includeChildren) && this.checkListSelection.deselect(...childSelected);
|
348
|
+
}
|
349
|
+
this._updateGroupResult(node);
|
350
|
+
this._updateSingleResult();
|
351
|
+
this.resultSelected = [...this.resultSingleSelected, ...this.resultGroupSelected];
|
352
|
+
this._mapToResultSearch();
|
353
|
+
}
|
354
|
+
// Check group root contain node and re-update chilren
|
355
|
+
_updateGroupResult(node) {
|
356
|
+
const nestedNode = this.convertToNestedNode(node);
|
357
|
+
const existedGroup = this._getExistedGroup(node);
|
358
|
+
const childrenSelected = this._mapToNestedListNode(this.getChildrenSelected(this.convertToFlatNode(existedGroup) || node));
|
359
|
+
const item = this.resultGroupSelected.find(gr => gr.id == nestedNode.id || gr.id === (existedGroup === null || existedGroup === void 0 ? void 0 : existedGroup.id));
|
360
|
+
if (!!item) {
|
361
|
+
item.children = childrenSelected;
|
362
|
+
}
|
363
|
+
else {
|
364
|
+
this.treeDataSourceConfig.includeChildren && this.resultGroupSelected.push(Object.assign(Object.assign({}, nestedNode), { children: childrenSelected }));
|
365
|
+
}
|
366
|
+
this._checkGroupSelected(childrenSelected);
|
367
|
+
}
|
368
|
+
// Check single selected result
|
369
|
+
_updateSingleResult() {
|
370
|
+
let excludeChildOfGroup = [];
|
371
|
+
this.resultGroupSelected.forEach(gr => {
|
372
|
+
excludeChildOfGroup = [...excludeChildOfGroup, ...gr.children.map(x => x.id)];
|
373
|
+
});
|
374
|
+
this.resultSingleSelected = this.treeControl.dataNodes.filter(item => {
|
375
|
+
const isSelected = this.checkListSelection.isSelected(item);
|
376
|
+
const existedGroup = this._getExistedGroup(item);
|
377
|
+
const isOwnerGroup = !!this.resultGroupSelected.find(x => (x === null || x === void 0 ? void 0 : x.id) === item.id);
|
378
|
+
return isSelected && !existedGroup && !isOwnerGroup && !excludeChildOfGroup.includes(item.id);
|
379
|
+
}).map(item => {
|
380
|
+
const nestedNode = this.convertToNestedNode(item);
|
381
|
+
nestedNode.children = null;
|
382
|
+
return nestedNode;
|
383
|
+
});
|
384
|
+
}
|
385
|
+
_checkGroupSelected(childSelected) {
|
386
|
+
this.resultGroupSelected = this.resultGroupSelected.filter(gr => {
|
387
|
+
const flatNode = this.treeControl.dataNodes.find(node => node.id === gr.id);
|
388
|
+
const childSelectedInGroup = gr.children.filter(x => childSelected.includes(x));
|
389
|
+
gr.childCount = this.getListChildrenOfNode(flatNode).length;
|
390
|
+
// if Mode is 'include child' the group list will filter exclude all child selected , ortherwise filter exclude all child in group that node is contained
|
391
|
+
const arrChild = this.treeDataSourceConfig.includeChildren ? childSelected : childSelectedInGroup;
|
392
|
+
return gr.childCount > 0 && this.checkListSelection.isSelected(flatNode) && !arrChild.find(_x => _x.id === gr.id);
|
393
|
+
});
|
394
|
+
}
|
395
|
+
_getExistedGroup(node) {
|
396
|
+
const allParent = this._getAllParentNode(node);
|
397
|
+
const listGroupIds = this.resultGroupSelected.map(gr => gr.id);
|
398
|
+
let existedGroup;
|
399
|
+
allParent.forEach(item => {
|
400
|
+
if (listGroupIds.includes(item.id)) {
|
401
|
+
existedGroup = this.convertToNestedNode(item);
|
402
|
+
}
|
403
|
+
});
|
404
|
+
return existedGroup;
|
405
|
+
}
|
406
|
+
getChildrenSelected(node) {
|
407
|
+
return this.getListChildrenOfNode(node).filter(x => this.checkListSelection.isSelected(x));
|
408
|
+
}
|
409
|
+
getListChildrenOfNode(node) {
|
410
|
+
return this.treeControl.getDescendants(node);
|
411
|
+
}
|
412
|
+
_mapToNestedListNode(flatNodeList) {
|
413
|
+
return flatNodeList.map(item => this.convertToNestedNode(item));
|
414
|
+
}
|
415
|
+
convertToNestedNode(node) {
|
416
|
+
return this.flatTreeNodeMap.get(node);
|
417
|
+
}
|
418
|
+
convertToFlatNode(node) {
|
419
|
+
return this.nestedTreeNodeMap.get(node);
|
420
|
+
}
|
421
|
+
_getRootSelected(node) {
|
422
|
+
const parentList = this._getAllParentNode(node);
|
423
|
+
let groupExist;
|
424
|
+
if (parentList.length) {
|
425
|
+
parentList.forEach(item => {
|
426
|
+
if (this.checkListSelection.isSelected(item)) {
|
427
|
+
groupExist = item;
|
428
|
+
}
|
429
|
+
});
|
430
|
+
}
|
431
|
+
return groupExist;
|
432
|
+
}
|
433
|
+
_getAllParentNode(node) {
|
434
|
+
const listParent = [];
|
435
|
+
let parent = this._getParentNode(node);
|
436
|
+
while (parent) {
|
437
|
+
listParent.push(parent);
|
438
|
+
parent = this._getParentNode(parent);
|
439
|
+
}
|
440
|
+
return listParent;
|
441
|
+
}
|
442
|
+
_getParentNode(node) {
|
443
|
+
const currentLevel = this.getLevel(node);
|
444
|
+
if (currentLevel < 1)
|
445
|
+
return;
|
446
|
+
const index = this.treeControl.dataNodes.indexOf(node) - 1;
|
447
|
+
for (let i = index; i >= 0; i--) {
|
448
|
+
const currentNode = this.treeControl.dataNodes[i];
|
449
|
+
if (this.getLevel(currentNode) < currentLevel) {
|
450
|
+
return currentNode;
|
451
|
+
}
|
452
|
+
}
|
453
|
+
return;
|
454
|
+
}
|
455
|
+
getItemIconType(item) {
|
456
|
+
if (!!item.itemMatIcon)
|
457
|
+
return this.itemIconType.name;
|
458
|
+
if (!!item.itemIconSvg)
|
459
|
+
return this.itemIconType.svg;
|
460
|
+
if (!!item.itemIcon)
|
461
|
+
return this.itemIconType.path;
|
462
|
+
return;
|
463
|
+
}
|
464
|
+
onScrollIntoNode(nodeId) {
|
465
|
+
const flatNode = this.treeControl.dataNodes.find(item => item.id === nodeId);
|
466
|
+
if (!nodeId)
|
467
|
+
return;
|
468
|
+
this.treeControl.expand(flatNode);
|
469
|
+
this.onExpandAllParent(flatNode);
|
470
|
+
const element = this.eleRef.nativeElement.querySelector(`#node-${flatNode.id}`);
|
471
|
+
element && element.scrollIntoView({
|
472
|
+
behavior: 'smooth',
|
473
|
+
block: 'center',
|
474
|
+
});
|
475
|
+
this.getActiveNodeEvent$.next(nodeId);
|
476
|
+
}
|
477
|
+
onSearch() {
|
478
|
+
if (this.formSearchControl.value) {
|
479
|
+
this.isSearching = true;
|
480
|
+
this.onSearchEvent.emit(this.formSearchControl.value);
|
481
|
+
return;
|
482
|
+
}
|
483
|
+
}
|
484
|
+
onClickResultItem(item) {
|
485
|
+
const node = this.treeControl.dataNodes.find(x => item.id === x.id);
|
486
|
+
if (node) {
|
487
|
+
this.scrollToNode(node.id);
|
488
|
+
}
|
489
|
+
}
|
490
|
+
onBreadCrumbItemClick(item) {
|
491
|
+
const node = this.treeControl.dataNodes.find(x => item.id === x.id);
|
492
|
+
if (node) {
|
493
|
+
this.setIndexView(0);
|
494
|
+
of(node.id).pipe(delay(700)).subscribe(res => {
|
495
|
+
this.onScrollIntoNode(res);
|
496
|
+
});
|
497
|
+
}
|
498
|
+
}
|
499
|
+
onCheckItemSearchResult(item) {
|
500
|
+
this.checkListSelectionSearch.toggle(item);
|
501
|
+
if (this.isSelectOne) {
|
502
|
+
this.checkListSelectionSearch.deselect(...this.checkListSelectionSearch.selected.filter(x => x.id !== item.id));
|
503
|
+
}
|
504
|
+
this._handleCheckResutlSearch(item);
|
505
|
+
this._checkStateCheckboxAllSearch();
|
506
|
+
this.onValueChangeEvent.emit(this.resultSelected);
|
507
|
+
}
|
508
|
+
_mapToResultSearch() {
|
509
|
+
if (!!this.resultSearch.length)
|
510
|
+
this.resultSearch.forEach(item => {
|
511
|
+
const node = this.treeControl.dataNodes.find(node => node.id == item.id);
|
512
|
+
this.checkListSelection.isSelected(node) ? this.checkListSelectionSearch.select(item) : this.checkListSelectionSearch.deselect(item);
|
513
|
+
});
|
514
|
+
}
|
515
|
+
_handleCheckResutlSearch(item) {
|
516
|
+
const currentNode = this.treeControl.dataNodes.find(x => item.id === x.id);
|
517
|
+
if (currentNode) {
|
518
|
+
this.checkListSelectionSearch.isSelected(item) ? this.checkListSelection.select(currentNode) : this.checkListSelection.deselect(currentNode);
|
519
|
+
this.isSelectOne ? this._handleSelectOne(currentNode) : this._handleCheckNode(currentNode);
|
520
|
+
}
|
521
|
+
}
|
522
|
+
onSelectAllSearchResult(checked) {
|
523
|
+
this.isSelectAllResultSearch = !checked;
|
524
|
+
const handle = (arr) => {
|
525
|
+
arr.length && arr.forEach(item => {
|
526
|
+
if (this.isSelectAllResultSearch) {
|
527
|
+
!this.checkListSelectionSearch.isSelected(item) && this.checkListSelectionSearch.select(item);
|
528
|
+
}
|
529
|
+
else {
|
530
|
+
this.checkListSelectionSearch.deselect(item);
|
531
|
+
}
|
532
|
+
this._handleCheckResutlSearch(item);
|
533
|
+
});
|
534
|
+
};
|
535
|
+
if (this.treeDataSourceConfig.includeChildren) {
|
536
|
+
const mainGroup = this.pagingResultSearch.filter((item) => {
|
537
|
+
const node = this.treeControl.dataNodes.find(x => x.id === item.id);
|
538
|
+
const existItemGroup = this._getAllParentNode(node).filter(x => this.pagingResultSearch.some(x1 => x1.id === x.id));
|
539
|
+
return existItemGroup.length === 0;
|
540
|
+
});
|
541
|
+
handle(mainGroup);
|
542
|
+
}
|
543
|
+
else {
|
544
|
+
handle(this.pagingResultSearch);
|
545
|
+
}
|
546
|
+
this._checkStateCheckboxAllSearch();
|
547
|
+
this.onValueChangeEvent.emit(this.resultSelected);
|
548
|
+
}
|
549
|
+
_checkStateCheckboxAllSearch() {
|
550
|
+
this.isSelectAllResultSearch = !!this.pagingResultSearch.length && this.pagingResultSearch.every(x => this.checkListSelectionSearch.isSelected(x));
|
551
|
+
this.indeterminateSearchResult = !this.isSelectAllResultSearch && !!this.pagingResultSearch.length && this.pagingResultSearch.some(x => this.checkListSelectionSearch.isSelected(x));
|
552
|
+
}
|
553
|
+
isDisableChecboxAllSearch() {
|
554
|
+
return this.pagingResultSearch.length && this.pagingResultSearch.every(x => x.disabled);
|
555
|
+
}
|
556
|
+
onPagingSearchResult(val) {
|
557
|
+
this.currentPaginationConfig = val;
|
558
|
+
this.pagingResultSearch = this.enablePagingSearch ? this.resultSearch.slice(val.pageIndex * val.pageSize, (val.pageIndex * val.pageSize) + val.pageSize) : this.resultSearch;
|
559
|
+
this._checkStateCheckboxAllSearch();
|
560
|
+
this.onPagingSearchEvent.emit(val);
|
561
|
+
}
|
562
|
+
scrollToNode(nodeId) {
|
563
|
+
// this.getActiveNodeEvent$.next(nodeId);
|
564
|
+
this.scrollToNodeEvent$.next(nodeId);
|
565
|
+
}
|
566
|
+
setIndexView(index) {
|
567
|
+
if (index === 1) {
|
568
|
+
this.treeDataSourceConfig.includeChildren = false;
|
569
|
+
}
|
570
|
+
this.indexView = index;
|
571
|
+
}
|
572
|
+
getSelectedNodeStorage() {
|
573
|
+
return JSON.parse(localStorage.getItem('selectedNode'));
|
574
|
+
}
|
575
|
+
setSelectedNodeStorage(node) {
|
576
|
+
this.treeDataSourceConfig.includeChildren && localStorage.setItem('selectedNode', JSON.stringify(node));
|
577
|
+
}
|
578
|
+
}
|
579
|
+
SelectDepartmentTreeComponent.decorators = [
|
580
|
+
{ type: Component, args: [{
|
581
|
+
selector: 'qms-select-department-tree',
|
582
|
+
template: "<div class=\"qms-select-department-tree-container\">\r\n <div class=\"input-select-department\">\r\n <form (ngSubmit)=\"!isSearching && onSearch()\" *ngIf=\"enableTreeSearch\" class=\"input-field\">\r\n <mat-form-field class=\"w100\" qms-form qms-search-field>\r\n <input [formControl]=\"formSearchControl\" type=\"text\" placeholder=\"Search\" matInput />\r\n <button *ngIf=\"!isSearching\" type=\"submit\" qms-btn-icon color=\"light\" matSuffix>\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <mat-progress-spinner\r\n [@inOutAnimation]\r\n matSuffix\r\n mode=\"indeterminate\"\r\n diameter=\"20\"\r\n *ngIf=\"isSearching\"\r\n ></mat-progress-spinner>\r\n <div *ngIf=\"!!formSearchControl.value && !isSearching\" qms-input-clear matSuffix>\r\n <button qms-btn-icon color=\"light\" [@inOutAnimation]\r\n aria-label=\"Clear\" (click)=\"formSearchControl.reset()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </mat-form-field>\r\n </form>\r\n <div [@inOutAnimation] *ngIf=\"indexView === 1 && textResultSearch\" class=\"sub-text ms-1 fw500\">\r\n {{LANG.RESULT_SEARCH_FOR}}<i><b>\"{{textResultSearch}}\"</b></i>\r\n </div>\r\n <div [class.justify-content-between]=\"enableIncludeChild\" class=\"select__toggle-include toggle-include-child mt-1 d-flex justify-content-end align-items-center\">\r\n <mat-slide-toggle *ngIf=\"enableIncludeChild\" [disabled]=\"indexView === 1\"\r\n [(ngModel)]=\"treeDataSourceConfig.includeChildren\" (ngModelChange)=\"onSlideToggleChange()\" color=\"default\"\r\n qms-group-options>\r\n <span class=\"text-label\">{{treeDataSourceConfig.selectIncludeLabel || LANG.SELECT_INCLUDE_CHILD}}</span>\r\n </mat-slide-toggle>\r\n <button [@inOutAnimation] *ngIf=\"indexView === 1 && enableTreeSearch\" (click)=\"setIndexView(0)\" qms-btn-icon\r\n color=\"light\" [qms-tool-tip]=\"LANG.BACK_TO_TREE\" mode=\"dark\" position=\"top\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button [@inOutAnimation] *ngIf=\"indexView === 0 && enableTreeSearch\" (click)=\"setIndexView(1)\" qms-btn-icon\r\n color=\"light\" [qms-tool-tip]=\"LANG.GOTO_SEACH_RESULT\" mode=\"dark\" position=\"top\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <mat-divider class=\"mx-auto\"></mat-divider>\r\n <div [@animateSlideView]=\"indexView\" class=\"tree-department-wrapper\">\r\n <mat-tree *ngIf=\"indexView === 0\" class=\"select-department-tree\" [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node [@triggerColor]=\"activeNode == node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle\r\n matTreeNodePadding [ngClass]=\"{\r\n 'mat-tree-node-disabled-all': node.disabled\r\n }\">\r\n <button class=\"btn-toggle\" qms-btn-icon color=\"light\" disabled></button>\r\n <ng-container [ngTemplateOutlet]=\"showCheckboxTemplate\" [ngTemplateOutletContext]=\"{ node: node }\">\r\n </ng-container>\r\n </mat-tree-node>\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-tree-node [@triggerColor]=\"activeNode == node.id\" *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding [ngClass]=\"{\r\n 'expand-node': treeControl.isExpanded(node),\r\n 'collapse-node': !treeControl.isExpanded(node),\r\n 'mat-tree-node-disabled': node.disabled\r\n }\">\r\n <div class=\"node-content-wraper\">\r\n <button class=\"btn-toggle\" qms-btn-icon color=\"light\" (click)=\"onExpandNode(node)\" matTreeNodeToggle>\r\n <mat-icon>\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n <ng-container [ngTemplateOutlet]=\"showCheckboxTemplate\r\n \" [ngTemplateOutletContext]=\"{ node: node }\"></ng-container>\r\n <mat-progress-bar *ngIf=\"false\" mode=\"indeterminate\" class=\"example-tree-progress-bar\">\r\n </mat-progress-bar>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"indexView === 1\" class=\"qms-view-search-result\">\r\n <div class=\"\">\r\n <mat-checkbox *ngIf=\"!!resultSearch.length\" [disabled]=\"!resultSearch.length || isSelectOne || isDisableChecboxAllSearch()\" #checkAllSearch [indeterminate]=\"indeterminateSearchResult\"\r\n [checked]=\"isSelectAllResultSearch\" qms-group-options color=\"default\" label=\"none\"\r\n class=\"checkbox-all\"\r\n (click)=\"!isSelectOne && onSelectAllSearchResult(checkAllSearch.checked)\">\r\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}</span>\r\n <span>(<b>{{pagingResultSearch.length}}</b>)</span>\r\n </mat-checkbox>\r\n </div>\r\n <div [@inOutAnimation] *ngIf=\"pagingResultSearch.length\" [class.active-paging]=\"resultSearch.length > 10 && enablePagingSearch\" class=\"result\">\r\n <div *ngFor=\"let item of pagingResultSearch\"\r\n (click)=\"$event.stopPropagation();onClickResultItem(item)\"\r\n [class.active]=\"checkListSelectionSearch.isSelected(item)\" class=\"result-item user-select-none\" matRipple>\r\n <mat-checkbox [disabled]=\"item.disabled\" (click)=\"$event.stopImmediatePropagation(); !item.disabled && onCheckItemSearchResult(item)\"\r\n [checked]=\"checkListSelectionSearch.isSelected(item)\" qms-group-options color=\"default\" label=\"none\">\r\n </mat-checkbox>\r\n <div class=\"item-result-content-wraper\">\r\n <div class=\"text-gray fw-bold fs-base mb0\">{{item.name}}</div>\r\n <qms-breadcrumb [numDisplayItem]=\"6\" (onItemClick)=\"onBreadCrumbItemClick($event)\" *ngIf=\"item.path.length > 1\"\r\n class=\"breadcrumb-container\" [nodes]=\"item.path\">\r\n </qms-breadcrumb>\r\n\r\n <div *ngIf=\"item.path.length === 1\" class=\"d-flex align-items-center\">\r\n <!-- <mat-icon class=\"me-1\">arrow_right</mat-icon> -->\r\n <span class=\"item-breadcrumb-disable\">{{item.path[0].name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [@inOutAnimation] *ngIf=\"!pagingResultSearch.length\" class=\"result no-result\">\r\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\r\n </div>\r\n <mat-divider *ngIf=\"resultSearch.length > 10 && enablePagingSearch\" class=\"mx-auto\"></mat-divider>\r\n <qms-paginator *ngIf=\"resultSearch.length > 10 && enablePagingSearch\" [length]=\"resultSearch.length\"\r\n [numHidden]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 100]\" (page)='onPagingSearchResult($event)'\r\n [size]='PAGINATION_SIZE.medium'>\r\n </qms-paginator>\r\n </div>\r\n </div>\r\n\r\n <!-- Template for Checkbox -->\r\n <ng-template #showCheckboxTemplate let-node=\"node\">\r\n <mat-checkbox [id]=\"'node-'+node.id\" qms-group-options color=\"default\" label=\"none\" class=\"flex-direction-row\"\r\n [checked]=\"checkListSelection.isSelected(node)\" (click)=\"onCheckNode(node)\" [attr.disabled]=\"node.disabled\">\r\n <img *ngIf=\"node.itemIconSvg\" class=\"material-icons type-icon\" [src]=\"node.itemIconSvg\" />\r\n <span *ngIf=\"node.itemIcon\" [class]=\"node.itemIcon\" [qmsTransformIcon]=\"node.itemIcon\"\r\n class=\"material-icons-outlined type-icon\"></span>\r\n <span *ngIf=\"node.itemMatIcon\" class=\"material-icons-outlined type-icon\">{{\r\n node.itemMatIcon }}\r\n </span>\r\n <span class=\"text-name cursor-pointer ml5 123\" [ngClass]=\"{ disabled: node.disabled }\">{{ node.name\r\n }}\r\n </span>\r\n </mat-checkbox>\r\n </ng-template>\r\n</div>\r\n<ng-template #noResult>\r\n <svg width=\"89\" height=\"88\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\"/>\r\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\"/>\r\n <path d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\" fill=\"#0163B3\"/>\r\n </svg>\r\n</ng-template>\r\n",
|
583
|
+
animations: [
|
584
|
+
AnimationTreeDepartment
|
585
|
+
],
|
586
|
+
styles: ["@charset \"UTF-8\";@font-face{font-family:icomoon;src:url(../assets/fonts/icomoon.eot?aghldx);src:url(../assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(../assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(../assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(../assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class^=icon-]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\uE91B\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\uE922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\uE923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\uE924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\uE925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\uE926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\uE927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\uE928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\uE929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\uE92A\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\uE92B\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\uE92C\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\uE92D\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\uE92E\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\uE92F\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\uE930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\uE931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\uE932\"}.icon-add-tooltip:before{content:\"\uE933\"}.icon-admin:before{content:\"\uE934\"}.icon-annual-cycle:before{content:\"\uE935\"}.icon-assignment-repete:before{content:\"\uE936\"}.icon-barrier-add:before{content:\"\uE937\"}.icon-barrier-edit:before{content:\"\uE938\"}.icon-barrier-view:before{content:\"\uE939\"}.icon-button-group:before{content:\"\uE93A\"}.icon-chemical-manager:before{content:\"\uE93B\"}.icon-chronic-health-hazard .path1:before{content:\"\uE93C\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\uE93D\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\uE93E\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\uE93F\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\uE940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\uE941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\uE942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\uE943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\uE944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\uE945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\uE946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\uE947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\uE948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\uE949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\uE94A\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\uE94B\"}.icon-corrosive .path1:before{content:\"\uE94C\";color:#323232}.icon-corrosive .path2:before{content:\"\uE94D\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\uE94E\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\uE94F\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\uE950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\uE951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\uE952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\uE953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\uE954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\uE955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\uE956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\uE957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\uE958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\uE959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\uE95A\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\uE95B\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\uE95C\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\uE95D\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\uE95E\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\uE95F\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\uE960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\uE961\"}.icon-database-sds:before{content:\"\uE962\"}.icon-description-add:before{content:\"\uE963\"}.icon-description-edit:before{content:\"\uE964\"}.icon-description-view:before{content:\"\uE965\";color:#666}.icon-document-read .path1:before{content:\"\uE966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\uE967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\uE968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\uE969\"}.icon-expired-off:before{content:\"\uE96A\"}.icon-expired-on:before{content:\"\uE96B\"}.icon-explosive .path1:before{content:\"\uE96C\";color:#e32730}.icon-explosive .path2:before{content:\"\uE96D\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\uE96E\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\uE96F\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\uE970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\uE971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\uE972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\uE973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\uE974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\uE975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\uE976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\uE977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\uE978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\uE979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\uE97A\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\uE97B\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\uE97C\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\uE97D\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\uE97E\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\uE97F\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\uE980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\uE981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\uE982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\uE983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\uE984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\uE985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\uE986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\uE987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\uE988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\uE989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\uE98A\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\uE98B\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\uE98C\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\uE98D\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\uE98E\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\uE98F\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\uE990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\uE991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\uE992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\uE993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\uE994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\uE995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\uE996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\uE997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\uE998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\uE999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\uE99A\"}.icon-file-pdf:before{content:\"\uE99B\"}.icon-file-pdf-verified .path1:before{content:\"\uE99C\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\uE99D\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\uE99E\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\uE99F\"}.icon-filter-alt:before{content:\"\uE9A0\"}.icon-flammable .path1:before{content:\"\uE9A1\";color:#323232}.icon-flammable .path2:before{content:\"\uE9A2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\uE9A3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\uE9A4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\uE9A5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\uE9A6\";color:#323232}.icon-health-hazard .path2:before{content:\"\uE9A7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\uE9A8\"}.icon-location:before{content:\"\uE9A9\"}.icon-measure-add:before{content:\"\uE9AA\"}.icon-measure-edit:before{content:\"\uE9AB\"}.icon-measure-view:before{content:\"\uE9AC\";color:#666}.icon-messages:before{content:\"\uE9AD\"}.icon-monitoring:before{content:\"\uE9AE\";color:#666}.icon-move:before{content:\"\uE9AF\"}.icon-oxidizing .path1:before{content:\"\uE9B0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\uE9B1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\uE9B2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\uE9B3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\uE9B4\"}.icon-process-area-open:before{content:\"\uE9B5\"}.icon-process-linked .path1:before{content:\"\uE9B6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\uE9B7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\uE9B8\"}.icon-search-in-file:before{content:\"\uE9B9\"}.icon-sort-ascending:before{content:\"\uE9BA\"}.icon-sort-descending:before{content:\"\uE9BB\"}.icon-subscript:before{content:\"\uE9BC\"}.icon-superscript:before{content:\"\uE9BD\"}.icon-syncronice-favorites:before{content:\"\uE9BE\"}.icon-system-settings:before{content:\"\uE9BF\"}.icon-view-three-outlined:before{content:\"\uE9C0\"}.icon-workplace-safety:before{content:\"\uE9C1\"}.icon-checklist:before{content:\"\uE900\"}.icon-department-document .path1:before{content:\"\uE901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\uE902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\uE903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\uE904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\uE905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\uE906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\uE907\"}.icon-dropdown-folder .path1:before{content:\"\uE908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\uE909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\uE90A\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\uE90B\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\uE90C\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\uE90D\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\uE90E\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\uE90F\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\uE910\"}.icon-folder-open:before{content:\"\uE911\"}.icon-keyboard_arrow_down:before{content:\"\uE912\"}.icon-keyboard_arrow_up:before{content:\"\uE913\"}.icon-local-document .path1:before{content:\"\uE914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\uE915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\uE916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\uE917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\uE918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\uE919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\uE91A\"}.icon-regional-document .path1:before{content:\"\uE91C\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\uE91D\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\uE91E\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\uE91F\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\uE920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\uE921\";margin-left:-1em;color:#662e0d}.qms-select-department-tree-container .mr10{margin-right:10px}.qms-select-department-tree-container .mt5{margin-bottom:5px}.qms-select-department-tree-container .mb5{margin-top:5px}.qms-select-department-tree-container .w100{width:100%}.qms-select-department-tree-container .fw500{font-weight:500!important}.qms-select-department-tree-container .text-right{text-align:right}.qms-select-department-tree-container .mt20{margin-top:20px}.qms-select-department-tree-container .text-selected{color:rgba(0,0,0,.6);font-size:12px;line-height:16px;margin-top:1rem}.qms-select-department-tree-container .input-field{display:flex;align-items:center;position:relative}.qms-select-department-tree-container .input-field input.input-search{width:100%;padding:10px;outline:none;border:none;background:var(--background-input-text)}.qms-select-department-tree-container .input-field .btn-search{cursor:pointer;vertical-align:middle;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.qms-select-department-tree-container .input-field .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qms-select-department-tree-container .tree-department-wrapper{height:375px;padding-right:4px;overflow-y:auto;overflow-x:hidden;position:relative}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node{border-radius:4px}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node:hover{background:rgba(0,0,0,.08)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node:active{background:rgba(0,0,0,.12)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active{color:var(--primary);background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active .text-name,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active button,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active .text-name,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active button{color:var(--primary)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active:hover{background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node .text-name,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node button{color:var(--primary)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node:hover{background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .type-icon{margin-right:5px;color:var(--ws-action-active)}.qms-select-department-tree-container .mat-tree.select-department-tree .text-name{color:var(--default-color)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-icon-rtl-mirror{color:rgba(0,0,0,.6)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-icon-button.btn-toggle{width:35px;height:35px;line-height:35px}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all{cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all button.mat-button-disabled{color:rgba(0,0,0,.38)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all .text-name.disabled{color:rgba(0,0,0,.38);cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all.active{background-color:transparent}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled button.mat-button-disabled{color:rgba(0,0,0,.38)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled .text-name.disabled{color:rgba(0,0,0,.38);cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled.active,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled.expand-node:active,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled.expand-node:hover,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled:active,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled:hover{background-color:transparent}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node>.node-content-wraper{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;position:relative;display:flex;justify-content:center;align-items:center}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node>.node-content-wraper>.mat-progress-bar{height:3px;width:100%;position:absolute;bottom:0;left:10px}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node>.node-content-wraper>.mat-progress-bar .mat-progress-bar-fill:after{background:var(--primary)}.qms-select-department-tree-container .text-name{position:relative;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;cursor:pointer;width:100%}.qms-select-department-tree-container .cursor-pointer{cursor:pointer}.qms-select-department-tree-container .ml5{margin-left:10px!important}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .mat-checkbox-layout{white-space:normal}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .mat-checkbox-label{flex-direction:row;align-items:center;position:relative;padding-bottom:2px}.qms-select-department-tree-container .qms-view-search-result{height:375px;width:100%}.qms-select-department-tree-container .qms-view-search-result .result{max-height:calc(100% - 44px);overflow-y:auto;margin-bottom:4px;padding-right:4px}.qms-select-department-tree-container .qms-view-search-result .result.active-paging{max-height:calc(100% - 104px)}.qms-select-department-tree-container .qms-view-search-result .result.no-result{height:100%;display:flex;justify-content:center;align-items:center}.qms-select-department-tree-container .qms-view-search-result .result-item{border-radius:4px;display:grid;grid-template-columns:45px 1fr;align-items:center;cursor:pointer;transition:background .3s ease}.qms-select-department-tree-container .qms-view-search-result .result-item:not(:first-child){margin-top:4px!important}.qms-select-department-tree-container .qms-view-search-result .result-item.active,.qms-select-department-tree-container .qms-view-search-result .result-item:hover{background:linear-gradient(0deg,rgba(1,99,178,.12),rgba(1,99,178,.12)),#fff}.qms-select-department-tree-container .qms-view-search-result .result-item .item-result-content-wraper{padding:5px 15px}.qms-select-department-tree-container .qms-view-search-result ::ng-deep .mat-checkbox.qms-group-options{display:flex;height:100%}.qms-select-department-tree-container ::ng-deep .breadcrumb-container{flex-wrap:wrap}.qms-select-department-tree-container ::ng-deep .mat-button-focus-overlay{background-color:transparent}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item{margin:0}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transition:color .3s ease}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text:not(:last-child){max-width:150px!important}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text:not(:last-child):hover{color:var(--primary)}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-icon{display:flex;align-items:center;justify-content:center}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-form-field-wrapper{padding-bottom:0}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container{min-height:40px}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;justify-content:center;align-items:center}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-total-result span{font-weight:600;font-size:13px;color:rgba(0,0,0,.8)}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-paginator-range-actions{margin-bottom:0;grid-column-gap:2px;-moz-column-gap:2px;column-gap:2px}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-paginator-range-actions>.qms-btn-icon{width:30px;height:30px;line-height:30px}.qms-select-department-tree-container ::ng-deep .qms-paginator>.qms-btn-icon-wrapper{width:30px;height:30px;display:flex;justify-content:center;align-items:center}.qms-select-department-tree-container ::ng-deep .qms-paginator .qms-paginator-page-size{margin-right:12px;height:100%;display:flex;align-items:center;justify-content:center}.qms-select-department-tree-container ::ng-deep .qms-paginator .qms-paginator-page-size>.qms-form-page-size .mat-form-field-flex{width:60px;height:30px;display:flex;align-items:center;padding:0 4px}.qms-select-department-tree-container ::ng-deep .qms-paginator .qms-paginator-page-size>.qms-form-page-size .mat-form-field-flex .mat-form-field-infix{height:30px}.qms-select-department-tree-container ::ng-deep .qms-paginator .qms-paginator-page-size>.qms-pagesize-label{display:none}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-form-field.qms-form .mat-select-min-line,.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-form-field.qms-form mat-select-trigger{font-size:14px}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-select-value{text-align:center}.qms-select-department-tree-container .text-gray{color:#242424}.qms-select-department-tree-container .mb0{margin-bottom:0!important}.qms-select-department-tree-container .fs-base{font-size:14px!important}.qms-select-department-tree-container .user-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .item-breadcrumb-disable{cursor:not-allowed;color:rgba(0,0,0,.6);font-weight:400;font-size:14px}.qms-select-department-tree-container ::ng-deep .mat-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row;align-items:center;grid-column-gap:4px;-moz-column-gap:4px;column-gap:4px}"]
|
587
|
+
},] }
|
588
|
+
];
|
589
|
+
SelectDepartmentTreeComponent.ctorParameters = () => [
|
590
|
+
{ type: ChangeDetectorRef },
|
591
|
+
{ type: DomSanitizer },
|
592
|
+
{ type: QMSIconRegistryService },
|
593
|
+
{ type: MatIconRegistry },
|
594
|
+
{ type: ElementRef },
|
595
|
+
{ type: TranslateLibraryService }
|
596
|
+
];
|
597
|
+
SelectDepartmentTreeComponent.propDecorators = {
|
598
|
+
enableIncludeChild: [{ type: Input }],
|
599
|
+
enableTreeSearch: [{ type: Input }],
|
600
|
+
isSelectOne: [{ type: Input }],
|
601
|
+
activeViewSearch: [{ type: Input }],
|
602
|
+
treeData: [{ type: Input }],
|
603
|
+
selectedList: [{ type: Input }],
|
604
|
+
selectIncludeLabel: [{ type: Input }],
|
605
|
+
checkSearchMappingTree: [{ type: Input }],
|
606
|
+
enablePagingSearch: [{ type: Input }],
|
607
|
+
onSearchEvent: [{ type: Output }],
|
608
|
+
onPagingSearchEvent: [{ type: Output }],
|
609
|
+
onValueChangeEvent: [{ type: Output }]
|
610
|
+
};
|
611
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBWSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FB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QUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUcsQ0FBQzs7O1lBaG9CRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtnQkFDdEMsZ2dSQUFzRDtnQkFFdEQsVUFBVSxFQUFDO29CQUNULHVCQUF1QjtpQkFDeEI7O2FBQ0Y7OztZQTFCUSxpQkFBaUI7WUFLakIsWUFBWTtZQU1aLHNCQUFzQjtZQVR0QixlQUFlO1lBRmUsVUFBVTtZQVV4Qyx1QkFBdUI7OztpQ0FtQjdCLEtBQUs7K0JBQ0wsS0FBSzswQkFDTCxLQUFLOytCQUNMLEtBQUs7dUJBRUwsS0FBSzsyQkFJTCxLQUFLO2lDQUlMLEtBQUs7cUNBSUwsS0FBSztpQ0FDTCxLQUFLOzRCQUNMLE1BQU07a0NBQ04sTUFBTTtpQ0FjTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG9mLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWxheSwgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBRTVNGbGF0Tm9kZVRyZWUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1mbGF0LW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLXRyZWUtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uU2l6ZSB9IGZyb20gJy4uL3Ftcy1wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBJdGVtSWNvblR5cGUgfSBmcm9tICcuLi9yZWxhdGVkL2NvbW1vbi9pdGVtLWljb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgQW5pbWF0aW9uVHJlZURlcGFydG1lbnQgfSBmcm9tICcuL2FuaW1hdGlvbi9hbmltYXRpb24nO1xyXG5pbXBvcnQgeyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iLCBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwgfSBmcm9tICcuL21vZGVsL2RlcGFydG1lbnQtc2VhcmNoLXJlc3VsdC5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbmZpZyc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncW1zLXNlbGVjdC1kZXBhcnRtZW50LXRyZWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczpbXHJcbiAgICBBbmltYXRpb25UcmVlRGVwYXJ0bWVudFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdERlcGFydG1lbnRUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBMQU5HOiBhbnk7XHJcbiAgQElucHV0KCkgZW5hYmxlSW5jbHVkZUNoaWxkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlVHJlZVNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzU2VsZWN0T25lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWN0aXZlVmlld1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRyZWVEYXRhU291cmNlQ29uZmlnID0gbmV3IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnKCk7XHJcbiAgQElucHV0KCkgc2V0IHRyZWVEYXRhKHZhbHVlOiBRTVNUcmVlTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnRyZWVEYXRhID0gdmFsdWUgfHwgW107XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcudHJlZURhdGEpO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgc2VsZWN0ZWRMaXN0KHZhbHVlOiBRTVNUcmVlTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnNlbGVjdGVkTGlzdCA9IHZhbHVlIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHNlbGVjdEluY2x1ZGVMYWJlbCAobGFiZWw6IHN0cmluZyl7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnNlbGVjdEluY2x1ZGVMYWJlbCA9IGxhYmVsO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgY2hlY2tTZWFyY2hNYXBwaW5nVHJlZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZW5hYmxlUGFnaW5nU2VhcmNoIDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQE91dHB1dCgpIG9uU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgb25QYWdpbmdTZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PigpO1xyXG5cclxuICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBpc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICByZXN1bHRHcm91cFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XHJcbiAgcmVzdWx0U2luZ2xlU2VsZWN0ZWQ6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuICByZXN1bHRTZWFyY2hTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSA9IFtdO1xyXG4gIHJlc3VsdFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XHJcblxyXG4gIGdldCBjdXJyZW50VHJlZURhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXREYXRhVHJlZSQudmFsdWU7XHJcbiAgfVxyXG4gIGdldERhdGFUcmVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TVHJlZU5vZGVbXT4oW10pO1xyXG4gIEBPdXRwdXQoKSBvblZhbHVlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1RyZWVOb2RlW10+KCk7XHJcbiAgc2VhcmNoRGVwYXJ0bWVudCQgPSBuZXcgU3ViamVjdDxRTVNGbGF0Tm9kZVRyZWVbXT4oKTtcclxuXHJcbiAgcmVzdWx0U2VhcmNoOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWxbXSA9IFtdO1xyXG4gIHBhZ2luZ1Jlc3VsdFNlYXJjaDogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsW10gPSBbXTtcclxuICBpc1NlbGVjdEFsbFJlc3VsdFNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGluZGV0ZXJtaW5hdGVTZWFyY2hSZXN1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGN1cnJlbnRQYWdpbmF0aW9uQ29uZmlnOiBQYWdlRXZlbnQgPSB7XHJcbiAgICBwYWdlSW5kZXg6IDAsXHJcbiAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICBsZW5ndGg6IDBcclxuICB9O1xyXG5cclxuICBpbmRleFZpZXc6IG51bWJlciA9IDA7XHJcbiAgc2Nyb2xsVG9Ob2RlRXZlbnQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIGFjdGl2ZU5vZGU6IHN0cmluZyA9ICcnO1xyXG4gIGdldEFjdGl2ZU5vZGVFdmVudCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcblxyXG4gIFBBR0lOQVRJT05fU0laRSA9IFBhZ2luYXRpb25TaXplO1xyXG4gIG5lc3RlZFRyZWVOb2RlTWFwID0gbmV3IE1hcDxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPigpO1xyXG4gIGZsYXRUcmVlTm9kZU1hcCA9IG5ldyBNYXA8UU1TRmxhdE5vZGVUcmVlLCBRTVNUcmVlTm9kZT4oKTtcclxuICBjaGVja0xpc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8UU1TRmxhdE5vZGVUcmVlPih0cnVlKTtcclxuICBjaGVja0xpc3RTZWxlY3Rpb25TZWFyY2ggPSBuZXcgU2VsZWN0aW9uTW9kZWw8RGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsPih0cnVlKTtcclxuICB0cmVlQ29udHJvbDogRmxhdFRyZWVDb250cm9sPFFNU0ZsYXROb2RlVHJlZT47XHJcbiAgdHJlZUZsYXR0ZW5lcjogTWF0VHJlZUZsYXR0ZW5lcjxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcclxuICBkYXRhU291cmNlOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XHJcblxyXG4gIGRhdGFTb3VyY2VUcmVlU2VhcmNoOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XHJcblxyXG4gIGZvcm1TZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICBpc1NlYXJjaGluZyA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZXh0UmVzdWx0U2VhcmNoOiBzdHJpbmcgPSAnJztcclxuICBpdGVtSWNvblR5cGUgPSBJdGVtSWNvblR5cGU7XHJcbiAgX3RyYW5zZm9ybWVyID0gKG5vZGU6IFFNU1RyZWVOb2RlLCBsZXZlbDogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuY29udmVydFRvRmxhdE5vZGUobm9kZSkgfHwgbmV3IFFNU0ZsYXROb2RlVHJlZSgpO1xyXG4gICAgZmxhdE5vZGUuaWQgPSBub2RlLmlkO1xyXG4gICAgZmxhdE5vZGUubmFtZSA9IG5vZGUubmFtZTtcclxuICAgIGZsYXROb2RlLmV4cGFuZGFibGUgPSAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHx8ICghIW5vZGUuY2hpbGRDb3VudCk7XHJcbiAgICBmbGF0Tm9kZS5sZXZlbCA9IGxldmVsO1xyXG4gICAgZmxhdE5vZGUucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xyXG4gICAgZmxhdE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSAhIW5vZGUuY2hpbGRyZW4/Lmxlbmd0aDtcclxuICAgIGZsYXROb2RlLnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcclxuICAgIGZsYXROb2RlLml0ZW1JY29uID0gbm9kZS5pdGVtSWNvbjtcclxuICAgIGZsYXROb2RlLml0ZW1JY29uU3ZnID0gbm9kZS5pdGVtSWNvblN2ZztcclxuICAgIGZsYXROb2RlLmlzRmlsZSA9IG5vZGUuaXNGaWxlO1xyXG4gICAgZmxhdE5vZGUuZGlzYWJsZWQgPSBub2RlLmRpc2FibGVkO1xyXG4gICAgdGhpcy5mbGF0VHJlZU5vZGVNYXAuc2V0KGZsYXROb2RlLCBub2RlKTtcclxuICAgIHRoaXMubmVzdGVkVHJlZU5vZGVNYXAuc2V0KG5vZGUsIGZsYXROb2RlKTtcclxuICAgIHJldHVybiBmbGF0Tm9kZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TGV2ZWwgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlPy5sZXZlbDtcclxuICBwcml2YXRlIF9nZXRDaGlsZCA9IChub2RlOiBRTVNUcmVlTm9kZSkgPT4gbm9kZS5jaGlsZHJlbjtcclxuICBwcml2YXRlIGlzRXhwYW5kYWJsZSA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGUuZXhwYW5kYWJsZTtcclxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXHJcbiAgICBwcml2YXRlIGVsZVJlZjogRWxlbWVudFJlZixcclxuICAgIHB1YmxpYyB0cmFuczogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPFFNU0ZsYXROb2RlVHJlZT4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xyXG4gICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIodGhpcy5fdHJhbnNmb3JtZXIsIHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlLCB0aGlzLl9nZXRDaGlsZCk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgICAvLyBJbml0IHRyZWUgZGF0YVxyXG4gICAgdGhpcy5nZXREYXRhVHJlZSRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xyXG4gICAgICB9KTtcclxuICAgIC8vIFJlZ2lzdGVyIGljb25cclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzQXJlYUljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJGb2xkZXJJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRGV2aWF0aW9uSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckNoZWNrbGlzdEljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJSaXNrSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcblxyXG4gICAgdGhpcy50cmFucy5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFucy5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hEZXBhcnRtZW50JFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzdWx0U2VhcmNoID0gW107XHJcbiAgICAgICAgaWYocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGgpe1xyXG4gICAgICAgICAgcmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBub2RlID8gdGhpcy5fZ2V0QWxsUGFyZW50Tm9kZShub2RlKSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaC5wdXNoKHtcclxuICAgICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmNoZWNrU2VhcmNoTWFwcGluZ1RyZWUgJiYgIW5vZGUgLFxyXG4gICAgICAgICAgICAgIHBhdGg6IFtcclxuICAgICAgICAgICAgICAgIC4uLihwYXJlbnRzLm1hcCgoeCwgaW5kZXgpID0+KHtcclxuICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcclxuICAgICAgICAgICAgICAgIH0gYXMgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikpLnJldmVyc2UoKSB8fCBbXSksXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdpbmF0aW9uQ29uZmlnLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgICAgIHRoaXMuaXNTZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRleHRSZXN1bHRTZWFyY2ggPSB0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub25QYWdpbmdTZWFyY2hSZXN1bHQodGhpcy5jdXJyZW50UGFnaW5hdGlvbkNvbmZpZyk7XHJcbiAgICAgICAgdGhpcy5fbWFwVG9SZXN1bHRTZWFyY2goKTtcclxuICAgICAgICB0aGlzLl9jaGVja1N0YXRlQ2hlY2tib3hBbGxTZWFyY2goKTtcclxuICAgICAgICB0aGlzLnNldEluZGV4VmlldygxKTtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsVG9Ob2RlRXZlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksc3dpdGNoTWFwKCh2YWwpPT4ge1xyXG4gICAgICBjb25zdCBkZWxheVRpbWluZyA9IHRoaXMuaW5kZXhWaWV3ID09PSAxID8gNzAwIDogMDtcclxuICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMCk7XHJcbiAgICAgIHJldHVybiBvZih2YWwpLnBpcGUoZGVsYXkoZGVsYXlUaW1pbmcpKTtcclxuICAgIH0pKS5zdWJzY3JpYmUocmVzID0+e1xyXG4gICAgICB0aGlzLm9uU2Nyb2xsSW50b05vZGUocmVzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2V0QWN0aXZlTm9kZUV2ZW50JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBzd2l0Y2hNYXAodmFsID0+IHtcclxuICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdmFsO1xyXG4gICAgICByZXR1cm4gdGltZXIoMTUwMCk7XHJcbiAgICB9KSkuc3Vic2NyaWJlKCBfID0+e1xyXG4gICAgICB0aGlzLmFjdGl2ZU5vZGUgPSAnJztcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmNoYW5nZWRcclxuICAgIC8vIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgLy8gLnN1YnNjcmliZShyZXN1bHQgPT57XHJcbiAgICAvLyAgIGNvbnN0IHsgYWRkZWQsIHJlbW92ZWQgfSA9IHJlc3VsdDtcclxuICAgIC8vICAgaWYoYWRkZWQubGVuZ3RoKXtcclxuICAgIC8vICAgICBjb25zdCBub2RlcyA9IGFkZGVkLm1hcChpdGVtID0+KHtcclxuICAgIC8vICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgLy8gICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgLy8gICAgICAgY2hpbGRyZW46IG51bGwsXHJcbiAgICAvLyAgICAgfSBhcyBRTVNUcmVlTm9kZSkpLmZpbHRlcihpdGVtID0+ICF0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKHggPT4gaXRlbS5pZCA9PSB4LmlkKSk7XHJcbiAgICAvLyAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKC4uLm5vZGVzKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBpZihyZW1vdmVkLmxlbmd0aCl7XHJcbiAgICAvLyAgICAgcmVtb3ZlZC5mb3JFYWNoKGl0ZW0gPT57XHJcbiAgICAvLyAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCApO1xyXG4gICAgLy8gICAgICAgaWYoaW5kZXg+PTApe1xyXG4gICAgLy8gICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfSlcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2luaXRUcmVlRGF0YSgpO1xyXG4gICAgdGhpcy5faW5pdENoZWNrTGlzdFNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRUcmVlRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnRyZWVEYXRhLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcudHJlZURhdGEuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0ucGFyZW50SWQpXHJcbiAgICAgICAgLm1hcCgoaXRlbSwgX2luZGV4KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBub2RlID0ge1xyXG4gICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICBtYXJrZWRHZXRDaGlsZHJlbjogaXRlbS5tYXJrZWRHZXRDaGlsZHJlbixcclxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5kaXNhYmxlZExpc3QuaW5jbHVkZXMoaXRlbS5pZCksXHJcbiAgICAgICAgICAgIGl0ZW1JY29uOiBpdGVtLml0ZW1JY29uLFxyXG4gICAgICAgICAgICBpdGVtTWF0SWNvbjogaXRlbS5pdGVtTWF0SWNvbixcclxuICAgICAgICAgICAgaXRlbUljb25Tdmc6IGl0ZW0uaXRlbUljb25TdmdcclxuICAgICAgICAgIH0gYXMgUU1TVHJlZU5vZGVcclxuICAgICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgaWYoIXJvb3ROb2RlLmxlbmd0aCkgdGhyb3coJ0RhdGEgaW52YWxpZC4nKTtcclxuICAgICAgdGhpcy51cGRhdGVEYXRhVHJlZShyb290Tm9kZSk7XHJcbiAgICAgIGNvbnN0IGdyb3VwUmVzdWx0ID0gdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy50cmVlRGF0YS5maWx0ZXIoeCA9PiB4LnBhcmVudElkKS5yZWR1Y2UoKHJlc3VsdCwgY3VycmVudFZhbHVlKSA9PiB7XHJcbiAgICAgICAgKHJlc3VsdFtjdXJyZW50VmFsdWVbJ3BhcmVudElkJ11dID0gcmVzdWx0W2N1cnJlbnRWYWx1ZVsncGFyZW50SWQnXV0gfHwgW10pLnB1c2goXHJcbiAgICAgICAgICBjdXJyZW50VmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0sIHt9KTtcclxuXHJcbiAgICAgIGNvbnN0IGdldEFsbFBhcmVudCA9IChwYXJlbnRJZDogc3RyaW5nKSA9PntcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcudHJlZURhdGEuZmluZCh4ID0+IHguaWQgPT0gcGFyZW50SWQpO1xyXG4gICAgICAgIHdoaWxlKHBhcmVudCl7XHJcbiAgICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcclxuICAgICAgICAgIHBhcmVudCA9IHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcudHJlZURhdGEuZmluZCh4ID0+IHguaWQgPT0gcGFyZW50LnBhcmVudElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKCEocm9vdE5vZGUgJiYgISFyb290Tm9kZS5sZW5ndGgpKSByZXR1cm47XHJcbiAgICAgIGxldCBncm91cFJlc3VsdEtleSA9IE9iamVjdC5rZXlzKGdyb3VwUmVzdWx0KS5maWx0ZXIoeCA9PiBnZXRBbGxQYXJlbnQoeCkubGVuZ3RoKTtcclxuICAgICAgd2hpbGUoZ3JvdXBSZXN1bHRLZXkubGVuZ3RoKSB7XHJcbiAgICAgICAgZ3JvdXBSZXN1bHRLZXkgPSBncm91cFJlc3VsdEtleS5maWx0ZXIoKGtleSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50RmxhdE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0ga2V5KTtcclxuICAgICAgICAgIGlmIChwYXJlbnRGbGF0Tm9kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnROZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHBhcmVudEZsYXROb2RlKTtcclxuICAgICAgICAgICAgcGFyZW50TmVzdGVkTm9kZS5tYXJrZWRHZXRDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHBhcmVudE5lc3RlZE5vZGUuY2hpbGRyZW4gPSBfLmNsb25lRGVlcChncm91cFJlc3VsdFtrZXldKTtcclxuICAgICAgICAgICAgcGFyZW50TmVzdGVkTm9kZS5jaGlsZENvdW50ID0gcGFyZW50TmVzdGVkTm9kZS5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xyXG4gICAgICAgICAgICBncm91cFJlc3VsdFtrZXldID0gW107XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0Q2hlY2tMaXN0U2VsZWN0ZWQoKSB7XHJcbiAgICBpZiAoIXRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuc2VsZWN0ZWRMaXN0Lmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5yZXN1bHRHcm91cFNlbGVjdGVkID0gdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5zZWxlY3RlZExpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5jaGlsZHJlbik7XHJcbiAgICB0aGlzLnJlc3VsdFNpbmdsZVNlbGVjdGVkID0gdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5zZWxlY3RlZExpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5jaGlsZHJlbiA9PT0gbnVsbCk7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnNlbGVjdGVkTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgaWYgKGZsYXROb2RlKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcclxuICAgICAgICBpdGVtLmNoaWxkcmVuPy5sZW5ndGggJiYgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKF94ID0+IF94LmlkID09PSBjaGlsZC5pZCk7XHJcbiAgICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMub25FeHBhbmRBbGxQYXJlbnQobm9kZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLm9uRXhwYW5kQWxsUGFyZW50KGZsYXROb2RlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gWy4uLnRoaXMucmVzdWx0U2luZ2xlU2VsZWN0ZWQsIC4uLiB0aGlzLnJlc3VsdEdyb3VwU2VsZWN0ZWRdO1xyXG4gICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXRhVHJlZShkYXRhOiBRTVNUcmVlTm9kZVtdKSB7XHJcbiAgICB0aGlzLmdldERhdGFUcmVlJC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVzdWx0U2VhcmNoKGRhdGE6IFFNU0ZsYXROb2RlVHJlZVtdKSB7XHJcbiAgICB0aGlzLnNlYXJjaERlcGFydG1lbnQkLm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBvbkV4cGFuZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgb25PcHRpb25TZWFyY2hTZWxlY3RlZCh2YWx1ZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSB2YWx1ZS5pZCk7XHJcbiAgICBpZiAoIWZsYXROb2RlKSByZXR1cm47XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5faGFuZGxlQ2hlY2tOb2RlKGZsYXROb2RlKTtcclxuICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShmbGF0Tm9kZS5pZCk7XHJcbiAgfVxyXG5cclxuICBvblNsaWRlVG9nZ2xlQ2hhbmdlKCkge1xyXG5cclxuICB9XHJcblxyXG4gIGRpc3BsYXlXaGVuU2VsZWN0RGVwYXJ0bWVudE9wdGlvbigkZXZlbnQ6IGFueSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgb25DaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XHJcbiAgICBpZiAodGhpcy5pc1NlbGVjdE9uZSkge1xyXG4gICAgICB0aGlzLl9oYW5kbGVTZWxlY3RPbmUobm9kZSk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLl9oYW5kbGVDaGVja05vZGUobm9kZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgdGhpcy5fbWFwVG9SZXN1bHRTZWFyY2goKTtcclxuICAgIHRoaXMuX2NoZWNrU3RhdGVDaGVja2JveEFsbFNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlU2VsZWN0T25lKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSl7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgIT09IG5vZGUuaWQpO1xyXG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5zZWxlY3RlZCk7XHJcbiAgICAgIGlmICh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpKSB7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZSh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZFswXSk7XHJcbiAgICAgICAgY29uc3QgaXRlbVNlbGVjdGVkID0ge1xyXG4gICAgICAgICAgLi4ubmVzdGVkTm9kZSxcclxuICAgICAgICAgIGNoaWxkcmVuOiBudWxsXHJcbiAgICAgICAgfSBhcyBRTVNUcmVlTm9kZTtcclxuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW2l0ZW1TZWxlY3RlZF07XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbXTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kQWxsUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgcGFyZW50cyA9IHRoaXMuX2dldEFsbFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICBpZiAocGFyZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHBhcmVudHMuZm9yRWFjaChwYXJlbnQgPT4ge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHBhcmVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZW1vdmVOb2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBub2RlSWQpO1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoZmxhdE5vZGUpO1xyXG4gICAgZmxhdE5vZGUgJiYgdGhpcy5faGFuZGxlQ2hlY2tOb2RlKGZsYXROb2RlKTtcclxuICAgIHRoaXMuX2NoZWNrU3RhdGVDaGVja2JveEFsbFNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgaXNJbmRldGVybWluYXRlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgY2hpbGRTZWxlY3RlZCA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcihpdGVtID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSkpO1xyXG4gICAgcmV0dXJuICghIWNoaWxkU2VsZWN0ZWQubGVuZ3RoICYmICF0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpKTtcclxuICB9XHJcblxyXG4gIGlzQ2hlY2tBbGwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBsaXN0Q2hlY2sgPSBbLi4udGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSksIG5vZGVdO1xyXG4gICAgcmV0dXJuIGxpc3RDaGVjay5ldmVyeShpdGVtID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQ2hlY2tOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgaXNTZWxlY3RlZE5vZGUgPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xyXG4gICAgY29uc3QgaXNPd25lckdyb3VwID0gISF0aGlzLnJlc3VsdEdyb3VwU2VsZWN0ZWQuZmluZChnciA9PiBncj8uaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgaWYgKGlzU2VsZWN0ZWROb2RlKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5pbmNsdWRlQ2hpbGRyZW4gJiYgdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSk7XHJcbiAgICAgIGNoaWxkcmVuICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5jaGlsZHJlbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3QgY2hpbGRTZWxlY3RlZCA9IHRoaXMuZ2V0Q2hpbGRyZW5TZWxlY3RlZChub2RlKTtcclxuICAgICAgLy8gY2hlY2sgbm9kZSBpcyBvd25lciBncm91cCBvciBtb2RlIGlzICdpbmNsdWRlIGNoaWxkcmVuJyBhbmQgcmVtb3ZlIGFsbCBjaGlsZHJlblxyXG4gICAgICAoaXNPd25lckdyb3VwIHx8IHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuaW5jbHVkZUNoaWxkcmVuKSAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5jaGlsZFNlbGVjdGVkKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwZGF0ZUdyb3VwUmVzdWx0KG5vZGUpO1xyXG4gICAgdGhpcy5fdXBkYXRlU2luZ2xlUmVzdWx0KCk7XHJcbiAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gWy4uLnRoaXMucmVzdWx0U2luZ2xlU2VsZWN0ZWQsIC4uLnRoaXMucmVzdWx0R3JvdXBTZWxlY3RlZF07XHJcbiAgICB0aGlzLl9tYXBUb1Jlc3VsdFNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgZ3JvdXAgcm9vdCBjb250YWluIG5vZGUgYW5kIHJlLXVwZGF0ZSBjaGlscmVuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlR3JvdXBSZXN1bHQobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgY29uc3QgZXhpc3RlZEdyb3VwID0gdGhpcy5fZ2V0RXhpc3RlZEdyb3VwKG5vZGUpO1xyXG4gICAgY29uc3QgY2hpbGRyZW5TZWxlY3RlZCA9IHRoaXMuX21hcFRvTmVzdGVkTGlzdE5vZGUodGhpcy5nZXRDaGlsZHJlblNlbGVjdGVkKHRoaXMuY29udmVydFRvRmxhdE5vZGUoZXhpc3RlZEdyb3VwKSB8fCBub2RlKSk7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5yZXN1bHRHcm91cFNlbGVjdGVkLmZpbmQoZ3IgPT4gZ3IuaWQgPT0gbmVzdGVkTm9kZS5pZCB8fCBnci5pZCA9PT0gZXhpc3RlZEdyb3VwPy5pZCk7XHJcbiAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgIGl0ZW0uY2hpbGRyZW4gPSBjaGlsZHJlblNlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuaW5jbHVkZUNoaWxkcmVuICYmIHRoaXMucmVzdWx0R3JvdXBTZWxlY3RlZC5wdXNoKHsgLi4ubmVzdGVkTm9kZSwgY2hpbGRyZW46IGNoaWxkcmVuU2VsZWN0ZWQgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jaGVja0dyb3VwU2VsZWN0ZWQoY2hpbGRyZW5TZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBzaW5nbGUgc2VsZWN0ZWQgcmVzdWx0XHJcbiAgcHJpdmF0ZSBfdXBkYXRlU2luZ2xlUmVzdWx0KCkge1xyXG4gICAgbGV0IGV4Y2x1ZGVDaGlsZE9mR3JvdXAgPSBbXTtcclxuICAgIHRoaXMucmVzdWx0R3JvdXBTZWxlY3RlZC5mb3JFYWNoKGdyID0+IHtcclxuICAgICAgZXhjbHVkZUNoaWxkT2ZHcm91cCA9IFsuLi5leGNsdWRlQ2hpbGRPZkdyb3VwLCAuLi5nci5jaGlsZHJlbi5tYXAoeCA9PiB4LmlkKV1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVzdWx0U2luZ2xlU2VsZWN0ZWQgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGl0ZW0pO1xyXG4gICAgICBjb25zdCBleGlzdGVkR3JvdXAgPSB0aGlzLl9nZXRFeGlzdGVkR3JvdXAoaXRlbSk7XHJcbiAgICAgIGNvbnN0IGlzT3duZXJHcm91cCA9ICEhdGhpcy5yZXN1bHRHcm91cFNlbGVjdGVkLmZpbmQoeCA9PiB4Py5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgIHJldHVybiBpc1NlbGVjdGVkICYmICFleGlzdGVkR3JvdXAgJiYgIWlzT3duZXJHcm91cCAmJiAhZXhjbHVkZUNoaWxkT2ZHcm91cC5pbmNsdWRlcyhpdGVtLmlkKTtcclxuICAgIH0pLm1hcChpdGVtID0+IHtcclxuICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShpdGVtKTtcclxuICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IG51bGw7XHJcbiAgICAgIHJldHVybiBuZXN0ZWROb2RlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGVja0dyb3VwU2VsZWN0ZWQoY2hpbGRTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSkge1xyXG4gICAgdGhpcy5yZXN1bHRHcm91cFNlbGVjdGVkID0gdGhpcy5yZXN1bHRHcm91cFNlbGVjdGVkLmZpbHRlcihnciA9PiB7XHJcbiAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGdyLmlkKTtcclxuICAgICAgY29uc3QgY2hpbGRTZWxlY3RlZEluR3JvdXAgPSBnci5jaGlsZHJlbi5maWx0ZXIoeCA9PiBjaGlsZFNlbGVjdGVkLmluY2x1ZGVzKHgpKTtcclxuICAgICAgZ3IuY2hpbGRDb3VudCA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKGZsYXROb2RlKS5sZW5ndGg7XHJcbiAgICAgIC8vIGlmIE1vZGUgaXMgJ2luY2x1ZGUgY2hpbGQnIHRoZSBncm91cCBsaXN0IHdpbGwgZmlsdGVyIGV4Y2x1ZGUgYWxsIGNoaWxkIHNlbGVjdGVkICwgb3J0aGVyd2lzZSBmaWx0ZXIgZXhjbHVkZSBhbGwgY2hpbGQgaW4gZ3JvdXAgdGhhdCBub2RlIGlzIGNvbnRhaW5lZFxyXG4gICAgICBjb25zdCBhcnJDaGlsZCA9IHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuaW5jbHVkZUNoaWxkcmVuID8gY2hpbGRTZWxlY3RlZCA6IGNoaWxkU2VsZWN0ZWRJbkdyb3VwO1xyXG4gICAgICByZXR1cm4gZ3IuY2hpbGRDb3VudCA+IDAgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChmbGF0Tm9kZSkgJiYgIWFyckNoaWxkLmZpbmQoX3ggPT4gX3guaWQgPT09IGdyLmlkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0RXhpc3RlZEdyb3VwKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5fZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIGNvbnN0IGxpc3RHcm91cElkcyA9IHRoaXMucmVzdWx0R3JvdXBTZWxlY3RlZC5tYXAoZ3IgPT4gZ3IuaWQpO1xyXG4gICAgbGV0IGV4aXN0ZWRHcm91cDtcclxuICAgIGFsbFBhcmVudC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAobGlzdEdyb3VwSWRzLmluY2x1ZGVzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgZXhpc3RlZEdyb3VwID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIGV4aXN0ZWRHcm91cDtcclxuICB9XHJcblxyXG4gIGdldENoaWxkcmVuU2VsZWN0ZWQobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcih4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoeCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tYXBUb05lc3RlZExpc3ROb2RlKGZsYXROb2RlTGlzdDogUU1TRmxhdE5vZGVUcmVlW10pOiBRTVNUcmVlTm9kZVtdIHtcclxuICAgIHJldHVybiBmbGF0Tm9kZUxpc3QubWFwKGl0ZW0gPT4gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb05lc3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mbGF0VHJlZU5vZGVNYXAuZ2V0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRvRmxhdE5vZGUobm9kZTogUU1TVHJlZU5vZGUpIHtcclxuICAgIHJldHVybiB0aGlzLm5lc3RlZFRyZWVOb2RlTWFwLmdldChub2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJvb3RTZWxlY3RlZChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUge1xyXG4gICAgY29uc3QgcGFyZW50TGlzdCA9IHRoaXMuX2dldEFsbFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICBsZXQgZ3JvdXBFeGlzdDogUU1TRmxhdE5vZGVUcmVlO1xyXG4gICAgaWYgKHBhcmVudExpc3QubGVuZ3RoKSB7XHJcbiAgICAgIHBhcmVudExpc3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChpdGVtKSkge1xyXG4gICAgICAgICAgZ3JvdXBFeGlzdCA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cEV4aXN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0QWxsUGFyZW50Tm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWVbXSB7XHJcbiAgICBjb25zdCBsaXN0UGFyZW50ID0gW107XHJcbiAgICBsZXQgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50Tm9kZShub2RlKTtcclxuICAgIHdoaWxlIChwYXJlbnQpIHtcclxuICAgICAgbGlzdFBhcmVudC5wdXNoKHBhcmVudCk7XHJcbiAgICAgIHBhcmVudCA9IHRoaXMuX2dldFBhcmVudE5vZGUocGFyZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsaXN0UGFyZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UGFyZW50Tm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUge1xyXG4gICAgY29uc3QgY3VycmVudExldmVsID0gdGhpcy5nZXRMZXZlbChub2RlKTtcclxuICAgIGlmIChjdXJyZW50TGV2ZWwgPCAxKSByZXR1cm47XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmluZGV4T2Yobm9kZSkgLSAxO1xyXG4gICAgZm9yIChsZXQgaSA9IGluZGV4OyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldO1xyXG4gICAgICBpZiAodGhpcy5nZXRMZXZlbChjdXJyZW50Tm9kZSkgPCBjdXJyZW50TGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1JY29uVHlwZShpdGVtOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGlmICghIWl0ZW0uaXRlbU1hdEljb24pIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5uYW1lO1xyXG4gICAgaWYgKCEhaXRlbS5pdGVtSWNvblN2ZykgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnN2ZztcclxuICAgIGlmICghIWl0ZW0uaXRlbUljb24pIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5wYXRoO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblNjcm9sbEludG9Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBub2RlSWQpO1xyXG4gICAgaWYgKCFub2RlSWQpIHJldHVybjtcclxuICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKGZsYXROb2RlKTtcclxuICAgIHRoaXMub25FeHBhbmRBbGxQYXJlbnQoZmxhdE5vZGUpO1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgI25vZGUtJHtmbGF0Tm9kZS5pZH1gKSBhcyBFbGVtZW50O1xyXG4gICAgZWxlbWVudCAmJiBlbGVtZW50LnNjcm9sbEludG9WaWV3KHtcclxuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxyXG4gICAgICBibG9jazogJ2NlbnRlcicsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ2V0QWN0aXZlTm9kZUV2ZW50JC5uZXh0KG5vZGVJZCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCgpe1xyXG4gICAgaWYodGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSl7XHJcbiAgICAgIHRoaXMuaXNTZWFyY2hpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLm9uU2VhcmNoRXZlbnQuZW1pdCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGlja1Jlc3VsdEl0ZW0oaXRlbSA6IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCl7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IGl0ZW0uaWQgPT09IHguaWQgKTtcclxuICAgIGlmKG5vZGUpe1xyXG4gICAgICB0aGlzLnNjcm9sbFRvTm9kZShub2RlLmlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQnJlYWRDcnVtYkl0ZW1DbGljayhpdGVtIDogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYil7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IGl0ZW0uaWQgPT09IHguaWQgKTtcclxuICAgIGlmKG5vZGUpe1xyXG4gICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcclxuICAgICAgb2Yobm9kZS5pZCkucGlwZShkZWxheSg3MDApKS5zdWJzY3JpYmUocmVzID0+e1xyXG4gICAgICAgICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKHJlcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGVja0l0ZW1TZWFyY2hSZXN1bHQoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKXtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnRvZ2dsZShpdGVtKTtcclxuICAgIGlmKHRoaXMuaXNTZWxlY3RPbmUpe1xyXG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdCguLi50aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4LmlkICE9PSBpdGVtLmlkKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtKTtcclxuICAgIHRoaXMuX2NoZWNrU3RhdGVDaGVja2JveEFsbFNlYXJjaCgpO1xyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21hcFRvUmVzdWx0U2VhcmNoKCl7XHJcbiAgICBpZighIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aClcclxuICAgICAgdGhpcy5yZXN1bHRTZWFyY2guZm9yRWFjaChpdGVtID0+e1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PSBpdGVtLmlkKTtcclxuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpID8gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pIDogdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKXtcclxuICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IGl0ZW0uaWQgPT09IHguaWQgKTtcclxuICAgIGlmKGN1cnJlbnROb2RlKXtcclxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZChpdGVtKSA/IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChjdXJyZW50Tm9kZSkgOiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChjdXJyZW50Tm9kZSk7XHJcbiAgICAgIHRoaXMuaXNTZWxlY3RPbmUgPyB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoY3VycmVudE5vZGUpIDogdGhpcy5faGFuZGxlQ2hlY2tOb2RlKGN1cnJlbnROb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0QWxsU2VhcmNoUmVzdWx0KGNoZWNrZWQpIHtcclxuICAgIHRoaXMuaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2ggPSAhY2hlY2tlZDtcclxuICAgIGNvbnN0IGhhbmRsZSA9IChhcnI6IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbFtdKSA9PntcclxuICAgICAgYXJyLmxlbmd0aCAmJiBhcnIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdEFsbFJlc3VsdFNlYXJjaCkge1xyXG4gICAgICAgICAgIXRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5pbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgY29uc3QgbWFpbkdyb3VwID0gdGhpcy5wYWdpbmdSZXN1bHRTZWFyY2guZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICBjb25zdCBleGlzdEl0ZW1Hcm91cCA9IHRoaXMuX2dldEFsbFBhcmVudE5vZGUobm9kZSkuZmlsdGVyKHggPT4gdGhpcy5wYWdpbmdSZXN1bHRTZWFyY2guc29tZSh4MSA9PiB4MS5pZCA9PT0geC5pZCkpO1xyXG4gICAgICAgIHJldHVybiBleGlzdEl0ZW1Hcm91cC5sZW5ndGggPT09IDA7XHJcbiAgICAgIH0pO1xyXG4gICAgICBoYW5kbGUobWFpbkdyb3VwKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIGhhbmRsZSh0aGlzLnBhZ2luZ1Jlc3VsdFNlYXJjaCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jaGVja1N0YXRlQ2hlY2tib3hBbGxTZWFyY2goKVxyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWNrU3RhdGVDaGVja2JveEFsbFNlYXJjaCgpe1xyXG4gICAgdGhpcy5pc1NlbGVjdEFsbFJlc3VsdFNlYXJjaCA9ICAhIXRoaXMucGFnaW5nUmVzdWx0U2VhcmNoLmxlbmd0aCAmJiB0aGlzLnBhZ2luZ1Jlc3VsdFNlYXJjaC5ldmVyeSh4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoeCkpO1xyXG4gICAgdGhpcy5pbmRldGVybWluYXRlU2VhcmNoUmVzdWx0ID0gIXRoaXMuaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2ggJiYgISF0aGlzLnBhZ2luZ1Jlc3VsdFNlYXJjaC5sZW5ndGggJiYgdGhpcy5wYWdpbmdSZXN1bHRTZWFyY2guc29tZSh4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoeCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRGlzYWJsZUNoZWNib3hBbGxTZWFyY2goKXtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luZ1Jlc3VsdFNlYXJjaC5sZW5ndGggJiYgdGhpcy5wYWdpbmdSZXN1bHRTZWFyY2guZXZlcnkoeCA9PiB4LmRpc2FibGVkKTtcclxuICB9XHJcblxyXG5cclxuICBvblBhZ2luZ1NlYXJjaFJlc3VsdCh2YWw6IFBhZ2VFdmVudCkge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnaW5hdGlvbkNvbmZpZyA9IHZhbDtcclxuICAgIHRoaXMucGFnaW5nUmVzdWx0U2VhcmNoID0gdGhpcy5lbmFibGVQYWdpbmdTZWFyY2ggPyB0aGlzLnJlc3VsdFNlYXJjaC5zbGljZSh2YWwucGFnZUluZGV4ICogdmFsLnBhZ2VTaXplLCAodmFsLnBhZ2VJbmRleCAqIHZhbC5wYWdlU2l6ZSkgKyB2YWwucGFnZVNpemUgKSA6IHRoaXMucmVzdWx0U2VhcmNoO1xyXG4gICAgdGhpcy5fY2hlY2tTdGF0ZUNoZWNrYm94QWxsU2VhcmNoKCk7XHJcbiAgICB0aGlzLm9uUGFnaW5nU2VhcmNoRXZlbnQuZW1pdCh2YWwpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9Ob2RlKG5vZGVJZDogc3RyaW5nKXtcclxuICAgIC8vIHRoaXMuZ2V0QWN0aXZlTm9kZUV2ZW50JC5uZXh0KG5vZGVJZCk7XHJcbiAgICB0aGlzLnNjcm9sbFRvTm9kZUV2ZW50JC5uZXh0KG5vZGVJZCk7XHJcbiAgfVxyXG5cclxuICBzZXRJbmRleFZpZXcoaW5kZXg6IG51bWJlcil7XHJcbiAgICBpZihpbmRleCA9PT0gMSl7XHJcbiAgICAgIHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuaW5jbHVkZUNoaWxkcmVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluZGV4VmlldyA9IGluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZE5vZGVTdG9yYWdlKCk6IFFNU0ZsYXROb2RlVHJlZSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VsZWN0ZWROb2RlJykpIGFzIFFNU0ZsYXROb2RlVHJlZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWROb2RlU3RvcmFnZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuaW5jbHVkZUNoaWxkcmVuICYmIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWxlY3RlZE5vZGUnLCBKU09OLnN0cmluZ2lmeShub2RlKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|