@acorex/modules 21.0.0-next.10 → 21.0.0-next.11

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 (55) hide show
  1. package/asset-management/index.d.ts +53 -62
  2. package/document-management/index.d.ts +24 -134
  3. package/fesm2022/{acorex-modules-asset-management-asset.entity-B9ckElN7.mjs → acorex-modules-asset-management-asset.entity-C57iN3Bo.mjs} +22 -22
  4. package/fesm2022/acorex-modules-asset-management-asset.entity-C57iN3Bo.mjs.map +1 -0
  5. package/fesm2022/{acorex-modules-asset-management-inspection.entity-CkNt44Ee.mjs → acorex-modules-asset-management-inspection.entity-CpDuN-qj.mjs} +3 -13
  6. package/fesm2022/acorex-modules-asset-management-inspection.entity-CpDuN-qj.mjs.map +1 -0
  7. package/fesm2022/{acorex-modules-asset-management-maintenance-type.entity-V9ErcTNL.mjs → acorex-modules-asset-management-maintenance-type.entity-T3iF8l5n.mjs} +3 -13
  8. package/fesm2022/acorex-modules-asset-management-maintenance-type.entity-T3iF8l5n.mjs.map +1 -0
  9. package/fesm2022/{acorex-modules-asset-management-maintenance.entity-Ctt12a9H.mjs → acorex-modules-asset-management-maintenance.entity-Cxzcn0Ae.mjs} +3 -13
  10. package/fesm2022/acorex-modules-asset-management-maintenance.entity-Cxzcn0Ae.mjs.map +1 -0
  11. package/fesm2022/acorex-modules-asset-management.mjs +620 -1
  12. package/fesm2022/acorex-modules-asset-management.mjs.map +1 -1
  13. package/fesm2022/acorex-modules-content-management.mjs +7 -6
  14. package/fesm2022/acorex-modules-content-management.mjs.map +1 -1
  15. package/fesm2022/acorex-modules-document-management.mjs +483 -2002
  16. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  17. package/fesm2022/acorex-modules-human-capital-management.mjs +4 -0
  18. package/fesm2022/acorex-modules-human-capital-management.mjs.map +1 -1
  19. package/fesm2022/acorex-modules-meeting-management.mjs +489 -212
  20. package/fesm2022/acorex-modules-meeting-management.mjs.map +1 -1
  21. package/fesm2022/{acorex-modules-order-management-bulk-buy-order-item.entity-CS8G9l7a.mjs → acorex-modules-order-management-bulk-buy-order-item.entity-Cqsc1tku.mjs} +39 -29
  22. package/fesm2022/acorex-modules-order-management-bulk-buy-order-item.entity-Cqsc1tku.mjs.map +1 -0
  23. package/fesm2022/{acorex-modules-order-management-bulk-buy-order.entity-BAagygjM.mjs → acorex-modules-order-management-bulk-buy-order.entity-BMvkJRpA.mjs} +30 -12
  24. package/fesm2022/acorex-modules-order-management-bulk-buy-order.entity-BMvkJRpA.mjs.map +1 -0
  25. package/fesm2022/{acorex-modules-order-management-entity.provider-BXeXMpey.mjs → acorex-modules-order-management-entity.provider-CUq01hQo.mjs} +3 -3
  26. package/fesm2022/{acorex-modules-order-management-entity.provider-BXeXMpey.mjs.map → acorex-modules-order-management-entity.provider-CUq01hQo.mjs.map} +1 -1
  27. package/fesm2022/acorex-modules-order-management.mjs +2 -2
  28. package/fesm2022/{acorex-modules-person-management-person.entity-T3pPeC5H.mjs → acorex-modules-person-management-person.entity-BtaGNj8n.mjs} +12 -56
  29. package/fesm2022/acorex-modules-person-management-person.entity-BtaGNj8n.mjs.map +1 -0
  30. package/fesm2022/acorex-modules-person-management.mjs +1 -1
  31. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  32. package/fesm2022/{acorex-modules-reservation-management-acorex-modules-reservation-management-DgIxX2nQ.mjs → acorex-modules-reservation-management-acorex-modules-reservation-management-C7jb3vLV.mjs} +5 -2
  33. package/fesm2022/acorex-modules-reservation-management-acorex-modules-reservation-management-C7jb3vLV.mjs.map +1 -0
  34. package/fesm2022/{acorex-modules-reservation-management-event-type.entity-Ddr2JufJ.mjs → acorex-modules-reservation-management-event-type.entity-Dj6e-Iay.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-reservation-management-event-type.entity-Ddr2JufJ.mjs.map → acorex-modules-reservation-management-event-type.entity-Dj6e-Iay.mjs.map} +1 -1
  36. package/fesm2022/acorex-modules-reservation-management.mjs +1 -1
  37. package/fesm2022/acorex-modules-task-management.mjs +39 -16
  38. package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
  39. package/fesm2022/acorex-modules-workflow-management.mjs +0 -2
  40. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  41. package/meeting-management/index.d.ts +29 -6
  42. package/package.json +2 -2
  43. package/report-management/index.d.ts +2 -2
  44. package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-CZchW21Z.mjs +0 -752
  45. package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-CZchW21Z.mjs.map +0 -1
  46. package/fesm2022/acorex-modules-asset-management-asset.entity-B9ckElN7.mjs.map +0 -1
  47. package/fesm2022/acorex-modules-asset-management-inspection.entity-CkNt44Ee.mjs.map +0 -1
  48. package/fesm2022/acorex-modules-asset-management-maintenance-type.entity-V9ErcTNL.mjs.map +0 -1
  49. package/fesm2022/acorex-modules-asset-management-maintenance.entity-Ctt12a9H.mjs.map +0 -1
  50. package/fesm2022/acorex-modules-document-management-document-signature-popup.component-Stt6Gx2C.mjs +0 -145
  51. package/fesm2022/acorex-modules-document-management-document-signature-popup.component-Stt6Gx2C.mjs.map +0 -1
  52. package/fesm2022/acorex-modules-order-management-bulk-buy-order-item.entity-CS8G9l7a.mjs.map +0 -1
  53. package/fesm2022/acorex-modules-order-management-bulk-buy-order.entity-BAagygjM.mjs.map +0 -1
  54. package/fesm2022/acorex-modules-person-management-person.entity-T3pPeC5H.mjs.map +0 -1
  55. package/fesm2022/acorex-modules-reservation-management-acorex-modules-reservation-management-DgIxX2nQ.mjs.map +0 -1
@@ -3,11 +3,11 @@ import { AXPEntityService, AXMEntityCrudServiceImpl, entityMasterCrudActions, en
3
3
  import { AXPPlatformScope, AXPDataGenerator, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXPDeviceService, resolvePlatformScopeKey, resolvePlatformScopeName } from '@acorex/platform/core';
4
4
  import { AXPSearchCommandProvider, createAllQueryView, createQueryView, AXPEntityCommandScope, AXPEntityQueryType, AXPFileTypeProviderService, AXP_FILE_TYPE_INFO_PROVIDER, AXPFileStorageService, AXPFilterOperatorMiddlewareService, AXPSettingsService, AXPLockService, AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex/platform/common';
5
5
  import * as i0 from '@angular/core';
6
- import { Injectable, inject, Injector, NgModule, ChangeDetectionStrategy, Component, signal, viewChild, afterNextRender, computed, input, effect, ViewEncapsulation, untracked, HostListener } from '@angular/core';
6
+ import { Injectable, inject, Injector, NgModule, ChangeDetectionStrategy, Component, signal, viewChild, computed, input, effect, ViewEncapsulation, untracked, HostListener } from '@angular/core';
7
7
  import * as i3$3 from '@acorex/core/translation';
8
8
  import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
9
9
  import { firstValueFrom } from 'rxjs';
10
- import * as i1$2 from '@acorex/platform/layout/widget-core';
10
+ import * as i6 from '@acorex/platform/layout/widget-core';
11
11
  import { AXPWidgetsCatalog, AXPValueWidgetComponent, AXPWidgetCoreModule, AXP_WIDGETS_ADVANCE_CATEGORY } from '@acorex/platform/layout/widget-core';
12
12
  import { RouterModule, ROUTES, Router, ActivatedRoute } from '@angular/router';
13
13
  import { set, castArray, get as get$1 } from 'lodash-es';
@@ -29,8 +29,7 @@ import set$1 from 'lodash-es/set';
29
29
  import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY } from '@acorex/platform/layout/widgets';
30
30
  import * as i3$1 from '@acorex/components/media-viewer';
31
31
  import { AXMediaViewerContainerComponent, AXMediaViewerModule } from '@acorex/components/media-viewer';
32
- import { AXPStateMessageComponent, AXP_TASK_BADGE_PROVIDERS, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
33
- import * as i1$3 from '@acorex/components/button';
32
+ import * as i1$2 from '@acorex/components/button';
34
33
  import { AXButtonModule } from '@acorex/components/button';
35
34
  import { AXBasePageComponent } from '@acorex/components/page';
36
35
  import { AXLoadingModule } from '@acorex/components/loading';
@@ -39,8 +38,9 @@ import { AXMenuModule } from '@acorex/components/menu';
39
38
  import { AXDateTimeModule } from '@acorex/core/date-time';
40
39
  import * as i2$2 from '@acorex/core/format';
41
40
  import { AXFormatModule } from '@acorex/core/format';
41
+ import { AXPStateMessageComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
42
42
  import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
43
- import * as i1$4 from '@angular/common';
43
+ import * as i1$3 from '@angular/common';
44
44
  import { CommonModule } from '@angular/common';
45
45
  import { AXDialogService } from '@acorex/components/dialog';
46
46
  import { AXPopupService } from '@acorex/components/popup';
@@ -78,18 +78,6 @@ const RootConfig = {
78
78
  titlePlural: `@${config.i18n}:entities.document.title-plural`,
79
79
  icon: 'fa-light fa-default',
80
80
  },
81
- distributionInteraction: {
82
- name: 'DistributionInteraction',
83
- title: `@${config.i18n}:entities.distribution-interaction.title`,
84
- titlePlural: `@${config.i18n}:entities.distribution-interaction.title-plural`,
85
- icon: 'fa-light fa-default',
86
- },
87
- distribution: {
88
- name: 'Distribution',
89
- title: `@${config.i18n}:entities.distribution.title`,
90
- titlePlural: `@${config.i18n}:entities.distribution.title-plural`,
91
- icon: 'fa-light fa-default',
92
- },
93
81
  review: {
94
82
  name: 'Review',
95
83
  title: `@${config.i18n}:entities.review.title`,
@@ -213,20 +201,6 @@ const AXMPermissionsKeys = {
213
201
  Delete: 'DocumentManagement:Permission:Review.Delete',
214
202
  Create: 'DocumentManagement:Permission:Review.Create',
215
203
  },
216
- Distribution: {
217
- Management: 'DocumentManagement:Permission:Distribution.Management',
218
- View: 'DocumentManagement:Permission:Distribution.View',
219
- Edit: 'DocumentManagement:Permission:Distribution.Edit',
220
- Delete: 'DocumentManagement:Permission:Distribution.Delete',
221
- Create: 'DocumentManagement:Permission:Distribution.Create',
222
- },
223
- DistributionInteraction: {
224
- Management: 'DocumentManagement:Permission:DistributionInteraction.Management',
225
- View: 'DocumentManagement:Permission:DistributionInteraction.View',
226
- Edit: 'DocumentManagement:Permission:DistributionInteraction.Edit',
227
- Delete: 'DocumentManagement:Permission:DistributionInteraction.Delete',
228
- Create: 'DocumentManagement:Permission:DistributionInteraction.Create',
229
- },
230
204
  },
231
205
  };
232
206
 
@@ -274,8 +248,6 @@ const AXPDocumentManagementMenuKeys = {
274
248
  DocumentTypes: 'document-management:menu:document-types',
275
249
  TenantDrive: 'document-management:drive:tenant',
276
250
  UserDrive: 'document-management:drive:user',
277
- DocumentReview: 'document-management:menu:document-review',
278
- Distribution: 'document-management:menu:distribution',
279
251
  };
280
252
 
281
253
  class AXMMenuProvider {
@@ -323,27 +295,6 @@ class AXMMenuProvider {
323
295
  },
324
296
  priority: 1,
325
297
  },
326
- {
327
- name: AXPDocumentManagementMenuKeys.DocumentReview,
328
- text: `@${RootConfig.config.i18n}:workflows.document-review.title`,
329
- path: this.entityService.createPath(RootConfig.module.name, RootConfig.entities.document.name),
330
- icon: RootConfig.entities.review.icon,
331
- policy: {
332
- permissions: [AXMPermissionsKeys.DocumentManagement.Review.Management]
333
- },
334
- badgeKey: 'review-badge',
335
- priority: 4,
336
- },
337
- {
338
- name: AXPDocumentManagementMenuKeys.Distribution,
339
- text: RootConfig.entities.distribution.title,
340
- path: this.entityService.createPath(RootConfig.module.name, RootConfig.entities.distribution.name),
341
- icon: RootConfig.entities.review.icon,
342
- policy: {
343
- permissions: [AXMPermissionsKeys.DocumentManagement.Distribution.Management]
344
- },
345
- priority: 4,
346
- },
347
298
  ],
348
299
  },
349
300
  ]);
@@ -392,10 +343,6 @@ class AXMEntityProvider {
392
343
  return (await Promise.resolve().then(function () { return index; })).folderFactory(this.injector);
393
344
  case RootConfig.entities.review.name:
394
345
  return (await Promise.resolve().then(function () { return index; })).reviewFactory(this.injector);
395
- case RootConfig.entities.distribution.name:
396
- return (await Promise.resolve().then(function () { return index; })).distributionFactory(this.injector);
397
- case RootConfig.entities.distributionInteraction.name:
398
- return (await Promise.resolve().then(function () { return index; })).distributionInteractionFactory(this.injector);
399
346
  case RootConfig.entities.documentRelated.name:
400
347
  return (await Promise.resolve().then(function () { return index; })).documentRelatedFactory(this.injector);
401
348
  }
@@ -603,89 +550,11 @@ async function documentFactory(injector) {
603
550
  },
604
551
  },
605
552
  },
606
- {
607
- name: 'documentReview',
608
- title: `@${i18n}:workflows.document-review.title`,
609
- schema: {
610
- dataType: 'string',
611
- readonly: true,
612
- interface: {
613
- type: AXPWidgetsCatalog.text,
614
- options: {
615
- content: `{{ context.eval('documentReview') }}`,
616
- },
617
- },
618
- },
619
- },
620
- {
621
- name: 'documentReviewReviewer',
622
- title: `@${i18n}:workflows.document-review.title`,
623
- schema: {
624
- dataType: 'string',
625
- readonly: true,
626
- interface: {
627
- type: AXPWidgetsCatalog.text,
628
- options: {
629
- content: `{{ context.eval('documentReviewReviewer') }}`,
630
- },
631
- },
632
- },
633
- },
634
- {
635
- name: 'documentReviewComment',
636
- title: `@${i18n}:workflows.document-review.title`,
637
- schema: {
638
- dataType: 'string',
639
- readonly: true,
640
- interface: {
641
- type: AXPWidgetsCatalog.richText,
642
- options: {
643
- content: `{{ context.eval('documentReviewComment') }}`,
644
- },
645
- },
646
- },
647
- },
648
- {
649
- name: 'documentReviewStatus',
650
- title: `@${i18n}:workflows.document-review.title`,
651
- schema: {
652
- defaultValue: '{{context.eval("documentReview.reviewStatus") == "Approve"}}',
653
- dataType: 'string',
654
- readonly: true,
655
- interface: {
656
- type: AXPWidgetsCatalog.toggle,
657
- options: {
658
- content: `{{ context.eval('documentReviewComment') }}`,
659
- },
660
- },
661
- },
662
- },
663
553
  ],
664
554
  columns: [
665
555
  { name: 'name' },
666
556
  { name: 'status' },
667
557
  { name: 'version' },
668
- {
669
- name: 'documentReviewReviewer',
670
- title: `@${i18n}:terms.common.reviewer`,
671
- options: {
672
- dataPath: 'documentReview.reviewer.title',
673
- },
674
- },
675
- {
676
- name: 'documentReviewComment',
677
- title: `@${i18n}:terms.common.comment`,
678
- options: {
679
- dataPath: 'documentReview.comment',
680
- },
681
- },
682
- {
683
- name: 'documentReviewStatus',
684
- title: `@${i18n}:terms.workflow.approve`,
685
- options: {
686
- dataPath: 'documentReview.reviewStatus',
687
- },
688
- },
689
558
  ],
690
559
  queries: {
691
560
  byKey: {
@@ -883,55 +752,7 @@ async function documentFactory(injector) {
883
752
  },
884
753
  },
885
754
  ],
886
- actions: [
887
- {
888
- title: `@${i18n}:workflows.document-review.send-review.title`,
889
- command: {
890
- name: 'send-to-review',
891
- options: {
892
- id: '{{context.eval("id")}}',
893
- title: '{{context.eval("title")}}',
894
- },
895
- },
896
- priority: 'primary',
897
- type: 'sent',
898
- scope: AXPEntityCommandScope.TypeLevel,
899
- disabled: '{{context.eval("status") != "Draft"}}',
900
- },
901
- {
902
- title: `@${i18n}:workflows.document-review.submit-review.title`,
903
- command: {
904
- name: 'submit-review',
905
- options: {
906
- id: '{{context.eval("reviewRecordId")}}',
907
- // reviewedAt : '{{ variables.execute("now") }}',
908
- decoration: {
909
- header: {
910
- title: '{{ context.eval("title") + " - version: " + context.eval("version") }}',
911
- },
912
- },
913
- },
914
- },
915
- priority: 'primary',
916
- type: 'review',
917
- scope: AXPEntityCommandScope.TypeLevel,
918
- disabled: '{{context.eval("status") != "PendingReview"}}',
919
- },
920
- {
921
- title: `@${i18n}:terms.workflow.distributed`,
922
- command: {
923
- name: 'distributed',
924
- options: {
925
- id: '{{context.eval("id")}}',
926
- title: '{{context.eval("title")}}',
927
- },
928
- },
929
- priority: 'primary',
930
- type: 'review',
931
- scope: AXPEntityCommandScope.TypeLevel,
932
- disabled: '{{context.eval("status") != "Reviewed" && context.eval("status") != "Completed"}}',
933
- },
934
- ],
755
+ actions: [],
935
756
  },
