@acorex-platform/module-document-management-client 0.0.56 → 0.0.58

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 (50) hide show
  1. package/fesm2022/{acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-qhcOFKFu.mjs → acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-BAlV-t9L.mjs} +411 -141
  2. package/fesm2022/acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-BAlV-t9L.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-document-management-client-attachment-view-skeleton.component-BeQSbax5.mjs → acorex-platform-module-document-management-client-attachment-view-skeleton.component-CriADt_T.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-document-management-client-attachment-view-skeleton.component-BeQSbax5.mjs.map → acorex-platform-module-document-management-client-attachment-view-skeleton.component-CriADt_T.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-document-management-client-attachment-widget.component-CsrcMMC9.mjs → acorex-platform-module-document-management-client-attachment-widget.component-DqM2ltmp.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-document-management-client-attachment-widget.component-CsrcMMC9.mjs.map → acorex-platform-module-document-management-client-attachment-widget.component-DqM2ltmp.mjs.map} +1 -1
  7. package/fesm2022/acorex-platform-module-document-management-client-contracts.mjs +161 -1
  8. package/fesm2022/acorex-platform-module-document-management-client-contracts.mjs.map +1 -1
  9. package/fesm2022/{acorex-platform-module-document-management-client-details-view.component-DkCD8RSd.mjs → acorex-platform-module-document-management-client-details-view.component-BQrDE1DN.mjs} +111 -37
  10. package/fesm2022/acorex-platform-module-document-management-client-details-view.component-BQrDE1DN.mjs.map +1 -0
  11. package/fesm2022/{acorex-platform-module-document-management-client-distribute-document.command-BaCdm2YF.mjs → acorex-platform-module-document-management-client-distribute-document.command-u3nQHky9.mjs} +2 -2
  12. package/fesm2022/{acorex-platform-module-document-management-client-distribute-document.command-BaCdm2YF.mjs.map → acorex-platform-module-document-management-client-distribute-document.command-u3nQHky9.mjs.map} +1 -1
  13. package/fesm2022/{acorex-platform-module-document-management-client-drive-choose.component-up9sAsei.mjs → acorex-platform-module-document-management-client-drive-choose.component-D7B9fi6_.mjs} +2 -2
  14. package/fesm2022/{acorex-platform-module-document-management-client-drive-choose.component-up9sAsei.mjs.map → acorex-platform-module-document-management-client-drive-choose.component-D7B9fi6_.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-document-management-client-large-icons-view-skeleton.component-C_VbFRKl.mjs → acorex-platform-module-document-management-client-large-icons-view-skeleton.component-C0P-zEpf.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-module-document-management-client-large-icons-view-skeleton.component-C_VbFRKl.mjs.map → acorex-platform-module-document-management-client-large-icons-view-skeleton.component-C0P-zEpf.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-document-management-client-large-icons-view.component-Cece4n22.mjs → acorex-platform-module-document-management-client-large-icons-view.component-QvwN7k9l.mjs} +2 -2
  18. package/fesm2022/{acorex-platform-module-document-management-client-large-icons-view.component-Cece4n22.mjs.map → acorex-platform-module-document-management-client-large-icons-view.component-QvwN7k9l.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-module-document-management-client-large-tiles-view.component-DzWIUZtv.mjs → acorex-platform-module-document-management-client-large-tiles-view.component--HbrSK06.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-document-management-client-large-tiles-view.component-DzWIUZtv.mjs.map → acorex-platform-module-document-management-client-large-tiles-view.component--HbrSK06.mjs.map} +1 -1
  21. package/fesm2022/{acorex-platform-module-document-management-client-list-view-skeleton.component-Dgx8lVyN.mjs → acorex-platform-module-document-management-client-list-view-skeleton.component-D_tOw89k.mjs} +2 -2
  22. package/fesm2022/{acorex-platform-module-document-management-client-list-view-skeleton.component-Dgx8lVyN.mjs.map → acorex-platform-module-document-management-client-list-view-skeleton.component-D_tOw89k.mjs.map} +1 -1
  23. package/fesm2022/{acorex-platform-module-document-management-client-list-view.component-DVUfHWHB.mjs → acorex-platform-module-document-management-client-list-view.component-4lKV7vLI.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-module-document-management-client-list-view.component-DVUfHWHB.mjs.map → acorex-platform-module-document-management-client-list-view.component-4lKV7vLI.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-module-document-management-client-open-document.command-Bimm2bzt.mjs → acorex-platform-module-document-management-client-open-document.command-ChUbCmwI.mjs} +83 -14
  26. package/fesm2022/acorex-platform-module-document-management-client-open-document.command-ChUbCmwI.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-document-management-client-request-document-review.command-DUTxOir5.mjs +456 -0
  28. package/fesm2022/acorex-platform-module-document-management-client-request-document-review.command-DUTxOir5.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-module-document-management-client-sign-document-review.command-B08sgrRi.mjs +121 -0
  30. package/fesm2022/acorex-platform-module-document-management-client-sign-document-review.command-B08sgrRi.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-module-document-management-client-small-icons-view-skeleton.component-CU2MiVUi.mjs → acorex-platform-module-document-management-client-small-icons-view-skeleton.component-9tV5qpUV.mjs} +2 -2
  32. package/fesm2022/{acorex-platform-module-document-management-client-small-icons-view-skeleton.component-CU2MiVUi.mjs.map → acorex-platform-module-document-management-client-small-icons-view-skeleton.component-9tV5qpUV.mjs.map} +1 -1
  33. package/fesm2022/{acorex-platform-module-document-management-client-small-icons-view.component-CL5cNRtI.mjs → acorex-platform-module-document-management-client-small-icons-view.component-BxGk3N37.mjs} +2 -2
  34. package/fesm2022/{acorex-platform-module-document-management-client-small-icons-view.component-CL5cNRtI.mjs.map → acorex-platform-module-document-management-client-small-icons-view.component-BxGk3N37.mjs.map} +1 -1
  35. package/fesm2022/{acorex-platform-module-document-management-client-small-tiles-view-skeleton.component-DBJldDaS.mjs → acorex-platform-module-document-management-client-small-tiles-view-skeleton.component-DYhUCJLg.mjs} +2 -2
  36. package/fesm2022/{acorex-platform-module-document-management-client-small-tiles-view-skeleton.component-DBJldDaS.mjs.map → acorex-platform-module-document-management-client-small-tiles-view-skeleton.component-DYhUCJLg.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-module-document-management-client-small-tiles-view.component-DtsBSVCq.mjs → acorex-platform-module-document-management-client-small-tiles-view.component-Dmyzdd5g.mjs} +2 -2
  38. package/fesm2022/{acorex-platform-module-document-management-client-small-tiles-view.component-DtsBSVCq.mjs.map → acorex-platform-module-document-management-client-small-tiles-view.component-Dmyzdd5g.mjs.map} +1 -1
  39. package/fesm2022/{acorex-platform-module-document-management-client-upload-document.command-D3L6x6CQ.mjs → acorex-platform-module-document-management-client-upload-document.command-CPcrmNAp.mjs} +2 -2
  40. package/fesm2022/{acorex-platform-module-document-management-client-upload-document.command-D3L6x6CQ.mjs.map → acorex-platform-module-document-management-client-upload-document.command-CPcrmNAp.mjs.map} +1 -1
  41. package/fesm2022/acorex-platform-module-document-management-client.mjs +1 -1
  42. package/i18n/en-AU/document-management.json +63 -2
  43. package/i18n/en-US/document-management.json +63 -2
  44. package/i18n/fa-IR/document-management.json +63 -2
  45. package/package.json +2 -2
  46. package/types/acorex-platform-module-document-management-client-contracts.d.ts +34 -2
  47. package/types/acorex-platform-module-document-management-client.d.ts +8 -1
  48. package/fesm2022/acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-qhcOFKFu.mjs.map +0 -1
  49. package/fesm2022/acorex-platform-module-document-management-client-details-view.component-DkCD8RSd.mjs.map +0 -1
  50. package/fesm2022/acorex-platform-module-document-management-client-open-document.command-Bimm2bzt.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-document-management-client-list-view.component-DVUfHWHB.mjs","sources":["../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/list/list-view.component.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/list/list-view.component.html"],"sourcesContent":["import { Component, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AXPDblClickDirective, AXPElementDataDirective } from '@acorex-platform/framework-client/core';\nimport { AXPDocumentExplorerViewModel } from '../../document-explorer.viewmodel';\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMDocumentExpirationBadgeComponent } from '../../../shared/components/document-expiration-badge/document-expiration-badge.component';\nimport { AXMDocumentVersionBadgeComponent } from '../../../shared/components/document-version-badge/document-version-badge.component';\nimport { AXMFolderExpirationBadgesComponent } from '../../../shared/components/folder-expiration-badges/folder-expiration-badges.component';\n\n@Component({\n selector: 'axm-document-explorer-list-view',\n templateUrl: './list-view.component.html',\n styleUrls: ['./list-view.component.css'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n CommonModule,\n AXPElementDataDirective,\n AXPDblClickDirective,\n AXTranslationModule,\n AXMDocumentExpirationBadgeComponent,\n AXMDocumentVersionBadgeComponent,\n AXMFolderExpirationBadgesComponent,\n ],\n})\nexport class AXMDocumentExplorerListViewComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n} ","@if (vm.groupByType()) {\n @if (vm.filteredFolders().length > 0) {\n <div class=\"__section\">\n <div class=\"__header\">\n <h3 class=\"__title\">{{ '@document-management:terms.common.folders' | translate | async }}</h3>\n </div>\n <div class=\"__content fa-xl\">\n @for (folder of vm.filteredFolders(); track folder.id) {\n @let folderDisplay = vm.getNodeDisplayInfo(folder);\n <div\n class=\"__explorer-item\"\n [class.--selected]=\"vm.isItemSelected(folder)\"\n [axp-data]=\"folder\"\n (click)=\"vm.toggleSelect(folder)\"\n (onDblClick)=\"vm.navigateToFolder(folder.id)\"\n >\n <div class=\"__icon\" [style.color]=\"vm.getFolderColor(folder)\" [class.__shortcut]=\"folderDisplay.isShortcut\">\n @if (vm.isLoadingFolder(folder.id)) {\n <i class=\"fa-light fa-spinner fa-spin-pulse\"></i>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n @if (folderDisplay.isShortcut) {\n <i class=\"__shortcut-arrow fa-light fa-up-right-from-square\" aria-hidden=\"true\"></i>\n }\n </div>\n <div class=\"flex min-w-0 items-center gap-1.5\">\n <div class=\"__name\">{{ folder.name }}</div>\n <!-- ----- Expiration counts after folder name ----- -->\n <axm-folder-expiration-badges [node]=\"folder\" />\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (vm.filteredFiles().length > 0) {\n <div class=\"__section\">\n <div class=\"__header\">\n <h3 class=\"__title\">{{ '@document-management:terms.common.files' | translate | async }}</h3>\n </div>\n <div class=\"__content fa-xl\">\n @for (file of vm.filteredFiles(); track file.id) {\n @let fileDisplay = vm.getNodeDisplayInfo(file);\n <div\n class=\"__explorer-item\"\n [class.--selected]=\"vm.isItemSelected(file)\"\n [axp-data]=\"file\"\n (click)=\"vm.toggleSelect(file)\"\n (onDblClick)=\"vm.openFile(file)\"\n >\n <div class=\"__icon\" [class.__shortcut]=\"fileDisplay.isShortcut\">\n <i class=\"fa-fw {{ fileDisplay.icon }}\"></i>\n @if (fileDisplay.isShortcut) {\n <i class=\"__shortcut-arrow fa-light fa-up-right-from-square\" aria-hidden=\"true\"></i>\n }\n </div>\n <div class=\"flex min-w-0 items-center gap-1.5\">\n <div class=\"__name\">{{ file.title || file.name }}</div>\n <axm-document-expiration-badge [node]=\"file\" />\n <axm-document-version-badge [node]=\"file\" />\n </div>\n </div>\n }\n </div>\n </div>\n }\n} @else {\n <div class=\"__content fa-xl\">\n @for (folder of vm.filteredFolders(); track folder.id) {\n @let folderDisplay = vm.getNodeDisplayInfo(folder);\n <div\n class=\"__explorer-item\"\n [class.--selected]=\"vm.isItemSelected(folder)\"\n [axp-data]=\"folder\"\n (click)=\"vm.toggleSelect(folder)\"\n (onDblClick)=\"vm.navigateToFolder(folder.id)\"\n >\n <div class=\"__icon\" [style.color]=\"vm.getFolderColor(folder)\" [class.__shortcut]=\"folderDisplay.isShortcut\">\n @if (vm.isLoadingFolder(folder.id)) {\n <i class=\"fa-light fa-spinner fa-spin-pulse\"></i>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n @if (folderDisplay.isShortcut) {\n <i class=\"__shortcut-arrow fa-light fa-up-right-from-square\" aria-hidden=\"true\"></i>\n }\n </div>\n <div class=\"flex min-w-0 items-center gap-1.5\">\n <div class=\"__name\">{{ folder.name }}</div>\n <!-- ----- Expiration counts after folder name ----- -->\n <axm-folder-expiration-badges [node]=\"folder\" />\n </div>\n </div>\n }\n @for (file of vm.filteredFiles(); track file.id) {\n @let fileDisplay = vm.getNodeDisplayInfo(file);\n <div\n class=\"__explorer-item\"\n [class.--selected]=\"vm.isItemSelected(file)\"\n [axp-data]=\"file\"\n (click)=\"vm.toggleSelect(file)\"\n (onDblClick)=\"vm.openFile(file)\"\n >\n <div class=\"__icon\" [class.__shortcut]=\"fileDisplay.isShortcut\">\n <i class=\"fa-fw {{ fileDisplay.icon }}\"></i>\n @if (fileDisplay.isShortcut) {\n <i class=\"__shortcut-arrow fa-light fa-up-right-from-square\" aria-hidden=\"true\"></i>\n }\n </div>\n <div class=\"flex min-w-0 items-center gap-1.5\">\n <div class=\"__name\">{{ file.title || file.name }}</div>\n <axm-document-expiration-badge [node]=\"file\" />\n <axm-document-version-badge [node]=\"file\" />\n </div>\n </div>\n }\n </div>\n}\n"],"names":["i2"],"mappings":";;;;;;;;;MA2Ba,oCAAoC,CAAA;AAhBjD,IAAA,WAAA,GAAA;AAiBc,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACtD,IAAA;8GAFY,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BjD,y6JAwHA,EAAA,MAAA,EAAA,CAAA,65DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtGM,YAAY,+BACZ,uBAAuB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mCAAmC,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnC,gCAAgC,yFAChC,kCAAkC,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FAG3B,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAhBhD,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,cAG/B,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,KAAK,EAAA,OAAA,EACrC;wBACP,YAAY;wBACZ,uBAAuB;wBACvB,oBAAoB;wBACpB,mBAAmB;wBACnB,mCAAmC;wBACnC,gCAAgC;wBAChC,kCAAkC;AACnC,qBAAA,EAAA,QAAA,EAAA,y6JAAA,EAAA,MAAA,EAAA,CAAA,65DAAA,CAAA,EAAA;;;"}
