@rs-pk/asset-management 1.0.30 → 1.0.33

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.
Files changed (120) hide show
  1. package/bundles/rs-pk-asset-management.umd.js +1923 -2324
  2. package/bundles/rs-pk-asset-management.umd.js.map +1 -1
  3. package/bundles/rs-pk-asset-management.umd.min.js +1 -15
  4. package/bundles/rs-pk-asset-management.umd.min.js.map +1 -1
  5. package/esm2015/lib/asset-management.component.js +3 -3
  6. package/esm2015/lib/asset-management.module.js +2 -2
  7. package/esm2015/lib/asset-management.service.js +2 -2
  8. package/esm2015/lib/components/partial/add-folder-dialog/add-folder-dialog.component.js +3 -3
  9. package/esm2015/lib/components/partial/asset-dialog/asset-dialog.component.js +3 -3
  10. package/esm2015/lib/components/partial/asset-item/asset-item.component.js +3 -3
  11. package/esm2015/lib/components/partial/asset-list/asset-list.component.js +3 -3
  12. package/esm2015/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +3 -3
  13. package/esm2015/lib/components/partial/asset-wrapper/asset-wrapper.component.js +3 -3
  14. package/esm2015/lib/components/partial/breadcrumb/breadcrumb.component.js +3 -3
  15. package/esm2015/lib/components/partial/delete-dialog/delete-dialog.component.js +2 -2
  16. package/esm2015/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.js +3 -3
  17. package/esm2015/lib/components/partial/file-item/file-item.component.js +3 -3
  18. package/esm2015/lib/components/partial/file-list/file-list.component.js +3 -3
  19. package/esm2015/lib/components/partial/folder-item/folder-item.component.js +3 -3
  20. package/esm2015/lib/components/partial/folder-list/folder-list.component.js +3 -3
  21. package/esm2015/lib/components/partial/node-details/node-details.component.js +3 -3
  22. package/esm2015/lib/components/partial/node-tree/node-tree.component.js +3 -3
  23. package/esm2015/lib/components/partial/search-box/search-box.component.js +3 -3
  24. package/esm2015/lib/components/partial/sort-items/sort-items.component.js +3 -3
  25. package/esm2015/lib/components/partial/upload-dialog/upload-dialog.component.js +3 -3
  26. package/esm2015/lib/components/partial/upload-file/upload-file.component.js +3 -3
  27. package/esm2015/lib/components/ui/drag-to-resize/drag-to-resize.component.js +3 -3
  28. package/esm2015/lib/components/ui/input-file/input-file.component.js +3 -3
  29. package/esm2015/lib/components/ui/modal/modal.component.js +3 -3
  30. package/esm2015/lib/components/ui/search-not-found/search-not-found.component.js +3 -3
  31. package/esm2015/lib/configs/admin.config.js +2 -2
  32. package/esm2015/lib/contanst/data-image.js +2 -2
  33. package/esm2015/lib/contanst/index.js +2 -2
  34. package/esm2015/lib/datasources/index.js +2 -2
  35. package/esm2015/lib/datasources/node-tree.datasource.js +2 -2
  36. package/esm2015/lib/directives/dialogTrigger.directive.js +2 -2
  37. package/esm2015/lib/directives/directives.module.js +2 -2
  38. package/esm2015/lib/directives/dnd.directive.js +2 -2
  39. package/esm2015/lib/models/asset-file.model.js +2 -2
  40. package/esm2015/lib/models/asset.model.js +2 -2
  41. package/esm2015/lib/models/file-type.enum.js +2 -2
  42. package/esm2015/lib/models/file.model.js +2 -2
  43. package/esm2015/lib/models/index.js +2 -2
  44. package/esm2015/lib/models/node-tree.model.js +2 -2
  45. package/esm2015/lib/models/sort.enum.js +2 -2
  46. package/esm2015/lib/pipes/datetime.pipe.js +2 -2
  47. package/esm2015/lib/pipes/file-size.pipe.js +2 -2
  48. package/esm2015/lib/services/asset.service.js +2 -2
  49. package/esm2015/lib/services/base.service.js +2 -2
  50. package/esm2015/lib/services/env-config.service.js +2 -2
  51. package/esm2015/lib/services/file.service.js +2 -2
  52. package/esm2015/lib/services/index.js +2 -2
  53. package/esm2015/lib/services/node-tree.service.js +2 -2
  54. package/esm2015/lib/services/upload-assets.service.js +2 -2
  55. package/esm2015/lib/store/actions.action.js +2 -2
  56. package/esm2015/lib/store/index.js +2 -2
  57. package/esm2015/lib/store/reducer.js +2 -2
  58. package/esm2015/public-api.js +2 -2
  59. package/esm2015/rs-pk-asset-management.js +2 -2
  60. package/fesm2015/rs-pk-asset-management.js +78 -78
  61. package/fesm2015/rs-pk-asset-management.js.map +1 -1
  62. package/package.json +14 -16
  63. package/rs-pk-asset-management.metadata.json +1 -1
  64. package/esm5/lib/asset-management.component.js +0 -185
  65. package/esm5/lib/asset-management.module.js +0 -169
  66. package/esm5/lib/asset-management.service.js +0 -55
  67. package/esm5/lib/components/partial/add-folder-dialog/add-folder-dialog.component.js +0 -165
  68. package/esm5/lib/components/partial/asset-dialog/asset-dialog.component.js +0 -440
  69. package/esm5/lib/components/partial/asset-item/asset-item.component.js +0 -354
  70. package/esm5/lib/components/partial/asset-list/asset-list.component.js +0 -326
  71. package/esm5/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +0 -125
  72. package/esm5/lib/components/partial/asset-wrapper/asset-wrapper.component.js +0 -131
  73. package/esm5/lib/components/partial/breadcrumb/breadcrumb.component.js +0 -143
  74. package/esm5/lib/components/partial/delete-dialog/delete-dialog.component.js +0 -155
  75. package/esm5/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.js +0 -170
  76. package/esm5/lib/components/partial/file-item/file-item.component.js +0 -207
  77. package/esm5/lib/components/partial/file-list/file-list.component.js +0 -94
  78. package/esm5/lib/components/partial/folder-item/folder-item.component.js +0 -139
  79. package/esm5/lib/components/partial/folder-list/folder-list.component.js +0 -130
  80. package/esm5/lib/components/partial/node-details/node-details.component.js +0 -532
  81. package/esm5/lib/components/partial/node-tree/node-tree.component.js +0 -590
  82. package/esm5/lib/components/partial/search-box/search-box.component.js +0 -188
  83. package/esm5/lib/components/partial/sort-items/sort-items.component.js +0 -108
  84. package/esm5/lib/components/partial/upload-dialog/upload-dialog.component.js +0 -157
  85. package/esm5/lib/components/partial/upload-file/upload-file.component.js +0 -103
  86. package/esm5/lib/components/ui/drag-to-resize/drag-to-resize.component.js +0 -118
  87. package/esm5/lib/components/ui/input-file/input-file.component.js +0 -56
  88. package/esm5/lib/components/ui/modal/modal.component.js +0 -40
  89. package/esm5/lib/components/ui/search-not-found/search-not-found.component.js +0 -44
  90. package/esm5/lib/configs/admin.config.js +0 -81
  91. package/esm5/lib/contanst/data-image.js +0 -21
  92. package/esm5/lib/contanst/index.js +0 -7
  93. package/esm5/lib/datasources/index.js +0 -7
  94. package/esm5/lib/datasources/node-tree.datasource.js +0 -244
  95. package/esm5/lib/directives/dialogTrigger.directive.js +0 -54
  96. package/esm5/lib/directives/directives.module.js +0 -26
  97. package/esm5/lib/directives/dnd.directive.js +0 -81
  98. package/esm5/lib/models/asset-file.model.js +0 -70
  99. package/esm5/lib/models/asset.model.js +0 -185
  100. package/esm5/lib/models/file-type.enum.js +0 -12
  101. package/esm5/lib/models/file.model.js +0 -100
  102. package/esm5/lib/models/index.js +0 -13
  103. package/esm5/lib/models/node-tree.model.js +0 -38
  104. package/esm5/lib/models/sort.enum.js +0 -24
  105. package/esm5/lib/pipes/datetime.pipe.js +0 -84
  106. package/esm5/lib/pipes/file-size.pipe.js +0 -64
  107. package/esm5/lib/services/asset.service.js +0 -337
  108. package/esm5/lib/services/base.service.js +0 -58
  109. package/esm5/lib/services/env-config.service.js +0 -21
  110. package/esm5/lib/services/file.service.js +0 -128
  111. package/esm5/lib/services/index.js +0 -12
  112. package/esm5/lib/services/node-tree.service.js +0 -299
  113. package/esm5/lib/services/upload-assets.service.js +0 -208
  114. package/esm5/lib/store/actions.action.js +0 -144
  115. package/esm5/lib/store/index.js +0 -8
  116. package/esm5/lib/store/reducer.js +0 -117
  117. package/esm5/public-api.js +0 -41
  118. package/esm5/rs-pk-asset-management.js +0 -12
  119. package/fesm5/rs-pk-asset-management.js +0 -7067
  120. package/fesm5/rs-pk-asset-management.js.map +0 -1
