@acorex/modules 18.1.0 → 18.1.1

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 (28) hide show
  1. package/application-management/lib/module-designer/module-designer.component.d.ts +2 -2
  2. package/application-management/lib/services/context-menu.service.d.ts +2 -2
  3. package/esm2022/application-management/lib/module-designer/module-designer.component.mjs +3 -3
  4. package/esm2022/application-management/lib/services/context-menu.service.mjs +6 -7
  5. package/esm2022/auth/lib/shared/layouts/master/master.layout.mjs +3 -3
  6. package/fesm2022/acorex-modules-application-management-module-designer.component-Bgq9-BVv.mjs +322 -0
  7. package/fesm2022/acorex-modules-application-management-module-designer.component-Bgq9-BVv.mjs.map +1 -0
  8. package/fesm2022/acorex-modules-application-management.mjs +1 -1
  9. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-D09VaQPe.mjs → acorex-modules-auth-acorex-modules-auth-CS3UFdX0.mjs} +8 -8
  10. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-D09VaQPe.mjs.map → acorex-modules-auth-acorex-modules-auth-CS3UFdX0.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-auth-app-chooser.component-DN1ZJiZs.mjs → acorex-modules-auth-app-chooser.component-BlJbIMKi.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-auth-app-chooser.component-DN1ZJiZs.mjs.map → acorex-modules-auth-app-chooser.component-BlJbIMKi.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-auth-login.module-CGA5aTg2.mjs → acorex-modules-auth-login.module-DGBKGxI3.mjs} +4 -4
  14. package/fesm2022/{acorex-modules-auth-login.module-CGA5aTg2.mjs.map → acorex-modules-auth-login.module-DGBKGxI3.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-auth-master.layout-ZJWzjLrb.mjs → acorex-modules-auth-master.layout-B_8Sfw0M.mjs} +4 -4
  16. package/fesm2022/{acorex-modules-auth-master.layout-ZJWzjLrb.mjs.map → acorex-modules-auth-master.layout-B_8Sfw0M.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-auth-password.component-MJhNk3UI.mjs → acorex-modules-auth-password.component-BfDjRRN_.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-auth-password.component-MJhNk3UI.mjs.map → acorex-modules-auth-password.component-BfDjRRN_.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-auth-password.component-C4yqf342.mjs → acorex-modules-auth-password.component-DZJ1qwfa.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-auth-password.component-C4yqf342.mjs.map → acorex-modules-auth-password.component-DZJ1qwfa.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-auth-routes-DhORV1Js.mjs → acorex-modules-auth-routes-Bw7nXDvx.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-auth-routes-DhORV1Js.mjs.map → acorex-modules-auth-routes-Bw7nXDvx.mjs.map} +1 -1
  23. package/fesm2022/{acorex-modules-auth-two-factor.module-BWKP0_jO.mjs → acorex-modules-auth-two-factor.module-DKStBo1V.mjs} +2 -2
  24. package/fesm2022/{acorex-modules-auth-two-factor.module-BWKP0_jO.mjs.map → acorex-modules-auth-two-factor.module-DKStBo1V.mjs.map} +1 -1
  25. package/fesm2022/acorex-modules-auth.mjs +1 -1
  26. package/package.json +7 -7
  27. package/fesm2022/acorex-modules-application-management-module-designer.component-CDZZ-5pF.mjs +0 -323
  28. package/fesm2022/acorex-modules-application-management-module-designer.component-CDZZ-5pF.mjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, NgModule } from '@angular/core';
3
3
  import { RouterModule, ROUTES } from '@angular/router';
4
- import { A as AXM_AUTH_CONFIG_TOKEN } from './acorex-modules-auth-acorex-modules-auth-D09VaQPe.mjs';
4
+ import { A as AXM_AUTH_CONFIG_TOKEN } from './acorex-modules-auth-acorex-modules-auth-CS3UFdX0.mjs';
5
5
  import '@acorex/platform/auth';
6
6
  import '@acorex/platform/common';