1
+ {"version":3,"file":"acorex-platform-module-document-management-client-list-view.component-4lKV7vLI.mjs","sources":["../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/list/list-view.component.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/list/list-view.component.html"],"sourcesContent":["import { Component, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AXPDblClickDirective, AXPElementDataDirective } from '@acorex-platform/framework-client/core';\nimport { AXPDocumentExplorerViewModel } from '../../document-explorer.viewmodel';\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMDocumentExpirationBadgeComponent } from '../../../shared/components/document-expiration-badge/document-expiration-badge.component';\nimport { AXMDocumentVersionBadgeComponent } from '../../../shared/components/document-version-badge/document-version-badge.component';\nimport { AXMFolderExpirationBadgesComponent } from '../../../shared/components/folder-expiration-badges/folder-expiration-badges.component';\n\n@Component({\n selector: 'axm-document-explorer-list-view',\n templateUrl: './list-view.component.html',\n styleUrls: ['./list-view.component.css'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n CommonModule,\n AXPElementDataDirective,\n AXPDblClickDirective,\n AXTranslationModule,\n AXMDocumentExpirationBadgeComponent,\n AXMDocumentVersionBadgeComponent,\n AXMFolderExpirationBadgesComponent,\n ],\n})\nexport class AXMDocumentExplorerListViewComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n} ","@if (vm.groupByType()) {\n @if (vm.filteredFolders().length > 0) {\n <div class=\"__section\">\n <div class=\"__header\">\n <h3 class=\"__title\">{{ '@document-management:terms.common.folders' | translate | async }}</h3>\n </div>\n <div class=\"__content fa-xl\">\n @for (folder of vm.filteredFolders(); track folder.id) {\n @let folderDisplay = vm.getNodeDisplayInfo(folder);\n <div\n class=\"__explorer-item\"\n [class.--selected]=\"vm.isItemSelected(folder)\"\n [axp-data]=\"folder\"\n (click)=\"vm.toggleSelect(folder)\"\n (onDblClick)=\"vm.navigateToFolder(folder.id)\"\n >\n <div class=\"__icon\" [style.color]=\"vm.getFolderColor(folder)\" [class.__shortcut]=\"folderDisplay.isShortcut\">\n @if (vm.isLoadingFolder(folder.id)) {\n <i class=\"fa-light fa-spinner fa-spin-pulse\"></i>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n @if (folderDisplay.isShortcut) {\n <i class=\"__shortcut-arrow fa-light fa-up-right-from-square\" aria-hidden=\"true\"></i>\n }\n </div>\n <div class=\"flex min-w-0 items-center gap-1.5\">\n <div class=\"__name\">{{ folder.name }}</div>\n <!-- ----- Expiration counts after folder name ----- -->\n <axm-folder-expiration-badges [node]=\"folder\" />\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (vm.filteredFiles().length > 0) {\n <div class=\"__section\">\n <div class=\"__header\">\n <h3 class=\"__title\">{{ '@document-management:terms.common.files' | translate | async }}</h3>\n </div>\n <div class=\"__content fa-xl\">\n @for (file of vm.filteredFiles(); track file.id) {\n @let fileDisplay = vm.getNodeDisplayInfo(file);\n <div\n class=\"__explorer-item\"\n [class.--selected]=\"vm.isItemSelected(file)\"\n [axp-data]=\"file\"\n (click)=\"vm.toggleSelect(file)\"\n (onDblClick)=\"vm.openFile(file)\"\n >\n <div class=\"__icon\" [class.__shortcut]=\"fileDisplay.isShortcut\">\n <i class=\"fa-fw {{ fileDisplay.icon }}\"></i>\n @if (fileDisplay.isShortcut) {\n <i class=\"__shortcut-arrow fa-light fa-up-right-from-square\" aria-hidden=\"true\"></i>\n }\n </div>\n <div class=\"flex min-w-0 items-center gap-1.5\">\n <div class=\"__name\">{{ file.title || file.name }}</div>\n <axm-document-expiration-badge [node]=\"file\" />\n <axm-document-version-badge [node]=\"file\" />\n </div>\n </div>\n }\n </div>\n </div>\n }\n} @else {\n <div class=\"__content fa-xl\">\n @for (folder of vm.filteredFolders(); track folder.id) {\n @let folderDisplay = vm.getNodeDisplayInfo(folder);\n <div\n class=\"__explorer-item\"\n [class.--selected]=\"vm.isItemSelected(folder)\"\n [axp-data]=\"folder\"\n (click)=\"vm.toggleSelect(folder)\"\n (onDblClick)=\"vm.navigateToFolder(folder.id)\"\n >\n <div class=\"__icon\" [style.color]=\"vm.getFolderColor(folder)\" [class.__shortcut]=\"folderDisplay.isShortcut\">\n @if (vm.isLoadingFolder(folder.id)) {\n <i class=\"fa-light fa-spinner fa-spin-pulse\"></i>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n @if (folderDisplay.isShortcut) {\n <i class=\"__shortcut-arrow fa-light fa-up-right-from-square\" aria-hidden=\"true\"></i>\n }\n </div>\n <div class=\"flex min-w-0 items-center gap-1.5\">\n <div class=\"__name\">{{ folder.name }}</div>\n <!-- ----- Expiration counts after folder name ----- -->\n <axm-folder-expiration-badges [node]=\"folder\" />\n </div>\n </div>\n }\n @for (file of vm.filteredFiles(); track file.id) {\n @let fileDisplay = vm.getNodeDisplayInfo(file);\n <div\n class=\"__explorer-item\"\n [class.--selected]=\"vm.isItemSelected(file)\"\n [axp-data]=\"file\"\n (click)=\"vm.toggleSelect(file)\"\n (onDblClick)=\"vm.openFile(file)\"\n >\n <div class=\"__icon\" [class.__shortcut]=\"fileDisplay.isShortcut\">\n <i class=\"fa-fw {{ fileDisplay.icon }}\"></i>\n @if (fileDisplay.isShortcut) {\n <i class=\"__shortcut-arrow fa-light fa-up-right-from-square\" aria-hidden=\"true\"></i>\n }\n </div>\n <div class=\"flex min-w-0 items-center gap-1.5\">\n <div class=\"__name\">{{ file.title || file.name }}</div>\n <axm-document-expiration-badge [node]=\"file\" />\n <axm-document-version-badge [node]=\"file\" />\n </div>\n </div>\n }\n </div>\n}\n"],"names":["i2"],"mappings":";;;;;;;;;MA2Ba,oCAAoC,CAAA;AAhBjD,IAAA,WAAA,GAAA;AAiBc,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACtD,IAAA;8GAFY,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BjD,y6JAwHA,EAAA,MAAA,EAAA,CAAA,65DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtGM,YAAY,+BACZ,uBAAuB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mCAAmC,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnC,gCAAgC,yFAChC,kCAAkC,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FAG3B,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAhBhD,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,cAG/B,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,KAAK,EAAA,OAAA,EACrC;wBACP,YAAY;wBACZ,uBAAuB;wBACvB,oBAAoB;wBACpB,mBAAmB;wBACnB,mCAAmC;wBACnC,gCAAgC;wBAChC,kCAAkC;AACnC,qBAAA,EAAA,QAAA,EAAA,y6JAAA,EAAA,MAAA,EAAA,CAAA,65DAAA,CAAA,EAAA;;;"}
@@ -1,11 +1,17 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, Injectable } from '@angular/core';
1
+ import { AXToastService } from '@acorex/components/toast';
2
+ import { AXTranslationService } from '@acorex/core/translation';
3
+ import { extractRequestErrorInfo } from '@acorex-platform/framework-client/common';
3
4
  import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
