@rs-pk/asset-management 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/bundles/rs-pk-asset-management.umd.js +6474 -0
- package/bundles/rs-pk-asset-management.umd.js.map +1 -0
- package/bundles/rs-pk-asset-management.umd.min.js +16 -0
- package/bundles/rs-pk-asset-management.umd.min.js.map +1 -0
- package/esm2015/lib/asset-management.component.js +147 -0
- package/esm2015/lib/asset-management.module.js +179 -0
- package/esm2015/lib/asset-management.service.js +45 -0
- package/esm2015/lib/components/partial/add-folder-dialog/add-folder-dialog.component.js +143 -0
- package/esm2015/lib/components/partial/asset-dialog/asset-dialog.component.js +373 -0
- package/esm2015/lib/components/partial/asset-item/asset-item.component.js +165 -0
- package/esm2015/lib/components/partial/asset-list/asset-list.component.js +239 -0
- package/esm2015/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +108 -0
- package/esm2015/lib/components/partial/asset-wrapper/asset-wrapper.component.js +100 -0
- package/esm2015/lib/components/partial/breadcrumb/breadcrumb.component.js +115 -0
- package/esm2015/lib/components/partial/delete-dialog/delete-dialog.component.js +139 -0
- package/esm2015/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.js +148 -0
- package/esm2015/lib/components/partial/file-item/file-item.component.js +136 -0
- package/esm2015/lib/components/partial/file-list/file-list.component.js +72 -0
- package/esm2015/lib/components/partial/folder-item/folder-item.component.js +114 -0
- package/esm2015/lib/components/partial/folder-list/folder-list.component.js +69 -0
- package/esm2015/lib/components/partial/node-details/node-details.component.js +402 -0
- package/esm2015/lib/components/partial/node-tree/node-tree.component.js +330 -0
- package/esm2015/lib/components/partial/search-box/search-box.component.js +158 -0
- package/esm2015/lib/components/partial/sort-items/sort-items.component.js +99 -0
- package/esm2015/lib/components/partial/upload-dialog/upload-dialog.component.js +136 -0
- package/esm2015/lib/components/partial/upload-file/upload-file.component.js +102 -0
- package/esm2015/lib/components/ui/drag-to-resize/drag-to-resize.component.js +96 -0
- package/esm2015/lib/components/ui/input-file/input-file.component.js +49 -0
- package/esm2015/lib/components/ui/modal/modal.component.js +34 -0
- package/esm2015/lib/components/ui/search-not-found/search-not-found.component.js +41 -0
- package/esm2015/lib/configs/admin.config.js +22 -0
- package/esm2015/lib/contanst/data-image.js +12 -0
- package/esm2015/lib/contanst/index.js +6 -0
- package/esm2015/lib/datasources/index.js +6 -0
- package/esm2015/lib/datasources/node-tree.datasource.js +179 -0
- package/esm2015/lib/directives/dialogTrigger.directive.js +47 -0
- package/esm2015/lib/directives/directives.module.js +20 -0
- package/esm2015/lib/directives/dnd.directive.js +57 -0
- package/esm2015/lib/models/asset-file.model.js +57 -0
- package/esm2015/lib/models/asset.model.js +135 -0
- package/esm2015/lib/models/file-type.enum.js +11 -0
- package/esm2015/lib/models/file.model.js +91 -0
- package/esm2015/lib/models/index.js +12 -0
- package/esm2015/lib/models/node-tree.model.js +32 -0
- package/esm2015/lib/models/sort.enum.js +23 -0
- package/esm2015/lib/pipes/datetime.pipe.js +79 -0
- package/esm2015/lib/pipes/file-size.pipe.js +54 -0
- package/esm2015/lib/services/asset.service.js +224 -0
- package/esm2015/lib/services/base.service.js +49 -0
- package/esm2015/lib/services/env-config.service.js +18 -0
- package/esm2015/lib/services/file.service.js +106 -0
- package/esm2015/lib/services/index.js +11 -0
- package/esm2015/lib/services/node-tree.service.js +212 -0
- package/esm2015/lib/services/upload-assets.service.js +203 -0
- package/esm2015/lib/store/actions.action.js +125 -0
- package/esm2015/lib/store/index.js +7 -0
- package/esm2015/lib/store/reducer.js +115 -0
- package/esm2015/public-api.js +34 -0
- package/esm2015/rs-pk-asset-management.js +17 -0
- package/esm5/lib/asset-management.component.js +162 -0
- package/esm5/lib/asset-management.module.js +180 -0
- package/esm5/lib/asset-management.service.js +54 -0
- package/esm5/lib/components/partial/add-folder-dialog/add-folder-dialog.component.js +161 -0
- package/esm5/lib/components/partial/asset-dialog/asset-dialog.component.js +417 -0
- package/esm5/lib/components/partial/asset-item/asset-item.component.js +184 -0
- package/esm5/lib/components/partial/asset-list/asset-list.component.js +266 -0
- package/esm5/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +123 -0
- package/esm5/lib/components/partial/asset-wrapper/asset-wrapper.component.js +115 -0
- package/esm5/lib/components/partial/breadcrumb/breadcrumb.component.js +138 -0
- package/esm5/lib/components/partial/delete-dialog/delete-dialog.component.js +154 -0
- package/esm5/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.js +166 -0
- package/esm5/lib/components/partial/file-item/file-item.component.js +151 -0
- package/esm5/lib/components/partial/file-list/file-list.component.js +93 -0
- package/esm5/lib/components/partial/folder-item/folder-item.component.js +126 -0
- package/esm5/lib/components/partial/folder-list/folder-list.component.js +82 -0
- package/esm5/lib/components/partial/node-details/node-details.component.js +443 -0
- package/esm5/lib/components/partial/node-tree/node-tree.component.js +413 -0
- package/esm5/lib/components/partial/search-box/search-box.component.js +184 -0
- package/esm5/lib/components/partial/sort-items/sort-items.component.js +107 -0
- package/esm5/lib/components/partial/upload-dialog/upload-dialog.component.js +151 -0
- package/esm5/lib/components/partial/upload-file/upload-file.component.js +130 -0
- package/esm5/lib/components/ui/drag-to-resize/drag-to-resize.component.js +117 -0
- package/esm5/lib/components/ui/input-file/input-file.component.js +55 -0
- package/esm5/lib/components/ui/modal/modal.component.js +39 -0
- package/esm5/lib/components/ui/search-not-found/search-not-found.component.js +43 -0
- package/esm5/lib/configs/admin.config.js +22 -0
- package/esm5/lib/contanst/data-image.js +12 -0
- package/esm5/lib/contanst/index.js +6 -0
- package/esm5/lib/datasources/index.js +6 -0
- package/esm5/lib/datasources/node-tree.datasource.js +239 -0
- package/esm5/lib/directives/dialogTrigger.directive.js +53 -0
- package/esm5/lib/directives/directives.module.js +25 -0
- package/esm5/lib/directives/dnd.directive.js +80 -0
- package/esm5/lib/models/asset-file.model.js +69 -0
- package/esm5/lib/models/asset.model.js +154 -0
- package/esm5/lib/models/file-type.enum.js +11 -0
- package/esm5/lib/models/file.model.js +99 -0
- package/esm5/lib/models/index.js +12 -0
- package/esm5/lib/models/node-tree.model.js +37 -0
- package/esm5/lib/models/sort.enum.js +23 -0
- package/esm5/lib/pipes/datetime.pipe.js +83 -0
- package/esm5/lib/pipes/file-size.pipe.js +63 -0
- package/esm5/lib/services/asset.service.js +274 -0
- package/esm5/lib/services/base.service.js +57 -0
- package/esm5/lib/services/env-config.service.js +18 -0
- package/esm5/lib/services/file.service.js +127 -0
- package/esm5/lib/services/index.js +11 -0
- package/esm5/lib/services/node-tree.service.js +278 -0
- package/esm5/lib/services/upload-assets.service.js +260 -0
- package/esm5/lib/store/actions.action.js +143 -0
- package/esm5/lib/store/index.js +7 -0
- package/esm5/lib/store/reducer.js +116 -0
- package/esm5/public-api.js +34 -0
- package/esm5/rs-pk-asset-management.js +17 -0
- package/fesm2015/rs-pk-asset-management.js +5429 -0
- package/fesm2015/rs-pk-asset-management.js.map +1 -0
- package/fesm5/rs-pk-asset-management.js +6244 -0
- package/fesm5/rs-pk-asset-management.js.map +1 -0
- package/lib/asset-management.component.d.ts +21 -0
- package/lib/asset-management.module.d.ts +5 -0
- package/lib/asset-management.service.d.ts +7 -0
- package/lib/components/partial/add-folder-dialog/add-folder-dialog.component.d.ts +27 -0
- package/lib/components/partial/asset-dialog/asset-dialog.component.d.ts +52 -0
- package/lib/components/partial/asset-item/asset-item.component.d.ts +25 -0
- package/lib/components/partial/asset-list/asset-list.component.d.ts +22 -0
- package/lib/components/partial/asset-management-dialog/asset-management-dialog.component.d.ts +17 -0
- package/lib/components/partial/asset-wrapper/asset-wrapper.component.d.ts +19 -0
- package/lib/components/partial/breadcrumb/breadcrumb.component.d.ts +17 -0
- package/lib/components/partial/delete-dialog/delete-dialog.component.d.ts +24 -0
- package/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.d.ts +28 -0
- package/lib/components/partial/file-item/file-item.component.d.ts +27 -0
- package/lib/components/partial/file-list/file-list.component.d.ts +12 -0
- package/lib/components/partial/folder-item/folder-item.component.d.ts +14 -0
- package/lib/components/partial/folder-list/folder-list.component.d.ts +11 -0
- package/lib/components/partial/node-details/node-details.component.d.ts +29 -0
- package/lib/components/partial/node-tree/node-tree.component.d.ts +34 -0
- package/lib/components/partial/search-box/search-box.component.d.ts +18 -0
- package/lib/components/partial/sort-items/sort-items.component.d.ts +21 -0
- package/lib/components/partial/upload-dialog/upload-dialog.component.d.ts +24 -0
- package/lib/components/partial/upload-file/upload-file.component.d.ts +18 -0
- package/lib/components/ui/drag-to-resize/drag-to-resize.component.d.ts +15 -0
- package/lib/components/ui/input-file/input-file.component.d.ts +9 -0
- package/lib/components/ui/modal/modal.component.d.ts +7 -0
- package/lib/components/ui/search-not-found/search-not-found.component.d.ts +8 -0
- package/lib/configs/admin.config.d.ts +3 -0
- package/lib/contanst/data-image.d.ts +3 -0
- package/lib/contanst/index.d.ts +1 -0
- package/lib/datasources/index.d.ts +1 -0
- package/lib/datasources/node-tree.datasource.d.ts +24 -0
- package/lib/directives/dialogTrigger.directive.d.ts +7 -0
- package/lib/directives/directives.module.d.ts +5 -0
- package/lib/directives/dnd.directive.d.ts +7 -0
- package/lib/models/asset-file.model.d.ts +26 -0
- package/lib/models/asset.model.d.ts +61 -0
- package/lib/models/file-type.enum.d.ts +4 -0
- package/lib/models/file.model.d.ts +41 -0
- package/lib/models/index.d.ts +7 -0
- package/lib/models/node-tree.model.d.ts +9 -0
- package/lib/models/sort.enum.d.ts +9 -0
- package/lib/pipes/datetime.pipe.d.ts +13 -0
- package/lib/pipes/file-size.pipe.d.ts +5 -0
- package/lib/services/asset.service.d.ts +35 -0
- package/lib/services/base.service.d.ts +20 -0
- package/lib/services/env-config.service.d.ts +7 -0
- package/lib/services/file.service.d.ts +13 -0
- package/lib/services/index.d.ts +6 -0
- package/lib/services/node-tree.service.d.ts +24 -0
- package/lib/services/upload-assets.service.d.ts +42 -0
- package/lib/store/actions.action.d.ts +51 -0
- package/lib/store/index.d.ts +2 -0
- package/lib/store/reducer.d.ts +18 -0
- package/package.json +28 -0
- package/public-api.d.ts +26 -0
- package/rs-pk-asset-management.d.ts +12 -0
- package/rs-pk-asset-management.metadata.json +1 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
import { Component, Input } from '@angular/core';
|
|
6
|
+
import { MatDialog } from '@angular/material/dialog';
|
|
7
|
+
import { AssetModel } from '../../../models';
|
|
8
|
+
import { ActionTypes } from '../../../store/actions.action';
|
|
9
|
+
import { EditFolderDialogComponent } from '../edit-folder-dialog/edit-folder-dialog.component';
|
|
10
|
+
import { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';
|
|
11
|
+
import { AssetManagementService } from '../../../asset-management.service';
|
|
12
|
+
export class FolderItemComponent {
|
|
13
|
+
/**
|
|
14
|
+
* @param {?} dialog
|
|
15
|
+
* @param {?} svc
|
|
16
|
+
*/
|
|
17
|
+
constructor(dialog, svc) {
|
|
18
|
+
this.dialog = dialog;
|
|
19
|
+
this.svc = svc;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @return {?}
|
|
23
|
+
*/
|
|
24
|
+
ngOnInit() { }
|
|
25
|
+
/**
|
|
26
|
+
* @return {?}
|
|
27
|
+
*/
|
|
28
|
+
openFolder() {
|
|
29
|
+
this.svc.dispatch({
|
|
30
|
+
type: ActionTypes.SET_CURRENT_FOLDER_ID,
|
|
31
|
+
payload: this.folder.AssetId,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @return {?}
|
|
36
|
+
*/
|
|
37
|
+
renameFolder() {
|
|
38
|
+
/** @type {?} */
|
|
39
|
+
const dialogRef = this.dialog.open(EditFolderDialogComponent, {
|
|
40
|
+
data: {
|
|
41
|
+
assetId: this.folder.AssetId,
|
|
42
|
+
name: this.folder.OriginalFileName,
|
|
43
|
+
},
|
|
44
|
+
panelClass: 'lib-dialog--small',
|
|
45
|
+
});
|
|
46
|
+
dialogRef.afterClosed().subscribe((/**
|
|
47
|
+
* @param {?} res
|
|
48
|
+
* @return {?}
|
|
49
|
+
*/
|
|
50
|
+
res => {
|
|
51
|
+
if (res) {
|
|
52
|
+
this.svc.dispatch({
|
|
53
|
+
type: ActionTypes.RELOAD_CURRENT_FOLDER,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @return {?}
|
|
60
|
+
*/
|
|
61
|
+
deleteFolder() {
|
|
62
|
+
/** @type {?} */
|
|
63
|
+
const dialogRef = this.dialog.open(DeleteDialogComponent, {
|
|
64
|
+
data: {
|
|
65
|
+
type: 'folder',
|
|
66
|
+
ids: [this.folder.AssetId],
|
|
67
|
+
name: this.folder.OriginalFileName,
|
|
68
|
+
},
|
|
69
|
+
panelClass: 'lib-dialog--small',
|
|
70
|
+
autoFocus: false,
|
|
71
|
+
});
|
|
72
|
+
dialogRef.afterClosed().subscribe((/**
|
|
73
|
+
* @param {?} res
|
|
74
|
+
* @return {?}
|
|
75
|
+
*/
|
|
76
|
+
res => {
|
|
77
|
+
if (res) {
|
|
78
|
+
this.svc.dispatch({
|
|
79
|
+
type: ActionTypes.RELOAD_CURRENT_FOLDER,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
FolderItemComponent.decorators = [
|
|
86
|
+
{ type: Component, args: [{
|
|
87
|
+
selector: 'lib-folder-item',
|
|
88
|
+
template: "<div class=\"folder\" (dblclick)=\"openFolder()\">\n <mat-icon class=\"folder__icon\">folder</mat-icon>\n <span class=\"folder__name\" [matTooltip]=\"folder.OriginalFileName\">\n {{ folder.OriginalFileName }}\n </span>\n <mat-icon class=\"folder__action\" [matMenuTriggerFor]=\"menu\"\n >more_vert</mat-icon\n >\n</div>\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"renameFolder()\">\n <mat-icon>edit_outline</mat-icon> <span>Rename</span>\n </button>\n <button mat-menu-item (click)=\"deleteFolder()\">\n <mat-icon color=\"warn\">delete_outline</mat-icon> <span>Delete</span>\n </button>\n</mat-menu>\n",
|
|
89
|
+
styles: [":host::ng-deep .folder{width:180px;height:50px;display:flex;position:relative;align-items:center;padding:5px 20px 5px 10px;border-radius:10px;cursor:pointer;transition:.3s}:host::ng-deep .folder:hover{background-color:#f1f1f1}:host::ng-deep .folder:hover .folder__action{display:block}:host::ng-deep .folder__icon{display:flex;align-items:center;color:#6fc0ff;font-size:38px;margin-right:20px}:host::ng-deep .folder__name{font-size:14px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host::ng-deep .folder__action{display:none;right:0;position:absolute;color:#979797;transition:.3s}:host::ng-deep .folder__action:hover{color:#000}"]
|
|
90
|
+
}] }
|
|
91
|
+
];
|
|
92
|
+
/** @nocollapse */
|
|
93
|
+
FolderItemComponent.ctorParameters = () => [
|
|
94
|
+
{ type: MatDialog },
|
|
95
|
+
{ type: AssetManagementService }
|
|
96
|
+
];
|
|
97
|
+
FolderItemComponent.propDecorators = {
|
|
98
|
+
folder: [{ type: Input }]
|
|
99
|
+
};
|
|
100
|
+
if (false) {
|
|
101
|
+
/** @type {?} */
|
|
102
|
+
FolderItemComponent.prototype.folder;
|
|
103
|
+
/**
|
|
104
|
+
* @type {?}
|
|
105
|
+
* @private
|
|
106
|
+
*/
|
|
107
|
+
FolderItemComponent.prototype.dialog;
|
|
108
|
+
/**
|
|
109
|
+
* @type {?}
|
|
110
|
+
* @private
|
|
111
|
+
*/
|
|
112
|
+
FolderItemComponent.prototype.svc;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9sZGVyLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHJzLXBrL2Fzc2V0LW1hbmFnZW1lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wYXJ0aWFsL2ZvbGRlci1pdGVtL2ZvbGRlci1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDL0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFPM0UsTUFBTSxPQUFPLG1CQUFtQjs7Ozs7SUFDOUIsWUFBb0IsTUFBaUIsRUFBVSxHQUEyQjtRQUF0RCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBd0I7SUFBRyxDQUFDOzs7O0lBRTlFLFFBQVEsS0FBSSxDQUFDOzs7O0lBRWIsVUFBVTtRQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ2hCLElBQUksRUFBRSxXQUFXLENBQUMscUJBQXFCO1lBQ3ZDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7OztJQUVELFlBQVk7O2NBQ0osU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQzVELElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO2dCQUM1QixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7YUFDbkM7WUFDRCxVQUFVLEVBQUUsbUJBQW1CO1NBQ2hDLENBQUM7UUFFRixTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUzs7OztRQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO29CQUNoQixJQUFJLEVBQUUsV0FBVyxDQUFDLHFCQUFxQjtpQkFDeEMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFRCxZQUFZOztjQUNKLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUN4RCxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQzFCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQjthQUNuQztZQUNELFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztRQUVGLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTOzs7O1FBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEMsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7b0JBQ2hCLElBQUksRUFBRSxXQUFXLENBQUMscUJBQXFCO2lCQUN4QyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBckRGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQiw4b0JBQTJDOzthQUU1Qzs7OztZQVhRLFNBQVM7WUFLVCxzQkFBc0I7OztxQkFTNUIsS0FBSzs7OztJQUFOLHFDQUE0Qjs7Ozs7SUFEaEIscUNBQXlCOzs7OztJQUFFLGtDQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEFzc2V0TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgQWN0aW9uVHlwZXMgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9hY3Rpb25zLmFjdGlvbic7XG5pbXBvcnQgeyBFZGl0Rm9sZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZWRpdC1mb2xkZXItZGlhbG9nL2VkaXQtZm9sZGVyLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVsZXRlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVsZXRlLWRpYWxvZy9kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBc3NldE1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXNzZXQtbWFuYWdlbWVudC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWZvbGRlci1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZvbGRlci1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9sZGVyLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9sZGVySXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIHByaXZhdGUgc3ZjOiBBc3NldE1hbmFnZW1lbnRTZXJ2aWNlKSB7fVxuICBASW5wdXQoKSBmb2xkZXI6IEFzc2V0TW9kZWw7XG4gIG5nT25Jbml0KCkge31cblxuICBvcGVuRm9sZGVyKCkge1xuICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9DVVJSRU5UX0ZPTERFUl9JRCxcbiAgICAgIHBheWxvYWQ6IHRoaXMuZm9sZGVyLkFzc2V0SWQsXG4gICAgfSk7XG4gIH1cblxuICByZW5hbWVGb2xkZXIoKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihFZGl0Rm9sZGVyRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGFzc2V0SWQ6IHRoaXMuZm9sZGVyLkFzc2V0SWQsXG4gICAgICAgIG5hbWU6IHRoaXMuZm9sZGVyLk9yaWdpbmFsRmlsZU5hbWUsXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2xpYi1kaWFsb2ctLXNtYWxsJyxcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVMT0FEX0NVUlJFTlRfRk9MREVSLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZUZvbGRlcigpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERlbGV0ZURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICB0eXBlOiAnZm9sZGVyJyxcbiAgICAgICAgaWRzOiBbdGhpcy5mb2xkZXIuQXNzZXRJZF0sXG4gICAgICAgIG5hbWU6IHRoaXMuZm9sZGVyLk9yaWdpbmFsRmlsZU5hbWUsXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2xpYi1kaWFsb2ctLXNtYWxsJyxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTE9BRF9DVVJSRU5UX0ZPTERFUixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
import { Component, Input } from '@angular/core';
|
|
6
|
+
import { Subject } from 'rxjs/internal/Subject';
|
|
7
|
+
import { takeUntil } from 'rxjs/operators';
|
|
8
|
+
import { select } from '../../../store';
|
|
9
|
+
export class FolderListComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.loading = false;
|
|
12
|
+
this.unsubscribe$ = new Subject();
|
|
13
|
+
this.bindSubscriber();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @return {?}
|
|
17
|
+
*/
|
|
18
|
+
ngOnInit() { }
|
|
19
|
+
/**
|
|
20
|
+
* @return {?}
|
|
21
|
+
*/
|
|
22
|
+
ngOnDestroy() {
|
|
23
|
+
this.unsubscribe$.next();
|
|
24
|
+
this.unsubscribe$.complete();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @private
|
|
28
|
+
* @return {?}
|
|
29
|
+
*/
|
|
30
|
+
bindSubscriber() {
|
|
31
|
+
select((/**
|
|
32
|
+
* @param {?} state
|
|
33
|
+
* @return {?}
|
|
34
|
+
*/
|
|
35
|
+
state => state.globalLoading))
|
|
36
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
37
|
+
.subscribe((/**
|
|
38
|
+
* @param {?} globalLoading
|
|
39
|
+
* @return {?}
|
|
40
|
+
*/
|
|
41
|
+
globalLoading => {
|
|
42
|
+
this.loading = globalLoading;
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
FolderListComponent.decorators = [
|
|
47
|
+
{ type: Component, args: [{
|
|
48
|
+
selector: 'lib-folder-list',
|
|
49
|
+
template: "<div class=\"folder-container\">\n <h6>Folders</h6>\n <div class=\"folder-list custom-scrollbar\">\n <lib-folder-item\n *ngFor=\"let folder of folders\"\n [folder]=\"folder\"\n ></lib-folder-item>\n </div>\n <div class=\"folder-empty\" *ngIf=\"folders && !folders.length\">\n <span>This folder is empty.</span>\n </div>\n</div>\n",
|
|
50
|
+
styles: [":host::ng-deep .folder-container h6{color:#979797}:host::ng-deep .folder-container .folder-list{display:flex;flex-wrap:nowrap;overflow:auto;padding-bottom:10px}:host::ng-deep .folder-container .folder-empty{text-align:center;color:#979797;font-size:14px}"]
|
|
51
|
+
}] }
|
|
52
|
+
];
|
|
53
|
+
/** @nocollapse */
|
|
54
|
+
FolderListComponent.ctorParameters = () => [];
|
|
55
|
+
FolderListComponent.propDecorators = {
|
|
56
|
+
folders: [{ type: Input }]
|
|
57
|
+
};
|
|
58
|
+
if (false) {
|
|
59
|
+
/** @type {?} */
|
|
60
|
+
FolderListComponent.prototype.folders;
|
|
61
|
+
/** @type {?} */
|
|
62
|
+
FolderListComponent.prototype.loading;
|
|
63
|
+
/**
|
|
64
|
+
* @type {?}
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
FolderListComponent.prototype.unsubscribe$;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9sZGVyLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHJzLXBrL2Fzc2V0LW1hbmFnZW1lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wYXJ0aWFsL2ZvbGRlci1saXN0L2ZvbGRlci1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT3hDLE1BQU0sT0FBTyxtQkFBbUI7SUFFOUI7UUFLTyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2YsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBTHpDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDOzs7O0lBTUQsUUFBUSxLQUFJLENBQUM7Ozs7SUFFYixXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7Ozs7O0lBRU8sY0FBYztRQUNwQixNQUFNOzs7O1FBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFDO2FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2xDLFNBQVM7Ozs7UUFBQyxhQUFhLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUMvQixDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7OztZQTVCRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsNldBQTJDOzthQUU1Qzs7Ozs7c0JBT0UsS0FBSzs7OztJQUFOLHNDQUErQjs7SUFDL0Isc0NBQXVCOzs7OztJQUN2QiwyQ0FBMkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvU3ViamVjdCc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBc3NldE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWZvbGRlci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZvbGRlci1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9sZGVyLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9sZGVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJpbmRTdWJzY3JpYmVyKCk7XG4gIH1cblxuICBASW5wdXQoKSBmb2xkZXJzOiBBc3NldE1vZGVsW107XG4gIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGJpbmRTdWJzY3JpYmVyKCkge1xuICAgIHNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5nbG9iYWxMb2FkaW5nKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgIC5zdWJzY3JpYmUoZ2xvYmFsTG9hZGluZyA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGdsb2JhbExvYWRpbmc7XG4gICAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
import { ChangeDetectorRef, Component } from '@angular/core';
|
|
6
|
+
import { MatDialog } from '@angular/material/dialog';
|
|
7
|
+
import { of } from 'rxjs';
|
|
8
|
+
import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
|
|
9
|
+
import { combineLatest } from 'rxjs/internal/observable/combineLatest';
|
|
10
|
+
import { Subject } from 'rxjs/internal/Subject';
|
|
11
|
+
import { switchMap, takeUntil } from 'rxjs/operators';
|
|
12
|
+
import { AssetManagementService } from '../../../asset-management.service';
|
|
13
|
+
import { AssetService } from '../../../services/asset.service';
|
|
14
|
+
import { NodeTreeService } from '../../../services/node-tree.service';
|
|
15
|
+
import { ActionTypes, select } from '../../../store';
|
|
16
|
+
import { AddFolderDialogComponent } from '../add-folder-dialog/add-folder-dialog.component';
|
|
17
|
+
import { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';
|
|
18
|
+
import { UploadDialogComponent } from '../upload-dialog/upload-dialog.component';
|
|
19
|
+
export class NodeDetailsComponent {
|
|
20
|
+
/**
|
|
21
|
+
* @param {?} dialog
|
|
22
|
+
* @param {?} assetService
|
|
23
|
+
* @param {?} nodeTreeService
|
|
24
|
+
* @param {?} svc
|
|
25
|
+
* @param {?} changeDetectorRef
|
|
26
|
+
*/
|
|
27
|
+
constructor(dialog, assetService, nodeTreeService, svc, changeDetectorRef) {
|
|
28
|
+
this.dialog = dialog;
|
|
29
|
+
this.assetService = assetService;
|
|
30
|
+
this.nodeTreeService = nodeTreeService;
|
|
31
|
+
this.svc = svc;
|
|
32
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
33
|
+
this.unsubscribe$ = new Subject();
|
|
34
|
+
this.selectedAssets = [];
|
|
35
|
+
this.loading$ = new BehaviorSubject(false);
|
|
36
|
+
this.bindSubscriber();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @return {?}
|
|
40
|
+
*/
|
|
41
|
+
ngOnInit() {
|
|
42
|
+
this.assetService
|
|
43
|
+
.getFolderList()
|
|
44
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
45
|
+
.subscribe((/**
|
|
46
|
+
* @param {?} folders
|
|
47
|
+
* @return {?}
|
|
48
|
+
*/
|
|
49
|
+
(folders) => {
|
|
50
|
+
this.currentFolder = folders;
|
|
51
|
+
this.changeDetectorRef.detectChanges();
|
|
52
|
+
}));
|
|
53
|
+
this.assetService
|
|
54
|
+
.getAssetList()
|
|
55
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
56
|
+
.subscribe((/**
|
|
57
|
+
* @param {?} assets
|
|
58
|
+
* @return {?}
|
|
59
|
+
*/
|
|
60
|
+
(assets) => {
|
|
61
|
+
this.assets = assets;
|
|
62
|
+
this.changeDetectorRef.detectChanges();
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @private
|
|
67
|
+
* @return {?}
|
|
68
|
+
*/
|
|
69
|
+
bindSubscriber() {
|
|
70
|
+
select((/**
|
|
71
|
+
* @param {?} state
|
|
72
|
+
* @return {?}
|
|
73
|
+
*/
|
|
74
|
+
(state) => state.globalLoading))
|
|
75
|
+
.pipe(takeUntil(this.unsubscribe$), switchMap((/**
|
|
76
|
+
* @param {?} res
|
|
77
|
+
* @return {?}
|
|
78
|
+
*/
|
|
79
|
+
(res) => of(res))))
|
|
80
|
+
.subscribe((/**
|
|
81
|
+
* @param {?} globalLoading
|
|
82
|
+
* @return {?}
|
|
83
|
+
*/
|
|
84
|
+
(globalLoading) => {
|
|
85
|
+
this.loading$.next(globalLoading);
|
|
86
|
+
}));
|
|
87
|
+
select((/**
|
|
88
|
+
* @param {?} state
|
|
89
|
+
* @return {?}
|
|
90
|
+
*/
|
|
91
|
+
(state) => state.selectedAssets))
|
|
92
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
93
|
+
.subscribe((/**
|
|
94
|
+
* @param {?} selectedAssets
|
|
95
|
+
* @return {?}
|
|
96
|
+
*/
|
|
97
|
+
(selectedAssets) => {
|
|
98
|
+
if (selectedAssets) {
|
|
99
|
+
this.selectedAssets = selectedAssets;
|
|
100
|
+
}
|
|
101
|
+
}));
|
|
102
|
+
select((/**
|
|
103
|
+
* @param {?} state
|
|
104
|
+
* @return {?}
|
|
105
|
+
*/
|
|
106
|
+
(state) => state.currentFolderId))
|
|
107
|
+
.pipe(takeUntil(this.unsubscribe$), switchMap((/**
|
|
108
|
+
* @param {?} res
|
|
109
|
+
* @return {?}
|
|
110
|
+
*/
|
|
111
|
+
(res) => of(res))))
|
|
112
|
+
.subscribe((/**
|
|
113
|
+
* @param {?} currentFolderId
|
|
114
|
+
* @return {?}
|
|
115
|
+
*/
|
|
116
|
+
(currentFolderId) => {
|
|
117
|
+
if (currentFolderId) {
|
|
118
|
+
this.assetService.pageIndex = 0;
|
|
119
|
+
this.fetchNodeDetails(currentFolderId);
|
|
120
|
+
}
|
|
121
|
+
}));
|
|
122
|
+
select((/**
|
|
123
|
+
* @param {?} state
|
|
124
|
+
* @return {?}
|
|
125
|
+
*/
|
|
126
|
+
(state) => state.reloadCurrentFolder))
|
|
127
|
+
.pipe(takeUntil(this.unsubscribe$), switchMap((/**
|
|
128
|
+
* @param {?} res
|
|
129
|
+
* @return {?}
|
|
130
|
+
*/
|
|
131
|
+
(res) => of(res))))
|
|
132
|
+
.subscribe((/**
|
|
133
|
+
* @return {?}
|
|
134
|
+
*/
|
|
135
|
+
() => {
|
|
136
|
+
if (!this.currentFolder) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
this.fetchFolder(this.currentFolder.AssetId);
|
|
140
|
+
}));
|
|
141
|
+
select((/**
|
|
142
|
+
* @param {?} state
|
|
143
|
+
* @return {?}
|
|
144
|
+
*/
|
|
145
|
+
(state) => state.reloadCurrentNode))
|
|
146
|
+
.pipe(takeUntil(this.unsubscribe$), switchMap((/**
|
|
147
|
+
* @param {?} res
|
|
148
|
+
* @return {?}
|
|
149
|
+
*/
|
|
150
|
+
(res) => of(res))))
|
|
151
|
+
.subscribe((/**
|
|
152
|
+
* @return {?}
|
|
153
|
+
*/
|
|
154
|
+
() => {
|
|
155
|
+
if (!this.currentFolder) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
this.assetService.pageIndex = 0;
|
|
159
|
+
this.fetchNodeDetails(this.currentFolder.AssetId);
|
|
160
|
+
}));
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* @return {?}
|
|
164
|
+
*/
|
|
165
|
+
openUploadDialog() {
|
|
166
|
+
/** @type {?} */
|
|
167
|
+
const dialogRef = this.dialog.open(UploadDialogComponent, {
|
|
168
|
+
data: {
|
|
169
|
+
currentAssetId: this.currentFolder.AssetId,
|
|
170
|
+
fileType: this.assetService.dialogConfig.allowedType,
|
|
171
|
+
},
|
|
172
|
+
panelClass: 'lib-dialog--medium',
|
|
173
|
+
});
|
|
174
|
+
dialogRef.afterClosed().subscribe((/**
|
|
175
|
+
* @param {?} res
|
|
176
|
+
* @return {?}
|
|
177
|
+
*/
|
|
178
|
+
(res) => {
|
|
179
|
+
if (res) {
|
|
180
|
+
this.svc.dispatch({
|
|
181
|
+
type: ActionTypes.RELOAD_CURRENT_ASSETS,
|
|
182
|
+
});
|
|
183
|
+
this.svc.dispatch({
|
|
184
|
+
type: ActionTypes.RELOAD_CURRENT_FOLDER,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* @return {?}
|
|
191
|
+
*/
|
|
192
|
+
addFolder() {
|
|
193
|
+
/** @type {?} */
|
|
194
|
+
const dialogRef = this.dialog.open(AddFolderDialogComponent, {
|
|
195
|
+
data: {
|
|
196
|
+
currentAssetId: this.currentFolder.AssetId,
|
|
197
|
+
},
|
|
198
|
+
panelClass: 'lib-dialog--small',
|
|
199
|
+
});
|
|
200
|
+
dialogRef.afterClosed().subscribe((/**
|
|
201
|
+
* @param {?} res
|
|
202
|
+
* @return {?}
|
|
203
|
+
*/
|
|
204
|
+
(res) => {
|
|
205
|
+
if (res) {
|
|
206
|
+
this.svc.dispatch({
|
|
207
|
+
type: ActionTypes.RELOAD_CURRENT_FOLDER,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* @return {?}
|
|
214
|
+
*/
|
|
215
|
+
deleteAssets() {
|
|
216
|
+
/** @type {?} */
|
|
217
|
+
const ids = this.selectedAssets.map((/**
|
|
218
|
+
* @param {?} asset
|
|
219
|
+
* @return {?}
|
|
220
|
+
*/
|
|
221
|
+
(asset) => asset.AssetId));
|
|
222
|
+
/** @type {?} */
|
|
223
|
+
const dialogRef = this.dialog.open(DeleteDialogComponent, {
|
|
224
|
+
data: {
|
|
225
|
+
type: 'files',
|
|
226
|
+
ids,
|
|
227
|
+
},
|
|
228
|
+
panelClass: 'lib-dialog--small',
|
|
229
|
+
autoFocus: false,
|
|
230
|
+
});
|
|
231
|
+
dialogRef.afterClosed().subscribe((/**
|
|
232
|
+
* @param {?} res
|
|
233
|
+
* @return {?}
|
|
234
|
+
*/
|
|
235
|
+
(res) => {
|
|
236
|
+
if (res) {
|
|
237
|
+
this.svc.dispatch({
|
|
238
|
+
type: ActionTypes.RELOAD_CURRENT_ASSETS,
|
|
239
|
+
});
|
|
240
|
+
this.svc.dispatch({
|
|
241
|
+
type: ActionTypes.RELOAD_CURRENT_FOLDER,
|
|
242
|
+
});
|
|
243
|
+
this.svc.dispatch({
|
|
244
|
+
type: ActionTypes.SET_SELECTED_ASSETS,
|
|
245
|
+
payload: [],
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}));
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* @private
|
|
252
|
+
* @param {?} id
|
|
253
|
+
* @return {?}
|
|
254
|
+
*/
|
|
255
|
+
fetchFolder(id) {
|
|
256
|
+
this.svc.dispatch({
|
|
257
|
+
type: ActionTypes.SET_GLOBAL_LOADING,
|
|
258
|
+
payload: true,
|
|
259
|
+
});
|
|
260
|
+
this.assetService
|
|
261
|
+
.getChildrenFolders({ assetId: id })
|
|
262
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
263
|
+
.subscribe((/**
|
|
264
|
+
* @param {?} res
|
|
265
|
+
* @return {?}
|
|
266
|
+
*/
|
|
267
|
+
(res) => {
|
|
268
|
+
this.assetService.setFolderList(res.Data, res.Meta.Total);
|
|
269
|
+
if (res.Data && res.Data.Children) {
|
|
270
|
+
res.Data.Children.forEach((/**
|
|
271
|
+
* @param {?} node
|
|
272
|
+
* @return {?}
|
|
273
|
+
*/
|
|
274
|
+
(node) => this.nodeTreeService.addNode(node, this.currentFolder.AssetId)));
|
|
275
|
+
}
|
|
276
|
+
}))
|
|
277
|
+
.add((/**
|
|
278
|
+
* @return {?}
|
|
279
|
+
*/
|
|
280
|
+
() => {
|
|
281
|
+
this.svc.dispatch({
|
|
282
|
+
type: ActionTypes.SET_GLOBAL_LOADING,
|
|
283
|
+
payload: false,
|
|
284
|
+
});
|
|
285
|
+
}));
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* @private
|
|
289
|
+
* @param {?} id
|
|
290
|
+
* @return {?}
|
|
291
|
+
*/
|
|
292
|
+
fetchNodeDetails(id) {
|
|
293
|
+
this.svc.dispatch({
|
|
294
|
+
type: ActionTypes.SET_GLOBAL_LOADING,
|
|
295
|
+
payload: true,
|
|
296
|
+
});
|
|
297
|
+
combineLatest([
|
|
298
|
+
this.assetService.getChildrenFolders({ assetId: id }),
|
|
299
|
+
this.assetService.getChildrenAssets({
|
|
300
|
+
assetId: id,
|
|
301
|
+
}),
|
|
302
|
+
])
|
|
303
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
304
|
+
.subscribe((/**
|
|
305
|
+
* @param {?} __0
|
|
306
|
+
* @return {?}
|
|
307
|
+
*/
|
|
308
|
+
([folders, assets]) => {
|
|
309
|
+
this.assetService.setFolderList(folders.Data, folders.Meta.Total);
|
|
310
|
+
this.assetService.setAssetList(assets.Data.Children, assets.Meta);
|
|
311
|
+
if (folders.Data && folders.Data.Children) {
|
|
312
|
+
folders.Data.Children.forEach((/**
|
|
313
|
+
* @param {?} node
|
|
314
|
+
* @return {?}
|
|
315
|
+
*/
|
|
316
|
+
(node) => this.nodeTreeService.addNode(node, this.currentFolder.AssetId)));
|
|
317
|
+
}
|
|
318
|
+
}))
|
|
319
|
+
.add((/**
|
|
320
|
+
* @return {?}
|
|
321
|
+
*/
|
|
322
|
+
() => {
|
|
323
|
+
this.svc.dispatch({
|
|
324
|
+
type: ActionTypes.SET_GLOBAL_LOADING,
|
|
325
|
+
payload: false,
|
|
326
|
+
});
|
|
327
|
+
}));
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* @return {?}
|
|
331
|
+
*/
|
|
332
|
+
get noResults() {
|
|
333
|
+
return (this.assetService.keyword &&
|
|
334
|
+
!this.currentFolder.Children.length &&
|
|
335
|
+
!this.assets.length);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* @return {?}
|
|
339
|
+
*/
|
|
340
|
+
ngOnDestroy() {
|
|
341
|
+
this.svc.dispatch({
|
|
342
|
+
type: ActionTypes.SET_CURRENT_FOLDER_ID,
|
|
343
|
+
payload: null,
|
|
344
|
+
});
|
|
345
|
+
this.svc.dispatch({
|
|
346
|
+
type: ActionTypes.SET_SELECTED_ASSETS,
|
|
347
|
+
payload: [],
|
|
348
|
+
});
|
|
349
|
+
this.unsubscribe$.next();
|
|
350
|
+
this.unsubscribe$.complete();
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
NodeDetailsComponent.decorators = [
|
|
354
|
+
{ type: Component, args: [{
|
|
355
|
+
selector: 'lib-node-details',
|
|
356
|
+
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>",
|
|
357
|
+
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}"]
|
|
358
|
+
}] }
|
|
359
|
+
];
|
|
360
|
+
/** @nocollapse */
|
|
361
|
+
NodeDetailsComponent.ctorParameters = () => [
|
|
362
|
+
{ type: MatDialog },
|
|
363
|
+
{ type: AssetService },
|
|
364
|
+
{ type: NodeTreeService },
|
|
365
|
+
{ type: AssetManagementService },
|
|
366
|
+
{ type: ChangeDetectorRef }
|
|
367
|
+
];
|
|
368
|
+
if (false) {
|
|
369
|
+
/**
|
|
370
|
+
* @type {?}
|
|
371
|
+
* @private
|
|
372
|
+
*/
|
|
373
|
+
NodeDetailsComponent.prototype.unsubscribe$;
|
|
374
|
+
/** @type {?} */
|
|
375
|
+
NodeDetailsComponent.prototype.selectedAssets;
|
|
376
|
+
/** @type {?} */
|
|
377
|
+
NodeDetailsComponent.prototype.loading$;
|
|
378
|
+
/** @type {?} */
|
|
379
|
+
NodeDetailsComponent.prototype.currentFolder;
|
|
380
|
+
/** @type {?} */
|
|
381
|
+
NodeDetailsComponent.prototype.assets;
|
|
382
|
+
/** @type {?} */
|
|
383
|
+
NodeDetailsComponent.prototype.dialog;
|
|
384
|
+
/** @type {?} */
|
|
385
|
+
NodeDetailsComponent.prototype.assetService;
|
|
386
|
+
/**
|
|
387
|
+
* @type {?}
|
|
388
|
+
* @private
|
|
389
|
+
*/
|
|
390
|
+
NodeDetailsComponent.prototype.nodeTreeService;
|
|
391
|
+
/**
|
|
392
|
+
* @type {?}
|
|
393
|
+
* @private
|
|
394
|
+
*/
|
|
395
|
+
NodeDetailsComponent.prototype.svc;
|
|
396
|
+
/**
|
|
397
|
+
* @type {?}
|
|
398
|
+
* @private
|
|
399
|
+
*/
|
|
400
|
+
NodeDetailsComponent.prototype.changeDetectorRef;
|
|
401
|
+
}
|
|
402
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bycy1way9hc3NldC1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcGFydGlhbC9ub2RlLWRldGFpbHMvbm9kZS1kZXRhaWxzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDNUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFPakYsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7Ozs7SUFDL0IsWUFDUyxNQUFpQixFQUNqQixZQUEwQixFQUN6QixlQUFnQyxFQUNoQyxHQUEyQixFQUMzQixpQkFBb0M7UUFKckMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUN6QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsUUFBRyxHQUFILEdBQUcsQ0FBd0I7UUFDM0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUt0QyxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFcEMsbUJBQWMsR0FBc0IsRUFBRSxDQUFDO1FBQ3ZDLGFBQVEsR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFOckUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7Ozs7SUFTRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVk7YUFDZCxhQUFhLEVBQUU7YUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsQyxTQUFTOzs7O1FBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztZQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekMsQ0FBQyxFQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsWUFBWTthQUNkLFlBQVksRUFBRTthQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2xDLFNBQVM7Ozs7UUFBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7Ozs7O0lBRU8sY0FBYztRQUNwQixNQUFNOzs7O1FBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUM7YUFDbkMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzVCLFNBQVM7Ozs7UUFBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQzVCO2FBQ0EsU0FBUzs7OztRQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxFQUFDLENBQUM7UUFFTCxNQUFNOzs7O1FBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUM7YUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEMsU0FBUzs7OztRQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO2FBQ3RDO1FBQ0gsQ0FBQyxFQUFDLENBQUM7UUFFTCxNQUFNOzs7O1FBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUM7YUFDckMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzVCLFNBQVM7Ozs7UUFBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQzVCO2FBQ0EsU0FBUzs7OztRQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxFQUFDLENBQUM7UUFFTCxNQUFNOzs7O1FBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBQzthQUN6QyxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDNUIsU0FBUzs7OztRQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FDNUI7YUFDQSxTQUFTOzs7UUFBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdkIsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLENBQUMsRUFBQyxDQUFDO1FBRUwsTUFBTTs7OztRQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUM7YUFDdkMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzVCLFNBQVM7Ozs7UUFBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQzVCO2FBQ0EsU0FBUzs7O1FBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3ZCLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7Ozs7SUFFTSxnQkFBZ0I7O2NBQ2YsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3hELElBQUksRUFBRTtnQkFDSixjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPO2dCQUMxQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVzthQUNyRDtZQUNELFVBQVUsRUFBRSxvQkFBb0I7U0FDakMsQ0FBQztRQUVGLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTOzs7O1FBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN4QyxJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztvQkFDaEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxxQkFBcUI7aUJBQ3hDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztvQkFDaEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxxQkFBcUI7aUJBQ3hDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7O0lBRUQsU0FBUzs7Y0FDRCxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDM0QsSUFBSSxFQUFFO2dCQUNKLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU87YUFDM0M7WUFDRCxVQUFVLEVBQUUsbUJBQW1CO1NBQ2hDLENBQUM7UUFFRixTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUzs7OztRQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7b0JBQ2hCLElBQUksRUFBRSxXQUFXLENBQUMscUJBQXFCO2lCQUN4QyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7OztJQUVELFlBQVk7O2NBQ0osR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRzs7OztRQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFDOztjQUN2RCxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDeEQsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxPQUFPO2dCQUNiLEdBQUc7YUFDSjtZQUNELFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztRQUVGLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTOzs7O1FBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN4QyxJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztvQkFDaEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxxQkFBcUI7aUJBQ3hDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztvQkFDaEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxxQkFBcUI7aUJBQ3hDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztvQkFDaEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxtQkFBbUI7b0JBQ3JDLE9BQU8sRUFBRSxFQUFFO2lCQUNaLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7SUFFTyxXQUFXLENBQUMsRUFBVTtRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNoQixJQUFJLEVBQUUsV0FBVyxDQUFDLGtCQUFrQjtZQUNwQyxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZO2FBQ2Qsa0JBQWtCLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEMsU0FBUzs7OztRQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFELElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTzs7OztnQkFBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUMvRCxDQUFDO2FBQ0g7UUFDSCxDQUFDLEVBQUM7YUFDRCxHQUFHOzs7UUFBQyxHQUFHLEVBQUU7WUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDaEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxrQkFBa0I7Z0JBQ3BDLE9BQU8sRUFBRSxLQUFLO2FBQ2YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7Ozs7SUFFTyxnQkFBZ0IsQ0FBQyxFQUFVO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ2hCLElBQUksRUFBRSxXQUFXLENBQUMsa0JBQWtCO1lBQ3BDLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsYUFBYSxDQUFDO1lBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO2dCQUNsQyxPQUFPLEVBQUUsRUFBRTthQUNaLENBQUM7U0FDSCxDQUFDO2FBQ0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEMsU0FBUzs7OztRQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xFLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDekMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTzs7OztnQkFBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUMvRCxDQUFDO2FBQ0g7UUFDSCxDQUFDLEVBQUM7YUFDRCxHQUFHOzs7UUFBQyxHQUFHLEVBQUU7WUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDaEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxrQkFBa0I7Z0JBQ3BDLE9BQU8sRUFBRSxLQUFLO2FBQ2YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7O0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTztZQUN6QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDbkMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDcEIsQ0FBQztJQUNKLENBQUM7Ozs7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDaEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxxQkFBcUI7WUFDdkMsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNoQixJQUFJLEVBQUUsV0FBVyxDQUFDLG1CQUFtQjtZQUNyQyxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDOzs7WUExT0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLG9qRUFBNEM7O2FBRTdDOzs7O1lBbkJRLFNBQVM7WUFRVCxZQUFZO1lBQ1osZUFBZTtZQUhmLHNCQUFzQjtZQVB0QixpQkFBaUI7Ozs7Ozs7SUFnQ3hCLDRDQUEyQzs7SUFFM0MsOENBQThDOztJQUM5Qyx3Q0FBdUU7O0lBQ3ZFLDZDQUFzQzs7SUFDdEMsc0NBQTRCOztJQWQxQixzQ0FBd0I7O0lBQ3hCLDRDQUFpQzs7Ozs7SUFDakMsK0NBQXdDOzs7OztJQUN4QyxtQ0FBbUM7Ozs7O0lBQ25DLGlEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvQmVoYXZpb3JTdWJqZWN0JztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzL2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcy9pbnRlcm5hbC9TdWJqZWN0JztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXNzZXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Fzc2V0LW1hbmFnZW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBc3NldE1vZGVsLCBGb2xkZXJUcmVlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXNzZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXNzZXQuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlVHJlZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub2RlLXRyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBBY3Rpb25UeXBlcywgc2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUnO1xuaW1wb3J0IHsgQWRkRm9sZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vYWRkLWZvbGRlci1kaWFsb2cvYWRkLWZvbGRlci1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IERlbGV0ZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2RlbGV0ZS1kaWFsb2cvZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBsb2FkRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBsb2FkLWRpYWxvZy91cGxvYWQtZGlhbG9nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1ub2RlLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHVibGljIGFzc2V0U2VydmljZTogQXNzZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm9kZVRyZWVTZXJ2aWNlOiBOb2RlVHJlZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdmM6IEFzc2V0TWFuYWdlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5iaW5kU3Vic2NyaWJlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHB1YmxpYyBzZWxlY3RlZEFzc2V0czogQXJyYXk8QXNzZXRNb2RlbD4gPSBbXTtcbiAgcHVibGljIGxvYWRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHVibGljIGN1cnJlbnRGb2xkZXI6IEZvbGRlclRyZWVNb2RlbDtcbiAgcHVibGljIGFzc2V0czogQXNzZXRNb2RlbFtdO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYXNzZXRTZXJ2aWNlXG4gICAgICAuZ2V0Rm9sZGVyTGlzdCgpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZSgoZm9sZGVycykgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXIgPSBmb2xkZXJzO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYXNzZXRTZXJ2aWNlXG4gICAgICAuZ2V0QXNzZXRMaXN0KClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChhc3NldHMpID0+IHtcbiAgICAgICAgdGhpcy5hc3NldHMgPSBhc3NldHM7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJpbmRTdWJzY3JpYmVyKCkge1xuICAgIHNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLmdsb2JhbExvYWRpbmcpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgICAgc3dpdGNoTWFwKChyZXMpID0+IG9mKHJlcykpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChnbG9iYWxMb2FkaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dChnbG9iYWxMb2FkaW5nKTtcbiAgICAgIH0pO1xuXG4gICAgc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUuc2VsZWN0ZWRBc3NldHMpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWRBc3NldHMpID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkQXNzZXRzKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFzc2V0cyA9IHNlbGVjdGVkQXNzZXRzO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLmN1cnJlbnRGb2xkZXJJZClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHJlcykgPT4gb2YocmVzKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbnRGb2xkZXJJZCkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgdGhpcy5hc3NldFNlcnZpY2UucGFnZUluZGV4ID0gMDtcbiAgICAgICAgICB0aGlzLmZldGNoTm9kZURldGFpbHMoY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBzZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZS5yZWxvYWRDdXJyZW50Rm9sZGVyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgIHN3aXRjaE1hcCgocmVzKSA9PiBvZihyZXMpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50Rm9sZGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmV0Y2hGb2xkZXIodGhpcy5jdXJyZW50Rm9sZGVyLkFzc2V0SWQpO1xuICAgICAgfSk7XG5cbiAgICBzZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZS5yZWxvYWRDdXJyZW50Tm9kZSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHJlcykgPT4gb2YocmVzKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudEZvbGRlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2V0U2VydmljZS5wYWdlSW5kZXggPSAwO1xuICAgICAgICB0aGlzLmZldGNoTm9kZURldGFpbHModGhpcy5jdXJyZW50Rm9sZGVyLkFzc2V0SWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3BlblVwbG9hZERpYWxvZygpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFVwbG9hZERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBjdXJyZW50QXNzZXRJZDogdGhpcy5jdXJyZW50Rm9sZGVyLkFzc2V0SWQsXG4gICAgICAgIGZpbGVUeXBlOiB0aGlzLmFzc2V0U2VydmljZS5kaWFsb2dDb25maWcuYWxsb3dlZFR5cGUsXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2xpYi1kaWFsb2ctLW1lZGl1bScsXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVMT0FEX0NVUlJFTlRfQVNTRVRTLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTE9BRF9DVVJSRU5UX0ZPTERFUixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhZGRGb2xkZXIoKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBZGRGb2xkZXJEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY3VycmVudEFzc2V0SWQ6IHRoaXMuY3VycmVudEZvbGRlci5Bc3NldElkLFxuICAgICAgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdsaWItZGlhbG9nLS1zbWFsbCcsXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVMT0FEX0NVUlJFTlRfRk9MREVSLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZUFzc2V0cygpIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLnNlbGVjdGVkQXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0LkFzc2V0SWQpO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRGVsZXRlRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHR5cGU6ICdmaWxlcycsXG4gICAgICAgIGlkcyxcbiAgICAgIH0sXG4gICAgICBwYW5lbENsYXNzOiAnbGliLWRpYWxvZy0tc21hbGwnLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRUxPQURfQ1VSUkVOVF9BU1NFVFMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVMT0FEX0NVUlJFTlRfRk9MREVSLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9BU1NFVFMsXG4gICAgICAgICAgcGF5bG9hZDogW10sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaEZvbGRlcihpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0dMT0JBTF9MT0FESU5HLFxuICAgICAgcGF5bG9hZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuYXNzZXRTZXJ2aWNlXG4gICAgICAuZ2V0Q2hpbGRyZW5Gb2xkZXJzKHsgYXNzZXRJZDogaWQgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5hc3NldFNlcnZpY2Uuc2V0Rm9sZGVyTGlzdChyZXMuRGF0YSwgcmVzLk1ldGEuVG90YWwpO1xuICAgICAgICBpZiAocmVzLkRhdGEgJiYgcmVzLkRhdGEuQ2hpbGRyZW4pIHtcbiAgICAgICAgICByZXMuRGF0YS5DaGlsZHJlbi5mb3JFYWNoKChub2RlKSA9PlxuICAgICAgICAgICAgdGhpcy5ub2RlVHJlZVNlcnZpY2UuYWRkTm9kZShub2RlLCB0aGlzLmN1cnJlbnRGb2xkZXIuQXNzZXRJZClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfR0xPQkFMX0xPQURJTkcsXG4gICAgICAgICAgcGF5bG9hZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoTm9kZURldGFpbHMoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuc3ZjLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9HTE9CQUxfTE9BRElORyxcbiAgICAgIHBheWxvYWQ6IHRydWUsXG4gICAgfSk7XG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFzc2V0U2VydmljZS5nZXRDaGlsZHJlbkZvbGRlcnMoeyBhc3NldElkOiBpZCB9KSxcbiAgICAgIHRoaXMuYXNzZXRTZXJ2aWNlLmdldENoaWxkcmVuQXNzZXRzKHtcbiAgICAgICAgYXNzZXRJZDogaWQsXG4gICAgICB9KSxcbiAgICBdKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtmb2xkZXJzLCBhc3NldHNdKSA9PiB7XG4gICAgICAgIHRoaXMuYXNzZXRTZXJ2aWNlLnNldEZvbGRlckxpc3QoZm9sZGVycy5EYXRhLCBmb2xkZXJzLk1ldGEuVG90YWwpO1xuICAgICAgICB0aGlzLmFzc2V0U2VydmljZS5zZXRBc3NldExpc3QoYXNzZXRzLkRhdGEuQ2hpbGRyZW4sIGFzc2V0cy5NZXRhKTtcbiAgICAgICAgaWYgKGZvbGRlcnMuRGF0YSAmJiBmb2xkZXJzLkRhdGEuQ2hpbGRyZW4pIHtcbiAgICAgICAgICBmb2xkZXJzLkRhdGEuQ2hpbGRyZW4uZm9yRWFjaCgobm9kZSkgPT5cbiAgICAgICAgICAgIHRoaXMubm9kZVRyZWVTZXJ2aWNlLmFkZE5vZGUobm9kZSwgdGhpcy5jdXJyZW50Rm9sZGVyLkFzc2V0SWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0dMT0JBTF9MT0FESU5HLFxuICAgICAgICAgIHBheWxvYWQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0IG5vUmVzdWx0cygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hc3NldFNlcnZpY2Uua2V5d29yZCAmJlxuICAgICAgIXRoaXMuY3VycmVudEZvbGRlci5DaGlsZHJlbi5sZW5ndGggJiZcbiAgICAgICF0aGlzLmFzc2V0cy5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdmMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0NVUlJFTlRfRk9MREVSX0lELFxuICAgICAgcGF5bG9hZDogbnVsbCxcbiAgICB9KTtcbiAgICB0aGlzLnN2Yy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfU0VMRUNURURfQVNTRVRTLFxuICAgICAgcGF5bG9hZDogW10sXG4gICAgfSk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
|