7
7
  import '@angular/common/http';
@@ -58,4 +58,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
58
58
  }] });
59
59
 
60
60
  export { AXPTwoFactorModule };
61
- //# sourceMappingURL=acorex-modules-auth-two-factor.module-BWKP0_jO.mjs.map
61
+ //# sourceMappingURL=acorex-modules-auth-two-factor.module-DKStBo1V.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-auth-two-factor.module-BWKP0_jO.mjs","sources":["../../../../libs/modules/auth/src/lib/two-factor/two-factor.module.ts"],"sourcesContent":["import { inject, NgModule } from '@angular/core';\nimport { RouterModule, ROUTES, Routes } from '@angular/router';\nimport { AXM_AUTH_CONFIG_TOKEN } from '../auth.config';\n\nfunction routesFacory() {\n const val = inject(AXM_AUTH_CONFIG_TOKEN);\n let routes: Routes = [];\n routes = [\n {\n path: 'two-step',\n loadComponent: () =>\n import('./two-factor-code/two-factor-code.component').then(\n (c) => c.AXPAuthTwoFactorCodeComponent\n ),\n },\n ];\n return routes;\n}\n\n@NgModule({\n declarations: [],\n imports: [RouterModule],\n exports: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n ],\n})\nexport class AXPTwoFactorModule { }\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIA,SAAS,YAAY,GAAA;AACnB,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC1C,IAAI,MAAM,GAAW,EAAE,CAAC;AACxB,IAAA,MAAM,GAAG;AACP,QAAA;AACE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,aAAa,EAAE,MACb,OAAO,8DAA6C,CAAC,CAAC,IAAI,CACxD,CAAC,CAAC,KAAK,CAAC,CAAC,6BAA6B,CACvC;AACJ,SAAA;KACF,CAAC;AACF,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;MAcY,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAVnB,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;AAUX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EARlB,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,YAAY;AACzB,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CARS,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAUX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,UAAU,EAAE,YAAY;AACzB,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAA;;;;;"}
1
+ {"version":3,"file":"acorex-modules-auth-two-factor.module-DKStBo1V.mjs","sources":["../../../../libs/modules/auth/src/lib/two-factor/two-factor.module.ts"],"sourcesContent":["import { inject, NgModule } from '@angular/core';\nimport { RouterModule, ROUTES, Routes } from '@angular/router';\nimport { AXM_AUTH_CONFIG_TOKEN } from '../auth.config';\n\nfunction routesFacory() {\n const val = inject(AXM_AUTH_CONFIG_TOKEN);\n let routes: Routes = [];\n routes = [\n {\n path: 'two-step',\n loadComponent: () =>\n import('./two-factor-code/two-factor-code.component').then(\n (c) => c.AXPAuthTwoFactorCodeComponent\n ),\n },\n ];\n return routes;\n}\n\n@NgModule({\n declarations: [],\n imports: [RouterModule],\n exports: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n ],\n})\nexport class AXPTwoFactorModule { }\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIA,SAAS,YAAY,GAAA;AACnB,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC1C,IAAI,MAAM,GAAW,EAAE,CAAC;AACxB,IAAA,MAAM,GAAG;AACP,QAAA;AACE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,aAAa,EAAE,MACb,OAAO,8DAA6C,CAAC,CAAC,IAAI,CACxD,CAAC,CAAC,KAAK,CAAC,CAAC,6BAA6B,CACvC;AACJ,SAAA;KACF,CAAC;AACF,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;MAcY,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAVnB,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;AAUX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EARlB,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,YAAY;AACzB,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CARS,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAUX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,UAAU,EAAE,YAAY;AACzB,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAA;;;;;"}
@@ -1,4 +1,4 @@
1
- export { d as AXMAuthErrorHandler, g as AXMAuthModule, a as AXMAuthenticationTypes, e as AXMDefaultAuthConfigs, A as AXM_AUTH_CONFIG_TOKEN, h as AXPIdleService, f as configAuthModule } from './acorex-modules-auth-acorex-modules-auth-D09VaQPe.mjs';
1
+ export { d as AXMAuthErrorHandler, g as AXMAuthModule, a as AXMAuthenticationTypes, e as AXMDefaultAuthConfigs, A as AXM_AUTH_CONFIG_TOKEN, h as AXPIdleService, f as configAuthModule } from './acorex-modules-auth-acorex-modules-auth-CS3UFdX0.mjs';
2
2
  import '@acorex/platform/auth';
3
3
  import '@acorex/platform/common';
4
4
  import '@angular/common/http';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/modules",
3
- "version": "18.1.0",
3
+ "version": "18.1.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0",
@@ -28,18 +28,18 @@
28
28
  "esm": "./esm2022/application-management/acorex-modules-application-management.mjs",
29
29
  "default": "./fesm2022/acorex-modules-application-management.mjs"
30
30
  },
