@rs-pk/asset-management 1.0.25 → 1.0.26

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 +6436 -6436
  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 +169 -169
  7. package/esm2015/lib/asset-management.module.js +178 -178
  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 -398
  11. package/esm2015/lib/components/partial/asset-item/asset-item.component.js +316 -316
  12. package/esm2015/lib/components/partial/asset-list/asset-list.component.js +285 -285
  13. package/esm2015/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +110 -110
  14. package/esm2015/lib/components/partial/asset-wrapper/asset-wrapper.component.js +119 -119
  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 -126
  21. package/esm2015/lib/components/partial/folder-list/folder-list.component.js +81 -81
  22. package/esm2015/lib/components/partial/node-details/node-details.component.js +417 -417
  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 +151 -151
  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 +184 -184
  62. package/esm5/lib/asset-management.module.js +179 -179
  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 -440
  66. package/esm5/lib/components/partial/asset-item/asset-item.component.js +350 -350
  67. package/esm5/lib/components/partial/asset-list/asset-list.component.js +318 -318
  68. package/esm5/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +125 -125
  69. package/esm5/lib/components/partial/asset-wrapper/asset-wrapper.component.js +137 -137
  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 -138
  76. package/esm5/lib/components/partial/folder-list/folder-list.component.js +94 -94
  77. package/esm5/lib/components/partial/node-details/node-details.component.js +458 -458
  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 +170 -170
  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 +5635 -5635
  117. package/fesm2015/rs-pk-asset-management.js.map +1 -1
  118. package/fesm5/rs-pk-asset-management.js +6441 -6441
  119. package/fesm5/rs-pk-asset-management.js.map +1 -1
  120. package/lib/asset-management.component.d.ts +25 -25
  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 -65
  125. package/lib/components/partial/asset-item/asset-item.component.d.ts +40 -40
  126. package/lib/components/partial/asset-list/asset-list.component.d.ts +27 -27
  127. package/lib/components/partial/asset-management-dialog/asset-management-dialog.component.d.ts +17 -17
  128. package/lib/components/partial/asset-wrapper/asset-wrapper.component.d.ts +23 -23
  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 -17
  135. package/lib/components/partial/folder-list/folder-list.component.d.ts +14 -14
  136. package/lib/components/partial/node-details/node-details.component.d.ts +32 -32
  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 +73 -73
  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 -2
  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,285 +1,285 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { Component, Input, ViewChild, } from '@angular/core';