@@ -1,590 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/components/partial/node-tree/node-tree.component.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import { __awaiter, __generator, __read, __spread } from "tslib";
7
- import { FlatTreeControl } from "@angular/cdk/tree";
8
- import { ChangeDetectorRef, Component, Input } from "@angular/core";
9
- import { of, Subject } from "rxjs";
10
- import { distinctUntilChanged, switchMap, takeUntil } from "rxjs/operators";
11
- import { AssetManagementService } from "../../../asset-management.service";
12
- import { NodeTreeDataSource } from "../../../datasources";
13
- import { MAX_FOLDER_TREE_SIZE, ROOT_ASSET_ID } from "../../../models";
14
- import { AssetService } from "../../../services/asset.service";
15
- import { NodeTreeService } from "../../../services/node-tree.service";
16
- import { ActionTypes, select } from "../../../store/index";
17
- var NodeTreeComponent = /** @class */ (function () {
18
- function NodeTreeComponent(assetService, nodeTreeService, svc, changeDetectorRef) {
19
- this.assetService = assetService;
20
- this.nodeTreeService = nodeTreeService;
21
- this.svc = svc;
22
- this.changeDetectorRef = changeDetectorRef;
23
- this.ROOT_ASSET_ID = ROOT_ASSET_ID;
24
- this.isRoot = false;
25
- this.homeLoading = false;
26
- this.loading = false;
27
- this.loadingMoreList = {};
28
- this.folderChildrenMap = new Map();
29
- this.unsubscribe$ = new Subject();
30
- this.getLevel = (/**
31
- * @param {?} node
32
- * @return {?}
33
- */
34
- function (node) { return node.level; });
35
- this.isExpandable = (/**
36
- * @param {?} node
37
- * @return {?}
38
- */
39
- function (node) { return node.expandable; });
40
- this.hasChild = (/**
41
- * @param {?} _
42
- * @param {?} _nodeData
43
- * @return {?}
44
- */
45
- function (_, _nodeData) { return _nodeData.expandable; });
46
- this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);
47
- this.dataSource = new NodeTreeDataSource(this.treeControl, nodeTreeService);
48
- }
49
- Object.defineProperty(NodeTreeComponent.prototype, "folderTreeMeta", {
50
- get: /**
51
- * @return {?}
52
- */
53
- function () {
54
- /** @type {?} */
55
- var rootFolder = this.folderChildrenMap.get(ROOT_ASSET_ID);
56
- return {
57
- length: rootFolder ? rootFolder.size : 0,
58
- total: this.nodeTreeService.rootFolder ? this.nodeTreeService.rootFolder.TotalFolder || "0" : 0,
59
- };
60
- },
61
- enumerable: true,
62
- configurable: true
63
- });
64
- /**
65
- * @return {?}
66
- */
67
- NodeTreeComponent.prototype.ngOnInit = /**
68
- * @return {?}
69
- */
70
- function () {
71
- this.bindSubscriber();
72
- this.initialData();
73
- };
74
- /**
75
- * @private
76
- * @return {?}
77
- */
78
- NodeTreeComponent.prototype.initialData = /**
79
- * @private
80
- * @return {?}
81
- */
82
- function () {
83
- return __awaiter(this, void 0, void 0, function () {
84
- return __generator(this, function (_a) {
85
- switch (_a.label) {
86
- case 0: return [4 /*yield*/, this.nodeTreeService.initialData({ dispatchRootId: true })];
87
- case 1:
88
- _a.sent();
89
- this.changeDetectorRef.detectChanges();
90
- return [2 /*return*/];
91
- }
92
- });
93
- });
94
- };
95
- /**
96
- * @param {?} id
97
- * @return {?}
98
- */
99
- NodeTreeComponent.prototype.getFolderChildrenSize = /**
100
- * @param {?} id
101
- * @return {?}
102
- */
103
- function (id) {
104
- /** @type {?} */
105
- var children = this.folderChildrenMap.get(id);
106
- return children ? children.size : 0;
107
- };
108
- /**
109
- * @param {?} node
110
- * @return {?}
111
- */
112
- NodeTreeComponent.prototype.canLoadMore = /**
113
- * @param {?} node
114
- * @return {?}
115
- */
116
- function (node) {
117
- /** @type {?} */
118
- var size = this.getFolderChildrenSize(node.item.AssetId);
119
- return size < node.item.TotalFolder;
120
- };
121
- /**
122
- * @private
123
- * @return {?}
124
- */
125
- NodeTreeComponent.prototype.bindSubscriber = /**
126
- * @private
127
- * @return {?}
128
- */
129
- function () {
130
- var _this = this;
131
- this.nodeTreeService.loading$.pipe(takeUntil(this.unsubscribe$), distinctUntilChanged()).subscribe((/**
132
- * @param {?} loading
133
- * @return {?}
134
- */
135
- function (loading) {
136
- _this.homeLoading = loading;
137
- _this.changeDetectorRef.detectChanges();
138
- }));
139
- this.nodeTreeService.initialData$.pipe(takeUntil(this.unsubscribe$), distinctUntilChanged()).subscribe((/**
140
- * @param {?} data
141
- * @return {?}
142
- */
143
- function (data) {
144
- var rootId = (_this.nodeTreeService.rootFolder || { AssetId: null }).AssetId;
145
- _this.isRoot = rootId && _this.currentFolderId === rootId;
146
- _this.dataSource.data = data;
147
- data.forEach((/**
148
- * @param {?} node
149
- * @return {?}
150
- */
151
- function (node) { return _this.nodeTreeService.addNode(node.item, null); }));
152
- _this.changeDetectorRef.detectChanges();
153
- }));
154
- this.dataSource.dataChange.pipe(takeUntil(this.unsubscribe$)).subscribe((/**
155
- * @param {?} data
156
- * @return {?}
157
- */
158
- function (data) {
159
- if (data && data.length) {
160
- _this.handleDatasourceChange(data);
161
- _this.changeDetectorRef.detectChanges();
162
- }
163
- }));
164
- select((/**
165
- * @param {?} state
166
- * @return {?}
167
- */
168
- function (state) { return state.currentFolderId; }))
169
- .pipe(takeUntil(this.unsubscribe$))
170
- .subscribe((/**
171
- * @param {?} id
172
- * @return {?}
173
- */
174
- function (id) { return __awaiter(_this, void 0, void 0, function () {
175
- var rootId;
176
- return __generator(this, function (_a) {
177
- switch (_a.label) {
178
- case 0:
179
- if (!id) return [3 /*break*/, 2];
180
- rootId = (this.nodeTreeService.rootFolder || { AssetId: null }).AssetId;
181
- this.isRoot = rootId && id === rootId;
182
- this.currentFolderId = id;
183
- return [4 /*yield*/, this.nodeTreeService.updateBreadcrumb(id)];
184
- case 1:
185
- _a.sent();
186
- this.changeDetectorRef.detectChanges();
187
- _a.label = 2;
188
- case 2: return [2 /*return*/];
189
- }
190
- });
191
- }); }));
192
- select((/**
193
- * @param {?} state
194
- * @return {?}
195
- */
196
- function (state) { return state.reloadCurrentFolder; }))
197
- .pipe(takeUntil(this.unsubscribe$), switchMap((/**
198
- * @param {?} res
199
- * @return {?}
200
- */
201
- function (res) { return of(res); })))
202
- .subscribe((/**
203
- * @return {?}
204
- */
205
- function () { return __awaiter(_this, void 0, void 0, function () {
206
- return __generator(this, function (_a) {
207
- switch (_a.label) {
208
- case 0: return [4 /*yield*/, this.handleReloadFolder(this.currentFolderId)];
209
- case 1:
210
- _a.sent();
211
- this.changeDetectorRef.detectChanges();
212
- return [2 /*return*/];
213
- }
214
- });
215
- }); }));
216
- };
217
- /**
218
- * @private
219
- * @param {?=} data
220
- * @return {?}
221
- */
222
- NodeTreeComponent.prototype.handleDatasourceChange = /**
223
- * @private
224
- * @param {?=} data
225
- * @return {?}
226
- */
227
- function (data) {
228
- var _this = this;
229
- if (data === void 0) { data = []; }
230
- if (!data || !data.length)
231
- return;
232
- /** @type {?} */
233
- var maps = new Map();
234
- maps.set(ROOT_ASSET_ID, new Map());
235
- data.forEach((/**
236
- * @param {?} node
237
- * @return {?}
238
- */
239
- function (node) {
240
- /** @type {?} */
241
- var nodeId = node.item.AssetId;
242
- /** @type {?} */
243
- var parent = _this.getParent(node);
244
- /** @type {?} */
245
- var parentId = parent ? parent.item.AssetId : ROOT_ASSET_ID;
246
- if (!maps.has(parentId)) {
247
- maps.set(parentId, new Map());
248
- }
249
- maps.get(parentId).set(nodeId, node);
250
- }));
251
- this.folderChildrenMap = maps;
252
- };
253
- /**
254
- * @param {?} node
255
- * @return {?}
256
- */
257
- NodeTreeComponent.prototype.selectNode = /**
258
- * @param {?} node
259
- * @return {?}
260
- */
261
- function (node) {
262
- return __awaiter(this, void 0, void 0, function () {
263
- var id;
264
- return __generator(this, function (_a) {
265
- switch (_a.label) {
266
- case 0:
267
- id = node.item.AssetId;
268
- if (id === this.currentFolderId) {
269
- this.svc.dispatch({
270
- type: ActionTypes.RELOAD_CURRENT_NODE,
271
- });
272
- }
273
- else {
274
- this.svc.dispatch({
275
- type: ActionTypes.SET_CURRENT_FOLDER_ID,
276
- payload: id,
277
- });
278
- }
279
- return [4 /*yield*/, this.handleReloadFolder(id)];
280
- case 1:
281
- _a.sent();
282
- this.changeDetectorRef.detectChanges();
283
- return [2 /*return*/];
284
- }
285
- });
286
- });
287
- };
288
- /**
289
- * @return {?}
290
- */
291
- NodeTreeComponent.prototype.backToHome = /**
292
- * @return {?}
293
- */
294
- function () {
295
- this.initialData();
296
- var rootId = this.nodeTreeService.rootFolder.AssetId;
297
- if (this.currentFolderId === rootId) {
298
- this.svc.dispatch({
299
- type: ActionTypes.RELOAD_CURRENT_NODE,
300
- });
301
- }
302
- };
303
- /**
304
- * @param {?=} node
305
- * @return {?}
306
- */
307
- NodeTreeComponent.prototype.loadMoreFolder = /**
308
- * @param {?=} node
309
- * @return {?}
310
- */
311
- function (node) {
312
- return __awaiter(this, void 0, void 0, function () {
313
- var id, children, itemsPerPage, result, assetChildren, index, nodes, updatedData, error_1;
314
- var _this = this;
315
- return __generator(this, function (_a) {
316
- switch (_a.label) {
317
- case 0:
318
- id = node ? node.item.AssetId : ROOT_ASSET_ID;
319
- _a.label = 1;
320
- case 1:
321
- _a.trys.push([1, 3, , 4]);
322
- this.setLoadingMore(id, true);
323
- children = this.folderChildrenMap.get(id);
324
- itemsPerPage = this.assetService.AMConfig.pageFolderSize || MAX_FOLDER_TREE_SIZE;
325
- return [4 /*yield*/, this.assetService
326
- .getChildrenFolders({
327
- assetId: id === ROOT_ASSET_ID ? null : id,
328
- isFilter: false,
329
- pageIndex: Math.round((children ? children.size : 0) / itemsPerPage),
330
- })
331
- .toPromise()];
332
- case 2:
333
- result = _a.sent();
334
- assetChildren = result.Data.Children || [];
335
- // Handle datasource
336
- index = this.dataSource.data.indexOf(node);
337
- nodes = assetChildren.map((/**
338
- * @param {?} folder
339
- * @return {?}
340
- */
341
- function (folder) {
342
- _this.nodeTreeService.addNode(folder, id);
343
- return _this.nodeTreeService.getDynamicFlatNode(folder, node ? node.level + 1 : 0);
344
- }));
345
- if (id !== ROOT_ASSET_ID) {
346
- updatedData = this.dataSource.data.slice();
347
- updatedData.splice.apply(updatedData, __spread([index + 1, 0], nodes));
348
- this.dataSource.data = updatedData;
349
- }
350
- else {
351
- this.dataSource.data = __spread(this.dataSource.data, nodes);
352
- }
353
- this.setLoadingMore(id, false);
354
- this.changeDetectorRef.detectChanges();
355
- return [3 /*break*/, 4];
356
- case 3:
357
- error_1 = _a.sent();
358
- console.log("Load more folder error", error_1);
359
- this.setLoadingMore(id, false);
360
- return [3 /*break*/, 4];
361
- case 4: return [2 /*return*/];
362
- }
363
- });
364
- });
365
- };
366
- /**
367
- * @param {?} node
368
- * @return {?}
369
- */
370
- NodeTreeComponent.prototype.checked = /**
371
- * @param {?} node
372
- * @return {?}
373
- */
374
- function (node) {
375
- return this.currentFolderId && this.currentFolderId === node.item.AssetId;
376
- };
377
- /**
378
- * @param {?} node
379
- * @return {?}
380
- */
381
- NodeTreeComponent.prototype.disabled = /**
382
- * @param {?} node
383
- * @return {?}
384
- */
385
- function (node) {
386
- return node.expandable;
387
- };
388
- /**
389
- * @param {?} node
390
- * @return {?}
391
- */
392
- NodeTreeComponent.prototype.getParent = /**
393
- * @param {?} node
394
- * @return {?}
395
- */
396
- function (node) {
397
- /** @type {?} */
398
- var currentLevel = this.getLevel(node);
399
- if (currentLevel < 1) {
400
- return null;
401
- }
402
- /** @type {?} */
403
- var startIndex = this.dataSource.data.indexOf(node) - 1;
404
- for (var i = startIndex; i >= 0; i--) {
405
- /** @type {?} */
406
- var currentNode = this.dataSource.data[i];
407
- if (this.getLevel(currentNode) < currentLevel) {
408
- return currentNode;
409
- }
410
- }
411
- };
412
- /**
413
- * @param {?} id
414
- * @return {?}
415
- */
416
- NodeTreeComponent.prototype.getNodeById = /**
417
- * @param {?} id
418
- * @return {?}
419
- */
420
- function (id) {
421
- return this.treeControl.dataNodes.find((/**
422
- * @param {?} node
423
- * @return {?}
424
- */
425
- function (node) { return node.item.AssetId === id; }));
426
- };
427
- /**
428
- * @private
429
- * @param {?} id
430
- * @return {?}
431
- */
432
- NodeTreeComponent.prototype.handleReloadFolder = /**
433
- * @private
434
- * @param {?} id
435
- * @return {?}
436
- */
437
- function (id) {
438
- return __awaiter(this, void 0, void 0, function () {
439
- var node, parent_1, children, updatedNode, rootFolder, updatedNode;
440
- return __generator(this, function (_a) {
441
- switch (_a.label) {
442
- case 0:
443
- if (!id || this.loading) {
444
- return [2 /*return*/];
445
- }
446
- this.loading = true;
447
- node = this.getNodeById(id);
448
- if (!node) return [3 /*break*/, 8];
449
- parent_1 = this.getParent(node);
450
- if (!parent_1) return [3 /*break*/, 4];
451
- // Reload parent folder (get children and expand it again)
452
- children = this.folderChildrenMap.get(parent_1.item.AssetId);
453
- return [4 /*yield*/, this.dataSource.reloadNode(parent_1, children.size)];
454
- case 1:
455
- _a.sent();
456
- updatedNode = this.getNodeById(id);
457
- if (!updatedNode) return [3 /*break*/, 3];
458
- // TODO
459
- return [4 /*yield*/, this.treeControl.expand(updatedNode)];
460
- case 2:
461
- // TODO
462
- _a.sent();
463
- _a.label = 3;
464
- case 3: return [3 /*break*/, 7];
465
- case 4:
466
- rootFolder = this.folderChildrenMap.get(ROOT_ASSET_ID);
467
- return [4 /*yield*/, this.nodeTreeService.initialData({ dispatchRootId: false, pageSize: rootFolder.size })];
468
- case 5:
469
- _a.sent();
470
- updatedNode = this.getNodeById(id);
471
- if (!updatedNode) return [3 /*break*/, 7];
472
- // TODO
473
- return [4 /*yield*/, this.treeControl.expand(updatedNode)];
474
- case 6:
475
- // TODO
476
- _a.sent();
477
- _a.label = 7;
478
- case 7: return [3 /*break*/, 10];
479
- case 8:
480
- // Reload root folder
481
- return [4 /*yield*/, this.nodeTreeService.initialData({ dispatchRootId: false })];
482
- case 9:
483
- // Reload root folder
484
- _a.sent();
485
- _a.label = 10;
486
- case 10:
487
- this.loading = false;
488
- return [2 /*return*/];
489
- }
490
- });
491
- });
492
- };
493
- /**
494
- * @private
495
- * @param {?} id
496
- * @param {?} value
497
- * @return {?}
498
- */
499
- NodeTreeComponent.prototype.setLoadingMore = /**
500
- * @private
501
- * @param {?} id
502
- * @param {?} value
503
- * @return {?}
504
- */
505
- function (id, value) {
506
- this.loadingMoreList[id] = value;
507
- };
508
- /**
509
- * @return {?}
510
- */
511
- NodeTreeComponent.prototype.ngOnDestroy = /**
512
- * @return {?}
513
- */
514
- function () {
515
- this.dataSource.data = [];
516
- this.nodeTreeService.data = [];
517
- this.unsubscribe$.next();
518
- this.unsubscribe$.complete();
519
- };
520
- NodeTreeComponent.decorators = [
521
- { type: Component, args: [{
522
- selector: "lib-node-tree",
523
- template: "<div class=\"node custom-scrollbar node-tree\">\n <div class=\"node__home\" (click)=\"backToHome()\" [ngClass]=\"{ active: isRoot,\n disabled: loading || homeLoading}\">\n <mat-icon *ngIf=\"!homeLoading\">home</mat-icon>\n <mat-spinner *ngIf=\"homeLoading\" [diameter]=\"20\"\n class=\"node__home--loading\"></mat-spinner>\n <span>Home</span>\n </div>\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\"\n class=\"node__item\">\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding\n [ngClass]=\"{ active: checked(node),disabled: loading || node.isLoading }\"\n (click)=\"selectNode(node)\">\n <button mat-icon-button disabled class=\"node__item--pading\"></button>\n <div class=\"node__item--info\" [style.maxWidth.px]=\"width -50\">\n <mat-icon class=\"folder-icon\">folder</mat-icon>\n <div class=\"node-name\">\n <span>\n {{ node.item.OriginalFileName }}\n </span>\n <span class=\"node-summary\" *ngIf=\"node.item?.TotalFolder ||\n node.item?.TotalFile\">\n <small *ngIf=\"node.item?.TotalFolder\">{{ node.item?.TotalFolder}}\n {{node.item?.TotalFolder> 1 ?\n 'folders':'folder'}}</small>\n <small *ngIf=\"node.item?.TotalFolder && node.item?.TotalFile\">,\n </small>\n <small *ngIf=\"node.item?.TotalFile\">{{ node.item?.TotalFile}}\n {{node.item?.TotalFile> 1 ?\n 'files':'file'}}</small>\n </span>\n </div>\n </div>\n </mat-tree-node>\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding \n [ngClass]=\"{ active: checked(node), disabled: loading || node.isLoading\n }\">\n <div class=\"d-flex align-items-center\" (click)=\"selectNode(node)\">\n <button mat-icon-button [attr.aria-label]=\"'Toggle ' +\n node.item.OriginalFileName\" matTreeNodeToggle\n [disabled]=\"node.isLoading\">\n <mat-icon *ngIf=\"!node.isLoading\" class=\"mat-icon-rtl-mirror\">\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n <mat-spinner *ngIf=\"node.isLoading\" [diameter]=\"20\"\n class=\"node__item--loading\"></mat-spinner>\n </button>\n <div class=\"node__item--info\" [style.maxWidth.px]=\"width -50\">\n <mat-icon class=\"folder-icon\">folder</mat-icon>\n <div class=\"node-name\">\n <span>\n {{ node.item.OriginalFileName }}\n </span>\n <span class=\"node-summary\">\n <small *ngIf=\"node.item?.TotalFolder\"><ng-container *ngIf=\"treeControl.isExpanded(node)\"><b>{{getFolderChildrenSize(node.item.AssetId)}}</b>/</ng-container>{{ node.item?.TotalFolder}}\n {{node.item?.TotalFolder> 1 ?\n 'folders':'folder'}}</small>\n <small *ngIf=\"node.item?.TotalFolder && node.item?.TotalFile\">,\n </small>\n <small *ngIf=\"node.item?.TotalFile\">{{ node.item?.TotalFile}}\n {{node.item?.TotalFile> 1 ?\n 'files':'file'}}</small>\n </span>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"treeControl.isExpanded(node)\"> \n <div *ngIf=\"!!loadingMoreList[node.item.AssetId]\" class=\"mx-2\" [style.minWidth.px]=\"40\">\n <mat-spinner [diameter]=\"20\"\n class=\"node__item--loading\"></mat-spinner>\n </div>\n <button *ngIf=\"!loadingMoreList[node.item.AssetId] && canLoadMore(node)\" matTooltip=\"Load More\" class=\"mx-2\" mat-icon-button (click)=\"loadMoreFolder(node)\" [disabled]=\"loadingMoreList[node.item.AssetId] || homeLoading || loading\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"m482-200 114-113-114-113-42 42 43 43q-28 1-54.5-9T381-381q-20-20-30.5-46T340-479q0-17 4.5-34t12.5-33l-44-44q-17 25-25 53t-8 57q0 38 15 75t44 66q29 29 65 43.5t74 15.5l-38 38 42 42Zm165-170q17-25 25-53t8-57q0-38-14.5-75.5T622-622q-29-29-65.5-43T482-679l38-39-42-42-114 113 114 113 42-42-44-44q27 0 55 10.5t48 30.5q20 20 30.5 46t10.5 52q0 17-4.5 34T603-414l44 44ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"/></svg>\n </button>\n </ng-container>\n </mat-tree-node>\n </mat-tree>\n <div class=\"p-2 d-flex flex-column align-items-center justify-content-center\" *ngIf=\"folderTreeMeta.length\">\n <button mat-raised-button *ngIf=\"folderTreeMeta.length !== folderTreeMeta.total\" (click)=\"loadMoreFolder()\" [disabled]=\"loadingMoreList[ROOT_ASSET_ID] || loading || homeLoading\">\n <div class=\"d-flex align-items-center\">\n <mat-spinner [diameter]=\"20\" *ngIf=\"loadingMoreList[ROOT_ASSET_ID]\"></mat-spinner>\n <mat-icon *ngIf=\"!loadingMoreList[ROOT_ASSET_ID]\">expand_more</mat-icon>\n <div class=\"ml-2\">Load More</div>\n </div>\n </button>\n <div class=\"mt-2\" [style.fontSize.px]=\"13\"><b>{{ folderTreeMeta.length }}</b> of <b>{{ folderTreeMeta.total }} folders</b></div>\n </div>\n</div>",
524
- styles: [":host::ng-deep .node{overflow-x:hidden;height:100%;display:grid;grid-auto-rows:max-content}:host::ng-deep .node-tree{max-height:max(800px,90vh);overflow-y:auto}:host::ng-deep .node__home{padding:8px 10px;display:flex;align-items:center;height:44px}:host::ng-deep .node__home .mat-icon{color:#979797;margin-right:15px;margin-bottom:10px;font-size:32px}:host::ng-deep .node__home .node__home--loading{margin-right:19px}:host::ng-deep .node__item--loading{margin-left:10px}:host::ng-deep .node__item--info{display:flex;align-items:center}:host::ng-deep .node__item--info .folder-icon{display:flex;align-items:center;color:#6fc0ff;font-size:32px;margin-right:20px}:host::ng-deep .node__item--info .node-name{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host::ng-deep .node__item--info .node-name span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host::ng-deep .node__item--info .node-name .node-summary{margin-top:-5px;color:#979797}:host::ng-deep .node .mat-tree{width:-moz-max-content!important;width:max-content!important;min-width:100%}:host::ng-deep .node .mat-tree .mat-tree-node{padding:5px 0;min-height:44px}:host::ng-deep .node .mat-tree .mat-tree-node .node__item--pading{height:20px}:host::ng-deep .node .mat-tree-node:hover,:host::ng-deep .node .node__home{transition:.3s;cursor:pointer}:host::ng-deep .node .mat-tree-node:hover:hover,:host::ng-deep .node .node__home:hover{background-color:#e8e8e8}:host::ng-deep .node .active{background-color:#f0f0f0}:host::ng-deep .node .disabled{pointer-events:none}"]
525
- }] }
526
- ];
527
- /** @nocollapse */
528
- NodeTreeComponent.ctorParameters = function () { return [
529
- { type: AssetService },
530
- { type: NodeTreeService },
531
- { type: AssetManagementService },
532
- { type: ChangeDetectorRef }
533
- ]; };
534
- NodeTreeComponent.propDecorators = {
535
- width: [{ type: Input }]
536
- };
537
- return NodeTreeComponent;
538
- }());
539
- export { NodeTreeComponent };
540
- if (false) {
541
- /** @type {?} */
542
- NodeTreeComponent.prototype.width;
543
- /** @type {?} */
544
- NodeTreeComponent.prototype.ROOT_ASSET_ID;
545
- /** @type {?} */
546
- NodeTreeComponent.prototype.currentFolderId;
547
- /** @type {?} */
548
- NodeTreeComponent.prototype.isRoot;
549
- /** @type {?} */
550
- NodeTreeComponent.prototype.homeLoading;
551
- /** @type {?} */
552
- NodeTreeComponent.prototype.loading;
553
- /** @type {?} */
554
- NodeTreeComponent.prototype.loadingMoreList;
555
- /** @type {?} */
556
- NodeTreeComponent.prototype.treeControl;
557
- /** @type {?} */
558
- NodeTreeComponent.prototype.dataSource;
559
- /** @type {?} */
560
- NodeTreeComponent.prototype.folderChildrenMap;
561
- /**
562
- * @type {?}
563
- * @private
564
- */
565
- NodeTreeComponent.prototype.unsubscribe$;
566
- /** @type {?} */
567
- NodeTreeComponent.prototype.getLevel;
568
- /** @type {?} */
569
- NodeTreeComponent.prototype.isExpandable;
570
- /** @type {?} */
571
- NodeTreeComponent.prototype.hasChild;
572
- /** @type {?} */
573
- NodeTreeComponent.prototype.assetService;
574
- /**
575
- * @type {?}
576
- * @private
577
- */
578
- NodeTreeComponent.prototype.nodeTreeService;
579
- /**
580
- * @type {?}
581
- * @private
582
- */
583
- NodeTreeComponent.prototype.svc;
584
- /**
585
- * @type {?}
586
- * @private
587
- */
588
- NodeTreeComponent.prototype.changeDetectorRef;
589
- }
590
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bycy1way9hc3NldC1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcGFydGlhbC9ub2RlLXRyZWUvbm9kZS10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFtQixvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0Q7SUFNRSwyQkFDUyxZQUEwQixFQUN6QixlQUFnQyxFQUNoQyxHQUEyQixFQUMzQixpQkFBb0M7UUFIckMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDekIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLFFBQUcsR0FBSCxHQUFHLENBQXdCO1FBQzNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFRdkMsa0JBQWEsR0FBRyxhQUFhLENBQUM7UUFF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bGF0VHJlZUNvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3RyZWVcIjtcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBvZiwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEFzc2V0TWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYXNzZXQtbWFuYWdlbWVudC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOb2RlVHJlZURhdGFTb3VyY2UgfSBmcm9tIFwiLi4vLi4vLi4vZGF0YXNvdXJjZXNcIjtcbmltcG9ydCB7IER5bmFtaWNGbGF0Tm9kZSwgTUFYX0ZPTERFUl9UUkVFX1NJWkUsIFJPT1RfQVNTRVRfSUQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBBc3NldFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvYXNzZXQuc2VydmljZVwiO1xuaW1wb3J0IHsgTm9kZVRyZWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL25vZGUtdHJlZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlcywgc2VsZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3N0b3JlL2luZGV4XCI7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibGliLW5vZGUtdHJlZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL25vZGUtdHJlZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vbm9kZS10cmVlLmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBOb2RlVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFzc2V0U2VydmljZTogQXNzZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm9kZVRyZWVTZXJ2aWNlOiBOb2RlVHJlZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdmM6IEFzc2V0TWFuYWdlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8RHluYW1pY0ZsYXROb2RlPih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE5vZGVUcmVlRGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCBub2RlVHJlZVNlcnZpY2UpO1xuICB9XG5cbiAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcblxuICBwdWJsaWMgUk9PVF9BU1NFVF9JRCA9IFJPT1RfQVNTRVRfSUQ7XG4gIHB1YmxpYyBjdXJyZW50Rm9sZGVySWQ6IHN0cmluZztcbiAgcHVibGljIGlzUm9vdCA9IGZhbHNlO1xuICBwdWJsaWMgaG9tZUxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIGxvYWRpbmdNb3JlTGlzdCA9IHt9O1xuICBwdWJsaWMgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxEeW5hbWljRmxhdE5vZGU+O1xuICBwdWJsaWMgZGF0YVNvdXJjZTogTm9kZVRyZWVEYXRhU291cmNlO1xuICBwdWJsaWMgZm9sZGVyQ2hpbGRyZW5NYXA6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIER5bmFtaWNGbGF0Tm9kZT4+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ2V0IGZvbGRlclRyZWVNZXRhKCkge1xuICAgIGNvbnN0IHJvb3RGb2xkZXIgPSB0aGlzLmZvbGRlckNoaWxkcmVuTWFwLmdldChST09UX0FTU0VUX0lEKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGVuZ3RoOiByb290Rm9sZGVyID8gcm9vdEZvbGRlci5zaXplIDogMCxcbiAgICAgIHRvdGFsOiB0aGlzLm5vZGVUcmVlU2VydmljZS5yb290Rm9sZGVyID8gdGhpcy5ub2RlVHJlZVNlcnZpY2Uucm9vdEZvbGRlci5Ub3RhbEZvbGRlciB8fCBcIjBcIiA6IDAsXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYmluZFN1YnNjcmliZXIoKTtcbiAgICB0aGlzLmluaXRpYWxEYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxEYXRhKCkge1xuICAgIGF3YWl0IHRoaXMubm9kZVRyZWVTZXJ2aWNlLmluaXRpYWxEYXRhKHsgZGlzcGF0Y2hSb290SWQ6IHRydWUgfSk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9sZGVyQ2hpbGRyZW5TaXplKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZm9sZGVyQ2hpbGRyZW5NYXAuZ2V0KGlkKTtcbiAgICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlbi5zaXplIDogMDtcbiAgfVxuXG4gIHB1YmxpYyBjYW5Mb2FkTW9yZShub2RlOiBEeW5hbWljRmxhdE5vZGUpIHtcbiAgICBjb25zdCBzaXplID0gdGhpcy5nZXRGb2xkZXJDaGlsZHJlblNpemUobm9kZS5pdGVtLkFzc2V0SWQpO1xuICAgIHJldHVybiBzaXplIDwgbm9kZS5pdGVtLlRvdGFsRm9sZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kU3Vic2NyaWJlcigpIHtcbiAgICB0aGlzLm5vZGVUcmVlU2VydmljZS5sb2FkaW5nJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgobG9hZGluZykgPT4ge1xuICAgICAgdGhpcy5ob21lTG9hZGluZyA9IGxvYWRpbmc7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcblxuICAgIHRoaXMubm9kZVRyZWVTZXJ2aWNlLmluaXRpYWxEYXRhJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgeyBBc3NldElkOiByb290SWQgfSA9IHRoaXMubm9kZVRyZWVTZXJ2aWNlLnJvb3RGb2xkZXIgfHwgeyBBc3NldElkOiBudWxsIH07XG4gICAgICB0aGlzLmlzUm9vdCA9IHJvb3RJZCAmJiB0aGlzLmN1cnJlbnRGb2xkZXJJZCA9PT0gcm9vdElkO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuICAgICAgZGF0YS5mb3JFYWNoKChub2RlKSA9PiB0aGlzLm5vZGVUcmVlU2VydmljZS5hZGROb2RlKG5vZGUuaXRlbSwgbnVsbCkpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVEYXRhc291cmNlQ2hhbmdlKGRhdGEpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLmN1cnJlbnRGb2xkZXJJZClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChpZCkgPT4ge1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICBjb25zdCB7IEFzc2V0SWQ6IHJvb3RJZCB9ID0gdGhpcy5ub2RlVHJlZVNlcnZpY2Uucm9vdEZvbGRlciB8fCB7IEFzc2V0SWQ6IG51bGwgfTtcbiAgICAgICAgICB0aGlzLmlzUm9vdCA9IHJvb3RJZCAmJiBpZCA9PT0gcm9vdElkO1xuICAgICAgICAgIHRoaXMuY3VycmVudEZvbGRlcklkID0gaWQ7XG4gICAgICAgICAgYXdhaXQgdGhpcy5ub2RlVHJlZVNlcnZpY2UudXBkYXRlQnJlYWRjcnVtYihpZCk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUucmVsb2FkQ3VycmVudEZvbGRlcilcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHJlcykgPT4gb2YocmVzKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZVJlbG9hZEZvbGRlcih0aGlzLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGFzb3VyY2VDaGFuZ2UoZGF0YTogRHluYW1pY0ZsYXROb2RlW10gPSBbXSkge1xuICAgIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IG1hcHMgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgRHluYW1pY0ZsYXROb2RlPj4oKTtcbiAgICBtYXBzLnNldChST09UX0FTU0VUX0lELCBuZXcgTWFwKCkpO1xuXG4gICAgZGF0YS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlLml0ZW0uQXNzZXRJZDtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KG5vZGUpO1xuICAgICAgY29uc3QgcGFyZW50SWQgPSBwYXJlbnQgPyBwYXJlbnQuaXRlbS5Bc3NldElkIDogUk9PVF9BU1NFVF9JRDtcblxuICAgICAgaWYgKCFtYXBzLmhhcyhwYXJlbnRJZCkpIHtcbiAgICAgICAgbWFwcy5zZXQocGFyZW50SWQsIG5ldyBNYXAoKSk7XG4gICAgICB9XG5cbiAgICAgIG1hcHMuZ2V0KHBhcmVudElkKS5zZXQobm9kZUlkLCBub2RlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9sZGVyQ2hpbGRyZW5NYXAgPSBtYXBzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNlbGVjdE5vZGUobm9kZTogRHluYW1pY0ZsYXROb2RlKSB7XG4gICAgY29uc3QgeyBBc3NldElkOiBpZCB9ID0gbm9kZS5pdGVtO1xuICAgIGlmIChpZCA9PT0gdGhpcy5jdXJyZW50Rm9sZGVySWQpIHtcbiAgICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVMT0FEX0NVUlJFTlRfTk9ERSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9DVVJSRU5UX0ZPTERFUl9JRCxcbiAgICAgICAgcGF5bG9hZDogaWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVSZWxvYWRGb2xkZXIoaWQpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIGJhY2tUb0hvbWUoKSB7XG4gICAgdGhpcy5pbml0aWFsRGF0YSgpO1xuICAgIGNvbnN0IHsgQXNzZXRJZDogcm9vdElkIH0gPSB0aGlzLm5vZGVUcmVlU2VydmljZS5yb290Rm9sZGVyO1xuICAgIGlmICh0aGlzLmN1cnJlbnRGb2xkZXJJZCA9PT0gcm9vdElkKSB7XG4gICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTE9BRF9DVVJSRU5UX05PREUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZE1vcmVGb2xkZXIobm9kZT86IGFueSkge1xuICAgIGNvbnN0IGlkID0gbm9kZSA/IG5vZGUuaXRlbS5Bc3NldElkIDogUk9PVF9BU1NFVF9JRDtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZXRMb2FkaW5nTW9yZShpZCwgdHJ1ZSk7XG5cbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5mb2xkZXJDaGlsZHJlbk1hcC5nZXQoaWQpO1xuICAgICAgY29uc3QgaXRlbXNQZXJQYWdlID0gdGhpcy5hc3NldFNlcnZpY2UuQU1Db25maWcucGFnZUZvbGRlclNpemUgfHwgTUFYX0ZPTERFUl9UUkVFX1NJWkU7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFzc2V0U2VydmljZVxuICAgICAgICAuZ2V0Q2hpbGRyZW5Gb2xkZXJzKHtcbiAgICAgICAgICBhc3NldElkOiBpZCA9PT0gUk9PVF9BU1NFVF9JRCA/IG51bGwgOiBpZCxcbiAgICAgICAgICBpc0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgcGFnZUluZGV4OiBNYXRoLnJvdW5kKChjaGlsZHJlbiA/IGNoaWxkcmVuLnNpemUgOiAwKSAvIGl0ZW1zUGVyUGFnZSksXG4gICAgICAgIH0pXG4gICAgICAgIC50b1Byb21pc2UoKTtcblxuICAgICAgY29uc3QgYXNzZXRDaGlsZHJlbiA9IHJlc3VsdC5EYXRhLkNoaWxkcmVuIHx8IFtdO1xuXG4gICAgICAvLyBIYW5kbGUgZGF0YXNvdXJjZVxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5pbmRleE9mKG5vZGUpO1xuICAgICAgY29uc3Qgbm9kZXMgPSBhc3NldENoaWxkcmVuLm1hcCgoZm9sZGVyKSA9PiB7XG4gICAgICAgIHRoaXMubm9kZVRyZWVTZXJ2aWNlLmFkZE5vZGUoZm9sZGVyLCBpZCk7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVUcmVlU2VydmljZS5nZXREeW5hbWljRmxhdE5vZGUoZm9sZGVyLCBub2RlID8gbm9kZS5sZXZlbCArIDEgOiAwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaWQgIT09IFJPT1RfQVNTRVRfSUQpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5zbGljZSgpO1xuICAgICAgICB1cGRhdGVkRGF0YS5zcGxpY2UoaW5kZXggKyAxLCAwLCAuLi5ub2Rlcyk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdXBkYXRlZERhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2UuZGF0YSwgLi4ubm9kZXNdO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nTW9yZShpZCwgZmFsc2UpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiTG9hZCBtb3JlIGZvbGRlciBlcnJvclwiLCBlcnJvcik7XG4gICAgICB0aGlzLnNldExvYWRpbmdNb3JlKGlkLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tlZChub2RlOiBEeW5hbWljRmxhdE5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Rm9sZGVySWQgJiYgdGhpcy5jdXJyZW50Rm9sZGVySWQgPT09IG5vZGUuaXRlbS5Bc3NldElkO1xuICB9XG5cbiAgZGlzYWJsZWQobm9kZTogRHluYW1pY0ZsYXROb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5vZGUuZXhwYW5kYWJsZTtcbiAgfVxuXG4gIGdldExldmVsID0gKG5vZGU6IER5bmFtaWNGbGF0Tm9kZSkgPT4gbm9kZS5sZXZlbDtcblxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogRHluYW1pY0ZsYXROb2RlKSA9PiBub2RlLmV4cGFuZGFibGU7XG5cbiAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBfbm9kZURhdGE6IER5bmFtaWNGbGF0Tm9kZSkgPT4gX25vZGVEYXRhLmV4cGFuZGFibGU7XG5cbiAgZ2V0UGFyZW50KG5vZGU6IER5bmFtaWNGbGF0Tm9kZSk6IER5bmFtaWNGbGF0Tm9kZSB7XG4gICAgY29uc3QgY3VycmVudExldmVsID0gdGhpcy5nZXRMZXZlbChub2RlKTtcblxuICAgIGlmIChjdXJyZW50TGV2ZWwgPCAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuaW5kZXhPZihub2RlKSAtIDE7XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy5kYXRhU291cmNlLmRhdGFbaV07XG4gICAgICBpZiAodGhpcy5nZXRMZXZlbChjdXJyZW50Tm9kZSkgPCBjdXJyZW50TGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldE5vZGVCeUlkKGlkOiBzdHJpbmcpOiBEeW5hbWljRmxhdE5vZGUge1xuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKChub2RlKSA9PiBub2RlLml0ZW0uQXNzZXRJZCA9PT0gaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVSZWxvYWRGb2xkZXIoaWQ6IHN0cmluZykge1xuICAgIGlmICghaWQgfHwgdGhpcy5sb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaWQpO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KG5vZGUpO1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAvLyBSZWxvYWQgcGFyZW50IGZvbGRlciAoZ2V0IGNoaWxkcmVuIGFuZCBleHBhbmQgaXQgYWdhaW4pXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5mb2xkZXJDaGlsZHJlbk1hcC5nZXQocGFyZW50Lml0ZW0uQXNzZXRJZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZGF0YVNvdXJjZS5yZWxvYWROb2RlKHBhcmVudCwgY2hpbGRyZW4uc2l6ZSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWROb2RlID0gdGhpcy5nZXROb2RlQnlJZChpZCk7XG4gICAgICAgIGlmICh1cGRhdGVkTm9kZSkge1xuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICBhd2FpdCB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh1cGRhdGVkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJvb3RGb2xkZXIgPSB0aGlzLmZvbGRlckNoaWxkcmVuTWFwLmdldChST09UX0FTU0VUX0lEKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ub2RlVHJlZVNlcnZpY2UuaW5pdGlhbERhdGEoeyBkaXNwYXRjaFJvb3RJZDogZmFsc2UsIHBhZ2VTaXplOiByb290Rm9sZGVyLnNpemUgfSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWROb2RlID0gdGhpcy5nZXROb2RlQnlJZChpZCk7XG4gICAgICAgIGlmICh1cGRhdGVkTm9kZSkge1xuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICBhd2FpdCB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh1cGRhdGVkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVsb2FkIHJvb3QgZm9sZGVyXG4gICAgICBhd2FpdCB0aGlzLm5vZGVUcmVlU2VydmljZS5pbml0aWFsRGF0YSh7IGRpc3BhdGNoUm9vdElkOiBmYWxzZSB9KTtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRpbmdNb3JlKGlkOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5sb2FkaW5nTW9yZUxpc3RbaWRdID0gdmFsdWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFtdO1xuICAgIHRoaXMubm9kZVRyZWVTZXJ2aWNlLmRhdGEgPSBbXTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19