936
757
  list: {
937
758
  actions: [
@@ -943,56 +764,6 @@ async function documentFactory(injector) {
943
764
  default: true,
944
765
  scope: AXPEntityCommandScope.Individual,
945
766
  },
946
- {
947
- title: `@${i18n}:workflows.document-review.send-review.title`,
948
- icon: 'fa-light fa-shield-check',
949
- command: {
950
- name: 'send-to-review',
951
- options: {
952
- id: '{{context.eval("id")}}',
953
- title: '{{context.eval("title")}}',
954
- },
955
- },
956
- priority: 'secondary',
957
- type: 'sent',
958
- scope: AXPEntityCommandScope.Individual,
959
- disabled: '{{context.eval("status") != "Draft"}}',
960
- },
961
- {
962
- title: `@${i18n}:workflows.document-review.submit-review.title`,
963
- icon: 'fa-light fa-ballot-check',
964
- command: {
965
- name: 'submit-review',
966
- options: {
967
- id: '{{context.eval("reviewRecordId")}}',
968
- // reviewedAt : '{{ variables.execute("now") }}',
969
- decoration: {
970
- header: {
971
- title: '{{ context.eval("title") + " - version: " + context.eval("version") }}',
972
- },
973
- },
974
- },
975
- },
976
- priority: 'secondary',
977
- type: 'review',
978
- scope: AXPEntityCommandScope.Individual,
979
- disabled: '{{context.eval("status") != "PendingReview"}}',
980
- },
981
- {
982
- title: `@${i18n}:terms.workflow.distributed`,
983
- icon: 'fa-light fa-chart-network',
984
- command: {
985
- name: 'distributed',
986
- options: {
987
- id: '{{context.eval("id")}}',
988
- title: '{{context.eval("title")}}',
989
- },
990
- },
991
- priority: 'secondary',
992
- type: 'review',
993
- scope: AXPEntityCommandScope.Individual,
994
- disabled: '{{context.eval("status") != "Reviewed" && context.eval("status") != "Completed"}}',
995
- },
996
767
  ],
997
768
  views: [
998
769
  createAllQueryView({ sorts: [{ name: 'name', dir: 'asc' }] }),
@@ -1063,42 +834,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1063
834
  }] });
1064
835
 
1065
836
  function getNextStatus(options) {
1066
- const { current, requiresReview, requiresDistribution, reviewFirst, reviewResult, allSignaturesCollected } = options;
837
+ const { current, requiresReview, reviewFirst, reviewResult, } = options;
1067
838
  switch (current) {
1068
839
  case 'Draft':
1069
840
  if (requiresReview)
1070
841
  return 'PendingReview';
1071
- if (requiresDistribution)
1072
- return 'Distributed';
1073
842
  return 'Completed';
1074
843
  case 'PendingReview':
1075
844
  if (reviewResult === 'rejected')
1076
845
  return 'Rejected';
1077
846
  if (reviewResult === 'approved') {
1078
- if (requiresDistribution)
1079
- return 'Distributed';
1080
847
  return 'Completed';
1081
848
  }
1082
849
  return null;
1083
850
  case 'Reviewed':
1084
- if (requiresDistribution)
1085
- return 'Distributed';
1086
851
  return 'Completed';
1087
- case 'Distributed':
1088
- if (allSignaturesCollected)
1089
- return 'Completed';
1090
- return 'Distributed';
1091
852
  default:
1092
853
  return null;
1093
854
  }
1094
855
  }
1095
856
  const AXMDocumentWorkflowTransitionMap = {
1096
- Draft: ['PendingReview', 'Distributed', 'Completed'],
857
+ Draft: ['PendingReview', 'Completed'],
1097
858
  PendingReview: ['Reviewed', 'Rejected'],
1098
859
  Rejected: ['PendingReview'], // پس از اصلاح
1099
- Reviewed: ['Distributed', 'Completed'],
860
+ Reviewed: ['Completed', 'Distributed'],
1100
861
  Distributed: ['Completed'],
1101
- Completed: []
862
+ Completed: [],
1102
863
  };
1103
864
  function canTransition(from, to) {
1104
865
  return AXMDocumentWorkflowTransitionMap[from]?.includes(to) ?? false;
@@ -1244,17 +1005,6 @@ async function documentTypeFactory(injector) {
1244
1005
  },
1245
1006
  },
1246
1007
  },
1247
- {
1248
- name: 'requiresDistribution',
1249
- title: `@${i18n}:terms.document.requires-distribution`,
1250
- groupId: 'management',
1251
- schema: {
1252
- dataType: 'boolean',
1253
- interface: {
1254
- type: AXPWidgetsCatalog.toggle,
1255
- },
1256
- },
1257
- },
1258
1008
  {
1259
1009
  name: 'enableVersioning',
1260
1010
  title: `@${i18n}:terms.document.enable-versioning`,
@@ -1372,16 +1122,6 @@ async function documentTypeFactory(injector) {
1372
1122
  },
1373
1123
  },
1374
1124
  },
1375
- {
1376
- name: 'requiresDistribution',
1377
- layout: {
1378
- positions: {
1379
- lg: {
1380
- colSpan: 6,
1381
- },
1382
- },
1383
- },
1384
- },
1385
1125
  {
1386
1126
  name: 'enableVersioning',
1387
1127
  layout: {
@@ -1484,16 +1224,6 @@ async function documentTypeFactory(injector) {
1484
1224
  },
1485
1225
  },
1486
1226
  },
1487
- {
1488
- name: 'requiresDistribution',
1489
- layout: {
1490
- positions: {
1491
- lg: {
1492
- colSpan: 6,
1493
- },
1494
- },
1495
- },
1496
- },
1497
1227
  {
1498
1228
  name: 'enableVersioning',
1499
1229
  layout: {
@@ -1611,16 +1341,6 @@ async function documentTypeFactory(injector) {
1611
1341
  },
1612
1342
  },
1613
1343
  },
1614
- {
1615
- name: 'requiresDistribution',
1616
- layout: {
1617
- positions: {
1618
- lg: {
1619
- colSpan: 6,
1620
- },
1621
- },
1622
- },
1623
- },
1624
1344
  {
1625
1345
  name: 'enableVersioning',
1626
1346
  layout: {
@@ -2562,54 +2282,7 @@ async function documentRelatedFactory(injector) {
2562
2282
  },
2563
2283
  },
2564
2284
  ],
2565
- actions: [
2566
- {
2567
- title: `@${i18n}:workflows.document-review.send-review.title`,
2568
- command: {
2569
- name: 'send-to-review',
2570
- options: {
2571
- id: '{{context.eval("id")}}',
2572
- title: '{{context.eval("title")}}',
2573
- },
2574
- },
2575
- priority: 'primary',
2576
- type: 'sent',
2577
- scope: AXPEntityCommandScope.TypeLevel,
2578
- disabled: '{{context.eval("status") != "Draft"}}',
2579
- },
2580
- {
2581
- title: `@${i18n}:workflows.document-review.submit-review.title`,
2582
- command: {
2583
- name: 'submit-review',
2584
- options: {
2585
- id: '{{context.eval("reviewRecordId")}}',
2586
- decoration: {
2587
- header: {
2588
- title: '{{ context.eval("title") }}',
2589
- },
2590
- },
2591
- },
2592
- },
2593
- priority: 'primary',
2594
- type: 'review',
2595
- scope: AXPEntityCommandScope.TypeLevel,
2596
- disabled: '{{context.eval("status") != "PendingReview"}}',
2597
- },
2598
- {
2599
- title: `@${i18n}:terms.workflow.distributed`,
2600
- command: {
2601
- name: 'distributed',
2602
- options: {
2603
- id: '{{context.eval("id")}}',
2604
- title: '{{context.eval("title")}}',
2605
- },
2606
- },
2607
- priority: 'primary',
2608
- type: 'review',
2609
- scope: AXPEntityCommandScope.TypeLevel,
2610
- disabled: '{{context.eval("status") != "Reviewed" && context.eval("status") != "Completed"}}',
2611
- },
2612
- ],
2285
+ actions: [],
2613
2286
  },
2614
2287
  list: {
2615
2288
  actions: [
@@ -2621,56 +2294,6 @@ async function documentRelatedFactory(injector) {
2621
2294
  default: true,
2622
2295
  scope: AXPEntityCommandScope.Individual,
2623
2296
  },
2624
- {
2625
- title: `@${i18n}:workflows.document-review.send-review.title`,
2626
- icon: 'fa-light fa-shield-check',
2627
- command: {
2628
- name: 'send-to-review',
2629
- options: {
2630
- id: '{{context.eval("id")}}',
2631
- title: '{{context.eval("title")}}',
2632
- },
2633
- },
2634
- priority: 'secondary',
2635
- type: 'sent',
2636
- scope: AXPEntityCommandScope.Individual,
2637
- disabled: '{{context.eval("status") != "Draft"}}',
2638
- },
2639
- {
2640
- title: `@${i18n}:workflows.document-review.submit-review.title`,
2641
- icon: 'fa-light fa-ballot-check',
2642
- command: {
2643
- name: 'submit-review',
2644
- options: {
2645
- id: '{{context.eval("reviewRecordId")}}',
2646
- // reviewedAt : '{{ variables.execute("now") }}',
2647
- decoration: {
2648
- header: {
2649
- title: '{{ context.eval("title") + " - version: " + context.eval("version") }}',
2650
- },
2651
- },
2652
- },
2653
- },
2654
- priority: 'secondary',
2655
- type: 'review',
2656
- scope: AXPEntityCommandScope.Individual,
2657
- disabled: '{{context.eval("status") != "PendingReview"}}',
2658
- },
2659
- {
2660
- title: `@${i18n}:terms.workflow.distributed`,
2661
- icon: 'fa-light fa-chart-network',
2662
- command: {
2663
- name: 'distributed',
2664
- options: {
2665
- id: '{{context.eval("id")}}',
2666
- title: '{{context.eval("title")}}',
2667
- },
2668
- },
2669
- priority: 'secondary',
2670
- type: 'review',
2671
- scope: AXPEntityCommandScope.Individual,
2672
- disabled: '{{context.eval("status") != "Reviewed" && context.eval("status") != "Completed"}}',
2673
- },
2674
2297
  ],
2675
2298
  views: [
2676
2299
  createAllQueryView({ sorts: [{ name: 'name', dir: 'asc' }] }),
@@ -3558,609 +3181,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3558
3181
  }]
3559
3182
  }] });
3560
3183
 
3561
- async function distributionFactory(injector) {
3562
- const i18n = RootConfig.config.i18n;
3563
- const entityDef = {
3564
- module: RootConfig.module.name,
3565
- name: RootConfig.entities.distribution.name,
3566
- title: RootConfig.entities.distribution.title,
3567
- icon: RootConfig.entities.distribution.icon,
3568
- formats: {
3569
- individual: RootConfig.entities.distribution.title,
3570
- plural: RootConfig.entities.distribution.titlePlural,
3571
- searchResult: {
3572
- title: '{{ title }}',
3573
- description: RootConfig.module.title,
3574
- },
3575
- },
3576
- relatedEntities: [
3577
- {
3578
- entity: `${RootConfig.module.name}.${RootConfig.entities.distributionInteraction.name}`,
3579
- columns: [],
3580
- conditions: [
3581
- {
3582
- name: 'documentDistributionId',
3583
- operator: {
3584
- type: 'equal',
3585
- },
3586
- value: '{{context.eval("id")}}',
3587
- },
3588
- ],
3589
- },
3590
- ],
3591
- groups: [
3592
- {
3593
- id: 'section',
3594
- title: RootConfig.entities.distribution.title,
3595
- },
3596
- ],
3597
- properties: [
3598
- {
3599
- name: 'documentId',
3600
- title: `@${i18n}:terms.document.document-id`,
3601
- groupId: 'section',
3602
- options: {},
3603
- schema: {
3604
- dataType: 'string',
3605
- interface: {
3606
- type: AXPWidgetsCatalog.lookup,
3607
- options: {
3608
- entity: 'DocumentManagement.documents',
3609
- multiple: false,
3610
- look: 'lookup',
3611
- },
3612
- },
3613
- },
3614
- validations: [
3615
- {
3616
- rule: 'required',
3617
- },
3618
- ],
3619
- },
3620
- {
3621
- name: 'version',
3622
- title: `@${i18n}:terms.common.version`,
3623
- groupId: 'section',
3624
- options: {
3625
- sort: {
3626
- enabled: true,
3627
- },
3628
- filter: {
3629
- advance: {
3630
- enabled: true,
3631
- },
3632
- inline: {
3633
- enabled: false,
3634
- },
3635
- },
3636
- },
3637
- schema: {
3638
- dataType: 'string',
3639
- interface: {
3640
- type: AXPWidgetsCatalog.text,
3641
- },
3642
- },
3643
- validations: [
3644
- {
3645
- rule: 'required',
3646
- },
3647
- ],
3648
- },
3649
- {
3650
- name: 'viewedCount',
3651
- title: `@${i18n}:terms.interactions.viewed-count`,
3652
- schema: {
3653
- dataType: 'string',
3654
- interface: {
3655
- type: AXPWidgetsCatalog.text,
3656
- },
3657
- },
3658
- },
3659
- {
3660
- name: 'signedCount',
3661
- title: `@${i18n}:terms.interactions.signed-count`,
3662
- schema: {
3663
- dataType: 'string',
3664
- interface: {
3665
- type: AXPWidgetsCatalog.text,
3666
- },
3667
- },
3668
- },
3669
- {
3670
- name: 'status',
3671
- title: `@${i18n}:terms.common.status`,
3672
- schema: {
3673
- dataType: 'string',
3674
- interface: {
3675
- type: AXPWidgetsCatalog.text,
3676
- },
3677
- },
3678
- },
3679
- ],
3680
- columns: [{ name: 'documentId', options: { dataPath: 'document.name' } }, { name: 'version' },
3681
- { name: 'viewedCount' }, { name: 'signedCount' }, { name: 'status' }
3682
- ],
3683
- interfaces: {
3684
- master: {
3685
- create: {
3686
- sections: [
3687
- {
3688
- id: 'section',
3689
- },
3690
- ],
3691
- properties: [
3692
- {
3693
- name: 'documentId',
3694
- layout: {
3695
- positions: {
3696
- lg: {
3697
- colSpan: 6,
3698
- order: 1,
3699
- },
3700
- },
3701
- },
3702
- },
3703
- {
3704
- name: 'version',
3705
- layout: {
3706
- positions: {
3707
- lg: {
3708
- colSpan: 6,
3709
- order: 2,
3710
- },
3711
- },
3712
- },
3713
- },
3714
- ],
3715
- },
3716
- update: {
3717
- sections: [
3718
- {
3719
- id: 'section',
3720
- },
3721
- ],
3722
- properties: [
3723
- {
3724
- name: 'documentId',
3725
- layout: {
3726
- positions: {
3727
- lg: {
3728
- colSpan: 6,
3729
- order: 1,
3730
- },
3731
- },
3732
- },
3733
- },
3734
- {
3735
- name: 'version',
3736
- layout: {
3737
- positions: {
3738
- lg: {
3739
- colSpan: 6,
3740
- order: 2,
3741
- },
3742
- },
3743
- },
3744
- },
3745
- ],
3746
- },
3747
- single: {
3748
- title: `{{document.name}}`,
3749
- sections: [
3750
- {
3751
- id: 'section',
3752
- layout: {
3753
- positions: {
3754
- lg: {
3755
- colSpan: 12,
3756
- },
3757
- },
3758
- },
3759
- },
3760
- ],
3761
- properties: [
3762
- {
3763
- name: 'documentId',
3764
- layout: {
3765
- positions: {
3766
- lg: {
3767
- colSpan: 6,
3768
- order: 1,
3769
- },
3770
- },
3771
- },
3772
- },
3773
- {
3774
- name: 'version',
3775
- layout: {
3776
- positions: {
3777
- lg: {
3778
- colSpan: 6,
3779
- order: 2,
3780
- },
3781
- },
3782
- },
3783
- },
3784
- ],
3785
- actions: [...entityMasterRecordActions()],
3786
- },
3787
- list: {
3788
- actions: [...entityMasterCrudActions()],
3789
- views: [
3790
- createAllQueryView({
3791
- sorts: [{ name: 'documentId', dir: 'asc' }],
3792
- }),
3793
- ],
3794
- },
3795
- },
3796
- },
3797
- };
3798
- return entityDef;
3799
- }
3800
-
3801
- class AXMDistributionService extends AXMEntityCrudServiceImpl {
3802
- }
3803
- class AXMDistributionServiceImpl extends AXMDistributionService {
3804
- constructor() {
3805
- super(`${RootConfig.module.name}.${RootConfig.entities.distribution.name}`);
3806
- }
3807
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3808
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionServiceImpl }); }
3809
- }
3810
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionServiceImpl, decorators: [{
3811
- type: Injectable
3812
- }], ctorParameters: () => [] });
3813
-
3814
- class AXMDistributionEntityModule {
3815
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3816
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionEntityModule }); }
3817
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionEntityModule, providers: [
3818
- {
3819
- provide: AXMDistributionService,
3820
- useClass: AXMDistributionServiceImpl,
3821
- },
3822
- ] }); }
3184
+ class AXMDocumentReletedEntityModule {
3185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReletedEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3186
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReletedEntityModule }); }
3187
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReletedEntityModule }); }
3823
3188
  }
3824
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionEntityModule, decorators: [{
3189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReletedEntityModule, decorators: [{
3825
3190
  type: NgModule,
3826
3191
  args: [{
3827
3192
  imports: [],
3828
3193
  exports: [],
3829
3194
  declarations: [],
3830
- providers: [
3831
- {
3832
- provide: AXMDistributionService,
3833
- useClass: AXMDistributionServiceImpl,
3834
- },
3835
- ],
3195
+ providers: [],
3836
3196
  }]
3837
3197
  }] });
3838
3198
 
