@rs-pk/asset-management 1.0.22 → 1.0.24

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 (176) hide show
  1. package/README.md +24 -24
  2. package/bundles/rs-pk-asset-management.umd.js +6444 -6327
  3. package/bundles/rs-pk-asset-management.umd.js.map +1 -1
  4. package/bundles/rs-pk-asset-management.umd.min.js +2 -2
  5. package/bundles/rs-pk-asset-management.umd.min.js.map +1 -1
  6. package/esm2015/lib/asset-management.component.js +164 -152
  7. package/esm2015/lib/asset-management.module.js +178 -179
  8. package/esm2015/lib/asset-management.service.js +45 -45
  9. package/esm2015/lib/components/partial/add-folder-dialog/add-folder-dialog.component.js +146 -146
  10. package/esm2015/lib/components/partial/asset-dialog/asset-dialog.component.js +398 -395
  11. package/esm2015/lib/components/partial/asset-item/asset-item.component.js +316 -299
  12. package/esm2015/lib/components/partial/asset-list/asset-list.component.js +285 -273
  13. package/esm2015/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +123 -109
  14. package/esm2015/lib/components/partial/asset-wrapper/asset-wrapper.component.js +119 -100
  15. package/esm2015/lib/components/partial/breadcrumb/breadcrumb.component.js +121 -121
  16. package/esm2015/lib/components/partial/delete-dialog/delete-dialog.component.js +139 -139
  17. package/esm2015/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.js +151 -151
  18. package/esm2015/lib/components/partial/file-item/file-item.component.js +181 -181
  19. package/esm2015/lib/components/partial/file-list/file-list.component.js +73 -73
  20. package/esm2015/lib/components/partial/folder-item/folder-item.component.js +126 -114
  21. package/esm2015/lib/components/partial/folder-list/folder-list.component.js +81 -69
  22. package/esm2015/lib/components/partial/node-details/node-details.component.js +417 -403
  23. package/esm2015/lib/components/partial/node-tree/node-tree.component.js +330 -330
  24. package/esm2015/lib/components/partial/search-box/search-box.component.js +158 -158
  25. package/esm2015/lib/components/partial/sort-items/sort-items.component.js +99 -99
  26. package/esm2015/lib/components/partial/upload-dialog/upload-dialog.component.js +141 -141
  27. package/esm2015/lib/components/partial/upload-file/upload-file.component.js +85 -85
  28. package/esm2015/lib/components/ui/drag-to-resize/drag-to-resize.component.js +96 -96
  29. package/esm2015/lib/components/ui/input-file/input-file.component.js +49 -49
  30. package/esm2015/lib/components/ui/modal/modal.component.js +34 -34
  31. package/esm2015/lib/components/ui/search-not-found/search-not-found.component.js +41 -41
  32. package/esm2015/lib/configs/admin.config.js +22 -22
  33. package/esm2015/lib/contanst/data-image.js +20 -20
  34. package/esm2015/lib/contanst/index.js +6 -6
  35. package/esm2015/lib/datasources/index.js +6 -6
  36. package/esm2015/lib/datasources/node-tree.datasource.js +179 -179
  37. package/esm2015/lib/directives/dialogTrigger.directive.js +47 -47
  38. package/esm2015/lib/directives/directives.module.js +20 -20
  39. package/esm2015/lib/directives/dnd.directive.js +57 -57
  40. package/esm2015/lib/models/asset-file.model.js +57 -57
  41. package/esm2015/lib/models/asset.model.js +149 -149
  42. package/esm2015/lib/models/file-type.enum.js +11 -11
  43. package/esm2015/lib/models/file.model.js +91 -91
  44. package/esm2015/lib/models/index.js +12 -12
  45. package/esm2015/lib/models/node-tree.model.js +32 -32
  46. package/esm2015/lib/models/sort.enum.js +23 -23
  47. package/esm2015/lib/pipes/datetime.pipe.js +79 -79
  48. package/esm2015/lib/pipes/file-size.pipe.js +54 -54
  49. package/esm2015/lib/services/asset.service.js +229 -229
  50. package/esm2015/lib/services/base.service.js +49 -49
  51. package/esm2015/lib/services/env-config.service.js +18 -18
  52. package/esm2015/lib/services/file.service.js +106 -106
  53. package/esm2015/lib/services/index.js +11 -11
  54. package/esm2015/lib/services/node-tree.service.js +212 -212
  55. package/esm2015/lib/services/upload-assets.service.js +178 -178
  56. package/esm2015/lib/store/actions.action.js +125 -125
  57. package/esm2015/lib/store/index.js +7 -7
  58. package/esm2015/lib/store/reducer.js +115 -115
  59. package/esm2015/public-api.js +34 -34
  60. package/esm2015/rs-pk-asset-management.js +16 -16
  61. package/esm5/lib/asset-management.component.js +179 -167
  62. package/esm5/lib/asset-management.module.js +179 -180
  63. package/esm5/lib/asset-management.service.js +54 -54
  64. package/esm5/lib/components/partial/add-folder-dialog/add-folder-dialog.component.js +164 -164
  65. package/esm5/lib/components/partial/asset-dialog/asset-dialog.component.js +440 -437
  66. package/esm5/lib/components/partial/asset-item/asset-item.component.js +350 -333
  67. package/esm5/lib/components/partial/asset-list/asset-list.component.js +318 -306
  68. package/esm5/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +138 -124
  69. package/esm5/lib/components/partial/asset-wrapper/asset-wrapper.component.js +137 -115
  70. package/esm5/lib/components/partial/breadcrumb/breadcrumb.component.js +143 -143
  71. package/esm5/lib/components/partial/delete-dialog/delete-dialog.component.js +154 -154
  72. package/esm5/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.js +169 -169
  73. package/esm5/lib/components/partial/file-item/file-item.component.js +206 -206
  74. package/esm5/lib/components/partial/file-list/file-list.component.js +93 -93
  75. package/esm5/lib/components/partial/folder-item/folder-item.component.js +138 -126
  76. package/esm5/lib/components/partial/folder-list/folder-list.component.js +94 -82
  77. package/esm5/lib/components/partial/node-details/node-details.component.js +458 -444
  78. package/esm5/lib/components/partial/node-tree/node-tree.component.js +413 -413
  79. package/esm5/lib/components/partial/search-box/search-box.component.js +184 -184
  80. package/esm5/lib/components/partial/sort-items/sort-items.component.js +107 -107
  81. package/esm5/lib/components/partial/upload-dialog/upload-dialog.component.js +156 -156
  82. package/esm5/lib/components/partial/upload-file/upload-file.component.js +102 -102
  83. package/esm5/lib/components/ui/drag-to-resize/drag-to-resize.component.js +117 -117
  84. package/esm5/lib/components/ui/input-file/input-file.component.js +55 -55
  85. package/esm5/lib/components/ui/modal/modal.component.js +39 -39
  86. package/esm5/lib/components/ui/search-not-found/search-not-found.component.js +43 -43
  87. package/esm5/lib/configs/admin.config.js +22 -22
  88. package/esm5/lib/contanst/data-image.js +20 -20
  89. package/esm5/lib/contanst/index.js +6 -6
  90. package/esm5/lib/datasources/index.js +6 -6
  91. package/esm5/lib/datasources/node-tree.datasource.js +239 -239
  92. package/esm5/lib/directives/dialogTrigger.directive.js +53 -53
  93. package/esm5/lib/directives/directives.module.js +25 -25
  94. package/esm5/lib/directives/dnd.directive.js +80 -80
  95. package/esm5/lib/models/asset-file.model.js +69 -69
  96. package/esm5/lib/models/asset.model.js +168 -168
  97. package/esm5/lib/models/file-type.enum.js +11 -11
  98. package/esm5/lib/models/file.model.js +99 -99
  99. package/esm5/lib/models/index.js +12 -12
  100. package/esm5/lib/models/node-tree.model.js +37 -37
  101. package/esm5/lib/models/sort.enum.js +23 -23
  102. package/esm5/lib/pipes/datetime.pipe.js +83 -83
  103. package/esm5/lib/pipes/file-size.pipe.js +63 -63
  104. package/esm5/lib/services/asset.service.js +279 -279
  105. package/esm5/lib/services/base.service.js +57 -57
  106. package/esm5/lib/services/env-config.service.js +18 -18
  107. package/esm5/lib/services/file.service.js +127 -127
  108. package/esm5/lib/services/index.js +11 -11
  109. package/esm5/lib/services/node-tree.service.js +278 -278
  110. package/esm5/lib/services/upload-assets.service.js +207 -207
  111. package/esm5/lib/store/actions.action.js +143 -143
  112. package/esm5/lib/store/index.js +7 -7
  113. package/esm5/lib/store/reducer.js +116 -116
  114. package/esm5/public-api.js +34 -34
  115. package/esm5/rs-pk-asset-management.js +16 -16
  116. package/fesm2015/rs-pk-asset-management.js +5642 -5528
  117. package/fesm2015/rs-pk-asset-management.js.map +1 -1
  118. package/fesm5/rs-pk-asset-management.js +6448 -6331
  119. package/fesm5/rs-pk-asset-management.js.map +1 -1
  120. package/lib/asset-management.component.d.ts +25 -22
  121. package/lib/asset-management.module.d.ts +5 -5
  122. package/lib/asset-management.service.d.ts +7 -7
  123. package/lib/components/partial/add-folder-dialog/add-folder-dialog.component.d.ts +27 -27
  124. package/lib/components/partial/asset-dialog/asset-dialog.component.d.ts +65 -60
  125. package/lib/components/partial/asset-item/asset-item.component.d.ts +40 -37
  126. package/lib/components/partial/asset-list/asset-list.component.d.ts +27 -24
  127. package/lib/components/partial/asset-management-dialog/asset-management-dialog.component.d.ts +20 -17
  128. package/lib/components/partial/asset-wrapper/asset-wrapper.component.d.ts +23 -19
  129. package/lib/components/partial/breadcrumb/breadcrumb.component.d.ts +18 -18
  130. package/lib/components/partial/delete-dialog/delete-dialog.component.d.ts +24 -24
  131. package/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.d.ts +28 -28
  132. package/lib/components/partial/file-item/file-item.component.d.ts +36 -36
  133. package/lib/components/partial/file-list/file-list.component.d.ts +15 -15
  134. package/lib/components/partial/folder-item/folder-item.component.d.ts +17 -14
  135. package/lib/components/partial/folder-list/folder-list.component.d.ts +14 -11
  136. package/lib/components/partial/node-details/node-details.component.d.ts +32 -29
  137. package/lib/components/partial/node-tree/node-tree.component.d.ts +34 -34
  138. package/lib/components/partial/search-box/search-box.component.d.ts +18 -18
  139. package/lib/components/partial/sort-items/sort-items.component.d.ts +21 -21
  140. package/lib/components/partial/upload-dialog/upload-dialog.component.d.ts +25 -25
  141. package/lib/components/partial/upload-file/upload-file.component.d.ts +16 -16
  142. package/lib/components/ui/drag-to-resize/drag-to-resize.component.d.ts +15 -15
  143. package/lib/components/ui/input-file/input-file.component.d.ts +9 -9
  144. package/lib/components/ui/modal/modal.component.d.ts +7 -7
  145. package/lib/components/ui/search-not-found/search-not-found.component.d.ts +8 -8
  146. package/lib/configs/admin.config.d.ts +3 -3
  147. package/lib/contanst/data-image.d.ts +6 -6
  148. package/lib/contanst/index.d.ts +1 -1
  149. package/lib/datasources/index.d.ts +1 -1
  150. package/lib/datasources/node-tree.datasource.d.ts +24 -24
  151. package/lib/directives/dialogTrigger.directive.d.ts +7 -7
  152. package/lib/directives/directives.module.d.ts +5 -5
  153. package/lib/directives/dnd.directive.d.ts +7 -7
  154. package/lib/models/asset-file.model.d.ts +26 -26
  155. package/lib/models/asset.model.d.ts +68 -68
  156. package/lib/models/file-type.enum.d.ts +4 -4
  157. package/lib/models/file.model.d.ts +41 -41
  158. package/lib/models/index.d.ts +7 -7
  159. package/lib/models/node-tree.model.d.ts +9 -9
  160. package/lib/models/sort.enum.d.ts +9 -9
  161. package/lib/pipes/datetime.pipe.d.ts +13 -13
  162. package/lib/pipes/file-size.pipe.d.ts +5 -5
  163. package/lib/services/asset.service.d.ts +36 -36
  164. package/lib/services/base.service.d.ts +20 -20
  165. package/lib/services/env-config.service.d.ts +7 -7
  166. package/lib/services/file.service.d.ts +13 -13
  167. package/lib/services/index.d.ts +6 -6
  168. package/lib/services/node-tree.service.d.ts +24 -24
  169. package/lib/services/upload-assets.service.d.ts +34 -34
  170. package/lib/store/actions.action.d.ts +51 -51
  171. package/lib/store/index.d.ts +2 -2
  172. package/lib/store/reducer.d.ts +18 -18
  173. package/package.json +1 -1
  174. package/public-api.d.ts +26 -26
  175. package/rs-pk-asset-management.d.ts +12 -12
  176. package/rs-pk-asset-management.metadata.json +1 -1
