@rs-pk/asset-management 1.0.13 → 1.0.15

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 (30) hide show
  1. package/bundles/rs-pk-asset-management.umd.js +128 -159
  2. package/bundles/rs-pk-asset-management.umd.js.map +1 -1
  3. package/bundles/rs-pk-asset-management.umd.min.js +2 -2
  4. package/bundles/rs-pk-asset-management.umd.min.js.map +1 -1
  5. package/esm2015/lib/components/partial/add-folder-dialog/add-folder-dialog.component.js +6 -3
  6. package/esm2015/lib/components/partial/asset-dialog/asset-dialog.component.js +3 -2
  7. package/esm2015/lib/components/partial/asset-item/asset-item.component.js +3 -3
  8. package/esm2015/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.js +6 -3
  9. package/esm2015/lib/components/partial/file-item/file-item.component.js +57 -18
  10. package/esm2015/lib/components/partial/file-list/file-list.component.js +10 -9
  11. package/esm2015/lib/components/partial/upload-file/upload-file.component.js +1 -18
  12. package/esm2015/lib/services/upload-assets.service.js +30 -61
  13. package/esm5/lib/components/partial/add-folder-dialog/add-folder-dialog.component.js +6 -3
  14. package/esm5/lib/components/partial/asset-dialog/asset-dialog.component.js +3 -2
  15. package/esm5/lib/components/partial/asset-item/asset-item.component.js +3 -3
  16. package/esm5/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.js +6 -3
  17. package/esm5/lib/components/partial/file-item/file-item.component.js +71 -22
  18. package/esm5/lib/components/partial/file-list/file-list.component.js +13 -13
  19. package/esm5/lib/components/partial/upload-file/upload-file.component.js +1 -29
  20. package/esm5/lib/services/upload-assets.service.js +33 -92
  21. package/fesm2015/rs-pk-asset-management.js +108 -109
  22. package/fesm2015/rs-pk-asset-management.js.map +1 -1
  23. package/fesm5/rs-pk-asset-management.js +129 -160
  24. package/fesm5/rs-pk-asset-management.js.map +1 -1
  25. package/lib/components/partial/file-item/file-item.component.d.ts +7 -3
  26. package/lib/components/partial/file-list/file-list.component.d.ts +5 -2
  27. package/lib/components/partial/upload-file/upload-file.component.d.ts +0 -2
  28. package/lib/services/upload-assets.service.d.ts +5 -15
  29. package/package.json +1 -1
  30. package/rs-pk-asset-management.metadata.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@rs-pk/asset-management/lib/models/asset.model.ts","ng://@rs-pk/asset-management/lib/models/node-tree.model.ts","ng://@rs-pk/asset-management/lib/models/file-type.enum.ts","ng://@rs-pk/asset-management/lib/models/sort.enum.ts","ng://@rs-pk/asset-management/lib/services/env-config.service.ts","ng://@rs-pk/asset-management/lib/services/base.service.ts","ng://@rs-pk/asset-management/lib/services/asset.service.ts","ng://@rs-pk/asset-management/lib/asset-management.service.ts","ng://@rs-pk/asset-management/lib/store/actions.action.ts","ng://@rs-pk/asset-management/lib/store/reducer.ts","ng://@rs-pk/asset-management/lib/services/node-tree.service.ts","ng://@rs-pk/asset-management/lib/services/upload-assets.service.ts","ng://@rs-pk/asset-management/lib/services/file.service.ts","ng://@rs-pk/asset-management/lib/components/partial/asset-management-dialog/asset-management-dialog.component.ts","ng://@rs-pk/asset-management/lib/asset-management.component.ts","ng://@rs-pk/asset-management/lib/directives/dialogTrigger.directive.ts","ng://@rs-pk/asset-management/lib/directives/dnd.directive.ts","ng://@rs-pk/asset-management/lib/directives/directives.module.ts","ng://@rs-pk/asset-management/lib/components/ui/input-file/input-file.component.ts","ng://@rs-pk/asset-management/lib/components/ui/modal/modal.component.ts","ng://@rs-pk/asset-management/lib/contanst/data-image.ts","ng://@rs-pk/asset-management/lib/components/ui/search-not-found/search-not-found.component.ts","ng://@rs-pk/asset-management/lib/components/partial/file-item/file-item.component.ts","ng://@rs-pk/asset-management/lib/components/partial/file-list/file-list.component.ts","ng://@rs-pk/asset-management/lib/components/partial/upload-file/upload-file.component.ts","ng://@rs-pk/asset-management/lib/components/partial/add-folder-dialog/add-folder-dialog.component.ts","ng://@rs-pk/asset-management/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.ts","ng://@rs-pk/asset-management/lib/components/partial/delete-dialog/delete-dialog.component.ts","ng://@rs-pk/asset-management/lib/components/partial/upload-dialog/upload-dialog.component.ts","ng://@rs-pk/asset-management/lib/components/partial/folder-item/folder-item.component.ts","ng://@rs-pk/asset-management/lib/components/partial/folder-list/folder-list.component.ts","ng://@rs-pk/asset-management/lib/components/partial/asset-list/asset-list.component.ts","ng://@rs-pk/asset-management/lib/pipes/file-size.pipe.ts","ng://@rs-pk/asset-management/lib/components/partial/asset-dialog/asset-dialog.component.ts","ng://@rs-pk/asset-management/lib/components/partial/asset-item/asset-item.component.ts","ng://@rs-pk/asset-management/lib/datasources/node-tree.datasource.ts","ng://@rs-pk/asset-management/lib/components/partial/node-tree/node-tree.component.ts","ng://@rs-pk/asset-management/lib/components/partial/breadcrumb/breadcrumb.component.ts","ng://@rs-pk/asset-management/lib/components/partial/search-box/search-box.component.ts","ng://@rs-pk/asset-management/lib/components/partial/sort-items/sort-items.component.ts","ng://@rs-pk/asset-management/lib/components/partial/asset-wrapper/asset-wrapper.component.ts","ng://@rs-pk/asset-management/lib/components/partial/node-details/node-details.component.ts","ng://@rs-pk/asset-management/lib/components/ui/drag-to-resize/drag-to-resize.component.ts","ng://@rs-pk/asset-management/lib/configs/admin.config.ts","ng://@rs-pk/asset-management/lib/pipes/datetime.pipe.ts","ng://@rs-pk/asset-management/lib/asset-management.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__values","o","m","__read","r","ar","error","__spread","concat","AssetModel","_super","FolderTreeModel","tslib_1.__extends","DialogConfig","item","level","expandable","isLoading","IMAGE","DOCUMENT","NAME","CREATED_DATE","MODIFIED_DATE","DESC","ASC","AM_CONFIG","InjectionToken","BaseHttpClient","_env","handler","_this","request","first","url","options","requestHeader","headers","Injectable","Inject","args","HttpHandler","HttpClient","AssetService","dialog","_api","folderList$","BehaviorSubject","assetList$","openDialog$","dialogConfig","baseUrl","asset2Url","initOptionFiles","keyword","pageSize","pageIndex","folderTotal","fileTotal","sortBy","SortFilesBy","sortOrder","TypeSort","resetData","setAssetList","setFolderList","resetAsset","getFolderList","asObservable","folders","getAssetList","assets","pagination","setPagination","setDialogOpenStatus","status","getDialogOpenStatus","Total","PageIndex","PageSize","getAssetById","assetId","get","getChildrenFolders","_a","_b","isFilter","params","HttpParams","set","allowedType","getChildrenAssets","toString","MatDialog","eventDispatcher","Subject","AssetManagementService","getDispatcher","_dispatcher","dispatch","action","providedIn","state","globalLoading","selectedAssets","deletedAssetId","currentFolder","currentFolderId","currentFolderHierarchy","reloadCurrentFolder","reloadCurrentAssets","reloadCurrentNode","store","select","mapFn","pipe","map","distinctUntilChanged","NodeTreeService","assetService","svc","storedData$","loading$","initialData$","defineProperty","getValue","values","fetchChildrenFolder","id","toPromise","Data","initialData","dispatchRootId","type","ActionTypes","payload","AssetId","rootFolder","initData","Children","folder","DynamicFlatNode","isExpandable","getChildren","node","HaveChildren","addNode","asset","parentId","data","findIndex","ParentId","updateBreadcrumb","find","hierarchy","getFolderHierarchy","getAssetParent","parentHierarchy","parent","UploadAssetsService","files","namesMap","errorsMap","supportedSize","documentExtension","imageExtension","supportedTypes","messageErrors","size","ext","replace","errorObs$","getErrorObs","setErrorObs","newName","keys","newError","deleteFile","fileName","index","filter","_file","uploadMultipleAssets","parentAssetId","formData","FormData","append","files_1","tslib_1.__values","files_1_1","file","nameSplit","name","split","splice","originName","post","FileService","addFolder","folderName","updateFile","description","replaceAsset","ids","HttpHeaders","getFileDetail","AssetManagementDialogComponent","dialogRef","destroy$","ngOnInit","initDialogConfig","takeUntil","subscribe","limit","selectAssets","close","ngOnDestroy","complete","Component","selector","template","decorators","MAT_DIALOG_DATA","MatDialogRef","AssetManagementComponent","isDialog","assetChange","EventEmitter","dispatcher","ACTIONS.ActionTypes","console","warn","bindSubscriber","res","openAssetsDialog","onAssetsChange","emit","config","open","autoFocus","panelClass","afterClosed","providers","Input","Output","DialogTriggerDirective","onClick","event","Directive","HostListener","DndDirective","imageDropped","onDragOver","evt","preventDefault","stopPropagation","onDragLeave","ondrop","dataTransfer","from","DIRECTIVES","DirectivesModule","NgModule","declarations","imports","CommonModule","exports","InputFileComponent","multiple","fileChange","onFileChange","target","ModalComponent","customHeader","imagePdf","SearchNotFoundComponent","domSanitizer","base64Image","bypassSecurityTrustUrl","DomSanitizer","FileItemComponent","uploadAssetService","base64Pdf","checkError","fileRemove","dataFile","errors","setDataFile","join","indexOf","_c","reader","FileReader","readAsDataURL","onload","readerEvent","img","document","createElement","src","errorFiles","onChange","trim","onRemove","FileListComponent","uploadAssetsService","revalidate","newFiles","getFiles","setFiles","getElementById","onDelFile","onChangeName","onEmitError","UploadFileComponent","isDragging","onDragover","_event","onDragleave","AddFolderDialogComponent","fb","fileService","errorMessage","form","FormControl","formGroup","group","Validators","compose","required","controls","currentAssetId","_res","closeDialog","err","ResponseMessage","FormBuilder","EditFolderDialogComponent","toLowerCase","editFolder","DeleteDialogComponent","delete","handleAssetPaging","_err","log","UploadDialogComponent","changeDetectorRef","disabled","fileType","detectChanges","onValidate","hasError","uploadFiles","ChangeDetectorRef","FolderItemComponent","openFolder","renameFolder","OriginalFileName","deleteFolder","FolderListComponent","loading","unsubscribe$","AssetListComponent","ngOnChanges","changes","paginator","onSelectAsset","newSelectedAssets","switchMap","of","fetchChildrenAssets","pageChange","Meta","add","ViewChild","MatPaginator","static","FileSizePipe","units","transform","bytes","precision","isNaN","parseFloat","String","isFinite","unit","toFixed","Pipe","AssetDialogComponent","fileSize","linkDownload","isCopied","patternError","replaceMessage","isUpdating","FileTypeEnum","getAssetDetail","assetDetails","OriginalFileNameWithoutExtension","Description","acceptTypes","Extension","updateAsset","deleteAsset","validateFile","matchExt","extError","maxSize","match","onChangeDescription","copyText","content","selBox","style","position","left","top","opacity","appendChild","focus","execCommand","removeChild","timer","setTimeout","clearTimeout","AssetItemComponent","selectAsset","some","editAsset","NodeTreeDataSource","_treeControl","_database","dataChange","dataNodes","connect","collectionViewer","expansionModel","changed","change","added","removed","handleTreeControl","merge","viewChange","disconnect","forEach","toggleNode","slice","reverse","expand","newNode","nodes","child","count","reloadNode","NodeTreeComponent","nodeTreeService","isRoot","homeLoading","getLevel","hasChild","_nodeData","treeControl","FlatTreeControl","dataSource","rootId","handleReloadFolder","selectNode","backToHome","checked","getParent","currentLevel","currentNode","getNodeById","parent_1","updatedNode","BreadcrumbComponent","maximumShownLevel","navigateToFolder","SearchBoxComponent","folderId","bindingSubscriber","onSubmit","searchByName","clearSearch","combineLatest","SortItemsComponent","typeSort","sortList","onSortBy","toggleSortOrder","AssetWrapperComponent","header","nodeTreeMinWidth","nodeTreeMaxWidth","nodeTreeWidth","onResize","width","NodeDetailsComponent","fetchNodeDetails","fetchFolder","openUploadDialog","deleteAssets","DragToResizeComponent","resizeCompleted","grabber","oldX","minWidth","onMouseMove","resizer","clientX","onMouseUp","onMouseDown","offsetX","maxWidth","AdminConfig","date","dayMonth","dateTime","fullDateTime","dateTimeAM","apiDate","apiDateTime","apiDateTimeNoZ","apiDateMonthYear","urlParam","moment","moment_","LocalDateTimePipe","format","timeZone","utc0String","utc","toISOString","LocalDatePipe","SERVICES","COMPONENTS","ENTRY_COMPONENTS","AMFactory","AssetManagementModule","FormsModule","ReactiveFormsModule","MatDialogModule","MatButtonModule","MatInputModule","MatIconModule","MatTooltipModule","MatPaginatorModule","MatTableModule","MatProgressBarModule","MatMenuModule","MatCheckboxModule","MatTreeModule","MatSelectModule","MatProgressSpinnerModule","provide","APP_INITIALIZER","useFactory","deps","multi","entryComponents"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export interface IPageMeta {\n PageIndex: number;\n PageSize: number;\n PageCount: number;\n Total: number;\n}\n\nexport interface IChildrenAssetPayload {\n assetId?: string;\n isFolder?: string;\n keyword?: string;\n getAll?: string;\n pageSize?: string;\n pageIndex?: string;\n}\n\nexport interface IAssetByIdPayload {\n assetId?: string;\n isFilter?: boolean;\n}\n\nexport interface IInitialFolderTreeOptions {\n dispatchRootId?: boolean;\n}\n\nexport class AssetModel {\n AssetId?: string;\n OriginalFileName?: string;\n OriginalFileNameWithoutExtension?: string;\n Description?: string;\n FileName: string;\n Width: number;\n Height: number;\n CompanyId: string;\n FilePath: string;\n CloudUrl: string;\n UrlDetail?: string;\n UrlThumbnail?: string;\n Extension: string;\n FileType: string;\n Source: string;\n Size: number;\n CreatedBy: string;\n ModifiedBy: string;\n CreatedDate: string;\n ModifiedDate: string;\n BackgroudProcessingStatus: string;\n IsRoot: boolean;\n IsFolder: boolean;\n TotalFile: number;\n TotalFolder: number;\n HaveChildren: boolean;\n ParentId?: string;\n}\nexport class FolderTreeModel extends AssetModel {\n Children?: FolderTreeModel[];\n}\n\nexport class AssetResultModel {\n Data: FolderTreeModel;\n Meta?: IPageMeta;\n}\n\nexport class DialogConfig {\n limit: number;\n allowedType: string;\n}\n","import { FolderTreeModel } from './asset.model';\n\n/** Flat node with expandable and level information */\nexport class DynamicFlatNode {\n constructor(\n public item: FolderTreeModel,\n public level = 1,\n public expandable = false,\n public isLoading = false\n ) {}\n }\n","export enum FileTypeEnum {\n IMAGE = 'Image',\n DOCUMENT = 'Document',\n}\n","export enum SortFilesBy {\n NAME = 1,\n CREATED_DATE,\n MODIFIED_DATE,\n}\n\nexport enum TypeSort {\n DESC = 1,\n ASC,\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\n\nexport interface AMConfig {\n asset2Url: string;\n requestHeader?: HttpHeaders;\n}\n\nexport const AM_CONFIG = new InjectionToken<AMConfig>(\n 'asset.man.config.angular'\n);\n","import { HttpClient, HttpHandler, HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AM_CONFIG } from './env-config.service';\n\nexport type HttpObserve = 'body' | 'events' | 'response';\n\n@Injectable()\nexport class BaseHttpClient extends HttpClient {\n\tconstructor(\n\t\t@Inject(AM_CONFIG) private _env,\n\t\thandler: HttpHandler) {\n\t\tsuper(handler);\n\t}\n\n\trequest(\n\t\tfirst: string | HttpRequest<any>,\n\t\turl?: string,\n\t\toptions: {\n\t\t\tbody?: any;\n\t\t\theaders?: HttpHeaders | { [header: string]: string | string[] };\n\t\t\tobserve?: HttpObserve;\n\t\t\tparams?: HttpParams | { [param: string]: string | string[] };\n\t\t\treportProgress?: boolean;\n\t\t\tresponseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n\t\t\twithCredentials?: boolean;\n\t\t} = {}\n\t): Observable<any> {\n\t\tconst { requestHeader } = this._env;\n\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tif (requestHeader) {\n\t\t\toptions.headers = requestHeader;\n\t\t}\n\n\t\treturn super.request(first as string, url, options as any);\n\t}\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport {\n AssetModel,\n AssetResultModel,\n DialogConfig,\n FolderTreeModel,\n IAssetByIdPayload,\n IChildrenAssetPayload,\n SortFilesBy,\n TypeSort,\n} from '../models';\nimport { BaseHttpClient } from './base.service';\nimport { AM_CONFIG } from './env-config.service';\n\n@Injectable()\nexport class AssetService {\n private folderList$: BehaviorSubject<FolderTreeModel> = new BehaviorSubject(\n null\n );\n private assetList$: BehaviorSubject<AssetModel[]> = new BehaviorSubject(null);\n private openDialog$: BehaviorSubject<boolean> = new BehaviorSubject(null);\n public keyword: string;\n public pageSize: number;\n public pageIndex: number;\n public folderTotal: number;\n public fileTotal: number;\n public sortBy: SortFilesBy;\n public sortOrder: TypeSort;\n public dialogConfig: DialogConfig = new DialogConfig();\n private baseUrl: string;\n\n constructor(\n @Inject(AM_CONFIG) private _env,\n public dialog: MatDialog,\n private _api: BaseHttpClient\n ) {\n this.baseUrl = this._env.asset2Url;\n this.initOptionFiles();\n }\n\n private initOptionFiles() {\n this.keyword = '';\n this.pageSize = 12;\n this.pageIndex = 0;\n this.folderTotal = 0;\n this.fileTotal = 0;\n this.sortBy = SortFilesBy.MODIFIED_DATE;\n this.sortOrder = TypeSort.DESC;\n }\n\n private resetData() {\n this.setAssetList(null);\n this.setFolderList(null);\n }\n\n resetAsset() {\n this.initOptionFiles();\n this.resetData();\n }\n\n getFolderList(): Observable<FolderTreeModel> {\n return this.folderList$.asObservable();\n }\n\n setFolderList(folders: FolderTreeModel, folderTotal?: number) {\n this.folderTotal = folderTotal || 0;\n this.folderList$.next(folders);\n }\n\n getAssetList(): Observable<AssetModel[]> {\n return this.assetList$.asObservable();\n }\n\n setAssetList(assets: AssetModel[], pagination?: any) {\n this.setPagination(pagination);\n this.assetList$.next(assets);\n }\n\n setDialogOpenStatus(status: boolean): void {\n this.openDialog$.next(status);\n }\n\n getDialogOpenStatus(): Observable<boolean> {\n return this.openDialog$.asObservable();\n }\n\n\n private setPagination(pagination) {\n if (pagination) {\n this.fileTotal = pagination.Total;\n this.pageIndex = pagination.PageIndex;\n this.pageSize = pagination.PageSize;\n }\n }\n\n public getAssetById(assetId: string) {\n const url = `${this.baseUrl}/File/GetById/${assetId}`;\n return this._api.get<AssetResultModel>(url);\n }\n\n public getChildrenFolders({ assetId, isFilter = true }: IAssetByIdPayload) {\n const url = `${this.baseUrl}/File/GetChildren`;\n let params = new HttpParams().set('getAll', 'true').set('isFolder', 'true');\n\n if (assetId) {\n params = params.set('assetId', assetId);\n }\n if (isFilter && this.keyword.length) {\n params = params.set('keyword', this.keyword || '');\n }\n if (this.dialogConfig.allowedType) {\n params = params.set('fileType', this.dialogConfig.allowedType);\n }\n\n return this._api.get<AssetResultModel>(url, { params });\n }\n\n public getChildrenAssets({ assetId, pageIndex }: IChildrenAssetPayload) {\n const url = `${this.baseUrl}/File/GetChildren`;\n let params = new HttpParams()\n .set('pageSize', this.pageSize.toString())\n .set('pageIndex', pageIndex || this.pageIndex.toString())\n .set('getAll', 'false')\n .set('isFolder', 'false')\n .set('TypeSort', this.sortOrder.toString())\n .set('SortFilesBy', this.sortBy.toString());\n\n if (assetId) {\n params = params.set('assetId', assetId);\n }\n if (this.keyword.length) {\n params = params.set('keyword', this.keyword || '');\n }\n if (this.dialogConfig.allowedType) {\n params = params.set('fileType', this.dialogConfig.allowedType);\n }\n\n return this._api.get<AssetResultModel>(url, { params });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as ACTIONS from './store/actions.action';\n\nconst eventDispatcher = new Subject<ACTIONS.Actions>();\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetManagementService {\n\n private _dispatcher;\n\n constructor() {\n }\n\n getDispatcher() {\n if (!this._dispatcher) {\n this._dispatcher = eventDispatcher;\n }\n\n return this._dispatcher;\n }\n\n dispatch(action: ACTIONS.Actions) {\n this.getDispatcher().next(action);\n }\n}\n","import { AssetModel, FolderTreeModel } from '../models';\n\ninterface ActionInterface {\n type: string;\n payload?;\n}\n\nexport enum ActionTypes {\n // global loading\n SET_GLOBAL_LOADING = '[LOADING] Set global loading state',\n\n // asset area\n SET_SELECTED_ASSETS = '[ASSET] Set selected assets',\n RELOAD_CURRENT_ASSETS = '[ASSET] reload current asset list ',\n DELETE_ASSET = '[ASSET] delete an asset ',\n\n // folder area\n SET_CURRENT_FOLDER_ID = '[FOLDER] get current folder id',\n SET_CURRENT_FOLDER = '[FOLDER] set current folder ',\n RELOAD_CURRENT_FOLDER = '[FOLDER] reload current folder ',\n SET_CURRENT_FOLDER_HIERARCHY = '[FOLDER] set current folder hierarchy ',\n\n // node area\n RELOAD_CURRENT_NODE = '[NODE] reload current node ',\n}\n\nexport class SetGlobalLoading implements ActionInterface {\n readonly type = ActionTypes.SET_GLOBAL_LOADING;\n payload: boolean;\n}\n\nexport class SetSelectedAssets implements ActionInterface {\n readonly type = ActionTypes.SET_SELECTED_ASSETS;\n payload: Array<AssetModel>;\n}\n\nexport class DeleteAsset implements ActionInterface {\n readonly type = ActionTypes.DELETE_ASSET;\n payload: string;\n}\n\nexport class SetCurrentFolder implements ActionInterface {\n readonly type = ActionTypes.SET_CURRENT_FOLDER;\n payload: AssetModel;\n}\n\nexport class ReloadCurrentFolder implements ActionInterface {\n readonly type = ActionTypes.RELOAD_CURRENT_FOLDER;\n}\n\nexport class SetCurrentFolderHierarchy implements ActionInterface {\n readonly type = ActionTypes.SET_CURRENT_FOLDER_HIERARCHY;\n payload: Array<FolderTreeModel>;\n}\n\nexport class GetCurrentFolder implements ActionInterface {\n readonly type = ActionTypes.SET_CURRENT_FOLDER_ID;\n payload: string;\n}\n\nexport class ReloadCurrentAssets implements ActionInterface {\n readonly type = ActionTypes.RELOAD_CURRENT_ASSETS;\n}\n\nexport class ReloadCurrentNode implements ActionInterface {\n readonly type = ActionTypes.RELOAD_CURRENT_NODE;\n}\n\nexport type Actions =\n | SetGlobalLoading\n | SetSelectedAssets\n | SetCurrentFolder\n | ReloadCurrentFolder\n | SetCurrentFolderHierarchy\n | GetCurrentFolder\n | ReloadCurrentAssets\n | ReloadCurrentNode\n | DeleteAsset;\n","import { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { AssetModel, FolderTreeModel } from '../models';\nimport * as ACTIONS from './actions.action';\n\ninterface InitialState {\n globalLoading: boolean;\n selectedAssets: Array<AssetModel>;\n deletedAssetId: string;\n currentFolder: AssetModel;\n currentFolderId: string;\n currentFolderHierarchy: Array<FolderTreeModel>;\n reloadCurrentFolder: boolean;\n reloadCurrentAssets: boolean;\n reloadCurrentNode: boolean;\n}\n\nlet state: InitialState = {\n globalLoading: false,\n selectedAssets: [],\n deletedAssetId: null,\n currentFolder: null,\n currentFolderId: null,\n currentFolderHierarchy: [],\n reloadCurrentFolder: false,\n reloadCurrentAssets: false,\n reloadCurrentNode: false,\n};\n\nexport const store = new BehaviorSubject<InitialState>(state);\n\nexport const initialReducer = (dispatcher: Subject<ACTIONS.Actions>) => {\n if (!dispatcher) {\n console.warn('Dispatcher not found.');\n return;\n }\n\n dispatcher.subscribe((action: ACTIONS.Actions) => {\n switch (action.type) {\n case ACTIONS.ActionTypes.SET_SELECTED_ASSETS:\n state = {\n ...state,\n selectedAssets: action.payload,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.SET_GLOBAL_LOADING:\n state = {\n ...state,\n globalLoading: action.payload,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.SET_CURRENT_FOLDER:\n state = {\n ...state,\n currentFolder: { ...action.payload },\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.RELOAD_CURRENT_FOLDER:\n state = {\n ...state,\n reloadCurrentFolder: !state.reloadCurrentFolder,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.RELOAD_CURRENT_ASSETS:\n state = {\n ...state,\n reloadCurrentAssets: !state.reloadCurrentAssets,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.RELOAD_CURRENT_NODE:\n state = {\n ...state,\n reloadCurrentNode: !state.reloadCurrentNode,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.SET_CURRENT_FOLDER_HIERARCHY:\n state = {\n ...state,\n currentFolderHierarchy: [...action.payload],\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.SET_CURRENT_FOLDER_ID:\n state = {\n ...state,\n currentFolderId: action.payload,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.DELETE_ASSET:\n state = {\n ...state,\n deletedAssetId: action.payload,\n };\n store.next(state);\n break;\n\n default:\n break;\n }\n });\n};\n\nexport const select = (mapFn: (status) => InitialState): Observable<any> => {\n return store.asObservable().pipe(\n map((status: InitialState) => mapFn(status)),\n distinctUntilChanged()\n );\n};\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { AssetManagementService } from '../asset-management.service';\nimport { AssetModel, DynamicFlatNode, FolderTreeModel, IInitialFolderTreeOptions } from '../models';\nimport { ActionTypes } from '../store';\nimport { AssetService } from './asset.service';\n\n@Injectable()\nexport class NodeTreeService {\n constructor(private assetService: AssetService, private svc: AssetManagementService) { }\n\n public storedData$ = new BehaviorSubject<AssetModel[]>([]);\n public loading$ = new BehaviorSubject<boolean>(false);\n public initialData$: BehaviorSubject<DynamicFlatNode[]> = new BehaviorSubject([]);\n public rootFolder: AssetModel;\n\n get data(): AssetModel[] {\n return this.storedData$.getValue();\n }\n set data(values: AssetModel[]) {\n this.storedData$.next(values);\n }\n\n private async fetchChildrenFolder(id: string): Promise<FolderTreeModel> {\n try {\n const result = await this.assetService.getChildrenFolders({ assetId: id, isFilter: false }).toPromise();\n if (result) {\n return result.Data;\n }\n } catch (err) { }\n return;\n }\n\n /** Initial data from database */\n public async initialData(\n { dispatchRootId }: IInitialFolderTreeOptions\n ): Promise<DynamicFlatNode[]> {\n if (dispatchRootId) { this.loading$.next(true); }\n const result = await this.assetService.getChildrenFolders({ isFilter: false }).toPromise();\n if (!result) { return; }\n if (dispatchRootId) {\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_ID,\n payload: result.Data.AssetId,\n });\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_HIERARCHY,\n payload: [],\n });\n }\n this.rootFolder = result.Data;\n const initData = result.Data.Children.map(\n (folder) => new DynamicFlatNode(folder, 0, this.isExpandable(folder))\n );\n this.initialData$.next(initData);\n\n if (dispatchRootId) { this.loading$.next(false); }\n return this.initialData$.getValue();\n }\n\n public async getChildren(node: FolderTreeModel): Promise<FolderTreeModel> {\n return await this.fetchChildrenFolder(node.AssetId);\n }\n\n public isExpandable(node: FolderTreeModel): boolean {\n return node.HaveChildren;\n }\n\n /** Add asset to stored data */\n public addNode(asset: AssetModel, parentId?: string): void {\n let data = [...this.data];\n const index = data.findIndex((node) => node.AssetId === asset.AssetId);\n if (index < 0) {\n data = [...data, { ...asset, ParentId: parentId ? parentId : null }];\n }\n this.data = data;\n }\n\n public async updateBreadcrumb(id: string) {\n const folder = this.data.find((n) => n.AssetId === id);\n if (folder) {\n const hierarchy = this.getFolderHierarchy(folder);\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_HIERARCHY,\n payload: hierarchy,\n });\n }\n }\n\n private getAssetParent(node: AssetModel): AssetModel {\n return this.data.find((n) => n.AssetId === node.ParentId);\n }\n\n private getFolderHierarchy(node: FolderTreeModel): Array<FolderTreeModel> {\n if (!node) {\n return [];\n }\n let parentHierarchy: Array<FolderTreeModel> = [];\n let parent = this.getAssetParent(node);\n while (parent) {\n parentHierarchy = [parent, ...parentHierarchy];\n parent = this.getAssetParent(parent);\n }\n return [...parentHierarchy, node];\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { BaseHttpClient } from './base.service';\nimport { AM_CONFIG } from './env-config.service';\n\n@Injectable()\nexport class UploadAssetsService {\n private files: File[] = [];\n private namesMap: { [key: string]: string } = {};\n private errorsMap: { [key: string]: boolean } = {};\n public readonly supportedSize = 10 * 1024 * 1024; // 10MB\n public readonly documentExtension = ['.pdf'];\n public readonly imageExtension = [\n '.png',\n '.gif',\n '.jpeg',\n '.jpg',\n '.svg',\n '.svg+xml',\n ];\n public supportedTypes = [...this.imageExtension, ...this.documentExtension];\n public readonly messageErrors = {\n size: `File size should be upto`,\n ext: `Only supported file extension:`,\n replace: `The replacement file should be the same extension with old one:`,\n };\n\n private errorObs$: BehaviorSubject<any> = new BehaviorSubject(true);\n private baseUrl: string;\n\n constructor(\n @Inject(AM_CONFIG) private _env,\n public dialog: MatDialog,\n private _api: BaseHttpClient\n ) {\n this.baseUrl = this._env.asset2Url;\n }\n\n getErrorObs(): Observable<any> {\n return this.errorObs$.asObservable();\n }\n\n setErrorObs(error: boolean) {\n this.errorObs$.next(error);\n }\n\n get getFiles(): File[] {\n return this.files;\n }\n\n set setFiles(files: File[]) {\n this.files = files;\n }\n\n get nameFiles(): { [key: string]: string } {\n return this.namesMap;\n }\n\n set newName(newName: { [key: string]: string }) {\n this.namesMap = { ...this.namesMap, ...newName };\n }\n\n get errorFiles(): boolean {\n return !this.files.length || Object.keys(this.errorsMap).length > 0;\n }\n\n set errors(newError: { [key: string]: boolean }) {\n this.errorsMap = { ...this.errorsMap, ...newError };\n }\n\n get fileErrors() {\n return this.errorsMap;\n }\n\n get errorLength() {\n return Object.keys(this.errorsMap).length;\n }\n\n public deleteFile(fileName: string, index: number) {\n this.files = this.files.filter((_file, i) => i !== index);\n delete this.namesMap[fileName];\n delete this.errorsMap[fileName];\n }\n\n uploadMultipleAssets(parentAssetId: string) {\n const { files, namesMap } = this;\n const formData = new FormData();\n formData.append('parentAssetId', parentAssetId);\n formData.append('companyId', '732DA8D2-04EC-4BE0-A168-63EE0DCF50D8');\n\n for (const file of files) {\n const nameSplit = file.name.split('.');\n const ext = `.${nameSplit.splice(nameSplit.length - 1, 1)[0]}`;\n\n const originName = file.name;\n const fileName = namesMap[originName]\n ? `${namesMap[originName]}${ext}`\n : originName;\n\n formData.append('files', file, fileName);\n }\n\n return this._api.post<any>(`${this.baseUrl}/File/Upload`, formData);\n }\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { IAddFolderPayload, IUpdateFilePayload } from '../models';\nimport { BaseHttpClient } from './base.service';\nimport { AM_CONFIG } from './env-config.service';\n\n@Injectable()\nexport class FileService {\n private baseUrl: string;\n\n constructor(@Inject(AM_CONFIG) private _env, private _api: BaseHttpClient) {\n this.baseUrl = this._env.asset2Url;\n }\n\n addFolder({ parentAssetId, folderName }: IAddFolderPayload) {\n const params = new HttpParams()\n .set('parentAssetId', parentAssetId)\n .set('folderName', folderName);\n return this._api.post<any>(`${this.baseUrl}/File/Addfolder`, null, {\n params,\n });\n }\n\n updateFile({ assetId, fileName, description }: IUpdateFilePayload) {\n let params = new HttpParams()\n .set('assetId', assetId)\n .set('fileName', fileName);\n if (description) {\n params = params.set('Description', description);\n }\n return this._api.post<any>(`${this.baseUrl}/File/Update`, null, { params });\n }\n\n replaceAsset(assetId: string, file: File) {\n const formData = new FormData();\n formData.append('AssetId', assetId);\n formData.append('files', file);\n formData.append('KeepOldName', 'true');\n\n return this._api.post<any>(`${this.baseUrl}/File/Replace`, formData);\n }\n\n deleteFile(ids: string[]) {\n const headers = new HttpHeaders().set('Content-Type', 'application/json');\n\n return this._api.request('delete', `${this.baseUrl}/File/Delete`, {\n headers,\n body: ids,\n });\n }\n\n getFileDetail(id: string) {\n const params = new HttpParams().set('IncludeDetailedWidth', 'true');\n\n return this._api.get<any>(`${this.baseUrl}/File/GetById/${id}`, { params });\n }\n}\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetModel, DialogConfig } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { select } from '../../../store';\n\n@Component({\n selector: 'lib-asset-management-dialog',\n templateUrl: './asset-management-dialog.component.html',\n styleUrls: ['./asset-management-dialog.component.scss'],\n})\nexport class AssetManagementDialogComponent implements OnInit, OnDestroy {\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: DialogConfig,\n public dialogRef: MatDialogRef<AssetManagementDialogComponent>,\n private assetService: AssetService\n ) { }\n private destroy$: Subject<boolean> = new Subject();\n public selectedAssets: Array<AssetModel> = [];\n\n ngOnInit() {\n this.initDialogConfig(this.data);\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.destroy$))\n .subscribe((selectedAssets) => {\n this.selectedAssets = selectedAssets;\n });\n }\n\n get disabled(): boolean {\n const { limit } = this.data;\n return (\n (!this.selectedAssets || !this.selectedAssets.length) ||\n (limit && this.selectedAssets.length > limit)\n );\n }\n\n selectAssets() {\n this.dialogRef.close(this.selectedAssets);\n }\n\n initDialogConfig(data: DialogConfig) {\n if (!data) {\n return;\n }\n this.assetService.dialogConfig = data;\n }\n\n ngOnDestroy(): void {\n this.assetService.dialogConfig = new DialogConfig();\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from './asset-management.service';\nimport { AssetManagementDialogComponent } from './components/partial/asset-management-dialog/asset-management-dialog.component';\nimport { AssetModel, DialogConfig } from './models';\nimport { AssetService } from './services/asset.service';\nimport { initialReducer } from './store';\n\n@Component({\n selector: 'lib-asset-management',\n templateUrl: './asset-management.component.html',\n styleUrls: ['./asset-management.component.scss'],\n providers: [AssetService]\n})\nexport class AssetManagementComponent implements OnInit, OnDestroy {\n @Input() isDialog ? = true;\n @Input() limit?: number;\n @Input() allowedType?: string;\n @Output() assetChange = new EventEmitter<AssetModel[]>();\n\n private destroy$: Subject<boolean> = new Subject();\n\n constructor(\n private dialog: MatDialog,\n private svc: AssetManagementService,\n private assetService: AssetService\n ) {}\n\n ngOnInit() {\n initialReducer(this.svc.getDispatcher());\n this.bindSubscriber();\n }\n\n bindSubscriber() {\n this.assetService\n .getDialogOpenStatus()\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n if (res) {\n this.openAssetsDialog();\n }\n });\n }\n\n onAssetsChange(assets) {\n if (!assets) {\n return;\n }\n this.assetChange.emit(assets);\n }\n\n openAssetsDialog() {\n const config: DialogConfig = {\n limit: this.limit,\n allowedType: this.allowedType,\n };\n const dialogRef = this.dialog.open(AssetManagementDialogComponent, {\n autoFocus: false,\n panelClass: 'lib-dialog--large',\n data: config,\n });\n dialogRef\n .afterClosed()\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n if (res) {\n this.assetChange.emit(res);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Directive, HostListener } from '@angular/core';\nimport { AssetService } from '../services/asset.service';\n\n@Directive({\n selector: '[libDialogTrigger]',\n})\nexport class DialogTriggerDirective {\n constructor(private assetService: AssetService) {}\n @HostListener('click', ['$event.target'])\n onClick(event) {\n this.openAssetsDialog();\n }\n openAssetsDialog() {\n this.assetService.setDialogOpenStatus(true);\n }\n}\n","import { Directive, Output, EventEmitter, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[libDnDFile]',\n})\nexport class DndDirective {\n @Output() imageDropped = new EventEmitter<any>();\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(event: any) {\n event.preventDefault();\n event.stopPropagation();\n let files = event.dataTransfer.files;\n files = Array.from(files);\n this.imageDropped.emit(files);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DialogTriggerDirective } from './dialogTrigger.directive';\nimport { DndDirective } from './dnd.directive';\n\nexport const DIRECTIVES = [DndDirective, DialogTriggerDirective];\n\n@NgModule({\n declarations: [...DIRECTIVES],\n imports: [CommonModule],\n exports: [...DIRECTIVES],\n})\nexport class DirectivesModule {}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'lib-input-file',\n templateUrl: './input-file.component.html',\n styleUrls: ['./input-file.component.scss'],\n})\nexport class InputFileComponent {\n @Input() color: string;\n @Input() multiple = true;\n @Input() acceptTypes: string;\n @Output('onFileChange') fileChange = new EventEmitter<Event>();\n\n constructor() {}\n\n onFileChange(event: any) {\n let { files } = event.target;\n if (files.length < 1) {\n return;\n }\n\n files = Array.from(files);\n this.fileChange.emit(files);\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss'],\n})\nexport class ModalComponent implements OnInit {\n @Input() heading: string;\n @Input() customHeader = false;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","// tslint:disable:max-line-length\nexport const imageDefault =\n 'data:image/png;base64,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';\n\nexport const searchNotFound =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iNzAiIHZpZXdCb3g9IjAgMCA4MCA3MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTU5LjM4MDEgNDQuMDRINTYuMjIwMUw1NS4xMDAxIDQyLjk2QzU5LjAyMDEgMzguNCA2MS4zODAxIDMyLjQ4IDYxLjM4MDEgMjYuMDRDNjEuMzgwMSAxMS42OCA0OS43NDAxIDAuMDQwMDM5MSAzNS4zODAxIDAuMDQwMDM5MUMyMS43MDAxIDAuMDQwMDM5MSAxMC41MDAxIDEwLjYgOS41MDAwNiAyNC4wNEgxNy41ODAxQzE4LjU4MDEgMTUuMDQgMjYuMTAwMSA4LjA0MDA0IDM1LjM4MDEgOC4wNDAwNEM0NS4zNDAxIDguMDQwMDQgNTMuMzgwMSAxNi4wOCA1My4zODAxIDI2LjA0QzUzLjM4MDEgMzYgNDUuMzQwMSA0NC4wNCAzNS4zODAxIDQ0LjA0QzM0LjcwMDEgNDQuMDQgMzQuMDYwMSA0My45MiAzMy4zODAxIDQzLjg0VjUxLjkyQzM0LjA2MDEgNTIgMzQuNzAwMSA1Mi4wNCAzNS4zODAxIDUyLjA0QzQxLjgyMDEgNTIuMDQgNDcuNzQwMSA0OS42OCA1Mi4zMDAxIDQ1Ljc2TDUzLjM4MDEgNDYuODhWNTAuMDRMNzMuMzgwMSA3MEw3OS4zNDAxIDY0LjA0TDU5LjM4MDEgNDQuMDRaIiBmaWxsPSIjNkZDMEZGIi8+CjxwYXRoIGQ9Ik0yMy4yNiAzMS4zMjAzTDEzLjM4IDQxLjIwMDNMMy41MDAwMyAzMS4zMjAzTDAuNjYwMDM0IDM0LjE2MDNMMTAuNTQgNDQuMDQwM0wwLjY2MDAzNCA1My45MjAzTDMuNTAwMDMgNTYuNzYwM0wxMy4zOCA0Ni44ODAzTDIzLjI2IDU2Ljc2MDNMMjYuMSA1My45MjAzTDE2LjIyIDQ0LjA0MDNMMjYuMSAzNC4xNjAzTDIzLjI2IDMxLjMyMDNaIiBmaWxsPSIjNkZDMEZGIi8+Cjwvc3ZnPgo=';\n\nexport const imagePdf =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABLASURBVHgB7d0JkBzVfQbwr+fc2fvQHjp3V5ZAXkCALDA2BgMGYYRjl51wBnPEFQdJcYipVDl2pUA4JHZcxiXjKJiECoTKgYgTHCAIJMvLWWUbEMhGXJKFvAIdu9JKqz3n6vb792qEjWZ6Z6Z7prtnvl8xNYtmZmd2t79+Z78HEFFOGjzi/vvvr5mYmLhEfXmVpmmnqPsOwzBqQRVL/Z11dTek/s7D6uun1df3rV69ehc8xPWAPPjgg3UqGJfpun67+t9TQdUsqYLyqDoW7lyzZs2r8ABXA7Ju3brOcDj8gPqlfBpE7xtVx8Qdq1atugsucy0g9957b20qlXpO/SKWgSgLVfW6Q5Uka+GiAFyiitEfMBxkRR0ft61fv/4P4CJXSpB77rnni+rs8CCIZra/vr5+0fXXXz8OF5S9BFm7dm2tCsd3QJSfrtHR0TVwSdkD0tnZeY666wJR/q6AS8oeEFV6uFqnJP9RbZHld999dztc4EZAloCoQIFAYClcUPaAqLPBHBAVrhsucKObtxFEBVIliCvHjWvjIER+wIAQWQihAoTDYTQ3N6OpqQmxWEzaOaDipFIpxONxTE5OIpFISKfK8cey/V7l33RdN58nr5WbvE7uK4GvAyJh6O3txZw5c1BTUwNyVjKZxNjYGAYHBws64DNhmZqawvj4uHn/u0HzE98GpK2tDcuWLUM0GgWVhpTMLS0taGxsxL59+zAyMpLX66RUkdfKraGhwQza8PCwWSr5LSi+DMj8+fOxdOlSVqXKJBgMYt68eaivrzeDIlWqQkhQOjs7jwdlYmICfuG7RnpXVxfD4RJp50l1ttjffSYos2bNMkPnB74KSCQSYThcJh0hHR0dsEOqXbNnz0Yo5P0KjK8C0t3dbYaE3NXa2mp2kNghpYkfQuKbgKiRVLPtQe6Tv4Uc3HZJOOT7eLmjxTcBkaK9tpaLnHiFlCBOHNiZkEiJ4kW+CYjUW8lbpPvXCdKm9GpIfBMQu3Vecl5dXR2cIr1aXqxu+SYgfukWrCZOH8zyN5ZuYC+FhJMVqWilOGnJ95RuZK/0bjEgVLRSjUd5qeHOgJAnSUjmzp3renWLASHPkhJK2iRuliQMCHlapndLdSnXwwUMCHmehKStre2WTZs2fQplxoCQX8xKp9P3bdy4sQdlxICQn/SoW385Q8KAkN/0qNsbTzzxxDkog7KNxvRfgFAq9JG6XfF4yCim+zyRANExNaqH65GnnnrqwksvvfRNlFDJrjzafP6pHw4EwtdqmrFCM4zFBrRmO+/XcN5F6PzTvwR5y/bt2+Gi/YFAoKQhcbwE6b/gjB7DwN+pKFwLGMf+4xWAVBJduq4/p3q3rl6xYsUWlICjbZAt539khcrD1ulwEJWF9G49VKqGu2MB2fLJ02/StPSP1JctICqvWShR75YjAem/YOk5qtF0lyo5eFUTuUVV7Y1n+vv7Z8FBtgPy6Gdm16o2xn+CJQe5TJ2kF0xOTv4ADrIdkPrRzlvUR+sFkQeokFytqlor4RBbAXntir6I+kR/AapassKJB31fVbUcWazZ1k83NBQ+W3XickPOKubRda0WxePxL8IB9uKva2WfXUne4uGF/G598sknW2GTrYAEQtqHQFXNyZVNnCSbxarxkcthk62ABBFYCKpqTq2NVQrBYPAa2GQrIJEgkqCqJlUsWfXdi3RdX6Ya67Y+nK2A1AS9uVwklZdcN+7Fxrrq8u1MpVJLYIOtgMyKMSA03ZMl+4Z4UTKZXAobbAUkpn4xNSGueEjTaye3t7fDg06CDbYCIpPYu2q5eSZNkxURZS0rLw0eqmrWXNhg+ydprYmiPsKqFk2TBvuiRYvM7Sq8QHX32vogtgMipUhvQx1CGi9vp2my0Jts+rlw4UJzP0LZotutbfPU+9raFsCRrodIMIBFzfXYeWQUKZ/uh03Oky0r5Ca9XEJ2x1WDd5avyWebaNmDXXbMld1yZR/3hMV6Ber7FbYl7wc41jdXFw5hSWsTdh0dxUQyDaIPkraJE+2TzPQWqcZJoMbHxzE0NJR1e2lVgtg6YztaL4qqkmRxcyPm1MUQ9uYsT6owUnWT/dsXLFhgVueysBUQx0d3QrKdlgpIu+rdGkskMaJuk6k0UlK82vioQVWMakdHQDZJW0C1EQxZEDro/W2Y85XZfEf2sRwYGDj+74ZheCsgx7+x+kM0RyPmLUO381l3vwntW38FckBQBURVU/T2LiRPPxvJvjNgNNue+OoJMh4juyHv2bPH/H9VwnijDZKPgJ2eDGlrJW39rJShGrja1AQCR48g9Os3Ef3p/yN+/iVIfPxiGRaH38kESmmfjIyYNQ7vtEHInwJHDiH26EOo//4dCBwaRCXIbAhqt4rFgNBxwX17UH/3NxF629XVEh0hbRJptNutYjEg9Hu08THENtwHbeQw/E7aI2rQkiUIOSugwhF7/CH4nZQiKiS2BuUYEMoqvO1FBHfvgN+pBnsKNjAglJ0at4o+vxl+F4vFbE0CY0Aop9A7b/t+cNbuZEUGhHLSRo4gvOM1+JytK/oYELKkHT6EaubZYdNA6yzVT1fAtS56GsboURjjo+ZIceFvGECgrQOozXOdJzX+ZEyMAfKe8SkUS2tsgtbcNj1Hyo6JCeiHDphtBycF1M9XzTwXEC0cRvTGP0f4vIuhRQu7nNdIpWAMH0TqtZeRePxH0N8byOt1gVmdiH3lGwie1GcGJW/qYDSmJpF+fRsSP3kcqV+9LBcr5PdauZ7/qj9B+KKV0Ood2DVCfZaUGuCbXHcnjMMH4Rgb4a8EnqtihVQwIhd/puBwCE0ddIGOLkQuuhx13/4hon90fV6vi173ZQSXnFpYOIR6vqZKnNDyj6P2r/8edbd9D1pLfttThM/6BCKfvcqZcBz7LKElpyF61Y0g53guIOHl58IJWiSK6BU3qAPmJusnhsIInXomnBA8+RTUfXMdAp0zL4ETWvYxlELolDNlhAzkDO810mO1cFL0C9ch9LELcj6uRaPqt+DcARXomK2qa1+H1jTDgn4xW72PuaWSjrdDqllV9GLVqCqUJg3wMgku7kP0yhvhhvjG/zU7EMgZvpn8b4yqAau0xZlRtT9y1eelER5edg4Smx9FQe95xHrCntbQmLM6E1GN7/i//zOMyQkU9J7jY0X1wsn7JJ/bjOTmx0DO8U1Apv5lHVJbf5b7CdJNu/AkxNZ8DYH2E/f0CZ39iYIDMn7HV2EMHcj+oOqW1VpaEf38HyN84WVZPk/QrNolf/oEChF/5D+QfPLHKJT04MFg1cpp/ilBZJwjmbB8TvqNXyL+6MOIfenEXeG0Ii4plfezek/jwD5M/vC7CPQuRrBn0QmP59NYP0F65p+Tyqfi2iD63t9k/XetpkSNYkXGQbK+Z713986g/FReI13P0UAt4cJ+Zrshmwq4vrvacS4WkQUGhMgCA0JkgQEhssCAEFlgN4vHhM46F1p7Z+4nqFF2mVaf3v4q51yVQcUFJJBjQNBI+GPwLdR3unmzEv3sVeaIe3zD/aDSqqwqVjiC8Pkrsj929AgqhqYhsvIPEZizAFRavilBIiu/YFY/cpHrP4ILT8o5vSP1lu8XH/g9MjMg2LsI+t78rpqk4vgmIKG+M1AsY+Qwks9vQSWR0fv0e78BlVZV9GIlnn4K+p7dqCSJJx+BvvvXoNKq+F6s9NuvI/Hf/wa/SL2+TR34O3M+LjN906+9gtQvXwaVXkUHJPnKLzC17m99NX089eILSDzxPyBvqMiAyHUaU//3X0j2b+RYAdnim4Akn1HtiMH9uZ+QTkM/fFD16rwL/Z0dvOiIHOGfgKiqh1Q/iMqJc7GILDAgRBYYEAdoNTkWu0vb2tyIPIABsSsQRPDDp2V9yBgbA/kbp7tbCUfULZz1IU3OLQ0N5hyx4KIlWZ+jv/MWyN8YEAv1t3/P4lFNPaHBXFE+G1npMPVmZU2QrEYMiIViFpvLSD67GUaV785UCdgGKQGZgp5QI/nkf54LiOzYlNXEOEpCjcDDwVF349AQJr79Dejq3lKun7PKd3TyGs8FJPWL50/4N/3APqTeLk19XgKZ+tVW2GYY5nXiY1/7M/PzziT50omzAoxUEqntr4C8w3NtEJlgGFLdprJHoXSh6gf2YvLeu9QDpRtTkGu7A7PnIfihkwvbTFM28pyaQHrHG0hsfgzpbS/lvaFn6mfPmrN2wxddZo6jGGNHMfXwA9D37wV5h60Va49ceeFGDdqnUQLmLrexOhgHD9jaRTZf0hultbYXsMOVMV0djMdhHBlGsaQjQPY5NMZGYXjwuvnERz+JyStugl8ZhrGpu7v7UhTJZgkS2CsHSinow7JTq4O7tc7A3CF3cOaqkePvq8JlJ2ClprcU35NXCWy1QVTx8x6oohmNDEjR0kZ6kyrCuCFehTKiNUjK3vFVzFZAWibrt2oBbReoIqWWLIXR3IZqZq+K9fjjE4ah/Suo8qjevMQ5F6Da2R4HaUrgXtVO3wmqKMm+M5BaXN3VK2E7INqPtxwKBVNXqgY7h4ArhN4yC1Ofvw7k0Eh63UPPvqLDuAGl6vOlsjGiMUxcvwZ6lbc9MhybatL8cP/D0NKXqy8raJXo6qK3dWDsltuQnt8LmuboXKymDc9sDIf101TF6241hMnL6XzCiEQRv+RzGLv1Dugds0HvK9nmyCPXXrIYSf0aDcY1hgb1Wzdq1duFQe5SvVNGKGxeKSklRvL0jyJx7kUw5OrJCmR3qkkJdw+fpj6gNnzdygZ9Uq8L6fHoY+et7Dc0rQcFWrxoMRZ0cz8MJxjBEKBKDRkILGhypg+5PBdrZpqmScP96LEb/mnFlShGorHZ7F0hKideUUhkgQEhssCAEFlgQIgsMCBEFhgQIgsMCJEFBoTIAgNCZIEBIbLAgBBZYECILDAgRBYYECILDAiRBe4wZUMqlcLY2Bji8TjS6TQikQhqa2tRU1ODQIDnnkrAgBRBwjA0NITh4WFkW3lVQjJ79mwzKORvPM0VKJFIYPfu3Th06BByLUs8MTGBXbt2YXR0FORvDEgBMuGYmpp5jTwJz8DAAEPicwxInqRaJeFIJpMFvY4h8TcGJA/FhiPj3XffxcjICMh/2EifQaZaVWw4hK7r2Lt3eu/BpqYmkH+wBLHgRDgyMiFhdctfGJAc7IRDy7EYm4SEbRJ/YUCyyCcczc3NCIVCOR/TLFYsZEj8gwH5gHwa5A0NDeZAYK4QSDuju7ubIakADMjvyCcc9fX1mDdv3oxTSerq6sznWYWEvVvex4Ack88goJQcCxYsyHueVWNjo2VIMg13hsS7GBDkH4758+dblgjZSEisqluZkBw9ehTkPVUfkHwa5BKOuXPnFhyODKluWbVZJCR79uxhm8SDqjogEoqZwtHa2mqWHMFgEHa0tLSgq6trxoa7TJ8n76jqgAwODlqGI5+DuhASNmnDWH0/KUnIO6o6IHKhUy7SW2VVLSpWphfMqrolF2KRN1R1QOQKwGxkoG+mcQw7rHq3pIeMVyN6R1X/JTo6Ok4IiVSrpEFeapnerQ+OxkuVjgHxjqqezSvh6OnpMa8OlGqNXCorpUe5SO+WtEkOHz5sVq2kt0yCQ95R9dPdw+GwedZ2SywWM2/kTSzLiSwwIEQWGBAiCwwIkQUGhMgCA0JkgQEhssCAEFlgQIgsMCBEFhgQIgsMCJEFBoTIQtkDkmvTGSIvKntANE0bApFPuFHFGgCRT7gRkBdB5BNuBOQZVc1iQ4R8oewBGRwcfEk11F8AkQ+UPSBr165NqYB8WX1pf9sml+VafSTXviHkP66Mg6xZs+YNFZK/gc9l22+wpqYm53pb5D+uDRSqkHxH3a2Dj7W3t5srokiJIYvAybI9pVxwjsrP1ZH01atXf1UdTDepL327IG1bWxtOPvlk9PX1mWtcsXpVWVyfarJq1aoHVF3+U+rLDerG9f/JUzxxurv55pt3qLur169f36VKlDNV++QUdb9A3Royz1F1+7PU3SkgKiPfVJYHBgbuUne3gqgA6mS7SbULL0WROJuXyAIDQmTBNwFJp9PcVYaKYeu48U1AVIP9IIgKZPe48VNAXgVR4bbBBt8EZGho6Gl1NwWiPKmTajoYDPbDBt8EZPny5UnVZbcBRHlSx8u2OXPm2Kp5+KoXKxQKfUvdJUA0Ayk91O1Ou9ce+Sogc+fOfUv1Zt0Oopl9d/78+Y/AJt+Ng/T09PyDOiv8I4hyUMdH/86dOx25nMKX87JV3TK0e/fu21QD7OvgRqT0PkPX9Q3hcPgrqrbhyLCAL0fS1Rki1dvbe1sgEJA5Nj9XN17jXuXUSXOrun1ubGzsBqfCISriyp59+/b1JZPJL6kvL1Q32dO5FlTR1ElSejX3q9sWVWo8oqreL8iJE0RUPr8F+ZntgK18tkMAAAAASUVORK5CYII=';\n// tslint:enable:max-line-length\n","import { Component, OnInit } from '@angular/core';\nimport { searchNotFound } from '../../../contanst';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n selector: 'lib-search-not-found',\n templateUrl: './search-not-found.component.html',\n styleUrls: ['./search-not-found.component.scss'],\n})\nexport class SearchNotFoundComponent implements OnInit {\n public base64Image = this.domSanitizer.bypassSecurityTrustUrl(searchNotFound);\n constructor(private domSanitizer: DomSanitizer) {}\n\n ngOnInit() {}\n}\n","import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core';\nimport { UploadAssetsService } from '../../../services/upload-assets.service';\nimport { imagePdf } from '../../../contanst';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n@Component({\n selector: 'lib-file-item',\n templateUrl: './file-item.component.html',\n styleUrls: ['./file-item.component.scss'],\n})\nexport class FileItemComponent implements OnInit {\n public base64Pdf = this.domSanitizer.bypassSecurityTrustUrl(imagePdf);\n @Input() file: File;\n @Output() checkError = new EventEmitter();\n @Output() fileChange = new EventEmitter();\n @Output() fileRemove = new EventEmitter();\n public dataFile = {\n name: '',\n size: 0,\n ext: '',\n data: null,\n errors: {\n ext: false,\n size: false,\n },\n };\n\n constructor(\n private domSanitizer: DomSanitizer,\n public uploadAssetService: UploadAssetsService\n ) {}\n\n ngOnInit() {\n this.setDataFile(this.file);\n }\n\n private setDataFile(file: File): void {\n const { supportedTypes, supportedSize } = this.uploadAssetService;\n const nameSplit = file.name.split('.');\n this.dataFile.ext = nameSplit.splice(nameSplit.length - 1, 1)[0];\n this.dataFile.name = nameSplit.join('.');\n this.dataFile.size = file.size;\n this.dataFile.errors = {\n ext: supportedTypes.indexOf(`.${this.dataFile.ext}`) < 0,\n size: supportedSize < this.dataFile.size,\n };\n\n const { ext, size } = this.dataFile.errors;\n if (ext || size) {\n this.uploadAssetService.errors = { [file.name]: true };\n this.checkError.emit();\n }\n\n if (file.type.indexOf('image') > -1) {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = (readerEvent: any) => {\n const img = document.createElement('img');\n img.src = readerEvent.target.result as string;\n\n img.onload = () => {\n this.dataFile.data = this.domSanitizer.bypassSecurityTrustUrl(\n readerEvent.target.result\n );\n };\n };\n }\n\n this.uploadAssetService.setErrorObs(this.uploadAssetService.errorFiles);\n }\n\n onChange(event: Event) {\n this.dataFile.name = (event.target as HTMLInputElement).value.trim();\n this.fileChange.emit(this.dataFile.name);\n }\n\n onRemove() {\n this.fileRemove.emit(true);\n }\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { UploadAssetsService } from '../../../services/upload-assets.service';\n\n@Component({\n selector: 'lib-file-list',\n templateUrl: './file-list.component.html',\n styleUrls: ['./file-list.component.scss'],\n})\nexport class FileListComponent implements OnInit {\n @Output() revalidate = new EventEmitter();\n constructor(public uploadAssetsService: UploadAssetsService) {}\n\n ngOnInit() {}\n\n onFileChange(newFiles: File[]): void {\n const { getFiles: files } = this.uploadAssetsService;\n this.uploadAssetsService.setFiles = [...files, ...newFiles];\n (document.getElementById('file-import') as HTMLInputElement).value = '';\n }\n\n onDelFile(fileName: string, index: number) {\n this.uploadAssetsService.deleteFile(fileName, index);\n this.revalidate.emit(this.uploadAssetsService.errorFiles);\n }\n\n onChangeName(newName: string, originName: string) {\n this.uploadAssetsService.newName = { [originName]: newName };\n }\n\n onEmitError(): void {\n this.revalidate.emit(this.uploadAssetsService.errorFiles);\n }\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { UploadAssetsService } from '../../../services/upload-assets.service';\nimport { imageDefault } from '../../../contanst';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n selector: 'lib-upload-file',\n templateUrl: './upload-file.component.html',\n styleUrls: ['./upload-file.component.scss'],\n})\nexport class UploadFileComponent implements OnInit {\n public base64Image = this.domSanitizer.bypassSecurityTrustUrl(imageDefault);\n @Output() revalidate = new EventEmitter();\n public isDragging = false;\n\n constructor(\n private domSanitizer: DomSanitizer,\n public uploadAssetsService: UploadAssetsService\n ) {}\n\n ngOnInit() {}\n\n onDelFile(fileName: string, index: number) {\n this.uploadAssetsService.deleteFile(fileName, index);\n this.revalidate.emit(this.uploadAssetsService.errorFiles);\n }\n\n onChangeName(newName: string, originName: string) {\n this.uploadAssetsService.newName = { [originName]: newName };\n }\n\n onFileChange(newFiles: any): void {\n this.isDragging = false;\n const { getFiles: files } = this.uploadAssetsService;\n this.uploadAssetsService.setFiles = [...files, ...newFiles];\n }\n\n onEmitError(): void {\n this.revalidate.emit(this.uploadAssetsService.errorFiles);\n }\n\n onDragover(_event: Event) {\n this.isDragging = true;\n }\n\n onDragleave(_event: Event) {\n this.isDragging = false;\n }\n}\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n Validators,\n} from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IAddFolderRes } from '../../../models';\nimport { FileService } from '../../../services/file.service';\n\ninterface IData {\n currentAssetId: string;\n}\n\n@Component({\n selector: 'lib-add-folder-dialog',\n templateUrl: './add-folder-dialog.component.html',\n styleUrls: ['./add-folder-dialog.component.scss'],\n})\nexport class AddFolderDialogComponent implements OnInit, OnDestroy {\n public isLoading = false;\n public errorMessage = '';\n public value = '';\n private destroy$: Subject<boolean> = new Subject();\n public formGroup: FormGroup;\n public form: FormControl = new FormControl();\n constructor(\n private fb: FormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: IData,\n public dialogRef: MatDialogRef<AddFolderDialogComponent>,\n private fileService: FileService\n ) {\n this.formGroup = this.fb.group({\n name: ['', Validators.compose([Validators.required])],\n });\n }\n\n ngOnInit() {}\n\n get disabled() {\n const { value: name } = this.formGroup.controls.name;\n return !name || !!this.errorMessage || this.isLoading;\n }\n\n onChange(_event: Event) {\n this.errorMessage = '';\n }\n\n addFolder() {\n const { value: name } = this.formGroup.controls.name;\n this.isLoading = true;\n this.fileService\n .addFolder({\n parentAssetId: this.data.currentAssetId,\n folderName: name.trim(),\n })\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (_res: IAddFolderRes) => this.closeDialog(true),\n err => {\n this.isLoading = false;\n this.errorMessage = err.ResponseMessage;\n }\n );\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { FileService } from '../../../services/file.service';\nimport { IAssetUpdatedRes } from '../../../models';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n Validators,\n} from '@angular/forms';\n\ninterface IData {\n assetId: string;\n name: string;\n}\n\n@Component({\n selector: 'lib-edit-folder-dialog',\n templateUrl: './edit-folder-dialog.component.html',\n styleUrls: ['./edit-folder-dialog.component.scss'],\n})\nexport class EditFolderDialogComponent implements OnInit, OnDestroy {\n public isLoading = false;\n public errorMessage = '';\n public value = '';\n private destroy$: Subject<boolean> = new Subject();\n public formGroup: FormGroup;\n public form: FormControl = new FormControl();\n constructor(\n private fb: FormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: IData,\n public dialogRef: MatDialogRef<EditFolderDialogComponent>,\n private fileService: FileService\n ) {\n this.formGroup = this.fb.group({\n name: [this.data.name, Validators.compose([Validators.required])],\n });\n }\n\n ngOnInit() {}\n\n get disabled() {\n const { value: name } = this.formGroup.controls.name;\n return (\n !name ||\n !!this.errorMessage ||\n name.toLowerCase().trim() === this.data.name.toLowerCase() ||\n this.isLoading\n );\n }\n\n onChange(_event: Event) {\n this.errorMessage = '';\n }\n\n editFolder() {\n const { value: name } = this.formGroup.controls.name;\n this.isLoading = true;\n this.fileService\n .updateFile({\n assetId: this.data.assetId,\n fileName: name.trim(),\n })\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (_res: IAssetUpdatedRes) => this.closeDialog(true),\n err => {\n this.isLoading = false;\n this.errorMessage = err.ResponseMessage;\n }\n );\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { FileService } from '../../../services/file.service';\nimport { IAssetDetailsRes } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\n\ninterface IData {\n type: 'file' | 'folder' | 'files';\n ids: string[];\n name?: string;\n}\n\n@Component({\n selector: 'lib-delete-dialog',\n templateUrl: './delete-dialog.component.html',\n styleUrls: ['./delete-dialog.component.scss'],\n})\nexport class DeleteDialogComponent implements OnInit, OnDestroy {\n public isLoading = false;\n private destroy$: Subject<boolean> = new Subject();\n constructor(\n @Inject(MAT_DIALOG_DATA)\n public data: IData,\n public dialogRef: MatDialogRef<DeleteDialogComponent>,\n private fileService: FileService,\n private assetService: AssetService\n ) {}\n\n ngOnInit() {}\n\n delete() {\n this.isLoading = true;\n this.fileService\n .deleteFile(this.data.ids)\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (_res: IAssetDetailsRes) => {\n this.handleAssetPaging();\n this.isLoading = false;\n this.closeDialog(true);\n },\n (_err) => {\n this.isLoading = false;\n console.log('deleted fail', _err);\n }\n );\n }\n\n private handleAssetPaging() {\n this.assetService\n .getAssetList()\n .pipe(takeUntil(this.destroy$))\n .subscribe((assets) => {\n if (\n assets &&\n assets.length === this.data.ids.length &&\n this.assetService.pageIndex > 0\n ) {\n this.assetService.pageIndex--;\n }\n });\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { ChangeDetectorRef } from '@angular/core';\nimport { UploadAssetsService } from '../../../services/upload-assets.service';\n\ninterface IData {\n currentAssetId: string;\n fileType?: string;\n}\n\n@Component({\n selector: 'lib-upload-dialog',\n templateUrl: './upload-dialog.component.html',\n styleUrls: ['./upload-dialog.component.scss'],\n providers: [UploadAssetsService],\n})\nexport class UploadDialogComponent implements OnInit, OnDestroy {\n public isLoading = false;\n public disabled = true;\n private destroy$: Subject<boolean> = new Subject();\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: IData,\n public dialogRef: MatDialogRef<UploadDialogComponent>,\n private changeDetectorRef: ChangeDetectorRef,\n public uploadAssetsService: UploadAssetsService\n ) {\n if (this.data.fileType) {\n this.uploadAssetsService.supportedTypes =\n this.data.fileType === 'Image'\n ? [...this.uploadAssetsService.imageExtension]\n : [...this.uploadAssetsService.documentExtension];\n }\n }\n\n ngOnInit() {\n this.uploadAssetsService\n .getErrorObs()\n .pipe(takeUntil(this.destroy$))\n .subscribe(error => {\n this.disabled = error;\n this.changeDetectorRef.detectChanges();\n });\n }\n\n onValidate(hasError: boolean) {\n this.disabled = hasError;\n }\n\n uploadFiles() {\n this.isLoading = true;\n this.uploadAssetsService\n .uploadMultipleAssets(this.data.currentAssetId)\n .pipe(takeUntil(this.destroy$))\n .subscribe(res => {\n if (res) {\n this.closeDialog(true);\n }\n });\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AssetModel } from '../../../models';\nimport { ActionTypes } from '../../../store/actions.action';\nimport { EditFolderDialogComponent } from '../edit-folder-dialog/edit-folder-dialog.component';\nimport { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';\nimport { AssetManagementService } from '../../../asset-management.service';\n\n@Component({\n selector: 'lib-folder-item',\n templateUrl: './folder-item.component.html',\n styleUrls: ['./folder-item.component.scss'],\n})\nexport class FolderItemComponent implements OnInit {\n constructor(private dialog: MatDialog, private svc: AssetManagementService) {}\n @Input() folder: AssetModel;\n ngOnInit() {}\n\n openFolder() {\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_ID,\n payload: this.folder.AssetId,\n });\n }\n\n renameFolder() {\n const dialogRef = this.dialog.open(EditFolderDialogComponent, {\n data: {\n assetId: this.folder.AssetId,\n name: this.folder.OriginalFileName,\n },\n panelClass: 'lib-dialog--small',\n });\n\n dialogRef.afterClosed().subscribe(res => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_FOLDER,\n });\n }\n });\n }\n\n deleteFolder() {\n const dialogRef = this.dialog.open(DeleteDialogComponent, {\n data: {\n type: 'folder',\n ids: [this.folder.AssetId],\n name: this.folder.OriginalFileName,\n },\n panelClass: 'lib-dialog--small',\n autoFocus: false,\n });\n\n dialogRef.afterClosed().subscribe(res => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_FOLDER,\n });\n }\n });\n }\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetModel } from '../../../models';\nimport { select } from '../../../store';\n\n@Component({\n selector: 'lib-folder-list',\n templateUrl: './folder-list.component.html',\n styleUrls: ['./folder-list.component.scss'],\n})\nexport class FolderListComponent implements OnInit, OnDestroy {\n\n constructor() {\n this.bindSubscriber();\n }\n\n @Input() folders: AssetModel[];\n public loading = false;\n private unsubscribe$ = new Subject<void>();\n\n ngOnInit() {}\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n private bindSubscriber() {\n select(state => state.globalLoading)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(globalLoading => {\n this.loading = globalLoading;\n });\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { of } from 'rxjs/internal/observable/of';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { AssetModel } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { ActionTypes } from '../../../store/actions.action';\nimport { select } from '../../../store/reducer';\n\n@Component({\n selector: 'lib-asset-list',\n templateUrl: './asset-list.component.html',\n styleUrls: ['./asset-list.component.scss'],\n})\nexport class AssetListComponent implements OnInit, OnChanges, OnDestroy {\n constructor(\n private assetService: AssetService,\n private svc: AssetManagementService\n ) {}\n\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\n @Input() assets: AssetModel[];\n\n private unsubscribe$ = new Subject<void>();\n private currentFolderId: string;\n private selectedAssets: Array<AssetModel> = [];\n\n ngOnInit() {\n this.bindSubscriber();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.assets) {\n this.paginator.pageIndex = this.assetService.pageIndex;\n this.paginator.pageSize = this.assetService.pageSize;\n this.paginator.length = this.assetService.fileTotal;\n }\n }\n\n public onSelectAsset(event: AssetModel) {\n const index = this.selectedAssets.findIndex(\n (asset) => asset.AssetId === event.AssetId\n );\n const newSelectedAssets: AssetModel[] =\n index > -1\n ? this.selectedAssets.filter((asset, i) => index !== i)\n : [...this.selectedAssets, event];\n\n this.svc.dispatch({\n type: ActionTypes.SET_SELECTED_ASSETS,\n payload: newSelectedAssets,\n });\n }\n\n private bindSubscriber() {\n select((state) => state.deletedAssetId)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((id) => {\n if (this.selectedAssets && this.selectedAssets.length) {\n const newSelectedAssets = this.selectedAssets.filter(\n (asset) => asset.AssetId !== id\n );\n this.svc.dispatch({\n type: ActionTypes.SET_SELECTED_ASSETS,\n payload: newSelectedAssets,\n });\n }\n });\n\n select((state) => state.currentFolderId)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((currentFolderId) => {\n this.currentFolderId = currentFolderId;\n this.svc.dispatch({\n type: ActionTypes.SET_SELECTED_ASSETS,\n payload: [],\n });\n });\n\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((selectedAssets) => {\n this.selectedAssets = selectedAssets;\n });\n\n select((state) => state.reloadCurrentAssets)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe(() => {\n this.fetchChildrenAssets();\n });\n }\n\n public pageChange(event?: PageEvent) {\n this.assetService.pageSize = event.pageSize;\n this.assetService.pageIndex = event.pageIndex;\n this.fetchChildrenAssets();\n }\n\n private fetchChildrenAssets() {\n if (!this.currentFolderId) {\n return;\n }\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: true,\n });\n\n this.assetService\n .getChildrenAssets({ assetId: this.currentFolderId })\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((res) => {\n this.assetService.setAssetList(res.Data.Children, res.Meta);\n })\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/*\n * Convert bytes into largest possible unit.\n * Takes an precision argument that defaults to 2.\n * Usage:\n * bytes | fileSize:precision\n * Example:\n * {{ 1024 | fileSize}}\n * formats to: 1 KB\n*/\n@Pipe({name: 'fileSize'})\nexport class FileSizePipe implements PipeTransform {\n\n private units = [\n 'bytes',\n 'KB',\n 'MB',\n 'GB',\n 'TB',\n 'PB'\n ];\n\n transform(bytes: number = 0, precision: number = 2 ): string {\n if ( isNaN( parseFloat( String(bytes) )) || ! isFinite( bytes ) ) { return '?'; }\n\n let unit = 0;\n\n while ( bytes >= 1024 ) {\n bytes /= 1024;\n unit ++;\n }\n\n return bytes.toFixed( + precision ) + ' ' + this.units[ unit ];\n }\n}\n","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\nimport {\n MatDialog,\n MatDialogRef,\n MAT_DIALOG_DATA,\n} from '@angular/material/dialog';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { imagePdf } from '../../../contanst';\nimport {\n AssetModel,\n FileTypeEnum,\n IAssetDetailsRes,\n IAssetUpdatedRes,\n} from '../../../models';\nimport { FileSizePipe } from '../../../pipes/file-size.pipe';\nimport { AM_CONFIG } from '../../../services/env-config.service';\nimport { FileService } from '../../../services/file.service';\nimport { UploadAssetsService } from '../../../services/upload-assets.service';\nimport { ActionTypes } from '../../../store';\nimport { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';\n\ninterface IData {\n assetId: string;\n name: string;\n}\n\n@Component({\n selector: 'lib-asset-dialog',\n templateUrl: './asset-dialog.component.html',\n styleUrls: ['./asset-dialog.component.scss'],\n providers: [FileSizePipe],\n})\nexport class AssetDialogComponent implements OnInit, OnDestroy {\n public fileName = '';\n public description = '';\n public linkDownload = '';\n public isCopied = false;\n public errorMessage = '';\n public patternError = false;\n public replaceMessage = '';\n public acceptTypes: string[];\n public assetDetails: AssetModel;\n private destroy$: Subject<boolean> = new Subject();\n public base64Pdf = this.domSanitizer.bypassSecurityTrustUrl(imagePdf);\n private timer;\n public isLoading = true;\n public isUpdating = false;\n public fileType = FileTypeEnum;\n\n constructor(\n @Inject(AM_CONFIG) private _env,\n private dialog: MatDialog,\n @Inject(MAT_DIALOG_DATA) public data: IData,\n public dialogRef: MatDialogRef<AssetDialogComponent>,\n private fileSize: FileSizePipe,\n public assetService: UploadAssetsService,\n private fileService: FileService,\n private domSanitizer: DomSanitizer,\n private svc: AssetManagementService\n ) {}\n\n ngOnInit() {\n this.linkDownload = `${this._env.asset2Url}/File/Download/${this.data.assetId}`;\n this.getAssetDetail();\n }\n\n get disabled() {\n return (\n !this.fileName.length ||\n !!this.errorMessage ||\n this.patternError ||\n this.isUpdating\n );\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n getAssetDetail() {\n this.fileService\n .getFileDetail(this.data.assetId)\n .pipe(takeUntil(this.destroy$))\n .subscribe((res: IAssetDetailsRes) => {\n if (res) {\n this.isLoading = false;\n this.assetDetails = res.Data;\n this.fileName = this.assetDetails.OriginalFileNameWithoutExtension;\n this.description = this.assetDetails.Description;\n this.acceptTypes = [`.${this.assetDetails.Extension.toLowerCase()}`];\n }\n });\n }\n\n updateAsset() {\n this.isUpdating = true;\n this.fileService\n .updateFile({\n assetId: this.assetDetails.AssetId,\n fileName: this.fileName.trim(),\n description: this.description && this.description.trim(),\n })\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (_res: IAssetUpdatedRes) => {\n this.isUpdating = false;\n this.closeDialog(true);\n },\n err => {\n this.errorMessage = err.ResponseMessage;\n this.isUpdating = false;\n }\n );\n }\n\n deleteAsset() {\n const dialogRef = this.dialog.open(DeleteDialogComponent, {\n data: {\n type: 'file',\n ids: [this.assetDetails.AssetId],\n name: this.assetDetails.OriginalFileNameWithoutExtension,\n },\n panelClass: 'lib-dialog--small',\n autoFocus: false,\n });\n\n dialogRef.afterClosed().subscribe(res => {\n if (res) {\n this.closeDialog(true);\n this.svc.dispatch({\n type: ActionTypes.DELETE_ASSET,\n payload: this.assetDetails.AssetId,\n });\n }\n });\n }\n\n replaceAsset(files: File[]) {\n if (!this.validateFile(files[0])) {\n return;\n }\n this.isLoading = true;\n this.fileService\n .replaceAsset(this.assetDetails.AssetId, files[0])\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (_res: IAssetDetailsRes) => {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n this.getAssetDetail();\n },\n err => {\n this.isLoading = false;\n this.replaceMessage = err.ResponseMessage;\n }\n );\n }\n\n validateFile(file: File) {\n this.replaceMessage = '';\n if (!file) {\n return;\n }\n const ext = this.matchExt(file.type);\n const errors = [];\n\n if (this.acceptTypes.indexOf(ext) < 0) {\n const extError = `${\n this.assetService.messageErrors.replace\n } ${this.acceptTypes.join(', ')}`;\n errors.push(extError);\n }\n if (this.assetService.supportedSize < file.size) {\n const maxSize = this.fileSize.transform(\n this.assetService.supportedSize,\n 0\n );\n errors.push(`${this.assetService.messageErrors.size} ${maxSize}`);\n }\n\n if (errors.length) {\n this.replaceMessage = errors.join('<br/>');\n }\n\n return !errors.length;\n }\n\n matchExt(fileType: string) {\n const ext = `.${fileType.split('/')[1].toLowerCase()}`;\n\n switch (ext) {\n case '.jpeg':\n return '.jpg';\n\n case '.svg+xml':\n return '.svg';\n\n default:\n return ext;\n }\n }\n\n onChangeName(event: Event) {\n this.fileName = (event.target as HTMLInputElement).value;\n this.errorMessage = '';\n this.patternError = this.fileName && !this.fileName.match(/.*\\S+.*/);\n }\n\n onChangeDescription(event: Event) {\n this.description = (event.target as HTMLInputElement).value;\n }\n\n copyText(content: string) {\n const selBox = document.createElement('textarea');\n\n selBox.style.position = 'fixed';\n selBox.style.left = '0';\n selBox.style.top = '0';\n selBox.style.opacity = '0';\n selBox.value = content;\n document.body.appendChild(selBox);\n selBox.focus();\n selBox.select();\n document.execCommand('copy');\n document.body.removeChild(selBox);\n\n this.isCopied = true;\n this.timer = setTimeout(() => {\n this.isCopied = false;\n }, 1000);\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.timer);\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { imagePdf } from '../../../contanst';\nimport { AssetModel, FileTypeEnum } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { ActionTypes, select } from '../../../store';\nimport { AssetDialogComponent } from '../asset-dialog/asset-dialog.component';\n\n@Component({\n selector: 'lib-asset-item',\n templateUrl: './asset-item.component.html',\n styleUrls: ['./asset-item.component.scss'],\n})\nexport class AssetItemComponent implements OnInit, OnDestroy {\n constructor(\n private dialog: MatDialog,\n private domSanitizer: DomSanitizer,\n private svc: AssetManagementService,\n private assetService: AssetService\n ) {\n this.bindSubscriber();\n }\n @Input() asset: AssetModel;\n\n @Output() selectAsset = new EventEmitter<AssetModel>();\n\n public base64Pdf = this.domSanitizer.bypassSecurityTrustUrl(imagePdf);\n public selectedAssets: Array<AssetModel> = [];\n public fileType = FileTypeEnum;\n private destroy$: Subject<boolean> = new Subject();\n\n ngOnInit() {}\n\n get checkSelectedAsset(): boolean {\n return (\n this.selectedAssets &&\n this.selectedAssets.some((asset) => asset.AssetId === this.asset.AssetId)\n );\n }\n\n private bindSubscriber() {\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.destroy$))\n .subscribe((selectedAssets) => {\n this.selectedAssets = selectedAssets;\n });\n }\n\n public onChange() {\n this.selectAsset.emit(this.asset);\n }\n\n public editAsset() {\n const dialogRef = this.dialog.open(AssetDialogComponent, {\n autoFocus: false,\n data: {\n assetId: this.asset.AssetId,\n name: this.asset.OriginalFileNameWithoutExtension,\n },\n panelClass: 'lib-dialog--medium',\n });\n if (dialogRef) {\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n }\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import {\n CollectionViewer,\n DataSource,\n SelectionChange,\n} from '@angular/cdk/collections';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { BehaviorSubject, merge, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DynamicFlatNode } from '../models';\nimport { NodeTreeService } from '../services/node-tree.service';\n\nexport class NodeTreeDataSource implements DataSource<DynamicFlatNode> {\n dataChange = new BehaviorSubject<DynamicFlatNode[]>([]);\n\n get data(): DynamicFlatNode[] {\n return this.dataChange.value;\n }\n set data(value: DynamicFlatNode[]) {\n this._treeControl.dataNodes = value;\n this.dataChange.next(value);\n }\n\n constructor(\n private _treeControl: FlatTreeControl<DynamicFlatNode>,\n private _database: NodeTreeService\n ) {}\n\n connect(collectionViewer: CollectionViewer): Observable<DynamicFlatNode[]> {\n this._treeControl.expansionModel.changed.subscribe((change) => {\n if (\n (change as SelectionChange<DynamicFlatNode>).added ||\n (change as SelectionChange<DynamicFlatNode>).removed\n ) {\n this.handleTreeControl(change as SelectionChange<DynamicFlatNode>);\n }\n });\n\n return merge(collectionViewer.viewChange, this.dataChange).pipe(\n map(() => this.data)\n );\n }\n\n disconnect(collectionViewer: CollectionViewer): void {}\n\n /** Handle expand/collapse behaviors */\n handleTreeControl(change: SelectionChange<DynamicFlatNode>) {\n if (change.added) {\n change.added.forEach(async (node) => await this.toggleNode(node, true));\n }\n if (change.removed) {\n change.removed\n .slice()\n .reverse()\n .forEach(async (node) => await this.toggleNode(node, false));\n }\n }\n\n /**\n * Toggle the node, remove from display list\n */\n async toggleNode(node: DynamicFlatNode, expand: boolean) {\n if (!node) {\n return;\n }\n node.isLoading = true;\n const index = this.data.indexOf(node);\n if (index < 0) {\n // If cannot find the node, no op\n return;\n }\n\n if (expand) {\n const newNode = await this._database.getChildren(node.item);\n if (!newNode) {\n // If no children, no op\n return;\n }\n const nodes = newNode.Children.map((child) => {\n this._database.addNode(child, node.item.AssetId);\n return new DynamicFlatNode(\n child,\n node.level + 1,\n this._database.isExpandable(child)\n );\n });\n this.data.splice(index + 1, 0, ...nodes);\n } else {\n let count = 0;\n for (\n let i = index + 1;\n i < this.data.length && this.data[i].level > node.level;\n i++, count++\n ) {}\n this.data.splice(index + 1, count);\n }\n\n // notify the change\n node.isLoading = false;\n this.dataChange.next(this.data);\n }\n\n /**\n * Reload the node, remove from display list\n */\n public async reloadNode(node: DynamicFlatNode) {\n if (!node) {\n return;\n }\n const newNode = await this._database.getChildren(node.item);\n const index = this.data.indexOf(node);\n if (!newNode || index < 0) {\n // If no children, or cannot find the node, no op\n return;\n }\n\n // Remove all current children\n let count = 0;\n for (\n let i = index + 1;\n i < this.data.length && this.data[i].level > node.level;\n i++, count++\n ) {}\n this.data.splice(index + 1, count);\n\n // Add new children\n const nodes = newNode.Children.map(\n (child) =>\n new DynamicFlatNode(\n child,\n node.level + 1,\n this._database.isExpandable(child)\n )\n );\n this.data.splice(index + 1, 0, ...nodes);\n\n // notify the change\n this.dataChange.next(this.data);\n }\n}\n","import { FlatTreeControl } from '@angular/cdk/tree';\nimport { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { of, Subject } from 'rxjs';\nimport { distinctUntilChanged, switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { NodeTreeDataSource } from '../../../datasources';\nimport { DynamicFlatNode } from '../../../models';\nimport { NodeTreeService } from '../../../services/node-tree.service';\nimport { ActionTypes, select } from '../../../store/index';\n\n@Component({\n selector: 'lib-node-tree',\n templateUrl: './node-tree.component.html',\n styleUrls: ['./node-tree.component.scss'],\n})\nexport class NodeTreeComponent implements OnInit, OnDestroy {\n constructor(\n private nodeTreeService: NodeTreeService,\n private svc: AssetManagementService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.treeControl = new FlatTreeControl<DynamicFlatNode>(\n this.getLevel,\n this.isExpandable\n );\n this.dataSource = new NodeTreeDataSource(this.treeControl, nodeTreeService);\n }\n\n @Input() width: number;\n\n public currentFolderId: string;\n public isRoot = false;\n public homeLoading = false;\n public loading = false;\n public treeControl: FlatTreeControl<DynamicFlatNode>;\n public dataSource: NodeTreeDataSource;\n private unsubscribe$ = new Subject<void>();\n\n ngOnInit() {\n this.bindSubscriber();\n this.initialData();\n }\n\n private async initialData() {\n await this.nodeTreeService.initialData({ dispatchRootId: true });\n this.changeDetectorRef.detectChanges();\n }\n\n private bindSubscriber() {\n this.nodeTreeService.loading$\n .pipe(takeUntil(this.unsubscribe$), distinctUntilChanged())\n .subscribe((loading) => {\n this.homeLoading = loading;\n this.changeDetectorRef.detectChanges();\n });\n\n this.nodeTreeService.initialData$\n .pipe(takeUntil(this.unsubscribe$), distinctUntilChanged())\n .subscribe((data) => {\n const { AssetId: rootId } = this.nodeTreeService.rootFolder || {AssetId: null};\n this.isRoot = rootId && this.currentFolderId === rootId;\n this.dataSource.data = data;\n data.forEach((node) => this.nodeTreeService.addNode(node.item, null));\n this.changeDetectorRef.detectChanges();\n });\n\n this.dataSource.dataChange\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((data) => {\n if (data && data.length) {\n this.changeDetectorRef.detectChanges();\n }\n });\n\n select((state) => state.currentFolderId)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(async (id) => {\n if (id) {\n const { AssetId: rootId } = this.nodeTreeService.rootFolder || {AssetId: null};\n this.isRoot = rootId && id === rootId;\n this.currentFolderId = id;\n await this.nodeTreeService.updateBreadcrumb(id);\n this.changeDetectorRef.detectChanges();\n }\n });\n\n select((state) => state.reloadCurrentFolder)\n .pipe(takeUntil(this.unsubscribe$), switchMap((res) => of(res)))\n .subscribe(async () => {\n await this.handleReloadFolder(this.currentFolderId);\n this.changeDetectorRef.detectChanges();\n });\n }\n\n public async selectNode(node: DynamicFlatNode) {\n const { AssetId: id } = node.item;\n if (id === this.currentFolderId) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_NODE,\n });\n } else {\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_ID,\n payload: id,\n });\n }\n await this.handleReloadFolder(id);\n this.changeDetectorRef.detectChanges();\n }\n\n public backToHome() {\n this.initialData();\n const { AssetId: rootId } = this.nodeTreeService.rootFolder;\n if (this.currentFolderId === rootId) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_NODE,\n });\n }\n\n }\n\n checked(node: DynamicFlatNode): boolean {\n return this.currentFolderId && this.currentFolderId === node.item.AssetId;\n }\n\n disabled(node: DynamicFlatNode): boolean {\n return node.expandable;\n }\n\n getLevel = (node: DynamicFlatNode) => node.level;\n\n isExpandable = (node: DynamicFlatNode) => node.expandable;\n\n hasChild = (_: number, _nodeData: DynamicFlatNode) => _nodeData.expandable;\n\n getParent(node: DynamicFlatNode): DynamicFlatNode {\n const currentLevel = this.getLevel(node);\n\n if (currentLevel < 1) {\n return null;\n }\n\n const startIndex = this.dataSource.data.indexOf(node) - 1;\n\n for (let i = startIndex; i >= 0; i--) {\n const currentNode = this.dataSource.data[i];\n if (this.getLevel(currentNode) < currentLevel) {\n return currentNode;\n }\n }\n }\n\n getNodeById(id: string): DynamicFlatNode {\n return this.treeControl.dataNodes.find((node) => node.item.AssetId === id);\n }\n\n private async handleReloadFolder(id: string) {\n if (!id || this.loading) {\n return;\n }\n this.loading = true;\n const node = this.getNodeById(id);\n if (node) {\n const parent = this.getParent(node);\n if (parent) {\n await this.dataSource.reloadNode(parent);\n const updatedNode = this.getNodeById(id);\n if (updatedNode) {\n await this.treeControl.expand(updatedNode);\n }\n } else {\n await this.nodeTreeService.initialData({ dispatchRootId: false });\n const updatedNode = this.getNodeById(id);\n if (updatedNode) {\n await this.treeControl.expand(updatedNode);\n }\n }\n } else {\n await this.nodeTreeService.initialData({ dispatchRootId: false });\n }\n this.loading = false;\n }\n\n ngOnDestroy() {\n this.dataSource.data = [];\n this.nodeTreeService.data = [];\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { of } from 'rxjs/internal/observable/of';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { FolderTreeModel } from '../../../models';\nimport { NodeTreeService } from '../../../services/node-tree.service';\nimport { ActionTypes, select } from '../../../store';\n\n@Component({\n selector: 'lib-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n})\nexport class BreadcrumbComponent implements OnInit, OnDestroy {\n constructor(\n private nodeTreeService: NodeTreeService,\n private svc: AssetManagementService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.bindSubscriber();\n }\n private unsubscribe$ = new Subject<void>();\n public currentFolderHierarchy: Array<FolderTreeModel> = [];\n public maximumShownLevel = 3;\n\n ngOnInit() {}\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n private bindSubscriber() {\n select((state) => state.currentFolderHierarchy)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe((currentFolderHierarchy) => {\n this.currentFolderHierarchy = currentFolderHierarchy;\n });\n }\n\n public navigateToFolder(folder: FolderTreeModel) {\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_ID,\n payload: folder.AssetId,\n });\n }\n\n public async backToHome() {\n await this.nodeTreeService.initialData({ dispatchRootId: true });\n this.changeDetectorRef.detectChanges();\n }\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { combineLatest } from 'rxjs/internal/observable/combineLatest';\nimport { of } from 'rxjs/internal/observable/of';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { AssetService } from '../../../services/asset.service';\nimport { ActionTypes, select } from '../../../store';\n\n@Component({\n selector: 'lib-search-box',\n templateUrl: './search-box.component.html',\n styleUrls: ['./search-box.component.scss'],\n})\nexport class SearchBoxComponent implements OnInit, OnDestroy {\n private destroy$: Subject<boolean> = new Subject();\n public value = '';\n private folderId = '';\n constructor(\n public assetService: AssetService,\n private svc: AssetManagementService\n ) {\n this.bindingSubscriber();\n }\n\n ngOnInit() {}\n\n private bindingSubscriber() {\n select(state => state.currentFolderId)\n .pipe(\n takeUntil(this.destroy$),\n switchMap(res => of(res))\n )\n .subscribe(currentFolderId => (this.folderId = currentFolderId));\n }\n\n onChange(event: Event) {\n this.value = (event.target as HTMLInputElement).value;\n }\n\n onSubmit() {\n if (!this.value && !this.assetService.keyword) {\n return;\n }\n this.assetService.keyword = this.value;\n this.searchByName();\n }\n\n clearSearch() {\n if (!this.assetService.keyword) {\n this.value = '';\n return;\n }\n\n this.value = '';\n this.assetService.keyword = '';\n this.searchByName();\n this.assetService.setFolderList(null);\n this.assetService.setAssetList(null);\n }\n\n private searchByName() {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: true,\n });\n combineLatest([\n this.assetService.getChildrenFolders({ assetId: this.folderId }),\n this.assetService.getChildrenAssets({\n assetId: this.folderId,\n pageIndex: '0',\n }),\n ])\n .pipe(takeUntil(this.destroy$))\n .subscribe(([folders, assets]) => {\n this.assetService.setFolderList(folders.Data, folders.Meta.Total);\n this.assetService.setAssetList(assets.Data.Children, assets.Meta);\n })\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { SortFilesBy, TypeSort } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { ActionTypes } from '../../../store';\n\n@Component({\n selector: 'lib-sort-items',\n templateUrl: './sort-items.component.html',\n styleUrls: ['./sort-items.component.scss'],\n})\nexport class SortItemsComponent implements OnInit {\n readonly typeSort = TypeSort;\n sortOrder: TypeSort = TypeSort.DESC;\n sortBy: SortFilesBy = SortFilesBy.MODIFIED_DATE;\n sortList: ISort[] = [\n { value: SortFilesBy.NAME, label: 'Sort by name' },\n { value: SortFilesBy.CREATED_DATE, label: 'Sort by created date' },\n { value: SortFilesBy.MODIFIED_DATE, label: 'Sort by modified date' },\n ];\n constructor(\n private assetService: AssetService,\n private svc: AssetManagementService\n ) {}\n\n ngOnInit() {\n this.sortBy = this.assetService.sortBy;\n this.sortOrder = this.assetService.sortOrder;\n }\n\n onSortBy(event: ISort) {\n this.sortBy = event.value;\n this.assetService.sortBy = this.sortBy;\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n }\n\n toggleSortOrder() {\n this.sortOrder =\n this.sortOrder === TypeSort.ASC ? TypeSort.DESC : TypeSort.ASC;\n this.assetService.sortOrder = this.sortOrder;\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n }\n}\n\ninterface ISort {\n value: SortFilesBy;\n label?: string;\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetModel } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { select } from '../../../store';\n\n@Component({\n selector: 'lib-asset-wrapper',\n templateUrl: './asset-wrapper.component.html',\n styleUrls: ['./asset-wrapper.component.scss'],\n})\nexport class AssetWrapperComponent implements OnInit, OnDestroy {\n @Input() header = true;\n @Output() assets = new EventEmitter<AssetModel[]>();\n\n private unsubscribe$ = new Subject<void>();\n public nodeTreeMinWidth = 250;\n public nodeTreeMaxWidth = 700;\n public nodeTreeWidth;\n\n constructor(private assetService: AssetService) {}\n\n ngOnInit() {\n this.nodeTreeWidth = this.nodeTreeMinWidth;\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((selectedAssets) => {\n this.assets.emit(selectedAssets);\n });\n }\n\n onResize({ width }) {\n this.nodeTreeWidth = width;\n }\n\n get nodeDetailsWidth(): string {\n return `calc(100% - ${this.nodeTreeWidth}px)`;\n }\n\n ngOnDestroy() {\n this.assetService.resetAsset();\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { of } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { combineLatest } from 'rxjs/internal/observable/combineLatest';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { AssetModel, FolderTreeModel } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { NodeTreeService } from '../../../services/node-tree.service';\nimport { ActionTypes, select } from '../../../store';\nimport { AddFolderDialogComponent } from '../add-folder-dialog/add-folder-dialog.component';\nimport { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';\nimport { UploadDialogComponent } from '../upload-dialog/upload-dialog.component';\n\n@Component({\n selector: 'lib-node-details',\n templateUrl: './node-details.component.html',\n styleUrls: ['./node-details.component.scss'],\n})\nexport class NodeDetailsComponent implements OnInit, OnDestroy {\n constructor(\n public dialog: MatDialog,\n public assetService: AssetService,\n private nodeTreeService: NodeTreeService,\n private svc: AssetManagementService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.bindSubscriber();\n }\n\n private unsubscribe$ = new Subject<void>();\n\n public selectedAssets: Array<AssetModel> = [];\n public loading$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n public currentFolder: FolderTreeModel;\n public assets: AssetModel[];\n\n ngOnInit() {\n this.assetService\n .getFolderList()\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((folders) => {\n this.currentFolder = folders;\n this.changeDetectorRef.detectChanges();\n });\n this.assetService\n .getAssetList()\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((assets) => {\n this.assets = assets;\n this.changeDetectorRef.detectChanges();\n });\n }\n\n private bindSubscriber() {\n select((state) => state.globalLoading)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe((globalLoading) => {\n this.loading$.next(globalLoading);\n });\n\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((selectedAssets) => {\n if (selectedAssets) {\n this.selectedAssets = selectedAssets;\n }\n });\n\n select((state) => state.currentFolderId)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe((currentFolderId) => {\n if (currentFolderId) {\n this.assetService.pageIndex = 0;\n this.fetchNodeDetails(currentFolderId);\n }\n });\n\n select((state) => state.reloadCurrentFolder)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe(() => {\n if (!this.currentFolder) {\n return;\n }\n this.fetchFolder(this.currentFolder.AssetId);\n });\n\n select((state) => state.reloadCurrentNode)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe(() => {\n if (!this.currentFolder) {\n return;\n }\n this.assetService.pageIndex = 0;\n this.fetchNodeDetails(this.currentFolder.AssetId);\n });\n }\n\n public openUploadDialog() {\n const dialogRef = this.dialog.open(UploadDialogComponent, {\n data: {\n currentAssetId: this.currentFolder.AssetId,\n fileType: this.assetService.dialogConfig.allowedType,\n },\n panelClass: 'lib-dialog--medium',\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_FOLDER,\n });\n }\n });\n }\n\n addFolder() {\n const dialogRef = this.dialog.open(AddFolderDialogComponent, {\n data: {\n currentAssetId: this.currentFolder.AssetId,\n },\n panelClass: 'lib-dialog--small',\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_FOLDER,\n });\n }\n });\n }\n\n deleteAssets() {\n const ids = this.selectedAssets.map((asset) => asset.AssetId);\n const dialogRef = this.dialog.open(DeleteDialogComponent, {\n data: {\n type: 'files',\n ids,\n },\n panelClass: 'lib-dialog--small',\n autoFocus: false,\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_FOLDER,\n });\n this.svc.dispatch({\n type: ActionTypes.SET_SELECTED_ASSETS,\n payload: [],\n });\n }\n });\n }\n\n private fetchFolder(id: string) {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: true,\n });\n\n this.assetService\n .getChildrenFolders({ assetId: id })\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((res) => {\n this.assetService.setFolderList(res.Data, res.Meta.Total);\n if (res.Data && res.Data.Children) {\n res.Data.Children.forEach((node) =>\n this.nodeTreeService.addNode(node, this.currentFolder.AssetId)\n );\n }\n })\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n private fetchNodeDetails(id: string) {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: true,\n });\n combineLatest([\n this.assetService.getChildrenFolders({ assetId: id }),\n this.assetService.getChildrenAssets({\n assetId: id,\n }),\n ])\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(([folders, assets]) => {\n this.assetService.setFolderList(folders.Data, folders.Meta.Total);\n this.assetService.setAssetList(assets.Data.Children, assets.Meta);\n if (folders.Data && folders.Data.Children) {\n folders.Data.Children.forEach((node) =>\n this.nodeTreeService.addNode(node, this.currentFolder.AssetId)\n );\n }\n })\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n get noResults() {\n return (\n this.assetService.keyword &&\n !this.currentFolder.Children.length &&\n !this.assets.length\n );\n }\n\n ngOnDestroy() {\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_ID,\n payload: null,\n });\n this.svc.dispatch({\n type: ActionTypes.SET_SELECTED_ASSETS,\n payload: [],\n });\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\n@Component({\n selector: 'lib-drag-to-resize',\n templateUrl: './drag-to-resize.component.html',\n styleUrls: ['./drag-to-resize.component.scss'],\n})\nexport class DragToResizeComponent implements OnInit {\n @Input() minWidth: number;\n @Input() maxWidth: number;\n\n @Output() resizeCompleted = new EventEmitter();\n\n public width: number;\n public grabber = false;\n private oldX = 0;\n\n constructor() {}\n\n ngOnInit() {\n this.width = this.minWidth;\n }\n\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent) {\n if (!this.grabber) {\n return;\n }\n this.resizer(event.clientX - this.oldX);\n this.oldX = event.clientX;\n }\n\n @HostListener('document:mouseup', ['$event'])\n onMouseUp(event: MouseEvent) {\n if (this.grabber) {\n this.grabber = false;\n }\n }\n\n onMouseDown(event: MouseEvent) {\n this.grabber = true;\n this.oldX = event.clientX;\n }\n\n resizer(offsetX: number) {\n if (this.width + offsetX > this.maxWidth) {\n this.width = this.maxWidth;\n } else if (this.width + offsetX < this.minWidth) {\n this.width = this.minWidth;\n } else {\n this.width += offsetX;\n }\n this.resizeCompleted.emit({ width: this.width });\n }\n}\n","export const AdminConfig: { [name: string]: any } = {\n locale: 'en-US',\n timeZone: 'local',\n format: {\n date: 'MM/DD/YYYY',\n dayMonth: 'MMM DD',\n dateTime: 'MM/DD/YYYY HH:mm',\n fullDateTime: 'MM/DD/YYYY HH:mm:ss',\n dateTimeAM: 'MM/DD/YYYY hh:mm A',\n apiDate: 'YYYY/MM/DD',\n apiDateTime: 'YYYY-MM-DD[T]HH:mm:ssZ',\n apiDateTimeNoZ: 'YYYY-MM-DD[T]HH:mm:ss',\n apiDateMonthYear: 'MMM DD YYYY',\n urlParam: 'YYYY-MM-DD',\n },\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AdminConfig } from '../configs/admin.config';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\n@Pipe({ name: 'localDatetime' })\nexport class LocalDateTimePipe implements PipeTransform {\n transform = (\n value: string,\n config?: { format: string; timeZone: string }\n ): string => {\n // Assume timezone is at UTC0 if there's have no timezone.\n const { format, timeZone } = config || {\n format: AdminConfig.format.dateTimeAM,\n timeZone: 'America/Chicago',\n };\n\n if (!value) {\n return '-';\n }\n\n // Check if UTC0.\n if (value.indexOf('Z') !== -1) {\n return moment(value).format(format);\n }\n\n // const utc0String = moment.tz(value, timeZone).toISOString();\n const utc0String = moment.utc(value).toISOString();\n return moment(utc0String).format(format);\n }\n}\n\n@Pipe({ name: 'localDate' })\nexport class LocalDatePipe implements PipeTransform {\n transform = (\n value: string,\n config?: { format: string; timeZone: string }\n ): string => {\n // Assume timezone is at UTC0 if there's have no timezone.\n\n const { format, timeZone } = config || {\n format: AdminConfig.format.date,\n timeZone: 'America/Chicago',\n };\n\n if (!value) {\n return '-';\n }\n\n // Check if UTC0.\n\n if (value.indexOf('Z') !== -1) {\n return moment(value).format(format);\n }\n\n // const utc0String = moment.tz(value, timeZone).toISOString();\n\n const utc0String = moment.utc(value).toISOString();\n\n return moment(utc0String).format(format);\n }\n}\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport {\n UploadAssetsService,\n AssetService,\n FileService,\n NodeTreeService,\n BaseHttpClient\n} from './services/index';\n\nimport { AssetManagementComponent } from './asset-management.component';\nimport { DirectivesModule } from './directives/directives.module';\n\n// UI\nimport { InputFileComponent } from './components/ui//input-file/input-file.component';\nimport { ModalComponent } from './components/ui//modal/modal.component';\nimport { SearchNotFoundComponent } from './components/ui//search-not-found/search-not-found.component';\n\n// Partials\nimport { FileItemComponent } from './components/partial/file-item/file-item.component';\nimport { FileListComponent } from './components/partial/file-list/file-list.component';\nimport { UploadFileComponent } from './components/partial/upload-file/upload-file.component';\nimport { AddFolderDialogComponent } from './components/partial/add-folder-dialog/add-folder-dialog.component';\nimport { EditFolderDialogComponent } from './components/partial/edit-folder-dialog/edit-folder-dialog.component';\nimport { DeleteDialogComponent } from './components/partial/delete-dialog/delete-dialog.component';\nimport { UploadDialogComponent } from './components/partial/upload-dialog/upload-dialog.component';\nimport { FolderItemComponent } from './components/partial/folder-item/folder-item.component';\nimport { FolderListComponent } from './components/partial/folder-list/folder-list.component';\nimport { AssetListComponent } from './components/partial/asset-list/asset-list.component';\nimport { AssetItemComponent } from './components/partial/asset-item/asset-item.component';\nimport { AssetManagementDialogComponent } from './components/partial/asset-management-dialog/asset-management-dialog.component';\nimport { NodeTreeComponent } from './components/partial/node-tree/node-tree.component';\nimport { AssetDialogComponent } from './components/partial/asset-dialog/asset-dialog.component';\nimport { BreadcrumbComponent } from './components/partial/breadcrumb/breadcrumb.component';\nimport { SearchBoxComponent } from './components/partial/search-box/search-box.component';\nimport { SortItemsComponent } from './components/partial/sort-items/sort-items.component';\nimport { AssetWrapperComponent } from './components/partial/asset-wrapper/asset-wrapper.component';\nimport { NodeDetailsComponent } from './components/partial/node-details/node-details.component';\nimport { DragToResizeComponent } from './components/ui/drag-to-resize/drag-to-resize.component';\n\n\n// Pipes\nimport { FileSizePipe } from './pipes/file-size.pipe';\nimport { AMConfig } from './services/env-config.service';\nimport { LocalDatePipe, LocalDateTimePipe } from './pipes/datetime.pipe';\n\n// SERVICES\nconst SERVICES = [\n UploadAssetsService,\n AssetService,\n FileService,\n NodeTreeService,\n BaseHttpClient\n];\n\nconst COMPONENTS = [\n // UI\n InputFileComponent,\n ModalComponent,\n SearchNotFoundComponent,\n DragToResizeComponent,\n\n // Partials\n UploadFileComponent,\n FileItemComponent,\n FileListComponent,\n UploadDialogComponent,\n AddFolderDialogComponent,\n EditFolderDialogComponent,\n DeleteDialogComponent,\n AssetDialogComponent,\n FolderListComponent,\n NodeDetailsComponent,\n FolderItemComponent,\n AssetListComponent,\n AssetItemComponent,\n NodeTreeComponent,\n BreadcrumbComponent,\n SearchBoxComponent,\n SortItemsComponent,\n AssetWrapperComponent,\n AssetManagementDialogComponent,\n];\n\nconst ENTRY_COMPONENTS = [\n ModalComponent,\n UploadDialogComponent,\n AddFolderDialogComponent,\n EditFolderDialogComponent,\n DeleteDialogComponent,\n AssetDialogComponent,\n AssetManagementDialogComponent,\n];\n\nexport function AMFactory(config: AMConfig) {\n const fn = () => {\n return new Promise(res => {\n return setTimeout(() => res(config));\n });\n };\n return fn;\n}\n\n@NgModule({\n declarations: [\n ...COMPONENTS,\n AssetManagementComponent,\n FileSizePipe,\n LocalDatePipe,\n LocalDateTimePipe,\n ],\n imports: [\n DirectivesModule,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatDialogModule,\n MatButtonModule,\n MatInputModule,\n MatIconModule,\n MatDialogModule,\n MatButtonModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n MatPaginatorModule,\n MatTableModule,\n MatProgressBarModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTreeModule,\n MatSelectModule,\n MatProgressSpinnerModule,\n ],\n exports: [\n ...COMPONENTS,\n AssetManagementComponent,\n DirectivesModule,\n FileSizePipe,\n LocalDatePipe,\n LocalDateTimePipe,\n ],\n providers: [\n ...SERVICES,\n {\n provide: APP_INITIALIZER,\n useFactory: AMFactory,\n deps: SERVICES,\n multi: true,\n }\n ],\n entryComponents: [...ENTRY_COMPONENTS],\n})\nexport class AssetManagementModule {\n constructor() {}\n}\n"]}
1
+ {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@rs-pk/asset-management/lib/models/asset.model.ts","ng://@rs-pk/asset-management/lib/models/node-tree.model.ts","ng://@rs-pk/asset-management/lib/models/file-type.enum.ts","ng://@rs-pk/asset-management/lib/models/sort.enum.ts","ng://@rs-pk/asset-management/lib/services/env-config.service.ts","ng://@rs-pk/asset-management/lib/services/base.service.ts","ng://@rs-pk/asset-management/lib/services/asset.service.ts","ng://@rs-pk/asset-management/lib/asset-management.service.ts","ng://@rs-pk/asset-management/lib/store/actions.action.ts","ng://@rs-pk/asset-management/lib/store/reducer.ts","ng://@rs-pk/asset-management/lib/services/node-tree.service.ts","ng://@rs-pk/asset-management/lib/services/upload-assets.service.ts","ng://@rs-pk/asset-management/lib/services/file.service.ts","ng://@rs-pk/asset-management/lib/components/partial/asset-management-dialog/asset-management-dialog.component.ts","ng://@rs-pk/asset-management/lib/asset-management.component.ts","ng://@rs-pk/asset-management/lib/directives/dialogTrigger.directive.ts","ng://@rs-pk/asset-management/lib/directives/dnd.directive.ts","ng://@rs-pk/asset-management/lib/directives/directives.module.ts","ng://@rs-pk/asset-management/lib/components/ui/input-file/input-file.component.ts","ng://@rs-pk/asset-management/lib/components/ui/modal/modal.component.ts","ng://@rs-pk/asset-management/lib/contanst/data-image.ts","ng://@rs-pk/asset-management/lib/components/ui/search-not-found/search-not-found.component.ts","ng://@rs-pk/asset-management/lib/components/partial/file-item/file-item.component.ts","ng://@rs-pk/asset-management/lib/components/partial/file-list/file-list.component.ts","ng://@rs-pk/asset-management/lib/components/partial/upload-file/upload-file.component.ts","ng://@rs-pk/asset-management/lib/components/partial/add-folder-dialog/add-folder-dialog.component.ts","ng://@rs-pk/asset-management/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.ts","ng://@rs-pk/asset-management/lib/components/partial/delete-dialog/delete-dialog.component.ts","ng://@rs-pk/asset-management/lib/components/partial/upload-dialog/upload-dialog.component.ts","ng://@rs-pk/asset-management/lib/components/partial/folder-item/folder-item.component.ts","ng://@rs-pk/asset-management/lib/components/partial/folder-list/folder-list.component.ts","ng://@rs-pk/asset-management/lib/components/partial/asset-list/asset-list.component.ts","ng://@rs-pk/asset-management/lib/pipes/file-size.pipe.ts","ng://@rs-pk/asset-management/lib/components/partial/asset-dialog/asset-dialog.component.ts","ng://@rs-pk/asset-management/lib/components/partial/asset-item/asset-item.component.ts","ng://@rs-pk/asset-management/lib/datasources/node-tree.datasource.ts","ng://@rs-pk/asset-management/lib/components/partial/node-tree/node-tree.component.ts","ng://@rs-pk/asset-management/lib/components/partial/breadcrumb/breadcrumb.component.ts","ng://@rs-pk/asset-management/lib/components/partial/search-box/search-box.component.ts","ng://@rs-pk/asset-management/lib/components/partial/sort-items/sort-items.component.ts","ng://@rs-pk/asset-management/lib/components/partial/asset-wrapper/asset-wrapper.component.ts","ng://@rs-pk/asset-management/lib/components/partial/node-details/node-details.component.ts","ng://@rs-pk/asset-management/lib/components/ui/drag-to-resize/drag-to-resize.component.ts","ng://@rs-pk/asset-management/lib/configs/admin.config.ts","ng://@rs-pk/asset-management/lib/pipes/datetime.pipe.ts","ng://@rs-pk/asset-management/lib/asset-management.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","r","ar","error","__spread","concat","AssetModel","_super","FolderTreeModel","tslib_1.__extends","DialogConfig","item","level","expandable","isLoading","IMAGE","DOCUMENT","NAME","CREATED_DATE","MODIFIED_DATE","DESC","ASC","AM_CONFIG","InjectionToken","BaseHttpClient","_env","handler","_this","request","first","url","options","requestHeader","headers","Injectable","Inject","args","HttpHandler","HttpClient","AssetService","dialog","_api","folderList$","BehaviorSubject","assetList$","openDialog$","dialogConfig","baseUrl","asset2Url","initOptionFiles","keyword","pageSize","pageIndex","folderTotal","fileTotal","sortBy","SortFilesBy","sortOrder","TypeSort","resetData","setAssetList","setFolderList","resetAsset","getFolderList","asObservable","folders","getAssetList","assets","pagination","setPagination","setDialogOpenStatus","status","getDialogOpenStatus","Total","PageIndex","PageSize","getAssetById","assetId","get","getChildrenFolders","_a","_b","isFilter","params","HttpParams","set","allowedType","getChildrenAssets","toString","MatDialog","eventDispatcher","Subject","AssetManagementService","getDispatcher","_dispatcher","dispatch","action","providedIn","state","globalLoading","selectedAssets","deletedAssetId","currentFolder","currentFolderId","currentFolderHierarchy","reloadCurrentFolder","reloadCurrentAssets","reloadCurrentNode","store","select","mapFn","pipe","map","distinctUntilChanged","NodeTreeService","assetService","svc","storedData$","loading$","initialData$","defineProperty","getValue","values","fetchChildrenFolder","id","toPromise","Data","initialData","dispatchRootId","type","ActionTypes","payload","AssetId","rootFolder","initData","Children","folder","DynamicFlatNode","isExpandable","getChildren","node","HaveChildren","addNode","asset","parentId","data","findIndex","ParentId","updateBreadcrumb","find","hierarchy","getFolderHierarchy","getAssetParent","parentHierarchy","parent","UploadAssetsService","files","fileNames","supportedSize","documentExtension","imageExtension","supportedTypes","messageErrors","size","ext","replace","maxLength","errorObs$","getErrorObs","setErrorObs","invalidFiles","filter","file","valid","deleteFile","index","splice","uploadMultipleAssets","parentAssetId","name","formData","FormData","append","nameSplit","split","post","FileService","addFolder","folderName","updateFile","fileName","description","replaceAsset","ids","HttpHeaders","getFileDetail","AssetManagementDialogComponent","dialogRef","destroy$","ngOnInit","initDialogConfig","takeUntil","subscribe","limit","selectAssets","close","ngOnDestroy","complete","Component","selector","template","decorators","MAT_DIALOG_DATA","MatDialogRef","AssetManagementComponent","isDialog","assetChange","EventEmitter","dispatcher","ACTIONS.ActionTypes","console","warn","bindSubscriber","res","openAssetsDialog","onAssetsChange","emit","config","open","autoFocus","panelClass","afterClosed","providers","Input","Output","DialogTriggerDirective","onClick","event","Directive","HostListener","DndDirective","imageDropped","onDragOver","evt","preventDefault","stopPropagation","onDragLeave","ondrop","dataTransfer","from","DIRECTIVES","DirectivesModule","NgModule","declarations","imports","CommonModule","exports","InputFileComponent","multiple","fileChange","onFileChange","target","ModalComponent","customHeader","imagePdf","SearchNotFoundComponent","domSanitizer","base64Image","bypassSecurityTrustUrl","DomSanitizer","FileItemComponent","uploadAssetService","base64Pdf","checkError","fileRemove","dataFile","errors","initDataFile","setDetailsFile","setErrorFile","names","getFiles","join","extFile","sizeFile","indexOf","reader","FileReader","readAsDataURL","onload","readerEvent","img","document","createElement","src","checkErrors","errorFiles","onChange","trim","onRemove","FileListComponent","uploadAssetsService","revalidate","newFiles","setFiles","getElementById","onDelFile","onChangeName","onEmitError","UploadFileComponent","isDragging","onDragover","_event","onDragleave","AddFolderDialogComponent","fb","fileService","errorMessage","form","FormControl","formGroup","group","Validators","required","controls","currentAssetId","_res","closeDialog","err","ResponseMessage","FormBuilder","EditFolderDialogComponent","toLowerCase","editFolder","DeleteDialogComponent","delete","handleAssetPaging","_err","log","UploadDialogComponent","changeDetectorRef","disabled","fileType","detectChanges","onValidate","hasError","uploadFiles","ChangeDetectorRef","FolderItemComponent","openFolder","renameFolder","OriginalFileName","deleteFolder","FolderListComponent","loading","unsubscribe$","AssetListComponent","ngOnChanges","changes","paginator","onSelectAsset","newSelectedAssets","switchMap","of","fetchChildrenAssets","pageChange","Meta","add","ViewChild","MatPaginator","static","FileSizePipe","units","transform","bytes","precision","isNaN","parseFloat","String","isFinite","unit","toFixed","Pipe","AssetDialogComponent","fileSize","linkDownload","isCopied","patternError","replaceMessage","isUpdating","FileTypeEnum","getAssetDetail","assetDetails","Extension","OriginalFileNameWithoutExtension","Description","acceptTypes","updateAsset","deleteAsset","validateFile","matchExt","extError","maxSize","match","onChangeDescription","copyText","content","selBox","style","position","left","top","opacity","appendChild","focus","execCommand","removeChild","timer","setTimeout","clearTimeout","AssetItemComponent","selectAsset","some","editAsset","NodeTreeDataSource","_treeControl","_database","dataChange","dataNodes","connect","collectionViewer","expansionModel","changed","change","added","removed","handleTreeControl","merge","viewChange","disconnect","forEach","toggleNode","slice","reverse","expand","newNode","nodes","child","count","reloadNode","NodeTreeComponent","nodeTreeService","isRoot","homeLoading","getLevel","hasChild","_nodeData","treeControl","FlatTreeControl","dataSource","rootId","handleReloadFolder","selectNode","backToHome","checked","getParent","currentLevel","currentNode","getNodeById","parent_1","updatedNode","BreadcrumbComponent","maximumShownLevel","navigateToFolder","SearchBoxComponent","folderId","bindingSubscriber","onSubmit","searchByName","clearSearch","combineLatest","SortItemsComponent","typeSort","sortList","onSortBy","toggleSortOrder","AssetWrapperComponent","header","nodeTreeMinWidth","nodeTreeMaxWidth","nodeTreeWidth","onResize","width","NodeDetailsComponent","fetchNodeDetails","fetchFolder","openUploadDialog","deleteAssets","DragToResizeComponent","resizeCompleted","grabber","oldX","minWidth","onMouseMove","resizer","clientX","onMouseUp","onMouseDown","offsetX","maxWidth","AdminConfig","date","dayMonth","dateTime","fullDateTime","dateTimeAM","apiDate","apiDateTime","apiDateTimeNoZ","apiDateMonthYear","urlParam","moment","moment_","LocalDateTimePipe","format","timeZone","utc0String","utc","toISOString","LocalDatePipe","SERVICES","COMPONENTS","ENTRY_COMPONENTS","AMFactory","AssetManagementModule","FormsModule","ReactiveFormsModule","MatDialogModule","MatButtonModule","MatInputModule","MatIconModule","MatTooltipModule","MatPaginatorModule","MatTableModule","MatProgressBarModule","MatMenuModule","MatCheckboxModule","MatTreeModule","MatSelectModule","MatProgressSpinnerModule","provide","APP_INITIALIZER","useFactory","deps","multi","entryComponents"],"mappings":";;;;;;;;;;;;;;oFAgBA,IAAIA,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,IAGrB,SAASO,EAAUR,EAAGC,GAEzB,SAASQ,IAAOC,KAAKC,YAAcX,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEY,UAAkB,OAANX,EAAaC,OAAOW,OAAOZ,IAAMQ,EAAGG,UAAYX,EAAEW,UAAW,IAAIH,GAG5E,IAAIK,EAAW,WAQlB,OAPAA,EAAWZ,OAAOa,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAIZ,KADTW,EAAIG,UAAUF,GACOhB,OAAOU,UAAUL,eAAee,KAAKL,EAAGX,KAAIU,EAAEV,GAAKW,EAAEX,IAE9E,OAAOU,IAEKO,MAAMb,KAAMU,YA8BzB,SAASI,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,IAAW,MAAOG,GAAKL,EAAOK,IACpF,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,IAAW,MAAOG,GAAKL,EAAOK,IACvF,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,OAITO,KAAKR,EAAWK,GAClGH,GAAMN,EAAYA,EAAUL,MAAME,EAASC,GAAc,KAAKS,WAI/D,SAASM,EAAYhB,EAASiB,GACjC,IAAsGC,EAAGC,EAAG5B,EAAG6B,EAA3GC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPhC,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAOiC,KAAM,GAAIC,IAAK,IAChG,OAAOL,EAAI,CAAEV,KAAMgB,EAAK,GAAIC,MAASD,EAAK,GAAIE,OAAUF,EAAK,IAAwB,mBAAXG,SAA0BT,EAAES,OAAOC,UAAY,WAAa,OAAO7C,OAAUmC,EACvJ,SAASM,EAAKhC,GAAK,OAAO,SAAUqC,GAAK,OACzC,SAAcC,GACV,GAAId,EAAG,MAAM,IAAIe,UAAU,mCAC3B,KAAOZ,GAAG,IACN,GAAIH,EAAI,EAAGC,IAAM5B,EAAY,EAARyC,EAAG,GAASb,EAAU,OAAIa,EAAG,GAAKb,EAAS,SAAO5B,EAAI4B,EAAU,SAAM5B,EAAEM,KAAKsB,GAAI,GAAKA,EAAET,SAAWnB,EAAIA,EAAEM,KAAKsB,EAAGa,EAAG,KAAKlB,KAAM,OAAOvB,EAE3J,OADI4B,EAAI,EAAG5B,IAAGyC,EAAK,CAAS,EAARA,EAAG,GAAQzC,EAAEiB,QACzBwB,EAAG,IACP,KAAK,EAAG,KAAK,EAAGzC,EAAIyC,EAAI,MACxB,KAAK,EAAc,OAAXX,EAAEC,QAAgB,CAAEd,MAAOwB,EAAG,GAAIlB,MAAM,GAChD,KAAK,EAAGO,EAAEC,QAASH,EAAIa,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKX,EAAEI,IAAIS,MAAOb,EAAEG,KAAKU,MAAO,SACxC,QACI,KAAkB3C,GAAZA,EAAI8B,EAAEG,MAAY5B,OAAS,GAAKL,EAAEA,EAAEK,OAAS,MAAkB,IAAVoC,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEX,EAAI,EAAG,SACjG,GAAc,IAAVW,EAAG,MAAczC,GAAMyC,EAAG,GAAKzC,EAAE,IAAMyC,EAAG,GAAKzC,EAAE,IAAM,CAAE8B,EAAEC,MAAQU,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYX,EAAEC,MAAQ/B,EAAE,GAAI,CAAE8B,EAAEC,MAAQ/B,EAAE,GAAIA,EAAIyC,EAAI,MAC7D,GAAIzC,GAAK8B,EAAEC,MAAQ/B,EAAE,GAAI,CAAE8B,EAAEC,MAAQ/B,EAAE,GAAI8B,EAAEI,IAAIU,KAAKH,GAAK,MACvDzC,EAAE,IAAI8B,EAAEI,IAAIS,MAChBb,EAAEG,KAAKU,MAAO,SAEtBF,EAAKf,EAAKpB,KAAKG,EAASqB,GAC1B,MAAOV,GAAKqB,EAAK,CAAC,EAAGrB,GAAIQ,EAAI,EAAI,QAAWD,EAAI3B,EAAI,EACtD,GAAY,EAARyC,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAExB,MAAOwB,EAAG,GAAKA,EAAG,QAAK,EAAQlB,MAAM,GArB9BL,CAAK,CAACf,EAAGqC,MA8CtD,SAASK,EAAOC,EAAG3C,GACtB,IAAI4C,EAAsB,mBAAXT,QAAyBQ,EAAER,OAAOC,UACjD,IAAKQ,EAAG,OAAOD,EACf,IAAmBE,EAAY5B,EAA3BlB,EAAI6C,EAAEzC,KAAKwC,GAAOG,EAAK,GAC3B,IACI,WAAc,IAAN9C,GAAgBA,KAAM,MAAQ6C,EAAI9C,EAAEiB,QAAQI,MAAM0B,EAAGL,KAAKI,EAAE/B,OAExE,MAAOiC,GAAS9B,EAAI,CAAE8B,MAAOA,GACjC,QACQ,IACQF,IAAMA,EAAEzB,OAASwB,EAAI7C,EAAU,SAAI6C,EAAEzC,KAAKJ,GAE1D,QAAkB,GAAIkB,EAAG,MAAMA,EAAE8B,OAE7B,OAAOD,EAGJ,SAASE,IACZ,IAAK,IAAIF,EAAK,GAAI/C,EAAI,EAAGA,EAAIE,UAAUC,OAAQH,IAC3C+C,EAAKA,EAAGG,OAAOP,EAAOzC,UAAUF,KACpC,OAAO+C,ECzHX,IAAAI,EAAA,cA6BA,SAAAC,GAAA,SAAAC,mDAAqCC,EAAAA,EAAAA,GAArC,CAAqCH,GASrC,IAAAI,EAAA,aC5DA,MACI,SACSC,EACAC,EACAC,EACAC,QAFA,IAAAF,IAAAA,EAAA,QACA,IAAAC,IAAAA,GAAA,QACA,IAAAC,IAAAA,GAAA,GAHAnE,KAAAgE,KAAAA,EACAhE,KAAAiE,MAAAA,EACAjE,KAAAkE,WAAAA,EACAlE,KAAAmE,UAAAA,UCPXC,MAAQ,QACRC,SAAW,eCDXC,KAAA,EACAC,aAAA,EACAC,cAAA,+FAIAC,KAAA,EACAC,IAAA,mCCAF,IAAaC,EAAY,IAAIC,EAAAA,eAC3B,0CCAD,SAAAC,EAC4BC,EAC3BC,GAFD,IAAAC,EAGCpB,EAAAhD,KAAAZ,KAAM+E,IAAQ/E,YAFagF,EAAAF,KAAAA,IA8B7B,OAhCoChB,EAAAA,EAAAA,GAOnCe,EAAA3E,UAAA+E,QAAA,SACCC,EACAC,EACAC,QAAA,IAAAA,IAAAA,EAAA,IAUQ,IAAAC,EAAArF,KAAA8E,KAAAO,cAUR,OARKD,IACJA,EAAU,IAGPC,IACHD,EAAQE,QAAUD,GAGZzB,EAAA1D,UAAM+E,QAAOrE,KAAAZ,KAAA,EAAkBmF,EAAG,wBA/B1CI,EAAAA,+EAGEC,EAAAA,OAAMC,KAAA,CAACd,YAVWe,EAAAA,eAwCrBb,GAhCoCc,EAAAA,YCRpC,IAAAC,EAAA,WAkCE,SAAAA,EAC6Bd,EACpBe,EACCC,GAFmB9F,KAAA8E,KAAAA,EACpB9E,KAAA6F,OAAAA,EACC7F,KAAA8F,KAAAA,EAlBF9F,KAAA+F,YAAgD,IAAIC,EAAAA,gBAC1D,MAEMhG,KAAAiG,WAA4C,IAAID,EAAAA,gBAAgB,MAChEhG,KAAAkG,YAAwC,IAAIF,EAAAA,gBAAgB,MAQ7DhG,KAAAmG,aAA6B,IAAIpC,EAQtC/D,KAAKoG,QAAUpG,KAAK8E,KAAKuB,UACzBrG,KAAKsG,kBAsGT,OAnGUV,EAAA1F,UAAAoG,gBAAR,WACEtG,KAAKuG,QAAU,GACfvG,KAAKwG,SAAW,GAChBxG,KAAKyG,UAAY,EACjBzG,KAAK0G,YAAc,EACnB1G,KAAK2G,UAAY,EACjB3G,KAAK4G,OAASC,EAAYrC,cAC1BxE,KAAK8G,UAAYC,EAAStC,MAGpBmB,EAAA1F,UAAA8G,UAAR,WACEhH,KAAKiH,aAAa,MAClBjH,KAAKkH,cAAc,OAGrBtB,EAAA1F,UAAAiH,WAAA,WACEnH,KAAKsG,kBACLtG,KAAKgH,aAGPpB,EAAA1F,UAAAkH,cAAA,WACE,OAAOpH,KAAK+F,YAAYsB,gBAG1BzB,EAAA1F,UAAAgH,cAAA,SAAcI,EAA0BZ,GACtC1G,KAAK0G,YAAcA,GAAe,EAClC1G,KAAK+F,YAAYtE,KAAK6F,IAGxB1B,EAAA1F,UAAAqH,aAAA,WACE,OAAOvH,KAAKiG,WAAWoB,gBAGzBzB,EAAA1F,UAAA+G,aAAA,SAAaO,EAAsBC,GACjCzH,KAAK0H,cAAcD,GACnBzH,KAAKiG,WAAWxE,KAAK+F,IAGvB5B,EAAA1F,UAAAyH,oBAAA,SAAoBC,GACnB5H,KAAKkG,YAAYzE,KAAKmG,IAGvBhC,EAAA1F,UAAA2H,oBAAA,WACE,OAAO7H,KAAKkG,YAAYmB,gBAIlBzB,EAAA1F,UAAAwH,cAAR,SAAsBD,GAChBA,IACFzH,KAAK2G,UAAYc,EAAWK,MAC5B9H,KAAKyG,UAAYgB,EAAWM,UAC5B/H,KAAKwG,SAAWiB,EAAWO,WAIxBpC,EAAA1F,UAAA+H,aAAP,SAAoBC,OACZ/C,EAASnF,KAAKoG,QAAO,iBAAiB8B,EAC5C,OAAOlI,KAAK8F,KAAKqC,IAAsBhD,IAGlCS,EAAA1F,UAAAkI,mBAAP,SAA0BC,OAAEH,EAAAG,EAAAH,QAASI,EAAAD,EAAAE,SAAAA,OAAA,IAAAD,GAAAA,EAC7BnD,EAASnF,KAAKoG,QAAO,oBACvBoC,GAAS,IAAIC,EAAAA,YAAaC,IAAI,SAAU,QAAQA,IAAI,WAAY,QAYpE,OAVIR,IACFM,EAASA,EAAOE,IAAI,UAAWR,IAE7BK,GAAYvI,KAAKuG,QAAQ5F,SAC3B6H,EAASA,EAAOE,IAAI,UAAW1I,KAAKuG,SAAW,KAE7CvG,KAAKmG,aAAawC,cACpBH,EAASA,EAAOE,IAAI,WAAY1I,KAAKmG,aAAawC,cAG7C3I,KAAK8F,KAAKqC,IAAsBhD,EAAK,CAAEqD,OAAMA,KAG/C5C,EAAA1F,UAAA0I,kBAAP,SAAyBP,OAAEH,EAAAG,EAAAH,QAASzB,EAAA4B,EAAA5B,UAC5BtB,EAASnF,KAAKoG,QAAO,oBACvBoC,GAAS,IAAIC,EAAAA,YACdC,IAAI,WAAY1I,KAAKwG,SAASqC,YAC9BH,IAAI,YAAajC,GAAazG,KAAKyG,UAAUoC,YAC7CH,IAAI,SAAU,SACdA,IAAI,WAAY,SAChBA,IAAI,WAAY1I,KAAK8G,UAAU+B,YAC/BH,IAAI,cAAe1I,KAAK4G,OAAOiC,YAYlC,OAVIX,IACFM,EAASA,EAAOE,IAAI,UAAWR,IAE7BlI,KAAKuG,QAAQ5F,SACf6H,EAASA,EAAOE,IAAI,UAAW1I,KAAKuG,SAAW,KAE7CvG,KAAKmG,aAAawC,cACpBH,EAASA,EAAOE,IAAI,WAAY1I,KAAKmG,aAAawC,cAG7C3I,KAAK8F,KAAKqC,IAAsBhD,EAAK,CAAEqD,OAAMA,yBA3HvDjD,EAAAA,+EAkBIC,EAAAA,OAAMC,KAAA,CAACd,YAjCHmE,EAAAA,iBAYAjE,KAgITe,EA9IA,OCIMmD,EAAkB,IAAIC,EAAAA,QAE5BC,EAAA,WAOE,SAAAA,YAGAA,EAAA/I,UAAAgJ,cAAA,WAKE,OAJKlJ,KAAKmJ,cACRnJ,KAAKmJ,YAAcJ,GAGd/I,KAAKmJ,aAGdF,EAAA/I,UAAAkJ,SAAA,SAASC,GACPrJ,KAAKkJ,gBAAgBzH,KAAK4H,wBAnB7B9D,EAAAA,WAAUE,KAAA,CAAC,CACV6D,WAAY,wJADd,SCGuB,uCAGC,gCACE,uCACT,6BAGS,mCACH,iCACG,oCACO,4CAGT,kCCNpBC,GAAsB,CACxBC,eAAe,EACfC,eAAgB,GAChBC,eAAgB,KAChBC,cAAe,KACfC,gBAAiB,KACjBC,uBAAwB,GACxBC,qBAAqB,EACrBC,qBAAqB,EACrBC,mBAAmB,GAGRC,GAAQ,IAAIjE,EAAAA,gBAA8BuD,IAwF1CW,GAAM,SAAIC,GACrB,OAAOF,GAAM5C,eAAe+C,KAC1BC,EAAAA,KAAG,SAAEzC,GAAyB,OAAAuC,EAAMvC,MACpC0C,EAAAA,uCC/GF,SAAAC,EAAoBC,EAAoCC,GAApCzK,KAAAwK,aAAAA,EAAoCxK,KAAAyK,IAAAA,EAEjDzK,KAAA0K,YAAc,IAAI1E,EAAAA,gBAA8B,IAChDhG,KAAA2K,SAAW,IAAI3E,EAAAA,iBAAyB,GACxChG,KAAA4K,aAAmD,IAAI5E,EAAAA,gBAAgB,IA4FhF,OAzFExG,OAAAqL,eAAIN,EAAArK,UAAA,OAAI,KAAR,WACE,OAAOF,KAAK0K,YAAYI,gBAE1B,SAASC,GACP/K,KAAK0K,YAAYjJ,KAAKsJ,oCAGVR,EAAArK,UAAA8K,oBAAd,SAAkCC,mGAEf,6BAAA,CAAA,EAAMjL,KAAKwK,aAAapC,mBAAmB,CAAEF,QAAS+C,EAAI1C,UAAU,IAAS2C,oBAC5F,OADMtJ,EAASyG,EAAA/F,QAEb,CAAA,EAAOV,EAAOuJ,gDAGlB,MAAA,CAAA,WAIWZ,EAAArK,UAAAkL,YAAb,SACE/C,OAAEgD,EAAAhD,EAAAgD,wHAGa,OADXA,GAAkBrL,KAAK2K,SAASlJ,MAAK,GAC1B,CAAA,EAAMzB,KAAKwK,aAAapC,mBAAmB,CAAEG,UAAU,IAAS2C,oBAC/E,OADMtJ,EAAS0G,EAAAhG,SAEX+I,IACFrL,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAAS5J,EAAOuJ,KAAKM,UAEvBzL,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAAS,MAGbxL,KAAK0L,WAAa9J,EAAOuJ,KACnBQ,EAAW/J,EAAOuJ,KAAKS,SAASvB,KAAG,SACtCwB,GAAW,OAAA,IAAIC,EAAgBD,EAAQ,EAAG7G,EAAK+G,aAAaF,OAE/D7L,KAAK4K,aAAanJ,KAAKkK,GAEnBN,GAAkBrL,KAAK2K,SAASlJ,MAAK,GACzC,CAAA,EAAOzB,KAAK4K,aAAaE,aAlBV,CAAA,WAqBJP,EAAArK,UAAA8L,YAAb,SAAyBC,6FAChB,MAAA,CAAA,EAAMjM,KAAKgL,oBAAoBiB,EAAKR,iBAA3C,MAAA,CAAA,EAAOpD,EAAA/F,gBAGFiI,EAAArK,UAAA6L,aAAP,SAAoBE,GAClB,OAAOA,EAAKC,cAIP3B,EAAArK,UAAAiM,QAAP,SAAeC,EAAmBC,OAC5BC,EAAI7I,EAAOzD,KAAKsM,MACNA,EAAKC,WAAS,SAAEN,GAAS,OAAAA,EAAKR,UAAYW,EAAMX,WAClD,IACVa,EAAI7I,EAAO6I,EAAI,CAAAlM,EAAA,GAAOgM,EAAK,CAAEI,SAAUH,GAAsB,UAE/DrM,KAAKsM,KAAOA,GAGD/B,EAAArK,UAAAuM,iBAAb,SAA8BxB,qFACtBY,EAAS7L,KAAKsM,KAAKI,MAAI,SAAEjM,GAAM,OAAAA,EAAEgL,UAAYR,QAE3C0B,EAAY3M,KAAK4M,mBAAmBf,GAC1C7L,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAASmB,gBAKPpC,EAAArK,UAAA2M,eAAR,SAAuBZ,GACrB,OAAOjM,KAAKsM,KAAKI,MAAI,SAAEjM,GAAM,OAAAA,EAAEgL,UAAYQ,EAAKO,aAG1CjC,EAAArK,UAAA0M,mBAAR,SAA2BX,GACzB,IAAKA,EACH,MAAO,GAIT,QAFIa,EAA0C,GAC1CC,EAAS/M,KAAK6M,eAAeZ,GAC1Bc,GACLD,EAAerJ,EAAA,CAAIsJ,GAAWD,GAC9BC,EAAS/M,KAAK6M,eAAeE,GAE/B,OAAAtJ,EAAWqJ,EAAe,CAAEb,yBAhG/B1G,EAAAA,sDAFQK,SAHAqD,KAuGTsB,uBC1EE,SAAAyC,EAC6BlI,EACpBe,EACCC,GAFmB9F,KAAA8E,KAAAA,EACpB9E,KAAA6F,OAAAA,EACC7F,KAAA8F,KAAAA,EA1BF9F,KAAAiN,MAAgB,GACjBjN,KAAAkN,UAAmD,GAC1ClN,KAAAmN,cAAgB,SAChBnN,KAAAoN,kBAAoB,CAAC,QACrBpN,KAAAqN,eAAiB,CAC/B,OACA,OACA,QACA,OACA,OACA,YAEKrN,KAAAsN,eAAc7J,EAAOzD,KAAKqN,eAAmBrN,KAAKoN,mBACzCpN,KAAAuN,cAAgB,CAC9BC,KAAM,2BACNC,IAAK,iCACLC,QAAS,kEACTC,UAAW,yCAGL3N,KAAA4N,UAAkC,IAAI5H,EAAAA,iBAAgB,GAQ5DhG,KAAKoG,QAAUpG,KAAK8E,KAAKuB,UAgD7B,OA7CE2G,EAAA9M,UAAA2N,YAAA,WACE,OAAO7N,KAAK4N,UAAUvG,gBAGxB2F,EAAA9M,UAAA4N,YAAA,SAAYtK,GACVxD,KAAK4N,UAAUnM,KAAK+B,IAGtBhE,OAAAqL,eAAImC,EAAA9M,UAAA,WAAQ,KAAZ,WACE,OAAOF,KAAKiN,uCAGdzN,OAAAqL,eAAImC,EAAA9M,UAAA,WAAQ,KAAZ,SAAa+M,GACXjN,KAAKiN,MAAQA,mCAGfzN,OAAAqL,eAAImC,EAAA9M,UAAA,aAAU,KAAd,eACQ6N,EAAe/N,KAAKkN,UAAUc,QAAM,SAACC,GAAQ,OAACA,EAAKC,SACzD,OAAOlO,KAAKkN,UAAUvM,QAAUoN,EAAapN,OAAS,mCAGxDnB,OAAAqL,eAAImC,EAAA9M,UAAA,cAAW,KAAf,WACE,OAAOF,KAAKkN,UAAUc,QAAM,SAACC,GAAQ,OAACA,EAAKC,SAAOvN,wCAG7CqM,EAAA9M,UAAAiO,WAAP,SAAkBC,GAChBpO,KAAKiN,MAAMoB,OAAOD,EAAO,GACzBpO,KAAKkN,UAAUmB,OAAOD,EAAO,IAG/BpB,EAAA9M,UAAAoO,qBAAA,SAAqBC,GACX,IAAAtB,EAAAjN,KAAAiN,MACFC,EAAYlN,KAAKkN,UAAU7C,KAAG,SAAC4D,GAAQ,OAAAA,EAAKO,QAC5CC,EAAW,IAAIC,SACrBD,EAASE,OAAO,gBAAiBJ,GACjCE,EAASE,OAAO,YAAa,wCAE7B,IAAK,IAAInO,EAAI,EAAGA,EAAIyM,EAAMtM,OAAQH,IAAK,KAC/BoO,EAAY3B,EAAMzM,GAAGgO,KAAKK,MAAM,KAChCpB,EAAM,IAAImB,EAAUP,OAAOO,EAAUjO,OAAS,EAAG,GAAG,GAC1D8N,EAASE,OAAO,QAAS1B,EAAMzM,GAAI,GAAG0M,EAAU1M,GAAKiN,GAGvD,OAAOzN,KAAK8F,KAAKgJ,KAAa9O,KAAKoG,QAAO,eAAgBqI,wBA5E7DlJ,EAAAA,+EA0BIC,EAAAA,OAAMC,KAAA,CAACd,YA/BHmE,EAAAA,iBAEAjE,KAiFTmI,KCpFA,IAAA+B,GAAA,WAUE,SAAAA,EAAuCjK,EAAcgB,GAAd9F,KAAA8E,KAAAA,EAAc9E,KAAA8F,KAAAA,EACnD9F,KAAKoG,QAAUpG,KAAK8E,KAAKuB,UA6C7B,OA1CE0I,EAAA7O,UAAA8O,UAAA,SAAU3G,OAAEkG,EAAAlG,EAAAkG,cAAeU,EAAA5G,EAAA4G,WACnBzG,GAAS,IAAIC,EAAAA,YAChBC,IAAI,gBAAiB6F,GACrB7F,IAAI,aAAcuG,GACrB,OAAOjP,KAAK8F,KAAKgJ,KAAa9O,KAAKoG,QAAO,kBAAmB,KAAM,CACjEoC,OAAMA,KAIVuG,EAAA7O,UAAAgP,WAAA,SAAW7G,OAAEH,EAAAG,EAAAH,QAASiH,EAAA9G,EAAA8G,SAAUC,EAAA/G,EAAA+G,YAC1B5G,GAAS,IAAIC,EAAAA,YACdC,IAAI,UAAWR,GACfQ,IAAI,WAAYyG,GAInB,OAHIC,IACF5G,EAASA,EAAOE,IAAI,cAAe0G,IAE9BpP,KAAK8F,KAAKgJ,KAAa9O,KAAKoG,QAAO,eAAgB,KAAM,CAAEoC,OAAMA,KAG1EuG,EAAA7O,UAAAmP,aAAA,SAAanH,EAAiB+F,OACtBQ,EAAW,IAAIC,SAKrB,OAJAD,EAASE,OAAO,UAAWzG,GAC3BuG,EAASE,OAAO,QAASV,GACzBQ,EAASE,OAAO,cAAe,QAExB3O,KAAK8F,KAAKgJ,KAAa9O,KAAKoG,QAAO,gBAAiBqI,IAG7DM,EAAA7O,UAAAiO,WAAA,SAAWmB,OACHhK,GAAU,IAAIiK,EAAAA,aAAc7G,IAAI,eAAgB,oBAEtD,OAAO1I,KAAK8F,KAAKb,QAAQ,SAAajF,KAAKoG,QAAO,eAAgB,CAChEd,QAAOA,EACPtD,KAAMsN,KAIVP,EAAA7O,UAAAsP,cAAA,SAAcvE,OACNzC,GAAS,IAAIC,EAAAA,YAAaC,IAAI,uBAAwB,QAE5D,OAAO1I,KAAK8F,KAAKqC,IAAYnI,KAAKoG,QAAO,iBAAiB6E,EAAM,CAAEzC,OAAMA,yBAhD3EjD,EAAAA,+EAIcC,EAAAA,OAAMC,KAAA,CAACd,YAPbE,KAqDTkK,EAxDA,GCAA,IAAAU,GAAA,WAcE,SAAAA,EACkCnD,EACzBoD,EACClF,GAFwBxK,KAAAsM,KAAAA,EACzBtM,KAAA0P,UAAAA,EACC1P,KAAAwK,aAAAA,EAEFxK,KAAA2P,SAA6B,IAAI3G,EAAAA,QAClChJ,KAAAyJ,eAAoC,GAmC7C,OAjCEgG,EAAAvP,UAAA0P,SAAA,WAAA,IAAA5K,EAAAhF,KACEA,KAAK6P,iBAAiB7P,KAAKsM,MAC3BpC,IAAM,SAAEX,GAAU,OAAAA,EAAME,kBACrBW,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SAAEtG,GACVzE,EAAKyE,eAAiBA,MAI5BjK,OAAAqL,eAAI4E,EAAAvP,UAAA,WAAQ,KAAZ,WACU,IAAA8P,EAAAhQ,KAAAsM,KAAA0D,MACR,OACIhQ,KAAKyJ,iBAAmBzJ,KAAKyJ,eAAe9I,QAC7CqP,GAAShQ,KAAKyJ,eAAe9I,OAASqP,mCAI3CP,EAAAvP,UAAA+P,aAAA,WACEjQ,KAAK0P,UAAUQ,MAAMlQ,KAAKyJ,iBAG5BgG,EAAAvP,UAAA2P,iBAAA,SAAiBvD,GACVA,IAGLtM,KAAKwK,aAAarE,aAAemG,IAGnCmD,EAAAvP,UAAAiQ,YAAA,WACEnQ,KAAKwK,aAAarE,aAAe,IAAIpC,EACrC/D,KAAK2P,SAASlO,MAAK,GACnBzB,KAAK2P,SAASS,gCA7CjBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,8BACVC,SAAA,ggDANmBxM,EAAYyM,WAAA,CAAA,CAAAlF,KAW5B9F,EAAAA,OAAMC,KAAA,CAACgL,EAAAA,0BAdHC,EAAAA,oBAIA9K,KAkDT6J,EAvDA,GCAA,IAAAkB,GAAA,WA+BE,SAAAA,EACU9K,EACA4E,EACAD,GAFAxK,KAAA6F,OAAAA,EACA7F,KAAAyK,IAAAA,EACAzK,KAAAwK,aAAAA,EAVDxK,KAAA4Q,UAAa,EAGZ5Q,KAAA6Q,YAAc,IAAIC,EAAAA,aAEpB9Q,KAAA2P,SAA6B,IAAI3G,EAAAA,QAuD3C,OA/CE2H,EAAAzQ,UAAA0P,SAAA,WLNyB,IAAImB,GAAAA,EKOZ/Q,KAAKyK,IAAIvB,iBLD1B6H,EAAWhB,WAAS,SAAE1G,GACpB,OAAQA,EAAOiC,MACb,KAAK0F,EACHzH,GAAKnJ,EAAA,GACAmJ,GAAK,CACRE,eAAgBJ,EAAOmC,UAEzBvB,GAAMxI,KAAK8H,IACX,MAEF,KAAKyH,EACHzH,GAAKnJ,EAAA,GACAmJ,GAAK,CACRC,cAAeH,EAAOmC,UAExBvB,GAAMxI,KAAK8H,IACX,MAEF,KAAKyH,EACHzH,GAAKnJ,EAAA,GACAmJ,GAAK,CACRI,cAAavJ,EAAA,GAAOiJ,EAAOmC,WAE7BvB,GAAMxI,KAAK8H,IACX,MAEF,KAAKyH,EACHzH,GAAKnJ,EAAA,GACAmJ,GAAK,CACRO,qBAAsBP,GAAMO,sBAE9BG,GAAMxI,KAAK8H,IACX,MAEF,KAAKyH,EACHzH,GAAKnJ,EAAA,GACAmJ,GAAK,CACRQ,qBAAsBR,GAAMQ,sBAE9BE,GAAMxI,KAAK8H,IACX,MAEF,KAAKyH,GACHzH,GAAKnJ,EAAA,GACAmJ,GAAK,CACRS,mBAAoBT,GAAMS,oBAE5BC,GAAMxI,KAAK8H,IACX,MAEF,KAAKyH,EACHzH,GAAKnJ,EAAA,GACAmJ,GAAK,CACRM,uBAAsBpG,EAAM4F,EAAOmC,WAErCvB,GAAMxI,KAAK8H,IACX,MAEF,KAAKyH,EACHzH,GAAKnJ,EAAA,GACAmJ,GAAK,CACRK,gBAAiBP,EAAOmC,UAE1BvB,GAAMxI,KAAK8H,IACX,MAEF,KAAKyH,EACHzH,GAAKnJ,EAAA,GACAmJ,GAAK,CACRG,eAAgBL,EAAOmC,UAEzBvB,GAAMxI,KAAK8H,QA3Ef0H,QAAQC,KAAK,yBKMblR,KAAKmR,kBAGPR,EAAAzQ,UAAAiR,eAAA,WAAA,IAAAnM,EAAAhF,KACEA,KAAKwK,aACF3C,sBACAuC,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SAAEqB,GACNA,GACFpM,EAAKqM,uBAKbV,EAAAzQ,UAAAoR,eAAA,SAAe9J,GACRA,GAGLxH,KAAK6Q,YAAYU,KAAK/J,IAGxBmJ,EAAAzQ,UAAAmR,iBAAA,WAAA,IAAArM,EAAAhF,KACQwR,EAAuB,CAC3BxB,MAAOhQ,KAAKgQ,MACZrH,YAAa3I,KAAK2I,aAEF3I,KAAK6F,OAAO4L,KAAKhC,GAAgC,CACjEiC,WAAW,EACXC,WAAY,oBACZrF,KAAMkF,IAGLI,cACAxH,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SAAEqB,GACNA,GACFpM,EAAK6L,YAAYU,KAAKH,OAK9BT,EAAAzQ,UAAAiQ,YAAA,WACEnQ,KAAK2P,SAASlO,MAAK,GACnBzB,KAAK2P,SAASS,gCAjEjBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,uBACVC,SAAA,6KAEAsB,UAAW,CAACjM,2YAbLkD,EAAAA,iBAGAG,SAGArD,uCAUNkM,EAAAA,qBACAA,EAAAA,2BACAA,EAAAA,2BACAC,EAAAA,UAyDHpB,EApFA,GCAA,IAAAqB,GAAA,WAOE,SAAAA,EAAoBxH,GAAAxK,KAAAwK,aAAAA,EAQtB,OANEwH,EAAA9R,UAAA+R,QADA,SACQC,GACNlS,KAAKqR,oBAEPW,EAAA9R,UAAAmR,iBAAA,WACErR,KAAKwK,aAAa7C,qBAAoB,wBAVzCwK,EAAAA,UAAS1M,KAAA,CAAC,CACT6K,SAAU,kEAHH1K,sCAONwM,EAAAA,aAAY3M,KAAA,CAAC,QAAS,CAAC,qBAO1BuM,EAfA,GCAA,IAAAK,GAAA,WAEA,SAAAA,IAIYrS,KAAAsS,aAAe,IAAIxB,EAAAA,aAqB/B,OAlBwCuB,EAAAnS,UAAAqS,WAAtC,SAAiDC,GAC/CA,EAAIC,iBACJD,EAAIE,mBAIwCL,EAAAnS,UAAAyS,YAA9C,SAA0DH,GACxDA,EAAIC,iBACJD,EAAIE,mBAGmCL,EAAAnS,UAAA0S,OAAzC,SAAgDV,GAC9CA,EAAMO,iBACNP,EAAMQ,sBACFzF,EAAQiF,EAAMW,aAAa5F,MAC/BA,EAAQtN,MAAMmT,KAAK7F,GACnBjN,KAAKsS,aAAaf,KAAKtE,wBAvB1BkF,EAAAA,UAAS1M,KAAA,CAAC,CACT6K,SAAU,yDAGTyB,EAAAA,2BAGAK,EAAAA,aAAY3M,KAAA,CAAC,WAAY,CAAC,gCAM1B2M,EAAAA,aAAY3M,KAAA,CAAC,YAAa,CAAC,2BAK3B2M,EAAAA,aAAY3M,KAAA,CAAC,OAAQ,CAAC,cAOzB4M,EA3BA,GCKA,IAAaU,GAAa,CAACV,GAAcL,IAEzCgB,GAAA,WAAA,SAAAA,KAK+B,2BAL9BC,EAAAA,SAAQxN,KAAA,CAAC,CACRyN,aAAYzP,EAAMsP,IAClBI,QAAS,CAACC,EAAAA,cACVC,QAAO5P,EAAMsP,QAEgBC,EAL/B,GCPAM,GAAA,WAaE,SAAAA,IAJStT,KAAAuT,UAAW,EAEIvT,KAAAwT,WAAa,IAAI1C,EAAAA,aAa3C,OATEwC,EAAApT,UAAAuT,aAAA,SAAavB,GACL,IAAAjF,EAAAiF,EAAAwB,OAAAzG,MACFA,EAAMtM,OAAS,IAInBsM,EAAQtN,MAAMmT,KAAK7F,GACnBjN,KAAKwT,WAAWjC,KAAKtE,yBApBxBoD,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,iBACVC,SAAA,+fAICuB,EAAAA,wBACAA,EAAAA,2BACAA,EAAAA,0BACAC,EAAAA,OAAMtM,KAAA,CAAC,mBAaV6N,EAxBA,GCAA,IAAAK,GAAA,WAWE,SAAAA,IAFS3T,KAAA4T,cAAe,EAK1B,OADED,EAAAzT,UAAA0P,SAAA,iCAXDS,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,YACVC,SAAA,w2HAICuB,EAAAA,4BACAA,EAAAA,SAKH6B,EAdA,GCCA,IAMaE,GACX,y6MCRFC,GAAA,WAWE,SAAAA,EAAoBC,GAAA/T,KAAA+T,aAAAA,EADb/T,KAAAgU,YAAchU,KAAK+T,aAAaE,uBDLvC,0oCCSF,OADEH,EAAA5T,UAAA0P,SAAA,iCATDS,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,uBACVC,SAAA,8OAJO2D,EAAAA,gBAYTJ,EAdA,GCAA,IAAAK,GAAA,WA2BE,SAAAA,EACUJ,EACDK,GADCpU,KAAA+T,aAAAA,EACD/T,KAAAoU,mBAAAA,EAnBFpU,KAAAqU,UAAYrU,KAAK+T,aAAaE,uBAAuBJ,IAElD7T,KAAAsU,WAAa,IAAIxD,EAAAA,aACjB9Q,KAAAwT,WAAa,IAAI1C,EAAAA,aACjB9Q,KAAAuU,WAAa,IAAIzD,EAAAA,aACpB9Q,KAAAwU,SAAW,CAChBhG,KAAM,GACNhB,KAAM,EACNC,IAAK,GACLnB,KAAM,KACNmI,OAAQ,CACN9G,WAAW,EACXF,KAAK,EACLD,MAAM,IAgFZ,OAvEE2G,EAAAjU,UAAA0P,SAAA,WACE5P,KAAK0U,gBAGCP,EAAAjU,UAAAwU,aAAR,WACE1U,KAAK2U,iBACL3U,KAAK4U,gBAGCT,EAAAjU,UAAAyU,eAAR,WACQ,IAAAtM,EAAArI,KAAAiO,KAAEO,EAAAnG,EAAAmG,KAAMhB,EAAAnF,EAAAmF,KAERqH,EADE7U,KAAAoU,mBAAAU,SACY9G,QAAM,SAACC,GAAQ,OAAAA,EAAKO,OAASA,KAC3CI,EAAYJ,EAAKK,MAAM,KACzBgG,EAAMlU,OAAS,IACjBiO,EAAU,GAAQA,EAAU,GAAE,KAAIiG,EAAMlU,OAAS,GAAC,KAEpDX,KAAKwU,SAAS/G,IAAMmB,EAAUP,OAAOO,EAAUjO,OAAS,EAAG,GAAG,GAC9DX,KAAKwU,SAAShG,KAAOI,EAAUmG,KAAK,KACpC/U,KAAKwU,SAAShH,KAAOA,GAGf2G,EAAAjU,UAAA0U,aAAR,WAAA,IAAA5P,EAAAhF,KACQqI,EAAArI,KAAAoU,mBAAE9G,EAAAjF,EAAAiF,eAAgBH,EAAA9E,EAAA8E,cAAeD,EAAA7E,EAAA6E,UACjC5E,EAAAtI,KAAAwU,SAAEhG,EAAAlG,EAAAkG,KAAMwG,EAAA1M,EAAAmF,IAAcwH,EAAA3M,EAAAkF,KAO5B,GANAxN,KAAKwU,SAASC,OAAS,CACrB9G,UAAWa,EAAK7N,OAASqU,EAAQrU,OAAS,IAC1C8M,IAAKH,EAAe4H,QAAQ,IAAIF,GAAa,EAC7CxH,KAAML,EAAgB8H,GAGpBjV,KAAKiO,KAAK3C,KAAK4J,QAAQ,UAAY,EAAG,KAClCC,EAAS,IAAIC,WACnBD,EAAOE,cAAcrV,KAAKiO,MAC1BkH,EAAOG,OAAM,SAAIC,OACTC,EAAMC,SAASC,cAAc,OACnCF,EAAIG,IAAMJ,EAAY7B,OAAa,OAEnC8B,EAAIF,OAAM,WACRtQ,EAAKwP,SAASlI,KAAOtH,EAAK+O,aAAaE,uBACrCsB,EAAY7B,OAAO9R,UAM3BsL,EAAUhK,KAAK,CACbsL,KAAIA,EACJN,MAAOlO,KAAK4V,gBAEd5V,KAAKoU,mBAAmBtG,YAAY9N,KAAKoU,mBAAmByB,aAGtD1B,EAAAjU,UAAA0V,YAAR,WACQ,IAAAvN,EAAArI,KAAAwU,SAAAC,OAAEhH,EAAApF,EAAAoF,IAAKD,EAAAnF,EAAAmF,KAAMG,EAAAtF,EAAAsF,UACnB,QAAQF,GAAOD,GAAQG,IAGzBwG,EAAAjU,UAAA4V,SAAA,SAAS5D,GACPlS,KAAKwU,SAAShG,KAAQ0D,EAAY,OAAsB3Q,MAAMwU,OACxD,IAAA1N,EAAArI,KAAAwU,SAAEhG,EAAAnG,EAAAmG,KAAMf,EAAApF,EAAAoF,IACdzN,KAAKwU,SAASC,OAAO9G,UAAYa,EAAK7N,OAAS8M,EAAI9M,OAAS,IAC5DX,KAAKwT,WAAWjC,KAAK,CACnB/C,KAAMxO,KAAKwU,SAAShG,KACpBN,MAAOlO,KAAK4V,iBAIhBzB,EAAAjU,UAAA8V,SAAA,WACEhW,KAAKuU,WAAWhD,MAAK,wBAjGxBlB,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,gBACVC,SAAA,6qHAHO2D,EAAAA,oBAFAlH,oCAUN8E,EAAAA,0BACAC,EAAAA,2BACAA,EAAAA,2BACAA,EAAAA,UAyFHoC,EAvGA,qBCUE,SAAA8B,EAAmBC,GAAAlW,KAAAkW,oBAAAA,EADTlW,KAAAmW,WAAa,IAAIrF,EAAAA,aAyB7B,OAtBEmF,EAAA/V,UAAA0P,SAAA,aAEAqG,EAAA/V,UAAAuT,aAAA,SAAa2C,GACH,IAAAnJ,EAAAjN,KAAAkW,oBAAApB,SACR9U,KAAKkW,oBAAoBG,SAAQ5S,EAAOwJ,EAAUmJ,GACjDX,SAASa,eAAe,eAAoC/U,MAAQ,IAGvE0U,EAAA/V,UAAAqW,UAAA,SAAUnI,GACRpO,KAAKkW,oBAAoB/H,WAAWC,GACpCpO,KAAKmW,WAAW5E,KAAKvR,KAAKkW,oBAAoBL,aAGhDI,EAAA/V,UAAAsW,aAAA,SAAanO,EAAe+F,OAAdI,EAAAnG,EAAAmG,KAAMN,EAAA7F,EAAA6F,MACVlO,KAAAkW,oBAAAhJ,UACEkB,GAAS,CAAEI,KAAIA,EAAEN,MAAKA,GAChClO,KAAKkW,oBAAoBpI,YAAY9N,KAAKkW,oBAAoBL,aAGhEI,EAAA/V,UAAAuW,YAAA,WACEzW,KAAKmW,WAAW5E,KAAKvR,KAAKkW,oBAAoBL,iCA7BjDxF,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,gBACVC,SAAA,mrDAJOvD,0CAQN+E,EAAAA,UAyBHkE,uBCnBE,SAAAS,EACU3C,EACDmC,GADClW,KAAA+T,aAAAA,EACD/T,KAAAkW,oBAAAA,EANFlW,KAAAgU,YAAchU,KAAK+T,aAAaE,uBJTvC,s4IIUUjU,KAAAmW,WAAa,IAAIrF,EAAAA,aACpB9Q,KAAA2W,YAAa,EA0BtB,OAnBED,EAAAxW,UAAA0P,SAAA,aAEA8G,EAAAxW,UAAAuT,aAAA,SAAa2C,GACXpW,KAAK2W,YAAa,EACV,IAAA1J,EAAAjN,KAAAkW,oBAAApB,SACR9U,KAAKkW,oBAAoBG,SAAQ5S,EAAOwJ,EAAUmJ,IAGpDM,EAAAxW,UAAAuW,YAAA,WACEzW,KAAKmW,WAAW5E,KAAKvR,KAAKkW,oBAAoBL,aAGhDa,EAAAxW,UAAA0W,WAAA,SAAWC,GACT7W,KAAK2W,YAAa,GAGpBD,EAAAxW,UAAA4W,YAAA,SAAYD,GACV7W,KAAK2W,YAAa,uBAhCrBtG,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,kBACVC,SAAA,6oCAJO2D,EAAAA,oBAFAlH,0CAWN+E,EAAAA,UA2BH2E,KCtBA,IAAAK,GAAA,WAYE,SAAAA,EACUC,EACwB1K,EACzBoD,EACCuH,GAHAjX,KAAAgX,GAAAA,EACwBhX,KAAAsM,KAAAA,EACzBtM,KAAA0P,UAAAA,EACC1P,KAAAiX,YAAAA,EAVHjX,KAAAmE,WAAY,EACZnE,KAAAkX,aAAe,GACflX,KAAAuB,MAAQ,GACPvB,KAAA2P,SAA6B,IAAI3G,EAAAA,QAElChJ,KAAAmX,KAAoB,IAAIC,EAAAA,YAO7BpX,KAAKqX,UAAYrX,KAAKgX,GAAGM,MAAM,CAC7B9I,KAAM,CAAC,GAAI,CACT+I,EAAAA,WAAW5J,UAAU,KACrB4J,EAAAA,WAAWC,aA0CnB,OArCET,EAAA7W,UAAA0P,SAAA,aAEApQ,OAAAqL,eAAIkM,EAAA7W,UAAA,WAAQ,KAAZ,WAEE,OADQF,KAAAqX,UAAAI,SAAAjJ,KAAAjN,SACUvB,KAAKkX,cAAgBlX,KAAKmE,2CAG9C4S,EAAA7W,UAAA4V,SAAA,SAASe,GACP7W,KAAKkX,aAAe,IAGtBH,EAAA7W,UAAA8O,UAAA,WAAA,IAAAhK,EAAAhF,KACUwO,EAAAxO,KAAAqX,UAAAI,SAAAjJ,KAAAjN,MACRvB,KAAKmE,WAAY,EACjBnE,KAAKiX,YACFjI,UAAU,CACTT,cAAevO,KAAKsM,KAAKoL,eACzBzI,WAAYT,EAAKuH,SAElB3L,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SACP4H,GAAwB,OAAA3S,EAAK4S,aAAY,MAAK,SAC/CC,GACE7S,EAAKb,WAAY,EACjBa,EAAKkS,aAAeW,EAAIC,oBAKhCf,EAAA7W,UAAA0X,YAAA,SAAYxG,GACVpR,KAAK0P,UAAUQ,MAAMkB,IAGvB2F,EAAA7W,UAAAiQ,YAAA,WACEnQ,KAAK2P,SAASlO,MAAK,GACnBzB,KAAK2P,SAASS,gCA7DjBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,wBACVC,SAAA,qkDAjBAwH,EAAAA,4CA6BGvS,EAAAA,OAAMC,KAAA,CAACgL,EAAAA,0BAxBHC,EAAAA,oBAIA3B,MAqETgI,EA/DA,GCCA,IAAAiB,GAAA,WAYE,SAAAA,EACUhB,EACwB1K,EACzBoD,EACCuH,GAHAjX,KAAAgX,GAAAA,EACwBhX,KAAAsM,KAAAA,EACzBtM,KAAA0P,UAAAA,EACC1P,KAAAiX,YAAAA,EAVHjX,KAAAmE,WAAY,EACZnE,KAAAkX,aAAe,GACflX,KAAAuB,MAAQ,GACPvB,KAAA2P,SAA6B,IAAI3G,EAAAA,QAElChJ,KAAAmX,KAAoB,IAAIC,EAAAA,YAO7BpX,KAAKqX,UAAYrX,KAAKgX,GAAGM,MAAM,CAC7B9I,KAAM,CAACxO,KAAKsM,KAAKkC,KAAM,CACrB+I,EAAAA,WAAW5J,UAAU,KACrB4J,EAAAA,WAAWC,aA+CnB,OA1CEQ,EAAA9X,UAAA0P,SAAA,aAEApQ,OAAAqL,eAAImN,EAAA9X,UAAA,WAAQ,KAAZ,WACU,IAAAsO,EAAAxO,KAAAqX,UAAAI,SAAAjJ,KAAAjN,MACR,OACGiN,KACCxO,KAAKkX,cACP1I,EAAKyJ,cAAclC,SAAW/V,KAAKsM,KAAKkC,KAAKyJ,eAC7CjY,KAAKmE,2CAIT6T,EAAA9X,UAAA4V,SAAA,SAASe,GACP7W,KAAKkX,aAAe,IAGtBc,EAAA9X,UAAAgY,WAAA,WAAA,IAAAlT,EAAAhF,KACUwO,EAAAxO,KAAAqX,UAAAI,SAAAjJ,KAAAjN,MACRvB,KAAKmE,WAAY,EACjBnE,KAAKiX,YACF/H,WAAW,CACVhH,QAASlI,KAAKsM,KAAKpE,QACnBiH,SAAUX,EAAKuH,SAEhB3L,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SACP4H,GAA2B,OAAA3S,EAAK4S,aAAY,MAAK,SAClDC,GACE7S,EAAKb,WAAY,EACjBa,EAAKkS,aAAeW,EAAIC,oBAKhCE,EAAA9X,UAAA0X,YAAA,SAAYxG,GACVpR,KAAK0P,UAAUQ,MAAMkB,IAGvB4G,EAAA9X,UAAAiQ,YAAA,WACEnQ,KAAK2P,SAASlO,MAAK,GACnBzB,KAAK2P,SAASS,gCAlEjBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,yBACVC,SAAA,2kDAbAwH,EAAAA,4CAyBGvS,EAAAA,OAAMC,KAAA,CAACgL,EAAAA,0BA/BHC,EAAAA,oBAGA3B,MAkFTiJ,EApEA,GCJA,IAAAG,GAAA,WAQE,SAAAA,EAES7L,EACAoD,EACCuH,EACAzM,GAHDxK,KAAAsM,KAAAA,EACAtM,KAAA0P,UAAAA,EACC1P,KAAAiX,YAAAA,EACAjX,KAAAwK,aAAAA,EAPHxK,KAAAmE,WAAY,EACXnE,KAAA2P,SAA6B,IAAI3G,EAAAA,QAoD3C,OA3CEmP,EAAAjY,UAAA0P,SAAA,aAEAuI,EAAAjY,UAAAkY,OAAA,WAAA,IAAApT,EAAAhF,KACEA,KAAKmE,WAAY,EACjBnE,KAAKiX,YACF9I,WAAWnO,KAAKsM,KAAKgD,KACrBlF,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SACP4H,GACC3S,EAAKqT,oBACLrT,EAAKb,WAAY,EACjBa,EAAK4S,aAAY,MAClB,SACAU,GACCtT,EAAKb,WAAY,EACjB8M,QAAQsH,IAAI,eAAgBD,OAK5BH,EAAAjY,UAAAmY,kBAAR,WAAA,IAAArT,EAAAhF,KACEA,KAAKwK,aACFjD,eACA6C,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SAAEvI,GAERA,GACAA,EAAO7G,SAAWqE,EAAKsH,KAAKgD,IAAI3O,QAChCqE,EAAKwF,aAAa/D,UAAY,GAE9BzB,EAAKwF,aAAa/D,gBAK1B0R,EAAAjY,UAAA0X,YAAA,SAAYxG,GACVpR,KAAK0P,UAAUQ,MAAMkB,IAGvB+G,EAAAjY,UAAAiQ,YAAA,WACEnQ,KAAK2P,SAASlO,MAAK,GACnBzB,KAAK2P,SAASS,gCAzDjBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,oBACVC,SAAA,i2DAOG/K,EAAAA,OAAMC,KAAA,CAACgL,EAAAA,0BAtBHC,EAAAA,oBAGA3B,UAEAnJ,KAmETuS,EA3DA,GCFA,IAAAK,GAAA,WAUE,SAAAA,EACkClM,EACzBoD,EACC+I,EACDvC,GAHyBlW,KAAAsM,KAAAA,EACzBtM,KAAA0P,UAAAA,EACC1P,KAAAyY,kBAAAA,EACDzY,KAAAkW,oBAAAA,EAPFlW,KAAAmE,WAAY,EACZnE,KAAA0Y,UAAW,EACV1Y,KAAA2P,SAA6B,IAAI3G,EAAAA,QAOnChJ,KAAKsM,KAAKqM,WACZ3Y,KAAKkW,oBAAoB5I,eACA,UAAvBtN,KAAKsM,KAAKqM,WACF3Y,KAAKkW,oBAAoB7I,gBAAc5J,EACvCzD,KAAKkW,oBAAoB9I,oBAsCzC,OAlCEoL,EAAAtY,UAAA0P,SAAA,WAAA,IAAA5K,EAAAhF,KACEA,KAAKkW,oBACFrI,cACAzD,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SAACvM,GACTwB,EAAK0T,SAAWlV,EAChBwB,EAAKyT,kBAAkBG,oBAI7BJ,EAAAtY,UAAA2Y,WAAA,SAAWC,GACT9Y,KAAK0Y,SAAWI,GAGlBN,EAAAtY,UAAA6Y,YAAA,WAAA,IAAA/T,EAAAhF,KACEA,KAAKmE,WAAY,EACjBnE,KAAKkW,oBACF5H,qBAAqBtO,KAAKsM,KAAKoL,gBAC/BtN,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SAACqB,GACLA,GACFpM,EAAK4S,aAAY,OAKzBY,EAAAtY,UAAA0X,YAAA,SAAYxG,GACVpR,KAAK0P,UAAUQ,MAAMkB,IAGvBoH,EAAAtY,UAAAiQ,YAAA,WACEnQ,KAAK2P,SAASlO,MAAK,GACnBzB,KAAK2P,SAASS,gCAxDjBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,oBACVC,SAAA,o1BAEAsB,UAAW,CAAC7E,wqBAOTxH,EAAAA,OAAMC,KAAA,CAACgL,EAAAA,0BAtBHC,EAAAA,oBAGAsI,EAAAA,yBACAhM,MAiETwL,EA1DA,GCZA,IAAAS,GAAA,WAcE,SAAAA,EAAoBpT,EAA2B4E,GAA3BzK,KAAA6F,OAAAA,EAA2B7F,KAAAyK,IAAAA,EAgDjD,OA9CEwO,EAAA/Y,UAAA0P,SAAA,aAEAqJ,EAAA/Y,UAAAgZ,WAAA,WACElZ,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAASxL,KAAK6L,OAAOJ,WAIzBwN,EAAA/Y,UAAAiZ,aAAA,WAAA,IAAAnU,EAAAhF,KACoBA,KAAK6F,OAAO4L,KAAKuG,GAA2B,CAC5D1L,KAAM,CACJpE,QAASlI,KAAK6L,OAAOJ,QACrB+C,KAAMxO,KAAK6L,OAAOuN,kBAEpBzH,WAAY,sBAGJC,cAAc7B,WAAS,SAACqB,GAC5BA,GACFpM,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,QAMd0N,EAAA/Y,UAAAmZ,aAAA,WAAA,IAAArU,EAAAhF,KACoBA,KAAK6F,OAAO4L,KAAK0G,GAAuB,CACxD7L,KAAM,CACJhB,KAAM,SACNgE,IAAK,CAACtP,KAAK6L,OAAOJ,SAClB+C,KAAMxO,KAAK6L,OAAOuN,kBAEpBzH,WAAY,oBACZD,WAAW,IAGHE,cAAc7B,WAAS,SAACqB,GAC5BA,GACFpM,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,4BAjDf8E,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,kBACVC,SAAA,wzCATOzH,EAAAA,iBAKAG,qCASN6I,EAAAA,SA+CHmH,EA9DA,GCAA,IAAAK,GAAA,WAaE,SAAAA,IAKOtZ,KAAAuZ,SAAU,EACTvZ,KAAAwZ,aAAe,IAAIxQ,EAAAA,QALzBhJ,KAAKmR,iBAqBT,OAdEmI,EAAApZ,UAAA0P,SAAA,aAEA0J,EAAApZ,UAAAiQ,YAAA,WACEnQ,KAAKwZ,aAAa/X,OAClBzB,KAAKwZ,aAAapJ,YAGZkJ,EAAApZ,UAAAiR,eAAR,WAAA,IAAAnM,EAAAhF,KACEkK,IAAM,SAACX,GAAS,OAAAA,EAAMC,iBACnBY,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAACvG,GACTxE,EAAKuU,QAAU/P,0BA1BtB6G,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,kBACVC,SAAA,6qBASCuB,EAAAA,SAkBHwH,EAnCA,qBCyBE,SAAAG,EACUjP,EACAC,GADAzK,KAAAwK,aAAAA,EACAxK,KAAAyK,IAAAA,EAMFzK,KAAAwZ,aAAe,IAAIxQ,EAAAA,QAEnBhJ,KAAAyJ,eAAoC,GAuG9C,OArGEgQ,EAAAvZ,UAAA0P,SAAA,WACE5P,KAAKmR,kBAGPsI,EAAAvZ,UAAAwZ,YAAA,SAAYC,GACNA,EAAQnS,SACVxH,KAAK4Z,UAAUnT,UAAYzG,KAAKwK,aAAa/D,UAC7CzG,KAAK4Z,UAAUpT,SAAWxG,KAAKwK,aAAahE,SAC5CxG,KAAK4Z,UAAUjZ,OAASX,KAAKwK,aAAa7D,YAIvC8S,EAAAvZ,UAAA2Z,cAAP,SAAqB3H,OACb9D,EAAQpO,KAAKyJ,eAAe8C,WAAS,SACxCH,GAAU,OAAAA,EAAMX,UAAYyG,EAAMzG,WAE/BqO,EACJ1L,GAAS,EACLpO,KAAKyJ,eAAeuE,QAAM,SAAE5B,EAAO5L,GAAM,OAAA4N,IAAU5N,OAC/CR,KAAKyJ,eAAc,CAAEyI,IAE/BlS,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAASsO,KAILL,EAAAvZ,UAAAiR,eAAR,WAAA,IAAAnM,EAAAhF,KACEkK,IAAM,SAAEX,GAAU,OAAAA,EAAMG,kBACrBU,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAE9E,GACV,GAAIjG,EAAKyE,gBAAkBzE,EAAKyE,eAAe9I,OAAQ,KAC/CmZ,EAAoB9U,EAAKyE,eAAeuE,QAAM,SACjD5B,GAAU,OAAAA,EAAMX,UAAYR,KAE/BjG,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAASsO,QAKjB5P,IAAM,SAAEX,GAAU,OAAAA,EAAMK,mBACrBQ,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAEnG,GACV5E,EAAK4E,gBAAkBA,EACvB5E,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAAS,QAIftB,IAAM,SAAEX,GAAU,OAAAA,EAAME,kBACrBW,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAEtG,GACVzE,EAAKyE,eAAiBA,KAG1BS,IAAM,SAAEX,GAAU,OAAAA,EAAMQ,uBACrBK,KACC0F,EAAAA,UAAU9P,KAAKwZ,cACfO,EAAAA,WAAS,SAAE3I,GAAQ,OAAA4I,EAAAA,GAAG5I,OAEvBrB,WAAS,WACR/K,EAAKiV,0BAIJR,EAAAvZ,UAAAga,WAAP,SAAkBhI,GAChBlS,KAAKwK,aAAahE,SAAW0L,EAAM1L,SACnCxG,KAAKwK,aAAa/D,UAAYyL,EAAMzL,UACpCzG,KAAKia,uBAGCR,EAAAvZ,UAAA+Z,oBAAR,WAAA,IAAAjV,EAAAhF,KACOA,KAAK4J,kBAGV5J,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,SAAS,IAGXxL,KAAKwK,aACF5B,kBAAkB,CAAEV,QAASlI,KAAK4J,kBAClCQ,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAEqB,GACVpM,EAAKwF,aAAavD,aAAamK,EAAIjG,KAAKS,SAAUwF,EAAI+I,SAEvDC,KAAG,WACFpV,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,SAAS,SAKjBiO,EAAAvZ,UAAAiQ,YAAA,WACEnQ,KAAKwZ,aAAa/X,OAClBzB,KAAKwZ,aAAapJ,gCArHrBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,iBACVC,SAAA,orDANO3K,SAFAqD,wCAiBNoR,EAAAA,UAAS5U,KAAA,CAAC6U,EAAAA,aAAc,CAAEC,QAAQ,oBAClCzI,EAAAA,SA2GH2H,KC/HA,IAAAe,GAAA,WAAA,SAAAA,IAGUxa,KAAAya,MAAQ,CACd,QACA,KACA,KACA,KACA,KACA,MAeJ,OAZED,EAAAta,UAAAwa,UAAA,SAAUC,EAAmBC,GAC3B,QADQ,IAAAD,IAAAA,EAAA,QAAmB,IAAAC,IAAAA,EAAA,GACtBC,MAAOC,WAAYC,OAAOJ,OAAeK,SAAUL,GAAY,MAAO,IAI3E,QAFIM,EAAO,EAEHN,GAAS,MACfA,GAAS,KACTM,IAGF,OAAON,EAAMO,SAAWN,GAAc,IAAM5a,KAAKya,MAAOQ,wBAtB3DE,EAAAA,KAAI1V,KAAA,CAAC,CAAC+I,KAAM,eAwBbgM,EAxBA,GCkBA,IAAAY,GAAA,WAuBE,SAAAA,EAC6BtW,EACnBe,EACwByG,EACzBoD,EACC2L,EACD7Q,EACCyM,EACAlD,EACAtJ,GARmBzK,KAAA8E,KAAAA,EACnB9E,KAAA6F,OAAAA,EACwB7F,KAAAsM,KAAAA,EACzBtM,KAAA0P,UAAAA,EACC1P,KAAAqb,SAAAA,EACDrb,KAAAwK,aAAAA,EACCxK,KAAAiX,YAAAA,EACAjX,KAAA+T,aAAAA,EACA/T,KAAAyK,IAAAA,EAzBHzK,KAAAmP,SAAW,GACXnP,KAAAoP,YAAc,GACdpP,KAAAsb,aAAe,GACftb,KAAAub,UAAW,EACXvb,KAAAkX,aAAe,GACflX,KAAAwb,cAAe,EACfxb,KAAAyb,eAAiB,GAGhBzb,KAAA2P,SAA6B,IAAI3G,EAAAA,QAClChJ,KAAAqU,UAAYrU,KAAK+T,aAAaE,uBAAuBJ,IAErD7T,KAAAmE,WAAY,EACZnE,KAAA0b,YAAa,EACb1b,KAAA2Y,SAAWgD,EAgMpB,OAlLEP,EAAAlb,UAAA0P,SAAA,WACE5P,KAAKsb,aAAkBtb,KAAK8E,KAAKuB,UAAS,kBAAkBrG,KAAKsM,KAAKpE,QACtElI,KAAK4b,kBAGPpc,OAAAqL,eAAIuQ,EAAAlb,UAAA,WAAQ,KAAZ,WACE,OACGF,KAAKmP,SAASxO,QACfX,KAAKmP,SAASxO,OAASX,KAAK6b,aAAaC,UAAUnb,OAAS,OAC1DX,KAAKkX,cACPlX,KAAKwb,cACLxb,KAAK0b,4CAITN,EAAAlb,UAAA0X,YAAA,SAAYxG,GACVpR,KAAK0P,UAAUQ,MAAMkB,IAGvBgK,EAAAlb,UAAA0b,eAAA,WAAA,IAAA5W,EAAAhF,KACEA,KAAKiX,YACFzH,cAAcxP,KAAKsM,KAAKpE,SACxBkC,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SAAEqB,GACNA,IACFpM,EAAKb,WAAY,EACjBa,EAAK6W,aAAezK,EAAIjG,KACxBnG,EAAKmK,SAAWnK,EAAK6W,aAAaE,iCAClC/W,EAAKoK,YAAcpK,EAAK6W,aAAaG,YACrChX,EAAKiX,YAAc,CAAC,IAAIjX,EAAK6W,aAAaC,UAAU7D,oBAK5DmD,EAAAlb,UAAAgc,YAAA,WAAA,IAAAlX,EAAAhF,KACEA,KAAK0b,YAAa,EAClB1b,KAAKiX,YACF/H,WAAW,CACVhH,QAASlI,KAAK6b,aAAapQ,QAC3B0D,SAAUnP,KAAKmP,SAAS4G,OACxB3G,YAAapP,KAAKoP,aAAepP,KAAKoP,YAAY2G,SAEnD3L,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SACP4H,GACC3S,EAAK0W,YAAa,EAClB1W,EAAK4S,aAAY,MAClB,SACDC,GACE7S,EAAKkS,aAAeW,EAAIC,gBACxB9S,EAAK0W,YAAa,MAK1BN,EAAAlb,UAAAic,YAAA,WAAA,IAAAnX,EAAAhF,KACoBA,KAAK6F,OAAO4L,KAAK0G,GAAuB,CACxD7L,KAAM,CACJhB,KAAM,OACNgE,IAAK,CAACtP,KAAK6b,aAAapQ,SACxB+C,KAAMxO,KAAK6b,aAAaE,kCAE1BpK,WAAY,oBACZD,WAAW,IAGHE,cAAc7B,WAAS,SAACqB,GAC5BA,IACFpM,EAAK4S,aAAY,GACjB5S,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAASxG,EAAK6W,aAAapQ,eAMnC2P,EAAAlb,UAAAmP,aAAA,SAAapC,GAAb,IAAAjI,EAAAhF,KACOA,KAAKoc,aAAanP,EAAM,MAG7BjN,KAAKmE,WAAY,EACjBnE,KAAKiX,YACF5H,aAAarP,KAAK6b,aAAapQ,QAASwB,EAAM,IAC9C7C,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SACP4H,GACC3S,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,IAERvG,EAAK4W,oBACN,SACD/D,GACE7S,EAAKb,WAAY,EACjBa,EAAKyW,eAAiB5D,EAAIC,qBAKlCsD,EAAAlb,UAAAkc,aAAA,SAAanO,GAEX,GADAjO,KAAKyb,eAAiB,GACjBxN,EAAL,KAGMR,EAAMzN,KAAKqc,SAASpO,EAAK3C,MACzBmJ,EAAS,GAEf,GAAIzU,KAAKic,YAAY/G,QAAQzH,GAAO,EAAG,KAC/B6O,EACJtc,KAAKwK,aAAa+C,cAAcG,QAAO,IACrC1N,KAAKic,YAAYlH,KAAK,MAC1BN,EAAOvR,KAAKoZ,GAEd,GAAItc,KAAKwK,aAAa2C,cAAgBc,EAAKT,KAAM,KACzC+O,EAAUvc,KAAKqb,SAASX,UAC5B1a,KAAKwK,aAAa2C,cAClB,GAEFsH,EAAOvR,KAAQlD,KAAKwK,aAAa+C,cAAcC,KAAI,IAAI+O,GAOzD,OAJI9H,EAAO9T,SACTX,KAAKyb,eAAiBhH,EAAOM,KAAK,WAG5BN,EAAO9T,SAGjBya,EAAAlb,UAAAmc,SAAA,SAAS1D,OACDlL,EAAM,IAAIkL,EAAS9J,MAAM,KAAK,GAAGoJ,cAEvC,OAAQxK,GACN,IAAK,QACH,MAAO,OAET,IAAK,WACH,MAAO,OAET,QACE,OAAOA,IAIb2N,EAAAlb,UAAAsW,aAAA,SAAatE,GACXlS,KAAKmP,SAAY+C,EAAY,OAAsB3Q,MACnDvB,KAAKkX,aAAe,GACpBlX,KAAKwb,aAAexb,KAAKmP,WAAanP,KAAKmP,SAASqN,MAAM,YAG5DpB,EAAAlb,UAAAuc,oBAAA,SAAoBvK,GAClBlS,KAAKoP,YAAe8C,EAAY,OAAsB3Q,OAGxD6Z,EAAAlb,UAAAwc,SAAA,SAASC,GAAT,IAAA3X,EAAAhF,KACQ4c,EAASnH,SAASC,cAAc,YAEtCkH,EAAOC,MAAMC,SAAW,QACxBF,EAAOC,MAAME,KAAO,IACpBH,EAAOC,MAAMG,IAAM,IACnBJ,EAAOC,MAAMI,QAAU,IACvBL,EAAOrb,MAAQob,EACflH,SAASzT,KAAKkb,YAAYN,GAC1BA,EAAOO,QACPP,EAAO1S,SACPuL,SAAS2H,YAAY,QACrB3H,SAASzT,KAAKqb,YAAYT,GAE1B5c,KAAKub,UAAW,EAChBvb,KAAKsd,MAAQC,YAAU,WACrBvY,EAAKuW,UAAW,IACf,MAGLH,EAAAlb,UAAAiQ,YAAA,WACEqN,aAAaxd,KAAKsd,OAClBtd,KAAK2P,SAASlO,MAAK,GACnBzB,KAAK2P,SAASS,gCAnNjBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,mBACVC,SAAA,6sKAEAsB,UAAW,CAAC2I,2zHAoBThV,EAAAA,OAAMC,KAAA,CAACd,YAnDVmE,EAAAA,0CAqDGtD,EAAAA,OAAMC,KAAA,CAACgL,EAAAA,0BApDVC,EAAAA,oBAcO8J,UAGAxN,UADA+B,UAbAmF,EAAAA,oBAGAjL,KAyOTmS,EArNA,GC7BA,IAAAqC,GAAA,WAyBE,SAAAA,EACU5X,EACAkO,EACAtJ,EACAD,GAHAxK,KAAA6F,OAAAA,EACA7F,KAAA+T,aAAAA,EACA/T,KAAAyK,IAAAA,EACAzK,KAAAwK,aAAAA,EAMAxK,KAAA0d,YAAc,IAAI5M,EAAAA,aAErB9Q,KAAAqU,UAAYrU,KAAK+T,aAAaE,uBAAuBJ,IACrD7T,KAAAyJ,eAAoC,GACpCzJ,KAAA2Y,SAAWgD,EACV3b,KAAA2P,SAA6B,IAAI3G,EAAAA,QATvChJ,KAAKmR,iBAwDT,OA7CEsM,EAAAvd,UAAA0P,SAAA,aAEApQ,OAAAqL,eAAI4S,EAAAvd,UAAA,qBAAkB,KAAtB,WAAA,IAAA8E,EAAAhF,KACE,OACEA,KAAKyJ,gBACLzJ,KAAKyJ,eAAekU,MAAI,SAAEvR,GAAU,OAAAA,EAAMX,UAAYzG,EAAKoH,MAAMX,4CAI7DgS,EAAAvd,UAAAiR,eAAR,WAAA,IAAAnM,EAAAhF,KACEkK,IAAM,SAAEX,GAAU,OAAAA,EAAME,kBACrBW,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SAAEtG,GACVzE,EAAKyE,eAAiBA,MAIrBgU,EAAAvd,UAAA4V,SAAP,WACE9V,KAAK0d,YAAYnM,KAAKvR,KAAKoM,QAGtBqR,EAAAvd,UAAA0d,UAAP,WAAA,IAAA5Y,EAAAhF,KACQ0P,EAAY1P,KAAK6F,OAAO4L,KAAK2J,GAAsB,CACvD1J,WAAW,EACXpF,KAAM,CACJpE,QAASlI,KAAKoM,MAAMX,QACpB+C,KAAMxO,KAAKoM,MAAM2P,kCAEnBpK,WAAY,uBAEVjC,GACFA,EAAUkC,cAAc7B,WAAS,SAAEqB,GAC7BA,GACFpM,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,QAOhBkS,EAAAvd,UAAAiQ,YAAA,WACEnQ,KAAK2P,SAASlO,MAAK,GACnBzB,KAAK2P,SAASS,gCAlEjBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,iBACVC,SAAA,guLAbOzH,EAAAA,iBACAoL,EAAAA,oBAGAjL,SAGArD,oCAkBNkM,EAAAA,2BAEAC,EAAAA,UAoDH0L,EAvFA,GCWA,IAAAI,GAAA,WAWE,SAAAA,EACUC,EACAC,GADA/d,KAAA8d,aAAAA,EACA9d,KAAA+d,UAAAA,EAZV/d,KAAAge,WAAa,IAAIhY,EAAAA,gBAAmC,IA8HtD,OA5HExG,OAAAqL,eAAIgT,EAAA3d,UAAA,OAAI,KAAR,WACE,OAAOF,KAAKge,WAAWzc,WAEzB,SAASA,GACPvB,KAAK8d,aAAaG,UAAY1c,EAC9BvB,KAAKge,WAAWvc,KAAKF,oCAQvBsc,EAAA3d,UAAAge,QAAA,SAAQC,GAAR,IAAAnZ,EAAAhF,KAUE,OATAA,KAAK8d,aAAaM,eAAeC,QAAQtO,WAAS,SAAEuO,IAEhD,EAA6CC,OAC7C,EAA6CC,UAE7CxZ,EAAKyZ,kBAAiB,MAInBC,EAAAA,MAAMP,EAAiBQ,WAAY3e,KAAKge,YAAY5T,KACzDC,EAAAA,KAAG,WAAO,OAAArF,EAAKsH,UAInBuR,EAAA3d,UAAA0e,WAAA,SAAWT,KAGXN,EAAA3d,UAAAue,kBAAA,SAAkBH,GAAlB,IAAAtZ,EAAAhF,KACMse,EAAOC,OACTD,EAAOC,MAAMM,SAAO,SAAQ5S,GAAI,OAAAnL,EAAAkE,OAAA,OAAA,GAAA,WAAA,OAAAjD,EAAA/B,MAAA,SAAAqI,0BAAK,MAAA,CAAA,EAAMrI,KAAK8e,WAAW7S,GAAM,WAA5B,MAAA,CAAA,EAAA5D,EAAA/F,kBAEnCgc,EAAOE,SACTF,EAAOE,QACJO,QACAC,UACAH,SAAO,SAAQ5S,GAAI,OAAAnL,EAAAkE,OAAA,OAAA,GAAA,WAAA,OAAAjD,EAAA/B,MAAA,SAAAqI,0BAAK,MAAA,CAAA,EAAMrI,KAAK8e,WAAW7S,GAAM,WAA5B,MAAA,CAAA,EAAA5D,EAAA/F,mBAOzBub,EAAA3d,UAAA4e,WAAN,SAAiB7S,EAAuBgT,oHACtC,OAAKhT,GAGLA,EAAK9H,WAAY,GACXiK,EAAQpO,KAAKsM,KAAK4I,QAAQjJ,IACpB,EAEV,CAAA,GAGEgT,EACc,CAAA,EAAMjf,KAAK+d,UAAU/R,YAAYC,EAAKjI,OADpD,CAAA,EAAA,IATF,CAAA,UAWA,OADMkb,EAAU5W,EAAAhG,SAKV6c,EAAQD,EAAQtT,SAASvB,KAAG,SAAE+U,GAElC,OADApa,EAAK+Y,UAAU5R,QAAQiT,EAAOnT,EAAKjI,KAAKyH,SACjC,IAAIK,EACTsT,EACAnT,EAAKhI,MAAQ,EACbe,EAAK+Y,UAAUhS,aAAaqT,QAGhC/W,EAAArI,KAAKsM,MAAK+B,OAAMxN,MAAAwH,EAAA5E,EAAA,CAAC2K,EAAQ,EAAG,GAAM+Q,WAVhC,CAAA,UAaF,IADIE,EAAQ,EAEN7e,EAAI4N,EAAQ,EAChB5N,EAAIR,KAAKsM,KAAK3L,QAAUX,KAAKsM,KAAK9L,GAAGyD,MAAQgI,EAAKhI,MAClDzD,IAAK6e,KAEPrf,KAAKsM,KAAK+B,OAAOD,EAAQ,EAAGiR,2BAI9BpT,EAAK9H,WAAY,EACjBnE,KAAKge,WAAWvc,KAAKzB,KAAKsM,kBAMfuR,EAAA3d,UAAAof,WAAb,SAAwBrT,oHACtB,OAAKA,EAGW,CAAA,EAAMjM,KAAK+d,UAAU/R,YAAYC,EAAKjI,OAFpD,CAAA,UAIF,GAFMkb,EAAU5W,EAAAhG,OACV8L,EAAQpO,KAAKsM,KAAK4I,QAAQjJ,IAC3BiT,GAAW9Q,EAAQ,EAEtB,MAAA,CAAA,GAKF,IADIiR,EAAQ,EAEN7e,EAAI4N,EAAQ,EAChB5N,EAAIR,KAAKsM,KAAK3L,QAAUX,KAAKsM,KAAK9L,GAAGyD,MAAQgI,EAAKhI,MAClDzD,IAAK6e,YAEPrf,KAAKsM,KAAK+B,OAAOD,EAAQ,EAAGiR,GAGtBF,EAAQD,EAAQtT,SAASvB,KAAG,SAC/B+U,GACC,OAAA,IAAItT,EACFsT,EACAnT,EAAKhI,MAAQ,EACbe,EAAK+Y,UAAUhS,aAAaqT,QAGlC/W,EAAArI,KAAKsM,MAAK+B,OAAMxN,MAAAwH,EAAA5E,EAAA,CAAC2K,EAAQ,EAAG,GAAM+Q,IAGlCnf,KAAKge,WAAWvc,KAAKzB,KAAKsM,kBAE9BuR,EA/HA,qBCKE,SAAA0B,EACUC,EACA/U,EACAgO,GAFAzY,KAAAwf,gBAAAA,EACAxf,KAAAyK,IAAAA,EACAzK,KAAAyY,kBAAAA,EAYHzY,KAAAyf,QAAS,EACTzf,KAAA0f,aAAc,EACd1f,KAAAuZ,SAAU,EAGTvZ,KAAAwZ,aAAe,IAAIxQ,EAAAA,QA6F3BhJ,KAAA2f,SAAQ,SAAI1T,GAA0B,OAAAA,EAAKhI,OAE3CjE,KAAA+L,aAAY,SAAIE,GAA0B,OAAAA,EAAK/H,YAE/ClE,KAAA4f,SAAQ,SAAIxd,EAAWyd,GAA+B,OAAAA,EAAU3b,YAhH9DlE,KAAK8f,YAAc,IAAIC,EAAAA,gBACrB/f,KAAK2f,SACL3f,KAAK+L,cAEP/L,KAAKggB,WAAa,IAAInC,GAAmB7d,KAAK8f,YAAaN,GAoK/D,OAvJED,EAAArf,UAAA0P,SAAA,WACE5P,KAAKmR,iBACLnR,KAAKoL,eAGOmU,EAAArf,UAAAkL,YAAd,qGACE,MAAA,CAAA,EAAMpL,KAAKwf,gBAAgBpU,YAAY,CAAEC,gBAAgB,mBAAzDhD,EAAA/F,OACAtC,KAAKyY,kBAAkBG,4BAGjB2G,EAAArf,UAAAiR,eAAR,WAAA,IAAAnM,EAAAhF,KACEA,KAAKwf,gBAAgB7U,SAClBP,KAAK0F,EAAAA,UAAU9P,KAAKwZ,cAAelP,EAAAA,wBACnCyF,WAAS,SAAEwJ,GACVvU,EAAK0a,YAAcnG,EACnBvU,EAAKyT,kBAAkBG,mBAG3B5Y,KAAKwf,gBAAgB5U,aAClBR,KAAK0F,EAAAA,UAAU9P,KAAKwZ,cAAelP,EAAAA,wBACnCyF,WAAS,SAAEzD,GACF,IAAA2T,GAAAjb,EAAAwa,gBAAA9T,YAAA,CAAAD,QAAA,OAAAA,QACRzG,EAAKya,OAASQ,GAAUjb,EAAK4E,kBAAoBqW,EACjDjb,EAAKgb,WAAW1T,KAAOA,EACvBA,EAAKuS,SAAO,SAAE5S,GAAS,OAAAjH,EAAKwa,gBAAgBrT,QAAQF,EAAKjI,KAAM,SAC/DgB,EAAKyT,kBAAkBG,mBAG3B5Y,KAAKggB,WAAWhC,WACb5T,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAEzD,GACNA,GAAQA,EAAK3L,QACfqE,EAAKyT,kBAAkBG,mBAI7B1O,IAAM,SAAEX,GAAU,OAAAA,EAAMK,mBACrBQ,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAQ9E,GAAE,OAAAnK,EAAAkE,OAAA,OAAA,GAAA,0EACdiG,GACegV,GAAWjgB,KAAKwf,gBAAgB9T,YAAc,CAACD,QAAS,OAAKA,QAC9EzL,KAAKyf,OAASQ,GAAUhV,IAAOgV,EAC/BjgB,KAAK4J,gBAAkBqB,EACvB,CAAA,EAAMjL,KAAKwf,gBAAgB/S,iBAAiBxB,KAJ1C,CAAA,EAAA,UAIF5C,EAAA/F,OACAtC,KAAKyY,kBAAkBG,qDAI7B1O,IAAM,SAAEX,GAAU,OAAAA,EAAMO,uBACrBM,KAAK0F,EAAAA,UAAU9P,KAAKwZ,cAAeO,EAAAA,WAAS,SAAE3I,GAAQ,OAAA4I,EAAAA,GAAG5I,OACzDrB,WAAS,WAAC,OAAAjP,EAAAkE,OAAA,OAAA,GAAA,6DACT,MAAA,CAAA,EAAMhF,KAAKkgB,mBAAmBlgB,KAAK4J,gCAAnCvB,EAAA/F,OACAtC,KAAKyY,kBAAkBG,+BAIhB2G,EAAArf,UAAAigB,WAAb,SAAwBlU,mGAYtB,OAXiBhB,EAAOgB,EAAKjI,KAAIyH,WACtBzL,KAAK4J,gBACd5J,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,KAGRvL,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAASP,IAGb,CAAA,EAAMjL,KAAKkgB,mBAAmBjV,kBAA9B5C,EAAA/F,OACAtC,KAAKyY,kBAAkBG,4BAGlB2G,EAAArf,UAAAkgB,WAAP,WACEpgB,KAAKoL,cACG,IAAA6U,EAAAjgB,KAAAwf,gBAAA9T,WAAAD,QACJzL,KAAK4J,kBAAoBqW,GAC3BjgB,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,MAMZgU,EAAArf,UAAAmgB,QAAA,SAAQpU,GACN,OAAOjM,KAAK4J,iBAAmB5J,KAAK4J,kBAAoBqC,EAAKjI,KAAKyH,SAGpE8T,EAAArf,UAAAwY,SAAA,SAASzM,GACP,OAAOA,EAAK/H,YASdqb,EAAArf,UAAAogB,UAAA,SAAUrU,OACFsU,EAAevgB,KAAK2f,SAAS1T,GAEnC,GAAIsU,EAAe,EACjB,OAAO,KAKT,QAAS/f,EAFUR,KAAKggB,WAAW1T,KAAK4I,QAAQjJ,GAAQ,EAE/BzL,GAAK,EAAGA,IAAK,KAC9BggB,EAAcxgB,KAAKggB,WAAW1T,KAAK9L,GACzC,GAAIR,KAAK2f,SAASa,GAAeD,EAC/B,OAAOC,IAKbjB,EAAArf,UAAAugB,YAAA,SAAYxV,GACV,OAAOjL,KAAK8f,YAAY7B,UAAUvR,MAAI,SAAET,GAAS,OAAAA,EAAKjI,KAAKyH,UAAYR,MAG3DsU,EAAArf,UAAAggB,mBAAd,SAAiCjV,uGAC/B,OAAKA,GAAMjL,KAAKuZ,QACd,CAAA,IAEFvZ,KAAKuZ,SAAU,GACTtN,EAAOjM,KAAKygB,YAAYxV,KAEtByV,EAAS1gB,KAAKsgB,UAAUrU,IAE5B,CAAA,EAAMjM,KAAKggB,WAAWV,WAAWoB,IAD/B,CAAA,EAAA,GAFF,CAAA,EAAA,kBAGArY,EAAA/F,QACMqe,EAAc3gB,KAAKygB,YAAYxV,IAEnC,CAAA,EAAMjL,KAAK8f,YAAYb,OAAO0B,IAD5B,CAAA,EAAA,UACFtY,EAAA/F,2CAGF,MAAA,CAAA,EAAMtC,KAAKwf,gBAAgBpU,YAAY,CAAEC,gBAAgB,mBAAzDhD,EAAA/F,QACMqe,EAAc3gB,KAAKygB,YAAYxV,IAEnC,CAAA,EAAMjL,KAAK8f,YAAYb,OAAO0B,IAD5B,CAAA,EAAA,UACFtY,EAAA/F,4CAIJ,MAAA,CAAA,EAAMtC,KAAKwf,gBAAgBpU,YAAY,CAAEC,gBAAgB,YAAzDhD,EAAA/F,iCAEFtC,KAAKuZ,SAAU,cAGjBgG,EAAArf,UAAAiQ,YAAA,WACEnQ,KAAKggB,WAAW1T,KAAO,GACvBtM,KAAKwf,gBAAgBlT,KAAO,GAC5BtM,KAAKwZ,aAAa/X,OAClBzB,KAAKwZ,aAAapJ,gCAjLrBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,gBACVC,SAAA,+kJALOhG,UAHAtB,SAHA+P,EAAAA,oDA2BNlH,EAAAA,SAiKHyN,uBC9KE,SAAAqB,EACUpB,EACA/U,EACAgO,GAFAzY,KAAAwf,gBAAAA,EACAxf,KAAAyK,IAAAA,EACAzK,KAAAyY,kBAAAA,EAIFzY,KAAAwZ,aAAe,IAAIxQ,EAAAA,QACpBhJ,KAAA6J,uBAAiD,GACjD7J,KAAA6gB,kBAAoB,EAJzB7gB,KAAKmR,iBAmCT,OA7BEyP,EAAA1gB,UAAA0P,SAAA,aAEAgR,EAAA1gB,UAAAiQ,YAAA,WACEnQ,KAAKwZ,aAAa/X,OAClBzB,KAAKwZ,aAAapJ,YAGZwQ,EAAA1gB,UAAAiR,eAAR,WAAA,IAAAnM,EAAAhF,KACEkK,IAAM,SAAEX,GAAU,OAAAA,EAAMM,0BACrBO,KACC0F,EAAAA,UAAU9P,KAAKwZ,cACfO,EAAAA,WAAS,SAAE3I,GAAQ,OAAA4I,EAAAA,GAAG5I,OAEvBrB,WAAS,SAAElG,GACV7E,EAAK6E,uBAAyBA,MAI7B+W,EAAA1gB,UAAA4gB,iBAAP,SAAwBjV,GACtB7L,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAASK,EAAOJ,WAIPmV,EAAA1gB,UAAAkgB,WAAb,qGACE,MAAA,CAAA,EAAMpgB,KAAKwf,gBAAgBpU,YAAY,CAAEC,gBAAgB,mBAAzDhD,EAAA/F,OACAtC,KAAKyY,kBAAkBG,gDA5C1BvI,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,iBACVC,SAAA,+yGALOhG,UAFAtB,SAJA+P,EAAAA,qBAuDT4H,uBCrCE,SAAAG,EACSvW,EACCC,GADDzK,KAAAwK,aAAAA,EACCxK,KAAAyK,IAAAA,EALFzK,KAAA2P,SAA6B,IAAI3G,EAAAA,QAClChJ,KAAAuB,MAAQ,GACPvB,KAAAghB,SAAW,GAKjBhhB,KAAKihB,oBAoET,OAjEEF,EAAA7gB,UAAA0P,SAAA,aAEQmR,EAAA7gB,UAAA+gB,kBAAR,WAAA,IAAAjc,EAAAhF,KACEkK,IAAM,SAACX,GAAS,OAAAA,EAAMK,mBACnBQ,KACC0F,EAAAA,UAAU9P,KAAK2P,UACfoK,EAAAA,WAAS,SAAC3I,GAAO,OAAA4I,EAAAA,GAAG5I,OAErBrB,WAAS,SAACnG,GAAmB,OAAC5E,EAAKgc,SAAWpX,MAGnDmX,EAAA7gB,UAAA4V,SAAA,SAAS5D,GACPlS,KAAKuB,MAAS2Q,EAAY,OAAsB3Q,OAGlDwf,EAAA7gB,UAAAghB,SAAA,YACOlhB,KAAKuB,OAAUvB,KAAKwK,aAAajE,WAGtCvG,KAAKwK,aAAajE,QAAUvG,KAAKuB,MACjCvB,KAAKmhB,iBAGPJ,EAAA7gB,UAAAkhB,YAAA,WACOphB,KAAKwK,aAAajE,SAKvBvG,KAAKuB,MAAQ,GACbvB,KAAKwK,aAAajE,QAAU,GAC5BvG,KAAKmhB,eACLnhB,KAAKwK,aAAatD,cAAc,MAChClH,KAAKwK,aAAavD,aAAa,OAR7BjH,KAAKuB,MAAQ,IAWTwf,EAAA7gB,UAAAihB,aAAR,WAAA,IAAAnc,EAAAhF,KACEA,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,SAAS,IAEX6V,EAAAA,cAAc,CACZrhB,KAAKwK,aAAapC,mBAAmB,CAAEF,QAASlI,KAAKghB,WACrDhhB,KAAKwK,aAAa5B,kBAAkB,CAClCV,QAASlI,KAAKghB,SACdva,UAAW,QAGZ2D,KAAK0F,EAAAA,UAAU9P,KAAK2P,WACpBI,WAAS,SAAE1H,OAAAC,EAAAnF,EAAAkF,EAAA,GAACf,EAAAgB,EAAA,GAASd,EAAAc,EAAA,GACpBtD,EAAKwF,aAAatD,cAAcI,EAAQ6D,KAAM7D,EAAQ6S,KAAKrS,OAC3D9C,EAAKwF,aAAavD,aAAaO,EAAO2D,KAAKS,SAAUpE,EAAO2S,SAE7DC,KAAG,WACFpV,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,SAAS,QAKjBuV,EAAA7gB,UAAAiQ,YAAA,WACEnQ,KAAK2P,SAASlO,OACdzB,KAAK2P,SAASS,gCA/EjBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,iBACVC,SAAA,gqCALO3K,SADAqD,KAqFT8X,KC1FA,IAAAO,GAAA,WAoBE,SAAAA,EACU9W,EACAC,GADAzK,KAAAwK,aAAAA,EACAxK,KAAAyK,IAAAA,EAVDzK,KAAAuhB,SAAWxa,EACpB/G,KAAA8G,UAAsBC,EAAStC,KAC/BzE,KAAA4G,OAAsBC,EAAYrC,cAClCxE,KAAAwhB,SAAoB,CAClB,CAAEjgB,MAAOsF,EAAYvC,KAAMjC,MAAO,gBAClC,CAAEd,MAAOsF,EAAYtC,aAAclC,MAAO,wBAC1C,CAAEd,MAAOsF,EAAYrC,cAAenC,MAAO,0BA4B/C,OArBEif,EAAAphB,UAAA0P,SAAA,WACE5P,KAAK4G,OAAS5G,KAAKwK,aAAa5D,OAChC5G,KAAK8G,UAAY9G,KAAKwK,aAAa1D,WAGrCwa,EAAAphB,UAAAuhB,SAAA,SAASvP,GACPlS,KAAK4G,OAASsL,EAAM3Q,MACpBvB,KAAKwK,aAAa5D,OAAS5G,KAAK4G,OAChC5G,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,KAIV+V,EAAAphB,UAAAwhB,gBAAA,WACE1hB,KAAK8G,UACH9G,KAAK8G,YAAcC,EAASrC,IAAMqC,EAAStC,KAAOsC,EAASrC,IAC7D1E,KAAKwK,aAAa1D,UAAY9G,KAAK8G,UACnC9G,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,yBArCX8E,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,iBACVC,SAAA,qkCALO3K,SAFAqD,KA6CTqY,EA9CA,GCAA,IAAAK,GAAA,WA4BE,SAAAA,EAAoBnX,GAAAxK,KAAAwK,aAAAA,EARXxK,KAAA4hB,QAAS,EACR5hB,KAAAwH,OAAS,IAAIsJ,EAAAA,aAEf9Q,KAAAwZ,aAAe,IAAIxQ,EAAAA,QACpBhJ,KAAA6hB,iBAAmB,IACnB7hB,KAAA8hB,iBAAmB,IA2B5B,OAtBEH,EAAAzhB,UAAA0P,SAAA,WAAA,IAAA5K,EAAAhF,KACEA,KAAK+hB,cAAgB/hB,KAAK6hB,iBAC1B3X,IAAM,SAAEX,GAAU,OAAAA,EAAME,kBACrBW,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAEtG,GACVzE,EAAKwC,OAAO+J,KAAK9H,OAIvBkY,EAAAzhB,UAAA8hB,SAAA,SAAS3Z,OAAE4Z,EAAA5Z,EAAA4Z,MACTjiB,KAAK+hB,cAAgBE,GAGvBziB,OAAAqL,eAAI8W,EAAAzhB,UAAA,mBAAgB,KAApB,WACE,MAAO,eAAeF,KAAK+hB,cAAa,uCAG1CJ,EAAAzhB,UAAAiQ,YAAA,WACEnQ,KAAKwK,aAAarD,aAClBnH,KAAKwZ,aAAa/X,OAClBzB,KAAKwZ,aAAapJ,gCApCrBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,oBACVC,SAAA,m6DALO3K,qCASNkM,EAAAA,sBACAC,EAAAA,UA+BH4P,EApDA,qBCsBE,SAAAO,EACSrc,EACA2E,EACCgV,EACA/U,EACAgO,GAJDzY,KAAA6F,OAAAA,EACA7F,KAAAwK,aAAAA,EACCxK,KAAAwf,gBAAAA,EACAxf,KAAAyK,IAAAA,EACAzK,KAAAyY,kBAAAA,EAKFzY,KAAAwZ,aAAe,IAAIxQ,EAAAA,QAEpBhJ,KAAAyJ,eAAoC,GACpCzJ,KAAA2K,SAAqC,IAAI3E,EAAAA,iBAAgB,GAN9DhG,KAAKmR,iBA8NT,OApNE+Q,EAAAhiB,UAAA0P,SAAA,WAAA,IAAA5K,EAAAhF,KACEA,KAAKwK,aACFpD,gBACAgD,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAEzI,GACVtC,EAAK2E,cAAgBrC,EACrBtC,EAAKyT,kBAAkBG,mBAE3B5Y,KAAKwK,aACFjD,eACA6C,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAEvI,GACVxC,EAAKwC,OAASA,EACdxC,EAAKyT,kBAAkBG,oBAIrBsJ,EAAAhiB,UAAAiR,eAAR,WAAA,IAAAnM,EAAAhF,KACEkK,IAAM,SAAEX,GAAU,OAAAA,EAAMC,iBACrBY,KACC0F,EAAAA,UAAU9P,KAAKwZ,cACfO,EAAAA,WAAS,SAAE3I,GAAQ,OAAA4I,EAAAA,GAAG5I,OAEvBrB,WAAS,SAAEvG,GACVxE,EAAK2F,SAASlJ,KAAK+H,MAGvBU,IAAM,SAAEX,GAAU,OAAAA,EAAME,kBACrBW,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAEtG,GACNA,IACFzE,EAAKyE,eAAiBA,MAI5BS,IAAM,SAAEX,GAAU,OAAAA,EAAMK,mBACrBQ,KACC0F,EAAAA,UAAU9P,KAAKwZ,cACfO,EAAAA,WAAS,SAAE3I,GAAQ,OAAA4I,EAAAA,GAAG5I,OAEvBrB,WAAS,SAAEnG,GACNA,IACF5E,EAAKwF,aAAa/D,UAAY,EAC9BzB,EAAKmd,iBAAiBvY,OAI5BM,IAAM,SAAEX,GAAU,OAAAA,EAAMO,uBACrBM,KACC0F,EAAAA,UAAU9P,KAAKwZ,cACfO,EAAAA,WAAS,SAAE3I,GAAQ,OAAA4I,EAAAA,GAAG5I,OAEvBrB,WAAS,WACH/K,EAAK2E,eAGV3E,EAAKod,YAAYpd,EAAK2E,cAAc8B,YAGxCvB,IAAM,SAAEX,GAAU,OAAAA,EAAMS,qBACrBI,KACC0F,EAAAA,UAAU9P,KAAKwZ,cACfO,EAAAA,WAAS,SAAE3I,GAAQ,OAAA4I,EAAAA,GAAG5I,OAEvBrB,WAAS,WACH/K,EAAK2E,gBAGV3E,EAAKwF,aAAa/D,UAAY,EAC9BzB,EAAKmd,iBAAiBnd,EAAK2E,cAAc8B,cAIxCyW,EAAAhiB,UAAAmiB,iBAAP,WAAA,IAAArd,EAAAhF,KACoBA,KAAK6F,OAAO4L,KAAK+G,GAAuB,CACxDlM,KAAM,CACJoL,eAAgB1X,KAAK2J,cAAc8B,QACnCkN,SAAU3Y,KAAKwK,aAAarE,aAAawC,aAE3CgJ,WAAY,uBAGJC,cAAc7B,WAAS,SAAEqB,GAC7BA,IACFpM,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,IAERvG,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,SAMd2W,EAAAhiB,UAAA8O,UAAA,WAAA,IAAAhK,EAAAhF,KACoBA,KAAK6F,OAAO4L,KAAKsF,GAA0B,CAC3DzK,KAAM,CACJoL,eAAgB1X,KAAK2J,cAAc8B,SAErCkG,WAAY,sBAGJC,cAAc7B,WAAS,SAAEqB,GAC7BA,GACFpM,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,QAMd2W,EAAAhiB,UAAAoiB,aAAA,WAAA,IAAAtd,EAAAhF,KACQsP,EAAMtP,KAAKyJ,eAAeY,KAAG,SAAE+B,GAAU,OAAAA,EAAMX,WACnCzL,KAAK6F,OAAO4L,KAAK0G,GAAuB,CACxD7L,KAAM,CACJhB,KAAM,QACNgE,IAAGA,GAELqC,WAAY,oBACZD,WAAW,IAGHE,cAAc7B,WAAS,SAAEqB,GAC7BA,IACFpM,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,IAERvG,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,IAERvG,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAAS,UAMT0W,EAAAhiB,UAAAkiB,YAAR,SAAoBnX,GAApB,IAAAjG,EAAAhF,KACEA,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,SAAS,IAGXxL,KAAKwK,aACFpC,mBAAmB,CAAEF,QAAS+C,IAC9Bb,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAEqB,GACVpM,EAAKwF,aAAatD,cAAckK,EAAIjG,KAAMiG,EAAI+I,KAAKrS,OAC/CsJ,EAAIjG,MAAQiG,EAAIjG,KAAKS,UACvBwF,EAAIjG,KAAKS,SAASiT,SAAO,SAAE5S,GACzB,OAAAjH,EAAKwa,gBAAgBrT,QAAQF,EAAMjH,EAAK2E,cAAc8B,eAI3D2O,KAAG,WACFpV,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,SAAS,QAKT0W,EAAAhiB,UAAAiiB,iBAAR,SAAyBlX,GAAzB,IAAAjG,EAAAhF,KACEA,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,SAAS,IAEX6V,EAAAA,cAAc,CACZrhB,KAAKwK,aAAapC,mBAAmB,CAAEF,QAAS+C,IAChDjL,KAAKwK,aAAa5B,kBAAkB,CAClCV,QAAS+C,MAGVb,KAAK0F,EAAAA,UAAU9P,KAAKwZ,eACpBzJ,WAAS,SAAE1H,OAAAC,EAAAnF,EAAAkF,EAAA,GAACf,EAAAgB,EAAA,GAASd,EAAAc,EAAA,GACpBtD,EAAKwF,aAAatD,cAAcI,EAAQ6D,KAAM7D,EAAQ6S,KAAKrS,OAC3D9C,EAAKwF,aAAavD,aAAaO,EAAO2D,KAAKS,SAAUpE,EAAO2S,MACxD7S,EAAQ6D,MAAQ7D,EAAQ6D,KAAKS,UAC/BtE,EAAQ6D,KAAKS,SAASiT,SAAO,SAAE5S,GAC7B,OAAAjH,EAAKwa,gBAAgBrT,QAAQF,EAAMjH,EAAK2E,cAAc8B,eAI3D2O,KAAG,WACFpV,EAAKyF,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,SAAS,QAKjBhM,OAAAqL,eAAIqX,EAAAhiB,UAAA,YAAS,KAAb,WACE,OACEF,KAAKwK,aAAajE,UACjBvG,KAAK2J,cAAciC,SAASjL,SAC5BX,KAAKwH,OAAO7G,wCAIjBuhB,EAAAhiB,UAAAiQ,YAAA,WACEnQ,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAAS,OAEXxL,KAAKyK,IAAIrB,SAAS,CAChBkC,KAAMC,EACNC,QAAS,KAEXxL,KAAKwZ,aAAa/X,OAClBzB,KAAKwZ,aAAapJ,gCAzOrBC,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,mBACVC,SAAA,qiGAjBOzH,EAAAA,iBAQAlD,SACA2E,UAHAtB,SAPA+P,EAAAA,qBA2PTkJ,KC3PA,IAAAK,GAAA,WAwBE,SAAAA,IANUviB,KAAAwiB,gBAAkB,IAAI1R,EAAAA,aAGzB9Q,KAAAyiB,SAAU,EACTziB,KAAA0iB,KAAO,EAuCjB,OAnCEH,EAAAriB,UAAA0P,SAAA,WACE5P,KAAKiiB,MAAQjiB,KAAK2iB,UAIpBJ,EAAAriB,UAAA0iB,YADA,SACY1Q,GACLlS,KAAKyiB,UAGVziB,KAAK6iB,QAAQ3Q,EAAM4Q,QAAU9iB,KAAK0iB,MAClC1iB,KAAK0iB,KAAOxQ,EAAM4Q,UAIpBP,EAAAriB,UAAA6iB,UADA,SACU7Q,GACJlS,KAAKyiB,UACPziB,KAAKyiB,SAAU,IAInBF,EAAAriB,UAAA8iB,YAAA,SAAY9Q,GACVlS,KAAKyiB,SAAU,EACfziB,KAAK0iB,KAAOxQ,EAAM4Q,SAGpBP,EAAAriB,UAAA2iB,QAAA,SAAQI,GACFjjB,KAAKiiB,MAAQgB,EAAUjjB,KAAKkjB,SAC9BljB,KAAKiiB,MAAQjiB,KAAKkjB,SACTljB,KAAKiiB,MAAQgB,EAAUjjB,KAAK2iB,SACrC3iB,KAAKiiB,MAAQjiB,KAAK2iB,SAElB3iB,KAAKiiB,OAASgB,EAEhBjjB,KAAKwiB,gBAAgBjR,KAAK,CAAE0Q,MAAOjiB,KAAKiiB,6BAlD3C5R,EAAAA,UAAS5K,KAAA,CAAC,CACT6K,SAAU,qBACVC,SAAA,+rBAICuB,EAAAA,wBACAA,EAAAA,+BAEAC,EAAAA,4BAYAK,EAAAA,aAAY3M,KAAA,CAAC,qBAAsB,CAAC,8BASpC2M,EAAAA,aAAY3M,KAAA,CAAC,mBAAoB,CAAC,cAsBrC8c,EA7DA,GCAA,IAAaY,GAGH,CACNC,KAAM,aACNC,SAAU,SACVC,SAAU,mBACVC,aAAc,sBACdC,WAAY,qBACZC,QAAS,aACTC,YAAa,yBACbC,eAAgB,wBAChBC,iBAAkB,cAClBC,SAAU,cCVRC,GAASC,EAEfC,GAAA,WAAA,SAAAA,IAEEhkB,KAAA0a,UAAS,SACPnZ,EACAiQ,GAGM,IAAAnJ,EAAAmJ,GAAA,kDAAEyS,EAAA5b,EAAA4b,OAAQ5b,EAAA6b,SAKhB,IAAK3iB,EACH,MAAO,IAIT,IAA4B,IAAxBA,EAAM2T,QAAQ,KAChB,OAAO4O,GAAOviB,GAAO0iB,OAAOA,OAIxBE,EAAaL,GAAOM,IAAI7iB,GAAO8iB,cACrC,OAAOP,GAAOK,GAAYF,OAAOA,IAErC,2BAzBC9I,EAAAA,KAAI1V,KAAA,CAAC,CAAE+I,KAAM,oBAyBdwV,EAzBA,GA2BA,IAAAM,GAAA,WAAA,SAAAA,IAEEtkB,KAAA0a,UAAS,SACPnZ,EACAiQ,GAIM,IAAAnJ,EAAAmJ,GAAA,4CAAEyS,EAAA5b,EAAA4b,OAAQ5b,EAAA6b,SAKhB,IAAK3iB,EACH,MAAO,IAKT,IAA4B,IAAxBA,EAAM2T,QAAQ,KAChB,OAAO4O,GAAOviB,GAAO0iB,OAAOA,OAKxBE,EAAaL,GAAOM,IAAI7iB,GAAO8iB,cAErC,OAAOP,GAAOK,GAAYF,OAAOA,IAErC,2BA7BC9I,EAAAA,KAAI1V,KAAA,CAAC,CAAE+I,KAAM,gBA6Bd8V,EA7BA,OC8BMC,GAAW,CACfvX,GACApH,EACAmJ,GACAxE,GACA1F,GAGI2f,GAAa,CAEjBlR,GACAK,GACAG,GACAyO,GAGA7L,GACAvC,GACA8B,GACAuC,GACAzB,GACAiB,GACAG,GACAiD,GACA9B,GACA4I,GACAjJ,GACAQ,GACAgE,GACA8B,GACAqB,GACAG,GACAO,GACAK,GACAlS,IAGIgV,GAAmB,CACvB9Q,GACA6E,GACAzB,GACAiB,GACAG,GACAiD,GACA3L,IAGF,SAAgBiV,GAAUlT,GAMxB,OALQ,WACN,OAAO,IAAIrQ,SAAO,SAACiQ,GACjB,OAAOmM,YAAU,WAAO,OAAAnM,EAAII,UAMlC,IAAAmT,GAAA,WAmDE,SAAAA,KACF,2BApDC1R,EAAAA,SAAQxN,KAAA,CAAC,CACRyN,aAAYzP,EACP+gB,GAAU,CACb7T,GACA6J,GACA8J,GACAN,KAEF7Q,QAAS,CACPH,GACAI,EAAAA,aACAwR,EAAAA,YACAC,EAAAA,oBACAC,EAAAA,gBACAC,EAAAA,gBACAC,EAAAA,eACAC,EAAAA,cACAH,EAAAA,gBACAC,EAAAA,gBACAC,EAAAA,eACAC,EAAAA,cACAC,EAAAA,iBACAC,EAAAA,mBACAC,EAAAA,eACAC,EAAAA,qBACAC,EAAAA,cACAC,EAAAA,kBACAC,EAAAA,cACAC,EAAAA,gBACAC,EAAAA,0BAEFrS,QAAO5P,EACF+gB,GAAU,CACb7T,GACAqC,GACAwH,GACA8J,GACAN,KAEFnS,UAASpO,EACJ8gB,GAAQ,CACX,CACEoB,QAASC,EAAAA,gBACTC,WAAYnB,GACZoB,KAAMvB,GACNwB,OAAO,KAGXC,gBAAeviB,EAAMghB,8CAIvBE,EApDA","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export interface IPageMeta {\n PageIndex: number;\n PageSize: number;\n PageCount: number;\n Total: number;\n}\n\nexport interface IChildrenAssetPayload {\n assetId?: string;\n isFolder?: string;\n keyword?: string;\n getAll?: string;\n pageSize?: string;\n pageIndex?: string;\n}\n\nexport interface IAssetByIdPayload {\n assetId?: string;\n isFilter?: boolean;\n}\n\nexport interface IInitialFolderTreeOptions {\n dispatchRootId?: boolean;\n}\n\nexport class AssetModel {\n AssetId?: string;\n OriginalFileName?: string;\n OriginalFileNameWithoutExtension?: string;\n Description?: string;\n FileName: string;\n Width: number;\n Height: number;\n CompanyId: string;\n FilePath: string;\n CloudUrl: string;\n UrlDetail?: string;\n UrlThumbnail?: string;\n Extension: string;\n FileType: string;\n Source: string;\n Size: number;\n CreatedBy: string;\n ModifiedBy: string;\n CreatedDate: string;\n ModifiedDate: string;\n BackgroudProcessingStatus: string;\n IsRoot: boolean;\n IsFolder: boolean;\n TotalFile: number;\n TotalFolder: number;\n HaveChildren: boolean;\n ParentId?: string;\n}\nexport class FolderTreeModel extends AssetModel {\n Children?: FolderTreeModel[];\n}\n\nexport class AssetResultModel {\n Data: FolderTreeModel;\n Meta?: IPageMeta;\n}\n\nexport class DialogConfig {\n limit: number;\n allowedType: string;\n}\n","import { FolderTreeModel } from './asset.model';\n\n/** Flat node with expandable and level information */\nexport class DynamicFlatNode {\n constructor(\n public item: FolderTreeModel,\n public level = 1,\n public expandable = false,\n public isLoading = false\n ) {}\n }\n","export enum FileTypeEnum {\n IMAGE = 'Image',\n DOCUMENT = 'Document',\n}\n","export enum SortFilesBy {\n NAME = 1,\n CREATED_DATE,\n MODIFIED_DATE,\n}\n\nexport enum TypeSort {\n DESC = 1,\n ASC,\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\n\nexport interface AMConfig {\n asset2Url: string;\n requestHeader?: HttpHeaders;\n}\n\nexport const AM_CONFIG = new InjectionToken<AMConfig>(\n 'asset.man.config.angular'\n);\n","import { HttpClient, HttpHandler, HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AM_CONFIG } from './env-config.service';\n\nexport type HttpObserve = 'body' | 'events' | 'response';\n\n@Injectable()\nexport class BaseHttpClient extends HttpClient {\n\tconstructor(\n\t\t@Inject(AM_CONFIG) private _env,\n\t\thandler: HttpHandler) {\n\t\tsuper(handler);\n\t}\n\n\trequest(\n\t\tfirst: string | HttpRequest<any>,\n\t\turl?: string,\n\t\toptions: {\n\t\t\tbody?: any;\n\t\t\theaders?: HttpHeaders | { [header: string]: string | string[] };\n\t\t\tobserve?: HttpObserve;\n\t\t\tparams?: HttpParams | { [param: string]: string | string[] };\n\t\t\treportProgress?: boolean;\n\t\t\tresponseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n\t\t\twithCredentials?: boolean;\n\t\t} = {}\n\t): Observable<any> {\n\t\tconst { requestHeader } = this._env;\n\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tif (requestHeader) {\n\t\t\toptions.headers = requestHeader;\n\t\t}\n\n\t\treturn super.request(first as string, url, options as any);\n\t}\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport {\n AssetModel,\n AssetResultModel,\n DialogConfig,\n FolderTreeModel,\n IAssetByIdPayload,\n IChildrenAssetPayload,\n SortFilesBy,\n TypeSort,\n} from '../models';\nimport { BaseHttpClient } from './base.service';\nimport { AM_CONFIG } from './env-config.service';\n\n@Injectable()\nexport class AssetService {\n private folderList$: BehaviorSubject<FolderTreeModel> = new BehaviorSubject(\n null\n );\n private assetList$: BehaviorSubject<AssetModel[]> = new BehaviorSubject(null);\n private openDialog$: BehaviorSubject<boolean> = new BehaviorSubject(null);\n public keyword: string;\n public pageSize: number;\n public pageIndex: number;\n public folderTotal: number;\n public fileTotal: number;\n public sortBy: SortFilesBy;\n public sortOrder: TypeSort;\n public dialogConfig: DialogConfig = new DialogConfig();\n private baseUrl: string;\n\n constructor(\n @Inject(AM_CONFIG) private _env,\n public dialog: MatDialog,\n private _api: BaseHttpClient\n ) {\n this.baseUrl = this._env.asset2Url;\n this.initOptionFiles();\n }\n\n private initOptionFiles() {\n this.keyword = '';\n this.pageSize = 12;\n this.pageIndex = 0;\n this.folderTotal = 0;\n this.fileTotal = 0;\n this.sortBy = SortFilesBy.MODIFIED_DATE;\n this.sortOrder = TypeSort.DESC;\n }\n\n private resetData() {\n this.setAssetList(null);\n this.setFolderList(null);\n }\n\n resetAsset() {\n this.initOptionFiles();\n this.resetData();\n }\n\n getFolderList(): Observable<FolderTreeModel> {\n return this.folderList$.asObservable();\n }\n\n setFolderList(folders: FolderTreeModel, folderTotal?: number) {\n this.folderTotal = folderTotal || 0;\n this.folderList$.next(folders);\n }\n\n getAssetList(): Observable<AssetModel[]> {\n return this.assetList$.asObservable();\n }\n\n setAssetList(assets: AssetModel[], pagination?: any) {\n this.setPagination(pagination);\n this.assetList$.next(assets);\n }\n\n setDialogOpenStatus(status: boolean): void {\n this.openDialog$.next(status);\n }\n\n getDialogOpenStatus(): Observable<boolean> {\n return this.openDialog$.asObservable();\n }\n\n\n private setPagination(pagination) {\n if (pagination) {\n this.fileTotal = pagination.Total;\n this.pageIndex = pagination.PageIndex;\n this.pageSize = pagination.PageSize;\n }\n }\n\n public getAssetById(assetId: string) {\n const url = `${this.baseUrl}/File/GetById/${assetId}`;\n return this._api.get<AssetResultModel>(url);\n }\n\n public getChildrenFolders({ assetId, isFilter = true }: IAssetByIdPayload) {\n const url = `${this.baseUrl}/File/GetChildren`;\n let params = new HttpParams().set('getAll', 'true').set('isFolder', 'true');\n\n if (assetId) {\n params = params.set('assetId', assetId);\n }\n if (isFilter && this.keyword.length) {\n params = params.set('keyword', this.keyword || '');\n }\n if (this.dialogConfig.allowedType) {\n params = params.set('fileType', this.dialogConfig.allowedType);\n }\n\n return this._api.get<AssetResultModel>(url, { params });\n }\n\n public getChildrenAssets({ assetId, pageIndex }: IChildrenAssetPayload) {\n const url = `${this.baseUrl}/File/GetChildren`;\n let params = new HttpParams()\n .set('pageSize', this.pageSize.toString())\n .set('pageIndex', pageIndex || this.pageIndex.toString())\n .set('getAll', 'false')\n .set('isFolder', 'false')\n .set('TypeSort', this.sortOrder.toString())\n .set('SortFilesBy', this.sortBy.toString());\n\n if (assetId) {\n params = params.set('assetId', assetId);\n }\n if (this.keyword.length) {\n params = params.set('keyword', this.keyword || '');\n }\n if (this.dialogConfig.allowedType) {\n params = params.set('fileType', this.dialogConfig.allowedType);\n }\n\n return this._api.get<AssetResultModel>(url, { params });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as ACTIONS from './store/actions.action';\n\nconst eventDispatcher = new Subject<ACTIONS.Actions>();\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetManagementService {\n\n private _dispatcher;\n\n constructor() {\n }\n\n getDispatcher() {\n if (!this._dispatcher) {\n this._dispatcher = eventDispatcher;\n }\n\n return this._dispatcher;\n }\n\n dispatch(action: ACTIONS.Actions) {\n this.getDispatcher().next(action);\n }\n}\n","import { AssetModel, FolderTreeModel } from '../models';\n\ninterface ActionInterface {\n type: string;\n payload?;\n}\n\nexport enum ActionTypes {\n // global loading\n SET_GLOBAL_LOADING = '[LOADING] Set global loading state',\n\n // asset area\n SET_SELECTED_ASSETS = '[ASSET] Set selected assets',\n RELOAD_CURRENT_ASSETS = '[ASSET] reload current asset list ',\n DELETE_ASSET = '[ASSET] delete an asset ',\n\n // folder area\n SET_CURRENT_FOLDER_ID = '[FOLDER] get current folder id',\n SET_CURRENT_FOLDER = '[FOLDER] set current folder ',\n RELOAD_CURRENT_FOLDER = '[FOLDER] reload current folder ',\n SET_CURRENT_FOLDER_HIERARCHY = '[FOLDER] set current folder hierarchy ',\n\n // node area\n RELOAD_CURRENT_NODE = '[NODE] reload current node ',\n}\n\nexport class SetGlobalLoading implements ActionInterface {\n readonly type = ActionTypes.SET_GLOBAL_LOADING;\n payload: boolean;\n}\n\nexport class SetSelectedAssets implements ActionInterface {\n readonly type = ActionTypes.SET_SELECTED_ASSETS;\n payload: Array<AssetModel>;\n}\n\nexport class DeleteAsset implements ActionInterface {\n readonly type = ActionTypes.DELETE_ASSET;\n payload: string;\n}\n\nexport class SetCurrentFolder implements ActionInterface {\n readonly type = ActionTypes.SET_CURRENT_FOLDER;\n payload: AssetModel;\n}\n\nexport class ReloadCurrentFolder implements ActionInterface {\n readonly type = ActionTypes.RELOAD_CURRENT_FOLDER;\n}\n\nexport class SetCurrentFolderHierarchy implements ActionInterface {\n readonly type = ActionTypes.SET_CURRENT_FOLDER_HIERARCHY;\n payload: Array<FolderTreeModel>;\n}\n\nexport class GetCurrentFolder implements ActionInterface {\n readonly type = ActionTypes.SET_CURRENT_FOLDER_ID;\n payload: string;\n}\n\nexport class ReloadCurrentAssets implements ActionInterface {\n readonly type = ActionTypes.RELOAD_CURRENT_ASSETS;\n}\n\nexport class ReloadCurrentNode implements ActionInterface {\n readonly type = ActionTypes.RELOAD_CURRENT_NODE;\n}\n\nexport type Actions =\n | SetGlobalLoading\n | SetSelectedAssets\n | SetCurrentFolder\n | ReloadCurrentFolder\n | SetCurrentFolderHierarchy\n | GetCurrentFolder\n | ReloadCurrentAssets\n | ReloadCurrentNode\n | DeleteAsset;\n","import { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { AssetModel, FolderTreeModel } from '../models';\nimport * as ACTIONS from './actions.action';\n\ninterface InitialState {\n globalLoading: boolean;\n selectedAssets: Array<AssetModel>;\n deletedAssetId: string;\n currentFolder: AssetModel;\n currentFolderId: string;\n currentFolderHierarchy: Array<FolderTreeModel>;\n reloadCurrentFolder: boolean;\n reloadCurrentAssets: boolean;\n reloadCurrentNode: boolean;\n}\n\nlet state: InitialState = {\n globalLoading: false,\n selectedAssets: [],\n deletedAssetId: null,\n currentFolder: null,\n currentFolderId: null,\n currentFolderHierarchy: [],\n reloadCurrentFolder: false,\n reloadCurrentAssets: false,\n reloadCurrentNode: false,\n};\n\nexport const store = new BehaviorSubject<InitialState>(state);\n\nexport const initialReducer = (dispatcher: Subject<ACTIONS.Actions>) => {\n if (!dispatcher) {\n console.warn('Dispatcher not found.');\n return;\n }\n\n dispatcher.subscribe((action: ACTIONS.Actions) => {\n switch (action.type) {\n case ACTIONS.ActionTypes.SET_SELECTED_ASSETS:\n state = {\n ...state,\n selectedAssets: action.payload,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.SET_GLOBAL_LOADING:\n state = {\n ...state,\n globalLoading: action.payload,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.SET_CURRENT_FOLDER:\n state = {\n ...state,\n currentFolder: { ...action.payload },\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.RELOAD_CURRENT_FOLDER:\n state = {\n ...state,\n reloadCurrentFolder: !state.reloadCurrentFolder,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.RELOAD_CURRENT_ASSETS:\n state = {\n ...state,\n reloadCurrentAssets: !state.reloadCurrentAssets,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.RELOAD_CURRENT_NODE:\n state = {\n ...state,\n reloadCurrentNode: !state.reloadCurrentNode,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.SET_CURRENT_FOLDER_HIERARCHY:\n state = {\n ...state,\n currentFolderHierarchy: [...action.payload],\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.SET_CURRENT_FOLDER_ID:\n state = {\n ...state,\n currentFolderId: action.payload,\n };\n store.next(state);\n break;\n\n case ACTIONS.ActionTypes.DELETE_ASSET:\n state = {\n ...state,\n deletedAssetId: action.payload,\n };\n store.next(state);\n break;\n\n default:\n break;\n }\n });\n};\n\nexport const select = (mapFn: (status) => InitialState): Observable<any> => {\n return store.asObservable().pipe(\n map((status: InitialState) => mapFn(status)),\n distinctUntilChanged()\n );\n};\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { AssetManagementService } from '../asset-management.service';\nimport { AssetModel, DynamicFlatNode, FolderTreeModel, IInitialFolderTreeOptions } from '../models';\nimport { ActionTypes } from '../store';\nimport { AssetService } from './asset.service';\n\n@Injectable()\nexport class NodeTreeService {\n constructor(private assetService: AssetService, private svc: AssetManagementService) { }\n\n public storedData$ = new BehaviorSubject<AssetModel[]>([]);\n public loading$ = new BehaviorSubject<boolean>(false);\n public initialData$: BehaviorSubject<DynamicFlatNode[]> = new BehaviorSubject([]);\n public rootFolder: AssetModel;\n\n get data(): AssetModel[] {\n return this.storedData$.getValue();\n }\n set data(values: AssetModel[]) {\n this.storedData$.next(values);\n }\n\n private async fetchChildrenFolder(id: string): Promise<FolderTreeModel> {\n try {\n const result = await this.assetService.getChildrenFolders({ assetId: id, isFilter: false }).toPromise();\n if (result) {\n return result.Data;\n }\n } catch (err) { }\n return;\n }\n\n /** Initial data from database */\n public async initialData(\n { dispatchRootId }: IInitialFolderTreeOptions\n ): Promise<DynamicFlatNode[]> {\n if (dispatchRootId) { this.loading$.next(true); }\n const result = await this.assetService.getChildrenFolders({ isFilter: false }).toPromise();\n if (!result) { return; }\n if (dispatchRootId) {\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_ID,\n payload: result.Data.AssetId,\n });\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_HIERARCHY,\n payload: [],\n });\n }\n this.rootFolder = result.Data;\n const initData = result.Data.Children.map(\n (folder) => new DynamicFlatNode(folder, 0, this.isExpandable(folder))\n );\n this.initialData$.next(initData);\n\n if (dispatchRootId) { this.loading$.next(false); }\n return this.initialData$.getValue();\n }\n\n public async getChildren(node: FolderTreeModel): Promise<FolderTreeModel> {\n return await this.fetchChildrenFolder(node.AssetId);\n }\n\n public isExpandable(node: FolderTreeModel): boolean {\n return node.HaveChildren;\n }\n\n /** Add asset to stored data */\n public addNode(asset: AssetModel, parentId?: string): void {\n let data = [...this.data];\n const index = data.findIndex((node) => node.AssetId === asset.AssetId);\n if (index < 0) {\n data = [...data, { ...asset, ParentId: parentId ? parentId : null }];\n }\n this.data = data;\n }\n\n public async updateBreadcrumb(id: string) {\n const folder = this.data.find((n) => n.AssetId === id);\n if (folder) {\n const hierarchy = this.getFolderHierarchy(folder);\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_HIERARCHY,\n payload: hierarchy,\n });\n }\n }\n\n private getAssetParent(node: AssetModel): AssetModel {\n return this.data.find((n) => n.AssetId === node.ParentId);\n }\n\n private getFolderHierarchy(node: FolderTreeModel): Array<FolderTreeModel> {\n if (!node) {\n return [];\n }\n let parentHierarchy: Array<FolderTreeModel> = [];\n let parent = this.getAssetParent(node);\n while (parent) {\n parentHierarchy = [parent, ...parentHierarchy];\n parent = this.getAssetParent(parent);\n }\n return [...parentHierarchy, node];\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { BaseHttpClient } from './base.service';\nimport { AM_CONFIG } from './env-config.service';\n\n@Injectable()\nexport class UploadAssetsService {\n private files: File[] = [];\n public fileNames: { [key: string]: string | boolean }[] = [];\n public readonly supportedSize = 10 * 1024 * 1024; // 10MB\n public readonly documentExtension = ['.pdf'];\n public readonly imageExtension = [\n '.png',\n '.gif',\n '.jpeg',\n '.jpg',\n '.svg',\n '.svg+xml',\n ];\n public supportedTypes = [...this.imageExtension, ...this.documentExtension];\n public readonly messageErrors = {\n size: `File size should be upto`,\n ext: `Only supported file extension:`,\n replace: `The replacement file should be the same extension with old one:`,\n maxLength: `The character limit is 200 characters`,\n };\n\n private errorObs$: BehaviorSubject<any> = new BehaviorSubject(true);\n private baseUrl: string;\n\n constructor(\n @Inject(AM_CONFIG) private _env,\n public dialog: MatDialog,\n private _api: BaseHttpClient\n ) {\n this.baseUrl = this._env.asset2Url;\n }\n\n getErrorObs(): Observable<any> {\n return this.errorObs$.asObservable();\n }\n\n setErrorObs(error: boolean) {\n this.errorObs$.next(error);\n }\n\n get getFiles(): File[] {\n return this.files;\n }\n\n set setFiles(files: File[]) {\n this.files = files;\n }\n\n get errorFiles(): boolean {\n const invalidFiles = this.fileNames.filter(file => !file.valid);\n return this.fileNames.length && invalidFiles.length > 0;\n }\n\n get errorLength() {\n return this.fileNames.filter(file => !file.valid).length;\n }\n\n public deleteFile(index: number) {\n this.files.splice(index, 1);\n this.fileNames.splice(index, 1);\n }\n\n uploadMultipleAssets(parentAssetId: string) {\n const { files } = this;\n const fileNames = this.fileNames.map(file => file.name);\n const formData = new FormData();\n formData.append('parentAssetId', parentAssetId);\n formData.append('companyId', '732DA8D2-04EC-4BE0-A168-63EE0DCF50D8');\n\n for (let i = 0; i < files.length; i++) {\n const nameSplit = files[i].name.split('.');\n const ext = `.${nameSplit.splice(nameSplit.length - 1, 1)[0]}`;\n formData.append('files', files[i], `${fileNames[i]}${ext}`);\n }\n\n return this._api.post<any>(`${this.baseUrl}/File/Upload`, formData);\n }\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { IAddFolderPayload, IUpdateFilePayload } from '../models';\nimport { BaseHttpClient } from './base.service';\nimport { AM_CONFIG } from './env-config.service';\n\n@Injectable()\nexport class FileService {\n private baseUrl: string;\n\n constructor(@Inject(AM_CONFIG) private _env, private _api: BaseHttpClient) {\n this.baseUrl = this._env.asset2Url;\n }\n\n addFolder({ parentAssetId, folderName }: IAddFolderPayload) {\n const params = new HttpParams()\n .set('parentAssetId', parentAssetId)\n .set('folderName', folderName);\n return this._api.post<any>(`${this.baseUrl}/File/Addfolder`, null, {\n params,\n });\n }\n\n updateFile({ assetId, fileName, description }: IUpdateFilePayload) {\n let params = new HttpParams()\n .set('assetId', assetId)\n .set('fileName', fileName);\n if (description) {\n params = params.set('Description', description);\n }\n return this._api.post<any>(`${this.baseUrl}/File/Update`, null, { params });\n }\n\n replaceAsset(assetId: string, file: File) {\n const formData = new FormData();\n formData.append('AssetId', assetId);\n formData.append('files', file);\n formData.append('KeepOldName', 'true');\n\n return this._api.post<any>(`${this.baseUrl}/File/Replace`, formData);\n }\n\n deleteFile(ids: string[]) {\n const headers = new HttpHeaders().set('Content-Type', 'application/json');\n\n return this._api.request('delete', `${this.baseUrl}/File/Delete`, {\n headers,\n body: ids,\n });\n }\n\n getFileDetail(id: string) {\n const params = new HttpParams().set('IncludeDetailedWidth', 'true');\n\n return this._api.get<any>(`${this.baseUrl}/File/GetById/${id}`, { params });\n }\n}\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetModel, DialogConfig } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { select } from '../../../store';\n\n@Component({\n selector: 'lib-asset-management-dialog',\n templateUrl: './asset-management-dialog.component.html',\n styleUrls: ['./asset-management-dialog.component.scss'],\n})\nexport class AssetManagementDialogComponent implements OnInit, OnDestroy {\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: DialogConfig,\n public dialogRef: MatDialogRef<AssetManagementDialogComponent>,\n private assetService: AssetService\n ) { }\n private destroy$: Subject<boolean> = new Subject();\n public selectedAssets: Array<AssetModel> = [];\n\n ngOnInit() {\n this.initDialogConfig(this.data);\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.destroy$))\n .subscribe((selectedAssets) => {\n this.selectedAssets = selectedAssets;\n });\n }\n\n get disabled(): boolean {\n const { limit } = this.data;\n return (\n (!this.selectedAssets || !this.selectedAssets.length) ||\n (limit && this.selectedAssets.length > limit)\n );\n }\n\n selectAssets() {\n this.dialogRef.close(this.selectedAssets);\n }\n\n initDialogConfig(data: DialogConfig) {\n if (!data) {\n return;\n }\n this.assetService.dialogConfig = data;\n }\n\n ngOnDestroy(): void {\n this.assetService.dialogConfig = new DialogConfig();\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from './asset-management.service';\nimport { AssetManagementDialogComponent } from './components/partial/asset-management-dialog/asset-management-dialog.component';\nimport { AssetModel, DialogConfig } from './models';\nimport { AssetService } from './services/asset.service';\nimport { initialReducer } from './store';\n\n@Component({\n selector: 'lib-asset-management',\n templateUrl: './asset-management.component.html',\n styleUrls: ['./asset-management.component.scss'],\n providers: [AssetService]\n})\nexport class AssetManagementComponent implements OnInit, OnDestroy {\n @Input() isDialog ? = true;\n @Input() limit?: number;\n @Input() allowedType?: string;\n @Output() assetChange = new EventEmitter<AssetModel[]>();\n\n private destroy$: Subject<boolean> = new Subject();\n\n constructor(\n private dialog: MatDialog,\n private svc: AssetManagementService,\n private assetService: AssetService\n ) {}\n\n ngOnInit() {\n initialReducer(this.svc.getDispatcher());\n this.bindSubscriber();\n }\n\n bindSubscriber() {\n this.assetService\n .getDialogOpenStatus()\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n if (res) {\n this.openAssetsDialog();\n }\n });\n }\n\n onAssetsChange(assets) {\n if (!assets) {\n return;\n }\n this.assetChange.emit(assets);\n }\n\n openAssetsDialog() {\n const config: DialogConfig = {\n limit: this.limit,\n allowedType: this.allowedType,\n };\n const dialogRef = this.dialog.open(AssetManagementDialogComponent, {\n autoFocus: false,\n panelClass: 'lib-dialog--large',\n data: config,\n });\n dialogRef\n .afterClosed()\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n if (res) {\n this.assetChange.emit(res);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Directive, HostListener } from '@angular/core';\nimport { AssetService } from '../services/asset.service';\n\n@Directive({\n selector: '[libDialogTrigger]',\n})\nexport class DialogTriggerDirective {\n constructor(private assetService: AssetService) {}\n @HostListener('click', ['$event.target'])\n onClick(event) {\n this.openAssetsDialog();\n }\n openAssetsDialog() {\n this.assetService.setDialogOpenStatus(true);\n }\n}\n","import { Directive, Output, EventEmitter, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[libDnDFile]',\n})\nexport class DndDirective {\n @Output() imageDropped = new EventEmitter<any>();\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(event: any) {\n event.preventDefault();\n event.stopPropagation();\n let files = event.dataTransfer.files;\n files = Array.from(files);\n this.imageDropped.emit(files);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DialogTriggerDirective } from './dialogTrigger.directive';\nimport { DndDirective } from './dnd.directive';\n\nexport const DIRECTIVES = [DndDirective, DialogTriggerDirective];\n\n@NgModule({\n declarations: [...DIRECTIVES],\n imports: [CommonModule],\n exports: [...DIRECTIVES],\n})\nexport class DirectivesModule {}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'lib-input-file',\n templateUrl: './input-file.component.html',\n styleUrls: ['./input-file.component.scss'],\n})\nexport class InputFileComponent {\n @Input() color: string;\n @Input() multiple = true;\n @Input() acceptTypes: string;\n @Output('onFileChange') fileChange = new EventEmitter<Event>();\n\n constructor() {}\n\n onFileChange(event: any) {\n let { files } = event.target;\n if (files.length < 1) {\n return;\n }\n\n files = Array.from(files);\n this.fileChange.emit(files);\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss'],\n})\nexport class ModalComponent implements OnInit {\n @Input() heading: string;\n @Input() customHeader = false;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","// tslint:disable:max-line-length\nexport const imageDefault =\n 'data:image/png;base64,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';\n\nexport const searchNotFound =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iNzAiIHZpZXdCb3g9IjAgMCA4MCA3MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTU5LjM4MDEgNDQuMDRINTYuMjIwMUw1NS4xMDAxIDQyLjk2QzU5LjAyMDEgMzguNCA2MS4zODAxIDMyLjQ4IDYxLjM4MDEgMjYuMDRDNjEuMzgwMSAxMS42OCA0OS43NDAxIDAuMDQwMDM5MSAzNS4zODAxIDAuMDQwMDM5MUMyMS43MDAxIDAuMDQwMDM5MSAxMC41MDAxIDEwLjYgOS41MDAwNiAyNC4wNEgxNy41ODAxQzE4LjU4MDEgMTUuMDQgMjYuMTAwMSA4LjA0MDA0IDM1LjM4MDEgOC4wNDAwNEM0NS4zNDAxIDguMDQwMDQgNTMuMzgwMSAxNi4wOCA1My4zODAxIDI2LjA0QzUzLjM4MDEgMzYgNDUuMzQwMSA0NC4wNCAzNS4zODAxIDQ0LjA0QzM0LjcwMDEgNDQuMDQgMzQuMDYwMSA0My45MiAzMy4zODAxIDQzLjg0VjUxLjkyQzM0LjA2MDEgNTIgMzQuNzAwMSA1Mi4wNCAzNS4zODAxIDUyLjA0QzQxLjgyMDEgNTIuMDQgNDcuNzQwMSA0OS42OCA1Mi4zMDAxIDQ1Ljc2TDUzLjM4MDEgNDYuODhWNTAuMDRMNzMuMzgwMSA3MEw3OS4zNDAxIDY0LjA0TDU5LjM4MDEgNDQuMDRaIiBmaWxsPSIjNkZDMEZGIi8+CjxwYXRoIGQ9Ik0yMy4yNiAzMS4zMjAzTDEzLjM4IDQxLjIwMDNMMy41MDAwMyAzMS4zMjAzTDAuNjYwMDM0IDM0LjE2MDNMMTAuNTQgNDQuMDQwM0wwLjY2MDAzNCA1My45MjAzTDMuNTAwMDMgNTYuNzYwM0wxMy4zOCA0Ni44ODAzTDIzLjI2IDU2Ljc2MDNMMjYuMSA1My45MjAzTDE2LjIyIDQ0LjA0MDNMMjYuMSAzNC4xNjAzTDIzLjI2IDMxLjMyMDNaIiBmaWxsPSIjNkZDMEZGIi8+Cjwvc3ZnPgo=';\n\nexport const imagePdf =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABLASURBVHgB7d0JkBzVfQbwr+fc2fvQHjp3V5ZAXkCALDA2BgMGYYRjl51wBnPEFQdJcYipVDl2pUA4JHZcxiXjKJiECoTKgYgTHCAIJMvLWWUbEMhGXJKFvAIdu9JKqz3n6vb792qEjWZ6Z6Z7prtnvl8xNYtmZmd2t79+Z78HEFFOGjzi/vvvr5mYmLhEfXmVpmmnqPsOwzBqQRVL/Z11dTek/s7D6uun1df3rV69ehc8xPWAPPjgg3UqGJfpun67+t9TQdUsqYLyqDoW7lyzZs2r8ABXA7Ju3brOcDj8gPqlfBpE7xtVx8Qdq1atugsucy0g9957b20qlXpO/SKWgSgLVfW6Q5Uka+GiAFyiitEfMBxkRR0ft61fv/4P4CJXSpB77rnni+rs8CCIZra/vr5+0fXXXz8OF5S9BFm7dm2tCsd3QJSfrtHR0TVwSdkD0tnZeY666wJR/q6AS8oeEFV6uFqnJP9RbZHld999dztc4EZAloCoQIFAYClcUPaAqLPBHBAVrhsucKObtxFEBVIliCvHjWvjIER+wIAQWQihAoTDYTQ3N6OpqQmxWEzaOaDipFIpxONxTE5OIpFISKfK8cey/V7l33RdN58nr5WbvE7uK4GvAyJh6O3txZw5c1BTUwNyVjKZxNjYGAYHBws64DNhmZqawvj4uHn/u0HzE98GpK2tDcuWLUM0GgWVhpTMLS0taGxsxL59+zAyMpLX66RUkdfKraGhwQza8PCwWSr5LSi+DMj8+fOxdOlSVqXKJBgMYt68eaivrzeDIlWqQkhQOjs7jwdlYmICfuG7RnpXVxfD4RJp50l1ttjffSYos2bNMkPnB74KSCQSYThcJh0hHR0dsEOqXbNnz0Yo5P0KjK8C0t3dbYaE3NXa2mp2kNghpYkfQuKbgKiRVLPtQe6Tv4Uc3HZJOOT7eLmjxTcBkaK9tpaLnHiFlCBOHNiZkEiJ4kW+CYjUW8lbpPvXCdKm9GpIfBMQu3Vecl5dXR2cIr1aXqxu+SYgfukWrCZOH8zyN5ZuYC+FhJMVqWilOGnJ95RuZK/0bjEgVLRSjUd5qeHOgJAnSUjmzp3renWLASHPkhJK2iRuliQMCHlapndLdSnXwwUMCHmehKStre2WTZs2fQplxoCQX8xKp9P3bdy4sQdlxICQn/SoW385Q8KAkN/0qNsbTzzxxDkog7KNxvRfgFAq9JG6XfF4yCim+zyRANExNaqH65GnnnrqwksvvfRNlFDJrjzafP6pHw4EwtdqmrFCM4zFBrRmO+/XcN5F6PzTvwR5y/bt2+Gi/YFAoKQhcbwE6b/gjB7DwN+pKFwLGMf+4xWAVBJduq4/p3q3rl6xYsUWlICjbZAt539khcrD1ulwEJWF9G49VKqGu2MB2fLJ02/StPSP1JctICqvWShR75YjAem/YOk5qtF0lyo5eFUTuUVV7Y1n+vv7Z8FBtgPy6Gdm16o2xn+CJQe5TJ2kF0xOTv4ADrIdkPrRzlvUR+sFkQeokFytqlor4RBbAXntir6I+kR/AapassKJB31fVbUcWazZ1k83NBQ+W3XickPOKubRda0WxePxL8IB9uKva2WfXUne4uGF/G598sknW2GTrYAEQtqHQFXNyZVNnCSbxarxkcthk62ABBFYCKpqTq2NVQrBYPAa2GQrIJEgkqCqJlUsWfXdi3RdX6Ya67Y+nK2A1AS9uVwklZdcN+7Fxrrq8u1MpVJLYIOtgMyKMSA03ZMl+4Z4UTKZXAobbAUkpn4xNSGueEjTaye3t7fDg06CDbYCIpPYu2q5eSZNkxURZS0rLw0eqmrWXNhg+ydprYmiPsKqFk2TBvuiRYvM7Sq8QHX32vogtgMipUhvQx1CGi9vp2my0Jts+rlw4UJzP0LZotutbfPU+9raFsCRrodIMIBFzfXYeWQUKZ/uh03Oky0r5Ca9XEJ2x1WDd5avyWebaNmDXXbMld1yZR/3hMV6Ber7FbYl7wc41jdXFw5hSWsTdh0dxUQyDaIPkraJE+2TzPQWqcZJoMbHxzE0NJR1e2lVgtg6YztaL4qqkmRxcyPm1MUQ9uYsT6owUnWT/dsXLFhgVueysBUQx0d3QrKdlgpIu+rdGkskMaJuk6k0UlK82vioQVWMakdHQDZJW0C1EQxZEDro/W2Y85XZfEf2sRwYGDj+74ZheCsgx7+x+kM0RyPmLUO381l3vwntW38FckBQBURVU/T2LiRPPxvJvjNgNNue+OoJMh4juyHv2bPH/H9VwnijDZKPgJ2eDGlrJW39rJShGrja1AQCR48g9Os3Ef3p/yN+/iVIfPxiGRaH38kESmmfjIyYNQ7vtEHInwJHDiH26EOo//4dCBwaRCXIbAhqt4rFgNBxwX17UH/3NxF629XVEh0hbRJptNutYjEg9Hu08THENtwHbeQw/E7aI2rQkiUIOSugwhF7/CH4nZQiKiS2BuUYEMoqvO1FBHfvgN+pBnsKNjAglJ0at4o+vxl+F4vFbE0CY0Aop9A7b/t+cNbuZEUGhHLSRo4gvOM1+JytK/oYELKkHT6EaubZYdNA6yzVT1fAtS56GsboURjjo+ZIceFvGECgrQOozXOdJzX+ZEyMAfKe8SkUS2tsgtbcNj1Hyo6JCeiHDphtBycF1M9XzTwXEC0cRvTGP0f4vIuhRQu7nNdIpWAMH0TqtZeRePxH0N8byOt1gVmdiH3lGwie1GcGJW/qYDSmJpF+fRsSP3kcqV+9LBcr5PdauZ7/qj9B+KKV0Ood2DVCfZaUGuCbXHcnjMMH4Rgb4a8EnqtihVQwIhd/puBwCE0ddIGOLkQuuhx13/4hon90fV6vi173ZQSXnFpYOIR6vqZKnNDyj6P2r/8edbd9D1pLfttThM/6BCKfvcqZcBz7LKElpyF61Y0g53guIOHl58IJWiSK6BU3qAPmJusnhsIInXomnBA8+RTUfXMdAp0zL4ETWvYxlELolDNlhAzkDO810mO1cFL0C9ch9LELcj6uRaPqt+DcARXomK2qa1+H1jTDgn4xW72PuaWSjrdDqllV9GLVqCqUJg3wMgku7kP0yhvhhvjG/zU7EMgZvpn8b4yqAau0xZlRtT9y1eelER5edg4Smx9FQe95xHrCntbQmLM6E1GN7/i//zOMyQkU9J7jY0X1wsn7JJ/bjOTmx0DO8U1Apv5lHVJbf5b7CdJNu/AkxNZ8DYH2E/f0CZ39iYIDMn7HV2EMHcj+oOqW1VpaEf38HyN84WVZPk/QrNolf/oEChF/5D+QfPLHKJT04MFg1cpp/ilBZJwjmbB8TvqNXyL+6MOIfenEXeG0Ii4plfezek/jwD5M/vC7CPQuRrBn0QmP59NYP0F65p+Tyqfi2iD63t9k/XetpkSNYkXGQbK+Z713986g/FReI13P0UAt4cJ+Zrshmwq4vrvacS4WkQUGhMgCA0JkgQEhssCAEFlgN4vHhM46F1p7Z+4nqFF2mVaf3v4q51yVQcUFJJBjQNBI+GPwLdR3unmzEv3sVeaIe3zD/aDSqqwqVjiC8Pkrsj929AgqhqYhsvIPEZizAFRavilBIiu/YFY/cpHrP4ILT8o5vSP1lu8XH/g9MjMg2LsI+t78rpqk4vgmIKG+M1AsY+Qwks9vQSWR0fv0e78BlVZV9GIlnn4K+p7dqCSJJx+BvvvXoNKq+F6s9NuvI/Hf/wa/SL2+TR34O3M+LjN906+9gtQvXwaVXkUHJPnKLzC17m99NX089eILSDzxPyBvqMiAyHUaU//3X0j2b+RYAdnim4Akn1HtiMH9uZ+QTkM/fFD16rwL/Z0dvOiIHOGfgKiqh1Q/iMqJc7GILDAgRBYYEAdoNTkWu0vb2tyIPIABsSsQRPDDp2V9yBgbA/kbp7tbCUfULZz1IU3OLQ0N5hyx4KIlWZ+jv/MWyN8YEAv1t3/P4lFNPaHBXFE+G1npMPVmZU2QrEYMiIViFpvLSD67GUaV785UCdgGKQGZgp5QI/nkf54LiOzYlNXEOEpCjcDDwVF349AQJr79Dejq3lKun7PKd3TyGs8FJPWL50/4N/3APqTeLk19XgKZ+tVW2GYY5nXiY1/7M/PzziT50omzAoxUEqntr4C8w3NtEJlgGFLdprJHoXSh6gf2YvLeu9QDpRtTkGu7A7PnIfihkwvbTFM28pyaQHrHG0hsfgzpbS/lvaFn6mfPmrN2wxddZo6jGGNHMfXwA9D37wV5h60Va49ceeFGDdqnUQLmLrexOhgHD9jaRTZf0hultbYXsMOVMV0djMdhHBlGsaQjQPY5NMZGYXjwuvnERz+JyStugl8ZhrGpu7v7UhTJZgkS2CsHSinow7JTq4O7tc7A3CF3cOaqkePvq8JlJ2ClprcU35NXCWy1QVTx8x6oohmNDEjR0kZ6kyrCuCFehTKiNUjK3vFVzFZAWibrt2oBbReoIqWWLIXR3IZqZq+K9fjjE4ah/Suo8qjevMQ5F6Da2R4HaUrgXtVO3wmqKMm+M5BaXN3VK2E7INqPtxwKBVNXqgY7h4ArhN4yC1Ofvw7k0Eh63UPPvqLDuAGl6vOlsjGiMUxcvwZ6lbc9MhybatL8cP/D0NKXqy8raJXo6qK3dWDsltuQnt8LmuboXKymDc9sDIf101TF6241hMnL6XzCiEQRv+RzGLv1Dugds0HvK9nmyCPXXrIYSf0aDcY1hgb1Wzdq1duFQe5SvVNGKGxeKSklRvL0jyJx7kUw5OrJCmR3qkkJdw+fpj6gNnzdygZ9Uq8L6fHoY+et7Dc0rQcFWrxoMRZ0cz8MJxjBEKBKDRkILGhypg+5PBdrZpqmScP96LEb/mnFlShGorHZ7F0hKideUUhkgQEhssCAEFlgQIgsMCBEFhgQIgsMCJEFBoTIAgNCZIEBIbLAgBBZYECILDAgRBYYECILDAiRBe4wZUMqlcLY2Bji8TjS6TQikQhqa2tRU1ODQIDnnkrAgBRBwjA0NITh4WFkW3lVQjJ79mwzKORvPM0VKJFIYPfu3Th06BByLUs8MTGBXbt2YXR0FORvDEgBMuGYmpp5jTwJz8DAAEPicwxInqRaJeFIJpMFvY4h8TcGJA/FhiPj3XffxcjICMh/2EifQaZaVWw4hK7r2Lt3eu/BpqYmkH+wBLHgRDgyMiFhdctfGJAc7IRDy7EYm4SEbRJ/YUCyyCcczc3NCIVCOR/TLFYsZEj8gwH5gHwa5A0NDeZAYK4QSDuju7ubIakADMjvyCcc9fX1mDdv3oxTSerq6sznWYWEvVvex4Ack88goJQcCxYsyHueVWNjo2VIMg13hsS7GBDkH4758+dblgjZSEisqluZkBw9ehTkPVUfkHwa5BKOuXPnFhyODKluWbVZJCR79uxhm8SDqjogEoqZwtHa2mqWHMFgEHa0tLSgq6trxoa7TJ8n76jqgAwODlqGI5+DuhASNmnDWH0/KUnIO6o6IHKhUy7SW2VVLSpWphfMqrolF2KRN1R1QOQKwGxkoG+mcQw7rHq3pIeMVyN6R1X/JTo6Ok4IiVSrpEFeapnerQ+OxkuVjgHxjqqezSvh6OnpMa8OlGqNXCorpUe5SO+WtEkOHz5sVq2kt0yCQ95R9dPdw+GwedZ2SywWM2/kTSzLiSwwIEQWGBAiCwwIkQUGhMgCA0JkgQEhssCAEFlgQIgsMCBEFhgQIgsMCJEFBoTIQtkDkmvTGSIvKntANE0bApFPuFHFGgCRT7gRkBdB5BNuBOQZVc1iQ4R8oewBGRwcfEk11F8AkQ+UPSBr165NqYB8WX1pf9sml+VafSTXviHkP66Mg6xZs+YNFZK/gc9l22+wpqYm53pb5D+uDRSqkHxH3a2Dj7W3t5srokiJIYvAybI9pVxwjsrP1ZH01atXf1UdTDepL327IG1bWxtOPvlk9PX1mWtcsXpVWVyfarJq1aoHVF3+U+rLDerG9f/JUzxxurv55pt3qLur169f36VKlDNV++QUdb9A3Royz1F1+7PU3SkgKiPfVJYHBgbuUne3gqgA6mS7SbULL0WROJuXyAIDQmTBNwFJp9PcVYaKYeu48U1AVIP9IIgKZPe48VNAXgVR4bbBBt8EZGho6Gl1NwWiPKmTajoYDPbDBt8EZPny5UnVZbcBRHlSx8u2OXPm2Kp5+KoXKxQKfUvdJUA0Ayk91O1Ou9ce+Sogc+fOfUv1Zt0Oopl9d/78+Y/AJt+Ng/T09PyDOiv8I4hyUMdH/86dOx25nMKX87JV3TK0e/fu21QD7OvgRqT0PkPX9Q3hcPgrqrbhyLCAL0fS1Rki1dvbe1sgEJA5Nj9XN17jXuXUSXOrun1ubGzsBqfCISriyp59+/b1JZPJL6kvL1Q32dO5FlTR1ElSejX3q9sWVWo8oqreL8iJE0RUPr8F+ZntgK18tkMAAAAASUVORK5CYII=';\n// tslint:enable:max-line-length\n","import { Component, OnInit } from '@angular/core';\nimport { searchNotFound } from '../../../contanst';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n selector: 'lib-search-not-found',\n templateUrl: './search-not-found.component.html',\n styleUrls: ['./search-not-found.component.scss'],\n})\nexport class SearchNotFoundComponent implements OnInit {\n public base64Image = this.domSanitizer.bypassSecurityTrustUrl(searchNotFound);\n constructor(private domSanitizer: DomSanitizer) {}\n\n ngOnInit() {}\n}\n","import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core';\nimport { UploadAssetsService } from '../../../services/upload-assets.service';\nimport { imagePdf } from '../../../contanst';\nimport { DomSanitizer } from '@angular/platform-browser';\n@Component({\n selector: 'lib-file-item',\n templateUrl: './file-item.component.html',\n styleUrls: ['./file-item.component.scss'],\n})\nexport class FileItemComponent implements OnInit {\n public base64Pdf = this.domSanitizer.bypassSecurityTrustUrl(imagePdf);\n @Input() file: File;\n @Output() checkError = new EventEmitter();\n @Output() fileChange = new EventEmitter();\n @Output() fileRemove = new EventEmitter();\n public dataFile = {\n name: '',\n size: 0,\n ext: '',\n data: null,\n errors: {\n maxLength: false,\n ext: false,\n size: false,\n },\n };\n\n constructor(\n private domSanitizer: DomSanitizer,\n public uploadAssetService: UploadAssetsService\n ) {}\n\n ngOnInit() {\n this.initDataFile();\n }\n\n private initDataFile(): void {\n this.setDetailsFile();\n this.setErrorFile();\n }\n\n private setDetailsFile() {\n const { name, size } = this.file;\n const { getFiles: files } = this.uploadAssetService;\n const names = files.filter(file => file.name === name);\n const nameSplit = name.split('.');\n if (names.length > 1) {\n nameSplit[0] = `${nameSplit[0]}(${names.length - 1})`;\n }\n this.dataFile.ext = nameSplit.splice(nameSplit.length - 1, 1)[0];\n this.dataFile.name = nameSplit.join('.');\n this.dataFile.size = size;\n }\n\n private setErrorFile() {\n const { supportedTypes, supportedSize, fileNames } = this.uploadAssetService;\n const { name, ext: extFile, size: sizeFile } = this.dataFile;\n this.dataFile.errors = {\n maxLength: name.length + extFile.length > 199,\n ext: supportedTypes.indexOf(`.${extFile}`) < 0,\n size: supportedSize < sizeFile,\n };\n\n if (this.file.type.indexOf('image') > -1) {\n const reader = new FileReader();\n reader.readAsDataURL(this.file);\n reader.onload = (readerEvent: any) => {\n const img = document.createElement('img');\n img.src = readerEvent.target.result as string;\n\n img.onload = () => {\n this.dataFile.data = this.domSanitizer.bypassSecurityTrustUrl(\n readerEvent.target.result\n );\n };\n };\n }\n\n fileNames.push({\n name,\n valid: this.checkErrors()\n });\n this.uploadAssetService.setErrorObs(this.uploadAssetService.errorFiles);\n }\n\n private checkErrors() {\n const { ext, size, maxLength } = this.dataFile.errors;\n return (ext || size || maxLength) ? false : true;\n }\n\n onChange(event: Event) {\n this.dataFile.name = (event.target as HTMLInputElement).value.trim();\n const { name, ext } = this.dataFile;\n this.dataFile.errors.maxLength = name.length + ext.length > 199;\n this.fileChange.emit({\n name: this.dataFile.name,\n valid: this.checkErrors()\n });\n }\n\n onRemove() {\n this.fileRemove.emit(true);\n }\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { UploadAssetsService } from '../../../services/upload-assets.service';\n\n@Component({\n selector: 'lib-file-list',\n templateUrl: './file-list.component.html',\n styleUrls: ['./file-list.component.scss'],\n})\nexport class FileListComponent implements OnInit {\n @Output() revalidate = new EventEmitter();\n constructor(public uploadAssetsService: UploadAssetsService) {}\n\n ngOnInit() {}\n\n onFileChange(newFiles: File[]): void {\n const { getFiles: files } = this.uploadAssetsService;\n this.uploadAssetsService.setFiles = [...files, ...newFiles];\n (document.getElementById('file-import') as HTMLInputElement).value = '';\n }\n\n onDelFile(index: number) {\n this.uploadAssetsService.deleteFile(index);\n this.revalidate.emit(this.uploadAssetsService.errorFiles);\n }\n\n onChangeName({name, valid}, index: number) {\n const { fileNames } = this.uploadAssetsService;\n fileNames[index] = { name, valid };\n this.uploadAssetsService.setErrorObs(this.uploadAssetsService.errorFiles);\n }\n\n onEmitError(): void {\n this.revalidate.emit(this.uploadAssetsService.errorFiles);\n }\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { UploadAssetsService } from '../../../services/upload-assets.service';\nimport { imageDefault } from '../../../contanst';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n selector: 'lib-upload-file',\n templateUrl: './upload-file.component.html',\n styleUrls: ['./upload-file.component.scss'],\n})\nexport class UploadFileComponent implements OnInit {\n public base64Image = this.domSanitizer.bypassSecurityTrustUrl(imageDefault);\n @Output() revalidate = new EventEmitter();\n public isDragging = false;\n\n constructor(\n private domSanitizer: DomSanitizer,\n public uploadAssetsService: UploadAssetsService\n ) {}\n\n ngOnInit() {}\n\n onFileChange(newFiles: any): void {\n this.isDragging = false;\n const { getFiles: files } = this.uploadAssetsService;\n this.uploadAssetsService.setFiles = [...files, ...newFiles];\n }\n\n onEmitError(): void {\n this.revalidate.emit(this.uploadAssetsService.errorFiles);\n }\n\n onDragover(_event: Event) {\n this.isDragging = true;\n }\n\n onDragleave(_event: Event) {\n this.isDragging = false;\n }\n}\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n Validators,\n} from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IAddFolderRes } from '../../../models';\nimport { FileService } from '../../../services/file.service';\n\ninterface IData {\n currentAssetId: string;\n}\n\n@Component({\n selector: 'lib-add-folder-dialog',\n templateUrl: './add-folder-dialog.component.html',\n styleUrls: ['./add-folder-dialog.component.scss'],\n})\nexport class AddFolderDialogComponent implements OnInit, OnDestroy {\n public isLoading = false;\n public errorMessage = '';\n public value = '';\n private destroy$: Subject<boolean> = new Subject();\n public formGroup: FormGroup;\n public form: FormControl = new FormControl();\n constructor(\n private fb: FormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: IData,\n public dialogRef: MatDialogRef<AddFolderDialogComponent>,\n private fileService: FileService\n ) {\n this.formGroup = this.fb.group({\n name: ['', [\n Validators.maxLength(200),\n Validators.required\n ]],\n });\n }\n\n ngOnInit() {}\n\n get disabled() {\n const { value: name } = this.formGroup.controls.name;\n return !name || !!this.errorMessage || this.isLoading;\n }\n\n onChange(_event: Event) {\n this.errorMessage = '';\n }\n\n addFolder() {\n const { value: name } = this.formGroup.controls.name;\n this.isLoading = true;\n this.fileService\n .addFolder({\n parentAssetId: this.data.currentAssetId,\n folderName: name.trim(),\n })\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (_res: IAddFolderRes) => this.closeDialog(true),\n err => {\n this.isLoading = false;\n this.errorMessage = err.ResponseMessage;\n }\n );\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { FileService } from '../../../services/file.service';\nimport { IAssetUpdatedRes } from '../../../models';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n Validators,\n} from '@angular/forms';\n\ninterface IData {\n assetId: string;\n name: string;\n}\n\n@Component({\n selector: 'lib-edit-folder-dialog',\n templateUrl: './edit-folder-dialog.component.html',\n styleUrls: ['./edit-folder-dialog.component.scss'],\n})\nexport class EditFolderDialogComponent implements OnInit, OnDestroy {\n public isLoading = false;\n public errorMessage = '';\n public value = '';\n private destroy$: Subject<boolean> = new Subject();\n public formGroup: FormGroup;\n public form: FormControl = new FormControl();\n constructor(\n private fb: FormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: IData,\n public dialogRef: MatDialogRef<EditFolderDialogComponent>,\n private fileService: FileService\n ) {\n this.formGroup = this.fb.group({\n name: [this.data.name, [\n Validators.maxLength(200),\n Validators.required\n ]],\n });\n }\n\n ngOnInit() {}\n\n get disabled() {\n const { value: name } = this.formGroup.controls.name;\n return (\n !name ||\n !!this.errorMessage ||\n name.toLowerCase().trim() === this.data.name.toLowerCase() ||\n this.isLoading\n );\n }\n\n onChange(_event: Event) {\n this.errorMessage = '';\n }\n\n editFolder() {\n const { value: name } = this.formGroup.controls.name;\n this.isLoading = true;\n this.fileService\n .updateFile({\n assetId: this.data.assetId,\n fileName: name.trim(),\n })\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (_res: IAssetUpdatedRes) => this.closeDialog(true),\n err => {\n this.isLoading = false;\n this.errorMessage = err.ResponseMessage;\n }\n );\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { FileService } from '../../../services/file.service';\nimport { IAssetDetailsRes } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\n\ninterface IData {\n type: 'file' | 'folder' | 'files';\n ids: string[];\n name?: string;\n}\n\n@Component({\n selector: 'lib-delete-dialog',\n templateUrl: './delete-dialog.component.html',\n styleUrls: ['./delete-dialog.component.scss'],\n})\nexport class DeleteDialogComponent implements OnInit, OnDestroy {\n public isLoading = false;\n private destroy$: Subject<boolean> = new Subject();\n constructor(\n @Inject(MAT_DIALOG_DATA)\n public data: IData,\n public dialogRef: MatDialogRef<DeleteDialogComponent>,\n private fileService: FileService,\n private assetService: AssetService\n ) {}\n\n ngOnInit() {}\n\n delete() {\n this.isLoading = true;\n this.fileService\n .deleteFile(this.data.ids)\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (_res: IAssetDetailsRes) => {\n this.handleAssetPaging();\n this.isLoading = false;\n this.closeDialog(true);\n },\n (_err) => {\n this.isLoading = false;\n console.log('deleted fail', _err);\n }\n );\n }\n\n private handleAssetPaging() {\n this.assetService\n .getAssetList()\n .pipe(takeUntil(this.destroy$))\n .subscribe((assets) => {\n if (\n assets &&\n assets.length === this.data.ids.length &&\n this.assetService.pageIndex > 0\n ) {\n this.assetService.pageIndex--;\n }\n });\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { ChangeDetectorRef } from '@angular/core';\nimport { UploadAssetsService } from '../../../services/upload-assets.service';\n\ninterface IData {\n currentAssetId: string;\n fileType?: string;\n}\n\n@Component({\n selector: 'lib-upload-dialog',\n templateUrl: './upload-dialog.component.html',\n styleUrls: ['./upload-dialog.component.scss'],\n providers: [UploadAssetsService],\n})\nexport class UploadDialogComponent implements OnInit, OnDestroy {\n public isLoading = false;\n public disabled = true;\n private destroy$: Subject<boolean> = new Subject();\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: IData,\n public dialogRef: MatDialogRef<UploadDialogComponent>,\n private changeDetectorRef: ChangeDetectorRef,\n public uploadAssetsService: UploadAssetsService\n ) {\n if (this.data.fileType) {\n this.uploadAssetsService.supportedTypes =\n this.data.fileType === 'Image'\n ? [...this.uploadAssetsService.imageExtension]\n : [...this.uploadAssetsService.documentExtension];\n }\n }\n\n ngOnInit() {\n this.uploadAssetsService\n .getErrorObs()\n .pipe(takeUntil(this.destroy$))\n .subscribe(error => {\n this.disabled = error;\n this.changeDetectorRef.detectChanges();\n });\n }\n\n onValidate(hasError: boolean) {\n this.disabled = hasError;\n }\n\n uploadFiles() {\n this.isLoading = true;\n this.uploadAssetsService\n .uploadMultipleAssets(this.data.currentAssetId)\n .pipe(takeUntil(this.destroy$))\n .subscribe(res => {\n if (res) {\n this.closeDialog(true);\n }\n });\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AssetModel } from '../../../models';\nimport { ActionTypes } from '../../../store/actions.action';\nimport { EditFolderDialogComponent } from '../edit-folder-dialog/edit-folder-dialog.component';\nimport { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';\nimport { AssetManagementService } from '../../../asset-management.service';\n\n@Component({\n selector: 'lib-folder-item',\n templateUrl: './folder-item.component.html',\n styleUrls: ['./folder-item.component.scss'],\n})\nexport class FolderItemComponent implements OnInit {\n constructor(private dialog: MatDialog, private svc: AssetManagementService) {}\n @Input() folder: AssetModel;\n ngOnInit() {}\n\n openFolder() {\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_ID,\n payload: this.folder.AssetId,\n });\n }\n\n renameFolder() {\n const dialogRef = this.dialog.open(EditFolderDialogComponent, {\n data: {\n assetId: this.folder.AssetId,\n name: this.folder.OriginalFileName,\n },\n panelClass: 'lib-dialog--small',\n });\n\n dialogRef.afterClosed().subscribe(res => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_FOLDER,\n });\n }\n });\n }\n\n deleteFolder() {\n const dialogRef = this.dialog.open(DeleteDialogComponent, {\n data: {\n type: 'folder',\n ids: [this.folder.AssetId],\n name: this.folder.OriginalFileName,\n },\n panelClass: 'lib-dialog--small',\n autoFocus: false,\n });\n\n dialogRef.afterClosed().subscribe(res => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_FOLDER,\n });\n }\n });\n }\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetModel } from '../../../models';\nimport { select } from '../../../store';\n\n@Component({\n selector: 'lib-folder-list',\n templateUrl: './folder-list.component.html',\n styleUrls: ['./folder-list.component.scss'],\n})\nexport class FolderListComponent implements OnInit, OnDestroy {\n\n constructor() {\n this.bindSubscriber();\n }\n\n @Input() folders: AssetModel[];\n public loading = false;\n private unsubscribe$ = new Subject<void>();\n\n ngOnInit() {}\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n private bindSubscriber() {\n select(state => state.globalLoading)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(globalLoading => {\n this.loading = globalLoading;\n });\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { of } from 'rxjs/internal/observable/of';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { AssetModel } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { ActionTypes } from '../../../store/actions.action';\nimport { select } from '../../../store/reducer';\n\n@Component({\n selector: 'lib-asset-list',\n templateUrl: './asset-list.component.html',\n styleUrls: ['./asset-list.component.scss'],\n})\nexport class AssetListComponent implements OnInit, OnChanges, OnDestroy {\n constructor(\n private assetService: AssetService,\n private svc: AssetManagementService\n ) {}\n\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\n @Input() assets: AssetModel[];\n\n private unsubscribe$ = new Subject<void>();\n private currentFolderId: string;\n private selectedAssets: Array<AssetModel> = [];\n\n ngOnInit() {\n this.bindSubscriber();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.assets) {\n this.paginator.pageIndex = this.assetService.pageIndex;\n this.paginator.pageSize = this.assetService.pageSize;\n this.paginator.length = this.assetService.fileTotal;\n }\n }\n\n public onSelectAsset(event: AssetModel) {\n const index = this.selectedAssets.findIndex(\n (asset) => asset.AssetId === event.AssetId\n );\n const newSelectedAssets: AssetModel[] =\n index > -1\n ? this.selectedAssets.filter((asset, i) => index !== i)\n : [...this.selectedAssets, event];\n\n this.svc.dispatch({\n type: ActionTypes.SET_SELECTED_ASSETS,\n payload: newSelectedAssets,\n });\n }\n\n private bindSubscriber() {\n select((state) => state.deletedAssetId)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((id) => {\n if (this.selectedAssets && this.selectedAssets.length) {\n const newSelectedAssets = this.selectedAssets.filter(\n (asset) => asset.AssetId !== id\n );\n this.svc.dispatch({\n type: ActionTypes.SET_SELECTED_ASSETS,\n payload: newSelectedAssets,\n });\n }\n });\n\n select((state) => state.currentFolderId)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((currentFolderId) => {\n this.currentFolderId = currentFolderId;\n this.svc.dispatch({\n type: ActionTypes.SET_SELECTED_ASSETS,\n payload: [],\n });\n });\n\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((selectedAssets) => {\n this.selectedAssets = selectedAssets;\n });\n\n select((state) => state.reloadCurrentAssets)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe(() => {\n this.fetchChildrenAssets();\n });\n }\n\n public pageChange(event?: PageEvent) {\n this.assetService.pageSize = event.pageSize;\n this.assetService.pageIndex = event.pageIndex;\n this.fetchChildrenAssets();\n }\n\n private fetchChildrenAssets() {\n if (!this.currentFolderId) {\n return;\n }\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: true,\n });\n\n this.assetService\n .getChildrenAssets({ assetId: this.currentFolderId })\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((res) => {\n this.assetService.setAssetList(res.Data.Children, res.Meta);\n })\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/*\n * Convert bytes into largest possible unit.\n * Takes an precision argument that defaults to 2.\n * Usage:\n * bytes | fileSize:precision\n * Example:\n * {{ 1024 | fileSize}}\n * formats to: 1 KB\n*/\n@Pipe({name: 'fileSize'})\nexport class FileSizePipe implements PipeTransform {\n\n private units = [\n 'bytes',\n 'KB',\n 'MB',\n 'GB',\n 'TB',\n 'PB'\n ];\n\n transform(bytes: number = 0, precision: number = 2 ): string {\n if ( isNaN( parseFloat( String(bytes) )) || ! isFinite( bytes ) ) { return '?'; }\n\n let unit = 0;\n\n while ( bytes >= 1024 ) {\n bytes /= 1024;\n unit ++;\n }\n\n return bytes.toFixed( + precision ) + ' ' + this.units[ unit ];\n }\n}\n","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\nimport {\n MatDialog,\n MatDialogRef,\n MAT_DIALOG_DATA,\n} from '@angular/material/dialog';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { imagePdf } from '../../../contanst';\nimport {\n AssetModel,\n FileTypeEnum,\n IAssetDetailsRes,\n IAssetUpdatedRes,\n} from '../../../models';\nimport { FileSizePipe } from '../../../pipes/file-size.pipe';\nimport { AM_CONFIG } from '../../../services/env-config.service';\nimport { FileService } from '../../../services/file.service';\nimport { UploadAssetsService } from '../../../services/upload-assets.service';\nimport { ActionTypes } from '../../../store';\nimport { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';\n\ninterface IData {\n assetId: string;\n name: string;\n}\n\n@Component({\n selector: 'lib-asset-dialog',\n templateUrl: './asset-dialog.component.html',\n styleUrls: ['./asset-dialog.component.scss'],\n providers: [FileSizePipe],\n})\nexport class AssetDialogComponent implements OnInit, OnDestroy {\n public fileName = '';\n public description = '';\n public linkDownload = '';\n public isCopied = false;\n public errorMessage = '';\n public patternError = false;\n public replaceMessage = '';\n public acceptTypes: string[];\n public assetDetails: AssetModel;\n private destroy$: Subject<boolean> = new Subject();\n public base64Pdf = this.domSanitizer.bypassSecurityTrustUrl(imagePdf);\n private timer;\n public isLoading = true;\n public isUpdating = false;\n public fileType = FileTypeEnum;\n\n constructor(\n @Inject(AM_CONFIG) private _env,\n private dialog: MatDialog,\n @Inject(MAT_DIALOG_DATA) public data: IData,\n public dialogRef: MatDialogRef<AssetDialogComponent>,\n private fileSize: FileSizePipe,\n public assetService: UploadAssetsService,\n private fileService: FileService,\n private domSanitizer: DomSanitizer,\n private svc: AssetManagementService\n ) {}\n\n ngOnInit() {\n this.linkDownload = `${this._env.asset2Url}/File/Download/${this.data.assetId}`;\n this.getAssetDetail();\n }\n\n get disabled() {\n return (\n !this.fileName.length ||\n this.fileName.length + this.assetDetails.Extension.length > 199 || // limit 200\n !!this.errorMessage ||\n this.patternError ||\n this.isUpdating\n );\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n getAssetDetail() {\n this.fileService\n .getFileDetail(this.data.assetId)\n .pipe(takeUntil(this.destroy$))\n .subscribe((res: IAssetDetailsRes) => {\n if (res) {\n this.isLoading = false;\n this.assetDetails = res.Data;\n this.fileName = this.assetDetails.OriginalFileNameWithoutExtension;\n this.description = this.assetDetails.Description;\n this.acceptTypes = [`.${this.assetDetails.Extension.toLowerCase()}`];\n }\n });\n }\n\n updateAsset() {\n this.isUpdating = true;\n this.fileService\n .updateFile({\n assetId: this.assetDetails.AssetId,\n fileName: this.fileName.trim(),\n description: this.description && this.description.trim(),\n })\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (_res: IAssetUpdatedRes) => {\n this.isUpdating = false;\n this.closeDialog(true);\n },\n err => {\n this.errorMessage = err.ResponseMessage;\n this.isUpdating = false;\n }\n );\n }\n\n deleteAsset() {\n const dialogRef = this.dialog.open(DeleteDialogComponent, {\n data: {\n type: 'file',\n ids: [this.assetDetails.AssetId],\n name: this.assetDetails.OriginalFileNameWithoutExtension,\n },\n panelClass: 'lib-dialog--small',\n autoFocus: false,\n });\n\n dialogRef.afterClosed().subscribe(res => {\n if (res) {\n this.closeDialog(true);\n this.svc.dispatch({\n type: ActionTypes.DELETE_ASSET,\n payload: this.assetDetails.AssetId,\n });\n }\n });\n }\n\n replaceAsset(files: File[]) {\n if (!this.validateFile(files[0])) {\n return;\n }\n this.isLoading = true;\n this.fileService\n .replaceAsset(this.assetDetails.AssetId, files[0])\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (_res: IAssetDetailsRes) => {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n this.getAssetDetail();\n },\n err => {\n this.isLoading = false;\n this.replaceMessage = err.ResponseMessage;\n }\n );\n }\n\n validateFile(file: File) {\n this.replaceMessage = '';\n if (!file) {\n return;\n }\n const ext = this.matchExt(file.type);\n const errors = [];\n\n if (this.acceptTypes.indexOf(ext) < 0) {\n const extError = `${\n this.assetService.messageErrors.replace\n } ${this.acceptTypes.join(', ')}`;\n errors.push(extError);\n }\n if (this.assetService.supportedSize < file.size) {\n const maxSize = this.fileSize.transform(\n this.assetService.supportedSize,\n 0\n );\n errors.push(`${this.assetService.messageErrors.size} ${maxSize}`);\n }\n\n if (errors.length) {\n this.replaceMessage = errors.join('<br/>');\n }\n\n return !errors.length;\n }\n\n matchExt(fileType: string) {\n const ext = `.${fileType.split('/')[1].toLowerCase()}`;\n\n switch (ext) {\n case '.jpeg':\n return '.jpg';\n\n case '.svg+xml':\n return '.svg';\n\n default:\n return ext;\n }\n }\n\n onChangeName(event: Event) {\n this.fileName = (event.target as HTMLInputElement).value;\n this.errorMessage = '';\n this.patternError = this.fileName && !this.fileName.match(/.*\\S+.*/);\n }\n\n onChangeDescription(event: Event) {\n this.description = (event.target as HTMLInputElement).value;\n }\n\n copyText(content: string) {\n const selBox = document.createElement('textarea');\n\n selBox.style.position = 'fixed';\n selBox.style.left = '0';\n selBox.style.top = '0';\n selBox.style.opacity = '0';\n selBox.value = content;\n document.body.appendChild(selBox);\n selBox.focus();\n selBox.select();\n document.execCommand('copy');\n document.body.removeChild(selBox);\n\n this.isCopied = true;\n this.timer = setTimeout(() => {\n this.isCopied = false;\n }, 1000);\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.timer);\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { imagePdf } from '../../../contanst';\nimport { AssetModel, FileTypeEnum } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { ActionTypes, select } from '../../../store';\nimport { AssetDialogComponent } from '../asset-dialog/asset-dialog.component';\n\n@Component({\n selector: 'lib-asset-item',\n templateUrl: './asset-item.component.html',\n styleUrls: ['./asset-item.component.scss'],\n})\nexport class AssetItemComponent implements OnInit, OnDestroy {\n constructor(\n private dialog: MatDialog,\n private domSanitizer: DomSanitizer,\n private svc: AssetManagementService,\n private assetService: AssetService\n ) {\n this.bindSubscriber();\n }\n @Input() asset: AssetModel;\n\n @Output() selectAsset = new EventEmitter<AssetModel>();\n\n public base64Pdf = this.domSanitizer.bypassSecurityTrustUrl(imagePdf);\n public selectedAssets: Array<AssetModel> = [];\n public fileType = FileTypeEnum;\n private destroy$: Subject<boolean> = new Subject();\n\n ngOnInit() {}\n\n get checkSelectedAsset(): boolean {\n return (\n this.selectedAssets &&\n this.selectedAssets.some((asset) => asset.AssetId === this.asset.AssetId)\n );\n }\n\n private bindSubscriber() {\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.destroy$))\n .subscribe((selectedAssets) => {\n this.selectedAssets = selectedAssets;\n });\n }\n\n public onChange() {\n this.selectAsset.emit(this.asset);\n }\n\n public editAsset() {\n const dialogRef = this.dialog.open(AssetDialogComponent, {\n autoFocus: false,\n data: {\n assetId: this.asset.AssetId,\n name: this.asset.OriginalFileNameWithoutExtension,\n },\n panelClass: 'lib-dialog--medium',\n });\n if (dialogRef) {\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n }\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import {\n CollectionViewer,\n DataSource,\n SelectionChange,\n} from '@angular/cdk/collections';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { BehaviorSubject, merge, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DynamicFlatNode } from '../models';\nimport { NodeTreeService } from '../services/node-tree.service';\n\nexport class NodeTreeDataSource implements DataSource<DynamicFlatNode> {\n dataChange = new BehaviorSubject<DynamicFlatNode[]>([]);\n\n get data(): DynamicFlatNode[] {\n return this.dataChange.value;\n }\n set data(value: DynamicFlatNode[]) {\n this._treeControl.dataNodes = value;\n this.dataChange.next(value);\n }\n\n constructor(\n private _treeControl: FlatTreeControl<DynamicFlatNode>,\n private _database: NodeTreeService\n ) {}\n\n connect(collectionViewer: CollectionViewer): Observable<DynamicFlatNode[]> {\n this._treeControl.expansionModel.changed.subscribe((change) => {\n if (\n (change as SelectionChange<DynamicFlatNode>).added ||\n (change as SelectionChange<DynamicFlatNode>).removed\n ) {\n this.handleTreeControl(change as SelectionChange<DynamicFlatNode>);\n }\n });\n\n return merge(collectionViewer.viewChange, this.dataChange).pipe(\n map(() => this.data)\n );\n }\n\n disconnect(collectionViewer: CollectionViewer): void {}\n\n /** Handle expand/collapse behaviors */\n handleTreeControl(change: SelectionChange<DynamicFlatNode>) {\n if (change.added) {\n change.added.forEach(async (node) => await this.toggleNode(node, true));\n }\n if (change.removed) {\n change.removed\n .slice()\n .reverse()\n .forEach(async (node) => await this.toggleNode(node, false));\n }\n }\n\n /**\n * Toggle the node, remove from display list\n */\n async toggleNode(node: DynamicFlatNode, expand: boolean) {\n if (!node) {\n return;\n }\n node.isLoading = true;\n const index = this.data.indexOf(node);\n if (index < 0) {\n // If cannot find the node, no op\n return;\n }\n\n if (expand) {\n const newNode = await this._database.getChildren(node.item);\n if (!newNode) {\n // If no children, no op\n return;\n }\n const nodes = newNode.Children.map((child) => {\n this._database.addNode(child, node.item.AssetId);\n return new DynamicFlatNode(\n child,\n node.level + 1,\n this._database.isExpandable(child)\n );\n });\n this.data.splice(index + 1, 0, ...nodes);\n } else {\n let count = 0;\n for (\n let i = index + 1;\n i < this.data.length && this.data[i].level > node.level;\n i++, count++\n ) {}\n this.data.splice(index + 1, count);\n }\n\n // notify the change\n node.isLoading = false;\n this.dataChange.next(this.data);\n }\n\n /**\n * Reload the node, remove from display list\n */\n public async reloadNode(node: DynamicFlatNode) {\n if (!node) {\n return;\n }\n const newNode = await this._database.getChildren(node.item);\n const index = this.data.indexOf(node);\n if (!newNode || index < 0) {\n // If no children, or cannot find the node, no op\n return;\n }\n\n // Remove all current children\n let count = 0;\n for (\n let i = index + 1;\n i < this.data.length && this.data[i].level > node.level;\n i++, count++\n ) {}\n this.data.splice(index + 1, count);\n\n // Add new children\n const nodes = newNode.Children.map(\n (child) =>\n new DynamicFlatNode(\n child,\n node.level + 1,\n this._database.isExpandable(child)\n )\n );\n this.data.splice(index + 1, 0, ...nodes);\n\n // notify the change\n this.dataChange.next(this.data);\n }\n}\n","import { FlatTreeControl } from '@angular/cdk/tree';\nimport { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { of, Subject } from 'rxjs';\nimport { distinctUntilChanged, switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { NodeTreeDataSource } from '../../../datasources';\nimport { DynamicFlatNode } from '../../../models';\nimport { NodeTreeService } from '../../../services/node-tree.service';\nimport { ActionTypes, select } from '../../../store/index';\n\n@Component({\n selector: 'lib-node-tree',\n templateUrl: './node-tree.component.html',\n styleUrls: ['./node-tree.component.scss'],\n})\nexport class NodeTreeComponent implements OnInit, OnDestroy {\n constructor(\n private nodeTreeService: NodeTreeService,\n private svc: AssetManagementService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.treeControl = new FlatTreeControl<DynamicFlatNode>(\n this.getLevel,\n this.isExpandable\n );\n this.dataSource = new NodeTreeDataSource(this.treeControl, nodeTreeService);\n }\n\n @Input() width: number;\n\n public currentFolderId: string;\n public isRoot = false;\n public homeLoading = false;\n public loading = false;\n public treeControl: FlatTreeControl<DynamicFlatNode>;\n public dataSource: NodeTreeDataSource;\n private unsubscribe$ = new Subject<void>();\n\n ngOnInit() {\n this.bindSubscriber();\n this.initialData();\n }\n\n private async initialData() {\n await this.nodeTreeService.initialData({ dispatchRootId: true });\n this.changeDetectorRef.detectChanges();\n }\n\n private bindSubscriber() {\n this.nodeTreeService.loading$\n .pipe(takeUntil(this.unsubscribe$), distinctUntilChanged())\n .subscribe((loading) => {\n this.homeLoading = loading;\n this.changeDetectorRef.detectChanges();\n });\n\n this.nodeTreeService.initialData$\n .pipe(takeUntil(this.unsubscribe$), distinctUntilChanged())\n .subscribe((data) => {\n const { AssetId: rootId } = this.nodeTreeService.rootFolder || {AssetId: null};\n this.isRoot = rootId && this.currentFolderId === rootId;\n this.dataSource.data = data;\n data.forEach((node) => this.nodeTreeService.addNode(node.item, null));\n this.changeDetectorRef.detectChanges();\n });\n\n this.dataSource.dataChange\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((data) => {\n if (data && data.length) {\n this.changeDetectorRef.detectChanges();\n }\n });\n\n select((state) => state.currentFolderId)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(async (id) => {\n if (id) {\n const { AssetId: rootId } = this.nodeTreeService.rootFolder || {AssetId: null};\n this.isRoot = rootId && id === rootId;\n this.currentFolderId = id;\n await this.nodeTreeService.updateBreadcrumb(id);\n this.changeDetectorRef.detectChanges();\n }\n });\n\n select((state) => state.reloadCurrentFolder)\n .pipe(takeUntil(this.unsubscribe$), switchMap((res) => of(res)))\n .subscribe(async () => {\n await this.handleReloadFolder(this.currentFolderId);\n this.changeDetectorRef.detectChanges();\n });\n }\n\n public async selectNode(node: DynamicFlatNode) {\n const { AssetId: id } = node.item;\n if (id === this.currentFolderId) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_NODE,\n });\n } else {\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_ID,\n payload: id,\n });\n }\n await this.handleReloadFolder(id);\n this.changeDetectorRef.detectChanges();\n }\n\n public backToHome() {\n this.initialData();\n const { AssetId: rootId } = this.nodeTreeService.rootFolder;\n if (this.currentFolderId === rootId) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_NODE,\n });\n }\n\n }\n\n checked(node: DynamicFlatNode): boolean {\n return this.currentFolderId && this.currentFolderId === node.item.AssetId;\n }\n\n disabled(node: DynamicFlatNode): boolean {\n return node.expandable;\n }\n\n getLevel = (node: DynamicFlatNode) => node.level;\n\n isExpandable = (node: DynamicFlatNode) => node.expandable;\n\n hasChild = (_: number, _nodeData: DynamicFlatNode) => _nodeData.expandable;\n\n getParent(node: DynamicFlatNode): DynamicFlatNode {\n const currentLevel = this.getLevel(node);\n\n if (currentLevel < 1) {\n return null;\n }\n\n const startIndex = this.dataSource.data.indexOf(node) - 1;\n\n for (let i = startIndex; i >= 0; i--) {\n const currentNode = this.dataSource.data[i];\n if (this.getLevel(currentNode) < currentLevel) {\n return currentNode;\n }\n }\n }\n\n getNodeById(id: string): DynamicFlatNode {\n return this.treeControl.dataNodes.find((node) => node.item.AssetId === id);\n }\n\n private async handleReloadFolder(id: string) {\n if (!id || this.loading) {\n return;\n }\n this.loading = true;\n const node = this.getNodeById(id);\n if (node) {\n const parent = this.getParent(node);\n if (parent) {\n await this.dataSource.reloadNode(parent);\n const updatedNode = this.getNodeById(id);\n if (updatedNode) {\n await this.treeControl.expand(updatedNode);\n }\n } else {\n await this.nodeTreeService.initialData({ dispatchRootId: false });\n const updatedNode = this.getNodeById(id);\n if (updatedNode) {\n await this.treeControl.expand(updatedNode);\n }\n }\n } else {\n await this.nodeTreeService.initialData({ dispatchRootId: false });\n }\n this.loading = false;\n }\n\n ngOnDestroy() {\n this.dataSource.data = [];\n this.nodeTreeService.data = [];\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { of } from 'rxjs/internal/observable/of';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { FolderTreeModel } from '../../../models';\nimport { NodeTreeService } from '../../../services/node-tree.service';\nimport { ActionTypes, select } from '../../../store';\n\n@Component({\n selector: 'lib-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n})\nexport class BreadcrumbComponent implements OnInit, OnDestroy {\n constructor(\n private nodeTreeService: NodeTreeService,\n private svc: AssetManagementService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.bindSubscriber();\n }\n private unsubscribe$ = new Subject<void>();\n public currentFolderHierarchy: Array<FolderTreeModel> = [];\n public maximumShownLevel = 3;\n\n ngOnInit() {}\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n private bindSubscriber() {\n select((state) => state.currentFolderHierarchy)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe((currentFolderHierarchy) => {\n this.currentFolderHierarchy = currentFolderHierarchy;\n });\n }\n\n public navigateToFolder(folder: FolderTreeModel) {\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_ID,\n payload: folder.AssetId,\n });\n }\n\n public async backToHome() {\n await this.nodeTreeService.initialData({ dispatchRootId: true });\n this.changeDetectorRef.detectChanges();\n }\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { combineLatest } from 'rxjs/internal/observable/combineLatest';\nimport { of } from 'rxjs/internal/observable/of';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { AssetService } from '../../../services/asset.service';\nimport { ActionTypes, select } from '../../../store';\n\n@Component({\n selector: 'lib-search-box',\n templateUrl: './search-box.component.html',\n styleUrls: ['./search-box.component.scss'],\n})\nexport class SearchBoxComponent implements OnInit, OnDestroy {\n private destroy$: Subject<boolean> = new Subject();\n public value = '';\n private folderId = '';\n constructor(\n public assetService: AssetService,\n private svc: AssetManagementService\n ) {\n this.bindingSubscriber();\n }\n\n ngOnInit() {}\n\n private bindingSubscriber() {\n select(state => state.currentFolderId)\n .pipe(\n takeUntil(this.destroy$),\n switchMap(res => of(res))\n )\n .subscribe(currentFolderId => (this.folderId = currentFolderId));\n }\n\n onChange(event: Event) {\n this.value = (event.target as HTMLInputElement).value;\n }\n\n onSubmit() {\n if (!this.value && !this.assetService.keyword) {\n return;\n }\n this.assetService.keyword = this.value;\n this.searchByName();\n }\n\n clearSearch() {\n if (!this.assetService.keyword) {\n this.value = '';\n return;\n }\n\n this.value = '';\n this.assetService.keyword = '';\n this.searchByName();\n this.assetService.setFolderList(null);\n this.assetService.setAssetList(null);\n }\n\n private searchByName() {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: true,\n });\n combineLatest([\n this.assetService.getChildrenFolders({ assetId: this.folderId }),\n this.assetService.getChildrenAssets({\n assetId: this.folderId,\n pageIndex: '0',\n }),\n ])\n .pipe(takeUntil(this.destroy$))\n .subscribe(([folders, assets]) => {\n this.assetService.setFolderList(folders.Data, folders.Meta.Total);\n this.assetService.setAssetList(assets.Data.Children, assets.Meta);\n })\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { SortFilesBy, TypeSort } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { ActionTypes } from '../../../store';\n\n@Component({\n selector: 'lib-sort-items',\n templateUrl: './sort-items.component.html',\n styleUrls: ['./sort-items.component.scss'],\n})\nexport class SortItemsComponent implements OnInit {\n readonly typeSort = TypeSort;\n sortOrder: TypeSort = TypeSort.DESC;\n sortBy: SortFilesBy = SortFilesBy.MODIFIED_DATE;\n sortList: ISort[] = [\n { value: SortFilesBy.NAME, label: 'Sort by name' },\n { value: SortFilesBy.CREATED_DATE, label: 'Sort by created date' },\n { value: SortFilesBy.MODIFIED_DATE, label: 'Sort by modified date' },\n ];\n constructor(\n private assetService: AssetService,\n private svc: AssetManagementService\n ) {}\n\n ngOnInit() {\n this.sortBy = this.assetService.sortBy;\n this.sortOrder = this.assetService.sortOrder;\n }\n\n onSortBy(event: ISort) {\n this.sortBy = event.value;\n this.assetService.sortBy = this.sortBy;\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n }\n\n toggleSortOrder() {\n this.sortOrder =\n this.sortOrder === TypeSort.ASC ? TypeSort.DESC : TypeSort.ASC;\n this.assetService.sortOrder = this.sortOrder;\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n }\n}\n\ninterface ISort {\n value: SortFilesBy;\n label?: string;\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetModel } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { select } from '../../../store';\n\n@Component({\n selector: 'lib-asset-wrapper',\n templateUrl: './asset-wrapper.component.html',\n styleUrls: ['./asset-wrapper.component.scss'],\n})\nexport class AssetWrapperComponent implements OnInit, OnDestroy {\n @Input() header = true;\n @Output() assets = new EventEmitter<AssetModel[]>();\n\n private unsubscribe$ = new Subject<void>();\n public nodeTreeMinWidth = 250;\n public nodeTreeMaxWidth = 700;\n public nodeTreeWidth;\n\n constructor(private assetService: AssetService) {}\n\n ngOnInit() {\n this.nodeTreeWidth = this.nodeTreeMinWidth;\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((selectedAssets) => {\n this.assets.emit(selectedAssets);\n });\n }\n\n onResize({ width }) {\n this.nodeTreeWidth = width;\n }\n\n get nodeDetailsWidth(): string {\n return `calc(100% - ${this.nodeTreeWidth}px)`;\n }\n\n ngOnDestroy() {\n this.assetService.resetAsset();\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { of } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { combineLatest } from 'rxjs/internal/observable/combineLatest';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { AssetModel, FolderTreeModel } from '../../../models';\nimport { AssetService } from '../../../services/asset.service';\nimport { NodeTreeService } from '../../../services/node-tree.service';\nimport { ActionTypes, select } from '../../../store';\nimport { AddFolderDialogComponent } from '../add-folder-dialog/add-folder-dialog.component';\nimport { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';\nimport { UploadDialogComponent } from '../upload-dialog/upload-dialog.component';\n\n@Component({\n selector: 'lib-node-details',\n templateUrl: './node-details.component.html',\n styleUrls: ['./node-details.component.scss'],\n})\nexport class NodeDetailsComponent implements OnInit, OnDestroy {\n constructor(\n public dialog: MatDialog,\n public assetService: AssetService,\n private nodeTreeService: NodeTreeService,\n private svc: AssetManagementService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.bindSubscriber();\n }\n\n private unsubscribe$ = new Subject<void>();\n\n public selectedAssets: Array<AssetModel> = [];\n public loading$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n public currentFolder: FolderTreeModel;\n public assets: AssetModel[];\n\n ngOnInit() {\n this.assetService\n .getFolderList()\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((folders) => {\n this.currentFolder = folders;\n this.changeDetectorRef.detectChanges();\n });\n this.assetService\n .getAssetList()\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((assets) => {\n this.assets = assets;\n this.changeDetectorRef.detectChanges();\n });\n }\n\n private bindSubscriber() {\n select((state) => state.globalLoading)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe((globalLoading) => {\n this.loading$.next(globalLoading);\n });\n\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((selectedAssets) => {\n if (selectedAssets) {\n this.selectedAssets = selectedAssets;\n }\n });\n\n select((state) => state.currentFolderId)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe((currentFolderId) => {\n if (currentFolderId) {\n this.assetService.pageIndex = 0;\n this.fetchNodeDetails(currentFolderId);\n }\n });\n\n select((state) => state.reloadCurrentFolder)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe(() => {\n if (!this.currentFolder) {\n return;\n }\n this.fetchFolder(this.currentFolder.AssetId);\n });\n\n select((state) => state.reloadCurrentNode)\n .pipe(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe(() => {\n if (!this.currentFolder) {\n return;\n }\n this.assetService.pageIndex = 0;\n this.fetchNodeDetails(this.currentFolder.AssetId);\n });\n }\n\n public openUploadDialog() {\n const dialogRef = this.dialog.open(UploadDialogComponent, {\n data: {\n currentAssetId: this.currentFolder.AssetId,\n fileType: this.assetService.dialogConfig.allowedType,\n },\n panelClass: 'lib-dialog--medium',\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_FOLDER,\n });\n }\n });\n }\n\n addFolder() {\n const dialogRef = this.dialog.open(AddFolderDialogComponent, {\n data: {\n currentAssetId: this.currentFolder.AssetId,\n },\n panelClass: 'lib-dialog--small',\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_FOLDER,\n });\n }\n });\n }\n\n deleteAssets() {\n const ids = this.selectedAssets.map((asset) => asset.AssetId);\n const dialogRef = this.dialog.open(DeleteDialogComponent, {\n data: {\n type: 'files',\n ids,\n },\n panelClass: 'lib-dialog--small',\n autoFocus: false,\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_ASSETS,\n });\n this.svc.dispatch({\n type: ActionTypes.RELOAD_CURRENT_FOLDER,\n });\n this.svc.dispatch({\n type: ActionTypes.SET_SELECTED_ASSETS,\n payload: [],\n });\n }\n });\n }\n\n private fetchFolder(id: string) {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: true,\n });\n\n this.assetService\n .getChildrenFolders({ assetId: id })\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((res) => {\n this.assetService.setFolderList(res.Data, res.Meta.Total);\n if (res.Data && res.Data.Children) {\n res.Data.Children.forEach((node) =>\n this.nodeTreeService.addNode(node, this.currentFolder.AssetId)\n );\n }\n })\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n private fetchNodeDetails(id: string) {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: true,\n });\n combineLatest([\n this.assetService.getChildrenFolders({ assetId: id }),\n this.assetService.getChildrenAssets({\n assetId: id,\n }),\n ])\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(([folders, assets]) => {\n this.assetService.setFolderList(folders.Data, folders.Meta.Total);\n this.assetService.setAssetList(assets.Data.Children, assets.Meta);\n if (folders.Data && folders.Data.Children) {\n folders.Data.Children.forEach((node) =>\n this.nodeTreeService.addNode(node, this.currentFolder.AssetId)\n );\n }\n })\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n get noResults() {\n return (\n this.assetService.keyword &&\n !this.currentFolder.Children.length &&\n !this.assets.length\n );\n }\n\n ngOnDestroy() {\n this.svc.dispatch({\n type: ActionTypes.SET_CURRENT_FOLDER_ID,\n payload: null,\n });\n this.svc.dispatch({\n type: ActionTypes.SET_SELECTED_ASSETS,\n payload: [],\n });\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\n@Component({\n selector: 'lib-drag-to-resize',\n templateUrl: './drag-to-resize.component.html',\n styleUrls: ['./drag-to-resize.component.scss'],\n})\nexport class DragToResizeComponent implements OnInit {\n @Input() minWidth: number;\n @Input() maxWidth: number;\n\n @Output() resizeCompleted = new EventEmitter();\n\n public width: number;\n public grabber = false;\n private oldX = 0;\n\n constructor() {}\n\n ngOnInit() {\n this.width = this.minWidth;\n }\n\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent) {\n if (!this.grabber) {\n return;\n }\n this.resizer(event.clientX - this.oldX);\n this.oldX = event.clientX;\n }\n\n @HostListener('document:mouseup', ['$event'])\n onMouseUp(event: MouseEvent) {\n if (this.grabber) {\n this.grabber = false;\n }\n }\n\n onMouseDown(event: MouseEvent) {\n this.grabber = true;\n this.oldX = event.clientX;\n }\n\n resizer(offsetX: number) {\n if (this.width + offsetX > this.maxWidth) {\n this.width = this.maxWidth;\n } else if (this.width + offsetX < this.minWidth) {\n this.width = this.minWidth;\n } else {\n this.width += offsetX;\n }\n this.resizeCompleted.emit({ width: this.width });\n }\n}\n","export const AdminConfig: { [name: string]: any } = {\n locale: 'en-US',\n timeZone: 'local',\n format: {\n date: 'MM/DD/YYYY',\n dayMonth: 'MMM DD',\n dateTime: 'MM/DD/YYYY HH:mm',\n fullDateTime: 'MM/DD/YYYY HH:mm:ss',\n dateTimeAM: 'MM/DD/YYYY hh:mm A',\n apiDate: 'YYYY/MM/DD',\n apiDateTime: 'YYYY-MM-DD[T]HH:mm:ssZ',\n apiDateTimeNoZ: 'YYYY-MM-DD[T]HH:mm:ss',\n apiDateMonthYear: 'MMM DD YYYY',\n urlParam: 'YYYY-MM-DD',\n },\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AdminConfig } from '../configs/admin.config';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\n@Pipe({ name: 'localDatetime' })\nexport class LocalDateTimePipe implements PipeTransform {\n transform = (\n value: string,\n config?: { format: string; timeZone: string }\n ): string => {\n // Assume timezone is at UTC0 if there's have no timezone.\n const { format, timeZone } = config || {\n format: AdminConfig.format.dateTimeAM,\n timeZone: 'America/Chicago',\n };\n\n if (!value) {\n return '-';\n }\n\n // Check if UTC0.\n if (value.indexOf('Z') !== -1) {\n return moment(value).format(format);\n }\n\n // const utc0String = moment.tz(value, timeZone).toISOString();\n const utc0String = moment.utc(value).toISOString();\n return moment(utc0String).format(format);\n }\n}\n\n@Pipe({ name: 'localDate' })\nexport class LocalDatePipe implements PipeTransform {\n transform = (\n value: string,\n config?: { format: string; timeZone: string }\n ): string => {\n // Assume timezone is at UTC0 if there's have no timezone.\n\n const { format, timeZone } = config || {\n format: AdminConfig.format.date,\n timeZone: 'America/Chicago',\n };\n\n if (!value) {\n return '-';\n }\n\n // Check if UTC0.\n\n if (value.indexOf('Z') !== -1) {\n return moment(value).format(format);\n }\n\n // const utc0String = moment.tz(value, timeZone).toISOString();\n\n const utc0String = moment.utc(value).toISOString();\n\n return moment(utc0String).format(format);\n }\n}\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport {\n UploadAssetsService,\n AssetService,\n FileService,\n NodeTreeService,\n BaseHttpClient\n} from './services/index';\n\nimport { AssetManagementComponent } from './asset-management.component';\nimport { DirectivesModule } from './directives/directives.module';\n\n// UI\nimport { InputFileComponent } from './components/ui//input-file/input-file.component';\nimport { ModalComponent } from './components/ui//modal/modal.component';\nimport { SearchNotFoundComponent } from './components/ui//search-not-found/search-not-found.component';\n\n// Partials\nimport { FileItemComponent } from './components/partial/file-item/file-item.component';\nimport { FileListComponent } from './components/partial/file-list/file-list.component';\nimport { UploadFileComponent } from './components/partial/upload-file/upload-file.component';\nimport { AddFolderDialogComponent } from './components/partial/add-folder-dialog/add-folder-dialog.component';\nimport { EditFolderDialogComponent } from './components/partial/edit-folder-dialog/edit-folder-dialog.component';\nimport { DeleteDialogComponent } from './components/partial/delete-dialog/delete-dialog.component';\nimport { UploadDialogComponent } from './components/partial/upload-dialog/upload-dialog.component';\nimport { FolderItemComponent } from './components/partial/folder-item/folder-item.component';\nimport { FolderListComponent } from './components/partial/folder-list/folder-list.component';\nimport { AssetListComponent } from './components/partial/asset-list/asset-list.component';\nimport { AssetItemComponent } from './components/partial/asset-item/asset-item.component';\nimport { AssetManagementDialogComponent } from './components/partial/asset-management-dialog/asset-management-dialog.component';\nimport { NodeTreeComponent } from './components/partial/node-tree/node-tree.component';\nimport { AssetDialogComponent } from './components/partial/asset-dialog/asset-dialog.component';\nimport { BreadcrumbComponent } from './components/partial/breadcrumb/breadcrumb.component';\nimport { SearchBoxComponent } from './components/partial/search-box/search-box.component';\nimport { SortItemsComponent } from './components/partial/sort-items/sort-items.component';\nimport { AssetWrapperComponent } from './components/partial/asset-wrapper/asset-wrapper.component';\nimport { NodeDetailsComponent } from './components/partial/node-details/node-details.component';\nimport { DragToResizeComponent } from './components/ui/drag-to-resize/drag-to-resize.component';\n\n\n// Pipes\nimport { FileSizePipe } from './pipes/file-size.pipe';\nimport { AMConfig } from './services/env-config.service';\nimport { LocalDatePipe, LocalDateTimePipe } from './pipes/datetime.pipe';\n\n// SERVICES\nconst SERVICES = [\n UploadAssetsService,\n AssetService,\n FileService,\n NodeTreeService,\n BaseHttpClient\n];\n\nconst COMPONENTS = [\n // UI\n InputFileComponent,\n ModalComponent,\n SearchNotFoundComponent,\n DragToResizeComponent,\n\n // Partials\n UploadFileComponent,\n FileItemComponent,\n FileListComponent,\n UploadDialogComponent,\n AddFolderDialogComponent,\n EditFolderDialogComponent,\n DeleteDialogComponent,\n AssetDialogComponent,\n FolderListComponent,\n NodeDetailsComponent,\n FolderItemComponent,\n AssetListComponent,\n AssetItemComponent,\n NodeTreeComponent,\n BreadcrumbComponent,\n SearchBoxComponent,\n SortItemsComponent,\n AssetWrapperComponent,\n AssetManagementDialogComponent,\n];\n\nconst ENTRY_COMPONENTS = [\n ModalComponent,\n UploadDialogComponent,\n AddFolderDialogComponent,\n EditFolderDialogComponent,\n DeleteDialogComponent,\n AssetDialogComponent,\n AssetManagementDialogComponent,\n];\n\nexport function AMFactory(config: AMConfig) {\n const fn = () => {\n return new Promise(res => {\n return setTimeout(() => res(config));\n });\n };\n return fn;\n}\n\n@NgModule({\n declarations: [\n ...COMPONENTS,\n AssetManagementComponent,\n FileSizePipe,\n LocalDatePipe,\n LocalDateTimePipe,\n ],\n imports: [\n DirectivesModule,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatDialogModule,\n MatButtonModule,\n MatInputModule,\n MatIconModule,\n MatDialogModule,\n MatButtonModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n MatPaginatorModule,\n MatTableModule,\n MatProgressBarModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTreeModule,\n MatSelectModule,\n MatProgressSpinnerModule,\n ],\n exports: [\n ...COMPONENTS,\n AssetManagementComponent,\n DirectivesModule,\n FileSizePipe,\n LocalDatePipe,\n LocalDateTimePipe,\n ],\n providers: [\n ...SERVICES,\n {\n provide: APP_INITIALIZER,\n useFactory: AMFactory,\n deps: SERVICES,\n multi: true,\n }\n ],\n entryComponents: [...ENTRY_COMPONENTS],\n})\nexport class AssetManagementModule {\n constructor() {}\n}\n"]}