3839
- async function distributionInteractionFactory(injector) {
3840
- const i18n = RootConfig.config.i18n;
3841
- const entityDef = {
3842
- module: RootConfig.module.name,
3843
- name: RootConfig.entities.distributionInteraction.name,
3844
- title: RootConfig.entities.distributionInteraction.title,
3845
- icon: RootConfig.entities.distributionInteraction.icon,
3846
- formats: {
3847
- individual: RootConfig.entities.distributionInteraction.title,
3848
- plural: RootConfig.entities.distributionInteraction.titlePlural,
3849
- searchResult: {
3850
- title: '{{ title }}',
3851
- description: RootConfig.module.title,
3852
- },
3853
- },
3854
- relatedEntities: [],
3855
- groups: [
3856
- {
3857
- id: 'section',
3858
- title: RootConfig.entities.distributionInteraction.title,
3859
- },
3860
- ],
3861
- properties: [
3199
+ // Entity Services
3200
+
3201
+ var index = /*#__PURE__*/Object.freeze({
3202
+ __proto__: null,
3203
+ AXMDocumentManagementDocumentEntityModule: AXMDocumentManagementDocumentEntityModule,
3204
+ AXMDocumentManagementDocumentTypeEntityModule: AXMDocumentManagementDocumentTypeEntityModule,
3205
+ AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule: AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule,
3206
+ AXMDocumentManagementDocumentTypeMetaDefinitionEntityService: AXMDocumentManagementDocumentTypeMetaDefinitionEntityService,
3207
+ AXMDocumentManagementDocumentTypeMetaDefinitionEntityServiceImpl: AXMDocumentManagementDocumentTypeMetaDefinitionEntityServiceImpl,
3208
+ AXMDocumentManagementDocumentTypeMetaValueEntityModule: AXMDocumentManagementDocumentTypeMetaValueEntityModule,
3209
+ AXMDocumentManagementDocumentTypeMetaValueEntityService: AXMDocumentManagementDocumentTypeMetaValueEntityService,
3210
+ AXMDocumentManagementDocumentTypeMetaValueEntityServiceImpl: AXMDocumentManagementDocumentTypeMetaValueEntityServiceImpl,
3211
+ AXMDocumentManagementDocumentTypeStatusDefinitionEntityModule: AXMDocumentManagementDocumentTypeStatusDefinitionEntityModule,
3212
+ AXMDocumentManagementDocumentTypeStatusDefinitionEntityService: AXMDocumentManagementDocumentTypeStatusDefinitionEntityService,
3213
+ AXMDocumentManagementDocumentTypeStatusDefinitionEntityServiceImpl: AXMDocumentManagementDocumentTypeStatusDefinitionEntityServiceImpl,
3214
+ AXMDocumentReletedEntityModule: AXMDocumentReletedEntityModule,
3215
+ AXMDocumentService: AXMDocumentService,
3216
+ AXMDocumentServiceImpl: AXMDocumentServiceImpl,
3217
+ AXMDocumentTypeService: AXMDocumentTypeService,
3218
+ AXMDocumentTypeServiceImpl: AXMDocumentTypeServiceImpl,
3219
+ AXMFolderEntityModule: AXMFolderEntityModule,
3220
+ AXMFolderService: AXMFolderService,
3221
+ AXMFolderServiceImpl: AXMFolderServiceImpl,
3222
+ AXMReviewEntityModule: AXMReviewEntityModule,
3223
+ AXMReviewService: AXMReviewService,
3224
+ AXMReviewServiceImpl: AXMReviewServiceImpl,
3225
+ canTransition: canTransition,
3226
+ documentFactory: documentFactory,
3227
+ documentRelatedFactory: documentRelatedFactory,
3228
+ documentTypeFactory: documentTypeFactory,
3229
+ documentTypeMetaDefinitionfactory: documentTypeMetaDefinitionfactory,
3230
+ documentTypeMetaValueFactory: documentTypeMetaValueFactory,
3231
+ documentTypeStatusDefinitionFactory: documentTypeStatusDefinitionFactory,
3232
+ folderFactory: folderFactory,
3233
+ getNextStatus: getNextStatus,
3234
+ reviewFactory: reviewFactory
3235
+ });
3236
+
3237
+ class AXMImageFileTypeProvider {
3238
+ async items() {
3239
+ return [
3862
3240
  {
3863
- name: 'user',
3864
- title: '@general:terms.user',
3865
- groupId: 'section',
3866
- schema: {
3867
- dataType: 'string',
3868
- interface: {
3869
- type: AXPWidgetsCatalog.text,
3241
+ name: 'image',
3242
+ title: 'Image',
3243
+ icon: 'fa-light fa-image ax-text-purple-500',
3244
+ extensions: [
3245
+ {
3246
+ name: 'jpg',
3247
+ title: 'JPEG',
3248
+ icon: 'fa-light fa-image ax-text-purple-500',
3249
+ meta: [],
3870
3250
  },
3871
- },
3872
- validations: [
3873
3251
  {
3874
- rule: 'required',
3875
- },
3876
- ],
3877
- },
3878
- {
3879
- name: 'hasViewed',
3880
- title: `@${i18n}:terms.interactions.has-viewed`,
3881
- groupId: 'section',
3882
- schema: {
3883
- dataType: 'boolean',
3884
- interface: {
3885
- type: AXPWidgetsCatalog.toggle,
3886
- },
3887
- },
3888
- },
3889
- {
3890
- name: 'hasSigned',
3891
- title: `@${i18n}:terms.interactions.has-signed`,
3892
- groupId: 'section',
3893
- schema: {
3894
- dataType: 'boolean',
3895
- interface: {
3896
- type: AXPWidgetsCatalog.toggle,
3897
- },
3898
- },
3899
- },
3900
- {
3901
- name: 'lastViewDate',
3902
- title: `@${i18n}:terms.timestamps.viewed-at`,
3903
- groupId: 'section',
3904
- schema: {
3905
- dataType: 'date',
3906
- interface: {
3907
- type: AXPWidgetsCatalog.dateTime,
3908
- },
3909
- },
3910
- },
3911
- {
3912
- name: 'lastSignDate',
3913
- title: `@${i18n}:terms.timestamps.signed-at`,
3914
- groupId: 'section',
3915
- schema: {
3916
- dataType: 'date',
3917
- interface: {
3918
- type: AXPWidgetsCatalog.dateTime,
3919
- },
3920
- },
3921
- },
3922
- ],
3923
- columns: [{ name: 'user', options: { dataPath: 'user.title' } }, { name: 'hasViewed' },
3924
- { name: 'lastViewDate' },
3925
- { name: 'hasSigned' },
3926
- { name: 'lastSignDate' }
3927
- ],
3928
- interfaces: {
3929
- master: {
3930
- create: {
3931
- sections: [
3932
- {
3933
- id: 'section',
3934
- },
3935
- ],
3936
- properties: [
3937
- {
3938
- name: 'name',
3939
- layout: {
3940
- positions: {
3941
- lg: {
3942
- colSpan: 6,
3943
- order: 1,
3944
- },
3945
- },
3946
- },
3947
- },
3948
- {
3949
- name: 'title',
3950
- layout: {
3951
- positions: {
3952
- lg: {
3953
- colSpan: 6,
3954
- order: 2,
3955
- },
3956
- },
3957
- },
3958
- },
3959
- ],
3960
- },
3961
- update: {
3962
- sections: [
3963
- {
3964
- id: 'section',
3965
- },
3966
- ],
3967
- properties: [
3968
- {
3969
- name: 'name',
3970
- layout: {
3971
- positions: {
3972
- lg: {
3973
- colSpan: 6,
3974
- order: 1,
3975
- },
3976
- },
3977
- },
3978
- },
3979
- {
3980
- name: 'title',
3981
- layout: {
3982
- positions: {
3983
- lg: {
3984
- colSpan: 6,
3985
- order: 2,
3986
- },
3987
- },
3988
- },
3989
- },
3990
- ],
3991
- },
3992
- single: {
3993
- title: '{{title}}',
3994
- sections: [
3995
- {
3996
- id: 'section',
3997
- layout: {
3998
- positions: {
3999
- lg: {
4000
- colSpan: 12,
4001
- },
4002
- },
4003
- },
4004
- },
4005
- ],
4006
- properties: [
4007
- {
4008
- name: 'name',
4009
- layout: {
4010
- positions: {
4011
- lg: {
4012
- colSpan: 6,
4013
- order: 1,
4014
- },
4015
- },
4016
- },
4017
- },
4018
- {
4019
- name: 'title',
4020
- layout: {
4021
- positions: {
4022
- lg: {
4023
- colSpan: 6,
4024
- order: 2,
4025
- },
4026
- },
4027
- },
4028
- },
4029
- ],
4030
- actions: [],
4031
- },
4032
- list: {
4033
- actions: [],
4034
- views: [
4035
- createAllQueryView({
4036
- sorts: [{ name: 'name', dir: 'asc' }],
4037
- }),
4038
- ],
4039
- },
4040
- },
4041
- },
4042
- };
4043
- return entityDef;
4044
- }
4045
-
4046
- class AXMDistributionInteractionService extends AXMEntityCrudServiceImpl {
4047
- }
4048
- class AXMDistributionInteractionServiceImpl extends AXMDistributionInteractionService {
4049
- constructor() {
4050
- super(`${RootConfig.module.name}.${RootConfig.entities.distributionInteraction.name}`);
4051
- }
4052
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionInteractionServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4053
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionInteractionServiceImpl }); }
4054
- }
4055
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionInteractionServiceImpl, decorators: [{
4056
- type: Injectable
4057
- }], ctorParameters: () => [] });
4058
-
4059
- class AXMDistributionInteractionEntityModule {
4060
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionInteractionEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4061
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionInteractionEntityModule }); }
4062
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionInteractionEntityModule, providers: [
4063
- {
4064
- provide: AXMDistributionInteractionService,
4065
- useClass: AXMDistributionInteractionServiceImpl,
4066
- },
4067
- ] }); }
4068
- }
4069
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDistributionInteractionEntityModule, decorators: [{
4070
- type: NgModule,
4071
- args: [{
4072
- imports: [],
4073
- exports: [],
4074
- declarations: [],
4075
- providers: [
4076
- {
4077
- provide: AXMDistributionInteractionService,
4078
- useClass: AXMDistributionInteractionServiceImpl,
4079
- },
4080
- ],
4081
- }]
4082
- }] });
4083
-
4084
- class AXMDocumentReletedEntityModule {
4085
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReletedEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4086
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReletedEntityModule }); }
4087
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReletedEntityModule }); }
4088
- }
4089
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReletedEntityModule, decorators: [{
4090
- type: NgModule,
4091
- args: [{
4092
- imports: [],
4093
- exports: [],
4094
- declarations: [],
4095
- providers: [],
4096
- }]
4097
- }] });
4098
-
4099
- // Entity Services
4100
-
4101
- var index = /*#__PURE__*/Object.freeze({
4102
- __proto__: null,
4103
- AXMDistributionEntityModule: AXMDistributionEntityModule,
4104
- AXMDistributionInteractionEntityModule: AXMDistributionInteractionEntityModule,
4105
- AXMDistributionInteractionService: AXMDistributionInteractionService,
4106
- AXMDistributionInteractionServiceImpl: AXMDistributionInteractionServiceImpl,
4107
- AXMDistributionService: AXMDistributionService,
4108
- AXMDistributionServiceImpl: AXMDistributionServiceImpl,
4109
- AXMDocumentManagementDocumentEntityModule: AXMDocumentManagementDocumentEntityModule,
4110
- AXMDocumentManagementDocumentTypeEntityModule: AXMDocumentManagementDocumentTypeEntityModule,
4111
- AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule: AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule,
4112
- AXMDocumentManagementDocumentTypeMetaDefinitionEntityService: AXMDocumentManagementDocumentTypeMetaDefinitionEntityService,
4113
- AXMDocumentManagementDocumentTypeMetaDefinitionEntityServiceImpl: AXMDocumentManagementDocumentTypeMetaDefinitionEntityServiceImpl,
4114
- AXMDocumentManagementDocumentTypeMetaValueEntityModule: AXMDocumentManagementDocumentTypeMetaValueEntityModule,
4115
- AXMDocumentManagementDocumentTypeMetaValueEntityService: AXMDocumentManagementDocumentTypeMetaValueEntityService,
4116
- AXMDocumentManagementDocumentTypeMetaValueEntityServiceImpl: AXMDocumentManagementDocumentTypeMetaValueEntityServiceImpl,
4117
- AXMDocumentManagementDocumentTypeStatusDefinitionEntityModule: AXMDocumentManagementDocumentTypeStatusDefinitionEntityModule,
4118
- AXMDocumentManagementDocumentTypeStatusDefinitionEntityService: AXMDocumentManagementDocumentTypeStatusDefinitionEntityService,
4119
- AXMDocumentManagementDocumentTypeStatusDefinitionEntityServiceImpl: AXMDocumentManagementDocumentTypeStatusDefinitionEntityServiceImpl,
4120
- AXMDocumentReletedEntityModule: AXMDocumentReletedEntityModule,
4121
- AXMDocumentService: AXMDocumentService,
4122
- AXMDocumentServiceImpl: AXMDocumentServiceImpl,
4123
- AXMDocumentTypeService: AXMDocumentTypeService,
4124
- AXMDocumentTypeServiceImpl: AXMDocumentTypeServiceImpl,
4125
- AXMFolderEntityModule: AXMFolderEntityModule,
4126
- AXMFolderService: AXMFolderService,
4127
- AXMFolderServiceImpl: AXMFolderServiceImpl,
4128
- AXMReviewEntityModule: AXMReviewEntityModule,
4129
- AXMReviewService: AXMReviewService,
4130
- AXMReviewServiceImpl: AXMReviewServiceImpl,
4131
- canTransition: canTransition,
4132
- distributionFactory: distributionFactory,
4133
- distributionInteractionFactory: distributionInteractionFactory,
4134
- documentFactory: documentFactory,
4135
- documentRelatedFactory: documentRelatedFactory,
4136
- documentTypeFactory: documentTypeFactory,
4137
- documentTypeMetaDefinitionfactory: documentTypeMetaDefinitionfactory,
4138
- documentTypeMetaValueFactory: documentTypeMetaValueFactory,
4139
- documentTypeStatusDefinitionFactory: documentTypeStatusDefinitionFactory,
4140
- folderFactory: folderFactory,
4141
- getNextStatus: getNextStatus,
4142
- reviewFactory: reviewFactory
4143
- });
4144
-
4145
- class AXMImageFileTypeProvider {
4146
- async items() {
4147
- return [
4148
- {
4149
- name: 'image',
4150
- title: 'Image',
4151
- icon: 'fa-light fa-image ax-text-purple-500',
4152
- extensions: [
4153
- {
4154
- name: 'jpg',
4155
- title: 'JPEG',
4156
- icon: 'fa-light fa-image ax-text-purple-500',
4157
- meta: [],
4158
- },
4159
- {
4160
- name: 'png',
4161
- title: 'PNG',
4162
- icon: 'fa-light fa-image ax-text-purple-500',
4163
- meta: [],
3252
+ name: 'png',
3253
+ title: 'PNG',
3254
+ icon: 'fa-light fa-image ax-text-purple-500',
3255
+ meta: [],
4164
3256
  },
4165
3257
  {
4166
3258
  name: 'gif',
@@ -4701,7 +3793,7 @@ class AXMFileTypeExtensionWidgetEditComponent extends AXPValueWidgetComponent {
4701
3793
  </ax-collapse-group>
4702
3794
  }
4703
3795
  </axp-widgets-container>
4704
- </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i3.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i4.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$2.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i1$2.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXCollapseModule }, { kind: "component", type: i7.AXCollapseComponent, selector: "ax-collapse", inputs: ["disabled", "look", "isCollapsed", "showHeader", "caption", "icon", "isLoading", "headerTemplate"], outputs: ["onClick", "isCollapsedChange"] }, { kind: "component", type: i7.AXCollapseGroupComponent, selector: "ax-collapse-group", inputs: ["look", "accordion", "activeIndex"], outputs: ["accordionChange", "activeIndexChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3796
+ </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i3.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i4.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i6.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i6.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXCollapseModule }, { kind: "component", type: i7.AXCollapseComponent, selector: "ax-collapse", inputs: ["disabled", "look", "isCollapsed", "showHeader", "caption", "icon", "isLoading", "headerTemplate"], outputs: ["onClick", "isCollapsedChange"] }, { kind: "component", type: i7.AXCollapseGroupComponent, selector: "ax-collapse-group", inputs: ["look", "accordion", "activeIndex"], outputs: ["accordionChange", "activeIndexChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4705
3797
  }
4706
3798
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMFileTypeExtensionWidgetEditComponent, decorators: [{
4707
3799
  type: Component,
@@ -4912,66 +4004,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
4912
4004
  }]
4913
4005
  }] });
4914
4006
 
4915
- class AXMDocumentReviewBadgeProvider {
4916
- constructor() {
4917
- this.documentReviewService = inject(AXMDocumentService);
4918
- this.count = signal(0, ...(ngDevMode ? [{ debugName: "count" }] : []));
4919
- this.key = 'review-badge';
4920
- this.getCount();
4921
- }
4922
- async getCount() {
4923
- // Base filter for requiresReview
4924
- const baseFilters = [
4925
- {
4926
- field: 'documentType.requiresReview',
4927
- operator: { type: 'equal' },
4928
- value: true,
4929
- },
4930
- {
4931
- field: 'status',
4932
- operator: { type: 'equal' },
4933
- value: 'PendingReview',
4934
- },
4935
- ];
4936
- const x = await this.documentReviewService.query({
4937
- skip: 0,
4938
- take: 1,
4939
- filter: {
4940
- logic: 'and',
4941
- filters: baseFilters,
4942
- },
4943
- });
4944
- this.count.set(x.total);
4945
- }
4946
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReviewBadgeProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4947
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReviewBadgeProvider }); }
4948
- }
4949
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentReviewBadgeProvider, decorators: [{
4950
- type: Injectable
4951
- }], ctorParameters: () => [] });
4952
-
4953
- class AXMFileViewerPopupComponent extends AXBasePageComponent {
4007
+ class AXMFileViewerPopupComponent extends AXBasePageComponent {
4954
4008
  constructor() {
4955
4009
  super(...arguments);
4956
4010
  this.index = 0;
4957
4011
  this.mediaViewer = viewChild(AXMediaViewerContainerComponent, ...(ngDevMode ? [{ debugName: "mediaViewer" }] : []));
4958
- this.f = afterNextRender(() => {
4959
- setTimeout(() => {
4960
- this.mediaViewer()?.goToIndex(this.index, 0);
4961
- });
4962
- });
4963
4012
  }
4964
4013
  ngAfterViewInit() {
4965
- console.log(this.index);
4966
- //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.
4967
- //Add 'implements AfterViewInit' to the class.
4968
- this.mediaViewer()?.goToIndex(this.index, 0);
4014
+ this.mediaViewer()?.goToIndex(this.index);
4969
4015
  }
4970
4016
  onClose() {
4971
4017
  this.close();
4972
4018
  }
4973
4019
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMFileViewerPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
4974
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.15", type: AXMFileViewerPopupComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "mediaViewer", first: true, predicate: AXMediaViewerContainerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ax-content>\n <ax-media-viewer-container [thumbnail]=\"true\" #c [dataArray]=\"nodes\">\n <ax-header>\n <ax-prefix>\n <ax-file-info></ax-file-info>\n </ax-prefix>\n <ax-suffix>\n <ax-fullscreen-button></ax-fullscreen-button>\n </ax-suffix>\n </ax-header>\n <ax-prefix>\n <ax-button (click)=\"c.next()\">\n <ax-icon class=\"ax-icon ax-icon-chevron-right\"> </ax-icon>\n </ax-button>\n </ax-prefix>\n <ax-suffix>\n <ax-button (click)=\"c.prev()\">\n <ax-icon class=\"ax-icon ax-icon-chevron-left\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-media-viewer-container>\n</ax-content>\n<ax-footer>\n <ax-suffix>\n <ax-button [text]=\"'close'\" (click)=\"onClose()\" />\n </ax-suffix>\n</ax-footer>\n", styles: ["ax-media-viewer-container{--ax-sys-border-radius:0 }\n"], dependencies: [{ kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: i1$1.AXDecoratorFullScreenButtonComponent, selector: "ax-fullscreen-button", inputs: ["element", "isActive"], outputs: ["elementChange", "isActiveChange"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXMediaViewerModule }, { kind: "component", type: i3$1.AXMediaViewerContainerComponent, selector: "ax-media-viewer-container", inputs: ["dataArray", "thumbnail", "pagination"] }, { kind: "component", type: i3$1.AXFileInfoComponent, selector: "ax-file-info" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4020
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.15", type: AXMFileViewerPopupComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "mediaViewer", first: true, predicate: AXMediaViewerContainerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ax-content>\n <ax-media-viewer-container [thumbnail]=\"true\" #c [dataArray]=\"nodes\">\n <ax-header>\n <ax-prefix>\n <ax-file-info></ax-file-info>\n </ax-prefix>\n <ax-suffix>\n <ax-fullscreen-button></ax-fullscreen-button>\n </ax-suffix>\n </ax-header>\n <ax-prefix>\n <ax-button (click)=\"c.next()\">\n <ax-icon class=\"ax-icon ax-icon-chevron-right\"> </ax-icon>\n </ax-button>\n </ax-prefix>\n <ax-suffix>\n <ax-button (click)=\"c.prev()\">\n <ax-icon class=\"ax-icon ax-icon-chevron-left\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-media-viewer-container>\n</ax-content>\n<ax-footer>\n <ax-suffix>\n <ax-button [text]=\"'close'\" (click)=\"onClose()\" />\n </ax-suffix>\n</ax-footer>\n", styles: ["ax-media-viewer-container{--ax-sys-border-radius:0 }\n"], dependencies: [{ kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: i1$1.AXDecoratorFullScreenButtonComponent, selector: "ax-fullscreen-button", inputs: ["element", "isActive"], outputs: ["elementChange", "isActiveChange"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXMediaViewerModule }, { kind: "component", type: i3$1.AXMediaViewerContainerComponent, selector: "ax-media-viewer-container", inputs: ["dataArray", "thumbnail", "pagination"] }, { kind: "component", type: i3$1.AXFileInfoComponent, selector: "ax-file-info" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4975
4021
  }
4976
4022
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMFileViewerPopupComponent, decorators: [{
4977
4023
  type: Component,
@@ -5041,20 +4087,7 @@ class AXMDocumentDialogService {
5041
4087
  })
5042
4088
  .setActions(actions => {
5043
4089
  actions.cancel('@general:actions.cancel.title');
5044
- const submitAction = {
5045
- title: '@general:actions.submit.title',
5046
- color: 'primary',
5047
- command: { name: 'submit', options: { validate: true } },
5048
- items: [
5049
- {
5050
- title: '@document-management:actions.save-and-send',
5051
- icon: 'fa-paper-plane',
5052
- color: 'primary',
5053
- command: { name: 'send-to-review', options: { validate: true } },
5054
- },
5055
- ],
5056
- };
5057
- actions.custom(submitAction);
4090
+ actions.submit('@general:actions.submit.title');
5058
4091
  }).setCloseButton(true);
5059
4092
  })
5060
4093
  .show();
@@ -5075,7 +4108,6 @@ class AXMDocumentDialogService {
5075
4108
  return {
5076
4109
  data: {
5077
4110
  cancel: false,
5078
- isReviewSent: action === 'send-to-review',
5079
4111
  fileIds: [documentId],
5080
4112
  },
5081
4113
  };
@@ -5102,7 +4134,6 @@ class AXMDocumentDialogService {
5102
4134
  return {
5103
4135
  data: {
5104
4136
  cancel: false,
5105
- isReviewSent: action === 'send-to-review',
5106
4137
  fileIds,
5107
4138
  },
5108
4139
  };
@@ -5217,7 +4248,6 @@ class DocumentAttachmentsService {
5217
4248
  constructor() {
5218
4249
  this.fileService = inject(AXFileService);
5219
4250
  this.documentTypeService = inject(AXMDocumentTypeService);
5220
- this.workflowService = inject(AXPWorkflowService);
5221
4251
  this.documentService = inject(AXMDocumentService);
5222
4252
  this.documentDialog = inject(AXMDocumentDialogService);
5223
4253
  this.translateService = inject(AXTranslationService);
@@ -5337,21 +4367,6 @@ class DocumentAttachmentsService {
5337
4367
  if (result?.data?.cancel) {
5338
4368
  return false;
5339
4369
  }
5340
- if (this.shouldExecuteWorkflow(result)) {
5341
- return await this.executeWorkflow(result.data.fileIds[0]);
5342
- }
5343
- return true;
5344
- }
5345
- shouldExecuteWorkflow(result) {
5346
- return !!(result?.data?.isReviewSent && result.data.fileIds && result.data.fileIds.length > 0);
5347
- }
5348
- async executeWorkflow(fileId) {
5349
- const workflowResult = await this.workflowService.execute('send-to-review', {
5350
- options: {
5351
- id: fileId,
5352
- },
5353
- });
5354
- console.log('Workflow result:', workflowResult);
5355
4370
  return true;
5356
4371
  }
5357
4372
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DocumentAttachmentsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -6417,9 +5432,22 @@ class AXMDocumentManagerService {
6417
5432
  const ext = item.name.split('.').pop()?.toLowerCase();
6418
5433
  return ext && ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'pdf'].includes(ext);
6419
5434
  });
5435
+ // Fetch documents with null fileId.source.value
5436
+ const documentsWithNullFileId = filteredDocuments.filter((doc) => doc.fileId?.source?.kind === 'fileId' && !doc.fileId.source.value);
5437
+ // Fetch missing documents and replace them in the array
5438
+ if (documentsWithNullFileId.length > 0) {
5439
+ const fetchedDocuments = await Promise.all(documentsWithNullFileId.map((doc) => this.documentService.getOne(doc.id)));
5440
+ // Replace documents in filteredDocuments with fetched ones
5441
+ fetchedDocuments.forEach((fetchedDoc) => {
5442
+ const index = filteredDocuments.findIndex((doc) => doc.id === fetchedDoc.id);
5443
+ if (index !== -1) {
5444
+ filteredDocuments[index] = fetchedDoc;
5445
+ }
5446
+ });
5447
+ }
6420
5448
  // Collect all fileIds that need to be fetched
6421
5449
  const fileIds = filteredDocuments
6422
- .filter((doc) => doc.fileId?.source?.kind === 'fileId')
5450
+ .filter((doc) => doc.fileId?.source?.kind === 'fileId' && doc.fileId.source.value)
6423
5451
  .map((doc) => doc.fileId.source.value);
6424
5452
  // Fetch all file info at once (need URL for media viewer)
6425
5453
  const fileInfosMap = new Map();
@@ -7476,810 +6504,305 @@ const AXPDocumentExplorerViewModel = signalStore({ providedIn: 'root' }, withSta
7476
6504
  */
7477
6505
  async makeCopy(node) {
7478
6506
  if (node) {
7479
- try {
7480
- await driveService.copy(node);
7481
- await this.refresh();
7482
- }
7483
- catch (error) {
7484
- console.error('Error copying node:', error);
7485
- }
7486
- }
7487
- },
7488
- /**
7489
- * Checks if a node is locked
7490
- */
7491
- async isLocked(node) {
7492
- try {
7493
- return lockService.check({
7494
- refId: node.id,
7495
- refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,
7496
- });
7497
- }
7498
- catch (error) {
7499
- console.error('Error checking lock status:', error);
7500
- return false;
7501
- }
7502
- },
7503
- /**
7504
- * Locks a node
7505
- */
7506
- async lock(node) {
7507
- const locked = await driveService.showLockDialog(node);
7508
- if (locked) {
7509
- await this.refresh();
7510
- }
7511
- },
7512
- /**
7513
- * Unlocks a node
7514
- */
7515
- async unlock(node) {
7516
- const unlocked = await driveService.showUnlockDialog(node);
7517
- if (unlocked) {
7518
- await this.refresh();
7519
- }
7520
- },
7521
- /**
7522
- * Moves a node to a different location
7523
- */
7524
- async moveTo(node) {
7525
- if (node) {
7526
- const result = await driveService.moveTo({ browseMode: 'folder', node: node, scope: store.scope() });
7527
- if (result) {
7528
- await this.refresh();
7529
- }
7530
- }
7531
- },
7532
- /**
7533
- * Copies a node to a different location
7534
- */
7535
- async copyTo(node) {
7536
- if (node) {
7537
- const result = await driveService.copyTo({ browseMode: 'folder', node: node, scope: store.scope() });
7538
- if (result) {
7539
- await this.refresh();
7540
- }
7541
- }
7542
- },
7543
- /**
7544
- * Uploads a file by type
7545
- */
7546
- async uploadFileByType(folderId, documentTypeId) {
7547
- await driveService.uploadFileByType(folderId, documentTypeId);
7548
- await this.refresh();
7549
- },
7550
- //#endregion
7551
- })));
7552
-
7553
- class AXMDocumentExplorerComponent {
7554
- constructor() {
7555
- this.vm = inject(AXPDocumentExplorerViewModel);
7556
- this.contextMenu = viewChild('itemsContextMenu', ...(ngDevMode ? [{ debugName: "contextMenu" }] : []));
7557
- this.rootContextMenu = viewChild('rootContextMenu', ...(ngDevMode ? [{ debugName: "rootContextMenu" }] : []));
7558
- this.driveService = inject(AXMDocumentManagerService);
7559
- this.translateService = inject(AXTranslationService);
7560
- this.layout = inject(AXPLayoutThemeService);
7561
- this.browseMode = input('file', ...(ngDevMode ? [{ debugName: "browseMode" }] : []));
7562
- this.viewMode = input(...(ngDevMode ? [undefined, { debugName: "viewMode" }] : []));
7563
- this.selectionMode = input('none', ...(ngDevMode ? [{ debugName: "selectionMode" }] : []));
7564
- this.showContextMenu = input(true, ...(ngDevMode ? [{ debugName: "showContextMenu" }] : []));
7565
- this.view = signal(null, ...(ngDevMode ? [{ debugName: "view" }] : []));
7566
- this.viewMap = {
7567
- list: async () => (await import('./acorex-modules-document-management-list-view.component-DfKTfE-z.mjs')).AXMDocumentExplorerListViewComponent,
7568
- 'small-tiles': async () => (await import('./acorex-modules-document-management-small-tiles-view.component-CVemmAlG.mjs')).AXMDocumentExplorerSmallTilesViewComponent,
7569
- 'large-tiles': async () => (await import('./acorex-modules-document-management-large-tiles-view.component-q62xM-2p.mjs')).AXMDocumentExplorerLargeTilesViewComponent,
7570
- details: async () => (await import('./acorex-modules-document-management-details-view.component-CmHkM5fr.mjs')).AXMDocumentExplorerDetailsViewComponent,
7571
- 'large-icons': async () => (await import('./acorex-modules-document-management-large-icons-view.component-BWsNkndg.mjs')).AXMDocumentExplorerLargeIconsViewComponent,
7572
- 'small-icons': async () => (await import('./acorex-modules-document-management-small-icons-view.component-BrhcmGFl.mjs')).AXMDocumentExplorerSmallIconsViewComponent,
7573
- 'attachment': async () => (await import('./acorex-modules-document-management-attachment-widget.component-DctR7UvD.mjs')).AXMDocumentExplorerAttachmentComponent,
7574
- };
7575
- this.#effect = effect(() => {
7576
- if (this.vm.loadingFolderId() == null) {
7577
- setTimeout(() => {
7578
- this.contextMenu()?.refresh();
7579
- this.rootContextMenu()?.refresh();
7580
- }, 300);
7581
- }
7582
- }, ...(ngDevMode ? [{ debugName: "#effect" }] : []));
7583
- this.#effect2 = effect(() => {
7584
- if (this.viewMode()) {
7585
- this.vm.setViewMode(this.viewMode());
7586
- }
7587
- if (this.selectionMode()) {
7588
- this.vm.setSelectionMode(this.selectionMode());
7589
- }
7590
- }, ...(ngDevMode ? [{ debugName: "#effect2" }] : []));
7591
- this.#effect3 = effect(async () => {
7592
- const func = get$1(this.viewMap, this.vm.viewMode()) ?? this.viewMap['large-tiles'];
7593
- const comp = await func();
7594
- this.view.set(comp);
7595
- }, ...(ngDevMode ? [{ debugName: "#effect3" }] : []));
7596
- }
7597
- #effect;
7598
- #effect2;
7599
- #effect3;
7600
- //#region Menu and Context Menu
7601
- async handleContextMenuOnOpening(e) {
7602
- const node = get$1(e.targetElement, '__data__');
7603
- if (!node) {
7604
- return;
7605
- }
7606
- // Get menu items from ViewModel
7607
- const items = await this.vm.getNodeContextMenuItems(node);
7608
- // Set items directly to the context menu
7609
- e.items.push(...items);
7610
- }
7611
- async handleContextMenuRootOnOpening(e) {
7612
- //TODO: check async translate method in acorex
7613
- const items = [
7614
- ...(await this.vm.getFolderAddMenuItems()).map((m) => ({
7615
- ...m,
7616
- name: m.command?.name,
7617
- data: m.command?.options,
7618
- })),
7619
- ...(await this.vm.getFolderActionMenuItems()),
7620
- ];
7621
- const mappedItems = items.map((m) => ({
7622
- ...m,
7623
- text: m.title,
7624
- }));
7625
- e.items.push(...mappedItems);
7626
- e.items[e.items.length - 1].break = false;
7627
- }
7628
- async handleContextMenuItemClick(e) {
7629
- if (e.item.name) {
7630
- await this.vm.handleMenuItemClick(e.item.name, e.item.data);
7631
- }
7632
- }
7633
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentExplorerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7634
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AXMDocumentExplorerComponent, isStandalone: true, selector: "axm-document-explorer", inputs: { browseMode: { classPropertyName: "browseMode", publicName: "browseMode", isSignal: true, isRequired: false, transformFunction: null }, viewMode: { classPropertyName: "viewMode", publicName: "viewMode", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, showContextMenu: { classPropertyName: "showContextMenu", publicName: "showContextMenu", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["itemsContextMenu"], descendants: true, isSignal: true }, { propertyName: "rootContextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Empty State -->\n<div class=\"view-container\">\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@document-management:empty-states.no-items.title'\"\n [description]=\"'@document-management:empty-states.no-items.description'\"\n >\n </axp-state-message>\n } @else {\n <ng-container [ngComponentOutlet]=\"view()\"></ng-container>\n }\n</div>\n\n<!-- Context Menu -->\n@if (showContextMenu()) {\n <!-- Item Context Menu-->\n <ax-context-menu\n #itemsContextMenu\n [target]=\"'.__explorer-item'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n >\n </ax-context-menu>\n <!-- Root Context Menu-->\n <ax-context-menu\n #rootContextMenu\n [target]=\"'.view-container'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n >\n </ax-context-menu>\n}\n", styles: ["axm-document-explorer{display:flex;height:max-content;min-height:100%;width:100%;flex-direction:row;gap:1rem}axm-document-explorer>.view-container{display:flex;flex:1 1 0%;-webkit-user-select:none;user-select:none;flex-direction:column;gap:1rem}axm-document-explorer .animation-duration-2s{--fa-animation-duration: 2s}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i2$1.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "variant"] }], encapsulation: i0.ViewEncapsulation.None }); }
7635
- }
7636
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentExplorerComponent, decorators: [{
7637
- type: Component,
7638
- args: [{ selector: 'axm-document-explorer', standalone: true, encapsulation: ViewEncapsulation.None, imports: [
7639
- CommonModule,
7640
- RouterModule,
7641
- AXDecoratorModule,
7642
- AXLoadingModule,
7643
- AXFormatModule,
7644
- AXDateTimeModule,
7645
- AXMenuModule,
7646
- AXPStateMessageComponent,
7647
- ], template: "<!-- Empty State -->\n<div class=\"view-container\">\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@document-management:empty-states.no-items.title'\"\n [description]=\"'@document-management:empty-states.no-items.description'\"\n >\n </axp-state-message>\n } @else {\n <ng-container [ngComponentOutlet]=\"view()\"></ng-container>\n }\n</div>\n\n<!-- Context Menu -->\n@if (showContextMenu()) {\n <!-- Item Context Menu-->\n <ax-context-menu\n #itemsContextMenu\n [target]=\"'.__explorer-item'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n >\n </ax-context-menu>\n <!-- Root Context Menu-->\n <ax-context-menu\n #rootContextMenu\n [target]=\"'.view-container'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n >\n </ax-context-menu>\n}\n", styles: ["axm-document-explorer{display:flex;height:max-content;min-height:100%;width:100%;flex-direction:row;gap:1rem}axm-document-explorer>.view-container{display:flex;flex:1 1 0%;-webkit-user-select:none;user-select:none;flex-direction:column;gap:1rem}axm-document-explorer .animation-duration-2s{--fa-animation-duration: 2s}\n"] }]
7648
- }], propDecorators: { contextMenu: [{ type: i0.ViewChild, args: ['itemsContextMenu', { isSignal: true }] }], rootContextMenu: [{ type: i0.ViewChild, args: ['rootContextMenu', { isSignal: true }] }], browseMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "browseMode", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], showContextMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "showContextMenu", required: false }] }] } });
7649
-
7650
- class AXMFolderPathBreadcrumbsComponent {
7651
- constructor() {
7652
- this.vm = inject(AXPDocumentExplorerViewModel);
7653
- this.layout = inject(AXPLayoutThemeService);
7654
- }
7655
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMFolderPathBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7656
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AXMFolderPathBreadcrumbsComponent, isStandalone: true, selector: "axm-folder-path-breadcrumbs", ngImport: i0, template: "<!-- Breadcrumbs Section -->\n<div class=\"__breadcrumb ax-xs\">\n <!-- Desktop Breadcrumb -->\n @for (item of vm.currentPath(); track item.id; let i = $index;let last = $last) {\n <!-- Navigation Button -->\n <ax-button look=\"blank\" (onClick)=\"vm.navigateToFolder(item.id)\" [text]=\"item.name\" [disabled]=\"last\">\n @if(i === 0) {\n <ax-icon icon=\"fa-light fa-cloud\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-folder-closed\"></ax-icon>\n }\n </ax-button>\n <!-- Separator -->\n @if(!last) {\n <i class=\"far fa-chevron-right rtl:ax-rotate-180 fa-fw fa-xs ax-me-2\"></i>\n }\n <!-- End Navigation Button -->\n }\n</div>\n", styles: [":host{display:flex;width:100%;align-items:center}:host .__nav{display:flex;flex-direction:row;align-items:center;gap:.25rem;border-inline-end-width:1px;padding-inline-start:.25rem;padding-inline-end:.5rem}:host .__breadcrumb{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;padding-inline-start:.5rem;padding-inline-end:.25rem}:host .__breadcrumb .ax-state-disabled button,:host .__breadcrumb .ax-state-loading button{cursor:default!important}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }] }); }
7657
- }
7658
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMFolderPathBreadcrumbsComponent, decorators: [{
7659
- type: Component,
7660
- args: [{ selector: 'axm-folder-path-breadcrumbs', standalone: true, imports: [
7661
- AXButtonModule,
7662
- AXDecoratorModule,
7663
- ], template: "<!-- Breadcrumbs Section -->\n<div class=\"__breadcrumb ax-xs\">\n <!-- Desktop Breadcrumb -->\n @for (item of vm.currentPath(); track item.id; let i = $index;let last = $last) {\n <!-- Navigation Button -->\n <ax-button look=\"blank\" (onClick)=\"vm.navigateToFolder(item.id)\" [text]=\"item.name\" [disabled]=\"last\">\n @if(i === 0) {\n <ax-icon icon=\"fa-light fa-cloud\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-folder-closed\"></ax-icon>\n }\n </ax-button>\n <!-- Separator -->\n @if(!last) {\n <i class=\"far fa-chevron-right rtl:ax-rotate-180 fa-fw fa-xs ax-me-2\"></i>\n }\n <!-- End Navigation Button -->\n }\n</div>\n", styles: [":host{display:flex;width:100%;align-items:center}:host .__nav{display:flex;flex-direction:row;align-items:center;gap:.25rem;border-inline-end-width:1px;padding-inline-start:.25rem;padding-inline-end:.5rem}:host .__breadcrumb{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;padding-inline-start:.5rem;padding-inline-end:.25rem}:host .__breadcrumb .ax-state-disabled button,:host .__breadcrumb .ax-state-loading button{cursor:default!important}\n"] }]
7664
- }] });
7665
-
7666
- const UploadFromDriveHookProvider = {
7667
- key: 'file-uploader.actions',
7668
- priority: 0,
7669
- execute: (payload) => {
7670
- const driveService = inject(AXMDocumentManagerService);
7671
- const fileStorageService = inject(AXPFileStorageService);
7672
- const translationService = inject(AXTranslationService);
7673
- const dialogService = inject(AXDialogService);
7674
- payload.actions = [
7675
- ...payload.actions,
7676
- {
7677
- plugin: 'upload-document-from-drive',
7678
- global: true,
7679
- textKey: '@document-management:actions.choose-from-drive',
7680
- icon: 'fa-light fa-file-arrow-up',
7681
- run: async ({ host }) => {
7682
- const result = await driveService.showChooseFileDialog(AXPPlatformScope.Tenant);
7683
- if (!result || result.length === 0) {
7684
- return;
7685
- }
7686
- // Show confirm dialog for clone option
7687
- // Yes/Okay -> clone, No/Cancel -> by-reference
7688
- const dialogTitle = await translationService.translateAsync('@document-management:actions.upload-options.title');
7689
- const dialogMessage = await translationService.translateAsync('@document-management:actions.upload-options.confirm-message');
7690
- const dialogResult = await dialogService.confirm(dialogTitle, dialogMessage, 'primary', 'horizontal', false, 'cancel');
7691
- // Yes/Okay -> clone, No/Cancel -> by-reference
7692
- const attachmentType = dialogResult.result ? 'clone' : 'by-reference';
7693
- // Add files to host with uploading status
7694
- host.setValue([
7695
- ...(host.getValue() ?? []),
7696
- ...result.map((item) => ({
7697
- ...(item.fileId ?? {}),
7698
- status: 'uploading',
7699
- })),
7700
- ]);
7701
- // Process files based on attachment type
7702
- for await (const item of result) {
7703
- if (item.type === 'folder') {
7704
- continue;
7705
- }
7706
- const currentFiles = host.getValue();
7707
- const fileIndex = currentFiles.findIndex((f) => f.id === (item.fileId?.id ?? ''));
7708
- if (fileIndex === -1) {
7709
- continue;
7710
- }
7711
- if (attachmentType === 'by-reference') {
7712
- // By reference: just set documentId
7713
- const updatedFiles = [...currentFiles];
7714
- updatedFiles[fileIndex] = {
7715
- ...updatedFiles[fileIndex],
7716
- status: 'attached',
7717
- source: {
7718
- kind: 'reference',
7719
- value: {
7720
- id: item.id,
7721
- type: 'document',
7722
- },
7723
- },
7724
- };
7725
- host.setValue(updatedFiles);
7726
- }
7727
- else {
7728
- // Clone: get file info and create blob
7729
- try {
7730
- const storageInfo = await fileStorageService.getInfo(item.fileId?.id ?? '');
7731
- if (!storageInfo) {
7732
- const currentFiles = host.getValue();
7733
- host.setValue(currentFiles.filter((f) => f.id !== (item.fileId?.id ?? '')));
7734
- continue;
7735
- }
7736
- const updatedFiles = [...currentFiles];
7737
- updatedFiles[fileIndex] = {
7738
- ...updatedFiles[fileIndex],
7739
- id: AXPDataGenerator.uuid(),
7740
- status: 'attached',
7741
- source: {
7742
- kind: 'blob',
7743
- value: new Blob([storageInfo.binary], { type: storageInfo.mimeType }),
7744
- },
7745
- };
7746
- host.setValue(updatedFiles);
7747
- }
7748
- catch {
7749
- const currentFiles = host.getValue();
7750
- host.setValue(currentFiles.filter((f) => f.id !== (item.fileId?.id ?? '')));
7751
- }
7752
- }
7753
- }
7754
- },
7755
- },
7756
- ];
7757
- return payload;
7758
- },
7759
- };
7760
-
7761
- class AXMDriveChooseModule {
7762
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDriveChooseModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7763
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: AXMDriveChooseModule }); }
7764
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDriveChooseModule, providers: [
7765
- { provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, useValue: UploadFromDriveHookProvider, multi: true }
7766
- ] }); }
7767
- }
7768
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDriveChooseModule, decorators: [{
7769
- type: NgModule,
7770
- args: [{
7771
- imports: [],
7772
- providers: [
7773
- { provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, useValue: UploadFromDriveHookProvider, multi: true }
7774
- ]
7775
- }]
7776
- }] });
7777
-
7778
- /**
7779
- * Action to show document distribution popup
7780
- */
7781
- class AXMDocumentDistributionPopupAction extends AXPWorkflowAction {
7782
- constructor() {
7783
- super(...arguments);
7784
- this.translationService = inject(AXTranslationService);
7785
- this.layoutBuilder = inject(AXPLayoutBuilderService);
7786
- }
7787
- async execute(context) {
7788
- const documentId = context.getVariable('options.id');
7789
- const documentTitle = context.getVariable('options.title');
7790
- const dialogTitle = await this.translationService.translateAsync('@document-management:workflows.document-distribution.title', { params: { title: documentTitle } });
7791
- const dialogRef = await this.layoutBuilder
7792
- .create()
7793
- .dialog(dialog => {
7794
- dialog
7795
- .setTitle(dialogTitle)
7796
- .setSize('md')
7797
- .setContext({ assignedTo: [] })
7798
- .content(flex => {
7799
- flex
7800
- .setDirection('column')
7801
- .formField('@document-management:actions.distribute', field => {
7802
- field.path('assignedTo');
7803
- field.lookupBox({
7804
- entity: 'SecurityManagement.User',
7805
- multiple: true,
7806
- look: 'lookup',
7807
- validations: [{ rule: 'required' }],
7808
- });
7809
- });
7810
- })
7811
- .setActions(actions => {
7812
- actions.cancel('@general:actions.cancel.title');
7813
- const submitAction = {
7814
- title: '@document-management:actions.distribute',
7815
- color: 'primary',
7816
- command: { name: 'submit', options: { validate: true } },
7817
- };
7818
- actions.custom(submitAction);
7819
- });
7820
- })
7821
- .show();
7822
- const action = dialogRef.action();
7823
- if (action === 'cancel') {
7824
- context.setOutput('confirmed', false);
7825
- return;
7826
- }
7827
- const ctx = dialogRef.context();
7828
- const confirmed = Array.isArray(ctx?.assignedTo) && ctx.assignedTo.length > 0;
7829
- context.setOutput('confirmed', confirmed);
7830
- if (confirmed) {
7831
- context.setOutput('assignedTo', ctx.assignedTo);
7832
- }
7833
- }
7834
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentDistributionPopupAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
7835
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentDistributionPopupAction }); }
7836
- }
7837
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentDistributionPopupAction, decorators: [{
7838
- type: Injectable
7839
- }] });
7840
- /**
7841
- * Action to create distribution records and update document status
7842
- */
7843
- class AXMCreateDistributionRecordsAction extends AXPWorkflowAction {
7844
- constructor() {
7845
- super(...arguments);
7846
- this.documentService = inject(AXMDocumentService);
7847
- this.distributionService = inject(AXMDistributionService);
7848
- }
7849
- async execute(context) {
6507
+ try {
6508
+ await driveService.copy(node);
6509
+ await this.refresh();
6510
+ }
6511
+ catch (error) {
6512
+ console.error('Error copying node:', error);
6513
+ }
6514
+ }
6515
+ },
6516
+ /**
6517
+ * Checks if a node is locked
6518
+ */
6519
+ async isLocked(node) {
7850
6520
  try {
7851
- const documentId = context.getVariable('options.id');
7852
- const assignedTo = context.getOutput('assignedTo');
7853
- const document = await this.documentService.getOne(documentId);
7854
- this.distributionService.insertOne({
7855
- documentId,
7856
- version: document.version,
7857
- assignedTo,
7858
- });
7859
- // Update document status to Distributed
7860
- await this.documentService.updateOne(documentId, {
7861
- status: 'Distributed',
6521
+ return lockService.check({
6522
+ refId: node.id,
6523
+ refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,
7862
6524
  });
7863
- context.setOutput('success', true);
7864
- context.setOutput('distributionCount', assignedTo.length);
7865
6525
  }
7866
6526
  catch (error) {
7867
- context.setOutput('success', false);
7868
- context.setOutput('error', error);
6527
+ console.error('Error checking lock status:', error);
6528
+ return false;
7869
6529
  }
7870
- }
7871
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMCreateDistributionRecordsAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
7872
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMCreateDistributionRecordsAction }); }
7873
- }
7874
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMCreateDistributionRecordsAction, decorators: [{
7875
- type: Injectable
7876
- }] });
7877
- /**
7878
- * Workflow for distributing documents to users
7879
- */
7880
- const AXMDocumentDistributionWorkflow = {
7881
- startStepId: 'show-distribution-popup',
7882
- steps: {
7883
- 'show-distribution-popup': {
7884
- id: 'show-distribution-popup',
7885
- action: 'AXMDocumentDistributionPopupAction',
7886
- nextSteps: [
7887
- {
7888
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("confirmed") == true' }],
7889
- nextStepId: 'create-distributions',
7890
- },
7891
- ],
7892
- },
7893
- 'create-distributions': {
7894
- id: 'create-distributions',
7895
- action: 'AXMCreateDistributionRecordsAction',
7896
- nextSteps: [
7897
- {
7898
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("success") == true' }],
7899
- nextStepId: 'show-success',
7900
- },
7901
- {
7902
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("success") == false' }],
7903
- nextStepId: 'show-error',
7904
- },
7905
- ],
7906
- },
7907
- 'show-success': {
7908
- id: 'show-success',
7909
- action: 'AXPToastAction',
7910
- input: {
7911
- color: 'success',
7912
- title: 'document-distribution.success.title',
7913
- content: 'document-distribution.success.message',
7914
- },
7915
- nextSteps: [
7916
- {
7917
- conditions: [],
7918
- nextStepId: 'reload-entity',
7919
- },
7920
- ],
7921
- },
7922
- 'show-error': {
7923
- id: 'show-error',
7924
- action: 'AXPToastAction',
7925
- input: {
7926
- color: 'danger',
7927
- title: 'document-distribution.error.title',
7928
- content: 'document-distribution.error.message',
7929
- },
7930
- },
7931
- 'reload-entity': {
7932
- id: 'reload-entity',
7933
- action: 'reload',
7934
- },
7935
6530
  },
7936
- };
7937
-
7938
- /**
7939
- * Action to show confirmation dialog for sending document to review
7940
- */
7941
- class AXMSendToReviewConfirmAction extends AXPWorkflowAction {
7942
- constructor() {
7943
- super(...arguments);
7944
- this.translationService = inject(AXTranslationService);
7945
- this.layoutBuilder = inject(AXPLayoutBuilderService);
7946
- }
7947
- async execute(context) {
7948
- const documentId = context.getVariable('options.id');
7949
- const documentTitle = context.getVariable('options.title');
7950
- const dialogTitle = await this.translationService.translateAsync('@document-management:workflows.document-review.confirm-send.title', { params: { title: documentTitle } });
7951
- const dialogRef = await this.layoutBuilder
7952
- .create()
7953
- .dialog(dialog => {
7954
- dialog
7955
- .setTitle(dialogTitle)
7956
- .setSize('sm')
7957
- .setContext({ assignedTo: undefined })
7958
- .content(flex => {
7959
- flex
7960
- .setDirection('column')
7961
- .formField('@document-management:workflows.document-review.send-review.title', field => {
7962
- field.path('assignedTo');
7963
- field.lookupBox({
7964
- entity: 'SecurityManagement.User',
7965
- multiple: false,
7966
- look: 'lookup',
7967
- validations: [{ rule: 'required' }],
7968
- });
7969
- });
7970
- })
7971
- .setActions(actions => {
7972
- actions.cancel('@general:actions.cancel.title');
7973
- const submitAction = {
7974
- title: '@document-management:workflows.document-review.send-review.title',
7975
- color: 'primary',
7976
- command: { name: 'submit', options: { validate: true } },
7977
- };
7978
- actions.custom(submitAction);
7979
- });
7980
- })
7981
- .show();
7982
- const action = dialogRef.action();
7983
- if (action === 'cancel') {
7984
- context.setOutput('confirmed', false);
7985
- return;
6531
+ /**
6532
+ * Locks a node
6533
+ */
6534
+ async lock(node) {
6535
+ const locked = await driveService.showLockDialog(node);
6536
+ if (locked) {
6537
+ await this.refresh();
7986
6538
  }
7987
- const ctx = dialogRef.context();
7988
- context.setOutput('confirmed', true);
7989
- dialogRef.close();
7990
- context.setVariable('assignTo', ctx?.assignedTo);
7991
- }
7992
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMSendToReviewConfirmAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
7993
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMSendToReviewConfirmAction }); }
7994
- }
7995
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMSendToReviewConfirmAction, decorators: [{
7996
- type: Injectable
7997
- }] });
7998
- /**
7999
- * Action to update document status to PendingReview
8000
- */
8001
- class AXMUpdateDocumentStatusAction extends AXPWorkflowAction {
8002
- constructor() {
8003
- super(...arguments);
8004
- this.documentService = inject(AXMDocumentService);
8005
- this.reviewService = inject(AXMReviewService);
8006
- }
8007
- async execute(context) {
8008
- try {
8009
- const documentId = context.getVariable('options.id');
8010
- const document = await this.documentService.getOne(documentId);
8011
- const reviewRecordID = await this.reviewService.insertOne({
8012
- documentId: documentId,
8013
- reviewStatus: 'Pending',
8014
- version: document.version ?? 0,
8015
- modifiedAt: document?.updated?.at,
8016
- modifiedBy: document?.updated?.user?.id ?? '',
8017
- reviewerId: context.getVariable('assignTo'),
8018
- });
8019
- await this.documentService.updateOne(documentId, {
8020
- status: 'PendingReview',
8021
- reviewRecordId: reviewRecordID,
8022
- });
8023
- context.setOutput('success', true);
6539
+ },
6540
+ /**
6541
+ * Unlocks a node
6542
+ */
6543
+ async unlock(node) {
6544
+ const unlocked = await driveService.showUnlockDialog(node);
6545
+ if (unlocked) {
6546
+ await this.refresh();
8024
6547
  }
8025
- catch (error) {
8026
- context.setOutput('success', false);
8027
- context.setOutput('error', error);
6548
+ },
6549
+ /**
6550
+ * Moves a node to a different location
6551
+ */
6552
+ async moveTo(node) {
6553
+ if (node) {
6554
+ const result = await driveService.moveTo({ browseMode: 'folder', node: node, scope: store.scope() });
6555
+ if (result) {
6556
+ await this.refresh();
6557
+ }
8028
6558
  }
8029
- }
8030
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMUpdateDocumentStatusAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
8031
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMUpdateDocumentStatusAction }); }
8032
- }
8033
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMUpdateDocumentStatusAction, decorators: [{
8034
- type: Injectable
8035
- }] });
8036
- // Note: Using AXPToastAction from platform/common instead of custom toast action
8037
- /**
8038
- * Workflow for sending document to review
8039
- */
8040
- const AXMSendToReviewWorkflow = {
8041
- startStepId: 'confirm-send',
8042
- steps: {
8043
- 'confirm-send': {
8044
- id: 'confirm-send',
8045
- action: 'AXMSendToReviewConfirmAction',
8046
- nextSteps: [
8047
- {
8048
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("confirmed") == true' }],
8049
- nextStepId: 'update-status',
8050
- },
8051
- ],
8052
- },
8053
- 'update-status': {
8054
- id: 'update-status',
8055
- action: 'AXMUpdateDocumentStatusAction',
8056
- nextSteps: [
8057
- {
8058
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("success") == true' }],
8059
- nextStepId: 'reload-entity',
8060
- },
8061
- {
8062
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("success") == false' }],
8063
- nextStepId: 'show-error',
8064
- },
8065
- ],
8066
- },
8067
- 'reload-entity': {
8068
- id: 'reload-entity',
8069
- action: 'reload',
8070
- },
8071
- 'show-success': {
8072
- id: 'show-success',
8073
- action: 'AXPToastAction',
8074
- input: {
8075
- color: 'success',
8076
- title: 'document-review.send-review.success',
8077
- content: 'document-review.send-review.success',
8078
- },
8079
- },
8080
- 'show-error': {
8081
- id: 'show-error',
8082
- action: 'AXPToastAction',
8083
- input: {
8084
- color: 'danger',
8085
- title: 'document-review.send-review.error',
8086
- content: 'document-review.send-review.error',
8087
- },
8088
- },
8089
6559
  },
8090
- };
8091
- class AXMChangeEntityAction extends AXPWorkflowAction {
8092
- async execute(context) {
8093
- context.setVariable('entity', `${RootConfig.module.name}.${RootConfig.entities.document.name}`);
8094
- }
8095
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMChangeEntityAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
8096
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMChangeEntityAction }); }
8097
- }
8098
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMChangeEntityAction, decorators: [{
8099
- type: Injectable
8100
- }] });
8101
- /**
8102
- * Workflow for submitting review
8103
- */
8104
- const AXMSubmitReviewWorkflow = {
8105
- startStepId: 'open-review-entity',
8106
- steps: {
8107
- 'open-review-entity': {
8108
- action: 'start-workflow',
8109
- input: {
8110
- workflow: 'quick-modify-entity',
8111
- context: {
8112
- entity: `${RootConfig.module.name}.${RootConfig.entities.review.name}`,
8113
- data: {
8114
- id: '{{ context.getVariable("options.id") }}',
8115
- },
8116
- },
8117
- },
8118
- nextSteps: [
8119
- {
8120
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("result") == true' }],
8121
- nextStepId: 'change-entity',
8122
- },
8123
- {
8124
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("result") == false' }],
8125
- nextStepId: 'show-error',
8126
- },
8127
- ],
8128
- },
8129
- 'change-entity': {
8130
- id: 'change-entity',
8131
- action: 'AXMChangeEntityAction',
8132
- nextSteps: [
8133
- {
8134
- nextStepId: 'reload-entity',
8135
- conditions: [],
8136
- },
8137
- ],
8138
- },
8139
- 'reload-entity': {
8140
- id: 'reload-entity',
8141
- action: 'reload',
8142
- },
6560
+ /**
6561
+ * Copies a node to a different location
6562
+ */
6563
+ async copyTo(node) {
6564
+ if (node) {
6565
+ const result = await driveService.copyTo({ browseMode: 'folder', node: node, scope: store.scope() });
6566
+ if (result) {
6567
+ await this.refresh();
6568
+ }
6569
+ }
8143
6570
  },
8144
- };
6571
+ /**
6572
+ * Uploads a file by type
6573
+ */
6574
+ async uploadFileByType(folderId, documentTypeId) {
6575
+ await driveService.uploadFileByType(folderId, documentTypeId);
6576
+ await this.refresh();
6577
+ },
6578
+ //#endregion
6579
+ })));
8145
6580
 