4
5
  import { RootConfig } from '@acorex-platform/module-document-management-client/contracts';
5
- import { i as AXMDocumentManagerService } from './acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-qhcOFKFu.mjs';
6
+ import * as i0 from '@angular/core';
7
+ import { inject, Injectable } from '@angular/core';
8
+ import { j as AXMDocumentManagerService, m as AXPDocumentManagementService } from './acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-BAlV-t9L.mjs';
6
9
 
7
10
  //#region ----- Imports -----
8
11
  //#endregion
12
+ //#region ----- Constants -----
13
+ const I18N = '@document-management:review';
14
+ //#endregion
9
15
  //#region ----- Helpers -----
10
16
  function isExplorerFileNode(value) {
11
17
  return (!!value &&
@@ -23,20 +29,20 @@ function readDocumentId(value) {
23
29
  }
24
30
  return trimmed;
25
31
  }
26
- function resolveDocumentId(input = {}) {
32
+ function readContextId(input, key) {
27
33
  const data = input.data;
28
34
  const fromPayloadContext = data && typeof data === 'object' && 'payload' in data
29
- ? data.payload?.context?.documentId
35
+ ? data.payload?.context?.[key]
30
36
  : undefined;
31
37
  const fromDataContext = data && typeof data === 'object' && 'context' in data
32
- ? data.context?.documentId
38
+ ? data.context?.[key]
33
39
  : undefined;
34
- const fromDataDocumentId = data && typeof data === 'object' && 'documentId' in data
35
- ? data.documentId
40
+ const fromData = data && typeof data === 'object' && key in data
41
+ ? data[key]
36
42
  : undefined;
37
- return (readDocumentId(input.documentId) ??
38
- readDocumentId(input.options?.documentId) ??
39
- readDocumentId(fromDataDocumentId) ??
43
+ return (readDocumentId(input[key]) ??
44
+ readDocumentId(input.options?.[key]) ??
45
+ readDocumentId(fromData) ??
40
46
  readDocumentId(fromPayloadContext) ??
41
47
  readDocumentId(fromDataContext));
42
48
  }
@@ -62,13 +68,17 @@ function toExplorerNode(document) {
62
68
  //#region ----- Open file command -----
63
69
  /**
64
70
  * Opens a document the same way Drive context menu open does
65
- * (catalog open handler, otherwise download).
71
+ * (catalog open handler, otherwise download). Folder review View lists
72
+ * files for the assigned reviewer instead of navigating to Drive.
66
73
  */
67
74
  class AXMOpenDocumentCommand {
68
75
  constructor() {
69
76
  //#region ----- Services & Dependencies -----
70
77
  this.documentManager = inject(AXMDocumentManagerService);
78
+ this.documentApi = inject(AXPDocumentManagementService);
71
79
  this.entityService = inject(AXPEntityService);
80
+ this.toastService = inject(AXToastService);
81
+ this.translationService = inject(AXTranslationService);
72
82
  this.documentData = this.entityService
73
83
  .withEntity(RootConfig.module.name, RootConfig.entities.document.name)
74
84
  .data();
@@ -81,7 +91,11 @@ class AXMOpenDocumentCommand {
81
91
  await this.documentManager.openFile(input.data);
82
92
  return { success: true, kind: 'object', data: { documentId: input.data.id } };
83
93
  }
84
- const documentId = resolveDocumentId(input);
94
+ const folderId = readContextId(input, 'folderId');
95
+ if (folderId) {
96
+ return this.openFolder(folderId, readContextId(input, 'taskId'));
97
+ }
98
+ const documentId = readContextId(input, 'documentId');
85
99
  if (!documentId) {
86
100
  return {
87
101
  success: false,
@@ -98,6 +112,61 @@ class AXMOpenDocumentCommand {
98
112
  await this.documentManager.openFile(toExplorerNode(document));
99
113
  return { success: true, kind: 'object', data: { documentId } };
100
114
  }
115
+ //#endregion
116
+ //#region ----- Folder review -----
117
+ async openFolder(folderId, taskId) {
118
+ let documents;
119
+ try {
120
+ documents = await this.documentApi.listFolderReviewDocuments(folderId, taskId);
121
+ }
122
+ catch (error) {
123
+ const info = extractRequestErrorInfo(error);
124
+ const messageKey = info?.status === 403
125
+ ? `${I18N}.errors.folder-view-forbidden`
126
+ : `${I18N}.errors.failed`;
127
+ await this.toastError(messageKey);
128
+ return { success: false, message: { text: messageKey } };
129
+ }
130
+ if (documents.length === 0) {
131
+ await this.toastWarning(`${I18N}.folder-view.empty`);
132
+ return { success: true, kind: 'object', data: { folderId, empty: true } };
133
+ }
134
+ if (documents.length > 1) {
135
+ await this.toastInfo(`${I18N}.folder-view.opening-all`, { count: documents.length });
136
+ }
137
+ const openedIds = [];
138
+ for (const document of documents) {
139
+ if (!document.id) {
140
+ continue;
141
+ }
142
+ await this.documentManager.openFile(toExplorerNode(document));
143
+ openedIds.push(document.id);
144
+ }
145
+ return { success: true, kind: 'object', data: { folderId, documentIds: openedIds } };
146
+ }
147
+ //#endregion
148
+ //#region ----- Toasts -----
149
+ async toastError(contentKey) {
150
+ const [title, content] = await Promise.all([
151
+ this.translationService.translateAsync(`${I18N}.errors.title`),
152
+ this.translationService.translateAsync(contentKey),
153
+ ]);
154
+ this.toastService.show({ color: 'danger', title, content, timeOut: 4000 });
155
+ }
156
+ async toastWarning(contentKey) {
157
+ const [title, content] = await Promise.all([
158
+ this.translationService.translateAsync(`${I18N}.folder-view.title`),
159
+ this.translationService.translateAsync(contentKey),
160
+ ]);
161
+ this.toastService.show({ color: 'warning', title, content, timeOut: 4000 });
162
+ }
163
+ async toastInfo(contentKey, params) {
164
+ const [title, content] = await Promise.all([
165
+ this.translationService.translateAsync(`${I18N}.folder-view.title`),
166
+ this.translationService.translateAsync(contentKey, { params }),
167
+ ]);
168
+ this.toastService.show({ color: 'primary', title, content, timeOut: 4000 });
169
+ }
101
170
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOpenDocumentCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
102
171
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOpenDocumentCommand, providedIn: 'root' }); }
103
172
  }
@@ -107,4 +176,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
107
176
  }] });