6
- import { MatPaginator } from '@angular/material/paginator';
7
- import { of } from 'rxjs/internal/observable/of';
8
- import { Subject } from 'rxjs/internal/Subject';
9
- import { switchMap, takeUntil } from 'rxjs/operators';
10
- import { AssetManagementService } from '../../../asset-management.service';
11
- import { BackgroudProcessingStatus } from '../../../models';
12
- import { AssetService } from '../../../services/asset.service';
13
- import { ActionTypes } from '../../../store/actions.action';
14
- import { select } from '../../../store/reducer';
15
- export class AssetListComponent {
16
- /**
17
- * @param {?} assetService
18
- * @param {?} svc
19
- */
20
- constructor(assetService, svc) {
21
- this.assetService = assetService;
22
- this.svc = svc;
23
- this.hasModifyPermission = true;
24
- this.hasAccessPermission = true;
25
- this.hasArchivePermission = true;
26
- this.backgroundProcessingNum = BackgroudProcessingStatus;
27
- this.unsubscribe$ = new Subject();
28
- this.selectedAssets = [];
29
- }
30
- /**
31
- * @return {?}
32
- */
33
- ngOnInit() {
34
- this.bindSubscriber();
35
- }
36
- /**
37
- * @param {?} changes
38
- * @return {?}
39
- */
40
- ngOnChanges(changes) {
41
- if (changes.assets) {
42
- // Check if asset is uploading
43
- if (this.assets && this.assets.find((/**
44
- * @param {?} x
45
- * @return {?}
46
- */
47
- x => x.BackgroudProcessingStatus === this.backgroundProcessingNum.InProcessing))) {
48
- this._resetUploadingAssets();
49
- }
50
- ;
51
- this.paginator.pageIndex = this.assetService.pageIndex;
52
- this.paginator.pageSize = this.assetService.pageSize;
53
- this.paginator.length = this.assetService.fileTotal;
54
- }
55
- }
56
- /**
57
- * @param {?} event
58
- * @return {?}
59
- */
60
- onSelectAsset(event) {
61
- /** @type {?} */
62
- const index = this.selectedAssets.findIndex((/**
63
- * @param {?} asset
64
- * @return {?}
65
- */
66
- (asset) => asset.AssetId === event.AssetId));
67
- /** @type {?} */
68
- const newSelectedAssets = index > -1
69
- ? this.selectedAssets.filter((/**
70
- * @param {?} asset
71
- * @param {?} i
72
- * @return {?}
73
- */
74
- (asset, i) => index !== i))
75
- : [...this.selectedAssets, event];
76
- this.svc.dispatch({
77
- type: ActionTypes.SET_SELECTED_ASSETS,
78
- payload: newSelectedAssets,
79
- });
80
- }
81
- /**
82
- * @private
83
- * @return {?}
84
- */
85
- bindSubscriber() {
86
- select((/**
87
- * @param {?} state
88
- * @return {?}
89
- */
90
- (state) => state.deletedAssetId))
91
- .pipe(takeUntil(this.unsubscribe$))
92
- .subscribe((/**
93
- * @param {?} id
94
- * @return {?}
95
- */
96
- (id) => {
97
- if (this.selectedAssets && this.selectedAssets.length) {
98
- /** @type {?} */
99
- const newSelectedAssets = this.selectedAssets.filter((/**
100
- * @param {?} asset
101
- * @return {?}
102
- */
103
- (asset) => asset.AssetId !== id));
104
- this.svc.dispatch({
105
- type: ActionTypes.SET_SELECTED_ASSETS,
106
- payload: newSelectedAssets,
107
- });
108
- }
109
- }));
110
- select((/**
111
- * @param {?} state
112
- * @return {?}
113
- */
114
- (state) => state.currentFolderId))
115
- .pipe(takeUntil(this.unsubscribe$))
116
- .subscribe((/**
117
- * @param {?} currentFolderId
118
- * @return {?}
119
- */
120
- (currentFolderId) => {
121
- this.currentFolderId = currentFolderId;
122
- this.svc.dispatch({
123
- type: ActionTypes.SET_SELECTED_ASSETS,
124
- payload: [],
125
- });
126
- }));
127
- select((/**
128
- * @param {?} state
129
- * @return {?}
130
- */
131
- (state) => state.selectedAssets))
132
- .pipe(takeUntil(this.unsubscribe$))
133
- .subscribe((/**
134
- * @param {?} selectedAssets
135
- * @return {?}
136
- */
137
- (selectedAssets) => {
138
- this.selectedAssets = selectedAssets;
139
- }));
140
- select((/**
141
- * @param {?} state
142
- * @return {?}
143
- */
144
- (state) => state.reloadCurrentAssets))
145
- .pipe(takeUntil(this.unsubscribe$), switchMap((/**
146
- * @param {?} res
147
- * @return {?}
148
- */
149
- (res) => of(res))))
150
- .subscribe((/**
151
- * @return {?}
152
- */
153
- () => {
154
- this.fetchChildrenAssets();
155
- }));
156
- }
157
- /**
158
- * @param {?=} event
159
- * @return {?}
160
- */
161
- pageChange(event) {
162
- this.assetService.pageSize = event.pageSize;
163
- this.assetService.pageIndex = event.pageIndex;
164
- this.fetchChildrenAssets();
165
- }
166
- /**
167
- * @private
168
- * @return {?}
169
- */
170
- fetchChildrenAssets() {
171
- if (!this.currentFolderId) {
172
- return;
173
- }
174
- this.svc.dispatch({
175
- type: ActionTypes.SET_GLOBAL_LOADING,
176
- payload: true,
177
- });
178
- this.assetService
179
- .getChildrenAssets({ assetId: this.currentFolderId })
180
- .pipe(takeUntil(this.unsubscribe$))
181
- .subscribe((/**
182
- * @param {?} res
183
- * @return {?}
184
- */
185
- (res) => {
186
- this.assetService.setAssetList(res.Data.Children, res.Meta);
187
- }))
188
- .add((/**
189
- * @return {?}
190
- */
191
- () => {
192
- this.svc.dispatch({
193
- type: ActionTypes.SET_GLOBAL_LOADING,
194
- payload: false,
195
- });
196
- }));
197
- }
198
- /**
199
- * @private
200
- * @return {?}
201
- */
202
- _resetUploadingAssets() {
203
- /** @type {?} */
204
- const reload = setInterval((/**
205
- * @return {?}
206
- */
207
- () => {
208
- this.fetchChildrenAssets();
209
- if (this.assets.find((/**
210
- * @param {?} x
211
- * @return {?}
212
- */
213
- x => x.BackgroudProcessingStatus === this.backgroundProcessingNum.Processed))) {
214
- clearInterval(reload);
215
- }
216
- console.log('Upload Successfully!'); // interval will be cleared after completing this whole block
217
- }), 5000);
218
- }
219
- /**
220
- * @return {?}
221
- */
222
- ngOnDestroy() {
223
- this.unsubscribe$.next();
224
- this.unsubscribe$.complete();
225
- }
226
- }
227
- AssetListComponent.decorators = [
228
- { type: Component, args: [{
229
- selector: 'lib-asset-list',
230
- template: "<div class=\"asset-container\">\r\n <div class=\"asset-heading\">\r\n <h6 class=\"asset-heading__title\">Files</h6>\r\n <lib-sort-items\r\n [hidden]=\"!assets?.length\"\r\n class=\"asset-heading__sort\"\r\n ></lib-sort-items>\r\n </div>\r\n <ng-container *ngIf=\"assets && !assets.length; else assetsTemplate\">\r\n <div class=\"asset-empty\">\r\n <span>This asset is empty.</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #assetsTemplate>\r\n <div class=\"asset-list\">\r\n <lib-asset-item\r\n class=\"asset-list__item\"\r\n *ngFor=\"let asset of assets\"\r\n [asset]=\"asset\"\r\n (selectAsset)=\"onSelectAsset($event)\"\r\n [hasModifyPermission]=\"hasModifyPermission\"\r\n [hasAccessPermission]=\"hasAccessPermission\"\r\n [hasArchivePermission]=\"hasArchivePermission\"\r\n >\r\n </lib-asset-item>\r\n </div>\r\n </ng-template>\r\n <div [hidden]=\"!assets?.length\">\r\n <mat-paginator\r\n #paginator\r\n [pageSizeOptions]=\"[12, 24, 60, 120]\"\r\n (page)=\"pageChange($event)\"\r\n [showFirstLastButtons]=\"true\"\r\n >\r\n </mat-paginator>\r\n </div>\r\n</div>\r\n",
231
- styles: [":host::ng-deep .asset-container .asset-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}:host::ng-deep .asset-container .asset-heading__title{margin-bottom:0;color:#979797}:host::ng-deep .asset-container .asset-list{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:stretch;margin:0 -5px}:host::ng-deep .asset-container .asset-list__item{width:25%}@media only screen and (max-width:1200px){:host::ng-deep .asset-container .asset-list__item{width:calc(100% / 3)}}@media only screen and (max-width:960px){:host::ng-deep .asset-container .asset-list__item{width:50%}}:host::ng-deep .asset-container .asset-empty{text-align:center;color:#979797;font-size:14px}"]
232
- }] }
233
- ];
234
- /** @nocollapse */
235
- AssetListComponent.ctorParameters = () => [
236
- { type: AssetService },
237
- { type: AssetManagementService }
238
- ];
239
- AssetListComponent.propDecorators = {
240
- hasModifyPermission: [{ type: Input }],
241
- hasAccessPermission: [{ type: Input }],
242
- hasArchivePermission: [{ type: Input }],
243
- paginator: [{ type: ViewChild, args: [MatPaginator, { static: true },] }],
244
- assets: [{ type: Input }]
245
- };
246
- if (false) {
247
- /** @type {?} */
248
- AssetListComponent.prototype.hasModifyPermission;
249
- /** @type {?} */
250
- AssetListComponent.prototype.hasAccessPermission;
251
- /** @type {?} */
252
- AssetListComponent.prototype.hasArchivePermission;
253
- /** @type {?} */
254
- AssetListComponent.prototype.paginator;
255
- /** @type {?} */
256
- AssetListComponent.prototype.assets;
257
- /** @type {?} */
258
- AssetListComponent.prototype.backgroundProcessingNum;
259
- /**
260
- * @type {?}
261
- * @private
262
- */
263
- AssetListComponent.prototype.unsubscribe$;
264
- /**
265
- * @type {?}
266
- * @private
267
- */
268
- AssetListComponent.prototype.currentFolderId;
269
- /**
270
- * @type {?}
271
- * @private
272
- */
273
- AssetListComponent.prototype.selectedAssets;
274
- /**
275
- * @type {?}
276
- * @private
277
- */
278
- AssetListComponent.prototype.assetService;
279
- /**
280
- * @type {?}
281
- * @private
282
- */
283
- AssetListComponent.prototype.svc;
284
- }
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AcnMtcGsvYXNzZXQtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3BhcnRpYWwvYXNzZXQtbGlzdC9hc3NldC1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBS0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFjLHlCQUF5QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPaEQsTUFBTSxPQUFPLGtCQUFrQjs7Ozs7SUFLN0IsWUFDVSxZQUEwQixFQUMxQixHQUEyQjtRQUQzQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixRQUFHLEdBQUgsR0FBRyxDQUF3QjtRQU41Qix3QkFBbUIsR0FBYSxJQUFJLENBQUM7UUFDckMsd0JBQW1CLEdBQWEsSUFBSSxDQUFDO1FBQ3JDLHlCQUFvQixHQUFhLElBQUksQ0FBQztRQVV4Qyw0QkFBdUIsR0FBRyx5QkFBeUIsQ0FBQztRQUVuRCxpQkFBWSxHQUFHLElBQUksT0FB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c0NBQTBDOzthQUUzQzs7OztZQVJRLFlBQVk7WUFGWixzQkFBc0I7OztrQ0FZNUIsS0FBSztrQ0FDTCxLQUFLO21DQUNMLEtBQUs7d0JBT0wsU0FBUyxTQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7cUJBQ3hDLEtBQUs7Ozs7SUFWTixpREFBOEM7O0lBQzlDLGlEQUE4Qzs7SUFDOUMsa0RBQStDOztJQU8vQyx1Q0FBbUU7O0lBQ25FLG9DQUE4Qjs7SUFFOUIscURBQTJEOzs7OztJQUUzRCwwQ0FBMkM7Ozs7O0lBQzNDLDZDQUFnQzs7Ozs7SUFDaEMsNENBQStDOzs7OztJQVg3QywwQ0FBa0M7Ozs7O0lBQ2xDLGlDQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL29mJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvU3ViamVjdCc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBc3NldE1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXNzZXQtbWFuYWdlbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXNzZXRNb2RlbCwgQmFja2dyb3VkUHJvY2Vzc2luZ1N0YXR1cyB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFzc2V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Fzc2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3Rpb25UeXBlcyB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2FjdGlvbnMuYWN0aW9uJztcclxuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvcmVkdWNlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hc3NldC1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXQtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXNzZXQtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNzZXRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgaGFzTW9kaWZ5UGVybWlzc2lvbj86IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGhhc0FjY2Vzc1Blcm1pc3Npb24/OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBoYXNBcmNoaXZlUGVybWlzc2lvbj86IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXNzZXRTZXJ2aWNlOiBBc3NldFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN2YzogQXNzZXRNYW5hZ2VtZW50U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIEBJbnB1dCgpIGFzc2V0czogQXNzZXRNb2RlbFtdO1xyXG5cclxuICBwdWJsaWMgYmFja2dyb3VuZFByb2Nlc3NpbmdOdW0gPSBCYWNrZ3JvdWRQcm9jZXNzaW5nU3RhdHVzO1xyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBjdXJyZW50Rm9sZGVySWQ6IHN0cmluZztcclxuICBwcml2YXRlIHNlbGVjdGVkQXNzZXRzOiBBcnJheTxBc3NldE1vZGVsPiA9IFtdO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYmluZFN1YnNjcmliZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLmFzc2V0cykge1xyXG4gICAgICAvLyBDaGVjayBpZiBhc3NldCBpcyB1cGxvYWRpbmdcclxuICAgICAgaWYgKHRoaXMuYXNzZXRzICYmIHRoaXMuYXNzZXRzLmZpbmQoeCA9PiB4LkJhY2tncm91ZFByb2Nlc3NpbmdTdGF0dXMgPT09IHRoaXMuYmFja2dyb3VuZFByb2Nlc3NpbmdOdW0uSW5Qcm9jZXNzaW5nKSkge1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0VXBsb2FkaW5nQXNzZXRzKCk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSB0aGlzLmFzc2V0U2VydmljZS5wYWdlSW5kZXg7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdGhpcy5hc3NldFNlcnZpY2UucGFnZVNpemU7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLmxlbmd0aCA9IHRoaXMuYXNzZXRTZXJ2aWNlLmZpbGVUb3RhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblNlbGVjdEFzc2V0KGV2ZW50OiBBc3NldE1vZGVsKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRBc3NldHMuZmluZEluZGV4KFxyXG4gICAgICAoYXNzZXQpID0+IGFzc2V0LkFzc2V0SWQgPT09IGV2ZW50LkFzc2V0SWRcclxuICAgICk7XHJcbiAgICBjb25zdCBuZXdTZWxlY3RlZEFzc2V0czogQXNzZXRNb2RlbFtdID1cclxuICAgICAgaW5kZXggPiAtMVxyXG4gICAgICAgID8gdGhpcy5zZWxlY3RlZEFzc2V0cy5maWx0ZXIoKGFzc2V0LCBpKSA9PiBpbmRleCAhPT0gaSlcclxuICAgICAgICA6IFsuLi50aGlzLnNlbGVjdGVkQXNzZXRzLCBldmVudF07XHJcblxyXG4gICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xyXG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfU0VMRUNURURfQVNTRVRTLFxyXG4gICAgICBwYXlsb2FkOiBuZXdTZWxlY3RlZEFzc2V0cyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiaW5kU3Vic2NyaWJlcigpIHtcclxuICAgIHNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLmRlbGV0ZWRBc3NldElkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQXNzZXRzICYmIHRoaXMuc2VsZWN0ZWRBc3NldHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdTZWxlY3RlZEFzc2V0cyA9IHRoaXMuc2VsZWN0ZWRBc3NldHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoYXNzZXQpID0+IGFzc2V0LkFzc2V0SWQgIT09IGlkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xyXG4gICAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfU0VMRUNURURfQVNTRVRTLFxyXG4gICAgICAgICAgICBwYXlsb2FkOiBuZXdTZWxlY3RlZEFzc2V0cyxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUuY3VycmVudEZvbGRlcklkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjdXJyZW50Rm9sZGVySWQpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXJJZCA9IGN1cnJlbnRGb2xkZXJJZDtcclxuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XHJcbiAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfU0VMRUNURURfQVNTRVRTLFxyXG4gICAgICAgICAgcGF5bG9hZDogW10sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLnNlbGVjdGVkQXNzZXRzKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZEFzc2V0cykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBc3NldHMgPSBzZWxlY3RlZEFzc2V0cztcclxuICAgICAgfSk7XHJcblxyXG4gICAgc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUucmVsb2FkQ3VycmVudEFzc2V0cylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHJlcykgPT4gb2YocmVzKSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmZldGNoQ2hpbGRyZW5Bc3NldHMoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFnZUNoYW5nZShldmVudD86IFBhZ2VFdmVudCkge1xyXG4gICAgdGhpcy5hc3NldFNlcnZpY2UucGFnZVNpemUgPSBldmVudC5wYWdlU2l6ZTtcclxuICAgIHRoaXMuYXNzZXRTZXJ2aWNlLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcclxuICAgIHRoaXMuZmV0Y2hDaGlsZHJlbkFzc2V0cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaENoaWxkcmVuQXNzZXRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRGb2xkZXJJZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XHJcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9HTE9CQUxfTE9BRElORyxcclxuICAgICAgcGF5bG9hZDogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYXNzZXRTZXJ2aWNlXHJcbiAgICAgIC5nZXRDaGlsZHJlbkFzc2V0cyh7IGFzc2V0SWQ6IHRoaXMuY3VycmVudEZvbGRlcklkIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuYXNzZXRTZXJ2aWNlLnNldEFzc2V0TGlzdChyZXMuRGF0YS5DaGlsZHJlbiwgcmVzLk1ldGEpO1xyXG4gICAgICB9KVxyXG4gICAgICAuYWRkKCgpID0+IHtcclxuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XHJcbiAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfR0xPQkFMX0xPQURJTkcsXHJcbiAgICAgICAgICBwYXlsb2FkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldFVwbG9hZGluZ0Fzc2V0cyAoKSB7XHJcbiAgICBjb25zdCByZWxvYWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZmV0Y2hDaGlsZHJlbkFzc2V0cygpO1xyXG4gICAgICBpZiAodGhpcy5hc3NldHMuZmluZCh4ID0+IHguQmFja2dyb3VkUHJvY2Vzc2luZ1N0YXR1cyA9PT0gdGhpcy5iYWNrZ3JvdW5kUHJvY2Vzc2luZ051bS5Qcm9jZXNzZWQpKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChyZWxvYWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKCdVcGxvYWQgU3VjY2Vzc2Z1bGx5IScpOyAvLyBpbnRlcnZhbCB3aWxsIGJlIGNsZWFyZWQgYWZ0ZXIgY29tcGxldGluZyB0aGlzIHdob2xlIGJsb2NrXHJcbiAgICB9LCA1MDAwKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { Component, Input, ViewChild, } from '@angular/core';
6
+ import { MatPaginator } from '@angular/material/paginator';
7
+ import { of } from 'rxjs/internal/observable/of';
8
+ import { Subject } from 'rxjs/internal/Subject';
9
+ import { switchMap, takeUntil } from 'rxjs/operators';
10
+ import { AssetManagementService } from '../../../asset-management.service';
11
+ import { BackgroudProcessingStatus } from '../../../models';
12
+ import { AssetService } from '../../../services/asset.service';
13
+ import { ActionTypes } from '../../../store/actions.action';
14
+ import { select } from '../../../store/reducer';
15
+ export class AssetListComponent {
16
+ /**
17
+ * @param {?} assetService
18
+ * @param {?} svc
19
+ */
20
+ constructor(assetService, svc) {
21
+ this.assetService = assetService;
22
+ this.svc = svc;
23
+ this.hasModifyPermission = true;
24
+ this.hasAccessPermission = true;
25
+ this.hasArchivePermission = true;
26
+ this.backgroundProcessingNum = BackgroudProcessingStatus;
27
+ this.unsubscribe$ = new Subject();
28
+ this.selectedAssets = [];
29
+ }
30
+ /**
31
+ * @return {?}
32
+ */
33
+ ngOnInit() {
34
+ this.bindSubscriber();
35
+ }
36
+ /**
37
+ * @param {?} changes
38
+ * @return {?}
39
+ */
40
+ ngOnChanges(changes) {
41
+ if (changes.assets) {
42
+ // Check if asset is uploading
43
+ if (this.assets && this.assets.find((/**
44
+ * @param {?} x
45
+ * @return {?}
46
+ */
47
+ x => x.BackgroudProcessingStatus === this.backgroundProcessingNum.InProcessing))) {
48
+ this._resetUploadingAssets();
49
+ }
50
+ ;
51
+ this.paginator.pageIndex = this.assetService.pageIndex;
52
+ this.paginator.pageSize = this.assetService.pageSize;
53
+ this.paginator.length = this.assetService.fileTotal;
54
+ }
55
+ }
56
+ /**
57
+ * @param {?} event
58
+ * @return {?}
59
+ */
60
+ onSelectAsset(event) {
61
+ /** @type {?} */
62
+ const index = this.selectedAssets.findIndex((/**
63
+ * @param {?} asset
64
+ * @return {?}
65
+ */
66
+ (asset) => asset.AssetId === event.AssetId));
67
+ /** @type {?} */
68
+ const newSelectedAssets = index > -1
69
+ ? this.selectedAssets.filter((/**
70
+ * @param {?} asset
71
+ * @param {?} i
72
+ * @return {?}
73
+ */
74
+ (asset, i) => index !== i))
75
+ : [...this.selectedAssets, event];
76
+ this.svc.dispatch({
77
+ type: ActionTypes.SET_SELECTED_ASSETS,
78
+ payload: newSelectedAssets,
79
+ });
80
+ }
81
+ /**
82
+ * @private
83
+ * @return {?}
84
+ */
85
+ bindSubscriber() {
86
+ select((/**
87
+ * @param {?} state
88
+ * @return {?}
89
+ */
90
+ (state) => state.deletedAssetId))
91
+ .pipe(takeUntil(this.unsubscribe$))
92
+ .subscribe((/**
93
+ * @param {?} id
94
+ * @return {?}
95
+ */
96
+ (id) => {
97
+ if (this.selectedAssets && this.selectedAssets.length) {
98
+ /** @type {?} */
99
+ const newSelectedAssets = this.selectedAssets.filter((/**
100
+ * @param {?} asset
101
+ * @return {?}
102
+ */
103
+ (asset) => asset.AssetId !== id));
104
+ this.svc.dispatch({
105
+ type: ActionTypes.SET_SELECTED_ASSETS,
106
+ payload: newSelectedAssets,
107
+ });
108
+ }
109
+ }));
110
+ select((/**
111
+ * @param {?} state
112
+ * @return {?}
113
+ */
114
+ (state) => state.currentFolderId))
115
+ .pipe(takeUntil(this.unsubscribe$))
116
+ .subscribe((/**
117
+ * @param {?} currentFolderId
118
+ * @return {?}
119
+ */
120
+ (currentFolderId) => {
121
+ this.currentFolderId = currentFolderId;
122
+ this.svc.dispatch({
123
+ type: ActionTypes.SET_SELECTED_ASSETS,
124
+ payload: [],
125
+ });
126
+ }));
127
+ select((/**
128
+ * @param {?} state
129
+ * @return {?}
130
+ */
131
+ (state) => state.selectedAssets))
132
+ .pipe(takeUntil(this.unsubscribe$))
133
+ .subscribe((/**
134
+ * @param {?} selectedAssets
135
+ * @return {?}
136
+ */
137
+ (selectedAssets) => {
138
+ this.selectedAssets = selectedAssets;
139
+ }));
140
+ select((/**
141
+ * @param {?} state
142
+ * @return {?}
143
+ */
144
+ (state) => state.reloadCurrentAssets))
145
+ .pipe(takeUntil(this.unsubscribe$), switchMap((/**
146
+ * @param {?} res
147
+ * @return {?}
148
+ */
149
+ (res) => of(res))))
150
+ .subscribe((/**
151
+ * @return {?}
152
+ */
153
+ () => {
154
+ this.fetchChildrenAssets();
155
+ }));
156
+ }
157
+ /**
158
+ * @param {?=} event
159
+ * @return {?}
160
+ */
161
+ pageChange(event) {
162
+ this.assetService.pageSize = event.pageSize;
163
+ this.assetService.pageIndex = event.pageIndex;
164
+ this.fetchChildrenAssets();
165
+ }
166
+ /**
167
+ * @private
168
+ * @return {?}
169
+ */
170
+ fetchChildrenAssets() {
171
+ if (!this.currentFolderId) {
172
+ return;
173
+ }
174
+ this.svc.dispatch({
175
+ type: ActionTypes.SET_GLOBAL_LOADING,
176
+ payload: true,
177
+ });
178
+ this.assetService
179
+ .getChildrenAssets({ assetId: this.currentFolderId })
180
+ .pipe(takeUntil(this.unsubscribe$))
181
+ .subscribe((/**
182
+ * @param {?} res
183
+ * @return {?}
184
+ */
185
+ (res) => {
186
+ this.assetService.setAssetList(res.Data.Children, res.Meta);
187
+ }))
188
+ .add((/**
189
+ * @return {?}
190
+ */
191
+ () => {
192
+ this.svc.dispatch({
193
+ type: ActionTypes.SET_GLOBAL_LOADING,
194
+ payload: false,
195
+ });
196
+ }));
197
+ }
198
+ /**
199
+ * @private
200
+ * @return {?}
201
+ */
202
+ _resetUploadingAssets() {
203
+ /** @type {?} */
204
+ const reload = setInterval((/**
205
+ * @return {?}
206
+ */
207
+ () => {
208
+ this.fetchChildrenAssets();
209
+ if (this.assets.find((/**
210
+ * @param {?} x
211
+ * @return {?}
212
+ */
213
+ x => x.BackgroudProcessingStatus === this.backgroundProcessingNum.Processed))) {
214
+ clearInterval(reload);
215
+ }
216
+ console.log('Upload Successfully!'); // interval will be cleared after completing this whole block
217
+ }), 5000);
218
+ }
219
+ /**
220
+ * @return {?}
221
+ */
222
+ ngOnDestroy() {
223
+ this.unsubscribe$.next();
224
+ this.unsubscribe$.complete();
225
+ }
226
+ }
227
+ AssetListComponent.decorators = [
228
+ { type: Component, args: [{
229
+ selector: 'lib-asset-list',
230
+ template: "<div class=\"asset-container\">\n <div class=\"asset-heading\">\n <h6 class=\"asset-heading__title\">Files</h6>\n <lib-sort-items\n [hidden]=\"!assets?.length\"\n class=\"asset-heading__sort\"\n ></lib-sort-items>\n </div>\n <ng-container *ngIf=\"assets && !assets.length; else assetsTemplate\">\n <div class=\"asset-empty\">\n <span>This asset is empty.</span>\n </div>\n </ng-container>\n <ng-template #assetsTemplate>\n <div class=\"asset-list\">\n <lib-asset-item\n class=\"asset-list__item\"\n *ngFor=\"let asset of assets\"\n [asset]=\"asset\"\n (selectAsset)=\"onSelectAsset($event)\"\n [hasModifyPermission]=\"hasModifyPermission\"\n [hasAccessPermission]=\"hasAccessPermission\"\n [hasArchivePermission]=\"hasArchivePermission\"\n >\n </lib-asset-item>\n </div>\n </ng-template>\n <div [hidden]=\"!assets?.length\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[12, 24, 60, 120]\"\n (page)=\"pageChange($event)\"\n [showFirstLastButtons]=\"true\"\n >\n </mat-paginator>\n </div>\n</div>\n",
231
+ styles: [":host::ng-deep .asset-container .asset-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}:host::ng-deep .asset-container .asset-heading__title{margin-bottom:0;color:#979797}:host::ng-deep .asset-container .asset-list{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:stretch;margin:0 -5px}:host::ng-deep .asset-container .asset-list__item{width:25%}@media only screen and (max-width:1200px){:host::ng-deep .asset-container .asset-list__item{width:calc(100% / 3)}}@media only screen and (max-width:960px){:host::ng-deep .asset-container .asset-list__item{width:50%}}:host::ng-deep .asset-container .asset-empty{text-align:center;color:#979797;font-size:14px}"]
232
+ }] }
233
+ ];
234
+ /** @nocollapse */
235
+ AssetListComponent.ctorParameters = () => [
236
+ { type: AssetService },
237
+ { type: AssetManagementService }
238
+ ];
239
+ AssetListComponent.propDecorators = {
240
+ hasModifyPermission: [{ type: Input }],
241
+ hasAccessPermission: [{ type: Input }],
242
+ hasArchivePermission: [{ type: Input }],
243
+ paginator: [{ type: ViewChild, args: [MatPaginator, { static: true },] }],
244
+ assets: [{ type: Input }]
245
+ };
246
+ if (false) {
247
+ /** @type {?} */
248
+ AssetListComponent.prototype.hasModifyPermission;
249
+ /** @type {?} */
250
+ AssetListComponent.prototype.hasAccessPermission;
251
+ /** @type {?} */
252
+ AssetListComponent.prototype.hasArchivePermission;
253
+ /** @type {?} */
254
+ AssetListComponent.prototype.paginator;
255
+ /** @type {?} */
256
+ AssetListComponent.prototype.assets;
257
+ /** @type {?} */
258
+ AssetListComponent.prototype.backgroundProcessingNum;
259
+ /**
260
+ * @type {?}
261
+ * @private
262
+ */
263
+ AssetListComponent.prototype.unsubscribe$;
264
+ /**
265
+ * @type {?}
266
+ * @private
267
+ */
268
+ AssetListComponent.prototype.currentFolderId;
269
+ /**
270
+ * @type {?}
271
+ * @private
272
+ */
273
+ AssetListComponent.prototype.selectedAssets;
274
+ /**
275
+ * @type {?}
276
+ * @private
277
+ */
278
+ AssetListComponent.prototype.assetService;
279
+ /**
280
+ * @type {?}
281
+ * @private
282
+ */
283
+ AssetListComponent.prototype.svc;
284
+ }
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AcnMtcGsvYXNzZXQtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3BhcnRpYWwvYXNzZXQtbGlzdC9hc3NldC1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBS0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFjLHlCQUF5QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPaEQsTUFBTSxPQUFPLGtCQUFrQjs7Ozs7SUFLN0IsWUFDVSxZQUEwQixFQUMxQixHQUEyQjtRQUQzQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixRQUFHLEdBQUgsR0FBRyxDQUF3QjtRQU41Qix3QkFBbUIsR0FBYSxJQUFJLENBQUM7UUFDckMsd0JBQW1CLEdBQWEsSUFBSSxDQUFDO1FBQ3JDLHlCQUFvQixHQUFhLElBQUksQ0FBQztRQVV4Qyw0QkFBdUIsR0FBRyx5QkFBeUIsQ0FBQztRQUVuRCxpQkFBWSxHQUFHLElBQUksT0FB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b0NBQTBDOzthQUUzQzs7OztZQVJRLFlBQVk7WUFGWixzQkFBc0I7OztrQ0FZNUIsS0FBSztrQ0FDTCxLQUFLO21DQUNMLEtBQUs7d0JBT0wsU0FBUyxTQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7cUJBQ3hDLEtBQUs7Ozs7SUFWTixpREFBOEM7O0lBQzlDLGlEQUE4Qzs7SUFDOUMsa0RBQStDOztJQU8vQyx1Q0FBbUU7O0lBQ25FLG9DQUE4Qjs7SUFFOUIscURBQTJEOzs7OztJQUUzRCwwQ0FBMkM7Ozs7O0lBQzNDLDZDQUFnQzs7Ozs7SUFDaEMsNENBQStDOzs7OztJQVg3QywwQ0FBa0M7Ozs7O0lBQ2xDLGlDQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vZic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcy9pbnRlcm5hbC9TdWJqZWN0JztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXNzZXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Fzc2V0LW1hbmFnZW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBc3NldE1vZGVsLCBCYWNrZ3JvdWRQcm9jZXNzaW5nU3RhdHVzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IEFzc2V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Fzc2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aW9uVHlwZXMgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9hY3Rpb25zLmFjdGlvbic7XG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9yZWR1Y2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWFzc2V0LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Fzc2V0LWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGhhc01vZGlmeVBlcm1pc3Npb24/OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgaGFzQWNjZXNzUGVybWlzc2lvbj86IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBoYXNBcmNoaXZlUGVybWlzc2lvbj86IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXNzZXRTZXJ2aWNlOiBBc3NldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdmM6IEFzc2V0TWFuYWdlbWVudFNlcnZpY2VcbiAgKSB7fVxuXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgQElucHV0KCkgYXNzZXRzOiBBc3NldE1vZGVsW107XG5cbiAgcHVibGljIGJhY2tncm91bmRQcm9jZXNzaW5nTnVtID0gQmFja2dyb3VkUHJvY2Vzc2luZ1N0YXR1cztcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgY3VycmVudEZvbGRlcklkOiBzdHJpbmc7XG4gIHByaXZhdGUgc2VsZWN0ZWRBc3NldHM6IEFycmF5PEFzc2V0TW9kZWw+ID0gW107XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5iaW5kU3Vic2NyaWJlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmFzc2V0cykge1xuICAgICAgLy8gQ2hlY2sgaWYgYXNzZXQgaXMgdXBsb2FkaW5nXG4gICAgICBpZiAodGhpcy5hc3NldHMgJiYgdGhpcy5hc3NldHMuZmluZCh4ID0+IHguQmFja2dyb3VkUHJvY2Vzc2luZ1N0YXR1cyA9PT0gdGhpcy5iYWNrZ3JvdW5kUHJvY2Vzc2luZ051bS5JblByb2Nlc3NpbmcpKSB7XG4gICAgICAgIHRoaXMuX3Jlc2V0VXBsb2FkaW5nQXNzZXRzKCk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSB0aGlzLmFzc2V0U2VydmljZS5wYWdlSW5kZXg7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMuYXNzZXRTZXJ2aWNlLnBhZ2VTaXplO1xuICAgICAgdGhpcy5wYWdpbmF0b3IubGVuZ3RoID0gdGhpcy5hc3NldFNlcnZpY2UuZmlsZVRvdGFsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdEFzc2V0KGV2ZW50OiBBc3NldE1vZGVsKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkQXNzZXRzLmZpbmRJbmRleChcbiAgICAgIChhc3NldCkgPT4gYXNzZXQuQXNzZXRJZCA9PT0gZXZlbnQuQXNzZXRJZFxuICAgICk7XG4gICAgY29uc3QgbmV3U2VsZWN0ZWRBc3NldHM6IEFzc2V0TW9kZWxbXSA9XG4gICAgICBpbmRleCA+IC0xXG4gICAgICAgID8gdGhpcy5zZWxlY3RlZEFzc2V0cy5maWx0ZXIoKGFzc2V0LCBpKSA9PiBpbmRleCAhPT0gaSlcbiAgICAgICAgOiBbLi4udGhpcy5zZWxlY3RlZEFzc2V0cywgZXZlbnRdO1xuXG4gICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX1NFTEVDVEVEX0FTU0VUUyxcbiAgICAgIHBheWxvYWQ6IG5ld1NlbGVjdGVkQXNzZXRzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kU3Vic2NyaWJlcigpIHtcbiAgICBzZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZS5kZWxldGVkQXNzZXRJZClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEFzc2V0cyAmJiB0aGlzLnNlbGVjdGVkQXNzZXRzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkQXNzZXRzID0gdGhpcy5zZWxlY3RlZEFzc2V0cy5maWx0ZXIoXG4gICAgICAgICAgICAoYXNzZXQpID0+IGFzc2V0LkFzc2V0SWQgIT09IGlkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfU0VMRUNURURfQVNTRVRTLFxuICAgICAgICAgICAgcGF5bG9hZDogbmV3U2VsZWN0ZWRBc3NldHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUuY3VycmVudEZvbGRlcklkKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbnRGb2xkZXJJZCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXJJZCA9IGN1cnJlbnRGb2xkZXJJZDtcbiAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9BU1NFVFMsXG4gICAgICAgICAgcGF5bG9hZDogW10sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBzZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZS5zZWxlY3RlZEFzc2V0cylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZEFzc2V0cykgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQXNzZXRzID0gc2VsZWN0ZWRBc3NldHM7XG4gICAgICB9KTtcblxuICAgIHNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLnJlbG9hZEN1cnJlbnRBc3NldHMpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgICAgc3dpdGNoTWFwKChyZXMpID0+IG9mKHJlcykpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mZXRjaENoaWxkcmVuQXNzZXRzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwYWdlQ2hhbmdlKGV2ZW50PzogUGFnZUV2ZW50KSB7XG4gICAgdGhpcy5hc3NldFNlcnZpY2UucGFnZVNpemUgPSBldmVudC5wYWdlU2l6ZTtcbiAgICB0aGlzLmFzc2V0U2VydmljZS5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XG4gICAgdGhpcy5mZXRjaENoaWxkcmVuQXNzZXRzKCk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoQ2hpbGRyZW5Bc3NldHMoKSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRGb2xkZXJJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfR0xPQkFMX0xPQURJTkcsXG4gICAgICBwYXlsb2FkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hc3NldFNlcnZpY2VcbiAgICAgIC5nZXRDaGlsZHJlbkFzc2V0cyh7IGFzc2V0SWQ6IHRoaXMuY3VycmVudEZvbGRlcklkIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuYXNzZXRTZXJ2aWNlLnNldEFzc2V0TGlzdChyZXMuRGF0YS5DaGlsZHJlbiwgcmVzLk1ldGEpO1xuICAgICAgfSlcbiAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0dMT0JBTF9MT0FESU5HLFxuICAgICAgICAgIHBheWxvYWQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRVcGxvYWRpbmdBc3NldHMgKCkge1xuICAgIGNvbnN0IHJlbG9hZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuZmV0Y2hDaGlsZHJlbkFzc2V0cygpO1xuICAgICAgaWYgKHRoaXMuYXNzZXRzLmZpbmQoeCA9PiB4LkJhY2tncm91ZFByb2Nlc3NpbmdTdGF0dXMgPT09IHRoaXMuYmFja2dyb3VuZFByb2Nlc3NpbmdOdW0uUHJvY2Vzc2VkKSkge1xuICAgICAgICBjbGVhckludGVydmFsKHJlbG9hZCk7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZygnVXBsb2FkIFN1Y2Nlc3NmdWxseSEnKTsgLy8gaW50ZXJ2YWwgd2lsbCBiZSBjbGVhcmVkIGFmdGVyIGNvbXBsZXRpbmcgdGhpcyB3aG9sZSBibG9ja1xuICAgIH0sIDUwMDApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==