8146
- /**
8147
- * Action to show document signature popup
8148
- */
8149
- class AXMDocumentSignaturePopupAction extends AXPWorkflowAction {
6581
+ class AXMDocumentExplorerComponent {
8150
6582
  constructor() {
8151
- super(...arguments);
8152
- this.popupService = inject(AXPopupService);
8153
- this.translationService = inject(AXTranslationService);
6583
+ this.vm = inject(AXPDocumentExplorerViewModel);
6584
+ this.contextMenu = viewChild('itemsContextMenu', ...(ngDevMode ? [{ debugName: "contextMenu" }] : []));
6585
+ this.rootContextMenu = viewChild('rootContextMenu', ...(ngDevMode ? [{ debugName: "rootContextMenu" }] : []));
6586
+ this.driveService = inject(AXMDocumentManagerService);
6587
+ this.translateService = inject(AXTranslationService);
6588
+ this.layout = inject(AXPLayoutThemeService);
6589
+ this.browseMode = input('file', ...(ngDevMode ? [{ debugName: "browseMode" }] : []));
6590
+ this.viewMode = input(...(ngDevMode ? [undefined, { debugName: "viewMode" }] : []));
6591
+ this.selectionMode = input('none', ...(ngDevMode ? [{ debugName: "selectionMode" }] : []));
6592
+ this.showContextMenu = input(true, ...(ngDevMode ? [{ debugName: "showContextMenu" }] : []));
6593
+ this.view = signal(null, ...(ngDevMode ? [{ debugName: "view" }] : []));
6594
+ this.viewMap = {
6595
+ list: async () => (await import('./acorex-modules-document-management-list-view.component-DfKTfE-z.mjs')).AXMDocumentExplorerListViewComponent,
6596
+ 'small-tiles': async () => (await import('./acorex-modules-document-management-small-tiles-view.component-CVemmAlG.mjs')).AXMDocumentExplorerSmallTilesViewComponent,
6597
+ 'large-tiles': async () => (await import('./acorex-modules-document-management-large-tiles-view.component-q62xM-2p.mjs')).AXMDocumentExplorerLargeTilesViewComponent,
6598
+ details: async () => (await import('./acorex-modules-document-management-details-view.component-CmHkM5fr.mjs')).AXMDocumentExplorerDetailsViewComponent,
6599
+ 'large-icons': async () => (await import('./acorex-modules-document-management-large-icons-view.component-BWsNkndg.mjs')).AXMDocumentExplorerLargeIconsViewComponent,
6600
+ 'small-icons': async () => (await import('./acorex-modules-document-management-small-icons-view.component-BrhcmGFl.mjs')).AXMDocumentExplorerSmallIconsViewComponent,
6601
+ 'attachment': async () => (await import('./acorex-modules-document-management-attachment-widget.component-DctR7UvD.mjs')).AXMDocumentExplorerAttachmentComponent,
6602
+ };
6603
+ this.#effect = effect(() => {
6604
+ if (this.vm.loadingFolderId() == null) {
6605
+ setTimeout(() => {
6606
+ this.contextMenu()?.refresh();
6607
+ this.rootContextMenu()?.refresh();
6608
+ }, 300);
6609
+ }
6610
+ }, ...(ngDevMode ? [{ debugName: "#effect" }] : []));
6611
+ this.#effect2 = effect(() => {
6612
+ if (this.viewMode()) {
6613
+ this.vm.setViewMode(this.viewMode());
6614
+ }
6615
+ if (this.selectionMode()) {
6616
+ this.vm.setSelectionMode(this.selectionMode());
6617
+ }
6618
+ }, ...(ngDevMode ? [{ debugName: "#effect2" }] : []));
6619
+ this.#effect3 = effect(async () => {
6620
+ const func = get$1(this.viewMap, this.vm.viewMode()) ?? this.viewMap['large-tiles'];
6621
+ const comp = await func();
6622
+ this.view.set(comp);
6623
+ }, ...(ngDevMode ? [{ debugName: "#effect3" }] : []));
6624
+ }
6625
+ #effect;
6626
+ #effect2;
6627
+ #effect3;
6628
+ //#region Menu and Context Menu
6629
+ async handleContextMenuOnOpening(e) {
6630
+ const node = get$1(e.targetElement, '__data__');
6631
+ if (!node) {
6632
+ return;
6633
+ }
6634
+ // Get menu items from ViewModel
6635
+ const items = await this.vm.getNodeContextMenuItems(node);
6636
+ // Set items directly to the context menu
6637
+ e.items.push(...items);
6638
+ }
6639
+ async handleContextMenuRootOnOpening(e) {
6640
+ //TODO: check async translate method in acorex
6641
+ const items = [
6642
+ ...(await this.vm.getFolderAddMenuItems()).map((m) => ({
6643
+ ...m,
6644
+ name: m.command?.name,
6645
+ data: m.command?.options,
6646
+ })),
6647
+ ...(await this.vm.getFolderActionMenuItems()),
6648
+ ];
6649
+ const mappedItems = items.map((m) => ({
6650
+ ...m,
6651
+ text: m.title,
6652
+ }));
6653
+ e.items.push(...mappedItems);
6654
+ e.items[e.items.length - 1].break = false;
8154
6655
  }
