@rs-pk/asset-management 1.0.31 → 1.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/rs-pk-asset-management.umd.js +124 -69
- package/bundles/rs-pk-asset-management.umd.js.map +1 -1
- package/bundles/rs-pk-asset-management.umd.min.js +2 -2
- package/bundles/rs-pk-asset-management.umd.min.js.map +1 -1
- package/esm2015/lib/asset-management.component.js +2 -1
- package/esm2015/lib/asset-management.module.js +2 -12
- package/esm2015/lib/asset-management.service.js +3 -2
- package/esm2015/lib/components/partial/add-folder-dialog/add-folder-dialog.component.js +2 -1
- package/esm2015/lib/components/partial/asset-dialog/asset-dialog.component.js +2 -1
- package/esm2015/lib/components/partial/asset-item/asset-item.component.js +2 -1
- package/esm2015/lib/components/partial/asset-list/asset-list.component.js +4 -4
- package/esm2015/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +3 -2
- package/esm2015/lib/components/partial/asset-wrapper/asset-wrapper.component.js +3 -2
- package/esm2015/lib/components/partial/breadcrumb/breadcrumb.component.js +5 -5
- package/esm2015/lib/components/partial/delete-dialog/delete-dialog.component.js +2 -1
- package/esm2015/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.js +2 -1
- package/esm2015/lib/components/partial/file-item/file-item.component.js +2 -1
- package/esm2015/lib/components/partial/file-list/file-list.component.js +2 -1
- package/esm2015/lib/components/partial/folder-item/folder-item.component.js +2 -1
- package/esm2015/lib/components/partial/folder-list/folder-list.component.js +4 -3
- package/esm2015/lib/components/partial/node-details/node-details.component.js +3 -5
- package/esm2015/lib/components/partial/node-tree/node-tree.component.js +9 -8
- package/esm2015/lib/components/partial/search-box/search-box.component.js +3 -4
- package/esm2015/lib/components/partial/sort-items/sort-items.component.js +2 -1
- package/esm2015/lib/components/partial/upload-dialog/upload-dialog.component.js +14 -2
- package/esm2015/lib/components/partial/upload-file/upload-file.component.js +2 -1
- package/esm2015/lib/components/ui/drag-to-resize/drag-to-resize.component.js +2 -1
- package/esm2015/lib/components/ui/input-file/input-file.component.js +2 -1
- package/esm2015/lib/components/ui/modal/modal.component.js +2 -1
- package/esm2015/lib/components/ui/search-not-found/search-not-found.component.js +2 -1
- package/esm2015/lib/configs/admin.config.js +2 -1
- package/esm2015/lib/contanst/data-image.js +2 -1
- package/esm2015/lib/contanst/index.js +2 -1
- package/esm2015/lib/datasources/index.js +2 -1
- package/esm2015/lib/datasources/node-tree.datasource.js +7 -6
- package/esm2015/lib/directives/dialogTrigger.directive.js +2 -1
- package/esm2015/lib/directives/directives.module.js +2 -1
- package/esm2015/lib/directives/dnd.directive.js +2 -1
- package/esm2015/lib/models/asset-file.model.js +2 -1
- package/esm2015/lib/models/asset.model.js +2 -1
- package/esm2015/lib/models/file-type.enum.js +4 -3
- package/esm2015/lib/models/file.model.js +2 -1
- package/esm2015/lib/models/index.js +2 -1
- package/esm2015/lib/models/node-tree.model.js +2 -1
- package/esm2015/lib/models/sort.enum.js +2 -1
- package/esm2015/lib/pipes/datetime.pipe.js +2 -1
- package/esm2015/lib/pipes/file-size.pipe.js +2 -1
- package/esm2015/lib/services/asset.service.js +2 -1
- package/esm2015/lib/services/base.service.js +2 -1
- package/esm2015/lib/services/env-config.service.js +2 -1
- package/esm2015/lib/services/file.service.js +2 -1
- package/esm2015/lib/services/index.js +2 -1
- package/esm2015/lib/services/node-tree.service.js +9 -8
- package/esm2015/lib/services/upload-assets.service.js +2 -1
- package/esm2015/lib/store/actions.action.js +11 -10
- package/esm2015/lib/store/index.js +2 -1
- package/esm2015/lib/store/reducer.js +11 -10
- package/esm2015/public-api.js +8 -1
- package/esm2015/rs-pk-asset-management.js +5 -10
- package/esm5/lib/asset-management.component.js +2 -1
- package/esm5/lib/asset-management.module.js +6 -16
- package/esm5/lib/asset-management.service.js +3 -2
- package/esm5/lib/components/partial/add-folder-dialog/add-folder-dialog.component.js +2 -1
- package/esm5/lib/components/partial/asset-dialog/asset-dialog.component.js +2 -1
- package/esm5/lib/components/partial/asset-item/asset-item.component.js +2 -1
- package/esm5/lib/components/partial/asset-list/asset-list.component.js +6 -6
- package/esm5/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +3 -2
- package/esm5/lib/components/partial/asset-wrapper/asset-wrapper.component.js +3 -2
- package/esm5/lib/components/partial/breadcrumb/breadcrumb.component.js +6 -6
- package/esm5/lib/components/partial/delete-dialog/delete-dialog.component.js +2 -1
- package/esm5/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.js +2 -1
- package/esm5/lib/components/partial/file-item/file-item.component.js +2 -1
- package/esm5/lib/components/partial/file-list/file-list.component.js +4 -3
- package/esm5/lib/components/partial/folder-item/folder-item.component.js +2 -1
- package/esm5/lib/components/partial/folder-list/folder-list.component.js +4 -3
- package/esm5/lib/components/partial/node-details/node-details.component.js +5 -7
- package/esm5/lib/components/partial/node-tree/node-tree.component.js +17 -16
- package/esm5/lib/components/partial/search-box/search-box.component.js +5 -6
- package/esm5/lib/components/partial/sort-items/sort-items.component.js +2 -1
- package/esm5/lib/components/partial/upload-dialog/upload-dialog.component.js +17 -5
- package/esm5/lib/components/partial/upload-file/upload-file.component.js +4 -3
- package/esm5/lib/components/ui/drag-to-resize/drag-to-resize.component.js +2 -1
- package/esm5/lib/components/ui/input-file/input-file.component.js +2 -1
- package/esm5/lib/components/ui/modal/modal.component.js +2 -1
- package/esm5/lib/components/ui/search-not-found/search-not-found.component.js +2 -1
- package/esm5/lib/configs/admin.config.js +2 -1
- package/esm5/lib/contanst/data-image.js +2 -1
- package/esm5/lib/contanst/index.js +2 -1
- package/esm5/lib/datasources/index.js +2 -1
- package/esm5/lib/datasources/node-tree.datasource.js +15 -12
- package/esm5/lib/directives/dialogTrigger.directive.js +2 -1
- package/esm5/lib/directives/directives.module.js +5 -4
- package/esm5/lib/directives/dnd.directive.js +2 -1
- package/esm5/lib/models/asset-file.model.js +2 -1
- package/esm5/lib/models/asset.model.js +4 -3
- package/esm5/lib/models/file-type.enum.js +4 -3
- package/esm5/lib/models/file.model.js +2 -1
- package/esm5/lib/models/index.js +2 -1
- package/esm5/lib/models/node-tree.model.js +2 -1
- package/esm5/lib/models/sort.enum.js +2 -1
- package/esm5/lib/pipes/datetime.pipe.js +2 -1
- package/esm5/lib/pipes/file-size.pipe.js +2 -1
- package/esm5/lib/services/asset.service.js +2 -1
- package/esm5/lib/services/base.service.js +4 -3
- package/esm5/lib/services/env-config.service.js +2 -1
- package/esm5/lib/services/file.service.js +2 -1
- package/esm5/lib/services/index.js +2 -1
- package/esm5/lib/services/node-tree.service.js +16 -15
- package/esm5/lib/services/upload-assets.service.js +4 -3
- package/esm5/lib/store/actions.action.js +11 -10
- package/esm5/lib/store/index.js +2 -1
- package/esm5/lib/store/reducer.js +12 -11
- package/esm5/public-api.js +8 -1
- package/esm5/rs-pk-asset-management.js +5 -10
- package/fesm2015/rs-pk-asset-management.js +111 -61
- package/fesm2015/rs-pk-asset-management.js.map +1 -1
- package/fesm5/rs-pk-asset-management.js +115 -63
- package/fesm5/rs-pk-asset-management.js.map +1 -1
- package/lib/asset-management.module.d.ts +1 -1
- package/lib/components/partial/add-folder-dialog/add-folder-dialog.component.d.ts +1 -1
- package/lib/components/partial/asset-dialog/asset-dialog.component.d.ts +1 -1
- package/lib/components/partial/asset-item/asset-item.component.d.ts +1 -1
- package/lib/components/partial/asset-management-dialog/asset-management-dialog.component.d.ts +1 -1
- package/lib/components/partial/asset-wrapper/asset-wrapper.component.d.ts +1 -1
- package/lib/components/partial/edit-folder-dialog/edit-folder-dialog.component.d.ts +1 -1
- package/lib/components/partial/file-item/file-item.component.d.ts +4 -4
- package/lib/components/partial/file-list/file-list.component.d.ts +1 -1
- package/lib/components/partial/folder-list/folder-list.component.d.ts +1 -1
- package/lib/components/partial/node-details/node-details.component.d.ts +3 -3
- package/lib/components/partial/node-tree/node-tree.component.d.ts +1 -1
- package/lib/components/partial/upload-dialog/upload-dialog.component.d.ts +2 -1
- package/lib/components/partial/upload-file/upload-file.component.d.ts +1 -1
- package/lib/components/ui/drag-to-resize/drag-to-resize.component.d.ts +1 -1
- package/lib/datasources/node-tree.datasource.d.ts +2 -1
- package/lib/services/asset.service.d.ts +1 -1
- package/lib/services/node-tree.service.d.ts +3 -2
- package/lib/services/upload-assets.service.d.ts +4 -4
- package/package.json +9 -9
- package/public-api.d.ts +6 -0
- package/rs-pk-asset-management.d.ts +2 -8
- 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","__read","o","m","r","ar","error","__spread","concat","AssetModel","_super","FolderTreeModel","tslib_1.__extends","None","InProcessing","Processed","Failed","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","DialogConfig","baseUrl","asset2Url","initOptionFiles","defineProperty","pageFolderSize","keyword","pageSize","pageIndex","pageFolderIndex","folderTotal","fileTotal","sortBy","SortFilesBy","sortOrder","TypeSort","resetData","setAssetList","setFolderList","resetAsset","getFolderList","asObservable","folders","pagination","setFolderTreePagination","setFolderPagination","getAssetList","assets","totalFile","setPagination","setDialogOpenStatus","status","getDialogOpenStatus","PageIndex","PageSize","Total","getAssetById","assetId","get","getChildrenFolders","_a","_b","isFilter","_c","_d","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$","getValue","values","fetchChildrenFolder","id","AMConfig","toPromise","Data","initialData","dispatchRootId","type","ActionTypes","payload","AssetId","rootFolder","initData","Children","folder","getDynamicFlatNode","node","DynamicFlatNode","isExpandable","getChildren","Boolean","HaveChildren","addNode","asset","parentId","data","findIndex","ParentId","updateBreadcrumb","find","hierarchy","getFolderHierarchy","getAssetParent","parentHierarchy","parent","UploadAssetsService","files","fileNames","uploadErrors","Map","supportedSize","documentExtension","compressedExtension","imageExtension","supportedTypes","messageErrors","size","ext","replace","maxLength","errorObs$","getErrorObs","setErrorObs","invalidFiles","filter","file","valid","deleteFile","index","delete","splice","getUploadName","nameSplit","name","split","uploadMultipleAssets","parentAssetId","formData","FormData","append","post","FileService","addFolder","folderName","updateFile","fileName","description","replaceAsset","ids","HttpHeaders","getFileDetail","AssetManagementDialogComponent","dialogRef","destroy$","ngOnInit","initDialogConfig","takeUntil","subscribe","limit","selectAssets","close","maxSize","ngOnDestroy","complete","Component","selector","template","decorators","MAT_DIALOG_DATA","MatDialogRef","AssetManagementComponent","isDialog","hasModifyPermission","hasAccessPermission","hasArchivePermission","assetChange","EventEmitter","dispatcher","ACTIONS.ActionTypes","console","warn","bindSubscriber","res","openAssetsDialog","onAssetsChange","emit","config","permission","access","modify","archive","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","imageZip","imageCsv","fileDefault","SearchNotFoundComponent","domSanitizer","base64Image","bypassSecurityTrustUrl","DomSanitizer","FileItemComponent","uploadAssetService","documentExts","base64PNG","pdf","zip","csv","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","handleAssetPaging","_err","log","UploadDialogComponent","changeDetectorRef","disabled","errorMessages","defaultErrorMessage","fileType","clearErrors","detectChanges","onValidate","hasError","uploadFiles","disableClose","setUploadErrors","getErrorMessages","stopLoading","clear","messages","uploadNames","message","Messages","Text","ChangeDetectorRef","FolderItemComponent","openFolder","renameFolder","OriginalFileName","deleteFolder","FolderListComponent","onPageChange","loading","unsubscribe$","ngOnChanges","paginator","pageChange","ViewChild","MatPaginator","static","AssetListComponent","backgroundProcessingNum","BackgroudProcessingStatus","processingCheckDelay","changes","checkProcessingAssets","onSelectAsset","newSelectedAssets","switchMap","of","fetchChildrenAssets","add","Meta","TotalFile","stopProcessingCheck","some","processingCheckTimer","setTimeout","reloadProcessingAssets","processingCheckRequest","clearTimeout","unsubscribe","FileSizePipe","units","transform","bytes","precision","isNaN","parseFloat","String","isFinite","unit","toFixed","Pipe","AssetDialogComponent","fileSize","assetsService","linkDownload","isCopied","patternError","replaceMessage","default","isUpdating","FileTypeEnum","getAssetDetail","assetDetails","Extension","OriginalFileNameWithoutExtension","Description","acceptTypes","updateAsset","deleteAsset","validateFile","matchExt","extError","match","onChangeDescription","copyText","content","selBox","style","position","left","top","opacity","appendChild","focus","execCommand","removeChild","timer","AssetItemComponent","selectAsset","_bindSubscriber","editAsset","onUploadAgain","_openUploadDialog","onDelete","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","ROOT_ASSET_ID","isRoot","homeLoading","loadingMoreList","folderChildrenMap","getLevel","hasChild","_nodeData","treeControl","FlatTreeControl","dataSource","total","TotalFolder","getFolderChildrenSize","children","canLoadMore","rootId","handleDatasourceChange","handleReloadFolder","maps","nodeId","getParent","has","selectNode","backToHome","loadMoreFolder","setLoadingMore","itemsPerPage","Math","round","assetChildren","updatedData","error_1","checked","currentLevel","currentNode","getNodeById","parent_1","updatedNode","BreadcrumbComponent","maximumShownLevel","navigateToFolder","SearchBoxComponent","folderId","bindingSubscriber","onSubmit","searchByName","clearSearch","combineLatest","assetsRes","SortItemsComponent","typeSort","sortList","onSortBy","toggleSortOrder","AssetWrapperComponent","header","nodeTreeMinWidth","nodeTreeMaxWidth","nodeTreeWidth","onResize","width","NodeDetailsComponent","fetchNodeDetails","fetchFolder","openUploadDialog","deleteAssets","getFolderPagePagination","foldersRes","onFolderPageChange","folderPagination","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 pageIndex?: number;\n pageSize?: number;\n}\n\nexport interface IInitialFolderTreeOptions {\n dispatchRootId?: boolean;\n pageSize?: number;\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: number;\n IsRoot: boolean;\n IsFolder: boolean;\n TotalFile: number;\n TotalFolder: number;\n HaveChildren: boolean;\n ParentId?: string;\n Children?: AssetModel[];\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 maxSize?: number;\n permission?: {\n access: boolean,\n modify: boolean,\n archive: boolean,\n };\n}\n\nexport enum BackgroudProcessingStatus {\n None = 0,\n InProcessing,\n Processed,\n Failed\n}\n\nexport const MAX_FOLDER_TREE_SIZE = 10;\nexport const DEFAULT_FOLDER_TREE_INDEX = 0;\nexport const ROOT_ASSET_ID = 'ROOT';","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 pageFolderSize?: number;\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 MAX_FOLDER_TREE_SIZE,\n DEFAULT_FOLDER_TREE_INDEX\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 pageFolderSize: number;\n public pageFolderIndex: number;\n public folderTotal: number;\n public fileTotal: number;\n public sortBy: SortFilesBy;\n public sortOrder: TypeSort;\n public dialogConfig: DialogConfig = new DialogConfig();\n public maxSize?: number;\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 get AMConfig(){\n return {\n pageFolderSize: this._env.pageFolderSize\n }\n } \n\n private initOptionFiles() {\n this.keyword = '';\n this.pageSize = 12;\n this.pageIndex = 0;\n this.pageFolderSize = this._env.pageFolderSize || MAX_FOLDER_TREE_SIZE;\n this.pageFolderIndex = 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, pagination?: any) {\n this.setFolderTreePagination(pagination);\n this.setFolderPagination(pagination);\n this.folderList$.next(folders);\n }\n\n getAssetList(): Observable<AssetModel[]> {\n return this.assetList$.asObservable();\n }\n\n setAssetList(assets: AssetModel[], pagination?: any, totalFile?: number) {\n this.setPagination(pagination, totalFile);\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: any, totalFile: number) {\n if (pagination) {\n this.fileTotal = totalFile || 0;\n this.pageIndex = pagination.PageIndex;\n this.pageSize = pagination.PageSize;\n }\n }\n\n private setFolderPagination(pagination) {\n if (pagination) {\n this.folderTotal = pagination.Total;\n this.pageFolderIndex = pagination.PageIndex;\n this.pageFolderSize = pagination.PageSize;\n }\n }\n\n public setFolderTreePagination(pagination) {\n if (pagination) {\n this.folderTotal = pagination.Total;\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, pageIndex = DEFAULT_FOLDER_TREE_INDEX, pageSize = this._env.pageFolderSize || MAX_FOLDER_TREE_SIZE }: IAssetByIdPayload) {\n const url = `${this.baseUrl}/File/GetChildren`;\n let params = new HttpParams()\n .set('getAll', 'true')\n .set('isFolder', 'true')\n .set('pageSize', `${pageSize}`)\n .set('pageIndex', `${pageIndex}`);\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, MAX_FOLDER_TREE_SIZE } 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, pageSize?: number): Promise<FolderTreeModel> {\n try {\n const result = await this.assetService\n .getChildrenFolders({ assetId: id, isFilter: false, pageSize: pageSize || this.assetService.AMConfig.pageFolderSize || MAX_FOLDER_TREE_SIZE })\n .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,\n pageSize = this.assetService.AMConfig.pageFolderSize || MAX_FOLDER_TREE_SIZE,\n }: IInitialFolderTreeOptions): Promise<DynamicFlatNode[]> {\n if (dispatchRootId) {\n this.loading$.next(true);\n }\n const result = await this.assetService.getChildrenFolders({ isFilter: false, pageIndex: 0, pageSize }).toPromise();\n if (!result) {\n return;\n }\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((folder) => this.getDynamicFlatNode(folder, 0));\n this.initialData$.next(initData);\n\n if (dispatchRootId) {\n this.loading$.next(false);\n }\n return this.initialData$.getValue();\n }\n\n public getDynamicFlatNode(node: FolderTreeModel, level = 0): DynamicFlatNode {\n return new DynamicFlatNode(node, level, this.isExpandable(node));\n }\n\n public async getChildren(node: FolderTreeModel, pageSize?: number): Promise<FolderTreeModel> {\n return await this.fetchChildrenFolder(node.AssetId, pageSize);\n }\n\n public isExpandable(node: FolderTreeModel): boolean {\n return Boolean(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 uploadErrors = new Map<File, string[]>();\n public supportedSize = 10 * 1024 * 1024; // 10MB\n public readonly documentExtension = ['.pdf', '.csv'];\n public readonly compressedExtension = ['.zip'];\n public readonly imageExtension = [\n '.png',\n '.gif',\n '.jpeg',\n '.jpg',\n '.svg',\n '.svg+xml',\n ];\n public supportedTypes = [...this.imageExtension, ...this.compressedExtension, ...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.uploadErrors.delete(this.files[index]);\n this.files.splice(index, 1);\n this.fileNames.splice(index, 1);\n }\n\n public getUploadName(index: number): string {\n const nameSplit = this.files[index].name.split('.');\n const ext = `.${nameSplit.splice(nameSplit.length - 1, 1)[0]}`;\n return `${this.fileNames[index].name}${ext}`;\n }\n\n uploadMultipleAssets(parentAssetId: string) {\n const { files } = this;\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 formData.append('files', files[i], this.getUploadName(i));\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, Input, 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\n this.assetService.dialogConfig = data;\n this.assetService.maxSize = data.maxSize;\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 @Input() maxSize?: number;\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\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 this.assetService.maxSize = this.maxSize;\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 maxSize: this.maxSize,\n permission: {\n access: this.hasAccessPermission,\n modify: this.hasModifyPermission,\n archive: this.hasArchivePermission,\n }\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,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAAXNSR0IArs4c6QAAIABJREFUeF7tnQmYFdWZ9//n1l2a3oCGbpq1G2QREDeIYOICsnW34BZRY0yimUxcIJjkM35mnozBL37jZOI2YlRMjMkYJ5EsGqOZOG5RMTrEmCFK3EUEhd5omt7uUlVnnrfgZlpyu+92qu6pe9+T5z5gqHrPW/96z6/OfgR8km677bbqcDg81bbtqVLKmUKIRgCVQohKKWWZTx6D3fS5AkIICSABoNe27d5AIPCBlPL1QCCwwzTNHevWrev00yMK3Z2lgh+JRKZblnWiEGKxlPJoAA0AIrr7zv6VhAIEgw8BvCKlfN4wjGdM03zTLyDQGgC33nrruHA43CSEOFtK+TEAE0oipPgh/apAp5TyZQCPSikfWrdu3U7dH0RbAFDhD4VCa4QQlwOYo7uQ7B8rMEiBnVLKH0op79UdAloCYNOmTSMtyzoHwFVc+Llg+VSBnUKIuxKJxD3r169v1/UZtAMAtfmDweBKIcRXpJQn6ioc+8UKZKDAawBus237Z7r2CWgHgE2bNh1v2/a1UsozMxCYL2EFtFZASvmCYRjfvOyyyx7X0VGtAHDo6/8ZAP/AHX46hgv7lIMCNCz4fdu2v6NjLUArANx1113HSCn/UUr5yRyE5ltYAV0V2CKlvHbt2rVP6+agVgC44447zgLwbQAzdROK/WEFclVACLFbSvkvV1xxxcZcbbh1nzYAuPnmm0eUlZVdCuCfAIxw64HZLitQAAViUsrvAfj62rVrewuQ/5BZagOAjRs3TjAM42sAvqyTQOwLK6BCASnlgwCuXrt27dsq7KmyoQ0A7r777pmmaVLn3+dUPRzbYQV0UUBK+bhhGP9w2WWXvaSLT+SHNgD47ne/eyyAa2nar04CsS+sgCIFnhdCXHv55Zc/pcieEjPaAODOO+88QUq5AUCzkidjI6yAXgpstW37unXr1v1GJ7cYADq9DfalmBVgAAz3drkGUMyxz88GgAGgMwCEEAgEAhypGipg2zakpH04fJ0YALoAgAp7KBRCeXk5ysrKEA6HEQwGHQDQv3HSRwEq+JZlOb94PI5oNOr8naAwOB3+3gb/N/2d7Bz+IxtJ2x4AhgFQaABQIFCBHzlyJEaNGoXq6mpUVFQ4/59hGPpEPXvyEQWocFJhHRgYQH9/P0zTdH7037FYzCnYyQJ/eMEnQ4MBQHaSNQr6k+wQWJI2k0Bw4RUwAAoJAPriU8Gvq6tzflTw+WvvQph7ZJIKal9fH3p7ex0QUCE+vFaQqSsEkEQi8dcf2SKwEBQUJgZAoQBAVfxx48Zh8uTJzpef2/oKw7rApqiQEgj279/v1A5yhUDyMQgGydpFEiyKQMAAKAQAqPCPHz8ejY2NqKqqKnC4cvZuKJBsHuzbt8+pEeQLAfIxWSsgCCRBQLWOPBIDwGsAULW/vr4e06ZN48KfR+T65VbqIOzo6HAgkGdh/esjEwioSUC1DPrlURtgAHgJAGrfjx07FjNmzEBNTY1fYpj9zFOBJAR6enqU1ASS7lDBJ7DQj/oLckgMAC8BQEN89OWfMmUKt/lziFa/3kJfbOoLaG9vd77YKlOy45HgQrWCLBMDwCsA0Nef2v2zZs1yevs5lZYCVFC7urrQ2dmZT5U9pWjUv0BgOXDgQLYQYAB4BQAa16evP/04laYC1BRoa2sDfa1VJ4IA1TK6u7uzgQADwCsAUJt/5syZTh8Ap9JUgAop1QKoKaCqQ3CwkjlAgAHgFQCo+j9nzhyMGME7i5Vm8T/41NRhR7UAGsZzI2UJAQaAFwCg9j91/M2dO5c7/9yIeh/ZpI46qgHQJCG3UhYQYAB4AQCa5Td16lTMnj3brXfOdn2iABVOmhxEtQA3F/tkCAEGgBcAoEU91PlHIwCcWAH6+u/du9eVfoAs+wQYAAwALpBeK0CjAK2trc7iHrdTmpoAA4AB4HYIsv3DFaDhOmoCqJ4UNJTSw0CAAcAA4ALqtQI0AkAdgW7MB8gSAgwABoDX4c/5FQIApHqKmgADgAHABdJrBQoFgBQQYAAwALwOf86vkAAYDIEDBw5sHRgY4HMBhgpJVduC8zAgF/rBChQaAEkIxGKxt6LR6A0XXnjhvTq9IW22wGUA6BQWxeOLDgAgNaWUUdu2H5FSXr969eptuijMANDlTbAfriigCwDo4YQQ+6WUvzJN8xZdIMAAcCXs2KguCugEAB0hwADQJVLZD1cU0A0AukGAAeBK2LFRXRTQEQA6QaBgANgABE5dvDgM7C+zDDOyZ8GyBfEx9V+1DOO0fIKHRgEaZ8zEjHlH52OG7y0SBXQFgC4Q8BQATy9uLAvY1eMTIjBdCDQIiZoAZIUlUJGoHDkpOqZ2oRUpb8wn9mg/gHEfOxGTV5yejxm+t0gU0BkAOkDAEwA8vXhOpWkbU4MB43gp8HEpcRwkZgmBajfibOSy01H72UvdMM02faaA7gAoNARcB8CWZfOnJEyzWUpxGgQWAmhwO4YYAG4r7B/7fgBAISHgKgCeWDpvWtA2/s6W+CyASV6FDQPAK6X1z8cvACgUBFwDwDOnzJ9nGdaXIHEWgFovQ4UB4KXaeuflJwAMgsC/A/hOc3Pze26r6woA6MsfsI1rIPH3bj9AKvsMgEKormeefgPAIQi8b9v2JgDfa2lpaXdTWeUAeGLpUeMMK/gFCVzp9Zc/KRQDwM2Q8ZdtPwKAFJZSviaE+NdoNPrA2Wef7dq2xkoBsH3NnHBrR9kqSPtaAMcUKlQYAIVSXr98/QqAQ0q+JIT4ZyHEb1euXKn2oMNDGSgFwJOnzT8CtnkVpPi8EAgXKhwYAIVSXr98fQ6AqBDiMSHEDStXrvwvN9RVBoCDX//wuZC4DsB0N5zN1CYDIFOliv86nwOAXlAbgLtN0/zX1atXd6h+Y8oA8PTioydJYVwNKb+k2sls7TEAslWseK+nQ0JpU1A6zdfH6Q9CiOuampoeVf0MygDw1JLjTpU2viWEPFm1k9naYwBkq1jxXu/F8WAeqNcthLgvFAr989KlSz9QmZ8SAMgNCDz9zDEXQ4obAYxW6WAuthgAuahWnPckEgl0dnY6P5+n123b/nZ5efmPlyxZYqp6FiUA+P2JJ46IRaJXSsgbVDmWjx0GQD7qFde9Xp0P6IFqMSnl/cFg8B9XrFjxoar8lADgxeaFkxLx+NcSllyvyrF87DAA8lGv+O6l9j8dD0bNAZ+n5wBc29zc/DtVz6EEAG+t/sTcjmjsGwMJ8wJVjuVjhwGQj3rFd28RjAQkX8oOAN9ubm6mWYJKkhIAvHP2STPbewe+3p+wLlbiVZ5GGAB5Clhkt1uWha6uLqcfwDSVNZ8LoVI/gE2maX5j9erV9Pe8kxIA7FuzbMq73d3/tydhXuHmOeyZPi0DIFOlSuc6Gg6kQ0K9PCPQJXUftizrmlWrVr2mwr4SAHSsOW3inr7+qw/EEutjlqXCr7xsMADykq8ob6bOwO7ubnR0dPi6L0AIQTMCNzQ1Nf1WxYtSBoCeePzq/dH4+q5Y4TtaGAAqQqP4bNCQ4P79+53mAP3dp+kvAK5vbm7+iQr/lQHAltbVXdH4+r19UVhSqvAtZxsMgJylK/obkxCg2kAsFvPd8wohdkgplXUEKgOAIcTV/YnE+g97+9GTKGxHCwPAd3HtqcPUEUhDg/v27fMdBIQQrbZt39jS0kKT7vJOSgFg2/b6zmgMrf1RJGw7b+dyNcAAyFW50rmPRgYIAsmagI9GB3qklLe2tLTQkvu8k1IABCDXR00Le/uj2BeL06YGeTuYiwEGQC6qld491DFIowO9vb3o6+tz+gUIBIWK2wzfgCmEuK2pqen/ZHj9sJcpBwAV+Z54Anv6BtBboKYAA0BFaJSODaoNEAioT4B+BAGCA/3cgAHZJNuUbw55UNX69ubmZtpxK++kHADkkS0luuMJUIdgfwEmXjAA8o6LkjVABZIAkGPhzEg3AgDlkfxRzYOmKdOflH+aRB1sG5ubm7+a7sJM/t0VAAyGQFs/QcByoOBVYgB4pTTnk68CVOCp4FMNhKYs049qIQSgVElKGacmQHNz89fyzZvudw0ASQhQM4A6BunPuJWWbiqeCQwAJTKyEY8VoEJPAKD+CPoRCFLUCAaklLe1tLRco8I9VwFADtJ3P2ZaTpOgh0hn2s4IgZs1AgaAitBgG4VSgEBAAKBJS/TnYRDoE0Lc2tTU9A0V/rkOgKSTVOCjlu30CdBIQZw6QWwJ+p+tsHVgiwAqFp6EMSvPUKEP23BTASGAUBiyvAL2iHLn75wOKkD9BFQboLkKNEoxqElw4BAAvqlCK88AMNhZ6g5ISBumTYX/4E9VsgIGjNpxKK8fr8ok23FLARGAjJTBrqyGrKqGrB4Ne/QY2CNHQ1aNdP6t1BP1DdAqRlrERBAQQuy3bfuWlpaW/6dCm4IAQIXjbKP4FJDllbDHTYBVWw9r8lSYRxwJu2YsEAwV38Nm8URUE0hCwLbtfUKIm5qamv4pCxNDXsoAUKEi21CrgBBOLcCcMQfmrHmwps50/rtUEzUHqBlAuxsPDAy0Sylvamlp+bYKPRgAKlRkG+4oYBiwa+uRmDcf8WMXObWDUk00Z4D6A7q6ulpN07ypubn5Oyq0YACoUJFtuKqArKhC4tiFiJ20HHbtOFfz0tl4f38/7WfQ2tPTwwDQ+UWxb+oVkNWjED/hFMQ+sdTpICzFdGhrs8729vabVq5cqWQHbq4BlGIk+fSZqTkQO3kFEvM/XrIjBAcOHOhqbW29eenSpdereI0MABUqsg3PFDCnz0a06RxYjTM8y1OnjPr7+zv3799/06JFi7gGoNOLYV+8UUBWViN+4mLETl7pTCAqtWSa5v5YLHbL7NmzeR5Aqb18ft6DCphTZyC28myY0+eUnCRSygStBWhsbLxKxcNzE0CFimzDUwVoVCB2ygrEFrcAhuFp3hpkRtNm73znnXeuVHFGIANAgzfKLmSvQOLoBYiuOh92TW32N/v/jnvC4fCV9fX1ffk+CgMgXwX5/oIoYDUcgSg1A2YeVZD8C5mpbdv3JhKJL8+YMeNAvn4wAPJVkO8viAJW/STElq12JgiVWmIAlNob5+f9GwXssXWInbbKmRxUaokBQFsZVVYhMLEBgdpxECMqgEAg+ziQNmQ0CtnTDdl7ALKvF7K7y/kzpxQKIzBuPIxJjRAVlbmtYrMtyHgMGBiA3bMfcl/nQZ+iAzm55Nykwq80uZPPcv8+2B+8D7ttT+6+ZninPaoGsSWnI/6JpRneUTyXlTwARFkZgscuRGj5KhiTp0JUVufWG0y7vvb3QnZ2wN5/sKBZO96G+fKLsPd+kF3E0D4EM+cgvOIMGDPnIkCr18I5bHBhWZAD/ZB9PZCd7bD27Ib15l9gvfoy7I627Hyiq1X5lQ4A0QHItj1IbN2C+JOPQu7ryN7XLO6g1YE0ChA/eXkWdxXHpSUPAGPaTETO/SyC809U/kZlVycSLz2PxLNPwHr3TcDM7Ay5wNhxCJ95gQMApYm2T2vbA3PrFiS2Pgdr57sA1RAyTK75NUT+9t4PEX9kM+K/ewxIuHdOJAOgVDsBg0GEFzch8qkvOM0ANxJVZ603XkX8N7+E+eeXgAy2Ng8etxCRC78AY8o0N1xyagXWG9sRf+o3MP97KxCLZpSP236lciLxX88h9uNNrjYFGAAlCgBRVY3IqjUIn3VhRgUgn4vMv2xD7IEfwHr91bRmQkuaUXbxWoiyEWmvzecC6+3XEfvVT2Fu+0NGEPDKr8HPZG57CbGf3nOwBuVSYgCUKAACNWMRPuN8hJvPcSm0/tesjEVhPv8UYr+4L237O7zyLJR9/kuu+wQ6uOLVPyH2sx/BenN72vw88yvpiWUh8cLvEPvJPbA7WtP6l+sFDAAGQK6xk9V9dvtexB/7FRJP/YfTMTdU8rKg0YgFdbTFH97sjF4Ml7z0i/ygQh9/5GeIP/7rjJpOWb2MQRczABgAKWPHGdbrz3AYTwQgIpGD1fZhhhHNV15G7Kc/gPX2azkDIFO/HH9olZsYfliT+ihim3/o1AbyAUCmfqUtqImE0/NvvvoyEs8/BXvP7rS35HMBA4ABkDJ+bArCbS/B3vlO+vgKBCCqR4JGFYxps4bsVLR37UDsl/cj8funcwaA9forSLz4bFqfqPAHJk6B0XgERN0EiFDqHXFpyDJGX9pfb6ZN5F33K63j1HG6Zzfs93ekrZWktZXBBQwABsCQAIg//ADi//HLDMIIQDiCII3fr1oD6jFPlWiikFPYHvpJzgUt/thDiP5gY3qfAgFQP4dx9AKETlmO4KyjUtdOpETi2f9E9L67IHuGbgakawJk7Fd6zz29ggHAAFADAJpVWDYCoeWrETn3c6BJRn+TbMsZfovdt2nIGXmqC5rj0ykrEP7kRQiMqkn5rDQcGPvJ92G9N3RtR7VfnpbyYTJjADAAlAGADAUXnYqyiy51phanSuaLzyJKY9vte1P+uxsFzZhzDMou+DwMqgWkSNSsiG6+F9b2be7XTHQp+Yf8YAAwANQC4ISTUPbpLyJQPzE1ALZuQfT+u4ecIuwKAI44EpE1nx2yaeLMCfj5j2D+aSsDQDNAuelOSU8FTjcPgDoBs+oDOPSmggwAN2NWuW2uAXANgGsAXAPgxUB5otV3G4JwDeB/3zg3AXg1YJ7lHwwAbgJkNjyZb6Qpvp+bANwE4CYANwG4CZAnWLkGwDUArgHkWYi8vp1HAYZZDcijAB8NRzeGJ70O+FT5cROAmwDcBFDQBKA5BPGnHk1fpmmrMlpota/94DLfRGY7JaU3nNsVDAAGgFIAhBadishFX0Sgtj6lXWeN+32bYHem3pfPjS+t4cFEINnfB3lgf9pSKGlXpP5eZ5Uf7fhDC64y3S4trfEcLmAAMACUAYDm/4eWno7Ims8d3GH48GSaiD/5CGL3fw+0SUiq5FcA5FD2nG3SaMMPN3f8SecXA4ABkD8AaDlweQWM2Ucj0vJJ0Nz7VEnu70Ts4c2IP/rzIeOylABAG6fGfv0A4o/+Il05de3fGQAMgNSFtb8P5it/HHaBzF9vNAyIqpEIzj1myAU3dK214y1nWzDzD88zAADn3ALaMJVWIhYqMQAYAN7EnpTOLrzOjkDvvc0AIAAM9Du1IdqXsFCJAcAA8CT2aOcd2t8u/ptfDHtiUCk1AezdOxF78MdIbHnKk3eQKhMGAAPA/eAzE0j88QXEfv5vzlZXw6WiBwAdWRYdgN22F+bW55B47gnn74VKDAAGgOuxR1V+p+2/dUvavPwKAOv9d2G99ue0zweaB9DX44DQfP3VjIYO0xvN/QoGAAMg9+hJcycdDmrteBOJZx8H7QQ01NDfYDN+BQDvCehaGLlmWM+pwFJcHQjI9a499SHD6ZYD55W/aTpbftGpO4ktT8J6+w1A2hmZZABkJJOyi7gGoFsNwI8AoNOB6SReOta6ex9kWyvM11+B9ec/Djnjb6gIZgAoK9sZGWIAMABSBgrNV7ffewtWJucCWLazhz2dvktfftm2F3Z3F6i9m21iAGSrWH7XMwAYACkjKNfVgPmFI8AAyFfB7O5nADAAGAAKVgNyJ2B24NHhau4EdGE/gHxfLNcA8lUwu/u5BsA1AK4BcA2AtwTLjpt/c7W6LcE0GQUoqj6AWXMRWXMxgvOOT/marTe3I7b5R87iJy9HJ/KMOSW3cw2AawDFXQMIGAjNX4TI+ZcgMHlqymdVcWw59wEo4ZGnRrgPoMj7AESkDIEJkxE6dSVCp65w9ixIlRIvPoOYc15hK9cAPC2Chc2MAeBDAFBhjT+8OX3klJXBmNTgbE5CR4OL0WNS3uMsyX3sIWeh0nD787nROZn+Idy/gpsA3ATwVROAvtL27vfSlgxRXonA+IkQ1aOGvdZ+/11noVLixWeHvY4BkFZy313ANQAf1gBURhntyGO+8Axiv/g32K17GAAqxfWBLQZAiQPA/uB9xH55PxJbnkgbrlwDSCuR7y4oaQCIkaMRWX0ewqvPS90E6GxH/OGfIv7bhzx9seHlq1F2yTrACLqaL+1QRMuUqf0/XOdf0olh/ZIS8d8+iOgPv+uqz24Y5z6AEu0DQKQM4eWrEDnvElBv+eGJ9q2PPfjvSDzzmBtxN6TNg+cKXIpA7Th38pW2U91PvPCM8+WnbbkyScP5RTv80FZnsQfuzcSUVtcwAEoVAACC8xeh7MK/R2BS40eDUtowt29zNqu0Xn/F04A1jpiFyLmfQ/D4hcrzpcM7aOceavfTASVUC8g0DeeX/eEuxB6836lR+C0xAEoYAIG68c74eOikZQjUT3Bil3btcU6tefZxJJ75T2eZr5dJVI9E6IRTEFragsCkBohwJL/saa+C/j7YHW2w3trunMZjv/OG8/9lk1L6RRuf7GuHSUOTTzwKu/XDbExqcS0DQCMA9F2wfIJpW18D8GWvokPUjEXouIUwjpwHBIOgwyqsN/8C841Xnb8XIonKKhhHHo3gUcdBjKqBMIys3ZC2DcRjBzcq6eoEdfjRuQS0X0Gu6SN+VY+CHOiD/d7boJmE9t4PcjVb0PscACxpQfyk5QX1oxCZa9cJ2LPm5FpLBK8SEFd7Kggd7EGz5EJhgM64iw54mn3KzEQAomwEREWlA6ask3MIZz/kwIDas/cO+YWyEUAidrAmQbDxabJrxiK25HTET1zi0yfI3W3tANB+xieqwpHwVyDEdbk/Ft/JCmSugF03AbGlqxCf//HMbyqSK7UDgPzi/FBP96gvSSlvKhKN+TE0V8Ca2IDY8jOROCr1SknN3c/LPe0AQE/Te95pn7IhbpKQ4/N6Or6ZFchAAXPmXESbz4U1xErJDEz49hItAdB3/mnHWxDXSinP9K2y7LgvFJDhCOKLFiO24ixI6tMosaQlALrXrKwRwrzMhrxGAFUl9k74cT1UwKqfiNjS1Ugct8jDXPXJSksAkDxd5y1dEhDyekiUXs+MPvFR1J7Q1z9x7ELElq2GXVNb1M861MNpC4Cez6yos2PWpYCk+QA1Jfl2+KFdVcAaPxmx5WcgcfTHXM1HZ+PaAoBE6z5/2SJIuQGQK3UWkX3znwKysgrxBSchfvIK0ESgUk1aA6DrrMWjRMQ4TwBXQcoZpfqS+LnVKiBDYZhzj3Xa/lQLKOWkNQDoxbRfsHxCxLY/JaW8FAIMgVKOVhXPbgRhTp3hTPwxZ8xVYdHXNrQHgAOBc04eHw4a50AEPgMp5gGy3Neqs/MFUUCOqHAKP035NWcfUxAfdMvUFwAg0eSnm6t7ErFTpcAFUuIkATEJkAHdBGV/9FOAevvtMXUwp89G4vgTS3LCj+9GAVI5/FZzc6S+Mn6ECbspALEMQszFwdmCIf3Cjj0qtAIyUuYM79EMP/PIebAappd0h1+q9+GbGsBg5+VnVlR098vZwrAXSmEfBylmQGKUECiTQJkUgRGJYLDKChh/u81PFlFJRx0ZwSCCuazEyyIfvlSRArRkOhiGDIUgK6pgTZgMa/I0WJMbS3acP52yvgTA4Iei5cOmCM0OSlFnQlYGAqK8o7LmiNaauqaBUGROOgGG+/dAIIAxY2pQV+fS1lz5OMf3flSBg7QGwhE4X/5RNbBr652/cxpaAd8DINWj3XnnnSdIZ/4AmvN5+YZhYNq0aZg1a1Y+ZvheVkBbBRgAw7waBoC2ccuOKVKAAcAAUBRKbMaPCjAAGAB+jFv2WZECDAAGgKJQYjN+VIABwADwY9yyz4oUYAAwABSFEpvxowIMAAaAH+OWfVakAAOAAaAolNiMHxVgADAA/Bi37LMiBRgADABFocRm/KgAA4AB4Me4ZZ8VKcAAYAAoCiU240cFGAAMAD/GLfusSAEGAANAUSixGT8qwABgAPgxbtlnRQowAHwKACklbNtWFAZsRrUCQgjQhjK6JwaAjwBAhT4ejyMWizl/EgDo/+OknwJU+EOhECKRCMLhMGhvCR0TA8AnALAsC319fejp6UF/f78DAE56K0CFfsSIEaisrERVVZUDAt0SA8AHAKCvPBX89vZ2RKNR3WKI/UmjAG0qW1NT4/x0qwkwAHwAAPrad3R0oKuriwubTxWgmkBdXZ1TG9ApMQB8AAD6+re2tjptf07+VIC+/FQDqK2tBXUQ6pIYAJoDgKr/9OXfu3cvd/jpUmpy9GPkyJGor6/X6pwJBoAPALBv3z4HAJz8rUB1dbUDABod0CUxADQHALl34MABBwCJREKXuGE/slSAhgWpCUD9ANwEyFK8bC8vtoNBqO1PIwDd3d3ZSsHXa6JAWVmZ0/6nWoBOiWsAPqgBUD8AFX6CAI//61R8MvOFOgBHjRqFsWPHatX+J+8ZAD4AALlI1X9qCtCIANUITNPMLPr4qoIpQNV+mglYXl4O6gCkoUDdEgPAJwA4RGun8NOMQJ4KrFtR+qg/yanAVOjpp+sJ0wwAHwFgsKu0DoCmB3PSUwHq6KOqv04dfqmUYgD4FAB6hj175TcFGAAMAL/FLPurUAEGAANAYTixKb8pwABgAPgtZtlfhQowABgACsOJTflNAQYAA8BvMcv+KlSAAcAAUBhObMpvCjAAGAB+i1n2V6ECDAAGgMJwYlN+U4ABwADwW8yyvwoVYAAwABSGE5vymwIMAAaA32KW/VWoAAPAhwCg/QFoIRCfDKSwJCg2lVwMpPvpQAwAHwGACjwtB6azAWg5MK8GVFxqFZojANAS4OR+ALwcWKG46UwV25Zg9Ly0AUhvb6+zKcjAwABvCJIuCDT5dzoNiHYDoq3ACAa6Ja4B+KAGQF/+5MlAfDaAbkUovT+0L8Do0aMxZswY7TYGYQD4AAC8KWj6Qqb7FbwpqIdvqNiaAFTtp5OBeENQD4NIcVa8LbhiQYczV0wA4JOBPAwcl7Pik4FcFjhpvtgAQCcDUQ2AYMDJvwowADx6d8UEAJKMmwAeBY6L2VATgDoB+XDy4rbfAAAGZUlEQVRQF0UuxhoAPRMfD+5B0LicBR8P7rLAg80XWw2Aqv40DNjW1sZHhHsYR6qyoklAyWFAGhLUKfEwoA+GAcnF5EQgAgHNBKSTgrhPQKei9FFfklOBafJPRUUFTwTy8lUVWw0gqR0VeCr4dDIQzQ3gtQBeRlV2eREAaBYgVf1pDoCuawK4BuCTGsDhbvLXP7sCWYirdT8ViDRhAPgUAIUIaM6z+BRgADAAii+q+YkyVoABwADIOFj4wuJTgAHAACi+qOYnylgBBgADIONg4QuLTwEGAAOg+KKanyhjBRgADICMg4UvLD4FGAAMgOKLan6ijBVgADAAMg4WvrD4FGAAMACKL6r5iTJWgAHAAMg4WPjC4lOgKAGwcePGBYZhfBPAqnxeGS3dnDZtGmbNmpWPGb6XFdBWgWIFwLxAIPANIcR5+SjPAMhHPffupYVQtDxa54NRkgeD6Lb+//C3UpQA2LRp0xGWZX0dwN/lE4YMgHzUU39v8mQkOhiFlkMTBHRdFUnLf2k5MC0FpiXBoVBIvSAKLBYlAG688cax5eXlXwVAEMg5MQBylk75jfS1p5ORuru70d/fr/XXf/DDU8GnU4HodCCCgW6pKAGwefNmo6Oj4xIA/wJgdK6iMwByVU79fVT4aUs0+vr7LVFtgAAwduxY7WoCRQkACpA77rhjGYDrASzMNWAYALkqp/Y++vp3dHQ4P78mag4QAGhvQJ1SMQNgmhDiK1LKzwMoz0V0BkAuqqm/h6r89PWnrdD8nKjwjx8/HjrtFFS0ANiwYUOwtra2ORAIbJBSHp9L4DAAclFN/T3Fci4CHwyiPjaGtbhx48YJhmF8QQhxhZRyXLbZMwCyVcyd65NbotNuyH5ODIACvL2NGzceaRjGegCfAjAqGxcYANmo5d61xXA6MsVS8mQg95TK3nLRNgEGS3HXXXcdI6X8opTydAANmcrEAMhUKXevo/H/rq4upxOQxv79mMrLy1FXV+ecEaBTKgkAkOC33357g2EYF0spLwIwBUA43YtgAKRTyLt/p1pAZ2enc06izjMAUylCcwFqamqcn27nA5QMAAZBoAnAYinlAgCTAUSGCmMGgHcFPF1ONOOPIEATgWguAJ2XmKwN6NSrnpyZmJwKTCcDVVZWoqqqSrs5AKR5SQGAHnjz5s3hjo6OqVLKkwB8XAhxnJRyghBiBAD6/XXOJgMgXbH0/t/p608gGHw8mo4ASE4FpmnANAdAJx8Hv7WSA0Dy4aWU4vbbbx9vGMYJUsrpACoDgUDl4BpBKBQKHXnkkcdOmTIl58lE3hcRzpEVyFyBkgVAJhK1tbVVRqPRLwP4VibX8zWsgN8UYAAM88YYAH4LZ/Y3WwUYAAyAbGOGry8iBRgAw7zM7du3V1ZVVXEToIgCnh/lowowAIaJiF27do2wbftKIcQNHDisQJEqcE84HL6yvr4+75VWotgEklIau3fvvlxKefPg4cFie05+ntJUQAhhAbiztbX1qwsWLEjkq0LRAYAE2bVr16ellDcByHoxUb6C8v2sgMsKHBBC3DJ58uQNKvIpSgDs3LlzmRDi/wM4QYVIbIMV0EiBt23bvqGxsfEHKnwqSgDs3r17pm3btLfgxSpEYhusgC4KCCGeFEJ8Y9KkSS+q8KkoAbBt27aKmpqaS6SUVE0ao0IotsEKFFoBIUSPlPL7UspvNTQ0dKnwpygBQMK8++67J9BBI0KIFhVCsQ1WQAMFXpJSXtfQ0PCIKl+KFgBvvfVWdSQSoWXE1xxaQahKM7bDCniugBCijb7+wWDwlgkTJijbabVoAUBv6L333psaCASuAEDbjXNTwPOw5QwVKdAN4CEhxE2TJ09+RZFNx0xRA4AecOfOnXMDgcCVUspPAqhRKR7bYgXcVkBK2RMIBB6zLOuWxsbG36vOr+gBQEuId+zYMc8wjMuFEGcCGK9aRLbHCrikQCeAx6SUdzY0NGxxI4+iB0BStF27ds0AcJGU8iwA9HfaSIQTK6CjArSV8rtU+A3DuG/ixIl/csvJkgEACbh37966WCx2CoDlABYIIabmcwyZWy+F7ZakAjYAauvvAPDfh8b7n500adJuN9UoKQAkhdyxY0d9OBw+wTTN4w5BoEYIUS6lDFKTwU3B2TYrkFRACCEB0Hx+WtRD1X0q/K/E4/GXp0+fvssLpf4H0SICtNnFpxsAAAAASUVORK5CYII=';\n\nexport const imageZip =\n 'data:image/png;base64,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';\n\nexport const imageCsv =\n 'data:image/png;base64,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';\n\nexport const fileDefault = \"data:image/png;base64,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\"\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, imageZip, imageCsv } 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 documentExts = ['pdf', 'zip', 'csv'];\n public base64PNG = {\n pdf: this.domSanitizer.bypassSecurityTrustUrl(imagePdf),\n zip: this.domSanitizer.bypassSecurityTrustUrl(imageZip),\n csv: this.domSanitizer.bypassSecurityTrustUrl(imageCsv),\n };\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 get uploadErrors(): string[] {\n return this.uploadAssetService.uploadErrors.get(this.file);\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 maxSize?: number;\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 public errorMessages: string[] = [];\n private readonly defaultErrorMessage = 'Something went wrong while uploading. Please try again.';\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 if (this.data.maxSize) {\n this.uploadAssetsService.supportedSize = this.data.maxSize * 1024 * 1024;\n }\n\n }\n\n ngOnInit() {\n this.uploadAssetsService\n .getErrorObs()\n .pipe(takeUntil(this.destroy$))\n .subscribe(error => {\n this.disabled = error;\n this.clearErrors();\n this.changeDetectorRef.detectChanges();\n });\n }\n\n onValidate(hasError: boolean) {\n this.disabled = hasError;\n this.clearErrors();\n }\n\n uploadFiles() {\n this.isLoading = true;\n this.clearErrors();\n this.dialogRef.disableClose = true;\n this.uploadAssetsService\n .uploadMultipleAssets(this.data.currentAssetId)\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n res => {\n if (res) {\n this.closeDialog(true);\n }\n },\n err => {\n this.setUploadErrors(this.getErrorMessages(err));\n this.stopLoading();\n },\n // the request can complete without a truthy response (or be swallowed by an interceptor)\n () => this.stopLoading()\n );\n }\n\n private stopLoading() {\n this.isLoading = false;\n this.dialogRef.disableClose = false;\n this.changeDetectorRef.detectChanges();\n }\n\n private clearErrors() {\n this.errorMessages = [];\n this.uploadAssetsService.uploadErrors.clear();\n }\n\n // show each message on the file it mentions, the rest stay under the list\n private setUploadErrors(messages: string[]) {\n const { getFiles: files, uploadErrors } = this.uploadAssetsService;\n const uploadNames = files.map((file, index) => this.uploadAssetsService.getUploadName(index));\n\n this.errorMessages = messages.filter(message => {\n let index = uploadNames.findIndex(name => message.indexOf(name) > -1);\n if (index < 0 && files.length === 1) {\n index = 0;\n }\n if (index < 0) {\n return true;\n }\n uploadErrors.set(files[index], [...(uploadErrors.get(files[index]) || []), message]);\n return false;\n });\n }\n\n private getErrorMessages(err): string[] {\n // HttpErrorResponse keeps the API body in `error`, an interceptor may already unwrap it\n const body = err && err.error && typeof err.error === 'object' ? err.error : err || {};\n const messages: string[] = (body.Messages || [])\n .map(message => (typeof message === 'string' ? message : message && message.Text))\n .filter(Boolean);\n\n if (!messages.length && body.ResponseMessage) {\n messages.push(body.ResponseMessage);\n }\n\n return messages.length\n ? messages.filter((message, index) => messages.indexOf(message) === index)\n : [this.defaultErrorMessage];\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 @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n\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, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetModel } from '../../../models';\nimport { select } from '../../../store';\nimport { MatPaginator, PageEvent } from '@angular/material';\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, OnChanges {\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n\n constructor() {\n this.bindSubscriber();\n }\n\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\n @Input() folders: AssetModel[];\n @Input() pagination: PageEvent;\n @Output() onPageChange = new EventEmitter<PageEvent>();\n\n public loading = false;\n private unsubscribe$ = new Subject<void>();\n\n ngOnChanges() {\n if (this.paginator && this.pagination) {\n this.paginator.pageIndex = this.pagination.pageIndex;\n this.paginator.pageSize = this.pagination.pageSize;\n this.paginator.length = this.pagination.length;\n }\n }\n\n ngOnInit() { }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n public pageChange(event?: PageEvent) {\n this.onPageChange.emit(event);\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}","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 { Subscription } from 'rxjs';\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, BackgroudProcessingStatus } 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 @Input() isDialog?: boolean;\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n\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 public backgroundProcessingNum = BackgroudProcessingStatus;\n\n private readonly processingCheckDelay = 5000;\n private processingCheckTimer;\n private processingCheckRequest: Subscription;\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.checkProcessingAssets();\n\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) => this.setAssetList(res))\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n private setAssetList(res) {\n const pagination = res && res.Meta || {};\n const assets = res && res.Data && res.Data.Children || [];\n const totalFile = res && res.Data && res.Data.TotalFile || 0;\n this.assetService.setAssetList(assets, pagination, totalFile);\n }\n\n // Called on every new asset list: while some files are still processed in the background,\n // reload the list once after a delay. The reloaded list calls this again, until nothing is processing.\n private checkProcessingAssets() {\n this.stopProcessingCheck();\n\n const hasProcessingAssets = this.assets && this.assets.some(\n (asset) => asset.BackgroudProcessingStatus === this.backgroundProcessingNum.InProcessing\n );\n if (hasProcessingAssets) {\n this.processingCheckTimer = setTimeout(() => this.reloadProcessingAssets(), this.processingCheckDelay);\n }\n }\n\n // Silent reload, without the global loading bar\n private reloadProcessingAssets() {\n if (!this.currentFolderId) {\n return;\n }\n this.processingCheckRequest = this.assetService\n .getChildrenAssets({ assetId: this.currentFolderId })\n .subscribe((res) => this.setAssetList(res));\n }\n\n private stopProcessingCheck() {\n clearTimeout(this.processingCheckTimer);\n if (this.processingCheckRequest) {\n this.processingCheckRequest.unsubscribe();\n }\n }\n\n ngOnDestroy() {\n this.stopProcessingCheck();\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, imageZip, imageCsv, fileDefault } from '../../../contanst';\nimport {\n AssetModel,\n FileTypeEnum,\n IAssetDetailsRes,\n IAssetUpdatedRes,\n} from '../../../models';\nimport { FileSizePipe } from '../../../pipes/file-size.pipe';\nimport { AssetService } from '../../../services/asset.service';\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 permission: {\n modify: boolean,\n access: boolean,\n archive: boolean,\n };\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 base64PNG = {\n pdf: this.domSanitizer.bypassSecurityTrustUrl(imagePdf),\n zip: this.domSanitizer.bypassSecurityTrustUrl(imageZip),\n csv: this.domSanitizer.bypassSecurityTrustUrl(imageCsv),\n default: this.domSanitizer.bypassSecurityTrustUrl(fileDefault),\n };\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 uploadAssetsService: UploadAssetsService,\n public assetsService: AssetService,\n private fileService: FileService,\n private domSanitizer: DomSanitizer,\n private svc: AssetManagementService\n ) {}\n\n ngOnInit() {\n this.uploadAssetsService.supportedSize = this.assetsService.maxSize * 1024 * 1024;\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.uploadAssetsService.messageErrors.replace\n } ${this.acceptTypes.join(', ')}`;\n errors.push(extError);\n }\n if (this.uploadAssetsService.supportedSize < file.size) {\n const maxSize = this.fileSize.transform(\n this.uploadAssetsService.supportedSize,\n 0\n );\n errors.push(`${this.uploadAssetsService.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 ChangeDetectorRef\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 { fileDefault, imageCsv, imagePdf, imageZip } from '../../../contanst';\nimport { AssetModel, BackgroudProcessingStatus, FileTypeEnum, FolderTreeModel } from '../../../models';\nimport { ActionTypes, select } from '../../../store';\nimport { AssetDialogComponent } from '../asset-dialog/asset-dialog.component';\nimport { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';\nimport { AssetService } from '../../../services/asset.service';\nimport { UploadDialogComponent } from '../upload-dialog/upload-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 @Input() isDialog?: boolean;\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n\n constructor(\n private dialog: MatDialog,\n private domSanitizer: DomSanitizer,\n public assetService: AssetService,\n private svc: AssetManagementService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this._bindSubscriber();\n }\n @Input() asset: AssetModel;\n\n @Output() selectAsset = new EventEmitter<AssetModel>();\n\n public base64PNG = {\n pdf: this.domSanitizer.bypassSecurityTrustUrl(imagePdf),\n zip: this.domSanitizer.bypassSecurityTrustUrl(imageZip),\n csv: this.domSanitizer.bypassSecurityTrustUrl(imageCsv),\n default: this.domSanitizer.bypassSecurityTrustUrl(fileDefault),\n };\n public errorMessage: string;\n public selectedAssets: Array<AssetModel> = [];\n public currentFolder: FolderTreeModel;\n public fileType = FileTypeEnum;\n public backgroundProcessingNum = BackgroudProcessingStatus;\n\n private destroy$: Subject<boolean> = new Subject();\n\n ngOnInit() {\n // get current folder\n this.assetService\n .getFolderList()\n .pipe(takeUntil(this.destroy$))\n .subscribe((folders) => {\n this.currentFolder = folders;\n this.changeDetectorRef.detectChanges();\n });\n }\n\n get checkSelectedAsset(): boolean {\n return (\n this.selectedAssets &&\n this.selectedAssets.some((asset) => asset.AssetId === this.asset.AssetId)\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 permission: {\n modify: this.hasModifyPermission,\n access: this.hasAccessPermission,\n archive: this.hasArchivePermission,\n }\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 public onUploadAgain(asset: AssetModel) {\n const ids = [];\n ids.push(asset.AssetId);\n const dialogRef = this.dialog.open(DeleteDialogComponent, {\n data: {\n type: 'file',\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 this._openUploadDialog();\n }\n });\n }\n\n public onDelete(asset: AssetModel) {\n const ids = [];\n ids.push(asset.AssetId);\n const dialogRef = this.dialog.open(DeleteDialogComponent, {\n data: {\n type: 'file',\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 _bindSubscriber() {\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.destroy$))\n .subscribe((selectedAssets) => {\n this.selectedAssets = selectedAssets;\n });\n }\n\n private _openUploadDialog() {\n const dialogRef = this.dialog.open(UploadDialogComponent, {\n data: {\n currentAssetId: this.currentFolder.AssetId,\n fileType: this.assetService.dialogConfig.allowedType,\n maxSize: this.assetService.maxSize\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 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, pageSize?: number) {\n if (!node) {\n return;\n }\n \n const newNode = await this._database.getChildren(node.item, pageSize);\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, MAX_FOLDER_TREE_SIZE, ROOT_ASSET_ID } from \"../../../models\";\nimport { AssetService } from \"../../../services/asset.service\";\nimport { NodeTreeService } from \"../../../services/node-tree.service\";\nimport { ActionTypes, select } from \"../../../store/index\";\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 public assetService: AssetService,\n private nodeTreeService: NodeTreeService,\n private svc: AssetManagementService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.treeControl = new FlatTreeControl<DynamicFlatNode>(this.getLevel, this.isExpandable);\n this.dataSource = new NodeTreeDataSource(this.treeControl, nodeTreeService);\n }\n\n @Input() width: number;\n\n public ROOT_ASSET_ID = ROOT_ASSET_ID;\n public currentFolderId: string;\n public isRoot = false;\n public homeLoading = false;\n public loading = false;\n public loadingMoreList = {};\n public treeControl: FlatTreeControl<DynamicFlatNode>;\n public dataSource: NodeTreeDataSource;\n public folderChildrenMap: Map<string, Map<string, DynamicFlatNode>> = new Map();\n private unsubscribe$ = new Subject<void>();\n\n get folderTreeMeta() {\n const rootFolder = this.folderChildrenMap.get(ROOT_ASSET_ID);\n return {\n length: rootFolder ? rootFolder.size : 0,\n total: this.nodeTreeService.rootFolder ? this.nodeTreeService.rootFolder.TotalFolder || \"0\" : 0,\n };\n }\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 public getFolderChildrenSize(id: string) {\n const children = this.folderChildrenMap.get(id);\n return children ? children.size : 0;\n }\n\n public canLoadMore(node: DynamicFlatNode) {\n const size = this.getFolderChildrenSize(node.item.AssetId);\n return size < node.item.TotalFolder;\n }\n\n private bindSubscriber() {\n this.nodeTreeService.loading$.pipe(takeUntil(this.unsubscribe$), distinctUntilChanged()).subscribe((loading) => {\n this.homeLoading = loading;\n this.changeDetectorRef.detectChanges();\n });\n\n this.nodeTreeService.initialData$.pipe(takeUntil(this.unsubscribe$), distinctUntilChanged()).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.pipe(takeUntil(this.unsubscribe$)).subscribe((data) => {\n if (data && data.length) {\n this.handleDatasourceChange(data);\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(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe(async () => {\n await this.handleReloadFolder(this.currentFolderId);\n this.changeDetectorRef.detectChanges();\n });\n }\n\n private handleDatasourceChange(data: DynamicFlatNode[] = []) {\n if (!data || !data.length) return;\n\n const maps = new Map<string, Map<string, DynamicFlatNode>>();\n maps.set(ROOT_ASSET_ID, new Map());\n\n data.forEach((node) => {\n const nodeId = node.item.AssetId;\n const parent = this.getParent(node);\n const parentId = parent ? parent.item.AssetId : ROOT_ASSET_ID;\n\n if (!maps.has(parentId)) {\n maps.set(parentId, new Map());\n }\n\n maps.get(parentId).set(nodeId, node);\n });\n\n this.folderChildrenMap = maps;\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 public async loadMoreFolder(node?: any) {\n const id = node ? node.item.AssetId : ROOT_ASSET_ID;\n try {\n this.setLoadingMore(id, true);\n\n const children = this.folderChildrenMap.get(id);\n const itemsPerPage = this.assetService.AMConfig.pageFolderSize || MAX_FOLDER_TREE_SIZE;\n const result = await this.assetService\n .getChildrenFolders({\n assetId: id === ROOT_ASSET_ID ? null : id,\n isFilter: false,\n pageIndex: Math.round((children ? children.size : 0) / itemsPerPage),\n })\n .toPromise();\n\n const assetChildren = result.Data.Children || [];\n\n // Handle datasource\n const index = this.dataSource.data.indexOf(node);\n const nodes = assetChildren.map((folder) => {\n this.nodeTreeService.addNode(folder, id);\n return this.nodeTreeService.getDynamicFlatNode(folder, node ? node.level + 1 : 0);\n });\n\n if (id !== ROOT_ASSET_ID) {\n const updatedData = this.dataSource.data.slice();\n updatedData.splice(index + 1, 0, ...nodes);\n this.dataSource.data = updatedData;\n } else {\n this.dataSource.data = [...this.dataSource.data, ...nodes];\n }\n this.setLoadingMore(id, false);\n this.changeDetectorRef.detectChanges();\n } catch (error) {\n console.log(\"Load more folder error\", error);\n this.setLoadingMore(id, false);\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\n if (node) {\n const parent = this.getParent(node);\n if (parent) {\n // Reload parent folder (get children and expand it again)\n const children = this.folderChildrenMap.get(parent.item.AssetId);\n await this.dataSource.reloadNode(parent, children.size);\n const updatedNode = this.getNodeById(id);\n if (updatedNode) {\n // TODO\n await this.treeControl.expand(updatedNode);\n }\n } else {\n const rootFolder = this.folderChildrenMap.get(ROOT_ASSET_ID);\n await this.nodeTreeService.initialData({ dispatchRootId: false, pageSize: rootFolder.size });\n const updatedNode = this.getNodeById(id);\n if (updatedNode) {\n // TODO\n await this.treeControl.expand(updatedNode);\n }\n }\n } else {\n // Reload root folder\n await this.nodeTreeService.initialData({ dispatchRootId: false });\n }\n this.loading = false;\n }\n\n private setLoadingMore(id: string, value: boolean) {\n this.loadingMoreList[id] = value;\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, assetsRes]) => {\n const pagination = assetsRes && assetsRes.Meta || {};\n const assets = assetsRes && assetsRes.Data && assetsRes.Data.Children || [];\n const totalFile = assetsRes && assetsRes.Data && assetsRes.Data.TotalFile || 0;\n this.assetService.setFolderList(folders.Data, { Total: folders.Data.TotalFolder });\n this.assetService.setAssetList(assets, pagination, totalFile);\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 @Input() isDialog?: boolean;\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n @Output() assets = new EventEmitter<AssetModel[]>();\n\n private unsubscribe$ = new Subject<void>();\n public nodeTreeMinWidth = 300;\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, Input, 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';\nimport { PageEvent } from '@angular/material';\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 @Input() isDialog?: boolean;\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n\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 public folderPagination: PageEvent;\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 maxSize: this.assetService.maxSize\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 const { pageIndex, pageSize } = this.getFolderPagePagination();\n\n this.assetService\n .getChildrenFolders({ assetId: id, pageIndex, pageSize })\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((res) => {\n const { Data } = res;\n const { Children } = Data;\n this.setFolderList(res);\n\n if (Children) {\n Children.forEach((node) => this.nodeTreeService.addNode(node, this.currentFolder.AssetId));\n }\n })\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n private setFolderList(res) {\n const { Data, Meta } = res;\n const { TotalFolder } = Data;\n const { PageIndex, PageSize } = Meta;\n\n this.assetService.setFolderList(Data, { Total: TotalFolder, PageIndex, PageSize });\n this.setFolderPagination({ length: TotalFolder, pageIndex: PageIndex, pageSize: PageSize });\n }\n\n private fetchNodeDetails(id: string) {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: true,\n });\n const { pageIndex, pageSize } = this.getFolderPagePagination();\n\n combineLatest([\n this.assetService.getChildrenFolders({ assetId: id, pageIndex, pageSize }),\n this.assetService.getChildrenAssets({\n assetId: id,\n }),\n ])\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(([foldersRes, assetsRes]) => {\n const pagination = assetsRes && assetsRes.Meta || {};\n const assets = assetsRes && assetsRes.Data && assetsRes.Data.Children || [];\n const totalFile = assetsRes && assetsRes.Data && assetsRes.Data.TotalFile || 0;\n this.setFolderList(foldersRes);\n this.assetService.setAssetList(assets, pagination, totalFile);\n if (foldersRes.Data && foldersRes.Data.Children) {\n foldersRes.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 public getFolderPagePagination() {\n return {\n pageIndex: this.assetService.pageFolderIndex,\n pageSize: this.assetService.pageFolderSize,\n length: this.assetService.folderTotal,\n };\n }\n\n public onFolderPageChange(event: PageEvent) {\n this.assetService.pageFolderIndex = event.pageIndex;\n this.assetService.pageFolderSize = event.pageSize;\n this.fetchFolder(this.currentFolder.AssetId);\n }\n\n private setFolderPagination(pagination: PageEvent) {\n if (!pagination) return;\n const { length, pageIndex, pageSize } = pagination;\n\n this.folderPagination = {\n pageIndex,\n pageSize,\n length\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}","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\n countryName: {\n US: \"United States\",\n CA: \"Canada\",\n },\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 mask: {\n phone: \"(000) 000-0000\",\n date: \"M0/d0/0000\",\n zipCode: {\n US: \"00000\",\n CA: \"AAA AAA\",\n },\n money: \"0*.00\",\n number: \"0*.00\",\n integer: \"0*\",\n tax: \"00.0000\",\n sku: \"0000000000000\",\n upca: \"000000000000\",\n pin: \"000000\",\n mi9ProductUpc: \"00000000000000\",\n },\n regex: {\n password: \"^(?=.*[a-zA-Z])(?=.*[0-9]).{6,12}\",\n bigyPassword: \"^(?=.*[a-zA-Z])(?=.*[0-9]).{8,}$\",\n url: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\.%_~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/,\n shortCode: \"^[A-Z0-9_]{1,20}$\",\n longCode: \"^[A-Z0-9_]{1,100}$\",\n email: /^[\\w-\\.]+@([\\w]+[\\.-])+[\\w-]{2,}$/,\n textWithoutSpecialChars: /^[a-zA-Z0-9\\. ]+$/,\n textWithSpecialChars: /^[a-zA-Z0-9_-]+$/, // Allow char '_ -'\n textWithSpaceAndSpecialChars: /^[a-zA-Z0-9\\. /_-]+$/, // Allow space and char '_ - /'\n address: /^[a-zA-Z0-9][a-zA-Z0-9\\_\\/\\. ]+$/,\n leadTimeKeyPress: /^[0-9mhdw ]+$/,\n leadTime: [\n /^(?:(?<minutes>\\d{0,2})m\\s*)?(?:(?<hours>\\d{0,3})h\\s*)?(?:(?<days>\\d{0,2})d\\s*)?(?:(?<weeks>\\d{0,2})w\\s*)?$/,\n /^(?:(?<weeks>\\d{0,2})w\\s*)?(?:(?<days>\\d{0,2})d\\s*)?(?:(?<hours>\\d{0,3})h\\s*)?(?:(?<minutes>\\d{0,2})m\\s*)?$/,\n ],\n userPIN: /^[0-9]{6}$/,\n storeCode: /^[0-9]{1,10}$/,\n sku: /^[0-9]{1,14}$/,\n sku13: /^[0-9]{1,13}$/,\n keyConfigProvider: /^[a-zA-Z0-9!*()_+\\-\\[\\]{}:\\\\|,.<>\\/]*$/, //not allow character '?#%='\n textNoSpace: /^[a-zA-Z]+$/,\n textWithSpace: /^(\\s+\\S+\\s*)*(?!\\s).*$/, //not allow a string containing only white spaces\n slug: /^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$/,\n tag: /^[a-zA-Z0-9](-?_?[a-zA-Z0-9])*$/,\n noSpace: /^[a-zA-Z0-9!*()_+\\-\\[\\]{}:\\\\|,.<>\\/\\?\\=\\&\\%\\#\\@]*$/,\n },\n pattern: {},\n pipe: {},\n pageSizeOptions: [5, 10, 25, 50, 100],\n\n maxOrderNumber: 99999,\n\n // TinyMCE\n tinyHeightDefault: \"75vh\",\n tinyMCEPluginConfig:\n \"print preview fullpage importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media template codesample table charmap hr pagebreak nonbreaking anchor toc insertdatetime advlist lists wordcount imagetools textpattern noneditable help charmap quickbars emoticons\",\n tinyMCEToolbarConfig:\n \"undo redo | bold italic underline strikethrough | fontselect fontsizeselect formatselect | fileManagerButton | alignleft aligncenter alignright alignjustify | outdent indent | numlist bullist checklist | forecolor backcolor | pagebreak | charmap emoticons | fullscreen preview save print | image media template link anchor codesample | ltr rtl\",\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 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","BackgroudProcessingStatus","None","InProcessing","Processed","Failed","item","level","expandable","isLoading","FileTypeEnum","IMAGE","DOCUMENT","SortFilesBy","NAME","CREATED_DATE","MODIFIED_DATE","TypeSort","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","DialogConfig","baseUrl","asset2Url","initOptionFiles","defineProperty","pageFolderSize","keyword","pageSize","pageIndex","pageFolderIndex","folderTotal","fileTotal","sortBy","sortOrder","resetData","setAssetList","setFolderList","resetAsset","getFolderList","asObservable","folders","pagination","setFolderTreePagination","setFolderPagination","getAssetList","assets","totalFile","setPagination","setDialogOpenStatus","status","getDialogOpenStatus","PageIndex","PageSize","Total","getAssetById","assetId","get","getChildrenFolders","_a","_b","isFilter","_c","_d","params","HttpParams","set","allowedType","getChildrenAssets","toString","MatDialog","eventDispatcher","Subject","AssetManagementService","getDispatcher","_dispatcher","dispatch","action","providedIn","ActionTypes","state","globalLoading","selectedAssets","deletedAssetId","currentFolder","currentFolderId","currentFolderHierarchy","reloadCurrentFolder","reloadCurrentAssets","reloadCurrentNode","store","select","mapFn","pipe","map","distinctUntilChanged","NodeTreeService","assetService","svc","storedData$","loading$","initialData$","getValue","values","fetchChildrenFolder","id","AMConfig","toPromise","Data","initialData","dispatchRootId","type","payload","AssetId","rootFolder","initData","Children","folder","getDynamicFlatNode","node","DynamicFlatNode","isExpandable","getChildren","Boolean","HaveChildren","addNode","asset","parentId","data","findIndex","ParentId","updateBreadcrumb","find","hierarchy","getFolderHierarchy","getAssetParent","parentHierarchy","parent","UploadAssetsService","files","fileNames","uploadErrors","Map","supportedSize","documentExtension","compressedExtension","imageExtension","supportedTypes","messageErrors","size","ext","replace","maxLength","errorObs$","getErrorObs","setErrorObs","invalidFiles","filter","file","valid","deleteFile","index","delete","splice","getUploadName","nameSplit","name","split","uploadMultipleAssets","parentAssetId","formData","FormData","append","post","FileService","addFolder","folderName","updateFile","fileName","description","replaceAsset","ids","HttpHeaders","getFileDetail","AssetManagementDialogComponent","dialogRef","destroy$","ngOnInit","initDialogConfig","takeUntil","subscribe","limit","selectAssets","close","maxSize","ngOnDestroy","complete","Component","selector","template","decorators","MAT_DIALOG_DATA","MatDialogRef","AssetManagementComponent","isDialog","hasModifyPermission","hasAccessPermission","hasArchivePermission","assetChange","EventEmitter","dispatcher","ACTIONS.ActionTypes","console","warn","bindSubscriber","res","openAssetsDialog","onAssetsChange","emit","config","permission","access","modify","archive","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","imageZip","imageCsv","fileDefault","SearchNotFoundComponent","domSanitizer","base64Image","bypassSecurityTrustUrl","DomSanitizer","FileItemComponent","uploadAssetService","documentExts","base64PNG","pdf","zip","csv","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","handleAssetPaging","_err","log","UploadDialogComponent","changeDetectorRef","disabled","errorMessages","defaultErrorMessage","isDestroyed","fileType","clearErrors","detectChanges","onValidate","hasError","uploadFiles","disableClose","setUploadErrors","getErrorMessages","stopLoading","clear","messages","uploadNames","message","Messages","Text","ChangeDetectorRef","FolderItemComponent","openFolder","renameFolder","OriginalFileName","deleteFolder","FolderListComponent","onPageChange","loading","unsubscribe$","ngOnChanges","paginator","pageChange","ViewChild","MatPaginator","static","AssetListComponent","backgroundProcessingNum","processingCheckDelay","changes","checkProcessingAssets","onSelectAsset","newSelectedAssets","switchMap","of","fetchChildrenAssets","add","Meta","TotalFile","stopProcessingCheck","some","processingCheckTimer","setTimeout","reloadProcessingAssets","processingCheckRequest","clearTimeout","unsubscribe","FileSizePipe","units","transform","bytes","precision","isNaN","parseFloat","String","isFinite","unit","toFixed","Pipe","AssetDialogComponent","fileSize","assetsService","linkDownload","isCopied","patternError","replaceMessage","default","isUpdating","getAssetDetail","assetDetails","Extension","OriginalFileNameWithoutExtension","Description","acceptTypes","updateAsset","deleteAsset","validateFile","matchExt","extError","match","onChangeDescription","copyText","content","selBox","style","position","left","top","opacity","appendChild","focus","execCommand","removeChild","timer","AssetItemComponent","selectAsset","_bindSubscriber","editAsset","onUploadAgain","_openUploadDialog","onDelete","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","ROOT_ASSET_ID","isRoot","homeLoading","loadingMoreList","folderChildrenMap","getLevel","hasChild","_nodeData","treeControl","FlatTreeControl","dataSource","total","TotalFolder","getFolderChildrenSize","children","canLoadMore","rootId","handleDatasourceChange","handleReloadFolder","maps","nodeId","getParent","has","selectNode","backToHome","loadMoreFolder","setLoadingMore","itemsPerPage","Math","round","assetChildren","updatedData","error_1","checked","currentLevel","currentNode","getNodeById","parent_1","updatedNode","BreadcrumbComponent","maximumShownLevel","navigateToFolder","SearchBoxComponent","folderId","bindingSubscriber","onSubmit","searchByName","clearSearch","combineLatest","assetsRes","SortItemsComponent","typeSort","sortList","onSortBy","toggleSortOrder","AssetWrapperComponent","header","nodeTreeMinWidth","nodeTreeMaxWidth","nodeTreeWidth","onResize","width","NodeDetailsComponent","fetchNodeDetails","fetchFolder","openUploadDialog","deleteAssets","getFolderPagePagination","foldersRes","onFolderPageChange","folderPagination","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","AMFactory","AssetManagementModule","FormsModule","ReactiveFormsModule","MatDialogModule","MatButtonModule","MatInputModule","MatIconModule","MatTooltipModule","MatPaginatorModule","MatTableModule","MatProgressBarModule","MatMenuModule","MatCheckboxModule","MatTreeModule","MatSelectModule","MatProgressSpinnerModule","provide","APP_INITIALIZER","useFactory","deps","multi"],"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 pageIndex?: number;\n pageSize?: number;\n}\n\nexport interface IInitialFolderTreeOptions {\n dispatchRootId?: boolean;\n pageSize?: number;\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: number;\n IsRoot: boolean;\n IsFolder: boolean;\n TotalFile: number;\n TotalFolder: number;\n HaveChildren: boolean;\n ParentId?: string;\n Children?: AssetModel[];\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 maxSize?: number;\n permission?: {\n access: boolean,\n modify: boolean,\n archive: boolean,\n };\n}\n\nexport enum BackgroudProcessingStatus {\n None = 0,\n InProcessing,\n Processed,\n Failed\n}\n\nexport const MAX_FOLDER_TREE_SIZE = 10;\nexport const DEFAULT_FOLDER_TREE_INDEX = 0;\nexport const ROOT_ASSET_ID = 'ROOT';","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 pageFolderSize?: number;\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 MAX_FOLDER_TREE_SIZE,\n DEFAULT_FOLDER_TREE_INDEX\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 pageFolderSize: number;\n public pageFolderIndex: number;\n public folderTotal: number;\n public fileTotal: number;\n public sortBy: SortFilesBy;\n public sortOrder: TypeSort;\n public dialogConfig: DialogConfig = new DialogConfig();\n public maxSize?: number;\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 get AMConfig(){\n return {\n pageFolderSize: this._env.pageFolderSize\n }\n } \n\n private initOptionFiles() {\n this.keyword = '';\n this.pageSize = 12;\n this.pageIndex = 0;\n this.pageFolderSize = this._env.pageFolderSize || MAX_FOLDER_TREE_SIZE;\n this.pageFolderIndex = 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, pagination?: any) {\n this.setFolderTreePagination(pagination);\n this.setFolderPagination(pagination);\n this.folderList$.next(folders);\n }\n\n getAssetList(): Observable<AssetModel[]> {\n return this.assetList$.asObservable();\n }\n\n setAssetList(assets: AssetModel[], pagination?: any, totalFile?: number) {\n this.setPagination(pagination, totalFile);\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: any, totalFile: number) {\n if (pagination) {\n this.fileTotal = totalFile || 0;\n this.pageIndex = pagination.PageIndex;\n this.pageSize = pagination.PageSize;\n }\n }\n\n private setFolderPagination(pagination) {\n if (pagination) {\n this.folderTotal = pagination.Total;\n this.pageFolderIndex = pagination.PageIndex;\n this.pageFolderSize = pagination.PageSize;\n }\n }\n\n public setFolderTreePagination(pagination) {\n if (pagination) {\n this.folderTotal = pagination.Total;\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, pageIndex = DEFAULT_FOLDER_TREE_INDEX, pageSize = this._env.pageFolderSize || MAX_FOLDER_TREE_SIZE }: IAssetByIdPayload) {\n const url = `${this.baseUrl}/File/GetChildren`;\n let params = new HttpParams()\n .set('getAll', 'true')\n .set('isFolder', 'true')\n .set('pageSize', `${pageSize}`)\n .set('pageIndex', `${pageIndex}`);\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\";\nimport { AssetManagementService } from \"../asset-management.service\";\nimport { AssetModel, DynamicFlatNode, FolderTreeModel, IInitialFolderTreeOptions, MAX_FOLDER_TREE_SIZE } 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, pageSize?: number): Promise<FolderTreeModel> {\n try {\n const result = await this.assetService\n .getChildrenFolders({ assetId: id, isFilter: false, pageSize: pageSize || this.assetService.AMConfig.pageFolderSize || MAX_FOLDER_TREE_SIZE })\n .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,\n pageSize = this.assetService.AMConfig.pageFolderSize || MAX_FOLDER_TREE_SIZE,\n }: IInitialFolderTreeOptions): Promise<DynamicFlatNode[]> {\n if (dispatchRootId) {\n this.loading$.next(true);\n }\n const result = await this.assetService.getChildrenFolders({ isFilter: false, pageIndex: 0, pageSize }).toPromise();\n if (!result) {\n return;\n }\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((folder) => this.getDynamicFlatNode(folder, 0));\n this.initialData$.next(initData);\n\n if (dispatchRootId) {\n this.loading$.next(false);\n }\n return this.initialData$.getValue();\n }\n\n public getDynamicFlatNode(node: FolderTreeModel, level = 0): DynamicFlatNode {\n return new DynamicFlatNode(node, level, this.isExpandable(node));\n }\n\n public async getChildren(node: FolderTreeModel, pageSize?: number): Promise<FolderTreeModel> {\n return await this.fetchChildrenFolder(node.AssetId, pageSize);\n }\n\n public isExpandable(node: FolderTreeModel): boolean {\n return Boolean(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 uploadErrors = new Map<File, string[]>();\n public supportedSize = 10 * 1024 * 1024; // 10MB\n public readonly documentExtension = ['.pdf', '.csv'];\n public readonly compressedExtension = ['.zip'];\n public readonly imageExtension = [\n '.png',\n '.gif',\n '.jpeg',\n '.jpg',\n '.svg',\n '.svg+xml',\n ];\n public supportedTypes = [...this.imageExtension, ...this.compressedExtension, ...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.uploadErrors.delete(this.files[index]);\n this.files.splice(index, 1);\n this.fileNames.splice(index, 1);\n }\n\n public getUploadName(index: number): string {\n const nameSplit = this.files[index].name.split('.');\n const ext = `.${nameSplit.splice(nameSplit.length - 1, 1)[0]}`;\n return `${this.fileNames[index].name}${ext}`;\n }\n\n uploadMultipleAssets(parentAssetId: string) {\n const { files } = this;\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 formData.append('files', files[i], this.getUploadName(i));\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, Input, OnDestroy, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\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\n this.assetService.dialogConfig = data;\n this.assetService.maxSize = data.maxSize;\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 @Input() maxSize?: number;\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\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 this.assetService.maxSize = this.maxSize;\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 maxSize: this.maxSize,\n permission: {\n access: this.hasAccessPermission,\n modify: this.hasModifyPermission,\n archive: this.hasArchivePermission,\n }\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,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';\n\nexport const imageZip =\n 'data:image/png;base64,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';\n\nexport const imageCsv =\n 'data:image/png;base64,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';\n\nexport const fileDefault = \"data:image/png;base64,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\"\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, imageZip, imageCsv } 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 documentExts = ['pdf', 'zip', 'csv'];\n public base64PNG = {\n pdf: this.domSanitizer.bypassSecurityTrustUrl(imagePdf),\n zip: this.domSanitizer.bypassSecurityTrustUrl(imageZip),\n csv: this.domSanitizer.bypassSecurityTrustUrl(imageCsv),\n };\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 get uploadErrors(): string[] {\n return this.uploadAssetService.uploadErrors.get(this.file);\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/dialog';\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 maxSize?: number;\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 public errorMessages: string[] = [];\n private readonly defaultErrorMessage = 'Something went wrong while uploading. Please try again.';\n private isDestroyed = false;\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 if (this.data.maxSize) {\n this.uploadAssetsService.supportedSize = this.data.maxSize * 1024 * 1024;\n }\n\n }\n\n ngOnInit() {\n this.uploadAssetsService\n .getErrorObs()\n .pipe(takeUntil(this.destroy$))\n .subscribe(error => {\n this.disabled = error;\n this.clearErrors();\n this.changeDetectorRef.detectChanges();\n });\n }\n\n onValidate(hasError: boolean) {\n this.disabled = hasError;\n this.clearErrors();\n }\n\n uploadFiles() {\n this.isLoading = true;\n this.clearErrors();\n this.dialogRef.disableClose = true;\n this.uploadAssetsService\n .uploadMultipleAssets(this.data.currentAssetId)\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n res => {\n if (res) {\n this.closeDialog(true);\n }\n },\n err => {\n this.setUploadErrors(this.getErrorMessages(err));\n this.stopLoading();\n },\n // the request can complete without a truthy response (or be swallowed by an interceptor)\n () => this.stopLoading()\n );\n }\n\n private stopLoading() {\n // takeUntil also completes the upload when the dialog is destroyed, its view can't be checked anymore\n if (this.isDestroyed) {\n return;\n }\n this.isLoading = false;\n this.dialogRef.disableClose = false;\n this.changeDetectorRef.detectChanges();\n }\n\n private clearErrors() {\n this.errorMessages = [];\n this.uploadAssetsService.uploadErrors.clear();\n }\n\n // show each message on the file it mentions, the rest stay under the list\n private setUploadErrors(messages: string[]) {\n const { getFiles: files, uploadErrors } = this.uploadAssetsService;\n const uploadNames = files.map((file, index) => this.uploadAssetsService.getUploadName(index));\n\n this.errorMessages = messages.filter(message => {\n let index = uploadNames.findIndex(name => message.indexOf(name) > -1);\n if (index < 0 && files.length === 1) {\n index = 0;\n }\n if (index < 0) {\n return true;\n }\n uploadErrors.set(files[index], [...(uploadErrors.get(files[index]) || []), message]);\n return false;\n });\n }\n\n private getErrorMessages(err): string[] {\n // HttpErrorResponse keeps the API body in `error`, an interceptor may already unwrap it\n const body = err && err.error && typeof err.error === 'object' ? err.error : err || {};\n const messages: string[] = (body.Messages || [])\n .map(message => (typeof message === 'string' ? message : message && message.Text))\n .filter(Boolean);\n\n if (!messages.length && body.ResponseMessage) {\n messages.push(body.ResponseMessage);\n }\n\n return messages.length\n ? messages.filter((message, index) => messages.indexOf(message) === index)\n : [this.defaultErrorMessage];\n }\n\n closeDialog(res?: boolean) {\n this.dialogRef.close(res);\n }\n\n ngOnDestroy(): void {\n this.isDestroyed = true;\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 @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n\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, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AssetModel } from '../../../models';\nimport { select } from '../../../store';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\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, OnChanges {\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n\n constructor() {\n this.bindSubscriber();\n }\n\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\n @Input() folders: AssetModel[];\n @Input() pagination: PageEvent;\n @Output() onPageChange = new EventEmitter<PageEvent>();\n\n public loading = false;\n private unsubscribe$ = new Subject<void>();\n\n ngOnChanges() {\n if (this.paginator && this.pagination) {\n this.paginator.pageIndex = this.pagination.pageIndex;\n this.paginator.pageSize = this.pagination.pageSize;\n this.paginator.length = this.pagination.length;\n }\n }\n\n ngOnInit() { }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n public pageChange(event?: PageEvent) {\n this.onPageChange.emit(event);\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}","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, Subject, Subscription } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { AssetManagementService } from '../../../asset-management.service';\nimport { AssetModel, BackgroudProcessingStatus } 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 @Input() isDialog?: boolean;\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n\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 public backgroundProcessingNum = BackgroudProcessingStatus;\n\n private readonly processingCheckDelay = 5000;\n private processingCheckTimer;\n private processingCheckRequest: Subscription;\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.checkProcessingAssets();\n\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) => this.setAssetList(res))\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n private setAssetList(res) {\n const pagination = res && res.Meta || {};\n const assets = res && res.Data && res.Data.Children || [];\n const totalFile = res && res.Data && res.Data.TotalFile || 0;\n this.assetService.setAssetList(assets, pagination, totalFile);\n }\n\n // Called on every new asset list: while some files are still processed in the background,\n // reload the list once after a delay. The reloaded list calls this again, until nothing is processing.\n private checkProcessingAssets() {\n this.stopProcessingCheck();\n\n const hasProcessingAssets = this.assets && this.assets.some(\n (asset) => asset.BackgroudProcessingStatus === this.backgroundProcessingNum.InProcessing\n );\n if (hasProcessingAssets) {\n this.processingCheckTimer = setTimeout(() => this.reloadProcessingAssets(), this.processingCheckDelay);\n }\n }\n\n // Silent reload, without the global loading bar\n private reloadProcessingAssets() {\n if (!this.currentFolderId) {\n return;\n }\n this.processingCheckRequest = this.assetService\n .getChildrenAssets({ assetId: this.currentFolderId })\n .subscribe((res) => this.setAssetList(res));\n }\n\n private stopProcessingCheck() {\n clearTimeout(this.processingCheckTimer);\n if (this.processingCheckRequest) {\n this.processingCheckRequest.unsubscribe();\n }\n }\n\n ngOnDestroy() {\n this.stopProcessingCheck();\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, imageZip, imageCsv, fileDefault } from '../../../contanst';\nimport {\n AssetModel,\n FileTypeEnum,\n IAssetDetailsRes,\n IAssetUpdatedRes,\n} from '../../../models';\nimport { FileSizePipe } from '../../../pipes/file-size.pipe';\nimport { AssetService } from '../../../services/asset.service';\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 permission: {\n modify: boolean,\n access: boolean,\n archive: boolean,\n };\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 base64PNG = {\n pdf: this.domSanitizer.bypassSecurityTrustUrl(imagePdf),\n zip: this.domSanitizer.bypassSecurityTrustUrl(imageZip),\n csv: this.domSanitizer.bypassSecurityTrustUrl(imageCsv),\n default: this.domSanitizer.bypassSecurityTrustUrl(fileDefault),\n };\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 uploadAssetsService: UploadAssetsService,\n public assetsService: AssetService,\n private fileService: FileService,\n private domSanitizer: DomSanitizer,\n private svc: AssetManagementService\n ) {}\n\n ngOnInit() {\n this.uploadAssetsService.supportedSize = this.assetsService.maxSize * 1024 * 1024;\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.uploadAssetsService.messageErrors.replace\n } ${this.acceptTypes.join(', ')}`;\n errors.push(extError);\n }\n if (this.uploadAssetsService.supportedSize < file.size) {\n const maxSize = this.fileSize.transform(\n this.uploadAssetsService.supportedSize,\n 0\n );\n errors.push(`${this.uploadAssetsService.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 ChangeDetectorRef\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 { fileDefault, imageCsv, imagePdf, imageZip } from '../../../contanst';\nimport { AssetModel, BackgroudProcessingStatus, FileTypeEnum, FolderTreeModel } from '../../../models';\nimport { ActionTypes, select } from '../../../store';\nimport { AssetDialogComponent } from '../asset-dialog/asset-dialog.component';\nimport { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component';\nimport { AssetService } from '../../../services/asset.service';\nimport { UploadDialogComponent } from '../upload-dialog/upload-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 @Input() isDialog?: boolean;\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n\n constructor(\n private dialog: MatDialog,\n private domSanitizer: DomSanitizer,\n public assetService: AssetService,\n private svc: AssetManagementService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this._bindSubscriber();\n }\n @Input() asset: AssetModel;\n\n @Output() selectAsset = new EventEmitter<AssetModel>();\n\n public base64PNG = {\n pdf: this.domSanitizer.bypassSecurityTrustUrl(imagePdf),\n zip: this.domSanitizer.bypassSecurityTrustUrl(imageZip),\n csv: this.domSanitizer.bypassSecurityTrustUrl(imageCsv),\n default: this.domSanitizer.bypassSecurityTrustUrl(fileDefault),\n };\n public errorMessage: string;\n public selectedAssets: Array<AssetModel> = [];\n public currentFolder: FolderTreeModel;\n public fileType = FileTypeEnum;\n public backgroundProcessingNum = BackgroudProcessingStatus;\n\n private destroy$: Subject<boolean> = new Subject();\n\n ngOnInit() {\n // get current folder\n this.assetService\n .getFolderList()\n .pipe(takeUntil(this.destroy$))\n .subscribe((folders) => {\n this.currentFolder = folders;\n this.changeDetectorRef.detectChanges();\n });\n }\n\n get checkSelectedAsset(): boolean {\n return (\n this.selectedAssets &&\n this.selectedAssets.some((asset) => asset.AssetId === this.asset.AssetId)\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 permission: {\n modify: this.hasModifyPermission,\n access: this.hasAccessPermission,\n archive: this.hasArchivePermission,\n }\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 public onUploadAgain(asset: AssetModel) {\n const ids = [];\n ids.push(asset.AssetId);\n const dialogRef = this.dialog.open(DeleteDialogComponent, {\n data: {\n type: 'file',\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 this._openUploadDialog();\n }\n });\n }\n\n public onDelete(asset: AssetModel) {\n const ids = [];\n ids.push(asset.AssetId);\n const dialogRef = this.dialog.open(DeleteDialogComponent, {\n data: {\n type: 'file',\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 _bindSubscriber() {\n select((state) => state.selectedAssets)\n .pipe(takeUntil(this.destroy$))\n .subscribe((selectedAssets) => {\n this.selectedAssets = selectedAssets;\n });\n }\n\n private _openUploadDialog() {\n const dialogRef = this.dialog.open(UploadDialogComponent, {\n data: {\n currentAssetId: this.currentFolder.AssetId,\n fileType: this.assetService.dialogConfig.allowedType,\n maxSize: this.assetService.maxSize\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 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, pageSize?: number) {\n if (!node) {\n return;\n }\n \n const newNode = await this._database.getChildren(node.item, pageSize);\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, MAX_FOLDER_TREE_SIZE, ROOT_ASSET_ID } from \"../../../models\";\nimport { AssetService } from \"../../../services/asset.service\";\nimport { NodeTreeService } from \"../../../services/node-tree.service\";\nimport { ActionTypes, select } from \"../../../store/index\";\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 public assetService: AssetService,\n private nodeTreeService: NodeTreeService,\n private svc: AssetManagementService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.treeControl = new FlatTreeControl<DynamicFlatNode>(this.getLevel, this.isExpandable);\n this.dataSource = new NodeTreeDataSource(this.treeControl, nodeTreeService);\n }\n\n @Input() width: number;\n\n public ROOT_ASSET_ID = ROOT_ASSET_ID;\n public currentFolderId: string;\n public isRoot = false;\n public homeLoading = false;\n public loading = false;\n public loadingMoreList = {};\n public treeControl: FlatTreeControl<DynamicFlatNode>;\n public dataSource: NodeTreeDataSource;\n public folderChildrenMap: Map<string, Map<string, DynamicFlatNode>> = new Map();\n private unsubscribe$ = new Subject<void>();\n\n get folderTreeMeta() {\n const rootFolder = this.folderChildrenMap.get(ROOT_ASSET_ID);\n return {\n length: rootFolder ? rootFolder.size : 0,\n total: this.nodeTreeService.rootFolder ? this.nodeTreeService.rootFolder.TotalFolder || \"0\" : 0,\n };\n }\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 public getFolderChildrenSize(id: string) {\n const children = this.folderChildrenMap.get(id);\n return children ? children.size : 0;\n }\n\n public canLoadMore(node: DynamicFlatNode) {\n const size = this.getFolderChildrenSize(node.item.AssetId);\n return size < node.item.TotalFolder;\n }\n\n private bindSubscriber() {\n this.nodeTreeService.loading$.pipe(takeUntil(this.unsubscribe$), distinctUntilChanged()).subscribe((loading) => {\n this.homeLoading = loading;\n this.changeDetectorRef.detectChanges();\n });\n\n this.nodeTreeService.initialData$.pipe(takeUntil(this.unsubscribe$), distinctUntilChanged()).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.pipe(takeUntil(this.unsubscribe$)).subscribe((data) => {\n if (data && data.length) {\n this.handleDatasourceChange(data);\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(\n takeUntil(this.unsubscribe$),\n switchMap((res) => of(res))\n )\n .subscribe(async () => {\n await this.handleReloadFolder(this.currentFolderId);\n this.changeDetectorRef.detectChanges();\n });\n }\n\n private handleDatasourceChange(data: DynamicFlatNode[] = []) {\n if (!data || !data.length) return;\n\n const maps = new Map<string, Map<string, DynamicFlatNode>>();\n maps.set(ROOT_ASSET_ID, new Map());\n\n data.forEach((node) => {\n const nodeId = node.item.AssetId;\n const parent = this.getParent(node);\n const parentId = parent ? parent.item.AssetId : ROOT_ASSET_ID;\n\n if (!maps.has(parentId)) {\n maps.set(parentId, new Map());\n }\n\n maps.get(parentId).set(nodeId, node);\n });\n\n this.folderChildrenMap = maps;\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 public async loadMoreFolder(node?: any) {\n const id = node ? node.item.AssetId : ROOT_ASSET_ID;\n try {\n this.setLoadingMore(id, true);\n\n const children = this.folderChildrenMap.get(id);\n const itemsPerPage = this.assetService.AMConfig.pageFolderSize || MAX_FOLDER_TREE_SIZE;\n const result = await this.assetService\n .getChildrenFolders({\n assetId: id === ROOT_ASSET_ID ? null : id,\n isFilter: false,\n pageIndex: Math.round((children ? children.size : 0) / itemsPerPage),\n })\n .toPromise();\n\n const assetChildren = result.Data.Children || [];\n\n // Handle datasource\n const index = this.dataSource.data.indexOf(node);\n const nodes = assetChildren.map((folder) => {\n this.nodeTreeService.addNode(folder, id);\n return this.nodeTreeService.getDynamicFlatNode(folder, node ? node.level + 1 : 0);\n });\n\n if (id !== ROOT_ASSET_ID) {\n const updatedData = this.dataSource.data.slice();\n updatedData.splice(index + 1, 0, ...nodes);\n this.dataSource.data = updatedData;\n } else {\n this.dataSource.data = [...this.dataSource.data, ...nodes];\n }\n this.setLoadingMore(id, false);\n this.changeDetectorRef.detectChanges();\n } catch (error) {\n console.log(\"Load more folder error\", error);\n this.setLoadingMore(id, false);\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\n if (node) {\n const parent = this.getParent(node);\n if (parent) {\n // Reload parent folder (get children and expand it again)\n const children = this.folderChildrenMap.get(parent.item.AssetId);\n await this.dataSource.reloadNode(parent, children.size);\n const updatedNode = this.getNodeById(id);\n if (updatedNode) {\n // TODO\n await this.treeControl.expand(updatedNode);\n }\n } else {\n const rootFolder = this.folderChildrenMap.get(ROOT_ASSET_ID);\n await this.nodeTreeService.initialData({ dispatchRootId: false, pageSize: rootFolder.size });\n const updatedNode = this.getNodeById(id);\n if (updatedNode) {\n // TODO\n await this.treeControl.expand(updatedNode);\n }\n }\n } else {\n // Reload root folder\n await this.nodeTreeService.initialData({ dispatchRootId: false });\n }\n this.loading = false;\n }\n\n private setLoadingMore(id: string, value: boolean) {\n this.loadingMoreList[id] = value;\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, Subject } from 'rxjs';\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, of, Subject } from 'rxjs';\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, assetsRes]) => {\n const pagination = assetsRes && assetsRes.Meta || {};\n const assets = assetsRes && assetsRes.Data && assetsRes.Data.Children || [];\n const totalFile = assetsRes && assetsRes.Data && assetsRes.Data.TotalFile || 0;\n this.assetService.setFolderList(folders.Data, { Total: folders.Data.TotalFolder });\n this.assetService.setAssetList(assets, pagination, totalFile);\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';\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 @Input() isDialog?: boolean;\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n @Output() assets = new EventEmitter<AssetModel[]>();\n\n private unsubscribe$ = new Subject<void>();\n public nodeTreeMinWidth = 300;\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, Input, OnDestroy, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BehaviorSubject, combineLatest, of, Subject } from 'rxjs';\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';\nimport { PageEvent } from '@angular/material/paginator';\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 @Input() isDialog?: boolean;\n @Input() hasModifyPermission?: boolean = true;\n @Input() hasAccessPermission?: boolean = true;\n @Input() hasArchivePermission?: boolean = true;\n\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 public folderPagination: PageEvent;\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 maxSize: this.assetService.maxSize\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 const { pageIndex, pageSize } = this.getFolderPagePagination();\n\n this.assetService\n .getChildrenFolders({ assetId: id, pageIndex, pageSize })\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((res) => {\n const { Data } = res;\n const { Children } = Data;\n this.setFolderList(res);\n\n if (Children) {\n Children.forEach((node) => this.nodeTreeService.addNode(node, this.currentFolder.AssetId));\n }\n })\n .add(() => {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: false,\n });\n });\n }\n\n private setFolderList(res) {\n const { Data, Meta } = res;\n const { TotalFolder } = Data;\n const { PageIndex, PageSize } = Meta;\n\n this.assetService.setFolderList(Data, { Total: TotalFolder, PageIndex, PageSize });\n this.setFolderPagination({ length: TotalFolder, pageIndex: PageIndex, pageSize: PageSize });\n }\n\n private fetchNodeDetails(id: string) {\n this.svc.dispatch({\n type: ActionTypes.SET_GLOBAL_LOADING,\n payload: true,\n });\n const { pageIndex, pageSize } = this.getFolderPagePagination();\n\n combineLatest([\n this.assetService.getChildrenFolders({ assetId: id, pageIndex, pageSize }),\n this.assetService.getChildrenAssets({\n assetId: id,\n }),\n ])\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(([foldersRes, assetsRes]) => {\n const pagination = assetsRes && assetsRes.Meta || {};\n const assets = assetsRes && assetsRes.Data && assetsRes.Data.Children || [];\n const totalFile = assetsRes && assetsRes.Data && assetsRes.Data.TotalFile || 0;\n this.setFolderList(foldersRes);\n this.assetService.setAssetList(assets, pagination, totalFile);\n if (foldersRes.Data && foldersRes.Data.Children) {\n foldersRes.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 public getFolderPagePagination() {\n return {\n pageIndex: this.assetService.pageFolderIndex,\n pageSize: this.assetService.pageFolderSize,\n length: this.assetService.folderTotal,\n };\n }\n\n public onFolderPageChange(event: PageEvent) {\n this.assetService.pageFolderIndex = event.pageIndex;\n this.assetService.pageFolderSize = event.pageSize;\n this.fetchFolder(this.currentFolder.AssetId);\n }\n\n private setFolderPagination(pagination: PageEvent) {\n if (!pagination) return;\n const { length, pageIndex, pageSize } = pagination;\n\n this.folderPagination = {\n pageIndex,\n pageSize,\n length\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}","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\n countryName: {\n US: \"United States\",\n CA: \"Canada\",\n },\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 mask: {\n phone: \"(000) 000-0000\",\n date: \"M0/d0/0000\",\n zipCode: {\n US: \"00000\",\n CA: \"AAA AAA\",\n },\n money: \"0*.00\",\n number: \"0*.00\",\n integer: \"0*\",\n tax: \"00.0000\",\n sku: \"0000000000000\",\n upca: \"000000000000\",\n pin: \"000000\",\n mi9ProductUpc: \"00000000000000\",\n },\n regex: {\n password: \"^(?=.*[a-zA-Z])(?=.*[0-9]).{6,12}\",\n bigyPassword: \"^(?=.*[a-zA-Z])(?=.*[0-9]).{8,}$\",\n url: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\.%_~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/,\n shortCode: \"^[A-Z0-9_]{1,20}$\",\n longCode: \"^[A-Z0-9_]{1,100}$\",\n email: /^[\\w-\\.]+@([\\w]+[\\.-])+[\\w-]{2,}$/,\n textWithoutSpecialChars: /^[a-zA-Z0-9\\. ]+$/,\n textWithSpecialChars: /^[a-zA-Z0-9_-]+$/, // Allow char '_ -'\n textWithSpaceAndSpecialChars: /^[a-zA-Z0-9\\. /_-]+$/, // Allow space and char '_ - /'\n address: /^[a-zA-Z0-9][a-zA-Z0-9\\_\\/\\. ]+$/,\n leadTimeKeyPress: /^[0-9mhdw ]+$/,\n leadTime: [\n /^(?:(?<minutes>\\d{0,2})m\\s*)?(?:(?<hours>\\d{0,3})h\\s*)?(?:(?<days>\\d{0,2})d\\s*)?(?:(?<weeks>\\d{0,2})w\\s*)?$/,\n /^(?:(?<weeks>\\d{0,2})w\\s*)?(?:(?<days>\\d{0,2})d\\s*)?(?:(?<hours>\\d{0,3})h\\s*)?(?:(?<minutes>\\d{0,2})m\\s*)?$/,\n ],\n userPIN: /^[0-9]{6}$/,\n storeCode: /^[0-9]{1,10}$/,\n sku: /^[0-9]{1,14}$/,\n sku13: /^[0-9]{1,13}$/,\n keyConfigProvider: /^[a-zA-Z0-9!*()_+\\-\\[\\]{}:\\\\|,.<>\\/]*$/, //not allow character '?#%='\n textNoSpace: /^[a-zA-Z]+$/,\n textWithSpace: /^(\\s+\\S+\\s*)*(?!\\s).*$/, //not allow a string containing only white spaces\n slug: /^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$/,\n tag: /^[a-zA-Z0-9](-?_?[a-zA-Z0-9])*$/,\n noSpace: /^[a-zA-Z0-9!*()_+\\-\\[\\]{}:\\\\|,.<>\\/\\?\\=\\&\\%\\#\\@]*$/,\n },\n pattern: {},\n pipe: {},\n pageSizeOptions: [5, 10, 25, 50, 100],\n\n maxOrderNumber: 99999,\n\n // TinyMCE\n tinyHeightDefault: \"75vh\",\n tinyMCEPluginConfig:\n \"print preview fullpage importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media template codesample table charmap hr pagebreak nonbreaking anchor toc insertdatetime advlist lists wordcount imagetools textpattern noneditable help charmap quickbars emoticons\",\n tinyMCEToolbarConfig:\n \"undo redo | bold italic underline strikethrough | fontselect fontsizeselect formatselect | fileManagerButton | alignleft aligncenter alignright alignjustify | outdent indent | numlist bullist checklist | forecolor backcolor | pagebreak | charmap emoticons | fullscreen preview save print | image media template link anchor codesample | ltr rtl\",\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\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 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})\nexport class AssetManagementModule {\n constructor() {}\n}\n"]}
|