@rs-pk/asset-management 1.0.26 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/bundles/rs-pk-asset-management.umd.js +398 -63
  2. package/bundles/rs-pk-asset-management.umd.js.map +1 -1
  3. package/bundles/rs-pk-asset-management.umd.min.js +2 -2
  4. package/bundles/rs-pk-asset-management.umd.min.js.map +1 -1
  5. package/esm2015/lib/components/partial/asset-dialog/asset-dialog.component.js +1 -2
  6. package/esm2015/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +1 -2
  7. package/esm2015/lib/components/partial/asset-wrapper/asset-wrapper.component.js +2 -9
  8. package/esm2015/lib/components/partial/folder-item/folder-item.component.js +2 -2
  9. package/esm2015/lib/components/partial/folder-list/folder-list.component.js +33 -5
  10. package/esm2015/lib/components/partial/node-details/node-details.component.js +64 -12
  11. package/esm2015/lib/components/partial/node-tree/node-tree.component.js +148 -10
  12. package/esm2015/lib/components/partial/search-box/search-box.component.js +2 -2
  13. package/esm2015/lib/models/asset.model.js +15 -1
  14. package/esm2015/lib/models/index.js +2 -2
  15. package/esm2015/lib/services/asset.service.js +47 -7
  16. package/esm2015/lib/services/env-config.service.js +3 -1
  17. package/esm2015/lib/services/node-tree.service.js +14 -6
  18. package/esm5/lib/components/partial/asset-dialog/asset-dialog.component.js +1 -2
  19. package/esm5/lib/components/partial/asset-management-dialog/asset-management-dialog.component.js +1 -2
  20. package/esm5/lib/components/partial/asset-wrapper/asset-wrapper.component.js +2 -12
  21. package/esm5/lib/components/partial/folder-item/folder-item.component.js +2 -2
  22. package/esm5/lib/components/partial/folder-list/folder-list.component.js +40 -5
  23. package/esm5/lib/components/partial/node-details/node-details.component.js +82 -15
  24. package/esm5/lib/components/partial/node-tree/node-tree.component.js +184 -19
  25. package/esm5/lib/components/partial/search-box/search-box.component.js +2 -2
  26. package/esm5/lib/models/asset.model.js +15 -1
  27. package/esm5/lib/models/index.js +2 -2
  28. package/esm5/lib/services/asset.service.js +61 -8
  29. package/esm5/lib/services/env-config.service.js +3 -1
  30. package/esm5/lib/services/node-tree.service.js +23 -9
  31. package/fesm2015/rs-pk-asset-management.js +317 -47
  32. package/fesm2015/rs-pk-asset-management.js.map +1 -1
  33. package/fesm5/rs-pk-asset-management.js +401 -66
  34. package/fesm5/rs-pk-asset-management.js.map +1 -1
  35. package/lib/components/partial/asset-wrapper/asset-wrapper.component.d.ts +0 -1
  36. package/lib/components/partial/folder-list/folder-list.component.d.ts +8 -2
  37. package/lib/components/partial/node-details/node-details.component.d.ts +10 -0
  38. package/lib/components/partial/node-tree/node-tree.component.d.ts +15 -1
  39. package/lib/models/asset.model.d.ts +7 -0
  40. package/lib/services/asset.service.d.ts +9 -2
  41. package/lib/services/env-config.service.d.ts +1 -0
  42. package/lib/services/node-tree.service.d.ts +2 -1
  43. package/package.json +1 -1
  44. package/rs-pk-asset-management.metadata.json +1 -1
@@ -8,7 +8,7 @@ import { MatInputModule } from '@angular/material/input';
8
8
  import { MatIconModule } from '@angular/material/icon';
9
9
  import { MatTooltipModule } from '@angular/material/tooltip';
10
10
  import { MatTreeModule } from '@angular/material/tree';
11
- import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
11
+ import { MatPaginator as MatPaginator$1, MatPaginatorModule } from '@angular/material/paginator';
12
12
  import { MatTableModule } from '@angular/material/table';
13
13
  import { MatProgressBarModule } from '@angular/material/progress-bar';
14
14
  import { MatMenuModule } from '@angular/material/menu';
@@ -21,7 +21,7 @@ import { BehaviorSubject as BehaviorSubject$1 } from 'rxjs/internal/BehaviorSubj
21
21
  import { map, distinctUntilChanged, takeUntil, switchMap } from 'rxjs/operators';
22
22
  import { Subject as Subject$1 } from 'rxjs/internal/Subject';
23
23
  import { DomSanitizer } from '@angular/platform-browser';
24
- import { MAT_DIALOG_DATA as MAT_DIALOG_DATA$1, MatDialogRef as MatDialogRef$1 } from '@angular/material';
24
+ import { MAT_DIALOG_DATA as MAT_DIALOG_DATA$1, MatDialogRef as MatDialogRef$1, MatPaginator } from '@angular/material';
25
25
  import { of } from 'rxjs/internal/observable/of';
26
26
  import { FlatTreeControl } from '@angular/cdk/tree';
27
27
  import { combineLatest } from 'rxjs/internal/observable/combineLatest';
@@ -72,6 +72,10 @@ if (false) {
72
72
  IAssetByIdPayload.prototype.assetId;
73
73
  /** @type {?|undefined} */
74
74
  IAssetByIdPayload.prototype.isFilter;
75
+ /** @type {?|undefined} */
76
+ IAssetByIdPayload.prototype.pageIndex;
77
+ /** @type {?|undefined} */
78
+ IAssetByIdPayload.prototype.pageSize;
75
79
  }
76
80
  /**
77
81
  * @record
@@ -80,6 +84,8 @@ function IInitialFolderTreeOptions() { }
80
84
  if (false) {
81
85
  /** @type {?|undefined} */
82
86
  IInitialFolderTreeOptions.prototype.dispatchRootId;
87
+ /** @type {?|undefined} */
88
+ IInitialFolderTreeOptions.prototype.pageSize;
83
89
  }