108
177
 
109
178
  export { AXMOpenDocumentCommand };
110
- //# sourceMappingURL=acorex-platform-module-document-management-client-open-document.command-Bimm2bzt.mjs.map
179
+ //# sourceMappingURL=acorex-platform-module-document-management-client-open-document.command-ChUbCmwI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-document-management-client-open-document.command-ChUbCmwI.mjs","sources":["../../../../libs/modules/document-management/client/src/lib/features/commands/open-document.command.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { extractRequestErrorInfo } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXPFileListItem } from '@acorex-platform/framework-shared/core';\nimport {\n AXMDocumentDto,\n RootConfig,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMDocumentManagerService } from '../shared/document-manager.service';\nimport type { AXMDocumentExplorerNode } from '../shared/document-manager.types';\nimport { AXPDocumentManagementService } from '../shared/document-management.service';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMOpenDocumentCommandInput {\n documentId?: string;\n folderId?: string;\n taskId?: string;\n data?: AXMDocumentExplorerNode | {\n documentId?: string;\n folderId?: string;\n taskId?: string;\n id?: string;\n payload?: { context?: { documentId?: string; folderId?: string; taskId?: string } };\n context?: { documentId?: string; folderId?: string; taskId?: string };\n };\n options?: {\n documentId?: string;\n folderId?: string;\n taskId?: string;\n };\n}\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst I18N = '@document-management:review';\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction isExplorerFileNode(value: unknown): value is AXMDocumentExplorerNode {\n return (\n !!value &&\n typeof value === 'object' &&\n (value as AXMDocumentExplorerNode).type === 'file' &&\n typeof (value as AXMDocumentExplorerNode).id === 'string'\n );\n}\n\nfunction readDocumentId(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n if (!trimmed || trimmed.includes('{{') || trimmed.includes('}}')) {\n return undefined;\n }\n return trimmed;\n}\n\nfunction readContextId(\n input: AXMOpenDocumentCommandInput,\n key: 'documentId' | 'folderId' | 'taskId',\n): string | undefined {\n const data = input.data;\n const fromPayloadContext =\n data && typeof data === 'object' && 'payload' in data\n ? (data as { payload?: { context?: Record<string, unknown> } }).payload?.context?.[key]\n : undefined;\n const fromDataContext =\n data && typeof data === 'object' && 'context' in data\n ? (data as { context?: Record<string, unknown> }).context?.[key]\n : undefined;\n const fromData =\n data && typeof data === 'object' && key in data\n ? (data as Record<string, unknown>)[key]\n : undefined;\n\n return (\n readDocumentId(input[key]) ??\n readDocumentId(input.options?.[key]) ??\n readDocumentId(fromData) ??\n readDocumentId(fromPayloadContext) ??\n readDocumentId(fromDataContext)\n );\n}\n\nfunction toExplorerNode(document: AXMDocumentDto): AXMDocumentExplorerNode {\n const rawFileInfo = document.fileInfo;\n const fileListItem =\n rawFileInfo != null && typeof rawFileInfo === 'object' ? (rawFileInfo as AXPFileListItem) : undefined;\n const storedFileRef = typeof rawFileInfo === 'string' ? rawFileInfo : undefined;\n\n return {\n id: document.id!,\n name: document.name,\n title: document.title,\n type: 'file',\n parentId: document.parentId ?? null,\n size: fileListItem?.size ?? 0,\n fileId: fileListItem ?? storedFileRef,\n storageType: 'physical',\n metaDataForm: document.metaDataForm ?? undefined,\n documentTypes: document.documentType ? [document.documentType] : [],\n expirationDate: document.expirationDate ? new Date(document.expirationDate) : undefined,\n };\n}\n\n//#endregion\n\n//#region ----- Open file command -----\n\n/**\n * Opens a document the same way Drive context menu open does\n * (catalog open handler, otherwise download). Folder review View lists\n * files for the assigned reviewer instead of navigating to Drive.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMOpenDocumentCommand implements AXPCommand<AXMOpenDocumentCommandInput> {\n //#region ----- Services & Dependencies -----\n\n private readonly documentManager = inject(AXMDocumentManagerService);\n private readonly documentApi = inject(AXPDocumentManagementService);\n private readonly entityService = inject(AXPEntityService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto>();\n\n //#endregion\n\n //#region ----- Execute -----\n\n async execute(input: AXMOpenDocumentCommandInput = {}): AXPCommandExecuteResultPromise {\n // Drive already has the explorer node — reuse it (no refetch).\n if (isExplorerFileNode(input.data)) {\n await this.documentManager.openFile(input.data);\n return { success: true, kind: 'object', data: { documentId: input.data.id } };\n }\n\n const folderId = readContextId(input, 'folderId');\n if (folderId) {\n return this.openFolder(folderId, readContextId(input, 'taskId'));\n }\n\n const documentId = readContextId(input, 'documentId');\n if (!documentId) {\n return {\n success: false,\n message: { text: '@document-management:distribute.errors.document-required' },\n };\n }\n\n const document = await this.documentData.byKey(documentId);\n if (!document?.id) {\n return {\n success: false,\n message: { text: '@document-management:distribute.errors.document-not-found' },\n };\n }\n\n await this.documentManager.openFile(toExplorerNode(document));\n return { success: true, kind: 'object', data: { documentId } };\n }\n\n //#endregion\n\n //#region ----- Folder review -----\n\n private async openFolder(folderId: string, taskId?: string): AXPCommandExecuteResultPromise {\n let documents: AXMDocumentDto[];\n try {\n documents = await this.documentApi.listFolderReviewDocuments(folderId, taskId);\n } catch (error) {\n const info = extractRequestErrorInfo(error);\n const messageKey =\n info?.status === 403\n ? `${I18N}.errors.folder-view-forbidden`\n : `${I18N}.errors.failed`;\n await this.toastError(messageKey);\n return { success: false, message: { text: messageKey } };\n }\n\n if (documents.length === 0) {\n await this.toastWarning(`${I18N}.folder-view.empty`);\n return { success: true, kind: 'object', data: { folderId, empty: true } };\n }\n\n if (documents.length > 1) {\n await this.toastInfo(`${I18N}.folder-view.opening-all`, { count: documents.length });\n }\n\n const openedIds: string[] = [];\n for (const document of documents) {\n if (!document.id) {\n continue;\n }\n await this.documentManager.openFile(toExplorerNode(document));\n openedIds.push(document.id);\n }\n return { success: true, kind: 'object', data: { folderId, documentIds: openedIds } };\n }\n\n //#endregion\n\n //#region ----- Toasts -----\n\n private async toastError(contentKey: string): Promise<void> {\n const [title, content] = await Promise.all([\n this.translationService.translateAsync(`${I18N}.errors.title`),\n this.translationService.translateAsync(contentKey),\n ]);\n this.toastService.show({ color: 'danger', title, content, timeOut: 4000 });\n }\n\n private async toastWarning(contentKey: string): Promise<void> {\n const [title, content] = await Promise.all([\n this.translationService.translateAsync(`${I18N}.folder-view.title`),\n this.translationService.translateAsync(contentKey),\n ]);\n this.toastService.show({ color: 'warning', title, content, timeOut: 4000 });\n }\n\n private async toastInfo(contentKey: string, params?: Record<string, string | number>): Promise<void> {\n const [title, content] = await Promise.all([\n this.translationService.translateAsync(`${I18N}.folder-view.title`),\n this.translationService.translateAsync(contentKey, { params }),\n ]);\n this.toastService.show({ color: 'primary', title, content, timeOut: 4000 });\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}