@@ -1,444 +1,458 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import * as tslib_1 from "tslib";
6
- import { ChangeDetectorRef, Component } from '@angular/core';
7
- import { MatDialog } from '@angular/material/dialog';
8
- import { of } from 'rxjs';
9
- import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
10
- import { combineLatest } from 'rxjs/internal/observable/combineLatest';
11
- import { Subject } from 'rxjs/internal/Subject';
12
- import { switchMap, takeUntil } from 'rxjs/operators';
13
- import { AssetManagementService } from '../../../asset-management.service';
14
- import { AssetService } from '../../../services/asset.service';
15
- import { NodeTreeService } from '../../../services/node-tree.service';
16
- import { ActionTypes, select } from '../../../store';
17
- import { AddFolderDialogComponent } from '../add-folder-dialog/add-folder-dialog.component';
18
- import { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';
19
- import { UploadDialogComponent } from '../upload-dialog/upload-dialog.component';
20
- var NodeDetailsComponent = /** @class */ (function () {
21
- function NodeDetailsComponent(dialog, assetService, nodeTreeService, svc, changeDetectorRef) {
22
- this.dialog = dialog;
23
- this.assetService = assetService;
24
- this.nodeTreeService = nodeTreeService;
25
- this.svc = svc;
26
- this.changeDetectorRef = changeDetectorRef;
27
- this.unsubscribe$ = new Subject();
28
- this.selectedAssets = [];
29
- this.loading$ = new BehaviorSubject(false);
30
- this.bindSubscriber();
31
- }
32
- /**
33
- * @return {?}
34
- */
35
- NodeDetailsComponent.prototype.ngOnInit = /**
36
- * @return {?}
37
- */
38
- function () {
39
- var _this = this;
40
- this.assetService
41
- .getFolderList()
42
- .pipe(takeUntil(this.unsubscribe$))
43
- .subscribe((/**
44
- * @param {?} folders
45
- * @return {?}
46
- */
47
- function (folders) {
48
- _this.currentFolder = folders;
49
- _this.changeDetectorRef.detectChanges();
50
- }));
51
- this.assetService
52
- .getAssetList()
53
- .pipe(takeUntil(this.unsubscribe$))
54
- .subscribe((/**
55
- * @param {?} assets
56
- * @return {?}
57
- */
58
- function (assets) {
59
- _this.assets = assets;
60
- _this.changeDetectorRef.detectChanges();
61
- }));
62
- };
63
- /**
64
- * @private
65
- * @return {?}
66
- */
67
- NodeDetailsComponent.prototype.bindSubscriber = /**
68
- * @private
69
- * @return {?}
70
- */
71
- function () {
72
- var _this = this;
73
- select((/**
74
- * @param {?} state
75
- * @return {?}
76
- */
77
- function (state) { return state.globalLoading; }))
78
- .pipe(takeUntil(this.unsubscribe$), switchMap((/**
79
- * @param {?} res
80
- * @return {?}
81
- */
82
- function (res) { return of(res); })))
83
- .subscribe((/**
84
- * @param {?} globalLoading
85
- * @return {?}
86
- */
87
- function (globalLoading) {
88
- _this.loading$.next(globalLoading);
89
- }));
90
- select((/**
91
- * @param {?} state
92
- * @return {?}
93
- */
94
- function (state) { return state.selectedAssets; }))
95
- .pipe(takeUntil(this.unsubscribe$))
96
- .subscribe((/**
97
- * @param {?} selectedAssets
98
- * @return {?}
99
- */
100
- function (selectedAssets) {
101
- if (selectedAssets) {
102
- _this.selectedAssets = selectedAssets;
103
- }
104
- }));
105
- select((/**
106
- * @param {?} state
107
- * @return {?}
108
- */
109
- function (state) { return state.currentFolderId; }))
110
- .pipe(takeUntil(this.unsubscribe$), switchMap((/**
111
- * @param {?} res
112
- * @return {?}
113
- */
114
- function (res) { return of(res); })))
115
- .subscribe((/**
116
- * @param {?} currentFolderId
117
- * @return {?}
118
- */
119
- function (currentFolderId) {
120
- if (currentFolderId) {
121
- _this.assetService.pageIndex = 0;
122
- _this.fetchNodeDetails(currentFolderId);
123
- }
124
- }));
125
- select((/**
126
- * @param {?} state
127
- * @return {?}
128
- */
129
- function (state) { return state.reloadCurrentFolder; }))
130
- .pipe(takeUntil(this.unsubscribe$), switchMap((/**
131
- * @param {?} res
132
- * @return {?}
133
- */
134
- function (res) { return of(res); })))
135
- .subscribe((/**
136
- * @return {?}
137
- */
138
- function () {
139
- if (!_this.currentFolder) {
140
- return;
141
- }
142
- _this.fetchFolder(_this.currentFolder.AssetId);
143
- }));
144
- select((/**
145
- * @param {?} state
146
- * @return {?}
147
- */
148
- function (state) { return state.reloadCurrentNode; }))
149
- .pipe(takeUntil(this.unsubscribe$), switchMap((/**
150
- * @param {?} res
151
- * @return {?}
152
- */
153
- function (res) { return of(res); })))
154
- .subscribe((/**
155
- * @return {?}
156
- */
157
- function () {
158
- if (!_this.currentFolder) {
159
- return;
160
- }
161
- _this.assetService.pageIndex = 0;
162
- _this.fetchNodeDetails(_this.currentFolder.AssetId);
163
- }));
164
- };
165
- /**
166
- * @return {?}
167
- */
168
- NodeDetailsComponent.prototype.openUploadDialog = /**
169
- * @return {?}
170
- */
171
- function () {
172
- var _this = this;
173
- /** @type {?} */
174
- var dialogRef = this.dialog.open(UploadDialogComponent, {
175
- data: {
176
- currentAssetId: this.currentFolder.AssetId,
177
- fileType: this.assetService.dialogConfig.allowedType,
178
- maxSize: this.assetService.maxSize
179
- },
180
- panelClass: 'lib-dialog--medium',
181
- });
182
- dialogRef.afterClosed().subscribe((/**
183
- * @param {?} res
184
- * @return {?}
185
- */
186
- function (res) {
187
- if (res) {
188
- _this.svc.dispatch({
189
- type: ActionTypes.RELOAD_CURRENT_ASSETS,
190
- });
191
- _this.svc.dispatch({
192
- type: ActionTypes.RELOAD_CURRENT_FOLDER,
193
- });
194
- }
195
- }));
196
- };
197
- /**
198
- * @return {?}
199
- */
200
- NodeDetailsComponent.prototype.addFolder = /**
201
- * @return {?}
202
- */
203
- function () {
204
- var _this = this;
205
- /** @type {?} */
206
- var dialogRef = this.dialog.open(AddFolderDialogComponent, {
207
- data: {
208
- currentAssetId: this.currentFolder.AssetId,
209
- },
210
- panelClass: 'lib-dialog--small',
211
- });
212
- dialogRef.afterClosed().subscribe((/**
213
- * @param {?} res
214
- * @return {?}
215
- */
216
- function (res) {
217
- if (res) {
218
- _this.svc.dispatch({
219
- type: ActionTypes.RELOAD_CURRENT_FOLDER,
220
- });
221
- }
222
- }));
223
- };
224
- /**
225
- * @return {?}
226
- */
227
- NodeDetailsComponent.prototype.deleteAssets = /**
228
- * @return {?}
229
- */
230
- function () {
231
- var _this = this;
232
- /** @type {?} */
233
- var ids = this.selectedAssets.map((/**
234
- * @param {?} asset
235
- * @return {?}
236
- */
237
- function (asset) { return asset.AssetId; }));
238
- /** @type {?} */
239
- var dialogRef = this.dialog.open(DeleteDialogComponent, {
240
- data: {
241
- type: 'files',
242
- ids: ids,
243
- },
244
- panelClass: 'lib-dialog--small',
245
- autoFocus: false,
246
- });
247
- dialogRef.afterClosed().subscribe((/**
248
- * @param {?} res
249
- * @return {?}
250
- */
251
- function (res) {
252
- if (res) {
253
- _this.svc.dispatch({
254
- type: ActionTypes.RELOAD_CURRENT_ASSETS,
255
- });
256
- _this.svc.dispatch({
257
- type: ActionTypes.RELOAD_CURRENT_FOLDER,
258
- });
259
- _this.svc.dispatch({
260
- type: ActionTypes.SET_SELECTED_ASSETS,
261
- payload: [],
262
- });
263
- }
264
- }));
265
- };
266
- /**
267
- * @private
268
- * @param {?} id
269
- * @return {?}
270
- */
271
- NodeDetailsComponent.prototype.fetchFolder = /**
272
- * @private
273
- * @param {?} id
274
- * @return {?}
275
- */
276
- function (id) {
277
- var _this = this;
278
- this.svc.dispatch({
279
- type: ActionTypes.SET_GLOBAL_LOADING,
280
- payload: true,
281
- });
282
- this.assetService
283
- .getChildrenFolders({ assetId: id })
284
- .pipe(takeUntil(this.unsubscribe$))
285
- .subscribe((/**
286
- * @param {?} res
287
- * @return {?}
288
- */
289
- function (res) {
290
- _this.assetService.setFolderList(res.Data, res.Meta.Total);
291
- if (res.Data && res.Data.Children) {
292
- res.Data.Children.forEach((/**
293
- * @param {?} node
294
- * @return {?}
295
- */
296
- function (node) {
297
- return _this.nodeTreeService.addNode(node, _this.currentFolder.AssetId);
298
- }));
299
- }
300
- }))
301
- .add((/**
302
- * @return {?}
303
- */
304
- function () {
305
- _this.svc.dispatch({
306
- type: ActionTypes.SET_GLOBAL_LOADING,
307
- payload: false,
308
- });
309
- }));
310
- };
311
- /**
312
- * @private
313
- * @param {?} id
314
- * @return {?}
315
- */
316
- NodeDetailsComponent.prototype.fetchNodeDetails = /**
317
- * @private
318
- * @param {?} id
319
- * @return {?}
320
- */
321
- function (id) {
322
- var _this = this;
323
- this.svc.dispatch({
324
- type: ActionTypes.SET_GLOBAL_LOADING,
325
- payload: true,
326
- });
327
- combineLatest([
328
- this.assetService.getChildrenFolders({ assetId: id }),
329
- this.assetService.getChildrenAssets({
330
- assetId: id,
331
- }),
332
- ])
333
- .pipe(takeUntil(this.unsubscribe$))
334
- .subscribe((/**
335
- * @param {?} __0
336
- * @return {?}
337
- */
338
- function (_a) {
339
- var _b = tslib_1.__read(_a, 2), folders = _b[0], assets = _b[1];
340
- _this.assetService.setFolderList(folders.Data, folders.Meta.Total);
341
- _this.assetService.setAssetList(assets.Data.Children, assets.Meta);
342
- if (folders.Data && folders.Data.Children) {
343
- folders.Data.Children.forEach((/**
344
- * @param {?} node
345
- * @return {?}
346
- */
347
- function (node) {
348
- return _this.nodeTreeService.addNode(node, _this.currentFolder.AssetId);
349
- }));
350
- }
351
- }))
352
- .add((/**
353
- * @return {?}
354
- */
355
- function () {
356
- _this.svc.dispatch({
357
- type: ActionTypes.SET_GLOBAL_LOADING,
358
- payload: false,
359
- });
360
- }));
361
- };
362
- Object.defineProperty(NodeDetailsComponent.prototype, "noResults", {
363
- get: /**
364
- * @return {?}
365
- */
366
- function () {
367
- return (this.assetService.keyword &&
368
- !this.currentFolder.Children.length &&
369
- !this.assets.length);
370
- },
371
- enumerable: true,
372
- configurable: true
373
- });
374
- /**
375
- * @return {?}
376
- */
377
- NodeDetailsComponent.prototype.ngOnDestroy = /**
378
- * @return {?}
379
- */
380
- function () {
381
- this.svc.dispatch({
382
- type: ActionTypes.SET_CURRENT_FOLDER_ID,
383
- payload: null,
384
- });
385
- this.svc.dispatch({
386
- type: ActionTypes.SET_SELECTED_ASSETS,
387
- payload: [],
388
- });
389
- this.unsubscribe$.next();
390
- this.unsubscribe$.complete();
391
- };
392
- NodeDetailsComponent.decorators = [
393
- { type: Component, args: [{
394
- selector: 'lib-node-details',
395
- template: "<div class=\"node-details custom-scrollbar\">\n <div class=\"node-header\">\n <mat-progress-bar [style.visibility]=\"(loading$ | async) ? 'visible' : 'hidden'\" mode=\"indeterminate\">\n </mat-progress-bar>\n <div class=\"node-header-content\">\n <div class=\"node-header-content__left\">\n <H5 class=\"node-header-content__left--title\">\n <ng-container *ngIf=\"assetService?.keyword\">\n Search results for <span>{{ assetService?.keyword }}</span> in\n </ng-container>\n {{ currentFolder?.OriginalFileName }}\n </H5>\n <p *ngIf=\"!noResults\" class=\"node-header-content__left--subtitle\">\n {{ assetService?.folderTotal }}\n {{ assetService?.folderTotal > 1 ? 'folders' : 'folder' }},\n {{ assetService?.fileTotal }}\n {{ assetService?.fileTotal > 1 ? 'files': 'file' }}\n </p>\n </div>\n <div class=\"node-header-content__right\">\n <div class=\"button-wrapper\">\n <button mat-raised-button [disabled]=\"!selectedAssets?.length\" (click)=\"deleteAssets()\" color=\"warn\">\n <span>{{selectedAssets?.length > 1 ? 'Delete assets' : 'Delete asset'}}</span>\n <span *ngIf=\"selectedAssets?.length\" class=\"count\">({{ selectedAssets.length }})</span>\n </button>\n <button mat-raised-button color=\"primary\" (click)=\"openUploadDialog()\" [disabled]=\"!currentFolder?.AssetId\">\n Upload asset\n </button>\n <button mat-raised-button color=\"primary\" (click)=\"addFolder()\" [disabled]=\"!currentFolder?.AssetId\">\n Add folder\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"node-body\">\n <lib-search-not-found *ngIf=\"noResults; else contentAsset\"></lib-search-not-found>\n <ng-template #contentAsset>\n <lib-folder-list class=\"node-body__section\" [folders]=\"currentFolder?.Children\"></lib-folder-list>\n <lib-asset-list [assets]=\"assets\"></lib-asset-list>\n </ng-template>\n </div>\n</div>",
396
- styles: [":host::ng-deep .node-details{max-height:100%;overflow-y:auto}:host::ng-deep .node-details .node-header{position:-webkit-sticky;position:sticky;top:0;background-color:#fff;z-index:20}:host::ng-deep .node-details .node-header-content{padding:10px 20px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}:host::ng-deep .node-details .node-header-content__left--title{margin-bottom:5px}:host::ng-deep .node-details .node-header-content__left--title span{color:#fb3458}:host::ng-deep .node-details .node-header-content__left--subtitle{margin:0;color:#979797;font-size:14px}:host::ng-deep .node-details .node-header-content__right{flex:1}:host::ng-deep .node-details .node-header-content__right .button-wrapper{display:flex;gap:15px;justify-content:flex-end}:host::ng-deep .node-details .node-header-content__right .button-wrapper .count{margin-left:3px}:host::ng-deep .node-details .node-body{padding:0 20px}:host::ng-deep .node-details .node-body__section{display:block;margin-bottom:15px}"]
397
- }] }
398
- ];
399
- /** @nocollapse */
400
- NodeDetailsComponent.ctorParameters = function () { return [
401
- { type: MatDialog },
402
- { type: AssetService },
403
- { type: NodeTreeService },
404
- { type: AssetManagementService },
405
- { type: ChangeDetectorRef }
406
- ]; };
407
- return NodeDetailsComponent;
408
- }());
409
- export { NodeDetailsComponent };
410
- if (false) {
411
- /**
412
- * @type {?}
413
- * @private
414
- */
415
- NodeDetailsComponent.prototype.unsubscribe$;
416
- /** @type {?} */
417
- NodeDetailsComponent.prototype.selectedAssets;
418
- /** @type {?} */
419
- NodeDetailsComponent.prototype.loading$;
420
- /** @type {?} */
421
- NodeDetailsComponent.prototype.currentFolder;
422
- /** @type {?} */
423
- NodeDetailsComponent.prototype.assets;
424
- /** @type {?} */
425
- NodeDetailsComponent.prototype.dialog;
426
- /** @type {?} */
427
- NodeDetailsComponent.prototype.assetService;
428
- /**
429
- * @type {?}
430
- * @private
431
- */
432
- NodeDetailsComponent.prototype.nodeTreeService;
433
- /**
434
- * @type {?}
435
- * @private
436
- */
437
- NodeDetailsComponent.prototype.svc;
438
- /**
439
- * @type {?}
440
- * @private
441
- */
442
- NodeDetailsComponent.prototype.changeDetectorRef;
443
- }
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bycy1way9hc3NldC1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcGFydGlhbC9ub2RlLWRldGFpbHMvbm9kZS1kZXRhaWxzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWpGO0lBTUUsOEJBQ1MsTUFBaUIsRUFDakIsWUFBMEIsRUFDekIsZUFBZ0MsRUFDaEMsR0FBMkIsRUFDM0Is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Q1osQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7O2dCQTNPRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsb2pFQUE0Qzs7aUJBRTdDOzs7O2dCQW5CUSxTQUFTO2dCQVFULFlBQVk7Z0JBQ1osZUFBZTtnQkFIZixzQkFBc0I7Z0JBUHRCLGlCQUFpQjs7SUE0UDFCLDJCQUFDO0NBQUEsQUE1T0QsSUE0T0M7U0F2T1ksb0JBQW9COzs7Ozs7SUFXL0IsNENBQTJDOztJQUUzQyw4Q0FBOEM7O0lBQzlDLHdDQUF1RTs7SUFDdkUsNkNBQXNDOztJQUN0QyxzQ0FBNEI7O0lBZDFCLHNDQUF3Qjs7SUFDeEIsNENBQWlDOzs7OztJQUNqQywrQ0FBd0M7Ozs7O0lBQ3hDLG1DQUFtQzs7Ozs7SUFDbkMsaURBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcy9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL1N1YmplY3QnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBc3NldE1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXNzZXQtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFzc2V0TW9kZWwsIEZvbGRlclRyZWVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBBc3NldFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hc3NldC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVUcmVlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vZGUtdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGlvblR5cGVzLCBzZWxlY3QgfSBmcm9tICcuLi8uLi8uLi9zdG9yZSc7XG5pbXBvcnQgeyBBZGRGb2xkZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtZm9sZGVyLWRpYWxvZy9hZGQtZm9sZGVyLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVsZXRlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVsZXRlLWRpYWxvZy9kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVcGxvYWREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi91cGxvYWQtZGlhbG9nL3VwbG9hZC1kaWFsb2cuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW5vZGUtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLWRldGFpbHMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwdWJsaWMgYXNzZXRTZXJ2aWNlOiBBc3NldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub2RlVHJlZVNlcnZpY2U6IE5vZGVUcmVlU2VydmljZSxcbiAgICBwcml2YXRlIHN2YzogQXNzZXRNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLmJpbmRTdWJzY3JpYmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIHNlbGVjdGVkQXNzZXRzOiBBcnJheTxBc3NldE1vZGVsPiA9IFtdO1xuICBwdWJsaWMgbG9hZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwdWJsaWMgY3VycmVudEZvbGRlcjogRm9sZGVyVHJlZU1vZGVsO1xuICBwdWJsaWMgYXNzZXRzOiBBc3NldE1vZGVsW107XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hc3NldFNlcnZpY2VcbiAgICAgIC5nZXRGb2xkZXJMaXN0KClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChmb2xkZXJzKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudEZvbGRlciA9IGZvbGRlcnM7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5hc3NldFNlcnZpY2VcbiAgICAgIC5nZXRBc3NldExpc3QoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGFzc2V0cykgPT4ge1xuICAgICAgICB0aGlzLmFzc2V0cyA9IGFzc2V0cztcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYmluZFN1YnNjcmliZXIoKSB7XG4gICAgc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUuZ2xvYmFsTG9hZGluZylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHJlcykgPT4gb2YocmVzKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGdsb2JhbExvYWRpbmcpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGdsb2JhbExvYWRpbmcpO1xuICAgICAgfSk7XG5cbiAgICBzZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZS5zZWxlY3RlZEFzc2V0cylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZEFzc2V0cykgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0ZWRBc3NldHMpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQXNzZXRzID0gc2VsZWN0ZWRBc3NldHM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUuY3VycmVudEZvbGRlcklkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgIHN3aXRjaE1hcCgocmVzKSA9PiBvZihyZXMpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoY3VycmVudEZvbGRlcklkKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50Rm9sZGVySWQpIHtcbiAgICAgICAgICB0aGlzLmFzc2V0U2VydmljZS5wYWdlSW5kZXggPSAwO1xuICAgICAgICAgIHRoaXMuZmV0Y2hOb2RlRGV0YWlscyhjdXJyZW50Rm9sZGVySWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLnJlbG9hZEN1cnJlbnRGb2xkZXIpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgICAgc3dpdGNoTWFwKChyZXMpID0+IG9mKHJlcykpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRGb2xkZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mZXRjaEZvbGRlcih0aGlzLmN1cnJlbnRGb2xkZXIuQXNzZXRJZCk7XG4gICAgICB9KTtcblxuICAgIHNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLnJlbG9hZEN1cnJlbnROb2RlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgIHN3aXRjaE1hcCgocmVzKSA9PiBvZihyZXMpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50Rm9sZGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXNzZXRTZXJ2aWNlLnBhZ2VJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuZmV0Y2hOb2RlRGV0YWlscyh0aGlzLmN1cnJlbnRGb2xkZXIuQXNzZXRJZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuVXBsb2FkRGlhbG9nKCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVXBsb2FkRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGN1cnJlbnRBc3NldElkOiB0aGlzLmN1cnJlbnRGb2xkZXIuQXNzZXRJZCxcbiAgICAgICAgZmlsZVR5cGU6IHRoaXMuYXNzZXRTZXJ2aWNlLmRpYWxvZ0NvbmZpZy5hbGxvd2VkVHlwZSxcbiAgICAgICAgbWF4U2l6ZTogdGhpcy5hc3NldFNlcnZpY2UubWF4U2l6ZVxuICAgICAgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdsaWItZGlhbG9nLS1tZWRpdW0nLFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTE9BRF9DVVJSRU5UX0FTU0VUUyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRUxPQURfQ1VSUkVOVF9GT0xERVIsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkRm9sZGVyKCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWRkRm9sZGVyRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGN1cnJlbnRBc3NldElkOiB0aGlzLmN1cnJlbnRGb2xkZXIuQXNzZXRJZCxcbiAgICAgIH0sXG4gICAgICBwYW5lbENsYXNzOiAnbGliLWRpYWxvZy0tc21hbGwnLFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTE9BRF9DVVJSRU5UX0ZPTERFUixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVBc3NldHMoKSB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5zZWxlY3RlZEFzc2V0cy5tYXAoKGFzc2V0KSA9PiBhc3NldC5Bc3NldElkKTtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERlbGV0ZURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICB0eXBlOiAnZmlsZXMnLFxuICAgICAgICBpZHMsXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2xpYi1kaWFsb2ctLXNtYWxsJyxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVMT0FEX0NVUlJFTlRfQVNTRVRTLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTE9BRF9DVVJSRU5UX0ZPTERFUixcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfU0VMRUNURURfQVNTRVRTLFxuICAgICAgICAgIHBheWxvYWQ6IFtdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hGb2xkZXIoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9HTE9CQUxfTE9BRElORyxcbiAgICAgIHBheWxvYWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc2V0U2VydmljZVxuICAgICAgLmdldENoaWxkcmVuRm9sZGVycyh7IGFzc2V0SWQ6IGlkIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuYXNzZXRTZXJ2aWNlLnNldEZvbGRlckxpc3QocmVzLkRhdGEsIHJlcy5NZXRhLlRvdGFsKTtcbiAgICAgICAgaWYgKHJlcy5EYXRhICYmIHJlcy5EYXRhLkNoaWxkcmVuKSB7XG4gICAgICAgICAgcmVzLkRhdGEuQ2hpbGRyZW4uZm9yRWFjaCgobm9kZSkgPT5cbiAgICAgICAgICAgIHRoaXMubm9kZVRyZWVTZXJ2aWNlLmFkZE5vZGUobm9kZSwgdGhpcy5jdXJyZW50Rm9sZGVyLkFzc2V0SWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0dMT0JBTF9MT0FESU5HLFxuICAgICAgICAgIHBheWxvYWQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaE5vZGVEZXRhaWxzKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfR0xPQkFMX0xPQURJTkcsXG4gICAgICBwYXlsb2FkOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5hc3NldFNlcnZpY2UuZ2V0Q2hpbGRyZW5Gb2xkZXJzKHsgYXNzZXRJZDogaWQgfSksXG4gICAgICB0aGlzLmFzc2V0U2VydmljZS5nZXRDaGlsZHJlbkFzc2V0cyh7XG4gICAgICAgIGFzc2V0SWQ6IGlkLFxuICAgICAgfSksXG4gICAgXSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChbZm9sZGVycywgYXNzZXRzXSkgPT4ge1xuICAgICAgICB0aGlzLmFzc2V0U2VydmljZS5zZXRGb2xkZXJMaXN0KGZvbGRlcnMuRGF0YSwgZm9sZGVycy5NZXRhLlRvdGFsKTtcbiAgICAgICAgdGhpcy5hc3NldFNlcnZpY2Uuc2V0QXNzZXRMaXN0KGFzc2V0cy5EYXRhLkNoaWxkcmVuLCBhc3NldHMuTWV0YSk7XG4gICAgICAgIGlmIChmb2xkZXJzLkRhdGEgJiYgZm9sZGVycy5EYXRhLkNoaWxkcmVuKSB7XG4gICAgICAgICAgZm9sZGVycy5EYXRhLkNoaWxkcmVuLmZvckVhY2goKG5vZGUpID0+XG4gICAgICAgICAgICB0aGlzLm5vZGVUcmVlU2VydmljZS5hZGROb2RlKG5vZGUsIHRoaXMuY3VycmVudEZvbGRlci5Bc3NldElkKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9HTE9CQUxfTE9BRElORyxcbiAgICAgICAgICBwYXlsb2FkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldCBub1Jlc3VsdHMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYXNzZXRTZXJ2aWNlLmtleXdvcmQgJiZcbiAgICAgICF0aGlzLmN1cnJlbnRGb2xkZXIuQ2hpbGRyZW4ubGVuZ3RoICYmXG4gICAgICAhdGhpcy5hc3NldHMubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9DVVJSRU5UX0ZPTERFUl9JRCxcbiAgICAgIHBheWxvYWQ6IG51bGwsXG4gICAgfSk7XG4gICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX1NFTEVDVEVEX0FTU0VUUyxcbiAgICAgIHBheWxvYWQ6IFtdLFxuICAgIH0pO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import * as tslib_1 from "tslib";
6
+ import { ChangeDetectorRef, Component, Input } from '@angular/core';
7
+ import { MatDialog } from '@angular/material/dialog';
8
+ import { of } from 'rxjs';
9
+ import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
10
+ import { combineLatest } from 'rxjs/internal/observable/combineLatest';
11
+ import { Subject } from 'rxjs/internal/Subject';
12
+ import { switchMap, takeUntil } from 'rxjs/operators';
13
+ import { AssetManagementService } from '../../../asset-management.service';
14
+ import { AssetService } from '../../../services/asset.service';
15
+ import { NodeTreeService } from '../../../services/node-tree.service';
16
+ import { ActionTypes, select } from '../../../store';
17
+ import { AddFolderDialogComponent } from '../add-folder-dialog/add-folder-dialog.component';
18
+ import { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';
19
+ import { UploadDialogComponent } from '../upload-dialog/upload-dialog.component';
20
+ var NodeDetailsComponent = /** @class */ (function () {
21
+ function NodeDetailsComponent(dialog, assetService, nodeTreeService, svc, changeDetectorRef) {
22
+ this.dialog = dialog;
23
+ this.assetService = assetService;
24
+ this.nodeTreeService = nodeTreeService;
25
+ this.svc = svc;
26
+ this.changeDetectorRef = changeDetectorRef;
27
+ this.hasModifyPermission = true;
28
+ this.hasAccessPermission = true;
29
+ this.hasArchivePermission = true;
30
+ this.unsubscribe$ = new Subject();
31
+ this.selectedAssets = [];
32
+ this.loading$ = new BehaviorSubject(false);
33
+ this.bindSubscriber();
34
+ }
35
+ /**
36
+ * @return {?}
37
+ */
38
+ NodeDetailsComponent.prototype.ngOnInit = /**
39
+ * @return {?}
40
+ */
41
+ function () {
42
+ var _this = this;
43
+ this.assetService
44
+ .getFolderList()
45
+ .pipe(takeUntil(this.unsubscribe$))
46
+ .subscribe((/**
47
+ * @param {?} folders
48
+ * @return {?}
49
+ */
50
+ function (folders) {
51
+ _this.currentFolder = folders;
52
+ _this.changeDetectorRef.detectChanges();
53
+ }));
54
+ this.assetService
55
+ .getAssetList()
56
+ .pipe(takeUntil(this.unsubscribe$))
57
+ .subscribe((/**
58
+ * @param {?} assets
59
+ * @return {?}
60
+ */
61
+ function (assets) {
62
+ _this.assets = assets;
63
+ _this.changeDetectorRef.detectChanges();
64
+ }));
65
+ };
66
+ /**
67
+ * @private
68
+ * @return {?}
69
+ */
70
+ NodeDetailsComponent.prototype.bindSubscriber = /**
71
+ * @private
72
+ * @return {?}
73
+ */
74
+ function () {
75
+ var _this = this;
76
+ select((/**
77
+ * @param {?} state
78
+ * @return {?}
79
+ */
80
+ function (state) { return state.globalLoading; }))
81
+ .pipe(takeUntil(this.unsubscribe$), switchMap((/**
82
+ * @param {?} res
83
+ * @return {?}
84
+ */
85
+ function (res) { return of(res); })))
86
+ .subscribe((/**
87
+ * @param {?} globalLoading
88
+ * @return {?}
89
+ */
90
+ function (globalLoading) {
91
+ _this.loading$.next(globalLoading);
92
+ }));
93
+ select((/**
94
+ * @param {?} state
95
+ * @return {?}
96
+ */
97
+ function (state) { return state.selectedAssets; }))
98
+ .pipe(takeUntil(this.unsubscribe$))
99
+ .subscribe((/**
100
+ * @param {?} selectedAssets
101
+ * @return {?}
102
+ */
103
+ function (selectedAssets) {
104
+ if (selectedAssets) {
105
+ _this.selectedAssets = selectedAssets;
106
+ }
107
+ }));
108
+ select((/**
109
+ * @param {?} state
110
+ * @return {?}
111
+ */
112
+ function (state) { return state.currentFolderId; }))
113
+ .pipe(takeUntil(this.unsubscribe$), switchMap((/**
114
+ * @param {?} res
115
+ * @return {?}
116
+ */
117
+ function (res) { return of(res); })))
118
+ .subscribe((/**
119
+ * @param {?} currentFolderId
120
+ * @return {?}
121
+ */
122
+ function (currentFolderId) {
123
+ if (currentFolderId) {
124
+ _this.assetService.pageIndex = 0;
125
+ _this.fetchNodeDetails(currentFolderId);
126
+ }
127
+ }));
128
+ select((/**
129
+ * @param {?} state
130
+ * @return {?}
131
+ */
132
+ function (state) { return state.reloadCurrentFolder; }))
133
+ .pipe(takeUntil(this.unsubscribe$), switchMap((/**
134
+ * @param {?} res
135
+ * @return {?}
136
+ */
137
+ function (res) { return of(res); })))
138
+ .subscribe((/**
139
+ * @return {?}
140
+ */
141
+ function () {
142
+ if (!_this.currentFolder) {
143
+ return;
144
+ }
145
+ _this.fetchFolder(_this.currentFolder.AssetId);
146
+ }));
147
+ select((/**
148
+ * @param {?} state
149
+ * @return {?}
150
+ */
151
+ function (state) { return state.reloadCurrentNode; }))
152
+ .pipe(takeUntil(this.unsubscribe$), switchMap((/**
153
+ * @param {?} res
154
+ * @return {?}
155
+ */
156
+ function (res) { return of(res); })))
157
+ .subscribe((/**
158
+ * @return {?}
159
+ */
160
+ function () {
161
+ if (!_this.currentFolder) {
162
+ return;
163
+ }
164
+ _this.assetService.pageIndex = 0;
165
+ _this.fetchNodeDetails(_this.currentFolder.AssetId);
166
+ }));
167
+ };
168
+ /**
169
+ * @return {?}
170
+ */
171
+ NodeDetailsComponent.prototype.openUploadDialog = /**
172
+ * @return {?}
173
+ */
174
+ function () {
175
+ var _this = this;
176
+ /** @type {?} */
177
+ var dialogRef = this.dialog.open(UploadDialogComponent, {
178
+ data: {
179
+ currentAssetId: this.currentFolder.AssetId,
180
+ fileType: this.assetService.dialogConfig.allowedType,
181
+ maxSize: this.assetService.maxSize
182
+ },
183
+ panelClass: 'lib-dialog--medium',
184
+ });
185
+ dialogRef.afterClosed().subscribe((/**
186
+ * @param {?} res
187
+ * @return {?}
188
+ */
189
+ function (res) {
190
+ if (res) {
191
+ _this.svc.dispatch({
192
+ type: ActionTypes.RELOAD_CURRENT_ASSETS,
193
+ });
194
+ _this.svc.dispatch({
195
+ type: ActionTypes.RELOAD_CURRENT_FOLDER,
196
+ });
197
+ }
198
+ }));
199
+ };
200
+ /**
201
+ * @return {?}
202
+ */
203
+ NodeDetailsComponent.prototype.addFolder = /**
204
+ * @return {?}
205
+ */
206
+ function () {
207
+ var _this = this;
208
+ /** @type {?} */
209
+ var dialogRef = this.dialog.open(AddFolderDialogComponent, {
210
+ data: {
211
+ currentAssetId: this.currentFolder.AssetId,
212
+ },
213
+ panelClass: 'lib-dialog--small',
214
+ });
215
+ dialogRef.afterClosed().subscribe((/**
216
+ * @param {?} res
217
+ * @return {?}
218
+ */
219
+ function (res) {
220
+ if (res) {
221
+ _this.svc.dispatch({
222
+ type: ActionTypes.RELOAD_CURRENT_FOLDER,
223
+ });
224
+ }
225
+ }));
226
+ };
227
+ /**
228
+ * @return {?}
229
+ */
230
+ NodeDetailsComponent.prototype.deleteAssets = /**
231
+ * @return {?}
232
+ */
233
+ function () {
234
+ var _this = this;
235
+ /** @type {?} */
236
+ var ids = this.selectedAssets.map((/**
237
+ * @param {?} asset
238
+ * @return {?}
239
+ */
240
+ function (asset) { return asset.AssetId; }));
241
+ /** @type {?} */
242
+ var dialogRef = this.dialog.open(DeleteDialogComponent, {
243
+ data: {
244
+ type: 'files',
245
+ ids: ids,
246
+ },
247
+ panelClass: 'lib-dialog--small',
248
+ autoFocus: false,
249
+ });
250
+ dialogRef.afterClosed().subscribe((/**
251
+ * @param {?} res
252
+ * @return {?}
253
+ */
254
+ function (res) {
255
+ if (res) {
256
+ _this.svc.dispatch({
257
+ type: ActionTypes.RELOAD_CURRENT_ASSETS,
258
+ });
259
+ _this.svc.dispatch({
260
+ type: ActionTypes.RELOAD_CURRENT_FOLDER,
261
+ });
262
+ _this.svc.dispatch({
263
+ type: ActionTypes.SET_SELECTED_ASSETS,
264
+ payload: [],
265
+ });
266
+ }
267
+ }));
268
+ };
269
+ /**
270
+ * @private
271
+ * @param {?} id
272
+ * @return {?}
273
+ */
274
+ NodeDetailsComponent.prototype.fetchFolder = /**
275
+ * @private
276
+ * @param {?} id
277
+ * @return {?}
278
+ */
279
+ function (id) {
280
+ var _this = this;
281
+ this.svc.dispatch({
282
+ type: ActionTypes.SET_GLOBAL_LOADING,
283
+ payload: true,
284
+ });
285
+ this.assetService
286
+ .getChildrenFolders({ assetId: id })
287
+ .pipe(takeUntil(this.unsubscribe$))
288
+ .subscribe((/**
289
+ * @param {?} res
290
+ * @return {?}
291
+ */
292
+ function (res) {
293
+ _this.assetService.setFolderList(res.Data, res.Meta.Total);
294
+ if (res.Data && res.Data.Children) {
295
+ res.Data.Children.forEach((/**
296
+ * @param {?} node
297
+ * @return {?}
298
+ */
299
+ function (node) {
300
+ return _this.nodeTreeService.addNode(node, _this.currentFolder.AssetId);
301
+ }));
302
+ }
303
+ }))
304
+ .add((/**
305
+ * @return {?}
306
+ */
307
+ function () {
308
+ _this.svc.dispatch({
309
+ type: ActionTypes.SET_GLOBAL_LOADING,
310
+ payload: false,
311
+ });
312
+ }));
313
+ };
314
+ /**
315
+ * @private
316
+ * @param {?} id
317
+ * @return {?}
318
+ */
319
+ NodeDetailsComponent.prototype.fetchNodeDetails = /**
320
+ * @private
321
+ * @param {?} id
322
+ * @return {?}
323
+ */
324
+ function (id) {
325
+ var _this = this;
326
+ this.svc.dispatch({
327
+ type: ActionTypes.SET_GLOBAL_LOADING,
328
+ payload: true,
329
+ });
330
+ combineLatest([
331
+ this.assetService.getChildrenFolders({ assetId: id }),
332
+ this.assetService.getChildrenAssets({
333
+ assetId: id,
334
+ }),
335
+ ])
336
+ .pipe(takeUntil(this.unsubscribe$))
337
+ .subscribe((/**
338
+ * @param {?} __0
339
+ * @return {?}
340
+ */
341
+ function (_a) {
342
+ var _b = tslib_1.__read(_a, 2), folders = _b[0], assets = _b[1];
343
+ _this.assetService.setFolderList(folders.Data, folders.Meta.Total);
344
+ _this.assetService.setAssetList(assets.Data.Children, assets.Meta);
345
+ if (folders.Data && folders.Data.Children) {
346
+ folders.Data.Children.forEach((/**
347
+ * @param {?} node
348
+ * @return {?}
349
+ */
350
+ function (node) {
351
+ return _this.nodeTreeService.addNode(node, _this.currentFolder.AssetId);
352
+ }));
353
+ }
354
+ }))
355
+ .add((/**
356
+ * @return {?}
357
+ */
358
+ function () {
359
+ _this.svc.dispatch({
360
+ type: ActionTypes.SET_GLOBAL_LOADING,
361
+ payload: false,
362
+ });
363
+ }));
364
+ };
365
+ Object.defineProperty(NodeDetailsComponent.prototype, "noResults", {
366
+ get: /**
367
+ * @return {?}
368
+ */
369
+ function () {
370
+ return (this.assetService.keyword &&
371
+ !this.currentFolder.Children.length &&
372
+ !this.assets.length);
373
+ },
374
+ enumerable: true,
375
+ configurable: true
376
+ });
377
+ /**
378
+ * @return {?}
379
+ */
380
+ NodeDetailsComponent.prototype.ngOnDestroy = /**
381
+ * @return {?}
382
+ */
383
+ function () {
384
+ this.svc.dispatch({
385
+ type: ActionTypes.SET_CURRENT_FOLDER_ID,
386
+ payload: null,
387
+ });
388
+ this.svc.dispatch({
389
+ type: ActionTypes.SET_SELECTED_ASSETS,
390
+ payload: [],
391
+ });
392
+ this.unsubscribe$.next();
393
+ this.unsubscribe$.complete();
394
+ };
395
+ NodeDetailsComponent.decorators = [
396
+ { type: Component, args: [{
397
+ selector: 'lib-node-details',
398
+ template: "<div class=\"node-details custom-scrollbar\">\r\n <div class=\"node-header\">\r\n <mat-progress-bar [style.visibility]=\"(loading$ | async) ? 'visible' : 'hidden'\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n <div class=\"node-header-content\">\r\n <div class=\"node-header-content__left\">\r\n <H5 class=\"node-header-content__left--title\">\r\n <ng-container *ngIf=\"assetService?.keyword\">\r\n Search results for <span>{{ assetService?.keyword }}</span> in\r\n </ng-container>\r\n {{ currentFolder?.OriginalFileName }}\r\n </H5>\r\n <p *ngIf=\"!noResults\" class=\"node-header-content__left--subtitle\">\r\n {{ assetService?.folderTotal }}\r\n {{ assetService?.folderTotal > 1 ? 'folders' : 'folder' }},\r\n {{ assetService?.fileTotal }}\r\n {{ assetService?.fileTotal > 1 ? 'files': 'file' }}\r\n </p>\r\n </div>\r\n <div class=\"node-header-content__right\">\r\n <div class=\"button-wrapper\">\r\n <button mat-raised-button [disabled]=\"!selectedAssets?.length || !hasArchivePermission\" (click)=\"deleteAssets()\" color=\"warn\">\r\n <span>{{selectedAssets?.length > 1 ? 'Delete assets' : 'Delete asset'}}</span>\r\n <span *ngIf=\"selectedAssets?.length\" class=\"count\">({{ selectedAssets.length }})</span>\r\n </button>\r\n <button mat-raised-button color=\"primary\" (click)=\"openUploadDialog()\" [disabled]=\"!currentFolder?.AssetId || !hasModifyPermission\">\r\n Upload asset\r\n </button>\r\n <button mat-raised-button color=\"primary\" (click)=\"addFolder()\" [disabled]=\"!currentFolder?.AssetId || !hasModifyPermission\">\r\n Add folder\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"node-body\">\r\n <lib-search-not-found *ngIf=\"noResults; else contentAsset\"></lib-search-not-found>\r\n <ng-template #contentAsset>\r\n <lib-folder-list\r\n class=\"node-body__section\"\r\n [folders]=\"currentFolder?.Children\"\r\n [hasModifyPermission]=\"hasModifyPermission\"\r\n [hasAccessPermission]=\"hasAccessPermission\"\r\n [hasArchivePermission]=\"hasArchivePermission\"\r\n ></lib-folder-list>\r\n <lib-asset-list\r\n [assets]=\"assets\"\r\n [hasModifyPermission]=\"hasModifyPermission\"\r\n [hasAccessPermission]=\"hasAccessPermission\"\r\n [hasArchivePermission]=\"hasArchivePermission\"\r\n ></lib-asset-list>\r\n </ng-template>\r\n </div>\r\n</div>",
399
+ styles: [":host::ng-deep .node-details{max-height:100%;overflow-y:auto}:host::ng-deep .node-details .node-header{position:-webkit-sticky;position:sticky;top:0;background-color:#fff;z-index:20}:host::ng-deep .node-details .node-header-content{padding:10px 20px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}:host::ng-deep .node-details .node-header-content__left--title{margin-bottom:5px}:host::ng-deep .node-details .node-header-content__left--title span{color:#fb3458}:host::ng-deep .node-details .node-header-content__left--subtitle{margin:0;color:#979797;font-size:14px}:host::ng-deep .node-details .node-header-content__right{flex:1}:host::ng-deep .node-details .node-header-content__right .button-wrapper{display:flex;gap:15px;justify-content:flex-end}:host::ng-deep .node-details .node-header-content__right .button-wrapper .count{margin-left:3px}:host::ng-deep .node-details .node-body{padding:0 20px}:host::ng-deep .node-details .node-body__section{display:block;margin-bottom:15px}"]
400
+ }] }
401
+ ];
402
+ /** @nocollapse */
403
+ NodeDetailsComponent.ctorParameters = function () { return [
404
+ { type: MatDialog },
405
+ { type: AssetService },
406
+ { type: NodeTreeService },
407
+ { type: AssetManagementService },
408
+ { type: ChangeDetectorRef }
409
+ ]; };
410
+ NodeDetailsComponent.propDecorators = {
411
+ hasModifyPermission: [{ type: Input }],
412
+ hasAccessPermission: [{ type: Input }],
413
+ hasArchivePermission: [{ type: Input }]
414
+ };
415
+ return NodeDetailsComponent;
416
+ }());
417
+ export { NodeDetailsComponent };
418
+ if (false) {
419
+ /** @type {?} */
420
+ NodeDetailsComponent.prototype.hasModifyPermission;
421
+ /** @type {?} */
422
+ NodeDetailsComponent.prototype.hasAccessPermission;
423
+ /** @type {?} */
424
+ NodeDetailsComponent.prototype.hasArchivePermission;
425
+ /**
426
+ * @type {?}
427
+ * @private
428
+ */
429
+ NodeDetailsComponent.prototype.unsubscribe$;
430
+ /** @type {?} */
431
+ NodeDetailsComponent.prototype.selectedAssets;
432
+ /** @type {?} */
433
+ NodeDetailsComponent.prototype.loading$;
434
+ /** @type {?} */
435
+ NodeDetailsComponent.prototype.currentFolder;
436
+ /** @type {?} */
437
+ NodeDetailsComponent.prototype.assets;
438
+ /** @type {?} */
439
+ NodeDetailsComponent.prototype.dialog;
440
+ /** @type {?} */
441
+ NodeDetailsComponent.prototype.assetService;
442
+ /**
443
+ * @type {?}
444
+ * @private
445
+ */
446
+ NodeDetailsComponent.prototype.nodeTreeService;
447
+ /**
448
+ * @type {?}
449
+ * @private
450
+ */
451
+ NodeDetailsComponent.prototype.svc;
452
+ /**
453
+ * @type {?}
454
+ * @private
455
+ */
456
+ NodeDetailsComponent.prototype.changeDetectorRef;
457
+ }
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bycy1way9hc3NldC1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcGFydGlhbC9ub2RlLWRldGFpbHMvbm9kZS1kZXRhaWxzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUVqRjtJQVVFLDhCQUNTLE1BQWlCLEVBQ2pCLFlBQTBCLEVBQ3pCLGVBQWdDLEVBQ2hDLEdB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QUM7UUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNoQixJQUFJLEVBQUUsV0FBVyxDQUFDLG1CQUFtQjtZQUNyQyxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDOztnQkEvT0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLGdtRkFBNEM7O2lCQUU3Qzs7OztnQkFuQlEsU0FBUztnQkFRVCxZQUFZO2dCQUNaLGVBQWU7Z0JBSGYsc0JBQXNCO2dCQVB0QixpQkFBaUI7OztzQ0FzQnZCLEtBQUs7c0NBQ0wsS0FBSzt1Q0FDTCxLQUFLOztJQXdPUiwyQkFBQztDQUFBLEFBaFBELElBZ1BDO1NBM09ZLG9CQUFvQjs7O0lBQy9CLG1EQUE4Qzs7SUFDOUMsbURBQThDOztJQUM5QyxvREFBK0M7Ozs7O0lBWS9DLDRDQUEyQzs7SUFFM0MsOENBQThDOztJQUM5Qyx3Q0FBdUU7O0lBQ3ZFLDZDQUFzQzs7SUFDdEMsc0NBQTRCOztJQWQxQixzQ0FBd0I7O0lBQ3hCLDRDQUFpQzs7Ozs7SUFDakMsK0NBQXdDOzs7OztJQUN4QyxtQ0FBbUM7Ozs7O0lBQ25DLGlEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL0JlaGF2aW9yU3ViamVjdCc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzL2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL1N1YmplY3QnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQXNzZXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Fzc2V0LW1hbmFnZW1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFzc2V0TW9kZWwsIEZvbGRlclRyZWVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFzc2V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Fzc2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb2RlVHJlZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub2RlLXRyZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGlvblR5cGVzLCBzZWxlY3QgfSBmcm9tICcuLi8uLi8uLi9zdG9yZSc7XHJcbmltcG9ydCB7IEFkZEZvbGRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FkZC1mb2xkZXItZGlhbG9nL2FkZC1mb2xkZXItZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERlbGV0ZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2RlbGV0ZS1kaWFsb2cvZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi91cGxvYWQtZGlhbG9nL3VwbG9hZC1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLW5vZGUtZGV0YWlscycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOb2RlRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBoYXNNb2RpZnlQZXJtaXNzaW9uPzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgaGFzQWNjZXNzUGVybWlzc2lvbj86IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGhhc0FyY2hpdmVQZXJtaXNzaW9uPzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHVibGljIGFzc2V0U2VydmljZTogQXNzZXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub2RlVHJlZVNlcnZpY2U6IE5vZGVUcmVlU2VydmljZSxcclxuICAgIHByaXZhdGUgc3ZjOiBBc3NldE1hbmFnZW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMuYmluZFN1YnNjcmliZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIHNlbGVjdGVkQXNzZXRzOiBBcnJheTxBc3NldE1vZGVsPiA9IFtdO1xyXG4gIHB1YmxpYyBsb2FkaW5nJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHVibGljIGN1cnJlbnRGb2xkZXI6IEZvbGRlclRyZWVNb2RlbDtcclxuICBwdWJsaWMgYXNzZXRzOiBBc3NldE1vZGVsW107XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hc3NldFNlcnZpY2VcclxuICAgICAgLmdldEZvbGRlckxpc3QoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChmb2xkZXJzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9sZGVyID0gZm9sZGVycztcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmFzc2V0U2VydmljZVxyXG4gICAgICAuZ2V0QXNzZXRMaXN0KClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcclxuICAgICAgLnN1YnNjcmliZSgoYXNzZXRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hc3NldHMgPSBhc3NldHM7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiaW5kU3Vic2NyaWJlcigpIHtcclxuICAgIHNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLmdsb2JhbExvYWRpbmcpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXMpID0+IG9mKHJlcykpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZ2xvYmFsTG9hZGluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dChnbG9iYWxMb2FkaW5nKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUuc2VsZWN0ZWRBc3NldHMpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkQXNzZXRzKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkQXNzZXRzKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQXNzZXRzID0gc2VsZWN0ZWRBc3NldHM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICBzZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZS5jdXJyZW50Rm9sZGVySWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXMpID0+IG9mKHJlcykpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoY3VycmVudEZvbGRlcklkKSA9PiB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRGb2xkZXJJZCkge1xyXG4gICAgICAgICAgdGhpcy5hc3NldFNlcnZpY2UucGFnZUluZGV4ID0gMDtcclxuICAgICAgICAgIHRoaXMuZmV0Y2hOb2RlRGV0YWlscyhjdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUucmVsb2FkQ3VycmVudEZvbGRlcilcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHJlcykgPT4gb2YocmVzKSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudEZvbGRlcikge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZldGNoRm9sZGVyKHRoaXMuY3VycmVudEZvbGRlci5Bc3NldElkKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUucmVsb2FkQ3VycmVudE5vZGUpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXMpID0+IG9mKHJlcykpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRGb2xkZXIpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hc3NldFNlcnZpY2UucGFnZUluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLmZldGNoTm9kZURldGFpbHModGhpcy5jdXJyZW50Rm9sZGVyLkFzc2V0SWQpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuVXBsb2FkRGlhbG9nKCkge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihVcGxvYWREaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGN1cnJlbnRBc3NldElkOiB0aGlzLmN1cnJlbnRGb2xkZXIuQXNzZXRJZCxcclxuICAgICAgICBmaWxlVHlwZTogdGhpcy5hc3NldFNlcnZpY2UuZGlhbG9nQ29uZmlnLmFsbG93ZWRUeXBlLFxyXG4gICAgICAgIG1heFNpemU6IHRoaXMuYXNzZXRTZXJ2aWNlLm1heFNpemVcclxuICAgICAgfSxcclxuICAgICAgcGFuZWxDbGFzczogJ2xpYi1kaWFsb2ctLW1lZGl1bScsXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xyXG4gICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVMT0FEX0NVUlJFTlRfQVNTRVRTLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcclxuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTE9BRF9DVVJSRU5UX0ZPTERFUixcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRGb2xkZXIoKSB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFkZEZvbGRlckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgY3VycmVudEFzc2V0SWQ6IHRoaXMuY3VycmVudEZvbGRlci5Bc3NldElkLFxyXG4gICAgICB9LFxyXG4gICAgICBwYW5lbENsYXNzOiAnbGliLWRpYWxvZy0tc21hbGwnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcclxuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTE9BRF9DVVJSRU5UX0ZPTERFUixcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVBc3NldHMoKSB7XHJcbiAgICBjb25zdCBpZHMgPSB0aGlzLnNlbGVjdGVkQXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0LkFzc2V0SWQpO1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEZWxldGVEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHR5cGU6ICdmaWxlcycsXHJcbiAgICAgICAgaWRzLFxyXG4gICAgICB9LFxyXG4gICAgICBwYW5lbENsYXNzOiAnbGliLWRpYWxvZy0tc21hbGwnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcclxuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTE9BRF9DVVJSRU5UX0FTU0VUUyxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XHJcbiAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRUxPQURfQ1VSUkVOVF9GT0xERVIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xyXG4gICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX1NFTEVDVEVEX0FTU0VUUyxcclxuICAgICAgICAgIHBheWxvYWQ6IFtdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmV0Y2hGb2xkZXIoaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xyXG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfR0xPQkFMX0xPQURJTkcsXHJcbiAgICAgIHBheWxvYWQ6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFzc2V0U2VydmljZVxyXG4gICAgICAuZ2V0Q2hpbGRyZW5Gb2xkZXJzKHsgYXNzZXRJZDogaWQgfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hc3NldFNlcnZpY2Uuc2V0Rm9sZGVyTGlzdChyZXMuRGF0YSwgcmVzLk1ldGEuVG90YWwpO1xyXG4gICAgICAgIGlmIChyZXMuRGF0YSAmJiByZXMuRGF0YS5DaGlsZHJlbikge1xyXG4gICAgICAgICAgcmVzLkRhdGEuQ2hpbGRyZW4uZm9yRWFjaCgobm9kZSkgPT5cclxuICAgICAgICAgICAgdGhpcy5ub2RlVHJlZVNlcnZpY2UuYWRkTm9kZShub2RlLCB0aGlzLmN1cnJlbnRGb2xkZXIuQXNzZXRJZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuYWRkKCgpID0+IHtcclxuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XHJcbiAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfR0xPQkFMX0xPQURJTkcsXHJcbiAgICAgICAgICBwYXlsb2FkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoTm9kZURldGFpbHMoaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xyXG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfR0xPQkFMX0xPQURJTkcsXHJcbiAgICAgIHBheWxvYWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLmFzc2V0U2VydmljZS5nZXRDaGlsZHJlbkZvbGRlcnMoeyBhc3NldElkOiBpZCB9KSxcclxuICAgICAgdGhpcy5hc3NldFNlcnZpY2UuZ2V0Q2hpbGRyZW5Bc3NldHMoe1xyXG4gICAgICAgIGFzc2V0SWQ6IGlkLFxyXG4gICAgICB9KSxcclxuICAgIF0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKFtmb2xkZXJzLCBhc3NldHNdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hc3NldFNlcnZpY2Uuc2V0Rm9sZGVyTGlzdChmb2xkZXJzLkRhdGEsIGZvbGRlcnMuTWV0YS5Ub3RhbCk7XHJcbiAgICAgICAgdGhpcy5hc3NldFNlcnZpY2Uuc2V0QXNzZXRMaXN0KGFzc2V0cy5EYXRhLkNoaWxkcmVuLCBhc3NldHMuTWV0YSk7XHJcbiAgICAgICAgaWYgKGZvbGRlcnMuRGF0YSAmJiBmb2xkZXJzLkRhdGEuQ2hpbGRyZW4pIHtcclxuICAgICAgICAgIGZvbGRlcnMuRGF0YS5DaGlsZHJlbi5mb3JFYWNoKChub2RlKSA9PlxyXG4gICAgICAgICAgICB0aGlzLm5vZGVUcmVlU2VydmljZS5hZGROb2RlKG5vZGUsIHRoaXMuY3VycmVudEZvbGRlci5Bc3NldElkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZGQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcclxuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9HTE9CQUxfTE9BRElORyxcclxuICAgICAgICAgIHBheWxvYWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBub1Jlc3VsdHMoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmFzc2V0U2VydmljZS5rZXl3b3JkICYmXHJcbiAgICAgICF0aGlzLmN1cnJlbnRGb2xkZXIuQ2hpbGRyZW4ubGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmFzc2V0cy5sZW5ndGhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcclxuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0NVUlJFTlRfRk9MREVSX0lELFxyXG4gICAgICBwYXlsb2FkOiBudWxsLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XHJcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9BU1NFVFMsXHJcbiAgICAgIHBheWxvYWQ6IFtdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=