84
90
  var AssetModel = /** @class */ (function () {
85
91
  function AssetModel() {
@@ -141,6 +147,8 @@ if (false) {
141
147
  AssetModel.prototype.HaveChildren;
142
148
  /** @type {?} */
143
149
  AssetModel.prototype.ParentId;
150
+ /** @type {?} */
151
+ AssetModel.prototype.Children;
144
152
  }
145
153
  var FolderTreeModel = /** @class */ (function (_super) {
146
154
  __extends(FolderTreeModel, _super);
@@ -190,6 +198,12 @@ BackgroudProcessingStatus[BackgroudProcessingStatus.None] = 'None';
190
198
  BackgroudProcessingStatus[BackgroudProcessingStatus.InProcessing] = 'InProcessing';
191
199
  BackgroudProcessingStatus[BackgroudProcessingStatus.Processed] = 'Processed';
192
200
  BackgroudProcessingStatus[BackgroudProcessingStatus.Failed] = 'Failed';
201
+ /** @type {?} */
202
+ var MAX_FOLDER_TREE_SIZE = 10;
203
+ /** @type {?} */
204
+ var DEFAULT_FOLDER_TREE_INDEX = 0;
205
+ /** @type {?} */
206
+ var ROOT_ASSET_ID = 'ROOT';
193
207
 
194
208
  /**
195
209
  * @fileoverview added by tsickle
@@ -436,6 +450,8 @@ if (false) {
436
450
  AMConfig.prototype.asset2Url;
437
451
  /** @type {?|undefined} */
438
452
  AMConfig.prototype.requestHeader;
453
+ /** @type {?|undefined} */
454
+ AMConfig.prototype.pageFolderSize;
439
455
  }
440
456
  /** @type {?} */
441
457
  var AM_CONFIG = new InjectionToken('asset.man.config.angular');
@@ -508,6 +524,18 @@ var AssetService = /** @class */ (function () {
508
524
  this.baseUrl = this._env.asset2Url;
509
525
  this.initOptionFiles();
510
526
  }
527
+ Object.defineProperty(AssetService.prototype, "AMConfig", {
528
+ get: /**
529
+ * @return {?}
530
+ */
531
+ function () {
532
+ return {
533
+ pageFolderSize: this._env.pageFolderSize
534
+ };
535
+ },
536
+ enumerable: true,
537
+ configurable: true
538
+ });
511
539
  /**
512
540
  * @private
513
541
  * @return {?}
@@ -520,6 +548,8 @@ var AssetService = /** @class */ (function () {
520
548
  this.keyword = '';
521
549
  this.pageSize = 12;
522
550
  this.pageIndex = 0;
551
+ this.pageFolderSize = this._env.pageFolderSize || MAX_FOLDER_TREE_SIZE;
552
+ this.pageFolderIndex = 0;
523
553
  this.folderTotal = 0;
524
554
  this.fileTotal = 0;
525
555
  this.sortBy = SortFilesBy.MODIFIED_DATE;
@@ -558,16 +588,17 @@ var AssetService = /** @class */ (function () {
558
588
  };
559
589
  /**
560
590
  * @param {?} folders
561
- * @param {?=} folderTotal
591
+ * @param {?=} pagination
562
592
  * @return {?}
563
593
  */
564
594
  AssetService.prototype.setFolderList = /**
565
595
  * @param {?} folders
566
- * @param {?=} folderTotal
596
+ * @param {?=} pagination
567
597
  * @return {?}
568
598
  */
569
- function (folders, folderTotal) {
570
- this.folderTotal = folderTotal || 0;
599
+ function (folders, pagination) {
600
+ this.setFolderTreePagination(pagination);
601
+ this.setFolderPagination(pagination);
571
602
  this.folderList$.next(folders);
572
603
  };
573
604
  /**
@@ -630,6 +661,36 @@ var AssetService = /** @class */ (function () {
630
661
  this.pageSize = pagination.PageSize;
631
662
  }
632
663
  };
664
+ /**
665
+ * @private
666
+ * @param {?} pagination
667
+ * @return {?}
668
+ */
669
+ AssetService.prototype.setFolderPagination = /**
670
+ * @private
671
+ * @param {?} pagination
672
+ * @return {?}
673
+ */
674
+ function (pagination) {
675
+ if (pagination) {
676
+ this.folderTotal = pagination.Total;
677
+ this.pageFolderIndex = pagination.PageIndex;
678
+ this.pageFolderSize = pagination.PageSize;
679
+ }
680
+ };
681
+ /**
682
+ * @param {?} pagination
683
+ * @return {?}
684
+ */
685
+ AssetService.prototype.setFolderTreePagination = /**
686
+ * @param {?} pagination
687
+ * @return {?}
688
+ */
689
+ function (pagination) {
690
+ if (pagination) {
691
+ this.folderTotal = pagination.Total;
692
+ }
693
+ };
633
694
  /**
634
695
  * @param {?} assetId
635
696
  * @return {?}
@@ -652,11 +713,15 @@ var AssetService = /** @class */ (function () {
652
713
  * @return {?}
653
714
  */
654
715
  function (_a) {
655
- var assetId = _a.assetId, _b = _a.isFilter, isFilter = _b === void 0 ? true : _b;
716
+ var assetId = _a.assetId, _b = _a.isFilter, isFilter = _b === void 0 ? true : _b, _c = _a.pageIndex, pageIndex = _c === void 0 ? DEFAULT_FOLDER_TREE_INDEX : _c, _d = _a.pageSize, pageSize = _d === void 0 ? this._env.pageFolderSize || MAX_FOLDER_TREE_SIZE : _d;
656
717
  /** @type {?} */
657
718
  var url = this.baseUrl + "/File/GetChildren";
658
719
  /** @type {?} */
659
- var params = new HttpParams().set('getAll', 'true').set('isFolder', 'true');
720
+ var params = new HttpParams()
721
+ .set('getAll', 'true')
722
+ .set('isFolder', 'true')
723
+ .set('pageSize', "" + pageSize)
724
+ .set('pageIndex', "" + pageIndex);
660
725
  if (assetId) {
661
726
  params = params.set('assetId', assetId);
662
727
  }
@@ -733,6 +798,10 @@ if (false) {
733
798
  /** @type {?} */
734
799
  AssetService.prototype.pageIndex;
735
800
  /** @type {?} */
801
+ AssetService.prototype.pageFolderSize;
802
+ /** @type {?} */
803
+ AssetService.prototype.pageFolderIndex;
804
+ /** @type {?} */
736
805
  AssetService.prototype.folderTotal;
737
806
  /** @type {?} */
738
807
  AssetService.prototype.fileTotal;
@@ -1136,19 +1205,19 @@ var NodeTreeService = /** @class */ (function () {
1136
1205
  * @return {?}
1137
1206
  */
1138
1207
  function (_a) {
1139
- var dispatchRootId = _a.dispatchRootId;
1208
+ var dispatchRootId = _a.dispatchRootId, _b = _a.pageSize, pageSize = _b === void 0 ? this.assetService.AMConfig.pageFolderSize || MAX_FOLDER_TREE_SIZE : _b;
1140
1209
  return __awaiter(this, void 0, void 0, function () {
1141
1210
  var result, initData;
1142
1211
  var _this = this;
1143
- return __generator(this, function (_b) {
1144
- switch (_b.label) {
1212
+ return __generator(this, function (_c) {
1213
+ switch (_c.label) {
1145
1214
  case 0:
1146
1215
  if (dispatchRootId) {
1147
1216
  this.loading$.next(true);
1148
1217
  }
1149
- return [4 /*yield*/, this.assetService.getChildrenFolders({ isFilter: false }).toPromise()];
1218
+ return [4 /*yield*/, this.assetService.getChildrenFolders({ isFilter: false, pageIndex: 0, pageSize: pageSize }).toPromise()];
1150
1219
  case 1:
1151
- result = _b.sent();
1220
+ result = _c.sent();
1152
1221
  if (!result) {
1153
1222
  return [2 /*return*/];
1154
1223
  }
@@ -1167,7 +1236,7 @@ var NodeTreeService = /** @class */ (function () {
1167
1236
  * @param {?} folder
1168
1237
  * @return {?}
1169
1238
  */
1170
- function (folder) { return new DynamicFlatNode(folder, 0, _this.isExpandable(folder)); }));
1239
+ function (folder) { return _this.getDynamicFlatNode(folder, 0); }));
1171
1240
  this.initialData$.next(initData);
1172
1241
  if (dispatchRootId) {
1173
1242
  this.loading$.next(false);
@@ -1177,6 +1246,20 @@ var NodeTreeService = /** @class */ (function () {
1177
1246
  });
1178
1247
  });
1179
1248
  };
1249
+ /**
1250
+ * @param {?} node
1251
+ * @param {?=} level
1252
+ * @return {?}
1253
+ */
1254
+ NodeTreeService.prototype.getDynamicFlatNode = /**
1255
+ * @param {?} node
1256
+ * @param {?=} level
1257
+ * @return {?}
1258
+ */
1259
+ function (node, level) {
1260
+ if (level === void 0) { level = 0; }
1261
+ return new DynamicFlatNode(node, level, this.isExpandable(node));
1262
+ };
1180
1263
  /**
1181
1264
  * @param {?} node
1182
1265
  * @return {?}
@@ -1204,7 +1287,7 @@ var NodeTreeService = /** @class */ (function () {
1204
1287
  * @return {?}
1205
1288
  */
1206
1289
  function (node) {
1207
- return node.HaveChildren;
1290
+ return Boolean(node.HaveChildren);
1208
1291
  };
1209
1292
  /** Add asset to stored data */
1210
1293
  /**
@@ -1680,7 +1763,6 @@ var AssetManagementDialogComponent = /** @class */ (function () {
1680
1763
  */
1681
1764
  function () {
1682
1765
  var _this = this;
1683
- console.log('Assest Management Dialog', this.data);
1684
1766
  this.initDialogConfig(this.data);
1685
1767
  select((/**
1686
1768
  * @param {?} state
@@ -3345,7 +3427,7 @@ var FolderItemComponent = /** @class */ (function () {
3345
3427
  FolderItemComponent.decorators = [
3346
3428
  { type: Component, args: [{
3347
3429
  selector: 'lib-folder-item',
3348
- template: "<div class=\"folder\" (dblclick)=\"openFolder()\">\n <mat-icon class=\"folder__icon\">folder</mat-icon>\n <span class=\"folder__name\" [matTooltip]=\"folder.OriginalFileName\">\n {{ folder.OriginalFileName }}\n </span>\n <mat-icon class=\"folder__action\" [matMenuTriggerFor]=\"menu\"\n >more_vert</mat-icon\n >\n</div>\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"renameFolder()\" [disabled]=\"!hasModifyPermission\">\n <mat-icon>edit_outline</mat-icon> <span>Rename</span>\n </button>\n <button mat-menu-item (click)=\"deleteFolder()\" [disabled]=\"!hasArchivePermission\">\n <mat-icon color=\"warn\">delete_outline</mat-icon> <span>Delete</span>\n </button>\n</mat-menu>\n",
3430
+ template: "<div class=\"folder\" (dblclick)=\"openFolder()\">\n <mat-icon class=\"folder__icon\">folder</mat-icon>\n <span class=\"folder__name\" [matTooltip]=\"folder.OriginalFileName\">\n {{ folder.OriginalFileName }}\n </span>\n <mat-icon class=\"folder__action\" [matMenuTriggerFor]=\"menu\"\n >more_vert</mat-icon\n >\n</div>\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"renameFolder()\" [disabled]=\"!hasModifyPermission\">\n <mat-icon>edit_outline</mat-icon> <span>Rename</span>\n </button>\n <button mat-menu-item (click)=\"deleteFolder()\" [disabled]=\"!hasArchivePermission\">\n <mat-icon color=\"warn\">delete_outline</mat-icon> <span>Delete</span>\n </button>\n</mat-menu>",
3349
3431
  styles: [":host::ng-deep .folder{width:180px;height:50px;display:flex;position:relative;align-items:center;padding:5px 20px 5px 10px;border-radius:10px;cursor:pointer;transition:.3s}:host::ng-deep .folder:hover{background-color:#f1f1f1}:host::ng-deep .folder:hover .folder__action{display:block}:host::ng-deep .folder__icon{display:flex;align-items:center;color:#6fc0ff;font-size:38px;margin-right:20px}:host::ng-deep .folder__name{font-size:14px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host::ng-deep .folder__action{display:none;right:0;position:absolute;color:#979797;transition:.3s}:host::ng-deep .folder__action:hover{color:#000}"]
3350
3432
  }] }
3351
3433
  ];
@@ -3392,10 +3474,24 @@ var FolderListComponent = /** @class */ (function () {
3392
3474
  this.hasModifyPermission = true;
3393
3475
  this.hasAccessPermission = true;
3394
3476
  this.hasArchivePermission = true;
3477
+ this.onPageChange = new EventEmitter();
3395
3478
  this.loading = false;
3396
3479
  this.unsubscribe$ = new Subject$1();
3397
3480
  this.bindSubscriber();
3398
3481
  }
3482
+ /**
3483
+ * @return {?}
3484
+ */
3485
+ FolderListComponent.prototype.ngOnChanges = /**
3486
+ * @return {?}
3487
+ */
3488
+ function () {
3489
+ if (this.paginator && this.pagination) {
3490
+ this.paginator.pageIndex = this.pagination.pageIndex;
3491
+ this.paginator.pageSize = this.pagination.pageSize;
3492
+ this.paginator.length = this.pagination.length;
3493
+ }
3494
+ };
3399
3495
  /**
3400
3496
  * @return {?}
3401
3497
  */
@@ -3413,6 +3509,17 @@ var FolderListComponent = /** @class */ (function () {
3413
3509
  this.unsubscribe$.next();
3414
3510
  this.unsubscribe$.complete();
3415
3511
  };
3512
+ /**
3513
+ * @param {?=} event
3514
+ * @return {?}
3515
+ */
3516
+ FolderListComponent.prototype.pageChange = /**
3517
+ * @param {?=} event
3518
+ * @return {?}
3519
+ */
3520
+ function (event) {
3521
+ this.onPageChange.emit(event);
3522
+ };
3416
3523
  /**
3417
3524
  * @private
3418
3525
  * @return {?}
@@ -3440,8 +3547,8 @@ var FolderListComponent = /** @class */ (function () {
3440
3547
  FolderListComponent.decorators = [
3441
3548
  { type: Component, args: [{
3442
3549
  selector: 'lib-folder-list',
3443
- template: "<div class=\"folder-container\">\n <h6>Folders</h6>\n <div class=\"folder-list custom-scrollbar\">\n <lib-folder-item\n *ngFor=\"let folder of folders\"\n [folder]=\"folder\"\n [hasModifyPermission]=\"hasModifyPermission\"\n [hasAccessPermission]=\"hasAccessPermission\"\n [hasArchivePermission]=\"hasArchivePermission\"\n ></lib-folder-item>\n </div>\n <div class=\"folder-empty\" *ngIf=\"folders && !folders.length\">\n <span>This folder is empty.</span>\n </div>\n</div>\n",
3444
- styles: [":host::ng-deep .folder-container h6{color:#979797}:host::ng-deep .folder-container .folder-list{display:flex;flex-wrap:nowrap;overflow:auto;padding-bottom:10px}:host::ng-deep .folder-container .folder-empty{text-align:center;color:#979797;font-size:14px}"]
3550
+ template: "<div class=\"folder-container\">\n <h6>Folders</h6>\n <div class=\"folder-list custom-scrollbar\">\n <lib-folder-item\n *ngFor=\"let folder of folders\"\n [folder]=\"folder\"\n [hasModifyPermission]=\"hasModifyPermission\"\n [hasAccessPermission]=\"hasAccessPermission\"\n [hasArchivePermission]=\"hasArchivePermission\"\n ></lib-folder-item>\n </div>\n <div class=\"folder-empty\" *ngIf=\"folders && !folders.length\">\n <span>This folder is empty.</span>\n </div>\n <div [hidden]=\"!folders?.length\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[10, 20, 50, 100]\"\n (page)=\"pageChange($event)\"\n [showFirstLastButtons]=\"true\"\n >\n </mat-paginator>\n </div>\n</div>",
3551
+ styles: [":host::ng-deep .folder-container h6{color:#979797}:host::ng-deep .folder-container .folder-list{display:flex;flex-wrap:wrap;overflow:auto;padding-bottom:10px;max-height:320px}:host::ng-deep .folder-container .folder-empty{text-align:center;color:#979797;font-size:14px}"]
3445
3552
  }] }
3446
3553
  ];
3447
3554
  /** @nocollapse */
@@ -3450,7 +3557,10 @@ var FolderListComponent = /** @class */ (function () {
3450
3557
  hasModifyPermission: [{ type: Input }],
3451
3558
  hasAccessPermission: [{ type: Input }],
3452
3559
  hasArchivePermission: [{ type: Input }],
3453
- folders: [{ type: Input }]
3560
+ paginator: [{ type: ViewChild, args: [MatPaginator, { static: true },] }],
3561
+ folders: [{ type: Input }],
3562
+ pagination: [{ type: Input }],
3563
+ onPageChange: [{ type: Output }]
3454
3564
  };
3455
3565
  return FolderListComponent;
3456
3566
  }());
@@ -3462,8 +3572,14 @@ if (false) {
3462
3572
  /** @type {?} */
3463
3573
  FolderListComponent.prototype.hasArchivePermission;
3464
3574
  /** @type {?} */
3575
+ FolderListComponent.prototype.paginator;
3576
+ /** @type {?} */
3465
3577
  FolderListComponent.prototype.folders;
3466
3578
  /** @type {?} */
3579
+ FolderListComponent.prototype.pagination;
3580
+ /** @type {?} */
3581
+ FolderListComponent.prototype.onPageChange;
3582
+ /** @type {?} */
3467
3583
  FolderListComponent.prototype.loading;
3468
3584
  /**
3469
3585
  * @type {?}
@@ -3733,7 +3849,7 @@ var AssetListComponent = /** @class */ (function () {
3733
3849
  hasModifyPermission: [{ type: Input }],
3734
3850
  hasAccessPermission: [{ type: Input }],
3735
3851
  hasArchivePermission: [{ type: Input }],
3736
- paginator: [{ type: ViewChild, args: [MatPaginator, { static: true },] }],
3852
+ paginator: [{ type: ViewChild, args: [MatPaginator$1, { static: true },] }],
3737
3853
  assets: [{ type: Input }]
3738
3854
  };
3739
3855
  return AssetListComponent;
@@ -3892,7 +4008,6 @@ var AssetDialogComponent = /** @class */ (function () {
3892
4008
  * @return {?}
3893
4009
  */
3894
4010
  function () {
3895
- console.log('data', this.data.permission);
3896
4011
  this.uploadAssetsService.supportedSize = this.assetsService.maxSize * 1024 * 1024;
3897
4012
  this.linkDownload = this._env.asset2Url + "/File/Download/" + this.data.assetId;
3898
4013
  this.getAssetDetail();
@@ -4843,13 +4958,17 @@ if (false) {
4843
4958
  * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4844
4959
  */
4845
4960
  var NodeTreeComponent = /** @class */ (function () {
4846
- function NodeTreeComponent(nodeTreeService, svc, changeDetectorRef) {
4961
+ function NodeTreeComponent(assetService, nodeTreeService, svc, changeDetectorRef) {
4962
+ this.assetService = assetService;
4847
4963
  this.nodeTreeService = nodeTreeService;
4848
4964
  this.svc = svc;
4849
4965
  this.changeDetectorRef = changeDetectorRef;
4966
+ this.ROOT_ASSET_ID = ROOT_ASSET_ID;
4850
4967
  this.isRoot = false;
4851
4968
  this.homeLoading = false;
4852
4969
  this.loading = false;
4970
+ this.loadingMoreList = {};
4971
+ this.folderChildrenMap = new Map();
4853
4972
  this.unsubscribe$ = new Subject();
4854
4973
  this.getLevel = (/**
4855
4974
  * @param {?} node
@@ -4870,6 +4989,21 @@ var NodeTreeComponent = /** @class */ (function () {
4870
4989
  this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);
4871
4990
  this.dataSource = new NodeTreeDataSource(this.treeControl, nodeTreeService);
4872
4991
  }
4992
+ Object.defineProperty(NodeTreeComponent.prototype, "folderTreeMeta", {
4993
+ get: /**
4994
+ * @return {?}
4995
+ */
4996
+ function () {
4997
+ /** @type {?} */
4998
+ var rootFolder = this.folderChildrenMap.get(ROOT_ASSET_ID);
4999
+ return {
5000
+ length: rootFolder ? rootFolder.size : 0,
5001
+ total: this.nodeTreeService.rootFolder ? this.nodeTreeService.rootFolder.TotalFolder || '0' : 0,
5002
+ };
5003
+ },
5004
+ enumerable: true,
5005
+ configurable: true
5006
+ });
4873
5007
  /**
4874
5008
  * @return {?}
4875
5009
  */
@@ -4901,6 +5035,32 @@ var NodeTreeComponent = /** @class */ (function () {
4901
5035
  });
4902
5036
  });
4903
5037
  };
5038
+ /**
5039
+ * @param {?} id
5040
+ * @return {?}
5041
+ */
5042
+ NodeTreeComponent.prototype.getFolderChildrenSize = /**
5043
+ * @param {?} id
5044
+ * @return {?}
5045
+ */
5046
+ function (id) {
5047
+ /** @type {?} */
5048
+ var children = this.folderChildrenMap.get(id);
5049
+ return children ? children.size : 0;
5050
+ };
5051
+ /**
5052
+ * @param {?} node
5053
+ * @return {?}
5054
+ */
5055
+ NodeTreeComponent.prototype.canLoadMore = /**
5056
+ * @param {?} node
5057
+ * @return {?}
5058
+ */
5059
+ function (node) {
5060
+ /** @type {?} */
5061
+ var size = this.getFolderChildrenSize(node.item.AssetId);
5062
+ return size < node.item.TotalFolder;
5063
+ };
4904
5064
  /**
4905
5065
  * @private
4906
5066
  * @return {?}
@@ -4946,6 +5106,7 @@ var NodeTreeComponent = /** @class */ (function () {
4946
5106
  */
4947
5107
  function (data) {
4948
5108
  if (data && data.length) {
5109
+ _this.handleDatasourceChange(data);
4949
5110
  _this.changeDetectorRef.detectChanges();
4950
5111
  }
4951
5112
  }));
@@ -5002,6 +5163,42 @@ var NodeTreeComponent = /** @class */ (function () {
5002
5163
  });
5003
5164
  }); }));
5004
5165
  };
5166
+ /**
5167
+ * @private
5168
+ * @param {?=} data
5169
+ * @return {?}
5170
+ */
5171
+ NodeTreeComponent.prototype.handleDatasourceChange = /**
5172
+ * @private
5173
+ * @param {?=} data
5174
+ * @return {?}
5175
+ */
5176
+ function (data) {
5177
+ var _this = this;
5178
+ if (data === void 0) { data = []; }
5179
+ if (!data || !data.length)
5180
+ return;
5181
+ /** @type {?} */
5182
+ var maps = new Map();
5183
+ maps.set(ROOT_ASSET_ID, new Map());
5184
+ data.forEach((/**
5185
+ * @param {?} node
5186
+ * @return {?}
5187
+ */
5188
+ function (node) {
5189
+ /** @type {?} */
5190
+ var nodeId = node.item.AssetId;
5191
+ /** @type {?} */
5192
+ var parent = _this.getParent(node);
5193
+ /** @type {?} */
5194
+ var parentId = parent ? parent.item.AssetId : ROOT_ASSET_ID;
5195
+ if (!maps.has(parentId)) {
5196
+ maps.set(parentId, new Map());
5197
+ }
5198
+ maps.get(parentId).set(nodeId, node);
5199
+ }));
5200
+ this.folderChildrenMap = maps;
5201
+ };
5005
5202
  /**
5006
5203
  * @param {?} node
5007
5204
  * @return {?}
@@ -5052,6 +5249,67 @@ var NodeTreeComponent = /** @class */ (function () {
5052
5249
  });
5053
5250
  }
5054
5251
  };
5252
+ /**
5253
+ * @param {?=} node
5254
+ * @return {?}
5255
+ */
5256
+ NodeTreeComponent.prototype.loadMoreFolder = /**
5257
+ * @param {?=} node
5258
+ * @return {?}
5259
+ */
5260
+ function (node) {
5261
+ return __awaiter(this, void 0, void 0, function () {
5262
+ var id, children, itemsPerPage, result, assetChildren, index, nodes, updatedData, error_1;
5263
+ var _this = this;
5264
+ return __generator(this, function (_a) {
5265
+ switch (_a.label) {
5266
+ case 0:
5267
+ id = node ? node.item.AssetId : ROOT_ASSET_ID;
5268
+ _a.label = 1;
5269
+ case 1:
5270
+ _a.trys.push([1, 3, , 4]);
5271
+ this.setLoadingMore(id, true);
5272
+ children = this.folderChildrenMap.get(id);
5273
+ itemsPerPage = this.assetService.AMConfig.pageFolderSize || MAX_FOLDER_TREE_SIZE;
5274
+ return [4 /*yield*/, this.assetService.getChildrenFolders({
5275
+ assetId: id === ROOT_ASSET_ID ? null : id,
5276
+ isFilter: false,
5277
+ pageIndex: Math.round((children ? children.size : 0) / itemsPerPage)
5278
+ }).toPromise()];
5279
+ case 2:
5280
+ result = _a.sent();
5281
+ assetChildren = result.Data.Children || [];
5282
+ // Handle datasource
5283
+ index = this.dataSource.data.indexOf(node);
5284
+ nodes = assetChildren.map((/**
5285
+ * @param {?} folder
5286
+ * @return {?}
5287
+ */
5288
+ function (folder) {
5289
+ _this.nodeTreeService.addNode(folder, id);
5290
+ return _this.nodeTreeService.getDynamicFlatNode(folder, node ? node.level + 1 : 0);
5291
+ }));
5292
+ if (id !== ROOT_ASSET_ID) {
5293
+ updatedData = this.dataSource.data.slice();
5294
+ updatedData.splice.apply(updatedData, __spread([index + 1, 0], nodes));
5295
+ this.dataSource.data = updatedData;
5296
+ }
5297
+ else {
5298
+ this.dataSource.data = __spread(this.dataSource.data, nodes);
5299
+ }
5300
+ this.setLoadingMore(id, false);
5301
+ this.changeDetectorRef.detectChanges();
5302
+ return [3 /*break*/, 4];
5303
+ case 3:
5304
+ error_1 = _a.sent();
5305
+ console.log('Load more folder error', error_1);
5306
+ this.setLoadingMore(id, false);
5307
+ return [3 /*break*/, 4];
5308
+ case 4: return [2 /*return*/];
5309
+ }
5310
+ });
5311
+ });
5312
+ };
5055
5313
  /**
5056
5314
  * @param {?} node
5057
5315
  * @return {?}
@@ -5125,7 +5383,7 @@ var NodeTreeComponent = /** @class */ (function () {
5125
5383
  */
5126
5384
  function (id) {
5127
5385
  return __awaiter(this, void 0, void 0, function () {
5128
- var node, parent_1, updatedNode, updatedNode;
5386
+ var node, parent_1, updatedNode;
5129
5387
  return __generator(this, function (_a) {
5130
5388
  switch (_a.label) {
5131
5389
  case 0:
@@ -5134,11 +5392,13 @@ var NodeTreeComponent = /** @class */ (function () {
5134
5392
  }
5135
5393
  this.loading = true;
5136
5394
  node = this.getNodeById(id);
5137
- if (!node) return [3 /*break*/, 8];
5395
+ if (!node) return [3 /*break*/, 5];
5138
5396
  parent_1 = this.getParent(node);
5139
5397
  if (!parent_1) return [3 /*break*/, 4];
5398
+ // Reload parent folder (get children and expand it again)
5140
5399
  return [4 /*yield*/, this.dataSource.reloadNode(parent_1)];
5141
5400
  case 1:
5401
+ // Reload parent folder (get children and expand it again)
5142
5402
  _a.sent();
5143
5403
  updatedNode = this.getNodeById(id);
5144
5404
  if (!updatedNode) return [3 /*break*/, 3];
@@ -5146,28 +5406,37 @@ var NodeTreeComponent = /** @class */ (function () {
5146
5406
  case 2:
5147
5407
  _a.sent();
5148
5408
  _a.label = 3;
5149
- case 3: return [3 /*break*/, 7];
5150
- case 4: return [4 /*yield*/, this.nodeTreeService.initialData({ dispatchRootId: false })];
5151
- case 5:
5152
- _a.sent();
5153
- updatedNode = this.getNodeById(id);
5154
- if (!updatedNode) return [3 /*break*/, 7];
5155
- return [4 /*yield*/, this.treeControl.expand(updatedNode)];
5409
+ case 3: return [3 /*break*/, 4];
5410
+ case 4: return [3 /*break*/, 7];
5411
+ case 5:
5412
+ // Reload root folder
5413
+ return [4 /*yield*/, this.nodeTreeService.initialData({ dispatchRootId: false })];
5156
5414
  case 6:
5415
+ // Reload root folder
5157
5416
  _a.sent();
5158
5417
  _a.label = 7;
5159
- case 7: return [3 /*break*/, 10];
5160
- case 8: return [4 /*yield*/, this.nodeTreeService.initialData({ dispatchRootId: false })];
5161
- case 9:
5162
- _a.sent();
5163
- _a.label = 10;
5164
- case 10:
5418
+ case 7:
5165
5419
  this.loading = false;
5166
5420
  return [2 /*return*/];
5167
5421
  }
5168
5422
  });
5169
5423
  });
5170
5424
  };
5425
+ /**
5426
+ * @private
5427
+ * @param {?} id
5428
+ * @param {?} value
5429
+ * @return {?}
5430
+ */
5431
+ NodeTreeComponent.prototype.setLoadingMore = /**
5432
+ * @private
5433
+ * @param {?} id
5434
+ * @param {?} value
5435
+ * @return {?}
5436
+ */
5437
+ function (id, value) {
5438
+ this.loadingMoreList[id] = value;
5439
+ };
5171
5440
  /**
5172
5441
  * @return {?}
5173
5442
  */
@@ -5183,12 +5452,13 @@ var NodeTreeComponent = /** @class */ (function () {
5183
5452
  NodeTreeComponent.decorators = [
5184
5453
  { type: Component, args: [{
5185
5454
  selector: 'lib-node-tree',
5186
- template: "<div class=\"node custom-scrollbar node-tree\">\n <div class=\"node__home\" (click)=\"backToHome()\" [ngClass]=\"{ active: isRoot,\n disabled: loading || homeLoading}\">\n <mat-icon *ngIf=\"!homeLoading\">home</mat-icon>\n <mat-spinner *ngIf=\"homeLoading\" [diameter]=\"20\"\n class=\"node__home--loading\"></mat-spinner>\n <span>Home</span>\n </div>\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\"\n class=\"node__item\">\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding\n [ngClass]=\"{ active: checked(node),disabled: loading || node.isLoading }\"\n (click)=\"selectNode(node)\">\n <button mat-icon-button disabled class=\"node__item--pading\"></button>\n <div class=\"node__item--info\" [style.maxWidth.px]=\"width -50\">\n <mat-icon class=\"folder-icon\">folder</mat-icon>\n <div class=\"node-name\">\n <span>\n {{ node.item.OriginalFileName }}\n </span>\n <span class=\"node-summary\" *ngIf=\"node.item?.TotalFolder ||\n node.item?.TotalFile\">\n <small *ngIf=\"node.item?.TotalFolder\">{{ node.item?.TotalFolder}}\n {{node.item?.TotalFolder> 1 ?\n 'folders':'folder'}}</small>\n <small *ngIf=\"node.item?.TotalFolder && node.item?.TotalFile\">,\n </small>\n <small *ngIf=\"node.item?.TotalFile\">{{ node.item?.TotalFile}}\n {{node.item?.TotalFile> 1 ?\n 'files':'file'}}</small>\n </span>\n </div>\n </div>\n </mat-tree-node>\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding\n (click)=\"selectNode(node)\"\n [ngClass]=\"{ active: checked(node), disabled: loading || node.isLoading\n }\">\n <button mat-icon-button [attr.aria-label]=\"'Toggle ' +\n node.item.OriginalFileName\" matTreeNodeToggle\n [disabled]=\"node.isLoading\">\n <mat-icon *ngIf=\"!node.isLoading\" class=\"mat-icon-rtl-mirror\">\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n <mat-spinner *ngIf=\"node.isLoading\" [diameter]=\"20\"\n class=\"node__item--loading\"></mat-spinner>\n </button>\n <div class=\"node__item--info\" [style.maxWidth.px]=\"width -50\">\n <mat-icon class=\"folder-icon\">folder</mat-icon>\n <div class=\"node-name\">\n <span>\n {{ node.item.OriginalFileName }}\n </span>\n <span class=\"node-summary\">\n <small *ngIf=\"node.item?.TotalFolder\">{{ node.item?.TotalFolder}}\n {{node.item?.TotalFolder> 1 ?\n 'folders':'folder'}}</small>\n <small *ngIf=\"node.item?.TotalFolder && node.item?.TotalFile\">,\n </small>\n <small *ngIf=\"node.item?.TotalFile\">{{ node.item?.TotalFile}}\n {{node.item?.TotalFile> 1 ?\n 'files':'file'}}</small>\n </span>\n </div>\n </div>\n </mat-tree-node>\n </mat-tree>\n</div>",
5187
- styles: [":host::ng-deep .node{overflow-x:hidden;height:100%;display:-ms-grid;display:grid;grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}:host::ng-deep .node__home{padding:8px 10px;display:flex;align-items:center;height:44px}:host::ng-deep .node__home .mat-icon{color:#979797;margin-right:15px;margin-bottom:10px;font-size:32px}:host::ng-deep .node__home .node__home--loading{margin-right:19px}:host::ng-deep .node__item--loading{margin-left:10px}:host::ng-deep .node__item--info{display:flex;align-items:center}:host::ng-deep .node__item--info .folder-icon{display:flex;align-items:center;color:#6fc0ff;font-size:32px;margin-right:20px}:host::ng-deep .node__item--info .node-name{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host::ng-deep .node__item--info .node-name span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host::ng-deep .node__item--info .node-name .node-summary{margin-top:-5px;color:#979797}:host::ng-deep .node .mat-tree{width:-webkit-max-content!important;width:-moz-max-content!important;width:max-content!important;min-width:100%}:host::ng-deep .node .mat-tree .mat-tree-node{padding:5px 0;min-height:44px}:host::ng-deep .node .mat-tree .mat-tree-node .node__item--pading{height:20px}:host::ng-deep .node .mat-tree-node:hover,:host::ng-deep .node .node__home{transition:.3s;cursor:pointer}:host::ng-deep .node .mat-tree-node:hover:hover,:host::ng-deep .node .node__home:hover{background-color:#e8e8e8}:host::ng-deep .node .active{background-color:#f0f0f0}:host::ng-deep .node .disabled{pointer-events:none}"]
5455
+ template: "<div class=\"node custom-scrollbar node-tree\">\n <div class=\"node__home\" (click)=\"backToHome()\" [ngClass]=\"{ active: isRoot,\n disabled: loading || homeLoading}\">\n <mat-icon *ngIf=\"!homeLoading\">home</mat-icon>\n <mat-spinner *ngIf=\"homeLoading\" [diameter]=\"20\"\n class=\"node__home--loading\"></mat-spinner>\n <span>Home</span>\n </div>\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\"\n class=\"node__item\">\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding\n [ngClass]=\"{ active: checked(node),disabled: loading || node.isLoading }\"\n (click)=\"selectNode(node)\">\n <button mat-icon-button disabled class=\"node__item--pading\"></button>\n <div class=\"node__item--info\" [style.maxWidth.px]=\"width -50\">\n <mat-icon class=\"folder-icon\">folder</mat-icon>\n <div class=\"node-name\">\n <span>\n {{ node.item.OriginalFileName }}\n </span>\n <span class=\"node-summary\" *ngIf=\"node.item?.TotalFolder ||\n node.item?.TotalFile\">\n <small *ngIf=\"node.item?.TotalFolder\">{{ node.item?.TotalFolder}}\n {{node.item?.TotalFolder> 1 ?\n 'folders':'folder'}}</small>\n <small *ngIf=\"node.item?.TotalFolder && node.item?.TotalFile\">,\n </small>\n <small *ngIf=\"node.item?.TotalFile\">{{ node.item?.TotalFile}}\n {{node.item?.TotalFile> 1 ?\n 'files':'file'}}</small>\n </span>\n </div>\n </div>\n </mat-tree-node>\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding \n [ngClass]=\"{ active: checked(node), disabled: loading || node.isLoading\n }\">\n <div class=\"d-flex align-items-center\" (click)=\"selectNode(node)\">\n <button mat-icon-button [attr.aria-label]=\"'Toggle ' +\n node.item.OriginalFileName\" matTreeNodeToggle\n [disabled]=\"node.isLoading\">\n <mat-icon *ngIf=\"!node.isLoading\" class=\"mat-icon-rtl-mirror\">\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n <mat-spinner *ngIf=\"node.isLoading\" [diameter]=\"20\"\n class=\"node__item--loading\"></mat-spinner>\n </button>\n <div class=\"node__item--info\" [style.maxWidth.px]=\"width -50\">\n <mat-icon class=\"folder-icon\">folder</mat-icon>\n <div class=\"node-name\">\n <span>\n {{ node.item.OriginalFileName }}\n </span>\n <span class=\"node-summary\">\n <small *ngIf=\"node.item?.TotalFolder\"><ng-container *ngIf=\"treeControl.isExpanded(node)\"><b>{{getFolderChildrenSize(node.item.AssetId)}}</b>/</ng-container>{{ node.item?.TotalFolder}}\n {{node.item?.TotalFolder> 1 ?\n 'folders':'folder'}}</small>\n <small *ngIf=\"node.item?.TotalFolder && node.item?.TotalFile\">,\n </small>\n <small *ngIf=\"node.item?.TotalFile\">{{ node.item?.TotalFile}}\n {{node.item?.TotalFile> 1 ?\n 'files':'file'}}</small>\n </span>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"treeControl.isExpanded(node)\"> \n <div *ngIf=\"!!loadingMoreList[node.item.AssetId]\" class=\"mx-2\" [style.minWidth.px]=\"40\">\n <mat-spinner [diameter]=\"20\"\n class=\"node__item--loading\"></mat-spinner>\n </div>\n <button *ngIf=\"!loadingMoreList[node.item.AssetId] && canLoadMore(node)\" matTooltip=\"Load More\" class=\"mx-2\" mat-icon-button (click)=\"loadMoreFolder(node)\" [disabled]=\"loadingMoreList[node.item.AssetId] || homeLoading || loading\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"m482-200 114-113-114-113-42 42 43 43q-28 1-54.5-9T381-381q-20-20-30.5-46T340-479q0-17 4.5-34t12.5-33l-44-44q-17 25-25 53t-8 57q0 38 15 75t44 66q29 29 65 43.5t74 15.5l-38 38 42 42Zm165-170q17-25 25-53t8-57q0-38-14.5-75.5T622-622q-29-29-65.5-43T482-679l38-39-42-42-114 113 114 113 42-42-44-44q27 0 55 10.5t48 30.5q20 20 30.5 46t10.5 52q0 17-4.5 34T603-414l44 44ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"/></svg>\n </button>\n </ng-container>\n </mat-tree-node>\n </mat-tree>\n <div class=\"p-2 d-flex flex-column align-items-center justify-content-center\" *ngIf=\"folderTreeMeta.length\">\n <button mat-raised-button *ngIf=\"folderTreeMeta.length !== folderTreeMeta.total\" (click)=\"loadMoreFolder()\" [disabled]=\"loadingMoreList[ROOT_ASSET_ID] || loading || homeLoading\">\n <div class=\"d-flex align-items-center\">\n <mat-spinner [diameter]=\"20\" *ngIf=\"loadingMoreList[ROOT_ASSET_ID]\"></mat-spinner>\n <mat-icon *ngIf=\"!loadingMoreList[ROOT_ASSET_ID]\">expand_more</mat-icon>\n <div class=\"ml-2\">Load More</div>\n </div>\n </button>\n <div class=\"mt-2\" [style.fontSize.px]=\"13\"><b>{{ folderTreeMeta.length }}</b> of <b>{{ folderTreeMeta.total }} folders</b></div>\n </div>\n</div>",
5456
+ styles: [":host::ng-deep .node{overflow-x:hidden;height:100%;display:-ms-grid;display:grid;grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}:host::ng-deep .node-tree{max-height:max(800px,90vh);overflow-y:auto}:host::ng-deep .node__home{padding:8px 10px;display:flex;align-items:center;height:44px}:host::ng-deep .node__home .mat-icon{color:#979797;margin-right:15px;margin-bottom:10px;font-size:32px}:host::ng-deep .node__home .node__home--loading{margin-right:19px}:host::ng-deep .node__item--loading{margin-left:10px}:host::ng-deep .node__item--info{display:flex;align-items:center}:host::ng-deep .node__item--info .folder-icon{display:flex;align-items:center;color:#6fc0ff;font-size:32px;margin-right:20px}:host::ng-deep .node__item--info .node-name{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host::ng-deep .node__item--info .node-name span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host::ng-deep .node__item--info .node-name .node-summary{margin-top:-5px;color:#979797}:host::ng-deep .node .mat-tree{width:-webkit-max-content!important;width:-moz-max-content!important;width:max-content!important;min-width:100%}:host::ng-deep .node .mat-tree .mat-tree-node{padding:5px 0;min-height:44px}:host::ng-deep .node .mat-tree .mat-tree-node .node__item--pading{height:20px}:host::ng-deep .node .mat-tree-node:hover,:host::ng-deep .node .node__home{transition:.3s;cursor:pointer}:host::ng-deep .node .mat-tree-node:hover:hover,:host::ng-deep .node .node__home:hover{background-color:#e8e8e8}:host::ng-deep .node .active{background-color:#f0f0f0}:host::ng-deep .node .disabled{pointer-events:none}"]
5188
5457
  }] }
5189
5458
  ];
5190
5459
  /** @nocollapse */
5191
5460
  NodeTreeComponent.ctorParameters = function () { return [
5461
+ { type: AssetService },
5192
5462
  { type: NodeTreeService },
5193
5463
  { type: AssetManagementService },
5194
5464
  { type: ChangeDetectorRef }
@@ -5202,6 +5472,8 @@ if (false) {
5202
5472
  /** @type {?} */
5203
5473
  NodeTreeComponent.prototype.width;
5204
5474
  /** @type {?} */
5475
+ NodeTreeComponent.prototype.ROOT_ASSET_ID;
5476
+ /** @type {?} */
5205
5477
  NodeTreeComponent.prototype.currentFolderId;
5206
5478
  /** @type {?} */
5207
5479
  NodeTreeComponent.prototype.isRoot;
@@ -5210,9 +5482,13 @@ if (false) {
5210
5482
  /** @type {?} */
5211
5483
  NodeTreeComponent.prototype.loading;
5212
5484
  /** @type {?} */
5485
+ NodeTreeComponent.prototype.loadingMoreList;
5486
+ /** @type {?} */
5213
5487
  NodeTreeComponent.prototype.treeControl;
5214
5488
  /** @type {?} */
5215
5489
  NodeTreeComponent.prototype.dataSource;
5490
+ /** @type {?} */
5491
+ NodeTreeComponent.prototype.folderChildrenMap;
5216
5492
  /**
5217
5493
  * @type {?}
5218
5494
  * @private
@@ -5224,6 +5500,8 @@ if (false) {
5224
5500
  NodeTreeComponent.prototype.isExpandable;
5225
5501
  /** @type {?} */
5226
5502
  NodeTreeComponent.prototype.hasChild;
5503
+ /** @type {?} */
5504
+ NodeTreeComponent.prototype.assetService;
5227
5505
  /**
5228
5506
  * @type {?}
5229
5507
  * @private
@@ -5490,7 +5768,7 @@ var SearchBoxComponent = /** @class */ (function () {
5490
5768
  */
5491
5769
  function (_a) {
5492
5770
  var _b = __read(_a, 2), folders = _b[0], assets = _b[1];
5493
- _this.assetService.setFolderList(folders.Data, folders.Meta.Total);
5771
+ _this.assetService.setFolderList(folders.Data, { Total: folders.Data.TotalFolder });
5494
5772
  _this.assetService.setAssetList(assets.Data.Children, assets.Meta);
5495
5773
  }))
5496
5774
  .add((/**
@@ -5663,19 +5941,9 @@ var AssetWrapperComponent = /** @class */ (function () {
5663
5941
  this.hasArchivePermission = true;
5664
5942
  this.assets = new EventEmitter();
5665
5943
  this.unsubscribe$ = new Subject$1();
5666
- this.nodeTreeMinWidth = 250;
5944
+ this.nodeTreeMinWidth = 300;
5667
5945
  this.nodeTreeMaxWidth = 700;
5668
5946
  }
5669
- /**
5670
- * @return {?}
5671
- */
5672
- AssetWrapperComponent.prototype.ngOnChanges = /**
5673
- * @return {?}
5674
- */
5675
- function () {
5676
- console.log('modify', this.hasModifyPermission);
5677
- console.log('archive', this.hasArchivePermission);
5678
- };
5679
5947
  /**
5680
5948
  * @return {?}
5681
5949
  */
@@ -6050,23 +6318,24 @@ var NodeDetailsComponent = /** @class */ (function () {
6050
6318
  type: ActionTypes.SET_GLOBAL_LOADING,
6051
6319
  payload: true,
6052
6320
  });
6321
+ var _a = this.getFolderPagePagination(), pageIndex = _a.pageIndex, pageSize = _a.pageSize;
6053
6322
  this.assetService
6054
- .getChildrenFolders({ assetId: id })
6323
+ .getChildrenFolders({ assetId: id, pageIndex: pageIndex, pageSize: pageSize })
6055
6324
  .pipe(takeUntil(this.unsubscribe$))
6056
6325
  .subscribe((/**
6057
6326
  * @param {?} res
6058
6327
  * @return {?}
6059
6328
  */
6060
6329
  function (res) {
6061
- _this.assetService.setFolderList(res.Data, res.Meta.Total);
6062
- if (res.Data && res.Data.Children) {
6063
- res.Data.Children.forEach((/**
6330
+ var Data = res.Data;
6331
+ var Children = Data.Children;
6332
+ _this.setFolderList(res);
6333
+ if (Children) {
6334
+ Children.forEach((/**
6064
6335
  * @param {?} node
6065
6336
  * @return {?}
6066
6337
  */
6067
- function (node) {
6068
- return _this.nodeTreeService.addNode(node, _this.currentFolder.AssetId);
6069
- }));
6338
+ function (node) { return _this.nodeTreeService.addNode(node, _this.currentFolder.AssetId); }));
6070
6339
  }
6071
6340
  }))
6072
6341
  .add((/**
@@ -6079,6 +6348,23 @@ var NodeDetailsComponent = /** @class */ (function () {
6079
6348
  });
6080
6349
  }));
6081
6350
  };
6351
+ /**
6352
+ * @private
6353
+ * @param {?} res
6354
+ * @return {?}
6355
+ */
6356
+ NodeDetailsComponent.prototype.setFolderList = /**
6357
+ * @private
6358
+ * @param {?} res
6359
+ * @return {?}
6360
+ */
6361
+ function (res) {
6362
+ var Data = res.Data, Meta = res.Meta;
6363
+ var TotalFolder = Data.TotalFolder;
6364
+ var PageIndex = Meta.PageIndex, PageSize = Meta.PageSize;
6365
+ this.assetService.setFolderList(Data, { Total: TotalFolder, PageIndex: PageIndex, PageSize: PageSize });
6366
+ this.setFolderPagination({ length: TotalFolder, pageIndex: PageIndex, pageSize: PageSize });
6367
+ };
6082
6368
  /**
6083
6369
  * @private
6084
6370
  * @param {?} id
@@ -6095,8 +6381,9 @@ var NodeDetailsComponent = /** @class */ (function () {
6095
6381
  type: ActionTypes.SET_GLOBAL_LOADING,
6096
6382
  payload: true,
6097
6383
  });
6384
+ var _a = this.getFolderPagePagination(), pageIndex = _a.pageIndex, pageSize = _a.pageSize;
6098
6385
  combineLatest([
6099
- this.assetService.getChildrenFolders({ assetId: id }),
6386
+ this.assetService.getChildrenFolders({ assetId: id, pageIndex: pageIndex, pageSize: pageSize }),
6100
6387
  this.assetService.getChildrenAssets({
6101
6388
  assetId: id,
6102
6389
  }),
@@ -6107,11 +6394,11 @@ var NodeDetailsComponent = /** @class */ (function () {
6107
6394
  * @return {?}
6108
6395
  */
6109
6396
  function (_a) {
6110
- var _b = __read(_a, 2), folders = _b[0], assets = _b[1];
6111
- _this.assetService.setFolderList(folders.Data, folders.Meta.Total);
6112
- _this.assetService.setAssetList(assets.Data.Children, assets.Meta);
6113
- if (folders.Data && folders.Data.Children) {
6114
- folders.Data.Children.forEach((/**
6397
+ var _b = __read(_a, 2), foldersRes = _b[0], assetsRes = _b[1];
6398
+ _this.setFolderList(foldersRes);
6399
+ _this.assetService.setAssetList(assetsRes.Data.Children, assetsRes.Meta);
6400
+ if (foldersRes.Data && foldersRes.Data.Children) {
6401
+ foldersRes.Data.Children.forEach((/**
6115
6402
  * @param {?} node
6116
6403
  * @return {?}
6117
6404
  */
@@ -6130,6 +6417,52 @@ var NodeDetailsComponent = /** @class */ (function () {
6130
6417
  });
6131
6418
  }));
6132
6419
  };
6420
+ /**
6421
+ * @return {?}
6422
+ */
6423
+ NodeDetailsComponent.prototype.getFolderPagePagination = /**
6424
+ * @return {?}
6425
+ */
6426
+ function () {
6427
+ return {
6428
+ pageIndex: this.assetService.pageFolderIndex,
6429
+ pageSize: this.assetService.pageFolderSize,
6430
+ length: this.assetService.folderTotal,
6431
+ };
6432
+ };
6433
+ /**
6434
+ * @param {?} event
6435
+ * @return {?}
6436
+ */
6437
+ NodeDetailsComponent.prototype.onFolderPageChange = /**
6438
+ * @param {?} event
6439
+ * @return {?}
6440
+ */
6441
+ function (event) {
6442
+ this.assetService.pageFolderIndex = event.pageIndex;
6443
+ this.assetService.pageFolderSize = event.pageSize;
6444
+ this.fetchFolder(this.currentFolder.AssetId);
6445
+ };
6446
+ /**
6447
+ * @private
6448
+ * @param {?} pagination
6449
+ * @return {?}
6450
+ */
6451
+ NodeDetailsComponent.prototype.setFolderPagination = /**
6452
+ * @private
6453
+ * @param {?} pagination
6454
+ * @return {?}
6455
+ */
6456
+ function (pagination) {
6457
+ if (!pagination)
6458
+ return;
6459
+ var length = pagination.length, pageIndex = pagination.pageIndex, pageSize = pagination.pageSize;
6460
+ this.folderPagination = {
6461
+ pageIndex: pageIndex,
6462
+ pageSize: pageSize,
6463
+ length: length
6464
+ };
6465
+ };
6133
6466
  Object.defineProperty(NodeDetailsComponent.prototype, "noResults", {
6134
6467
  get: /**
6135
6468
  * @return {?}
@@ -6163,7 +6496,7 @@ var NodeDetailsComponent = /** @class */ (function () {
6163
6496
  NodeDetailsComponent.decorators = [
6164
6497
  { type: Component, args: [{
6165
6498
  selector: 'lib-node-details',
6166
- template: "<div class=\"node-details custom-scrollbar\">\n <div class=\"node-header\">\n <mat-progress-bar [style.visibility]=\"(loading$ | async) ? 'visible' : 'hidden'\" mode=\"indeterminate\">\n </mat-progress-bar>\n <div class=\"node-header-content\">\n <div class=\"node-header-content__left\">\n <H5 class=\"node-header-content__left--title\">\n <ng-container *ngIf=\"assetService?.keyword\">\n Search results for <span>{{ assetService?.keyword }}</span> in\n </ng-container>\n {{ currentFolder?.OriginalFileName }}\n </H5>\n <p *ngIf=\"!noResults\" class=\"node-header-content__left--subtitle\">\n {{ assetService?.folderTotal }}\n {{ assetService?.folderTotal > 1 ? 'folders' : 'folder' }},\n {{ assetService?.fileTotal }}\n {{ assetService?.fileTotal > 1 ? 'files': 'file' }}\n </p>\n </div>\n <div class=\"node-header-content__right\">\n <div class=\"button-wrapper\">\n <button mat-raised-button [disabled]=\"!selectedAssets?.length || !hasArchivePermission\" (click)=\"deleteAssets()\" color=\"warn\">\n <span>{{selectedAssets?.length > 1 ? 'Delete assets' : 'Delete asset'}}</span>\n <span *ngIf=\"selectedAssets?.length\" class=\"count\">({{ selectedAssets.length }})</span>\n </button>\n <button mat-raised-button color=\"primary\" (click)=\"openUploadDialog()\" [disabled]=\"!currentFolder?.AssetId || !hasModifyPermission\">\n Upload asset\n </button>\n <button mat-raised-button color=\"primary\" (click)=\"addFolder()\" [disabled]=\"!currentFolder?.AssetId || !hasModifyPermission\">\n Add folder\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"node-body\">\n <lib-search-not-found *ngIf=\"noResults; else contentAsset\"></lib-search-not-found>\n <ng-template #contentAsset>\n <lib-folder-list\n class=\"node-body__section\"\n [folders]=\"currentFolder?.Children\"\n [hasModifyPermission]=\"hasModifyPermission\"\n [hasAccessPermission]=\"hasAccessPermission\"\n [hasArchivePermission]=\"hasArchivePermission\"\n ></lib-folder-list>\n <lib-asset-list\n [assets]=\"assets\"\n [hasModifyPermission]=\"hasModifyPermission\"\n [hasAccessPermission]=\"hasAccessPermission\"\n [hasArchivePermission]=\"hasArchivePermission\"\n ></lib-asset-list>\n </ng-template>\n </div>\n</div>",
6499
+ template: "<div class=\"node-details custom-scrollbar\">\n <div class=\"node-header\">\n <mat-progress-bar [style.visibility]=\"(loading$ | async) ? 'visible' : 'hidden'\" mode=\"indeterminate\">\n </mat-progress-bar>\n <div class=\"node-header-content\">\n <div class=\"node-header-content__left\">\n <H5 class=\"node-header-content__left--title\">\n <ng-container *ngIf=\"assetService?.keyword\">\n Search results for <span>{{ assetService?.keyword }}</span> in\n </ng-container>\n {{ currentFolder?.OriginalFileName }}\n </H5>\n <p *ngIf=\"!noResults\" class=\"node-header-content__left--subtitle\">\n {{ assetService?.folderTotal }}\n {{ assetService?.folderTotal > 1 ? 'folders' : 'folder' }},\n {{ assetService?.fileTotal }}\n {{ assetService?.fileTotal > 1 ? 'files': 'file' }}\n </p>\n </div>\n <div class=\"node-header-content__right\">\n <div class=\"button-wrapper\">\n <button mat-raised-button [disabled]=\"!selectedAssets?.length || !hasArchivePermission\" (click)=\"deleteAssets()\" color=\"warn\">\n <span>{{selectedAssets?.length > 1 ? 'Delete assets' : 'Delete asset'}}</span>\n <span *ngIf=\"selectedAssets?.length\" class=\"count\">({{ selectedAssets.length }})</span>\n </button>\n <button mat-raised-button color=\"primary\" (click)=\"openUploadDialog()\" [disabled]=\"!currentFolder?.AssetId || !hasModifyPermission\">\n Upload asset\n </button>\n <button mat-raised-button color=\"primary\" (click)=\"addFolder()\" [disabled]=\"!currentFolder?.AssetId || !hasModifyPermission\">\n Add folder\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"node-body\">\n <lib-search-not-found *ngIf=\"noResults; else contentAsset\"></lib-search-not-found>\n <ng-template #contentAsset>\n <lib-folder-list\n class=\"node-body__section\"\n [folders]=\"currentFolder?.Children\"\n [pagination]=\"folderPagination\"\n [hasModifyPermission]=\"hasModifyPermission\"\n [hasAccessPermission]=\"hasAccessPermission\"\n [hasArchivePermission]=\"hasArchivePermission\"\n (onPageChange)=\"onFolderPageChange($event)\"\n ></lib-folder-list>\n <lib-asset-list\n [assets]=\"assets\"\n [hasModifyPermission]=\"hasModifyPermission\"\n [hasAccessPermission]=\"hasAccessPermission\"\n [hasArchivePermission]=\"hasArchivePermission\"\n ></lib-asset-list>\n </ng-template>\n </div>\n</div>",
6167
6500
  styles: [":host::ng-deep .node-details{max-height:100%;overflow-y:auto}:host::ng-deep .node-details .node-header{position:-webkit-sticky;position:sticky;top:0;background-color:#fff;z-index:20}:host::ng-deep .node-details .node-header-content{padding:10px 20px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}:host::ng-deep .node-details .node-header-content__left--title{margin-bottom:5px}:host::ng-deep .node-details .node-header-content__left--title span{color:#fb3458}:host::ng-deep .node-details .node-header-content__left--subtitle{margin:0;color:#979797;font-size:14px}:host::ng-deep .node-details .node-header-content__right{flex:1}:host::ng-deep .node-details .node-header-content__right .button-wrapper{display:flex;gap:15px;justify-content:flex-end}:host::ng-deep .node-details .node-header-content__right .button-wrapper .count{margin-left:3px}:host::ng-deep .node-details .node-body{padding:0 20px}:host::ng-deep .node-details .node-body__section{display:block;margin-bottom:15px}"]
6168
6501
  }] }
6169
6502
  ];
@@ -6195,6 +6528,8 @@ if (false) {
6195
6528
  */
6196
6529
  NodeDetailsComponent.prototype.unsubscribe$;
6197
6530
  /** @type {?} */
6531
+ NodeDetailsComponent.prototype.folderPagination;
6532
+ /** @type {?} */
6198
6533
  NodeDetailsComponent.prototype.selectedAssets;
6199
6534
  /** @type {?} */
6200
6535
  NodeDetailsComponent.prototype.loading$;