31
- "./auth": {
32
- "types": "./auth/index.d.ts",
33
- "esm2022": "./esm2022/auth/acorex-modules-auth.mjs",
34
- "esm": "./esm2022/auth/acorex-modules-auth.mjs",
35
- "default": "./fesm2022/acorex-modules-auth.mjs"
36
- },
37
31
  "./backend": {
38
32
  "types": "./backend/index.d.ts",
39
33
  "esm2022": "./esm2022/backend/acorex-modules-backend.mjs",
40
34
  "esm": "./esm2022/backend/acorex-modules-backend.mjs",
41
35
  "default": "./fesm2022/acorex-modules-backend.mjs"
42
36
  },
37
+ "./auth": {
38
+ "types": "./auth/index.d.ts",
39
+ "esm2022": "./esm2022/auth/acorex-modules-auth.mjs",
40
+ "esm": "./esm2022/auth/acorex-modules-auth.mjs",
41
+ "default": "./fesm2022/acorex-modules-auth.mjs"
42
+ },
43
43
  "./form-management": {
44
44
  "types": "./form-management/index.d.ts",
45
45
  "esm2022": "./esm2022/form-management/acorex-modules-form-management.mjs",
@@ -1,323 +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 i3 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 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 i5 from '@acorex/core/translation';
17
- import { AXTranslationModule } from '@acorex/core/translation';
18
- import { AXPEntityDeletedEvent, AXPEntityCreateEvent } from '@acorex/platform/layouts';
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, Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
24
- import * as i2$1 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
- import '@acorex/platform/layout/entity';
30
- import '@acorex/platform/themes/default';
31
- import '@acorex/platform/common';
32
- import '@acorex/components/action-sheet';
33
- import '@acorex/components/breadcrumbs';
34
- import '@acorex/components/dialog';
35
- import '@acorex/components/dropdown';
36
- import '@acorex/components/form';
37
- import '@acorex/components/loading';
38
- import '@acorex/components/tabs';
39
- import '@acorex/platform/layout/builder';
40
- import '@acorex/platform/widgets';
41
- import '@ngrx/store';
42
- import '@acorex/platform/core';
43
-
44
- class AXMModuleDesignerContextMenuService {
45
- constructor() {
46
- this.workflow = inject(AXPWorkflowService);
47
- this.copiedRecord = signal(null);
48
- this.elementData = signal(null);
49
- this.menuItems = [
50
- {
51
- name: 'create',
52
- text: 'Create',
53
- icon: 'fas fa-plus',
54
- color: 'primary',
55
- },
56
- {
57
- name: 'delete',
58
- text: 'Delete',
59
- icon: 'fas fa-trash',
60
- color: 'danger',
61
- },
62
- {
63
- name: 'details',
64
- text: 'Details',
65
- icon: 'fas fa-eye',
66
- color: 'ghost',
67
- },
68
- {
69
- name: 'copy',
70
- text: 'Copy',
71
- icon: 'fas fa-copy',
72
- color: 'ghost',
73
- },
74
- {
75
- name: 'paste',
76
- text: 'Paste',
77
- icon: 'fas fa-paste',
78
- color: 'ghost',
79
- disabled: false,
80
- },
81
- ];
82
- }
83
- open(e) {
84
- const target = e.nativeEvent.target;
85
- const mainTarget = target.closest('.contextMenu');
86
- const elementType = mainTarget?.getAttribute('data-elementType');
87
- const { data } = mainTarget;
88
- if (elementType == 'module' || elementType == 'subModule') {
89
- const moduleId = mainTarget?.getAttribute('data-moduleId');
90
- const entityType = mainTarget?.getAttribute('data-entityType');
91
- if (elementType == 'module') {
92
- this.elementData.set({
93
- entityType,
94
- moduleId: moduleId,
95
- record: {
96
- id: moduleId,
97
- },
98
- });
99
- e.items = this.getMenuItems(['details', 'delete']);
100
- }
101
- else {
102
- this.elementData.set({
103
- entityType,
104
- moduleId: moduleId,
105
- record: undefined,
106
- });
107
- const items = this.getMenuItems(['create', 'paste']);
108
- const customMenuItems = items.map((i) => i.name == 'paste' ? { ...i, disabled: entityType == this.copiedRecord()?.type ? false : true } : i);
109
- e.items = customMenuItems;
110
- }
111
- }
112
- else if (elementType == 'subModuleItem') {
113
- this.elementData.set(data);
114
- e.items = this.getMenuItems(['delete', 'copy', 'details']);
115
- }
116
- else {
117
- e.items = [];
118
- e.canceled = true;
119
- }
120
- }
121
- itemClick(e) {
122
- console.log('clicked', e, this.elementData());
123
- if (this.elementData()) {
124
- switch (e.item.name) {
125
- case 'create':
126
- this.createEntity(this.elementData()?.entityType, this.elementData()?.moduleId);
127
- break;
128
- case 'details':
129
- this.showDetails(this.elementData()?.entityType, this.elementData()?.record.id);
130
- break;
131
- case 'delete':
132
- this.deleteEntity(this.elementData()?.entityType, this.elementData()?.record.id, this.elementData()?.moduleId);
133
- break;
134
- case 'copy':
135
- this.copyRecord(this.elementData()?.entityType, this.elementData()?.record);
136
- break;
137
- case 'paste':
138
- this.pasteRecord(this.elementData()?.moduleId);
139
- break;
140
- default:
141
- break;
142
- }
143
- }
144
- }
145
- async createEntity(entityType, moduleId) {
146
- await this.workflow.execute('create-module-entity', {
147
- entity: `application-management.${entityType}`,
148
- data: {
149
- moduleId,
150
- },
151
- meta: {
152
- type: entityType,
153
- moduleId,
154
- },
155
- });
156
- }
157
- async showDetails(entityType, id) {
158
- await this.workflow.execute('show-module-entity-details', {
159
- entity: `application-management.${entityType}`,
160
- data: {
161
- id,
162
- },
163
- });
164
- }
165
- copyRecord(entityType, record) {
166
- const newRecord = { ...record, moduleId: undefined, id: undefined };
167
- this.copiedRecord.set({ type: entityType, record: newRecord });
168
- }
169
- async pasteRecord(moduleId) {
170
- if (this.copiedRecord()) {
171
- await this.workflow.execute('create-module-entity', {
172
- entity: `application-management.${this.copiedRecord()?.type}`,
173
- data: {
174
- ...this.copiedRecord()?.record,
175
- moduleId,
176
- },
177
- meta: {
178
- type: this.copiedRecord()?.type,
179
- moduleId,
180
- },
181
- });
182
- }
183
- }
184
- async deleteEntity(entityType, id, moduleId) {
185
- await this.workflow.execute('delete-entity', {
186
- entity: `application-management.${entityType}`,
187
- data: {
188
- id,
189
- },
190
- meta: {
191
- moduleId,
192
- type: entityType,
193
- },
194
- });
195
- }
196
- getMenuItems(includeItems) {
197
- return this.menuItems.filter((i) => includeItems.includes(i.name));
198
- }
199
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMModuleDesignerContextMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
200
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMModuleDesignerContextMenuService, providedIn: 'root' }); }
201
- }
202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMModuleDesignerContextMenuService, decorators: [{
203
- type: Injectable,
204
- args: [{
205
- providedIn: 'root',
206
- }]
207
- }] });
208
-
209
- class AXMModuleDesignerComponent {
210
- constructor() {
211
- this.cdr = inject(ChangeDetectorRef);
212
- this.dataProvider = inject(AXPModuleDesignerService);
213
- this.workflow = inject(AXPWorkflowService);
214
- this.contextMenuService = inject(AXMModuleDesignerContextMenuService);
215
- this.modules = signal([]);
216
- this.moduleDataCache = new Map();
217
- this.destroyed = new Subject();
218
- this.subscribeActionEvents();
219
- }
220
- ngOnInit() {
221
- this.loadModules();
222
- }
223
- subscribeActionEvents() {
224
- this.workflow.events$
225
- .pipe(ofType(AXPEntityDeletedEvent, AXPEntityCreateEvent))
226
- .pipe(takeUntil(this.destroyed))
227
- .subscribe((event) => {
228
- const { meta } = event.payload;
229
- if (meta.type === 'module') {
230
- this.loadModules();
231
- }
232
- else {
233
- this.loadModuleData(meta.moduleId, meta.type, true);
234
- }
235
- this.cdr.markForCheck();
236
- });
237
- }
238
- async loadModules() {
239
- try {
240
- const modules = await this.dataProvider.getModules();
241
- this.modules.set(modules.items);
242
- }
243
- catch (error) {
244
- console.error('Error loading modules:', error);
245
- }
246
- }
247
- async handleCollapseItemClick(moduleId, e, dataType) {
248
- if (e.component.isCollapsed) {
249
- e.handled = true;
250
- e.component.isLoading = true;
251
- await this.loadModuleData(moduleId, dataType);
252
- e.component.toggle();
253
- e.component.isLoading = false;
254
- e.component['cdr'].markForCheck();
255
- }
256
- }
257
- async loadModuleData(moduleId, dataType, hardReload = false) {
258
- const cacheKey = `${moduleId}-${dataType}`;
259
- let dataItems = this.moduleDataCache.get(cacheKey);
260
- // if (!dataItems || hardReload) {
261
- try {
262
- const methodMap = {
263
- entity: this.dataProvider.getEntities,
264
- permission: this.dataProvider.getPermissions,
265
- feature: this.dataProvider.getFeatures,
266
- };
267
- const data = await methodMap[dataType].call(this.dataProvider, moduleId);
268
- dataItems = data.items;
269
- this.moduleDataCache.set(cacheKey, dataItems);
270
- }
271
- catch (error) {
272
- console.error(`Error loading ${dataType}:`, error);
273
- }
274
- // }
275
- }
276
- getEntities(moduleId) {
277
- return this.moduleDataCache.get(`${moduleId}-entity`) || [];
278
- }
279
- getPermissions(moduleId) {
280
- return this.moduleDataCache.get(`${moduleId}-permission`) || [];
281
- }
282
- getFeatures(moduleId) {
283
- return this.moduleDataCache.get(`${moduleId}-feature`) || [];
284
- }
285
- openingContextMenu(e) {
286
- this.contextMenuService.open(e);
287
- }
288
- handleActionClick(e) {
289
- this.contextMenuService.itemClick(e);
290
- }
291
- createModule() {
292
- this.contextMenuService.createEntity('module');
293
- }
294
- destroy() {
295
- this.destroyed.next();
296
- this.destroyed.complete();
297
- }
298
- assignData(target, data) {
299
- set(target, 'data', data);
300
- }
301
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMModuleDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
302
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXMModuleDesignerComponent, isStandalone: true, selector: "ng-component", 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)]\" #contextTarget>\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=\"contextMenu\"\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=\"contextMenu\"\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=\"contextMenu\"\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=\"contextMenu\"\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 <div\n #d\n (click)=\"contextMenuService.showDetails(child.type, item.id)\"\n class=\"contextMenu 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 (onItemClick)=\"handleActionClick($event)\"\n [items]=\"[]\"\n [target]=\"contextTarget\"\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:rgba(var(--ax-color-neutral-100),var(--tw-bg-opacity))}.ax-collapse-header:hover:is(.ax-dark *){--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-neutral-700),var(--tw-bg-opacity))}.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", "collapsed", "closeOthers"], 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", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i5.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.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
303
- }
304
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMModuleDesignerComponent, decorators: [{
305
- type: Component,
306
- args: [{ encapsulation: ViewEncapsulation.None, standalone: true, imports: [
307
- CommonModule,
308
- AXDrawerModule,
309
- AXButtonModule,
310
- AXDecoratorModule,
311
- AXTranslationModule,
312
- AXSideMenuModule,
313
- AXCollapseModule,
314
- AXPopoverModule,
315
- AXSelectionListModule,
316
- AXBadgeModule,
317
- AXMenuModule,
318
- RouterModule,
319
- ], 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)]\" #contextTarget>\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=\"contextMenu\"\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=\"contextMenu\"\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=\"contextMenu\"\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=\"contextMenu\"\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 <div\n #d\n (click)=\"contextMenuService.showDetails(child.type, item.id)\"\n class=\"contextMenu 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 (onItemClick)=\"handleActionClick($event)\"\n [items]=\"[]\"\n [target]=\"contextTarget\"\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:rgba(var(--ax-color-neutral-100),var(--tw-bg-opacity))}.ax-collapse-header:hover:is(.ax-dark *){--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-neutral-700),var(--tw-bg-opacity))}.ax-collapse-body-content{padding:.25rem!important;padding-inline-start:0!important}\n"] }]
320
- }], ctorParameters: () => [] });
321
-
322
- export { AXMModuleDesignerComponent };
323
- //# sourceMappingURL=acorex-modules-application-management-module-designer.component-CDZZ-5pF.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-modules-application-management-module-designer.component-CDZZ-5pF.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 { AXContextMenuOpeningEvent, AXMenuItem, AXMenuItemClickEvent } 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: 'ghost',\n },\n {\n name: 'copy',\n text: 'Copy',\n icon: 'fas fa-copy',\n color: 'ghost',\n },\n {\n name: 'paste',\n text: 'Paste',\n icon: 'fas fa-paste',\n color: 'ghost',\n disabled: false,\n },\n ];\n\n open(e: AXContextMenuOpeningEvent) {\n const target = ((e as any).nativeEvent as PointerEvent).target as HTMLElement;\n const mainTarget = target.closest('.contextMenu');\n const elementType = mainTarget?.getAttribute('data-elementType');\n const { data } = mainTarget as any;\n\n if (elementType == 'module' || elementType == 'subModule') {\n const moduleId = mainTarget?.getAttribute('data-moduleId');\n const entityType = mainTarget?.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: AXMenuItemClickEvent) {\n console.log('clicked', e, this.elementData());\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 { AXContextMenuOpeningEvent, AXMenuItemClickEvent, AXMenuModule } 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/layouts';\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 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 standalone: true,\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\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 } 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 }\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: AXMenuItemClickEvent) {\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)]\" #contextTarget>\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=\"contextMenu\"\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=\"contextMenu\"\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=\"contextMenu\"\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=\"contextMenu\"\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 <div\n #d\n (click)=\"contextMenuService.showDetails(child.type, item.id)\"\n class=\"contextMenu 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 (onItemClick)=\"handleActionClick($event)\"\n [items]=\"[]\"\n [target]=\"contextTarget\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onOpening)=\"openingContextMenu($event)\"\n>\n</ax-context-menu>\n"],"names":["i3","i4","i6","i9"],"mappings":"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"}