@acorex-platform/module-document-management-client 0.0.57 → 0.0.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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-DHVvb5hG.mjs} +445 -143
- package/fesm2022/acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-DHVvb5hG.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-document-management-client-attachment-view-skeleton.component-BeQSbax5.mjs → acorex-platform-module-document-management-client-attachment-view-skeleton.component-DD0Lceid.mjs} +2 -2
- 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-DD0Lceid.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-attachment-widget.component-CsrcMMC9.mjs → acorex-platform-module-document-management-client-attachment-widget.component-YAoJdiMV.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-document-management-client-attachment-widget.component-CsrcMMC9.mjs.map → acorex-platform-module-document-management-client-attachment-widget.component-YAoJdiMV.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-document-management-client-contracts.mjs +161 -1
- package/fesm2022/acorex-platform-module-document-management-client-contracts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-details-view.component-DkCD8RSd.mjs → acorex-platform-module-document-management-client-details-view.component-DVrr-Jcx.mjs} +111 -37
- package/fesm2022/acorex-platform-module-document-management-client-details-view.component-DVrr-Jcx.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-document-management-client-distribute-document.command-BaCdm2YF.mjs → acorex-platform-module-document-management-client-distribute-document.command-dTEExoVn.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-document-management-client-distribute-document.command-BaCdm2YF.mjs.map → acorex-platform-module-document-management-client-distribute-document.command-dTEExoVn.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-drive-choose.component-up9sAsei.mjs → acorex-platform-module-document-management-client-drive-choose.component-B-CVJk4t.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-document-management-client-drive-choose.component-up9sAsei.mjs.map → acorex-platform-module-document-management-client-drive-choose.component-B-CVJk4t.mjs.map} +1 -1
- 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-DLW69Mgy.mjs} +2 -2
- 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-DLW69Mgy.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-large-icons-view.component-Cece4n22.mjs → acorex-platform-module-document-management-client-large-icons-view.component-CSgo6Q03.mjs} +2 -2
- 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-CSgo6Q03.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-large-tiles-view.component-DzWIUZtv.mjs → acorex-platform-module-document-management-client-large-tiles-view.component-CzlMERYd.mjs} +2 -2
- 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-CzlMERYd.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-list-view-skeleton.component-Dgx8lVyN.mjs → acorex-platform-module-document-management-client-list-view-skeleton.component-DgFCBi89.mjs} +2 -2
- 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-DgFCBi89.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-list-view.component-DVUfHWHB.mjs → acorex-platform-module-document-management-client-list-view.component-bgDPFpLU.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-document-management-client-list-view.component-DVUfHWHB.mjs.map → acorex-platform-module-document-management-client-list-view.component-bgDPFpLU.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-open-document.command-Bimm2bzt.mjs → acorex-platform-module-document-management-client-open-document.command-CObrpooD.mjs} +83 -20
- package/fesm2022/acorex-platform-module-document-management-client-open-document.command-CObrpooD.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-document-management-client-request-document-review.command-DNq2mYIx.mjs +456 -0
- package/fesm2022/acorex-platform-module-document-management-client-request-document-review.command-DNq2mYIx.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-document-management-client-sign-document-review.command-B08sgrRi.mjs +121 -0
- package/fesm2022/acorex-platform-module-document-management-client-sign-document-review.command-B08sgrRi.mjs.map +1 -0
- 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-CiYITmkk.mjs} +2 -2
- 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-CiYITmkk.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-small-icons-view.component-CL5cNRtI.mjs → acorex-platform-module-document-management-client-small-icons-view.component-ILdKPBoz.mjs} +2 -2
- 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-ILdKPBoz.mjs.map} +1 -1
- 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-DKOxhUoZ.mjs} +2 -2
- 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-DKOxhUoZ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-small-tiles-view.component-DtsBSVCq.mjs → acorex-platform-module-document-management-client-small-tiles-view.component-yv_uqUPM.mjs} +2 -2
- 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-yv_uqUPM.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-document-management-client-upload-document.command-D3L6x6CQ.mjs → acorex-platform-module-document-management-client-upload-document.command-CrtRTjke.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-document-management-client-upload-document.command-D3L6x6CQ.mjs.map → acorex-platform-module-document-management-client-upload-document.command-CrtRTjke.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-document-management-client.mjs +1 -1
- package/i18n/en-AU/document-management.json +63 -2
- package/i18n/en-US/document-management.json +63 -2
- package/i18n/fa-IR/document-management.json +63 -2
- package/package.json +2 -2
- package/types/acorex-platform-module-document-management-client-contracts.d.ts +34 -2
- package/types/acorex-platform-module-document-management-client.d.ts +10 -1
- package/fesm2022/acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-qhcOFKFu.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-document-management-client-details-view.component-DkCD8RSd.mjs.map +0 -1
- 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-
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-document-management-client-list-view.component-bgDPFpLU.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
|
|
2
|
-
import {
|
|
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
|
|
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-DHVvb5hG.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
|
|
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?.
|
|
35
|
+
? data.payload?.context?.[key]
|
|
30
36
|
: undefined;
|
|
31
37
|
const fromDataContext = data && typeof data === 'object' && 'context' in data
|
|
32
|
-
? data.context?.
|
|
38
|
+
? data.context?.[key]
|
|
33
39
|
: undefined;
|
|
34
|
-
const
|
|
35
|
-
? data
|
|
40
|
+
const fromData = data && typeof data === 'object' && key in data
|
|
41
|
+
? data[key]
|
|
36
42
|
: undefined;
|
|
37
|
-
return (readDocumentId(input
|
|
38
|
-
readDocumentId(input.options?.
|
|
39
|
-
readDocumentId(
|
|
43
|
+
return (readDocumentId(input[key]) ??
|
|
44
|
+
readDocumentId(input.options?.[key]) ??
|
|
45
|
+
readDocumentId(fromData) ??
|
|
40
46
|
readDocumentId(fromPayloadContext) ??
|
|
41
47
|
readDocumentId(fromDataContext));
|
|
42
48
|
}
|
|
@@ -61,14 +67,18 @@ function toExplorerNode(document) {
|
|
|
61
67
|
//#endregion
|
|
62
68
|
//#region ----- Open file command -----
|
|
63
69
|
/**
|
|
64
|
-
*
|
|
65
|
-
* (
|
|
70
|
+
* Drive Open keeps the catalog/download pipeline when an explorer node is
|
|
71
|
+
* passed. Document Review View (documentId/folderId) opens File Viewer, the
|
|
72
|
+
* same popup as Drive "Open File Viewer".
|
|
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();
|
|
@@ -76,27 +86,80 @@ class AXMOpenDocumentCommand {
|
|
|
76
86
|
//#endregion
|
|
77
87
|
//#region ----- Execute -----
|
|
78
88
|
async execute(input = {}) {
|
|
79
|
-
// Drive already has the explorer node — reuse it (no refetch).
|
|
80
89
|
if (isExplorerFileNode(input.data)) {
|
|
81
90
|
await this.documentManager.openFile(input.data);
|
|
82
91
|
return { success: true, kind: 'object', data: { documentId: input.data.id } };
|
|
83
92
|
}
|
|
84
|
-
const
|
|
93
|
+
const folderId = readContextId(input, 'folderId');
|
|
94
|
+
if (folderId) {
|
|
95
|
+
return this.openFolderInViewer(folderId, readContextId(input, 'taskId'));
|
|
96
|
+
}
|
|
97
|
+
const documentId = readContextId(input, 'documentId');
|
|
85
98
|
if (!documentId) {
|
|
86
99
|
return {
|
|
87
100
|
success: false,
|
|
88
101
|
message: { text: '@document-management:distribute.errors.document-required' },
|
|
89
102
|
};
|
|
90
103
|
}
|
|
91
|
-
const
|
|
92
|
-
if (!
|
|
104
|
+
const node = await this.loadDocumentNode(documentId);
|
|
105
|
+
if (!node) {
|
|
93
106
|
return {
|
|
94
107
|
success: false,
|
|
95
108
|
message: { text: '@document-management:distribute.errors.document-not-found' },
|
|
96
109
|
};
|
|
97
110
|
}
|
|
98
|
-
await this.documentManager.
|
|
99
|
-
return { success: true, kind: 'object', data: { documentId } };
|
|
111
|
+
await this.documentManager.showFileViewerPopup(node, { folderFiles: [node] });
|
|
112
|
+
return { success: true, kind: 'object', data: { documentId: node.id } };
|
|
113
|
+
}
|
|
114
|
+
//#endregion
|
|
115
|
+
//#region ----- Folder review -----
|
|
116
|
+
async loadDocumentNode(documentId) {
|
|
117
|
+
const document = await this.documentData.byKey(documentId);
|
|
118
|
+
if (!document?.id) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
return toExplorerNode(document);
|
|
122
|
+
}
|
|
123
|
+
async openFolderInViewer(folderId, taskId) {
|
|
124
|
+
let documents;
|
|
125
|
+
try {
|
|
126
|
+
documents = await this.documentApi.listFolderReviewDocuments(folderId, taskId);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
const info = extractRequestErrorInfo(error);
|
|
130
|
+
const messageKey = info?.status === 403
|
|
131
|
+
? `${I18N}.errors.folder-view-forbidden`
|
|
132
|
+
: `${I18N}.errors.failed`;
|
|
133
|
+
await this.toastError(messageKey);
|
|
134
|
+
return { success: false, message: { text: messageKey } };
|
|
135
|
+
}
|
|
136
|
+
const folderFiles = documents.filter((document) => document.id).map((document) => toExplorerNode(document));
|
|
137
|
+
if (folderFiles.length === 0) {
|
|
138
|
+
await this.toastWarning(`${I18N}.folder-view.empty`);
|
|
139
|
+
return { success: true, kind: 'object', data: { folderId, empty: true } };
|
|
140
|
+
}
|
|
141
|
+
await this.documentManager.showFileViewerPopup(folderFiles[0], { folderFiles });
|
|
142
|
+
return {
|
|
143
|
+
success: true,
|
|
144
|
+
kind: 'object',
|
|
145
|
+
data: { folderId, documentIds: folderFiles.map((file) => file.id) },
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
//#endregion
|
|
149
|
+
//#region ----- Toasts -----
|
|
150
|
+
async toastError(contentKey) {
|
|
151
|
+
const [title, content] = await Promise.all([
|
|
152
|
+
this.translationService.translateAsync(`${I18N}.errors.title`),
|
|
153
|
+
this.translationService.translateAsync(contentKey),
|
|
154
|
+
]);
|
|
155
|
+
this.toastService.show({ color: 'danger', title, content, timeOut: 4000 });
|
|
156
|
+
}
|
|
157
|
+
async toastWarning(contentKey) {
|
|
158
|
+
const [title, content] = await Promise.all([
|
|
159
|
+
this.translationService.translateAsync(`${I18N}.folder-view.title`),
|
|
160
|
+
this.translationService.translateAsync(contentKey),
|
|
161
|
+
]);
|
|
162
|
+
this.toastService.show({ color: 'warning', title, content, timeOut: 4000 });
|
|
100
163
|
}
|
|
101
164
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOpenDocumentCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
102
165
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOpenDocumentCommand, providedIn: 'root' }); }
|
|
@@ -107,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
107
170
|
}] });
|
|
108
171
|
|
|
109
172
|
export { AXMOpenDocumentCommand };
|
|
110
|
-
//# sourceMappingURL=acorex-platform-module-document-management-client-open-document.command-
|
|
173
|
+
//# sourceMappingURL=acorex-platform-module-document-management-client-open-document.command-CObrpooD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-document-management-client-open-document.command-CObrpooD.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 * Drive Open keeps the catalog/download pipeline when an explorer node is\n * passed. Document Review View (documentId/folderId) opens File Viewer, the\n * same popup as Drive \"Open File Viewer\".\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 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.openFolderInViewer(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 node = await this.loadDocumentNode(documentId);\n if (!node) {\n return {\n success: false,\n message: { text: '@document-management:distribute.errors.document-not-found' },\n };\n }\n\n await this.documentManager.showFileViewerPopup(node, { folderFiles: [node] });\n return { success: true, kind: 'object', data: { documentId: node.id } };\n }\n\n //#endregion\n\n //#region ----- Folder review -----\n\n private async loadDocumentNode(documentId: string): Promise<AXMDocumentExplorerNode | null> {\n const document = await this.documentData.byKey(documentId);\n if (!document?.id) {\n return null;\n }\n return toExplorerNode(document);\n }\n\n private async openFolderInViewer(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 const folderFiles = documents.filter((document) => document.id).map((document) => toExplorerNode(document));\n if (folderFiles.length === 0) {\n await this.toastWarning(`${I18N}.folder-view.empty`);\n return { success: true, kind: 'object', data: { folderId, empty: true } };\n }\n\n await this.documentManager.showFileViewerPopup(folderFiles[0], { folderFiles });\n return {\n success: true,\n kind: 'object',\n data: { folderId, documentIds: folderFiles.map((file) => file.id) },\n };\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 //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|