8155
- async execute(context) {
8156
- const documentId = context.getVariable('options.id');
8157
- const documentTitle = context.getVariable('options.title');
8158
- const fileId = context.getVariable('options.fileId');
8159
- const comp = await import('./acorex-modules-document-management-document-signature-popup.component-Stt6Gx2C.mjs')
8160
- .then(x => x.AXMDocumentSignaturePopupComponent);
8161
- console.log(fileId);
8162
- const result = await this.popupService.open(comp, {
8163
- title: await this.translationService.translateAsync('@document-management:workflows.document-signature.title', {
8164
- params: { title: documentTitle }
8165
- }),
8166
- size: 'md',
8167
- data: {
8168
- documentId,
8169
- documentTitle,
8170
- fileId
8171
- }
8172
- });
8173
- context.setOutput('confirmed', result.data?.confirmed || false);
8174
- if (result.data?.confirmed) {
8175
- context.setOutput('signature', result.data.signature);
6656
+ async handleContextMenuItemClick(e) {
6657
+ if (e.item.name) {
6658
+ await this.vm.handleMenuItemClick(e.item.name, e.item.data);
8176
6659
  }
8177
6660
  }
8178
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentSignaturePopupAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
8179
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentSignaturePopupAction }); }
6661
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentExplorerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6662
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AXMDocumentExplorerComponent, isStandalone: true, selector: "axm-document-explorer", inputs: { browseMode: { classPropertyName: "browseMode", publicName: "browseMode", isSignal: true, isRequired: false, transformFunction: null }, viewMode: { classPropertyName: "viewMode", publicName: "viewMode", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, showContextMenu: { classPropertyName: "showContextMenu", publicName: "showContextMenu", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["itemsContextMenu"], descendants: true, isSignal: true }, { propertyName: "rootContextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Empty State -->\n<div class=\"view-container\">\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@document-management:empty-states.no-items.title'\"\n [description]=\"'@document-management:empty-states.no-items.description'\"\n >\n </axp-state-message>\n } @else {\n <ng-container [ngComponentOutlet]=\"view()\"></ng-container>\n }\n</div>\n\n<!-- Context Menu -->\n@if (showContextMenu()) {\n <!-- Item Context Menu-->\n <ax-context-menu\n #itemsContextMenu\n [target]=\"'.__explorer-item'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n >\n </ax-context-menu>\n <!-- Root Context Menu-->\n <ax-context-menu\n #rootContextMenu\n [target]=\"'.view-container'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n >\n </ax-context-menu>\n}\n", styles: ["axm-document-explorer{display:flex;height:max-content;min-height:100%;width:100%;flex-direction:row;gap:1rem}axm-document-explorer>.view-container{display:flex;flex:1 1 0%;-webkit-user-select:none;user-select:none;flex-direction:column;gap:1rem}axm-document-explorer .animation-duration-2s{--fa-animation-duration: 2s}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i2$1.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "variant"] }], encapsulation: i0.ViewEncapsulation.None }); }
8180
6663
  }
8181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentSignaturePopupAction, decorators: [{
8182
- type: Injectable
8183
- }] });
8184
- /**
8185
- * Action to save signature interaction to database
8186
- */
8187
- class AXMSaveSignatureInteractionAction extends AXPWorkflowAction {
6664
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentExplorerComponent, decorators: [{
6665
+ type: Component,
6666
+ args: [{ selector: 'axm-document-explorer', standalone: true, encapsulation: ViewEncapsulation.None, imports: [
6667
+ CommonModule,
6668
+ RouterModule,
6669
+ AXDecoratorModule,
6670
+ AXLoadingModule,
6671
+ AXFormatModule,
6672
+ AXDateTimeModule,
6673
+ AXMenuModule,
6674
+ AXPStateMessageComponent,
6675
+ ], template: "<!-- Empty State -->\n<div class=\"view-container\">\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@document-management:empty-states.no-items.title'\"\n [description]=\"'@document-management:empty-states.no-items.description'\"\n >\n </axp-state-message>\n } @else {\n <ng-container [ngComponentOutlet]=\"view()\"></ng-container>\n }\n</div>\n\n<!-- Context Menu -->\n@if (showContextMenu()) {\n <!-- Item Context Menu-->\n <ax-context-menu\n #itemsContextMenu\n [target]=\"'.__explorer-item'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n >\n </ax-context-menu>\n <!-- Root Context Menu-->\n <ax-context-menu\n #rootContextMenu\n [target]=\"'.view-container'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n >\n </ax-context-menu>\n}\n", styles: ["axm-document-explorer{display:flex;height:max-content;min-height:100%;width:100%;flex-direction:row;gap:1rem}axm-document-explorer>.view-container{display:flex;flex:1 1 0%;-webkit-user-select:none;user-select:none;flex-direction:column;gap:1rem}axm-document-explorer .animation-duration-2s{--fa-animation-duration: 2s}\n"] }]
6676
+ }], propDecorators: { contextMenu: [{ type: i0.ViewChild, args: ['itemsContextMenu', { isSignal: true }] }], rootContextMenu: [{ type: i0.ViewChild, args: ['rootContextMenu', { isSignal: true }] }], browseMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "browseMode", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], showContextMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "showContextMenu", required: false }] }] } });
6677
+
6678
+ class AXMFolderPathBreadcrumbsComponent {
8188
6679
  constructor() {
8189
- super(...arguments);
8190
- this.distributionInteractionService = inject(AXMDistributionInteractionService);
8191
- }
8192
- async execute(context) {
8193
- try {
8194
- const documentId = context.getVariable('options.id');
8195
- const signature = context.getOutput('signature');
8196
- // TODO: Get current user ID from auth service or context
8197
- // For now using a placeholder - this should be replaced with actual user service
8198
- const currentUserId = 'current-user-id';
8199
- // Create signature interaction record
8200
- const distributionInteractionData = {
8201
- documentDistributionId: documentId, // TODO: This should map to actual distribution ID
8202
- userId: currentUserId,
8203
- action: 'Signed',
8204
- actionTime: new Date(),
8205
- signatureType: 'Digital',
8206
- signatureData: signature,
8207
- };
8208
- await this.distributionInteractionService.insertOne(distributionInteractionData);
8209
- context.setOutput('success', true);
8210
- }
8211
- catch (error) {
8212
- context.setOutput('success', false);
8213
- context.setOutput('error', error);
8214
- }
6680
+ this.vm = inject(AXPDocumentExplorerViewModel);
6681
+ this.layout = inject(AXPLayoutThemeService);
8215
6682
  }
8216
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMSaveSignatureInteractionAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
8217
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMSaveSignatureInteractionAction }); }
6683
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMFolderPathBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6684
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AXMFolderPathBreadcrumbsComponent, isStandalone: true, selector: "axm-folder-path-breadcrumbs", ngImport: i0, template: "<!-- Breadcrumbs Section -->\n<div class=\"__breadcrumb ax-xs\">\n <!-- Desktop Breadcrumb -->\n @for (item of vm.currentPath(); track item.id; let i = $index;let last = $last) {\n <!-- Navigation Button -->\n <ax-button look=\"blank\" (onClick)=\"vm.navigateToFolder(item.id)\" [text]=\"item.name\" [disabled]=\"last\">\n @if(i === 0) {\n <ax-icon icon=\"fa-light fa-cloud\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-folder-closed\"></ax-icon>\n }\n </ax-button>\n <!-- Separator -->\n @if(!last) {\n <i class=\"far fa-chevron-right rtl:ax-rotate-180 fa-fw fa-xs ax-me-2\"></i>\n }\n <!-- End Navigation Button -->\n }\n</div>\n", styles: [":host{display:flex;width:100%;align-items:center}:host .__nav{display:flex;flex-direction:row;align-items:center;gap:.25rem;border-inline-end-width:1px;padding-inline-start:.25rem;padding-inline-end:.5rem}:host .__breadcrumb{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;padding-inline-start:.5rem;padding-inline-end:.25rem}:host .__breadcrumb .ax-state-disabled button,:host .__breadcrumb .ax-state-loading button{cursor:default!important}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }] }); }
8218
6685
  }
