@acorex/modules 19.4.2 → 19.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/document-management/lib/entities/folder/folder.types.d.ts +2 -0
- package/document-management/lib/features/document-explorer/components/create-folder-dialog/create-folder-dialog.component.d.ts +2 -1
- package/document-management/lib/features/document-explorer/document-explorer.component.d.ts +0 -1
- package/document-management/lib/features/drive-choose/slots/file-uploader-widget-extension/file-uploader-widget-extension.component.d.ts +10 -3
- package/document-management/lib/features/shared/components/index.d.ts +0 -1
- package/document-management/lib/features/shared/document-manager.service.d.ts +0 -2
- package/document-management/lib/features/shared/document-manager.types.d.ts +1 -0
- package/fesm2022/acorex-modules-application-management-module-designer.component-BJp8imYd.mjs +315 -0
- package/fesm2022/acorex-modules-application-management-module-designer.component-BJp8imYd.mjs.map +1 -0
- package/fesm2022/acorex-modules-application-management.mjs +1 -1
- package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-MoAj_IYQ.mjs → acorex-modules-document-management-acorex-modules-document-management-BpmG6Dyx.mjs} +86 -145
- package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-BpmG6Dyx.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-DhGDpLBA.mjs → acorex-modules-document-management-attachment-widget.component-DIF_t4fE.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-DhGDpLBA.mjs.map → acorex-modules-document-management-attachment-widget.component-DIF_t4fE.mjs.map} +1 -1
- package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-CCvKUDsw.mjs +141 -0
- package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-CCvKUDsw.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-details-view.component-CIJ5IBHD.mjs → acorex-modules-document-management-details-view.component-D0RIYrHB.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-details-view.component-CIJ5IBHD.mjs.map → acorex-modules-document-management-details-view.component-D0RIYrHB.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-C5JuGFud.mjs → acorex-modules-document-management-drive-choose.component-DMAQr0nK.mjs} +4 -4
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-C5JuGFud.mjs.map → acorex-modules-document-management-drive-choose.component-DMAQr0nK.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-large-icons-view.component-brzJaGRC.mjs → acorex-modules-document-management-large-icons-view.component-C686Ec7s.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-large-icons-view.component-brzJaGRC.mjs.map → acorex-modules-document-management-large-icons-view.component-C686Ec7s.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-DYfROtQ9.mjs → acorex-modules-document-management-large-tiles-view.component-0GpMVYv5.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-DYfROtQ9.mjs.map → acorex-modules-document-management-large-tiles-view.component-0GpMVYv5.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-list-view.component-DZBjqWfy.mjs → acorex-modules-document-management-list-view.component-C1inszTC.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-list-view.component-DZBjqWfy.mjs.map → acorex-modules-document-management-list-view.component-C1inszTC.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-permission-definition.provider-DoVsp7nL.mjs → acorex-modules-document-management-permission-definition.provider-B7lgRLHi.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-permission-definition.provider-DoVsp7nL.mjs.map → acorex-modules-document-management-permission-definition.provider-B7lgRLHi.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-BkilWP6k.mjs → acorex-modules-document-management-rename-node-dialog.component-C9k8WgDG.mjs} +6 -6
- package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-C9k8WgDG.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-small-icons-view.component-Cx5uqw7R.mjs → acorex-modules-document-management-small-icons-view.component-BGcUzNCv.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-small-icons-view.component-Cx5uqw7R.mjs.map → acorex-modules-document-management-small-icons-view.component-BGcUzNCv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-Cs3CLt7l.mjs → acorex-modules-document-management-small-tiles-view.component-CumumWvO.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-Cs3CLt7l.mjs.map → acorex-modules-document-management-small-tiles-view.component-CumumWvO.mjs.map} +1 -1
- package/fesm2022/acorex-modules-document-management.mjs +1 -1
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-C9wUvVuk.mjs → acorex-modules-platform-management-acorex-modules-platform-management-C9ZApxct.mjs} +5 -8
- package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-C9ZApxct.mjs.map +1 -0
- package/fesm2022/{acorex-modules-platform-management-list-version.component-BGhETw3U.mjs → acorex-modules-platform-management-list-version.component-D50Xundj.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-list-version.component-BGhETw3U.mjs.map → acorex-modules-platform-management-list-version.component-D50Xundj.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-settings.provider-C327XLKW.mjs → acorex-modules-platform-management-settings.provider-DsHGn3AZ.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-settings.provider-C327XLKW.mjs.map → acorex-modules-platform-management-settings.provider-DsHGn3AZ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +1 -1
- package/fesm2022/acorex-modules-training-management.mjs +1 -1
- package/fesm2022/acorex-modules-training-management.mjs.map +1 -1
- package/package.json +20 -20
- package/document-management/lib/features/shared/components/choose-document-type/choose-document-type.component.d.ts +0 -21
- package/fesm2022/acorex-modules-application-management-module-designer.component-cD24pUfN.mjs +0 -315
- package/fesm2022/acorex-modules-application-management-module-designer.component-cD24pUfN.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-MoAj_IYQ.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-5sFKSWlW.mjs +0 -135
- package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-5sFKSWlW.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-BkilWP6k.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-C9wUvVuk.mjs.map +0 -1
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@acorex/modules",
|
3
|
-
"version": "19.4.
|
3
|
+
"version": "19.4.4",
|
4
4
|
"peerDependencies": {
|
5
5
|
"@angular/common": ">=19.0.0",
|
6
6
|
"@angular/core": ">=19.0.0",
|
@@ -21,26 +21,22 @@
|
|
21
21
|
"types": "./index.d.ts",
|
22
22
|
"default": "./fesm2022/acorex-modules.mjs"
|
23
23
|
},
|
24
|
-
"./application-management": {
|
25
|
-
"types": "./application-management/index.d.ts",
|
26
|
-
"default": "./fesm2022/acorex-modules-application-management.mjs"
|
27
|
-
},
|
28
|
-
"./auth": {
|
29
|
-
"types": "./auth/index.d.ts",
|
30
|
-
"default": "./fesm2022/acorex-modules-auth.mjs"
|
31
|
-
},
|
32
24
|
"./common": {
|
33
25
|
"types": "./common/index.d.ts",
|
34
26
|
"default": "./fesm2022/acorex-modules-common.mjs"
|
35
27
|
},
|
36
|
-
"./
|
37
|
-
"types": "./
|
38
|
-
"default": "./fesm2022/acorex-modules-
|
28
|
+
"./application-management": {
|
29
|
+
"types": "./application-management/index.d.ts",
|
30
|
+
"default": "./fesm2022/acorex-modules-application-management.mjs"
|
39
31
|
},
|
40
32
|
"./conversation": {
|
41
33
|
"types": "./conversation/index.d.ts",
|
42
34
|
"default": "./fesm2022/acorex-modules-conversation.mjs"
|
43
35
|
},
|
36
|
+
"./dashboard-management": {
|
37
|
+
"types": "./dashboard-management/index.d.ts",
|
38
|
+
"default": "./fesm2022/acorex-modules-dashboard-management.mjs"
|
39
|
+
},
|
44
40
|
"./document-management": {
|
45
41
|
"types": "./document-management/index.d.ts",
|
46
42
|
"default": "./fesm2022/acorex-modules-document-management.mjs"
|
@@ -49,6 +45,10 @@
|
|
49
45
|
"types": "./form-template-management/index.d.ts",
|
50
46
|
"default": "./fesm2022/acorex-modules-form-template-management.mjs"
|
51
47
|
},
|
48
|
+
"./auth": {
|
49
|
+
"types": "./auth/index.d.ts",
|
50
|
+
"default": "./fesm2022/acorex-modules-auth.mjs"
|
51
|
+
},
|
52
52
|
"./issue-management": {
|
53
53
|
"types": "./issue-management/index.d.ts",
|
54
54
|
"default": "./fesm2022/acorex-modules-issue-management.mjs"
|
@@ -69,14 +69,14 @@
|
|
69
69
|
"types": "./platform-management/index.d.ts",
|
70
70
|
"default": "./fesm2022/acorex-modules-platform-management.mjs"
|
71
71
|
},
|
72
|
-
"./project-management": {
|
73
|
-
"types": "./project-management/index.d.ts",
|
74
|
-
"default": "./fesm2022/acorex-modules-project-management.mjs"
|
75
|
-
},
|
76
72
|
"./scheduler-job-management": {
|
77
73
|
"types": "./scheduler-job-management/index.d.ts",
|
78
74
|
"default": "./fesm2022/acorex-modules-scheduler-job-management.mjs"
|
79
75
|
},
|
76
|
+
"./project-management": {
|
77
|
+
"types": "./project-management/index.d.ts",
|
78
|
+
"default": "./fesm2022/acorex-modules-project-management.mjs"
|
79
|
+
},
|
80
80
|
"./security-management": {
|
81
81
|
"types": "./security-management/index.d.ts",
|
82
82
|
"default": "./fesm2022/acorex-modules-security-management.mjs"
|
@@ -85,13 +85,13 @@
|
|
85
85
|
"types": "./settings-management/index.d.ts",
|
86
86
|
"default": "./fesm2022/acorex-modules-settings-management.mjs"
|
87
87
|
},
|
88
|
-
"./text-template-management": {
|
89
|
-
"types": "./text-template-management/index.d.ts",
|
90
|
-
"default": "./fesm2022/acorex-modules-text-template-management.mjs"
|
91
|
-
},
|
92
88
|
"./training-management": {
|
93
89
|
"types": "./training-management/index.d.ts",
|
94
90
|
"default": "./fesm2022/acorex-modules-training-management.mjs"
|
91
|
+
},
|
92
|
+
"./text-template-management": {
|
93
|
+
"types": "./text-template-management/index.d.ts",
|
94
|
+
"default": "./fesm2022/acorex-modules-text-template-management.mjs"
|
95
95
|
}
|
96
96
|
}
|
97
97
|
}
|
@@ -1,21 +0,0 @@
|
|
1
|
-
import { AXDataSource } from '@acorex/cdk/common';
|
2
|
-
import { AXBasePageComponent } from '@acorex/components/page';
|
3
|
-
import { AXMDocumentManagementDocumentTypeEntityModel, AXMDocumentTypeService } from '../../../../entities';
|
4
|
-
import { AXPLayoutContextChangeEvent, AXPWidgetNode } from '@acorex/platform/layout/builder';
|
5
|
-
import { AXPFileTypeProviderService } from '@acorex/platform/common';
|
6
|
-
import * as i0 from "@angular/core";
|
7
|
-
export declare class AXMChooseDocumentTypeComponent extends AXBasePageComponent {
|
8
|
-
documentTypeService: AXMDocumentTypeService;
|
9
|
-
fileTypeService: AXPFileTypeProviderService;
|
10
|
-
documentTypeSelected: import("@angular/core").WritableSignal<AXMDocumentManagementDocumentTypeEntityModel[]>;
|
11
|
-
context: import("@angular/core").WritableSignal<{}>;
|
12
|
-
documentTypesSource: AXDataSource<AXMDocumentManagementDocumentTypeEntityModel>;
|
13
|
-
uploadNode: import("@angular/core").WritableSignal<AXPWidgetNode>;
|
14
|
-
handleChangeDocumentType(event: any): Promise<void>;
|
15
|
-
handleContextChanged(e: AXPLayoutContextChangeEvent): void;
|
16
|
-
handleCancel(): void;
|
17
|
-
handlesubmit(): void;
|
18
|
-
getNode(meta: any): AXPWidgetNode;
|
19
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXMChooseDocumentTypeComponent, never>;
|
20
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXMChooseDocumentTypeComponent, "axm-choose-document-type", never, {}, {}, never, never, true, never>;
|
21
|
-
}
|
package/fesm2022/acorex-modules-application-management-module-designer.component-cD24pUfN.mjs
DELETED
@@ -1,315 +0,0 @@
|
|
1
|
-
import * as i7 from '@acorex/components/badge';
|
2
|
-
import { AXBadgeModule } from '@acorex/components/badge';
|
3
|
-
import * as i6 from '@acorex/components/button';
|
4
|
-
import { AXButtonModule } from '@acorex/components/button';
|
5
|
-
import * as i6$1 from '@acorex/components/collapse';
|
6
|
-
import { AXCollapseModule } from '@acorex/components/collapse';
|
7
|
-
import * as i2$1 from '@acorex/components/decorators';
|
8
|
-
import { AXDecoratorModule } from '@acorex/components/decorators';
|
9
|
-
import * as i2 from '@acorex/components/drawer';
|
10
|
-
import { AXDrawerModule } from '@acorex/components/drawer';
|
11
|
-
import * as i8$1 from '@acorex/components/menu';
|
12
|
-
import { AXMenuModule } from '@acorex/components/menu';
|
13
|
-
import { AXPopoverModule } from '@acorex/components/popover';
|
14
|
-
import { AXSelectionListModule } from '@acorex/components/selection-list';
|
15
|
-
import { AXSideMenuModule } from '@acorex/components/side-menu';
|
16
|
-
import * as i8 from '@acorex/core/translation';
|
17
|
-
import { AXTranslationModule } from '@acorex/core/translation';
|
18
|
-
import { AXPEntityDeletedEvent, AXPEntityCreateEvent } from '@acorex/platform/layout/entity';
|
19
|
-
import { AXPWorkflowService, ofType } from '@acorex/platform/workflow';
|
20
|
-
import * as i1 from '@angular/common';
|
21
|
-
import { CommonModule } from '@angular/common';
|
22
|
-
import * as i0 from '@angular/core';
|
23
|
-
import { inject, signal, Injectable, ChangeDetectorRef, viewChild, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
24
|
-
import * as i2$2 from '@angular/router';
|
25
|
-
import { RouterModule } from '@angular/router';
|
26
|
-
import { set } from 'lodash-es';
|
27
|
-
import { Subject, takeUntil } from 'rxjs';
|
28
|
-
import { AXPModuleDesignerService } from './acorex-modules-application-management.mjs';
|
29
|
-
|
30
|
-
class AXMModuleDesignerContextMenuService {
|
31
|
-
constructor() {
|
32
|
-
this.workflow = inject(AXPWorkflowService);
|
33
|
-
this.copiedRecord = signal(null);
|
34
|
-
this.elementData = signal(null);
|
35
|
-
this.menuItems = [
|
36
|
-
{
|
37
|
-
name: 'create',
|
38
|
-
text: 'Create',
|
39
|
-
icon: 'fas fa-plus',
|
40
|
-
color: 'primary',
|
41
|
-
},
|
42
|
-
{
|
43
|
-
name: 'delete',
|
44
|
-
text: 'Delete',
|
45
|
-
icon: 'fas fa-trash',
|
46
|
-
color: 'danger',
|
47
|
-
},
|
48
|
-
{
|
49
|
-
name: 'details',
|
50
|
-
text: 'Details',
|
51
|
-
icon: 'fas fa-eye',
|
52
|
-
color: 'default',
|
53
|
-
},
|
54
|
-
{
|
55
|
-
name: 'copy',
|
56
|
-
text: 'Copy',
|
57
|
-
icon: 'fas fa-copy',
|
58
|
-
color: 'default',
|
59
|
-
},
|
60
|
-
{
|
61
|
-
name: 'paste',
|
62
|
-
text: 'Paste',
|
63
|
-
icon: 'fas fa-paste',
|
64
|
-
color: 'default',
|
65
|
-
disabled: false,
|
66
|
-
},
|
67
|
-
];
|
68
|
-
}
|
69
|
-
open(e) {
|
70
|
-
const target = e.targetElement;
|
71
|
-
const elementType = target?.getAttribute('data-elementType');
|
72
|
-
const { data } = target;
|
73
|
-
if (elementType == 'module' || elementType == 'subModule') {
|
74
|
-
const moduleId = target?.getAttribute('data-moduleId');
|
75
|
-
const entityType = target?.getAttribute('data-entityType');
|
76
|
-
if (elementType == 'module') {
|
77
|
-
this.elementData.set({
|
78
|
-
entityType,
|
79
|
-
moduleId: moduleId,
|
80
|
-
record: {
|
81
|
-
id: moduleId,
|
82
|
-
},
|
83
|
-
});
|
84
|
-
e.items = this.getMenuItems(['details', 'delete']);
|
85
|
-
}
|
86
|
-
else {
|
87
|
-
this.elementData.set({
|
88
|
-
entityType,
|
89
|
-
moduleId: moduleId,
|
90
|
-
record: undefined,
|
91
|
-
});
|
92
|
-
const items = this.getMenuItems(['create', 'paste']);
|
93
|
-
const customMenuItems = items.map((i) => i.name == 'paste' ? { ...i, disabled: entityType == this.copiedRecord()?.type ? false : true } : i);
|
94
|
-
e.items = customMenuItems;
|
95
|
-
}
|
96
|
-
}
|
97
|
-
else if (elementType == 'subModuleItem') {
|
98
|
-
this.elementData.set(data);
|
99
|
-
e.items = this.getMenuItems(['delete', 'copy', 'details']);
|
100
|
-
}
|
101
|
-
else {
|
102
|
-
e.items = [];
|
103
|
-
e.canceled = true;
|
104
|
-
}
|
105
|
-
}
|
106
|
-
itemClick(e) {
|
107
|
-
if (this.elementData()) {
|
108
|
-
switch (e.item.name) {
|
109
|
-
case 'create':
|
110
|
-
this.createEntity(this.elementData()?.entityType, this.elementData()?.moduleId);
|
111
|
-
break;
|
112
|
-
case 'details':
|
113
|
-
this.showDetails(this.elementData()?.entityType, this.elementData()?.record.id);
|
114
|
-
break;
|
115
|
-
case 'delete':
|
116
|
-
this.deleteEntity(this.elementData()?.entityType, this.elementData()?.record.id, this.elementData()?.moduleId);
|
117
|
-
break;
|
118
|
-
case 'copy':
|
119
|
-
this.copyRecord(this.elementData()?.entityType, this.elementData()?.record);
|
120
|
-
break;
|
121
|
-
case 'paste':
|
122
|
-
this.pasteRecord(this.elementData()?.moduleId);
|
123
|
-
break;
|
124
|
-
default:
|
125
|
-
break;
|
126
|
-
}
|
127
|
-
}
|
128
|
-
}
|
129
|
-
async createEntity(entityType, moduleId) {
|
130
|
-
await this.workflow.execute('create-module-entity', {
|
131
|
-
entity: `application-management.${entityType}`,
|
132
|
-
data: {
|
133
|
-
moduleId,
|
134
|
-
},
|
135
|
-
meta: {
|
136
|
-
type: entityType,
|
137
|
-
moduleId,
|
138
|
-
},
|
139
|
-
});
|
140
|
-
}
|
141
|
-
async showDetails(entityType, id) {
|
142
|
-
await this.workflow.execute('show-module-entity-details', {
|
143
|
-
entity: `application-management.${entityType}`,
|
144
|
-
data: {
|
145
|
-
id,
|
146
|
-
},
|
147
|
-
});
|
148
|
-
}
|
149
|
-
copyRecord(entityType, record) {
|
150
|
-
const newRecord = { ...record, moduleId: undefined, id: undefined };
|
151
|
-
this.copiedRecord.set({ type: entityType, record: newRecord });
|
152
|
-
}
|
153
|
-
async pasteRecord(moduleId) {
|
154
|
-
if (this.copiedRecord()) {
|
155
|
-
await this.workflow.execute('create-module-entity', {
|
156
|
-
entity: `application-management.${this.copiedRecord()?.type}`,
|
157
|
-
data: {
|
158
|
-
...this.copiedRecord()?.record,
|
159
|
-
moduleId,
|
160
|
-
},
|
161
|
-
meta: {
|
162
|
-
type: this.copiedRecord()?.type,
|
163
|
-
moduleId,
|
164
|
-
},
|
165
|
-
});
|
166
|
-
}
|
167
|
-
}
|
168
|
-
async deleteEntity(entityType, id, moduleId) {
|
169
|
-
await this.workflow.execute('delete-entity', {
|
170
|
-
entity: `application-management.${entityType}`,
|
171
|
-
data: {
|
172
|
-
id,
|
173
|
-
},
|
174
|
-
meta: {
|
175
|
-
moduleId,
|
176
|
-
type: entityType,
|
177
|
-
},
|
178
|
-
});
|
179
|
-
}
|
180
|
-
getMenuItems(includeItems) {
|
181
|
-
return this.menuItems.filter((i) => includeItems.includes(i.name));
|
182
|
-
}
|
183
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMModuleDesignerContextMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
184
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMModuleDesignerContextMenuService, providedIn: 'root' }); }
|
185
|
-
}
|
186
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMModuleDesignerContextMenuService, decorators: [{
|
187
|
-
type: Injectable,
|
188
|
-
args: [{
|
189
|
-
providedIn: 'root',
|
190
|
-
}]
|
191
|
-
}] });
|
192
|
-
|
193
|
-
class AXMModuleDesignerComponent {
|
194
|
-
constructor() {
|
195
|
-
this.cdr = inject(ChangeDetectorRef);
|
196
|
-
this.contextMenu = viewChild('contextMenu');
|
197
|
-
this.dataProvider = inject(AXPModuleDesignerService);
|
198
|
-
this.workflow = inject(AXPWorkflowService);
|
199
|
-
this.contextMenuService = inject(AXMModuleDesignerContextMenuService);
|
200
|
-
this.modules = signal([]);
|
201
|
-
this.moduleDataCache = new Map();
|
202
|
-
this.destroyed = new Subject();
|
203
|
-
this.subscribeActionEvents();
|
204
|
-
}
|
205
|
-
ngOnInit() {
|
206
|
-
this.loadModules();
|
207
|
-
}
|
208
|
-
subscribeActionEvents() {
|
209
|
-
this.workflow.events$
|
210
|
-
.pipe(ofType(AXPEntityDeletedEvent, AXPEntityCreateEvent))
|
211
|
-
.pipe(takeUntil(this.destroyed))
|
212
|
-
.subscribe((event) => {
|
213
|
-
const { meta } = event.payload;
|
214
|
-
if (meta.type === 'module') {
|
215
|
-
this.loadModules();
|
216
|
-
}
|
217
|
-
else {
|
218
|
-
this.loadModuleData(meta.moduleId, meta.type, true);
|
219
|
-
}
|
220
|
-
this.cdr.markForCheck();
|
221
|
-
});
|
222
|
-
}
|
223
|
-
async loadModules() {
|
224
|
-
try {
|
225
|
-
const modules = await this.dataProvider.getModules();
|
226
|
-
this.modules.set(modules.items);
|
227
|
-
this.refreshContextMenu();
|
228
|
-
}
|
229
|
-
catch (error) {
|
230
|
-
console.error('Error loading modules:', error);
|
231
|
-
}
|
232
|
-
}
|
233
|
-
async handleCollapseItemClick(moduleId, e, dataType) {
|
234
|
-
if (e.component.isCollapsed) {
|
235
|
-
e.handled = true;
|
236
|
-
e.component.isLoading = true;
|
237
|
-
await this.loadModuleData(moduleId, dataType);
|
238
|
-
e.component.toggle();
|
239
|
-
e.component.isLoading = false;
|
240
|
-
e.component['cdr'].markForCheck();
|
241
|
-
this.refreshContextMenu();
|
242
|
-
}
|
243
|
-
}
|
244
|
-
refreshContextMenu() {
|
245
|
-
setTimeout(() => {
|
246
|
-
this.contextMenu()?.refresh();
|
247
|
-
}, 0);
|
248
|
-
}
|
249
|
-
async loadModuleData(moduleId, dataType, hardReload = false) {
|
250
|
-
const cacheKey = `${moduleId}-${dataType}`;
|
251
|
-
let dataItems = this.moduleDataCache.get(cacheKey);
|
252
|
-
// if (!dataItems || hardReload) {
|
253
|
-
try {
|
254
|
-
const methodMap = {
|
255
|
-
entity: this.dataProvider.getEntities,
|
256
|
-
permission: this.dataProvider.getPermissions,
|
257
|
-
feature: this.dataProvider.getFeatures,
|
258
|
-
};
|
259
|
-
const data = await methodMap[dataType].call(this.dataProvider, moduleId);
|
260
|
-
dataItems = data.items;
|
261
|
-
this.moduleDataCache.set(cacheKey, dataItems);
|
262
|
-
}
|
263
|
-
catch (error) {
|
264
|
-
console.error(`Error loading ${dataType}:`, error);
|
265
|
-
}
|
266
|
-
// }
|
267
|
-
}
|
268
|
-
getEntities(moduleId) {
|
269
|
-
return this.moduleDataCache.get(`${moduleId}-entity`) || [];
|
270
|
-
}
|
271
|
-
getPermissions(moduleId) {
|
272
|
-
return this.moduleDataCache.get(`${moduleId}-permission`) || [];
|
273
|
-
}
|
274
|
-
getFeatures(moduleId) {
|
275
|
-
return this.moduleDataCache.get(`${moduleId}-feature`) || [];
|
276
|
-
}
|
277
|
-
openingContextMenu(e) {
|
278
|
-
this.contextMenuService.open(e);
|
279
|
-
}
|
280
|
-
handleActionClick(e) {
|
281
|
-
this.contextMenuService.itemClick(e);
|
282
|
-
}
|
283
|
-
createModule() {
|
284
|
-
this.contextMenuService.createEntity('module');
|
285
|
-
}
|
286
|
-
destroy() {
|
287
|
-
this.destroyed.next();
|
288
|
-
this.destroyed.complete();
|
289
|
-
}
|
290
|
-
assignData(target, data) {
|
291
|
-
set(target, 'data', data);
|
292
|
-
}
|
293
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMModuleDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
294
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AXMModuleDesignerComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<ax-drawer-container class=\"ax-overflow-hidden\">\n <ax-drawer #drawer location=\"start\" [collapsed]=\"false\" [mode]=\"'push'\">\n <ax-content class=\"ax-w-80 ax-relative ax-border-e ax-px-4 ax-py-2\">\n <div class=\"ax-overflow-auto ax-h-[calc(100vh-180px)]\">\n <span class=\"ax-font-bold ax-text-xl\">{{ 'designer.modules' | translate | async }}</span>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-mt-4\">\n @if(modules().length){\n <ax-collapse-group [accordion]=\"false\" look=\"blank\">\n @for(m of modules();track $index){\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-folder ax-text-warning\"\n [isCollapsed]=\"true\"\n [caption]=\"m.title\"\n look=\"none\"\n data-elementType=\"module\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"module\"\n >\n <div class=\"ax-mx-3\">\n <ax-collapse-group [accordion]=\"false\" look=\"blank\">\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-box ax-text-neutral-400\"\n [isCollapsed]=\"true\"\n (onClick)=\"handleCollapseItemClick(m.id, $event, 'entity')\"\n [caption]=\"('designer.entities' | translate | async) ?? 'Entities'\"\n look=\"none\"\n data-elementType=\"subModule\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"entity\"\n >\n <ng-container\n [ngTemplateOutlet]=\"childTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: { type: 'entity', items: getEntities(m.id), moduleId: m.id }\n }\"\n ></ng-container>\n </ax-collapse>\n\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-star ax-text-neutral-400\"\n [isCollapsed]=\"true\"\n (onClick)=\"handleCollapseItemClick(m.id, $event, 'feature')\"\n [caption]=\"('designer.features' | translate | async) ?? 'Features'\"\n look=\"none\"\n data-elementType=\"subModule\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"feature\"\n >\n <ng-container\n [ngTemplateOutlet]=\"childTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: { type: 'feature', items: getFeatures(m.id), moduleId: m.id }\n }\"\n ></ng-container>\n </ax-collapse>\n\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-key ax-text-neutral-400\"\n [isCollapsed]=\"true\"\n (onClick)=\"handleCollapseItemClick(m.id, $event, 'permission')\"\n [caption]=\"('designer.permissions' | translate | async) ?? 'Permissions'\"\n look=\"none\"\n data-elementType=\"subModule\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"permission\"\n >\n <ng-container\n [ngTemplateOutlet]=\"childTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: { type: 'permission', items: getPermissions(m.id), moduleId: m.id }\n }\"\n ></ng-container>\n </ax-collapse>\n </ax-collapse-group>\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n } @else {\n <div class=\"ax-h-full ax-flex ax-items-center ax-justify-center\">\n <span class=\"ax-text-neutral-500 ax-text-sm\">{{ 'designer.emptyModulesText' | translate | async }}</span>\n </div>\n }\n </div>\n <ax-button\n class=\"ax-absolute ax-bottom-4 ax-w-72\"\n [text]=\"('designer.createModule' | translate | async) ?? 'Create New Module'\"\n (onClick)=\"createModule()\"\n look=\"solid\"\n color=\"primary\"\n >\n <ax-icon class=\"fas fa-plus\"> </ax-icon>\n </ax-button>\n </div>\n </ax-content>\n\n <ng-template #childTemplate let-child>\n <div class=\"ax-flex ax-flex-col ax-cursor-pointer ax-select-none ax-border-s ax-ms-[14px] ax-ps-2\">\n @for (item of child.items; track $index) {\n\n <div\n #d\n (click)=\"contextMenuService.showDetails(child.type, item.id)\"\n class=\"ctx ax-px-2 ax-py-1 ax-flex ax-items-center ax-justify-between hover:ax-bg-neutral-100 dark:hover:ax-bg-neutral-700 hover:ax-rounded-md\"\n data-elementType=\"subModuleItem\"\n >\n {{ assignData(d, { record: item, entityType: child.type, moduleId: child.moduleId }) }}\n <span>{{ item.title }}</span>\n <ax-badge\n [look]=\"'twotone'\"\n [color]=\"item.isArchived ? 'danger' : 'success'\"\n [text]=\"item.isArchived ? 'Off' : 'On'\"\n >\n </ax-badge>\n </div>\n }\n </div>\n </ng-template>\n </ax-drawer>\n <ax-content>\n <router-outlet></router-outlet>\n </ax-content>\n</ax-drawer-container>\n\n<ax-context-menu\n #contextMenu\n (onItemClick)=\"handleActionClick($event)\"\n [items]=\"[]\"\n [target]=\"'.ctx'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onOpening)=\"openingContextMenu($event)\"\n>\n</ax-context-menu>\n", styles: [".ax-collapse-header{padding:.25rem .5rem!important}.ax-collapse-header:hover{border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1))}.ax-collapse-header:hover:is(.ax-dark *){--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity, 1))}.ax-collapse-body-content{padding:.25rem!important;padding-inline-start:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i2.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "closeOthers", "collapsed"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i2.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.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: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$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: AXTranslationModule }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }, { kind: "ngmodule", type: AXSideMenuModule }, { kind: "ngmodule", type: AXCollapseModule }, { kind: "component", type: i6$1.AXCollapseComponent, selector: "ax-collapse", inputs: ["disabled", "look", "isCollapsed", "showHeader", "caption", "icon", "isLoading", "headerTemplate"], outputs: ["onClick", "isCollapsedChange"] }, { kind: "component", type: i6$1.AXCollapseGroupComponent, selector: "ax-collapse-group", inputs: ["look", "accordion", "activeIndex"], outputs: ["accordionChange", "activeIndexChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXSelectionListModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i7.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i8$1.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
295
|
-
}
|
296
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXMModuleDesignerComponent, decorators: [{
|
297
|
-
type: Component,
|
298
|
-
args: [{ encapsulation: ViewEncapsulation.None, imports: [
|
299
|
-
CommonModule,
|
300
|
-
AXDrawerModule,
|
301
|
-
AXButtonModule,
|
302
|
-
AXDecoratorModule,
|
303
|
-
AXTranslationModule,
|
304
|
-
AXSideMenuModule,
|
305
|
-
AXCollapseModule,
|
306
|
-
AXPopoverModule,
|
307
|
-
AXSelectionListModule,
|
308
|
-
AXBadgeModule,
|
309
|
-
AXMenuModule,
|
310
|
-
RouterModule,
|
311
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-drawer-container class=\"ax-overflow-hidden\">\n <ax-drawer #drawer location=\"start\" [collapsed]=\"false\" [mode]=\"'push'\">\n <ax-content class=\"ax-w-80 ax-relative ax-border-e ax-px-4 ax-py-2\">\n <div class=\"ax-overflow-auto ax-h-[calc(100vh-180px)]\">\n <span class=\"ax-font-bold ax-text-xl\">{{ 'designer.modules' | translate | async }}</span>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-mt-4\">\n @if(modules().length){\n <ax-collapse-group [accordion]=\"false\" look=\"blank\">\n @for(m of modules();track $index){\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-folder ax-text-warning\"\n [isCollapsed]=\"true\"\n [caption]=\"m.title\"\n look=\"none\"\n data-elementType=\"module\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"module\"\n >\n <div class=\"ax-mx-3\">\n <ax-collapse-group [accordion]=\"false\" look=\"blank\">\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-box ax-text-neutral-400\"\n [isCollapsed]=\"true\"\n (onClick)=\"handleCollapseItemClick(m.id, $event, 'entity')\"\n [caption]=\"('designer.entities' | translate | async) ?? 'Entities'\"\n look=\"none\"\n data-elementType=\"subModule\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"entity\"\n >\n <ng-container\n [ngTemplateOutlet]=\"childTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: { type: 'entity', items: getEntities(m.id), moduleId: m.id }\n }\"\n ></ng-container>\n </ax-collapse>\n\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-star ax-text-neutral-400\"\n [isCollapsed]=\"true\"\n (onClick)=\"handleCollapseItemClick(m.id, $event, 'feature')\"\n [caption]=\"('designer.features' | translate | async) ?? 'Features'\"\n look=\"none\"\n data-elementType=\"subModule\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"feature\"\n >\n <ng-container\n [ngTemplateOutlet]=\"childTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: { type: 'feature', items: getFeatures(m.id), moduleId: m.id }\n }\"\n ></ng-container>\n </ax-collapse>\n\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-key ax-text-neutral-400\"\n [isCollapsed]=\"true\"\n (onClick)=\"handleCollapseItemClick(m.id, $event, 'permission')\"\n [caption]=\"('designer.permissions' | translate | async) ?? 'Permissions'\"\n look=\"none\"\n data-elementType=\"subModule\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"permission\"\n >\n <ng-container\n [ngTemplateOutlet]=\"childTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: { type: 'permission', items: getPermissions(m.id), moduleId: m.id }\n }\"\n ></ng-container>\n </ax-collapse>\n </ax-collapse-group>\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n } @else {\n <div class=\"ax-h-full ax-flex ax-items-center ax-justify-center\">\n <span class=\"ax-text-neutral-500 ax-text-sm\">{{ 'designer.emptyModulesText' | translate | async }}</span>\n </div>\n }\n </div>\n <ax-button\n class=\"ax-absolute ax-bottom-4 ax-w-72\"\n [text]=\"('designer.createModule' | translate | async) ?? 'Create New Module'\"\n (onClick)=\"createModule()\"\n look=\"solid\"\n color=\"primary\"\n >\n <ax-icon class=\"fas fa-plus\"> </ax-icon>\n </ax-button>\n </div>\n </ax-content>\n\n <ng-template #childTemplate let-child>\n <div class=\"ax-flex ax-flex-col ax-cursor-pointer ax-select-none ax-border-s ax-ms-[14px] ax-ps-2\">\n @for (item of child.items; track $index) {\n\n <div\n #d\n (click)=\"contextMenuService.showDetails(child.type, item.id)\"\n class=\"ctx ax-px-2 ax-py-1 ax-flex ax-items-center ax-justify-between hover:ax-bg-neutral-100 dark:hover:ax-bg-neutral-700 hover:ax-rounded-md\"\n data-elementType=\"subModuleItem\"\n >\n {{ assignData(d, { record: item, entityType: child.type, moduleId: child.moduleId }) }}\n <span>{{ item.title }}</span>\n <ax-badge\n [look]=\"'twotone'\"\n [color]=\"item.isArchived ? 'danger' : 'success'\"\n [text]=\"item.isArchived ? 'Off' : 'On'\"\n >\n </ax-badge>\n </div>\n }\n </div>\n </ng-template>\n </ax-drawer>\n <ax-content>\n <router-outlet></router-outlet>\n </ax-content>\n</ax-drawer-container>\n\n<ax-context-menu\n #contextMenu\n (onItemClick)=\"handleActionClick($event)\"\n [items]=\"[]\"\n [target]=\"'.ctx'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onOpening)=\"openingContextMenu($event)\"\n>\n</ax-context-menu>\n", styles: [".ax-collapse-header{padding:.25rem .5rem!important}.ax-collapse-header:hover{border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1))}.ax-collapse-header:hover:is(.ax-dark *){--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity, 1))}.ax-collapse-body-content{padding:.25rem!important;padding-inline-start:0!important}\n"] }]
|
312
|
-
}], ctorParameters: () => [] });
|
313
|
-
|
314
|
-
export { AXMModuleDesignerComponent };
|
315
|
-
//# sourceMappingURL=acorex-modules-application-management-module-designer.component-cD24pUfN.mjs.map
|
package/fesm2022/acorex-modules-application-management-module-designer.component-cD24pUfN.mjs.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"acorex-modules-application-management-module-designer.component-cD24pUfN.mjs","sources":["../../../../libs/modules/application-management/src/lib/services/context-menu.service.ts","../../../../libs/modules/application-management/src/lib/module-designer/module-designer.component.ts","../../../../libs/modules/application-management/src/lib/module-designer/module-designer.component.html"],"sourcesContent":["import { AXContextMenuItemsClickEvent, AXContextMenuOpeningEvent, AXMenuItem } from '@acorex/components/menu';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { AXMModuleItem } from '../module-designer/module-designer.type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMModuleDesignerContextMenuService {\n private workflow = inject(AXPWorkflowService);\n protected copiedRecord = signal<{ type: AXMModuleItem; record: any } | null>(null);\n protected elementData = signal<{ entityType: AXMModuleItem; record: any; moduleId: string } | null>(null);\n\n private menuItems: AXMenuItem[] = [\n {\n name: 'create',\n text: 'Create',\n icon: 'fas fa-plus',\n color: 'primary',\n },\n {\n name: 'delete',\n text: 'Delete',\n icon: 'fas fa-trash',\n color: 'danger',\n },\n {\n name: 'details',\n text: 'Details',\n icon: 'fas fa-eye',\n color: 'default',\n },\n {\n name: 'copy',\n text: 'Copy',\n icon: 'fas fa-copy',\n color: 'default',\n },\n {\n name: 'paste',\n text: 'Paste',\n icon: 'fas fa-paste',\n color: 'default',\n disabled: false,\n },\n ];\n\n open(e: AXContextMenuOpeningEvent) {\n const target = e.targetElement;\n const elementType = target?.getAttribute('data-elementType');\n\n const { data } = target as any;\n\n if (elementType == 'module' || elementType == 'subModule') {\n const moduleId = target?.getAttribute('data-moduleId');\n const entityType = target?.getAttribute('data-entityType') as AXMModuleItem;\n if (elementType == 'module') {\n this.elementData.set({\n entityType,\n moduleId: moduleId as string,\n record: {\n id: moduleId,\n },\n });\n e.items = this.getMenuItems(['details', 'delete']);\n } else {\n this.elementData.set({\n entityType,\n moduleId: moduleId as string,\n record: undefined,\n });\n const items = this.getMenuItems(['create', 'paste']);\n const customMenuItems = items.map((i) =>\n i.name == 'paste' ? { ...i, disabled: entityType == this.copiedRecord()?.type ? false : true } : i\n );\n e.items = customMenuItems;\n }\n } else if (elementType == 'subModuleItem') {\n this.elementData.set(data);\n e.items = this.getMenuItems(['delete', 'copy', 'details']);\n } else {\n e.items = [];\n e.canceled = true;\n }\n }\n\n itemClick(e: AXContextMenuItemsClickEvent) {\n if (this.elementData()) {\n switch (e.item.name) {\n case 'create':\n this.createEntity(this.elementData()?.entityType as AXMModuleItem, this.elementData()?.moduleId);\n break;\n\n case 'details':\n this.showDetails(this.elementData()?.entityType as AXMModuleItem | 'module', this.elementData()?.record.id);\n break;\n\n case 'delete':\n this.deleteEntity(\n this.elementData()?.entityType as AXMModuleItem | 'module',\n this.elementData()?.record.id,\n this.elementData()?.moduleId\n );\n break;\n\n case 'copy':\n this.copyRecord(this.elementData()?.entityType as AXMModuleItem, this.elementData()?.record);\n break;\n\n case 'paste':\n this.pasteRecord(this.elementData()?.moduleId as string);\n break;\n\n default:\n break;\n }\n }\n }\n\n async createEntity(entityType: 'module' | AXMModuleItem, moduleId?: string) {\n await this.workflow.execute('create-module-entity', {\n entity: `application-management.${entityType}`,\n data: {\n moduleId,\n },\n meta: {\n type: entityType,\n moduleId,\n },\n });\n }\n\n async showDetails(entityType: 'module' | AXMModuleItem, id: string) {\n await this.workflow.execute('show-module-entity-details', {\n entity: `application-management.${entityType}`,\n data: {\n id,\n },\n });\n }\n\n private copyRecord(entityType: AXMModuleItem, record: any) {\n const newRecord = { ...record, moduleId: undefined, id: undefined };\n this.copiedRecord.set({ type: entityType, record: newRecord });\n }\n\n private async pasteRecord(moduleId: string) {\n if (this.copiedRecord()) {\n await this.workflow.execute('create-module-entity', {\n entity: `application-management.${this.copiedRecord()?.type}`,\n data: {\n ...this.copiedRecord()?.record,\n moduleId,\n },\n meta: {\n type: this.copiedRecord()?.type,\n moduleId,\n },\n });\n }\n }\n\n private async deleteEntity(entityType: 'module' | AXMModuleItem, id: string[] | string, moduleId?: string) {\n await this.workflow.execute('delete-entity', {\n entity: `application-management.${entityType}`,\n data: {\n id,\n },\n meta: {\n moduleId,\n type: entityType,\n },\n });\n }\n\n private getMenuItems(includeItems: string[]) {\n return this.menuItems.filter((i) => includeItems.includes(i.name as string));\n }\n}\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCollapseClickEvent, AXCollapseModule } from '@acorex/components/collapse';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXSideMenuModule } from '@acorex/components/side-menu';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPEntityCreateEvent, AXPEntityDeletedEvent } from '@acorex/platform/layout/entity';\nimport { AXPWorkflowService, ofType } from '@acorex/platform/workflow';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { set } from 'lodash-es';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXMModuleDesignerContextMenuService } from '../services/context-menu.service';\nimport { AXPModuleDesignerService } from './module-designer.service';\nimport { AXMModuleItem } from './module-designer.type';\n\n@Component({\n templateUrl: './module-designer.component.html',\n styleUrls: ['./module-designer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXDrawerModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXSideMenuModule,\n AXCollapseModule,\n AXPopoverModule,\n AXSelectionListModule,\n AXBadgeModule,\n AXMenuModule,\n RouterModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMModuleDesignerComponent implements OnInit {\n protected cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\n protected contextMenu = viewChild<AXContextMenuComponent>('contextMenu');\n\n protected dataProvider = inject(AXPModuleDesignerService);\n private workflow = inject(AXPWorkflowService);\n protected contextMenuService = inject(AXMModuleDesignerContextMenuService);\n\n protected modules = signal<any[]>([]);\n\n protected moduleDataCache = new Map<string, any[]>();\n\n private readonly destroyed = new Subject<void>();\n\n constructor() {\n this.subscribeActionEvents();\n }\n\n ngOnInit() {\n this.loadModules();\n }\n\n protected subscribeActionEvents() {\n this.workflow.events$\n .pipe(ofType(AXPEntityDeletedEvent, AXPEntityCreateEvent))\n .pipe(takeUntil(this.destroyed))\n .subscribe((event) => {\n const { meta } = event.payload;\n if (meta.type === 'module') {\n this.loadModules();\n } else {\n this.loadModuleData(meta.moduleId, meta.type, true);\n }\n this.cdr.markForCheck();\n });\n }\n\n protected async loadModules() {\n try {\n const modules = await this.dataProvider.getModules();\n this.modules.set(modules.items);\n this.refreshContextMenu();\n } catch (error) {\n console.error('Error loading modules:', error);\n }\n }\n\n protected async handleCollapseItemClick(moduleId: string, e: AXCollapseClickEvent, dataType: AXMModuleItem) {\n if (e.component.isCollapsed) {\n e.handled = true;\n e.component.isLoading = true;\n\n await this.loadModuleData(moduleId, dataType);\n\n e.component.toggle();\n e.component.isLoading = false;\n e.component['cdr'].markForCheck();\n this.refreshContextMenu();\n }\n }\n\n protected refreshContextMenu() {\n setTimeout(() => {\n this.contextMenu()?.refresh();\n }, 0);\n }\n\n protected async loadModuleData(moduleId: string, dataType: AXMModuleItem, hardReload = false) {\n const cacheKey = `${moduleId}-${dataType}`;\n\n let dataItems = this.moduleDataCache.get(cacheKey);\n // if (!dataItems || hardReload) {\n try {\n const methodMap = {\n entity: this.dataProvider.getEntities,\n permission: this.dataProvider.getPermissions,\n feature: this.dataProvider.getFeatures,\n };\n const data = await methodMap[dataType].call(this.dataProvider, moduleId);\n\n dataItems = data.items as any[];\n this.moduleDataCache.set(cacheKey, dataItems);\n } catch (error) {\n console.error(`Error loading ${dataType}:`, error);\n }\n // }\n }\n\n protected getEntities(moduleId: string) {\n return this.moduleDataCache.get(`${moduleId}-entity`) || [];\n }\n\n protected getPermissions(moduleId: string) {\n return this.moduleDataCache.get(`${moduleId}-permission`) || [];\n }\n\n protected getFeatures(moduleId: string) {\n return this.moduleDataCache.get(`${moduleId}-feature`) || [];\n }\n\n protected openingContextMenu(e: AXContextMenuOpeningEvent) {\n this.contextMenuService.open(e);\n }\n\n protected handleActionClick(e: AXContextMenuItemsClickEvent) {\n this.contextMenuService.itemClick(e);\n }\n\n protected createModule() {\n this.contextMenuService.createEntity('module');\n }\n\n protected destroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n protected assignData(target: HTMLElement, data: any): void {\n set(target, 'data', data);\n }\n}\n","<ax-drawer-container class=\"ax-overflow-hidden\">\n <ax-drawer #drawer location=\"start\" [collapsed]=\"false\" [mode]=\"'push'\">\n <ax-content class=\"ax-w-80 ax-relative ax-border-e ax-px-4 ax-py-2\">\n <div class=\"ax-overflow-auto ax-h-[calc(100vh-180px)]\">\n <span class=\"ax-font-bold ax-text-xl\">{{ 'designer.modules' | translate | async }}</span>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-mt-4\">\n @if(modules().length){\n <ax-collapse-group [accordion]=\"false\" look=\"blank\">\n @for(m of modules();track $index){\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-folder ax-text-warning\"\n [isCollapsed]=\"true\"\n [caption]=\"m.title\"\n look=\"none\"\n data-elementType=\"module\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"module\"\n >\n <div class=\"ax-mx-3\">\n <ax-collapse-group [accordion]=\"false\" look=\"blank\">\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-box ax-text-neutral-400\"\n [isCollapsed]=\"true\"\n (onClick)=\"handleCollapseItemClick(m.id, $event, 'entity')\"\n [caption]=\"('designer.entities' | translate | async) ?? 'Entities'\"\n look=\"none\"\n data-elementType=\"subModule\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"entity\"\n >\n <ng-container\n [ngTemplateOutlet]=\"childTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: { type: 'entity', items: getEntities(m.id), moduleId: m.id }\n }\"\n ></ng-container>\n </ax-collapse>\n\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-star ax-text-neutral-400\"\n [isCollapsed]=\"true\"\n (onClick)=\"handleCollapseItemClick(m.id, $event, 'feature')\"\n [caption]=\"('designer.features' | translate | async) ?? 'Features'\"\n look=\"none\"\n data-elementType=\"subModule\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"feature\"\n >\n <ng-container\n [ngTemplateOutlet]=\"childTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: { type: 'feature', items: getFeatures(m.id), moduleId: m.id }\n }\"\n ></ng-container>\n </ax-collapse>\n\n <ax-collapse\n class=\"ctx\"\n icon=\"fas fa-key ax-text-neutral-400\"\n [isCollapsed]=\"true\"\n (onClick)=\"handleCollapseItemClick(m.id, $event, 'permission')\"\n [caption]=\"('designer.permissions' | translate | async) ?? 'Permissions'\"\n look=\"none\"\n data-elementType=\"subModule\"\n [attr.data-moduleId]=\"m.id\"\n data-entityType=\"permission\"\n >\n <ng-container\n [ngTemplateOutlet]=\"childTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: { type: 'permission', items: getPermissions(m.id), moduleId: m.id }\n }\"\n ></ng-container>\n </ax-collapse>\n </ax-collapse-group>\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n } @else {\n <div class=\"ax-h-full ax-flex ax-items-center ax-justify-center\">\n <span class=\"ax-text-neutral-500 ax-text-sm\">{{ 'designer.emptyModulesText' | translate | async }}</span>\n </div>\n }\n </div>\n <ax-button\n class=\"ax-absolute ax-bottom-4 ax-w-72\"\n [text]=\"('designer.createModule' | translate | async) ?? 'Create New Module'\"\n (onClick)=\"createModule()\"\n look=\"solid\"\n color=\"primary\"\n >\n <ax-icon class=\"fas fa-plus\"> </ax-icon>\n </ax-button>\n </div>\n </ax-content>\n\n <ng-template #childTemplate let-child>\n <div class=\"ax-flex ax-flex-col ax-cursor-pointer ax-select-none ax-border-s ax-ms-[14px] ax-ps-2\">\n @for (item of child.items; track $index) {\n\n <div\n #d\n (click)=\"contextMenuService.showDetails(child.type, item.id)\"\n class=\"ctx ax-px-2 ax-py-1 ax-flex ax-items-center ax-justify-between hover:ax-bg-neutral-100 dark:hover:ax-bg-neutral-700 hover:ax-rounded-md\"\n data-elementType=\"subModuleItem\"\n >\n {{ assignData(d, { record: item, entityType: child.type, moduleId: child.moduleId }) }}\n <span>{{ item.title }}</span>\n <ax-badge\n [look]=\"'twotone'\"\n [color]=\"item.isArchived ? 'danger' : 'success'\"\n [text]=\"item.isArchived ? 'Off' : 'On'\"\n >\n </ax-badge>\n </div>\n }\n </div>\n </ng-template>\n </ax-drawer>\n <ax-content>\n <router-outlet></router-outlet>\n </ax-content>\n</ax-drawer-container>\n\n<ax-context-menu\n #contextMenu\n (onItemClick)=\"handleActionClick($event)\"\n [items]=\"[]\"\n [target]=\"'.ctx'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onOpening)=\"openingContextMenu($event)\"\n>\n</ax-context-menu>\n"],"names":["i3","i4","i6","i8","i9"],"mappings":"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"}
|