8219
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMSaveSignatureInteractionAction, decorators: [{
8220
- type: Injectable
6686
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMFolderPathBreadcrumbsComponent, decorators: [{
6687
+ type: Component,
6688
+ args: [{ selector: 'axm-folder-path-breadcrumbs', standalone: true, imports: [
6689
+ AXButtonModule,
6690
+ AXDecoratorModule,
6691
+ ], template: "<!-- Breadcrumbs Section -->\n<div class=\"__breadcrumb ax-xs\">\n <!-- Desktop Breadcrumb -->\n @for (item of vm.currentPath(); track item.id; let i = $index;let last = $last) {\n <!-- Navigation Button -->\n <ax-button look=\"blank\" (onClick)=\"vm.navigateToFolder(item.id)\" [text]=\"item.name\" [disabled]=\"last\">\n @if(i === 0) {\n <ax-icon icon=\"fa-light fa-cloud\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-folder-closed\"></ax-icon>\n }\n </ax-button>\n <!-- Separator -->\n @if(!last) {\n <i class=\"far fa-chevron-right rtl:ax-rotate-180 fa-fw fa-xs ax-me-2\"></i>\n }\n <!-- End Navigation Button -->\n }\n</div>\n", styles: [":host{display:flex;width:100%;align-items:center}:host .__nav{display:flex;flex-direction:row;align-items:center;gap:.25rem;border-inline-end-width:1px;padding-inline-start:.25rem;padding-inline-end:.5rem}:host .__breadcrumb{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;padding-inline-start:.5rem;padding-inline-end:.25rem}:host .__breadcrumb .ax-state-disabled button,:host .__breadcrumb .ax-state-loading button{cursor:default!important}\n"] }]
8221
6692
  }] });
8222
- /**
8223
- * Workflow for document signature process
8224
- */
8225
- const AXMDocumentSignatureWorkflow = {
8226
- startStepId: 'show-signature-popup',
8227
- steps: {
8228
- 'show-signature-popup': {
8229
- id: 'show-signature-popup',
8230
- action: 'AXMDocumentSignaturePopupAction',
8231
- nextSteps: [
8232
- {
8233
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("confirmed") == true' }],
8234
- nextStepId: 'save-signature',
8235
- },
8236
- ],
8237
- },
8238
- 'save-signature': {
8239
- id: 'save-signature',
8240
- action: 'AXMSaveSignatureInteractionAction',
8241
- nextSteps: [
8242
- {
8243
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("success") == true' }],
8244
- nextStepId: 'show-success',
8245
- },
8246
- {
8247
- conditions: [{ type: 'SINGLE', expression: 'context.getOutput("success") == false' }],
8248
- nextStepId: 'show-error',
8249
- },
8250
- ],
8251
- },
8252
- 'show-success': {
8253
- id: 'show-success',
8254
- action: 'AXPToastAction',
8255
- input: {
8256
- color: 'success',
8257
- title: 'document-signature.success.title',
8258
- content: 'document-signature.success.message',
8259
- },
8260
- nextSteps: [
8261
- {
8262
- conditions: [],
8263
- nextStepId: 'reload-entity',
6693
+
6694
+ const UploadFromDriveHookProvider = {
6695
+ key: 'file-uploader.actions',
6696
+ priority: 0,
6697
+ execute: (payload) => {
6698
+ const driveService = inject(AXMDocumentManagerService);
6699
+ const fileStorageService = inject(AXPFileStorageService);
6700
+ const translationService = inject(AXTranslationService);
6701
+ const dialogService = inject(AXDialogService);
6702
+ payload.actions = [
6703
+ ...payload.actions,
6704
+ {
6705
+ plugin: 'upload-document-from-drive',
6706
+ global: true,
6707
+ textKey: '@document-management:actions.choose-from-drive',
6708
+ icon: 'fa-light fa-file-arrow-up',
6709
+ run: async ({ host }) => {
6710
+ const result = await driveService.showChooseFileDialog(AXPPlatformScope.Tenant);
6711
+ if (!result || result.length === 0) {
6712
+ return;
6713
+ }
6714
+ // Show confirm dialog for clone option
6715
+ // Yes/Okay -> clone, No/Cancel -> by-reference
6716
+ const dialogTitle = await translationService.translateAsync('@document-management:actions.upload-options.title');
6717
+ const dialogMessage = await translationService.translateAsync('@document-management:actions.upload-options.confirm-message');
6718
+ const dialogResult = await dialogService.confirm(dialogTitle, dialogMessage, 'primary', 'horizontal', false, 'cancel');
6719
+ // Yes/Okay -> clone, No/Cancel -> by-reference
6720
+ const attachmentType = dialogResult.result ? 'clone' : 'by-reference';
6721
+ // Add files to host with uploading status
6722
+ host.setValue([
6723
+ ...(host.getValue() ?? []),
6724
+ ...result.map((item) => ({
6725
+ ...(item.fileId ?? {}),
6726
+ status: 'uploading',
6727
+ })),
6728
+ ]);
6729
+ // Process files based on attachment type
6730
+ for await (const item of result) {
6731
+ if (item.type === 'folder') {
6732
+ continue;
6733
+ }
6734
+ const currentFiles = host.getValue();
6735
+ const fileIndex = currentFiles.findIndex((f) => f.id === (item.fileId?.id ?? ''));
6736
+ if (fileIndex === -1) {
6737
+ continue;
6738
+ }
6739
+ if (attachmentType === 'by-reference') {
6740
+ // By reference: just set documentId
6741
+ const updatedFiles = [...currentFiles];
6742
+ updatedFiles[fileIndex] = {
6743
+ ...updatedFiles[fileIndex],
6744
+ status: 'attached',
6745
+ source: {
6746
+ kind: 'reference',
6747
+ value: {
6748
+ id: item.id,
6749
+ type: 'document',
6750
+ },
6751
+ },
6752
+ };
6753
+ host.setValue(updatedFiles);
6754
+ }
6755
+ else {
6756
+ // Clone: get file info and create blob
6757
+ try {
6758
+ const storageInfo = await fileStorageService.getInfo(item.fileId?.id ?? '');
6759
+ if (!storageInfo) {
6760
+ const currentFiles = host.getValue();
6761
+ host.setValue(currentFiles.filter((f) => f.id !== (item.fileId?.id ?? '')));
6762
+ continue;
6763
+ }
6764
+ const updatedFiles = [...currentFiles];
6765
+ updatedFiles[fileIndex] = {
6766
+ ...updatedFiles[fileIndex],
6767
+ id: AXPDataGenerator.uuid(),
6768
+ status: 'attached',
6769
+ source: {
6770
+ kind: 'blob',
6771
+ value: new Blob([storageInfo.binary], { type: storageInfo.mimeType }),
6772
+ },
6773
+ };
6774
+ host.setValue(updatedFiles);
6775
+ }
6776
+ catch {
6777
+ const currentFiles = host.getValue();
6778
+ host.setValue(currentFiles.filter((f) => f.id !== (item.fileId?.id ?? '')));
6779
+ }
6780
+ }
6781
+ }
8264
6782
  },
8265
- ],
8266
- },
8267
- 'show-error': {
8268
- id: 'show-error',
8269
- action: 'AXPToastAction',
8270
- input: {
8271
- color: 'danger',
8272
- title: 'document-signature.error.title',
8273
- content: 'document-signature.error.message',
8274
6783
  },
8275
- },
8276
- 'reload-entity': {
8277
- id: 'reload-entity',
8278
- action: 'reload',
8279
- },
6784
+ ];
6785
+ return payload;
8280
6786
  },
8281
6787
  };
8282
6788
 
6789
+ class AXMDriveChooseModule {
6790
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDriveChooseModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6791
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: AXMDriveChooseModule }); }
6792
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDriveChooseModule, providers: [
6793
+ { provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, useValue: UploadFromDriveHookProvider, multi: true }
6794
+ ] }); }
6795
+ }
6796
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDriveChooseModule, decorators: [{
6797
+ type: NgModule,
6798
+ args: [{
6799
+ imports: [],
6800
+ providers: [
6801
+ { provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, useValue: UploadFromDriveHookProvider, multi: true }
6802
+ ]
6803
+ }]
6804
+ }] });
6805
+
8283
6806
  class AXMCheckDocumentTypeWorkflowAction extends AXPWorkflowAction {
8284
6807
  async execute(context) {
8285
6808
  const documentType = context.getVariable('documentType');
@@ -8539,101 +7062,6 @@ const DocumentFileUploaderBeforeFilesAddedProvider = {
8539
7062
  return payload;
8540
7063
  },
8541
7064
  };
8542
- // --------------- Per-File Actions: scaffold to add item-level actions ---------------
8543
- const DocumentFileUploaderFileItemActionsProvider = {
8544
- key: 'file-uploader.fileItem.actions',
8545
- priority: 0,
8546
- async execute(payload) {
8547
- const isEnabled = Array.isArray(payload.plugins) && payload.plugins.some((p) => p.name === 'document');
8548
- const isExcluded = Array.isArray(payload.excludePlugins) && payload.excludePlugins.includes('document');
8549
- if (!isEnabled || isExcluded)
8550
- return payload;
8551
- const actions = [...(payload.actions ?? [])];
8552
- actions.push({
8553
- plugin: 'document',
8554
- global: false,
8555
- textKey: '@document-management:actions.edit-metadata',
8556
- icon: 'fa-light fa-pen-to-square',
8557
- run: async (_ctx) => { },
8558
- });
8559
- // Conditionally add Review / Distribute based on document type flags
8560
- const opts = (payload.plugins.find((p) => p.name === 'document')?.options ?? {});
8561
- if (opts.docTypeName) {
8562
- const injector = inject(Injector);
8563
- const documentManagementService = injector.get(AXPDocumentManagementService);
8564
- const documentService = injector.get(AXMDocumentService);
8565
- const workflow = injector.get(AXPWorkflowService);
8566
- const docType = await documentManagementService.getDocumentTypeByName(opts.docTypeName);
8567
- const requiresReview = !!docType?.requiresReview;
8568
- const requiresDistribution = !!docType?.requiresDistribution;
8569
- // Show review/distribute actions only for uploaded/persisted files
8570
- const isUploaded = payload.item?.status === 'uploaded' ||
8571
- (payload.item?.source?.kind === 'fileId' && typeof payload.item?.source?.value === 'string');
8572
- if (!isUploaded) {
8573
- payload.actions = actions;
8574
- return payload;
8575
- }
8576
- // Attempt to resolve owning document by fileId (when item is persisted)
8577
- let document = payload.item?.documentData ?? null;
8578
- const fileId = payload.item?.source?.kind === 'fileId' ? payload.item?.source?.value : undefined;
8579
- if (!document && typeof fileId === 'string' && fileId) {
8580
- const resp = await documentService.query({
8581
- skip: 0,
8582
- take: 1,
8583
- filter: { field: 'fileId', operator: { type: 'equal' }, value: fileId },
8584
- });
8585
- document = resp?.items?.[0] ?? null;
8586
- }
8587
- const status = document?.status;
8588
- // Gate actions by current document status when available
8589
- if (requiresReview && payload.item?.status == 'uploaded') {
8590
- if (!status || status === 'Draft') {
8591
- actions.push({
8592
- plugin: 'document',
8593
- global: false,
8594
- textKey: '@document-management:actions.send-to-review',
8595
- icon: 'fa-light fa-share-from-square',
8596
- run: async () => {
8597
- await workflow.execute('send-to-review', {
8598
- options: { id: document?.id ?? payload.item?.id, title: document?.title ?? payload.item?.name },
8599
- });
8600
- },
8601
- });
8602
- }
8603
- else if (status === 'PendingReview') {
8604
- actions.push({
8605
- plugin: 'document',
8606
- global: false,
8607
- textKey: '@document-management:actions.submit-review',
8608
- icon: 'fa-light fa-clipboard-check',
8609
- run: async () => {
8610
- await workflow.execute('submit-review', {
8611
- options: { id: document?.reviewRecordId },
8612
- });
8613
- },
8614
- });
8615
- }
8616
- }
8617
- if (requiresDistribution &&
8618
- (status === 'Reviewed' || status === 'Completed') &&
8619
- payload.item?.status == 'uploaded') {
8620
- actions.push({
8621
- plugin: 'document',
8622
- global: false,
8623
- textKey: '@document-management:actions.distribute',
8624
- icon: 'fa-light fa-diagram-project',
8625
- run: async () => {
8626
- await workflow.execute('distributed', {
8627
- options: { id: document?.id ?? payload.item?.id, title: document?.title ?? payload.item?.name },
8628
- });
8629
- },
8630
- });
8631
- }
8632
- }
8633
- payload.actions = actions;
8634
- return payload;
8635
- },
8636
- };
8637
7065
  // --------------- Edit Dialog: inject metadata group after 'form' ---------------
8638
7066
  const DocumentFileUploaderEditDialogAfterFormProvider = {
8639
7067
  key: 'file-uploader.edit-dialog.groups.after-form',
@@ -8724,7 +7152,6 @@ const DocumentFileUploaderDownloadReferenceProvider = {
8724
7152
  const DocumentFileUploaderWidgetPluginProviders = [
8725
7153
  DocumentFileUploaderConfigureProvider,
8726
7154
  DocumentFileUploaderBeforeFilesAddedProvider,
8727
- DocumentFileUploaderFileItemActionsProvider,
8728
7155
  DocumentFileUploaderEditDialogAfterFormProvider,
8729
7156
  DocumentFileUploaderDownloadReferenceProvider,
8730
7157
  ];
@@ -8763,16 +7190,9 @@ class AXMDocumentManagementModule {
8763
7190
  AXMDocumentManagementDocumentTypeEntityModule,
8764
7191
  AXMDocumentManagementDocumentEntityModule,
8765
7192
  AXMFolderEntityModule,
8766
- AXMReviewEntityModule,
8767
- AXMDistributionEntityModule,
8768
- AXMDistributionInteractionEntityModule, i1$2.AXPWidgetCoreModule, AXMFileTypeModule, i3$1.AXMediaViewerModule, i3$2.AXPWorkflowModule] }); }
7193
+ AXMReviewEntityModule, i6.AXPWidgetCoreModule, AXMFileTypeModule, i3$1.AXMediaViewerModule, i3$2.AXPWorkflowModule] }); }
8769
7194
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentManagementModule, providers: [
8770
7195
  // Module-specific providers (not part of manifest system)
8771
- {
8772
- provide: AXP_TASK_BADGE_PROVIDERS,
8773
- useClass: AXMDocumentReviewBadgeProvider,
8774
- multi: true,
8775
- },
8776
7196
  { provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: attachmentsPlugin },
8777
7197
  {
8778
7198
  provide: ROUTES,
@@ -8825,8 +7245,6 @@ class AXMDocumentManagementModule {
8825
7245
  AXMDocumentManagementDocumentEntityModule,
8826
7246
  AXMFolderEntityModule,
8827
7247
  AXMReviewEntityModule,
8828
- AXMDistributionEntityModule,
8829
- AXMDistributionInteractionEntityModule,
8830
7248
  AXPWidgetCoreModule.forChild({
8831
7249
  widgets: [AXmFileTypeExtensionWidget],
8832
7250
  }),
@@ -8837,20 +7255,9 @@ class AXMDocumentManagementModule {
8837
7255
  AXMCheckDocumentTypeWorkflowAction,
8838
7256
  AXMChooseDocumentTypeWorkflowAction,
8839
7257
  AXMChooseFileWorkflowAction,
8840
- AXMSendToReviewConfirmAction,
8841
- AXMUpdateDocumentStatusAction,
8842
- AXMDocumentDistributionPopupAction,
8843
- AXMCreateDistributionRecordsAction,
8844
- AXMDocumentSignaturePopupAction,
8845
- AXMSaveSignatureInteractionAction,
8846
- AXMChangeEntityAction,
8847
7258
  },
8848
7259
  workflows: {
8849
7260
  'upload-document': AXMUploadWorkflow,
8850
- 'send-to-review': AXMSendToReviewWorkflow,
8851
- 'submit-review': AXMSubmitReviewWorkflow,
8852
- distributed: AXMDocumentDistributionWorkflow,
8853
- 'document-signature': AXMDocumentSignatureWorkflow,
8854
7261
  },
8855
7262
  })] }); }
8856
7263
  }
@@ -8867,8 +7274,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
8867
7274
  AXMDocumentManagementDocumentEntityModule,
8868
7275
  AXMFolderEntityModule,
8869
7276
  AXMReviewEntityModule,
8870
- AXMDistributionEntityModule,
8871
- AXMDistributionInteractionEntityModule,
8872
7277
  AXPWidgetCoreModule.forChild({
8873
7278
  widgets: [AXmFileTypeExtensionWidget],
8874
7279
  }),
@@ -8879,31 +7284,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
8879
7284
  AXMCheckDocumentTypeWorkflowAction,
8880
7285
  AXMChooseDocumentTypeWorkflowAction,
8881
7286
  AXMChooseFileWorkflowAction,
8882
- AXMSendToReviewConfirmAction,
8883
- AXMUpdateDocumentStatusAction,
8884
- AXMDocumentDistributionPopupAction,
8885
- AXMCreateDistributionRecordsAction,
8886
- AXMDocumentSignaturePopupAction,
8887
- AXMSaveSignatureInteractionAction,
8888
- AXMChangeEntityAction,
8889
7287
  },
8890
7288
  workflows: {
8891
7289
  'upload-document': AXMUploadWorkflow,
8892
- 'send-to-review': AXMSendToReviewWorkflow,
8893
- 'submit-review': AXMSubmitReviewWorkflow,
8894
- distributed: AXMDocumentDistributionWorkflow,
8895
- 'document-signature': AXMDocumentSignatureWorkflow,
8896
7290
  },
8897
7291
  }),
8898
7292
  ],
8899
7293
  exports: [],
8900
7294
  providers: [
8901
7295
  // Module-specific providers (not part of manifest system)
8902
- {
8903
- provide: AXP_TASK_BADGE_PROVIDERS,
8904
- useClass: AXMDocumentReviewBadgeProvider,
8905
- multi: true,
8906
- },
8907
7296
  { provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: attachmentsPlugin },
8908
7297
  {
8909
7298
  provide: ROUTES,
@@ -8956,7 +7345,7 @@ class AXMDocumentExplorerDetailPanelComponent {
8956
7345
  this.vm = inject(AXPDocumentExplorerViewModel);
8957
7346
  }
8958
7347
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentExplorerDetailPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8959
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AXMDocumentExplorerDetailPanelComponent, isStandalone: true, selector: "axm-document-explorer-detail-panel", ngImport: i0, template: "<!-- Multiple Selected -->\n@if (vm.hasMultipleSelectedItems()) {\n <div class=\"__header\" *translate=\"let t\">\n <div class=\"__title\">\n <i class=\"fa-fw fa-lg fa-solid\"></i>\n <span> {{ vm.selectedCount() }} {{ '@general:terms.items-selected' | translate | async }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"__content\"></div>\n}\n<!-- Single Selected -->\n@else {\n <!-- Info -->\n @let nodeInfo = vm.getNodeInfo((vm.selectedNode() ?? vm.currentFolder())!);\n <div class=\"__header\">\n <div class=\"__title\">\n <i class=\"fa-fw fa-lg {{ nodeInfo.icon }} fa-solid\"></i>\n <span>{{ nodeInfo.name }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"__content\">\n @for (section of nodeInfo.sections; track section.title) {\n <div class=\"__section\">\n <div class=\"__title\">\n <span>{{ section.title }}</span>\n </div>\n <div class=\"__content\">\n @for (detail of section.details; track detail.title) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ detail.title }}</span>\n </div>\n <div class=\"__content\">\n @if (detail.format) {\n <span>{{ detail.content | format: detail.format | async }}</span>\n } @else {\n <span>{{ detail.content ?? '---' }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n}\n", styles: ["axm-document-explorer-detail-panel{display:flex;flex-direction:column;border-radius:.5rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1024px){axm-document-explorer-detail-panel{min-width:20rem}}axm-document-explorer-detail-panel>.__header{display:flex;flex-direction:row;align-items:center;justify-content:space-between;border-bottom-width:1px;padding:1rem}axm-document-explorer-detail-panel>.__header>.__title{display:flex;width:90%;flex-direction:row;align-items:center;gap:.5rem}axm-document-explorer-detail-panel>.__header>.__title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;font-weight:600;line-height:1.625}axm-document-explorer-detail-panel>.__content{display:flex;flex-direction:column}axm-document-explorer-detail-panel>.__content>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}axm-document-explorer-detail-panel>.__content>.__section{display:flex;flex-direction:column;padding:1rem}axm-document-explorer-detail-panel>.__content>.__section>.__title{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;font-weight:700}axm-document-explorer-detail-panel>.__content>.__section>.__content{display:flex;flex-direction:column;gap:1rem}axm-document-explorer-detail-panel>.__content>.__section>.__content>.__row{display:flex;flex-direction:column;gap:.25rem}axm-document-explorer-detail-panel>.__content>.__section>.__content>.__row>.__title{display:flex;font-size:.875rem;line-height:1.25rem;font-weight:600;opacity:.9}axm-document-explorer-detail-panel>.__content>.__section>.__content>.__row>.__content{display:flex;flex-direction:row;align-items:center;gap:.5rem}axm-document-explorer-detail-panel>.__content>.__section>.__content>.__row>.__content span{opacity:.7}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i3$3.AXTranslatorDirective, selector: "[translate]" }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$2.AXFormatPipe, name: "format" }, { kind: "pipe", type: i3$3.AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
7348
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AXMDocumentExplorerDetailPanelComponent, isStandalone: true, selector: "axm-document-explorer-detail-panel", ngImport: i0, template: "<!-- Multiple Selected -->\n@if (vm.hasMultipleSelectedItems()) {\n <div class=\"__header\" *translate=\"let t\">\n <div class=\"__title\">\n <i class=\"fa-fw fa-lg fa-solid\"></i>\n <span> {{ vm.selectedCount() }} {{ '@general:terms.items-selected' | translate | async }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"__content\"></div>\n}\n<!-- Single Selected -->\n@else {\n <!-- Info -->\n @let nodeInfo = vm.getNodeInfo((vm.selectedNode() ?? vm.currentFolder())!);\n <div class=\"__header\">\n <div class=\"__title\">\n <i class=\"fa-fw fa-lg {{ nodeInfo.icon }} fa-solid\"></i>\n <span>{{ nodeInfo.name }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"__content\">\n @for (section of nodeInfo.sections; track section.title) {\n <div class=\"__section\">\n <div class=\"__title\">\n <span>{{ section.title }}</span>\n </div>\n <div class=\"__content\">\n @for (detail of section.details; track detail.title) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ detail.title }}</span>\n </div>\n <div class=\"__content\">\n @if (detail.format) {\n <span>{{ detail.content | format: detail.format | async }}</span>\n } @else {\n <span>{{ detail.content ?? '---' }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n}\n", styles: ["axm-document-explorer-detail-panel{display:flex;flex-direction:column;border-radius:.5rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1024px){axm-document-explorer-detail-panel{min-width:20rem}}axm-document-explorer-detail-panel>.__header{display:flex;flex-direction:row;align-items:center;justify-content:space-between;border-bottom-width:1px;padding:1rem}axm-document-explorer-detail-panel>.__header>.__title{display:flex;width:90%;flex-direction:row;align-items:center;gap:.5rem}axm-document-explorer-detail-panel>.__header>.__title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;font-weight:600;line-height:1.625}axm-document-explorer-detail-panel>.__content{display:flex;flex-direction:column}axm-document-explorer-detail-panel>.__content>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}axm-document-explorer-detail-panel>.__content>.__section{display:flex;flex-direction:column;padding:1rem}axm-document-explorer-detail-panel>.__content>.__section>.__title{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;font-weight:700}axm-document-explorer-detail-panel>.__content>.__section>.__content{display:flex;flex-direction:column;gap:1rem}axm-document-explorer-detail-panel>.__content>.__section>.__content>.__row{display:flex;flex-direction:column;gap:.25rem}axm-document-explorer-detail-panel>.__content>.__section>.__content>.__row>.__title{display:flex;font-size:.875rem;line-height:1.25rem;font-weight:600;opacity:.9}axm-document-explorer-detail-panel>.__content>.__section>.__content>.__row>.__content{display:flex;flex-direction:row;align-items:center;gap:.5rem}axm-document-explorer-detail-panel>.__content>.__section>.__content>.__row>.__content span{opacity:.7}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i3$3.AXTranslatorDirective, selector: "[translate]" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$2.AXFormatPipe, name: "format" }, { kind: "pipe", type: i3$3.AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
8960
7349
  }
8961
7350
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentExplorerDetailPanelComponent, decorators: [{
8962
7351
  type: Component,
@@ -8985,6 +7374,7 @@ class AXMDocumentDriveComponent extends AXPPageLayoutBaseComponent {
8985
7374
  this.filterItems = signal([], ...(ngDevMode ? [{ debugName: "filterItems" }] : []));
8986
7375
  this.selectedFilter = signal('all', ...(ngDevMode ? [{ debugName: "selectedFilter" }] : []));
8987
7376
  this.searchQuery = '';
7377
+ this.previousFolderId = null;
8988
7378
  this.sortItems = signal([
8989
7379
  { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },
8990
7380
  { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },
@@ -9034,32 +7424,121 @@ class AXMDocumentDriveComponent extends AXPPageLayoutBaseComponent {
9034
7424
  const snapshot = this.activatedRoute.snapshot;
9035
7425
  const routerScope = resolvePlatformScopeKey(snapshot.parent?.paramMap.get('scope')?.trim()?.toLowerCase());
9036
7426
  await this.vm.initialize({ browseMode: 'file', scope: routerScope });
9037
- this.activatedRoute.paramMap.subscribe(async () => {
9038
- this.loadDrive();
7427
+ // Check for search query in URL on init
7428
+ const searchQuery = snapshot.queryParams['search'];
7429
+ const folderId = snapshot.paramMap.get('id');
7430
+ if (searchQuery) {
7431
+ this.searchQuery = searchQuery;
7432
+ // If we have a folderId, save it as previousFolderId before performing search
7433
+ if (folderId) {
7434
+ this.previousFolderId = folderId;
7435
+ // Load the folder first to establish context
7436
+ await this.vm.loadFolderContents(folderId);
7437
+ }
7438
+ // Perform search
7439
+ await this.performSearch(searchQuery);
7440
+ }
7441
+ else {
7442
+ // Normal load - watch for param changes
7443
+ this.activatedRoute.paramMap.subscribe(async () => {
7444
+ this.loadDrive();
7445
+ });
7446
+ }
7447
+ // Watch for query param changes (e.g., when user clears search)
7448
+ this.activatedRoute.queryParams.subscribe(async (params) => {
7449
+ if (!params['search'] && this.vm.isVirtual() && this.searchQuery) {
7450
+ // Search was cleared from URL, clear the virtual folder
7451
+ this.searchQuery = null;
7452
+ const currentNode = this.vm.currentNode();
7453
+ const targetFolderId = this.previousFolderId
7454
+ ?? (currentNode?.parentId && currentNode.parentId !== 'virtual' ? currentNode.parentId : null);
7455
+ if (targetFolderId) {
7456
+ await this.vm.loadFolderContents(targetFolderId);
7457
+ this.previousFolderId = null;
7458
+ }
7459
+ else {
7460
+ this.vm.navigateToUp();
7461
+ }
7462
+ }
9039
7463
  });
9040
7464
  }
9041
7465
  //#endregion
9042
7466
  //#region ---------------- Event Handlers ----------------
9043
7467
  async handleSearchChange(event) {
9044
- if (event.value == null) {
9045
- return;
9046
- }
9047
- if (event.value?.length > 0) {
9048
- const result = await this.driveService.searchNodes(event.value, this.vm.scope(), {
9049
- tenantId: this.sessionService.tenant?.id,
9050
- userId: this.sessionService.user?.id,
9051
- folderId: this.vm.currentNode()?.id,
9052
- });
9053
- this.vm.virtualFolder(result, {
9054
- name: 'Search Result',
9055
- parentId: this.vm.currentNode()?.id == 'virtual'
9056
- ? (this.vm.currentNode()?.parentId ?? undefined)
9057
- : this.vm.currentNode()?.id,
7468
+ // Handle null/undefined by treating as empty string (clear search)
7469
+ const searchValue = event.value ?? '';
7470
+ if (searchValue.length > 0) {
7471
+ // Update URL with search query parameter
7472
+ const folderId = this.activatedRoute.snapshot.paramMap.get('id');
7473
+ const currentUrl = folderId
7474
+ ? `${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}/${folderId}`
7475
+ : `${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}`;
7476
+ await this.router.navigate([currentUrl], {
7477
+ queryParams: { search: searchValue },
7478
+ queryParamsHandling: 'merge',
9058
7479
  });
7480
+ // Perform the search
7481
+ await this.performSearch(searchValue);
9059
7482
  }
9060
7483
  else {
9061
- this.vm.navigateToUp();
7484
+ // Clear search query immediately
7485
+ this.searchQuery = null;
7486
+ // Remove search query parameter from URL
7487
+ const folderId = this.activatedRoute.snapshot.paramMap.get('id');
7488
+ const currentUrl = folderId
7489
+ ? `${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}/${folderId}`
7490
+ : `${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}`;
7491
+ await this.router.navigate([currentUrl], {
7492
+ queryParams: { search: null },
7493
+ queryParamsHandling: 'merge',
7494
+ });
7495
+ // Clear search - navigate back to previous folder
7496
+ if (this.vm.isVirtual()) {
7497
+ const currentNode = this.vm.currentNode();
7498
+ // Priority: 1) previousFolderId (saved before search), 2) parentId from virtual folder, 3) navigateToUp
7499
+ const targetFolderId = this.previousFolderId
7500
+ ?? (currentNode?.parentId && currentNode.parentId !== 'virtual' ? currentNode.parentId : null);
7501
+ if (targetFolderId) {
7502
+ // Navigate to target folder - update router and load folder contents directly
7503
+ this.router.navigate([
7504
+ `${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}/${targetFolderId}`,
7505
+ ]);
7506
+ // Load folder contents directly to ensure virtual folder is cleared
7507
+ await this.vm.loadFolderContents(targetFolderId);
7508
+ this.previousFolderId = null;
7509
+ }
7510
+ else {
7511
+ // Last resort: try navigateToUp
7512
+ this.vm.navigateToUp();
7513
+ }
7514
+ }
7515
+ else {
7516
+ // Not in virtual folder, just clear the search
7517
+ this.previousFolderId = null;
7518
+ }
7519
+ }
7520
+ }
7521
+ async performSearch(searchValue) {
7522
+ // Save the current folder ID before searching (if not already in virtual folder)
7523
+ if (!this.vm.isVirtual()) {
7524
+ const currentNode = this.vm.currentNode();
7525
+ this.previousFolderId = currentNode?.id ?? null;
9062
7526
  }
7527
+ const result = await this.driveService.searchNodes(searchValue, this.vm.scope(), {
7528
+ tenantId: this.sessionService.tenant?.id,
7529
+ userId: this.sessionService.user?.id,
7530
+ folderId: this.vm.isVirtual() ? (this.previousFolderId ?? undefined) : (this.vm.currentNode()?.id ?? undefined),
7531
+ });
7532
+ // Get the folder ID to use as parentId for the virtual folder
7533
+ // If we're already in a virtual folder, use its parentId, otherwise use current folder ID
7534
+ const currentNode = this.vm.currentNode();
7535
+ const folderIdForParent = this.vm.isVirtual()
7536
+ ? (currentNode?.parentId ?? this.previousFolderId ?? undefined)
7537
+ : (currentNode?.id ?? this.previousFolderId ?? undefined);
7538
+ this.vm.virtualFolder(result, {
7539
+ name: 'Search Result',
7540
+ parentId: folderIdForParent,
7541
+ });
9063
7542
  }
9064
7543
  handleCtrlKey(e) {
9065
7544
  this.selectionMode.set('multiple');
@@ -9068,17 +7547,17 @@ class AXMDocumentDriveComponent extends AXPPageLayoutBaseComponent {
9068
7547
  this.selectionMode.set('single');
9069
7548
  }
9070
7549
  handleNavigateToFolder(folderId) {
9071
- this.router.navigate([
9072
- `${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}/${folderId}`,
9073
- ]);
9074
- setTimeout(() => {
9075
- this.searchQuery = null;
9076
- }, 200);
7550
+ const queryParams = this.activatedRoute.snapshot.queryParams;
7551
+ this.router.navigate([`${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}/${folderId}`], {
7552
+ queryParams: queryParams, // Preserve query params (e.g., search)
7553
+ queryParamsHandling: 'merge',
7554
+ });
9077
7555
  }
9078
7556
  //#endregion
9079
7557
  //#region ---------------- Data Loading Methods ----------------
9080
7558
  async loadDrive() {
9081
7559
  const folderId = this.activatedRoute.snapshot.paramMap.get('id');
7560
+ const queryParams = this.activatedRoute.snapshot.queryParams;
9082
7561
  if (folderId) {
9083
7562
  await this.vm.loadFolderContents(folderId);
9084
7563
  }
@@ -9093,6 +7572,8 @@ class AXMDocumentDriveComponent extends AXPPageLayoutBaseComponent {
9093
7572
  `${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}/${root.result.id}`,
9094
7573
  ], {
9095
7574
  replaceUrl: true,
7575
+ queryParams: queryParams, // Preserve query params (e.g., search)
7576
+ queryParamsHandling: 'merge',
9096
7577
  });
9097
7578
  }
9098
7579
  }
@@ -9259,11 +7740,11 @@ class AXMDocumentDriveComponent extends AXPPageLayoutBaseComponent {
9259
7740
  },
9260
7741
  ], viewQueries: [{ propertyName: "documentExplorer", first: true, predicate: AXMDocumentExplorerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- Main Layout -->\n<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <!-- Left Side Toolbar -->\n <axp-layout-prefix>\n @if (vm.hasMultipleSelectedItems()) {\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-h-10\">\n <span class=\"ax-text-xl ax-font-bold\">\n {{ vm.selectedCount() }} {{ '@general:terms.items-selected' | translate | async }}\n </span>\n <span (click)=\"vm.deselectAll()\" class=\"ax-text-sm ax-text-secondary ax-underline ax-cursor-pointer\">{{\n '@general:actions.unselect.title' | translate | async\n }}</span>\n </div>\n }\n <!---------->\n @else {\n <!-- Filter Dropdown -->\n <ax-button [text]=\"t(getFilterText(), { scope: rootConfig.config.i18n }) | async\">\n <ax-prefix>\n <ax-icon [icon]=\"getFilterIcon()\"></ax-icon>\n </ax-prefix>\n\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n @for (item of filterItems(); track item.key) {\n <ax-button-item\n (onClick)=\"setFilter(item.key)\"\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <!-- Search Box -->\n <ax-search-box\n [(value)]=\"searchQuery\"\n (onValueChanged)=\"handleSearchChange($event)\"\n class=\"ax-w-72 ax-hidden md:ax-flex\"\n [placeholder]=\"t('actions.search', { scope: rootConfig.config.i18n }) | async\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n }\n </axp-layout-prefix>\n\n <!-- Right Side Toolbar -->\n <axp-layout-suffix>\n <!-- Sort Dropdown -->\n <ax-button>\n <ax-icon\n [icon]=\"'fa-light fa-arrow-' + (vm.sortDirection() === 'asc' ? 'up' : 'down') + '-wide-short'\"\n ></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <!-- Sort By Options -->\n @for (item of sortItems(); track item.key) {\n <ax-button-item\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setSortField(item.key)\"\n [selected]=\"vm.sortField() === item.key\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n <ax-divider></ax-divider>\n <!-- Sort Direction Options -->\n <ax-button-item\n [text]=\"(t('actions.sort-ascending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'asc'\"\n (onClick)=\"vm.setSortDirection('asc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-up-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.sort-descending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'desc'\"\n (onClick)=\"vm.setSortDirection('desc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-down-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- View Mode Toggle -->\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewsItems(); track item.key) {\n <!-- view mode items -->\n <ax-button-item\n [text]=\"(t('view-modes.' + item.key, { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.isViewMode(item.key)\"\n (onClick)=\"vm.setViewMode(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n <!-- end of view mode items -->\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n @if (deviceService.isLarge()) {\n <!-- Detail Panel Toggle -->\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon\n icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"\n ></ax-icon>\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-page-toolbar>\n\n <!-- Content Section -->\n <axp-page-content class=\"ax-overflow-auto ax-flex ax-flex-row ax-gap-4\">\n <axm-document-explorer [selectionMode]=\"selectionMode()\"></axm-document-explorer>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-document-explorer-detail-panel class=\"ax-sticky ax-top-0 ax-z-50\"></axm-document-explorer-detail-panel>\n }\n </axp-page-content>\n\n <!-- Footer Section removed: breadcrumbs are now provided via page-level breadcrumbs -->\n</axp-page-layout>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
9261
7742
  //
9262
- AXMenuModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i1$3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1$3.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i2$3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i3$3.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXFileModule }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "component", type:
7743
+ AXMenuModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i1$2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1$2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i2$3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i3$3.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXFileModule }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "component", type:
9263
7744
  //
9264
7745
  AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type:
9265
7746
  //
9266
- AXMDocumentExplorerComponent, selector: "axm-document-explorer", inputs: ["browseMode", "viewMode", "selectionMode", "showContextMenu"] }, { kind: "component", type: AXMDocumentExplorerDetailPanelComponent, selector: "axm-document-explorer-detail-panel" }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7747
+ AXMDocumentExplorerComponent, selector: "axm-document-explorer", inputs: ["browseMode", "viewMode", "selectionMode", "showContextMenu"] }, { kind: "component", type: AXMDocumentExplorerDetailPanelComponent, selector: "axm-document-explorer-detail-panel" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9267
7748
  }
9268
7749
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXMDocumentDriveComponent, decorators: [{
9269
7750
  type: Component,
@@ -9325,5 +7806,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
9325
7806
  * Generated bundle index. Do not edit.
9326
7807
  */
9327
7808
 
9328
- export { AXMArchiveFileTypeProvider, AXMAudioFileTypeProvider, AXMCodeFileTypeProvider, AXMDistributionEntityModule, AXMDistributionInteractionEntityModule, AXMDistributionInteractionService, AXMDistributionInteractionServiceImpl, AXMDistributionService, AXMDistributionServiceImpl, AXMDocumentDriveComponent, AXMDocumentExplorerComponent, AXMDocumentFileTypeProvider, AXMDocumentManagementDocumentEntityModule, AXMDocumentManagementDocumentTypeEntityModule, AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule, AXMDocumentManagementDocumentTypeMetaDefinitionEntityService, AXMDocumentManagementDocumentTypeMetaDefinitionEntityServiceImpl, AXMDocumentManagementDocumentTypeMetaValueEntityModule, AXMDocumentManagementDocumentTypeMetaValueEntityService, AXMDocumentManagementDocumentTypeMetaValueEntityServiceImpl, AXMDocumentManagementDocumentTypeStatusDefinitionEntityModule, AXMDocumentManagementDocumentTypeStatusDefinitionEntityService, AXMDocumentManagementDocumentTypeStatusDefinitionEntityServiceImpl, AXMDocumentManagementModule, AXMDocumentManagerService, AXMDocumentReletedEntityModule, AXMDocumentService, AXMDocumentServiceImpl, AXMDocumentTypeService, AXMDocumentTypeServiceImpl, AXMEntityProvider, AXMFileTypeExtensionWidgetColumnComponent, AXMFileTypeExtensionWidgetDesignerComponent, AXMFileTypeExtensionWidgetEditComponent, AXMFileTypeExtensionWidgetViewComponent, AXMFileViewerPopupComponent, AXMFolderEntityModule, AXMFolderPathBreadcrumbsComponent, AXMFolderService, AXMFolderServiceImpl, AXMImageFileTypeProvider, AXMMenuProvider, AXMPermissionsKeys, AXMReviewEntityModule, AXMReviewService, AXMReviewServiceImpl, AXMSearchCommandProvider, AXMSettingProvider, AXMVideoFileTypeProvider, AXPDocumentExplorerSettings, AXPDocumentExplorerViewModel, AXPDocumentManagementFeatureKeys, AXPDocumentManagementMenuKeys, AXPDocumentManagementService, AXmFileTypeExtensionWidget, RootConfig, ScopedDriveService, canTransition, distributionFactory, distributionInteractionFactory, documentFactory, documentRelatedFactory, documentTypeFactory, documentTypeMetaDefinitionfactory, documentTypeMetaValueFactory, documentTypeStatusDefinitionFactory, folderFactory, getNextStatus, reviewFactory };
7809
+ export { AXMArchiveFileTypeProvider, AXMAudioFileTypeProvider, AXMCodeFileTypeProvider, AXMDocumentDriveComponent, AXMDocumentExplorerComponent, AXMDocumentFileTypeProvider, AXMDocumentManagementDocumentEntityModule, AXMDocumentManagementDocumentTypeEntityModule, AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule, AXMDocumentManagementDocumentTypeMetaDefinitionEntityService, AXMDocumentManagementDocumentTypeMetaDefinitionEntityServiceImpl, AXMDocumentManagementDocumentTypeMetaValueEntityModule, AXMDocumentManagementDocumentTypeMetaValueEntityService, AXMDocumentManagementDocumentTypeMetaValueEntityServiceImpl, AXMDocumentManagementDocumentTypeStatusDefinitionEntityModule, AXMDocumentManagementDocumentTypeStatusDefinitionEntityService, AXMDocumentManagementDocumentTypeStatusDefinitionEntityServiceImpl, AXMDocumentManagementModule, AXMDocumentManagerService, AXMDocumentReletedEntityModule, AXMDocumentService, AXMDocumentServiceImpl, AXMDocumentTypeService, AXMDocumentTypeServiceImpl, AXMEntityProvider, AXMFileTypeExtensionWidgetColumnComponent, AXMFileTypeExtensionWidgetDesignerComponent, AXMFileTypeExtensionWidgetEditComponent, AXMFileTypeExtensionWidgetViewComponent, AXMFileViewerPopupComponent, AXMFolderEntityModule, AXMFolderPathBreadcrumbsComponent, AXMFolderService, AXMFolderServiceImpl, AXMImageFileTypeProvider, AXMMenuProvider, AXMPermissionsKeys, AXMReviewEntityModule, AXMReviewService, AXMReviewServiceImpl, AXMSearchCommandProvider, AXMSettingProvider, AXMVideoFileTypeProvider, AXPDocumentExplorerSettings, AXPDocumentExplorerViewModel, AXPDocumentManagementFeatureKeys, AXPDocumentManagementMenuKeys, AXPDocumentManagementService, AXmFileTypeExtensionWidget, RootConfig, ScopedDriveService, canTransition, documentFactory, documentRelatedFactory, documentTypeFactory, documentTypeMetaDefinitionfactory, documentTypeMetaValueFactory, documentTypeStatusDefinitionFactory, folderFactory, getNextStatus, reviewFactory };
9329
7810
  //# sourceMappingURL=acorex-modules-document-management.mjs.map