@acorex/platform 20.3.0-next.1 → 20.3.0-next.10
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/common/index.d.ts +125 -12
- package/core/index.d.ts +656 -100
- package/fesm2022/acorex-platform-auth.mjs +20 -20
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/acorex-platform-common.mjs +120 -148
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +885 -261
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +16 -16
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +1615 -662
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +3327 -157
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +172 -210
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity-create-entity.command-764ie8R8.mjs +52 -0
- package/fesm2022/acorex-platform-layout-entity-create-entity.command-764ie8R8.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-entity.mjs +4522 -1643
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +398 -89
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-native.mjs +7 -7
- package/fesm2022/acorex-platform-native.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +40 -40
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-hHXxHlFG.mjs → acorex-platform-themes-default-entity-master-create-view.component-Ct-ri59W.mjs} +7 -7
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Ct-ri59W.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-7BB4LdjK.mjs +706 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-7BB4LdjK.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BDJR088o.mjs +101 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BDJR088o.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BExtm1JE.mjs +244 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BExtm1JE.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-401.component-D4glpFvU.mjs → acorex-platform-themes-default-error-401.component-DrO1PEOH.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-401.component-D4glpFvU.mjs.map → acorex-platform-themes-default-error-401.component-DrO1PEOH.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-error-404.component-BvGeDMjo.mjs → acorex-platform-themes-default-error-404.component-DqVq0oHX.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-404.component-BvGeDMjo.mjs.map → acorex-platform-themes-default-error-404.component-DqVq0oHX.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-error-offline.component-BINy-Zo3.mjs → acorex-platform-themes-default-error-offline.component-Bt2PTL7_.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-offline.component-BINy-Zo3.mjs.map → acorex-platform-themes-default-error-offline.component-Bt2PTL7_.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +64 -509
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-C833prGO.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BgEh06Tn.mjs} +24 -14
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BgEh06Tn.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs → acorex-platform-themes-shared-settings.provider-CLUKU4y0.mjs} +2 -2
- package/fesm2022/acorex-platform-themes-shared-settings.provider-CLUKU4y0.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-color-chooser-column.component-DjKLg513.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-AeOQxjbS.mjs} +23 -8
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-AeOQxjbS.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-color-chooser-view.component-DE0wO98F.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-DEVzRd6-.mjs} +23 -8
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DEVzRd6-.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared.mjs +250 -85
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-lNF95FJv.mjs → acorex-platform-widgets-button-widget-designer.component-DSaD9Fwc.mjs} +7 -7
- package/fesm2022/acorex-platform-widgets-button-widget-designer.component-DSaD9Fwc.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-edit.component-D9mf08rU.mjs +50 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-edit.component-D9mf08rU.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-view.component-D6GQ-eyr.mjs +42 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-view.component-D6GQ-eyr.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-edit.component-DVbIdVZ6.mjs +55 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-edit.component-DVbIdVZ6.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-view.component-D-aM64Hu.mjs +50 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-view.component-D-aM64Hu.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-widget-edit.component-em2-aU8E.mjs +48 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-widget-edit.component-em2-aU8E.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-widget-view.component-BeuIofdr.mjs +42 -0
- package/fesm2022/acorex-platform-widgets-extra-properties-widget-view.component-BeuIofdr.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-file-list-popup.component-DFbPO0ud.mjs → acorex-platform-widgets-file-list-popup.component-Cmtq2bBV.mjs} +72 -7
- package/fesm2022/acorex-platform-widgets-file-list-popup.component-Cmtq2bBV.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-DRsLkulH.mjs → acorex-platform-widgets-page-widget-designer.component-B-ZEi2yd.mjs} +79 -69
- package/fesm2022/acorex-platform-widgets-page-widget-designer.component-B-ZEi2yd.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-nLZYiPnF.mjs → acorex-platform-widgets-tabular-data-edit-popup.component-CMqq_iOj.mjs} +13 -13
- package/fesm2022/acorex-platform-widgets-tabular-data-edit-popup.component-CMqq_iOj.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-tabular-data-view-popup.component-D6kiasYM.mjs → acorex-platform-widgets-tabular-data-view-popup.component-CRpjdiNz.mjs} +8 -7
- package/fesm2022/acorex-platform-widgets-tabular-data-view-popup.component-CRpjdiNz.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-CCMQtH3e.mjs → acorex-platform-widgets-text-block-widget-designer.component-DeSmBqMa.mjs} +9 -14
- package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-DeSmBqMa.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets.mjs +9152 -7182
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +28 -25
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/layout/builder/index.d.ts +419 -185
- package/layout/components/index.d.ts +1129 -24
- package/layout/designer/index.d.ts +20 -49
- package/layout/entity/index.d.ts +424 -332
- package/layout/views/index.d.ts +129 -22
- package/package.json +25 -39
- package/widgets/index.d.ts +1908 -783
- package/workflow/index.d.ts +4 -1
- package/fesm2022/acorex-platform-themes-default-create-entity-view.component-SY0oMDoH.mjs +0 -22
- package/fesm2022/acorex-platform-themes-default-create-entity-view.component-SY0oMDoH.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-hHXxHlFG.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-hf4QOz_4.mjs +0 -665
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-hf4QOz_4.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DC3MrDtI.mjs +0 -108
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DC3MrDtI.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Bb90PeHq.mjs +0 -236
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Bb90PeHq.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-color-chooser-column.component-DjKLg513.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-color-chooser-view.component-DE0wO98F.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-C833prGO.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-button-widget-designer.component-lNF95FJv.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-BNBOATPB.mjs +0 -85
- package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-BNBOATPB.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-BI18uzNZ.mjs +0 -55
- package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-BI18uzNZ.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-C6-QPsnb.mjs +0 -76
- package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-C6-QPsnb.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-pYOQv5g8.mjs +0 -55
- package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-pYOQv5g8.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-file-list-popup.component-DFbPO0ud.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-file-rename-popup.component-DA_CgIvm.mjs +0 -211
- package/fesm2022/acorex-platform-widgets-file-rename-popup.component-DA_CgIvm.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DRsLkulH.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-rich-text-popup.component-CM_v-cL4.mjs +0 -40
- package/fesm2022/acorex-platform-widgets-rich-text-popup.component-CM_v-cL4.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-tabular-data-edit-popup.component-nLZYiPnF.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-tabular-data-view-popup.component-D6kiasYM.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-CCMQtH3e.mjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
|
|
2
|
-
import { get, isPlainObject, set, isArray, merge, isNil, isObjectLike, transform, isEmpty,
|
|
2
|
+
import { get, isPlainObject, set, isArray, merge, isNil, isObjectLike, transform, isEmpty, isEqual, differenceWith, union, cloneDeep, isUndefined, endsWith, startsWith, includes, lte, gte, lt, gt, orderBy } from 'lodash-es';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { computed, InjectionToken, inject, Injectable, input, effect, Directive, EventEmitter, HostListener, Output, ViewContainerRef, ElementRef, provideAppInitializer, signal, Pipe } from '@angular/core';
|
|
4
|
+
import { computed, InjectionToken, inject, Injectable, input, effect, Directive, EventEmitter, HostListener, Output, ViewContainerRef, ElementRef, provideAppInitializer, signal, Pipe, Injector, runInInjectionContext } from '@angular/core';
|
|
5
5
|
import { Subject, interval } from 'rxjs';
|
|
6
6
|
import { AXCalendarService } from '@acorex/core/date-time';
|
|
7
7
|
import { startWith, map } from 'rxjs/operators';
|
|
@@ -107,7 +107,6 @@ function extractValue(value, key = 'id') {
|
|
|
107
107
|
if (isNil(value)) {
|
|
108
108
|
return null;
|
|
109
109
|
}
|
|
110
|
-
;
|
|
111
110
|
return isObjectLike(value) ? get(value, key) : value;
|
|
112
111
|
}
|
|
113
112
|
function cleanDeep(obj) {
|
|
@@ -126,6 +125,114 @@ function cleanDeep(obj) {
|
|
|
126
125
|
}
|
|
127
126
|
});
|
|
128
127
|
}
|
|
128
|
+
function getDeepChanges(obj1, obj2) {
|
|
129
|
+
const changes = [];
|
|
130
|
+
function walk(o1, o2, currentPath = []) {
|
|
131
|
+
// If both values are deeply equal, skip
|
|
132
|
+
if (isEqual(o1, o2))
|
|
133
|
+
return;
|
|
134
|
+
const isObj1Nil = o1 === null || o1 === undefined;
|
|
135
|
+
const isObj2Nil = o2 === null || o2 === undefined;
|
|
136
|
+
// If obj1 is null/undefined and obj2 is not, treat entire obj2 as added
|
|
137
|
+
if (isObj1Nil && !isObj2Nil) {
|
|
138
|
+
if (isPlainObject(o2)) {
|
|
139
|
+
for (const key of Object.keys(o2)) {
|
|
140
|
+
walk(undefined, o2[key], [...currentPath, key]);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else if (Array.isArray(o2)) {
|
|
144
|
+
changes.push({
|
|
145
|
+
path: currentPath.join('.'),
|
|
146
|
+
oldValue: undefined,
|
|
147
|
+
newValue: o2,
|
|
148
|
+
arrayDiff: {
|
|
149
|
+
added: o2,
|
|
150
|
+
removed: [],
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
changes.push({
|
|
156
|
+
path: currentPath.join('.'),
|
|
157
|
+
oldValue: undefined,
|
|
158
|
+
newValue: o2,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// If obj2 is null/undefined and obj1 is not, treat entire obj1 as removed
|
|
164
|
+
if (!isObj1Nil && isObj2Nil) {
|
|
165
|
+
if (isPlainObject(o1)) {
|
|
166
|
+
for (const key of Object.keys(o1)) {
|
|
167
|
+
walk(o1[key], undefined, [...currentPath, key]);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else if (Array.isArray(o1)) {
|
|
171
|
+
changes.push({
|
|
172
|
+
path: currentPath.join('.'),
|
|
173
|
+
oldValue: o1,
|
|
174
|
+
newValue: undefined,
|
|
175
|
+
arrayDiff: {
|
|
176
|
+
added: [],
|
|
177
|
+
removed: o1,
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
changes.push({
|
|
183
|
+
path: currentPath.join('.'),
|
|
184
|
+
oldValue: o1,
|
|
185
|
+
newValue: undefined,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
// If both are arrays, compare items
|
|
191
|
+
if (Array.isArray(o1) && Array.isArray(o2)) {
|
|
192
|
+
if (!isEqual(o1, o2)) {
|
|
193
|
+
const added = differenceWith(o2, o1, isEqual);
|
|
194
|
+
const removed = differenceWith(o1, o2, isEqual);
|
|
195
|
+
changes.push({
|
|
196
|
+
path: currentPath.join('.'),
|
|
197
|
+
oldValue: o1,
|
|
198
|
+
newValue: o2,
|
|
199
|
+
arrayDiff: {
|
|
200
|
+
added,
|
|
201
|
+
removed,
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// If both are plain objects, walk each key
|
|
208
|
+
if (isPlainObject(o1) && isPlainObject(o2)) {
|
|
209
|
+
const allKeys = union(Object.keys(o1), Object.keys(o2));
|
|
210
|
+
for (const key of allKeys) {
|
|
211
|
+
walk(o1[key], o2[key], [...currentPath, key]);
|
|
212
|
+
}
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
// Primitive values or mismatched types
|
|
216
|
+
changes.push({
|
|
217
|
+
path: currentPath.join('.'),
|
|
218
|
+
oldValue: o1,
|
|
219
|
+
newValue: o2,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
walk(obj1, obj2);
|
|
223
|
+
return changes;
|
|
224
|
+
}
|
|
225
|
+
// Method 1: Returns only changed paths
|
|
226
|
+
function getChangedPaths(obj1, obj2) {
|
|
227
|
+
return getDeepChanges(obj1, obj2).map((change) => change.path);
|
|
228
|
+
}
|
|
229
|
+
// Method 2: Returns full change entries
|
|
230
|
+
function getDetailedChanges(obj1, obj2) {
|
|
231
|
+
return getDeepChanges(obj1, obj2);
|
|
232
|
+
}
|
|
233
|
+
function getEnumValues(enumType) {
|
|
234
|
+
return Object.entries(enumType).map(([key, value]) => ({ id: value, title: key }));
|
|
235
|
+
}
|
|
129
236
|
|
|
130
237
|
class AXPContextChangeEvent {
|
|
131
238
|
}
|
|
@@ -440,10 +547,10 @@ class AXPDataSourceDefinitionProviderService {
|
|
|
440
547
|
async get(name) {
|
|
441
548
|
return (await this.items()).find((c) => c.name == name);
|
|
442
549
|
}
|
|
443
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
444
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.
|
|
550
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDataSourceDefinitionProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
551
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDataSourceDefinitionProviderService, providedIn: 'root' }); }
|
|
445
552
|
}
|
|
446
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
553
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDataSourceDefinitionProviderService, decorators: [{
|
|
447
554
|
type: Injectable,
|
|
448
555
|
args: [{ providedIn: 'root' }]
|
|
449
556
|
}] });
|
|
@@ -476,10 +583,10 @@ class AXPElementDataDirective {
|
|
|
476
583
|
setData(data) {
|
|
477
584
|
set(this.elementRef.nativeElement, this.path(), data);
|
|
478
585
|
}
|
|
479
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
480
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.
|
|
586
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPElementDataDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
587
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.8", type: AXPElementDataDirective, isStandalone: true, selector: "[axp-data]", inputs: { data: { classPropertyName: "data", publicName: "axp-data", isSignal: true, isRequired: false, transformFunction: null }, path: { classPropertyName: "path", publicName: "axp-data-path", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
481
588
|
}
|
|
482
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
589
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPElementDataDirective, decorators: [{
|
|
483
590
|
type: Directive,
|
|
484
591
|
args: [{
|
|
485
592
|
selector: '[axp-data]',
|
|
@@ -508,10 +615,10 @@ class AXPDblClickDirective {
|
|
|
508
615
|
}
|
|
509
616
|
this.lastTap = currentTime;
|
|
510
617
|
}
|
|
511
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
512
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.
|
|
618
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDblClickDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
619
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.8", type: AXPDblClickDirective, isStandalone: true, selector: "[onDblClick]", outputs: { onDblClick: "onDblClick" }, host: { listeners: { "dblclick": "handleOnDblClick($event)", "touchend": "onTouchEnd($event)" } }, ngImport: i0 }); }
|
|
513
620
|
}
|
|
514
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
621
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDblClickDirective, decorators: [{
|
|
515
622
|
type: Directive,
|
|
516
623
|
args: [{
|
|
517
624
|
selector: '[onDblClick]'
|
|
@@ -574,10 +681,10 @@ class AXPGridLayoutDirective {
|
|
|
574
681
|
}
|
|
575
682
|
});
|
|
576
683
|
}
|
|
577
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
578
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.
|
|
684
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPGridLayoutDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
685
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.8", type: AXPGridLayoutDirective, isStandalone: true, selector: "[axp-grid-layout]", inputs: { options: { classPropertyName: "options", publicName: "axp-grid-layout", isSignal: true, isRequired: true, transformFunction: null } }, usesOnChanges: true, ngImport: i0 }); }
|
|
579
686
|
}
|
|
580
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
687
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPGridLayoutDirective, decorators: [{
|
|
581
688
|
type: Directive,
|
|
582
689
|
args: [{
|
|
583
690
|
selector: '[axp-grid-layout]',
|
|
@@ -592,15 +699,10 @@ class AXPContentCheckerDirective {
|
|
|
592
699
|
this.elementRef = inject((ElementRef));
|
|
593
700
|
this.isEmpty = computed(() => this.viewContainerRef.length === 0, ...(ngDevMode ? [{ debugName: "isEmpty" }] : []));
|
|
594
701
|
}
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
console.log(this.elementRef.nativeElement.childNodes);
|
|
598
|
-
}, 1000);
|
|
599
|
-
}
|
|
600
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPContentCheckerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
601
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.6", type: AXPContentCheckerDirective, isStandalone: true, selector: "[axp-content-checker]", exportAs: ["checker"], ngImport: i0 }); }
|
|
702
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPContentCheckerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
703
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.8", type: AXPContentCheckerDirective, isStandalone: true, selector: "[axp-content-checker]", exportAs: ["checker"], ngImport: i0 }); }
|
|
602
704
|
}
|
|
603
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
705
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPContentCheckerDirective, decorators: [{
|
|
604
706
|
type: Directive,
|
|
605
707
|
args: [{
|
|
606
708
|
selector: '[axp-content-checker]',
|
|
@@ -614,10 +716,11 @@ class AXPBroadcastEventService {
|
|
|
614
716
|
this.eventSubjects = new Map();
|
|
615
717
|
this.pendingRequests = new Map();
|
|
616
718
|
this.multiTabEventHistory = new Set(); // Prevent duplicate processing of the same event
|
|
719
|
+
this.instanceId = AXPDataGenerator.uuid();
|
|
617
720
|
this.channel = new BroadcastChannel('platform_global_events');
|
|
618
721
|
// Handle incoming messages
|
|
619
722
|
this.channel.onmessage = (event) => {
|
|
620
|
-
const { type, payload, requestId, response } = event.data;
|
|
723
|
+
const { type, payload, requestId, response, sourceId } = event.data;
|
|
621
724
|
// Prevent processing the same event multiple times (multi-tab synchronization)
|
|
622
725
|
if (requestId && this.multiTabEventHistory.has(requestId)) {
|
|
623
726
|
return;
|
|
@@ -633,6 +736,10 @@ class AXPBroadcastEventService {
|
|
|
633
736
|
return;
|
|
634
737
|
}
|
|
635
738
|
// Handle normal broadcast events
|
|
739
|
+
// Ignore events originating from this same instance to avoid double-delivery
|
|
740
|
+
if (sourceId && sourceId === this.instanceId) {
|
|
741
|
+
return;
|
|
742
|
+
}
|
|
636
743
|
if (type && this.eventSubjects.has(type)) {
|
|
637
744
|
this.eventSubjects.get(type).next({ data: payload, requestId });
|
|
638
745
|
}
|
|
@@ -642,7 +749,11 @@ class AXPBroadcastEventService {
|
|
|
642
749
|
* Publish an event without expecting a response
|
|
643
750
|
*/
|
|
644
751
|
publish(type, payload) {
|
|
645
|
-
this.channel.postMessage({ type, payload });
|
|
752
|
+
this.channel.postMessage({ type, payload, sourceId: this.instanceId });
|
|
753
|
+
// Local echo so same-tab listeners receive the event as well
|
|
754
|
+
if (this.eventSubjects.has(type)) {
|
|
755
|
+
this.eventSubjects.get(type).next({ data: payload });
|
|
756
|
+
}
|
|
646
757
|
}
|
|
647
758
|
/**
|
|
648
759
|
* Subscribe to an event
|
|
@@ -665,7 +776,11 @@ class AXPBroadcastEventService {
|
|
|
665
776
|
/**
|
|
666
777
|
* Send a message and wait for a response with retry logic
|
|
667
778
|
*/
|
|
668
|
-
async sendAndWaitForResponse(type, payload, options = {
|
|
779
|
+
async sendAndWaitForResponse(type, payload, options = {
|
|
780
|
+
timeout: 60 * 60 * 1000,
|
|
781
|
+
retries: 3,
|
|
782
|
+
retryDelay: 1000,
|
|
783
|
+
}) {
|
|
669
784
|
const requestId = AXPDataGenerator.uuid();
|
|
670
785
|
const attemptRequest = (attempt) => {
|
|
671
786
|
return new Promise((resolve, reject) => {
|
|
@@ -713,13 +828,13 @@ class AXPBroadcastEventService {
|
|
|
713
828
|
// Cleanup multi-tab event history
|
|
714
829
|
this.multiTabEventHistory.clear();
|
|
715
830
|
}
|
|
716
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
717
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.
|
|
831
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBroadcastEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
832
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBroadcastEventService, providedIn: 'root' }); }
|
|
718
833
|
}
|
|
719
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
834
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBroadcastEventService, decorators: [{
|
|
720
835
|
type: Injectable,
|
|
721
836
|
args: [{
|
|
722
|
-
providedIn: 'root'
|
|
837
|
+
providedIn: 'root',
|
|
723
838
|
}]
|
|
724
839
|
}], ctorParameters: () => [] });
|
|
725
840
|
|
|
@@ -755,10 +870,10 @@ class AXPExpressionEvaluatorScopeProviderService {
|
|
|
755
870
|
await this.load();
|
|
756
871
|
return this.cache || {};
|
|
757
872
|
}
|
|
758
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
759
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.
|
|
873
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
874
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, providedIn: 'root' }); }
|
|
760
875
|
}
|
|
761
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
876
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, decorators: [{
|
|
762
877
|
type: Injectable,
|
|
763
878
|
args: [{ providedIn: 'root' }]
|
|
764
879
|
}] });
|
|
@@ -867,10 +982,10 @@ class AXPExpressionEvaluatorService {
|
|
|
867
982
|
}
|
|
868
983
|
return false;
|
|
869
984
|
}
|
|
870
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
871
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.
|
|
985
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPExpressionEvaluatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
986
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPExpressionEvaluatorService, providedIn: 'root' }); }
|
|
872
987
|
}
|
|
873
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
988
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPExpressionEvaluatorService, decorators: [{
|
|
874
989
|
type: Injectable,
|
|
875
990
|
args: [{ providedIn: 'root' }]
|
|
876
991
|
}] });
|
|
@@ -895,10 +1010,10 @@ class AXPAppStartUpService {
|
|
|
895
1010
|
loadingText.innerHTML = status;
|
|
896
1011
|
}
|
|
897
1012
|
}
|
|
898
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
899
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.
|
|
1013
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPAppStartUpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1014
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPAppStartUpService, providedIn: 'root' }); }
|
|
900
1015
|
}
|
|
901
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
1016
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPAppStartUpService, decorators: [{
|
|
902
1017
|
type: Injectable,
|
|
903
1018
|
args: [{
|
|
904
1019
|
providedIn: 'root',
|
|
@@ -912,6 +1027,98 @@ const AXPAppStartUpProvider = provideAppInitializer(() => {
|
|
|
912
1027
|
return initializerFn();
|
|
913
1028
|
});
|
|
914
1029
|
|
|
1030
|
+
/**
|
|
1031
|
+
* Additional suggested generic actions for future consideration:
|
|
1032
|
+
*
|
|
1033
|
+
* Data & Content Actions:
|
|
1034
|
+
* - Search = 'search' - Search functionality
|
|
1035
|
+
* - Filter = 'filter' - Apply filters
|
|
1036
|
+
* - Sort = 'sort' - Sort data
|
|
1037
|
+
* - Group = 'group' - Group data
|
|
1038
|
+
* - Expand = 'expand' - Expand details
|
|
1039
|
+
* - Collapse = 'collapse' - Collapse details
|
|
1040
|
+
* - Pin = 'pin' - Pin to favorites
|
|
1041
|
+
* - Bookmark = 'bookmark' - Bookmark item
|
|
1042
|
+
* - Favorite = 'favorite' - Mark as favorite
|
|
1043
|
+
* - Star = 'star' - Star rating
|
|
1044
|
+
*
|
|
1045
|
+
* Workflow Actions:
|
|
1046
|
+
* - Start = 'start' - Start process/workflow
|
|
1047
|
+
* - Stop = 'stop' - Stop process
|
|
1048
|
+
* - Pause = 'pause' - Pause process
|
|
1049
|
+
* - Resume = 'resume' - Resume process
|
|
1050
|
+
* - Cancel = 'cancel' - Cancel operation
|
|
1051
|
+
* - Complete = 'complete' - Mark as complete
|
|
1052
|
+
* - Close = 'close' - Close item
|
|
1053
|
+
* - Reopen = 'reopen' - Reopen closed item
|
|
1054
|
+
* - Forward = 'forward' - Forward to next step
|
|
1055
|
+
* - Back = 'back' - Go back
|
|
1056
|
+
*
|
|
1057
|
+
* Communication Actions:
|
|
1058
|
+
* - Reply = 'reply' - Reply to message
|
|
1059
|
+
* - Forward = 'forward' - Forward message
|
|
1060
|
+
* - Notify = 'notify' - Send notification
|
|
1061
|
+
* - Invite = 'invite' - Invite user
|
|
1062
|
+
* - Join = 'join' - Join group/meeting
|
|
1063
|
+
* - Leave = 'leave' - Leave group/meeting
|
|
1064
|
+
*
|
|
1065
|
+
* Security Actions:
|
|
1066
|
+
* - Login = 'login' - User login
|
|
1067
|
+
* - Logout = 'logout' - User logout
|
|
1068
|
+
* - Block = 'block' - Block user/content
|
|
1069
|
+
* - Unblock = 'unblock' - Unblock user/content
|
|
1070
|
+
* - Ban = 'ban' - Ban user
|
|
1071
|
+
* - Unban = 'unban' - Unban user
|
|
1072
|
+
* - Verify = 'verify' - Verify identity
|
|
1073
|
+
* - Authenticate = 'authenticate' - Authenticate
|
|
1074
|
+
*
|
|
1075
|
+
* File & Media Actions:
|
|
1076
|
+
* - Open = 'open' - Open file
|
|
1077
|
+
* - Save = 'save' - Save file
|
|
1078
|
+
* - SaveAs = 'save-as' - Save as new file
|
|
1079
|
+
* - Attach = 'attach' - Attach file
|
|
1080
|
+
* - Detach = 'detach' - Detach file
|
|
1081
|
+
* - Compress = 'compress' - Compress files
|
|
1082
|
+
* - Extract = 'extract' - Extract archive
|
|
1083
|
+
* - Convert = 'convert' - Convert format
|
|
1084
|
+
* - Crop = 'crop' - Crop image
|
|
1085
|
+
* - Resize = 'resize' - Resize image
|
|
1086
|
+
*
|
|
1087
|
+
* System Actions:
|
|
1088
|
+
* - Sync = 'sync' - Synchronize data
|
|
1089
|
+
* - Backup = 'backup' - Create backup
|
|
1090
|
+
* - Restore = 'restore' - Restore from backup
|
|
1091
|
+
* - Reset = 'reset' - Reset to defaults
|
|
1092
|
+
* - Clear = 'clear' - Clear data
|
|
1093
|
+
* - Optimize = 'optimize' - Optimize performance
|
|
1094
|
+
* - Update = 'update' - Update system
|
|
1095
|
+
* - Install = 'install' - Install component
|
|
1096
|
+
* - Uninstall = 'uninstall' - Uninstall component
|
|
1097
|
+
* - Enable = 'enable' - Enable feature
|
|
1098
|
+
* - Disable = 'disable' - Disable feature
|
|
1099
|
+
*
|
|
1100
|
+
* Analytics & Monitoring:
|
|
1101
|
+
* - Monitor = 'monitor' - Monitor activity
|
|
1102
|
+
* - Track = 'track' - Track progress
|
|
1103
|
+
* - Analyze = 'analyze' - Analyze data
|
|
1104
|
+
* - Debug = 'debug' - Debug issue
|
|
1105
|
+
* - Log = 'log' - View logs
|
|
1106
|
+
* - Alert = 'alert' - Set alert
|
|
1107
|
+
* - Dashboard = 'dashboard' - View dashboard
|
|
1108
|
+
* - Metrics = 'metrics' - View metrics
|
|
1109
|
+
*
|
|
1110
|
+
* Collaboration Actions:
|
|
1111
|
+
* - Collaborate = 'collaborate' - Start collaboration
|
|
1112
|
+
* - Share = 'share' - Share content
|
|
1113
|
+
* - Comment = 'comment' - Add comment
|
|
1114
|
+
* - Like = 'like' - Like content
|
|
1115
|
+
* - Follow = 'follow' - Follow user/content
|
|
1116
|
+
* - Subscribe = 'subscribe' - Subscribe to updates
|
|
1117
|
+
* - Unsubscribe = 'unsubscribe' - Unsubscribe
|
|
1118
|
+
* - Rate = 'rate' - Rate content
|
|
1119
|
+
* - Review = 'review' - Review content
|
|
1120
|
+
* - Recommend = 'recommend' - Recommend content
|
|
1121
|
+
*/
|
|
915
1122
|
var AXPSystemActionType;
|
|
916
1123
|
(function (AXPSystemActionType) {
|
|
917
1124
|
AXPSystemActionType["View"] = "view";
|
|
@@ -942,17 +1149,46 @@ var AXPSystemActionType;
|
|
|
942
1149
|
AXPSystemActionType["Rename"] = "rename";
|
|
943
1150
|
AXPSystemActionType["Restore"] = "restore";
|
|
944
1151
|
AXPSystemActionType["Manage"] = "manage";
|
|
1152
|
+
AXPSystemActionType["Info"] = "info";
|
|
1153
|
+
AXPSystemActionType["Confirm"] = "confirm";
|
|
1154
|
+
AXPSystemActionType["Design"] = "design";
|
|
1155
|
+
AXPSystemActionType["VersionHistory"] = "version-history";
|
|
1156
|
+
AXPSystemActionType["Compare"] = "compare";
|
|
1157
|
+
AXPSystemActionType["Comments"] = "comments";
|
|
1158
|
+
AXPSystemActionType["Sign"] = "sign";
|
|
1159
|
+
AXPSystemActionType["Setup"] = "setup";
|
|
1160
|
+
AXPSystemActionType["Send"] = "send";
|
|
1161
|
+
AXPSystemActionType["Report"] = "report";
|
|
1162
|
+
AXPSystemActionType["Sent"] = "sent";
|
|
1163
|
+
AXPSystemActionType["Review"] = "review";
|
|
1164
|
+
AXPSystemActionType["Generate"] = "generate";
|
|
1165
|
+
AXPSystemActionType["Refresh"] = "refresh";
|
|
1166
|
+
AXPSystemActionType["Reload"] = "reload";
|
|
1167
|
+
AXPSystemActionType["Search"] = "search";
|
|
1168
|
+
AXPSystemActionType["Filter"] = "filter";
|
|
1169
|
+
AXPSystemActionType["Sort"] = "sort";
|
|
1170
|
+
AXPSystemActionType["Start"] = "start";
|
|
1171
|
+
AXPSystemActionType["Stop"] = "stop";
|
|
1172
|
+
AXPSystemActionType["Pause"] = "pause";
|
|
1173
|
+
AXPSystemActionType["Cancel"] = "cancel";
|
|
1174
|
+
AXPSystemActionType["Close"] = "close";
|
|
1175
|
+
AXPSystemActionType["Complete"] = "complete";
|
|
1176
|
+
AXPSystemActionType["Save"] = "save";
|
|
1177
|
+
AXPSystemActionType["SaveAs"] = "save-as";
|
|
1178
|
+
AXPSystemActionType["Sync"] = "sync";
|
|
1179
|
+
AXPSystemActionType["Reset"] = "reset";
|
|
1180
|
+
AXPSystemActionType["Clear"] = "clear";
|
|
945
1181
|
})(AXPSystemActionType || (AXPSystemActionType = {}));
|
|
946
|
-
const i18n = (key) =>
|
|
1182
|
+
const i18n = (key) => `@general:actions.${key}`;
|
|
947
1183
|
const AXPSystemActions = Object.freeze({
|
|
948
1184
|
View: {
|
|
949
1185
|
key: AXPSystemActionType.View,
|
|
950
1186
|
title: i18n('view.title'),
|
|
951
1187
|
icon: 'fa-light fa-eye',
|
|
952
|
-
color: '
|
|
1188
|
+
color: 'primary',
|
|
953
1189
|
descriptions: {
|
|
954
|
-
|
|
955
|
-
tooltip: i18n('view.
|
|
1190
|
+
title: i18n('view.title'),
|
|
1191
|
+
tooltip: i18n('view.description'),
|
|
956
1192
|
permission: i18n('view.permission'),
|
|
957
1193
|
audit: i18n('view.audit')
|
|
958
1194
|
}
|
|
@@ -961,10 +1197,10 @@ const AXPSystemActions = Object.freeze({
|
|
|
961
1197
|
key: AXPSystemActionType.Create,
|
|
962
1198
|
title: i18n('create.title'),
|
|
963
1199
|
icon: 'fa-light fa-plus',
|
|
964
|
-
color: '
|
|
1200
|
+
color: 'primary',
|
|
965
1201
|
descriptions: {
|
|
966
|
-
|
|
967
|
-
tooltip: i18n('create.
|
|
1202
|
+
title: i18n('create.title'),
|
|
1203
|
+
tooltip: i18n('create.description'),
|
|
968
1204
|
permission: i18n('create.permission'),
|
|
969
1205
|
audit: i18n('create.audit')
|
|
970
1206
|
}
|
|
@@ -973,10 +1209,10 @@ const AXPSystemActions = Object.freeze({
|
|
|
973
1209
|
key: AXPSystemActionType.Update,
|
|
974
1210
|
title: i18n('edit.title'),
|
|
975
1211
|
icon: 'fa-light fa-pen',
|
|
976
|
-
color: '
|
|
1212
|
+
color: 'default',
|
|
977
1213
|
descriptions: {
|
|
978
|
-
|
|
979
|
-
tooltip: i18n('edit.
|
|
1214
|
+
title: i18n('edit.title'),
|
|
1215
|
+
tooltip: i18n('edit.description'),
|
|
980
1216
|
permission: i18n('edit.permission'),
|
|
981
1217
|
audit: i18n('edit.audit')
|
|
982
1218
|
}
|
|
@@ -988,8 +1224,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
988
1224
|
color: 'danger',
|
|
989
1225
|
critical: true,
|
|
990
1226
|
descriptions: {
|
|
991
|
-
|
|
992
|
-
tooltip: i18n('delete.
|
|
1227
|
+
title: i18n('delete.title'),
|
|
1228
|
+
tooltip: i18n('delete.description'),
|
|
993
1229
|
permission: i18n('delete.permission'),
|
|
994
1230
|
audit: i18n('delete.audit')
|
|
995
1231
|
}
|
|
@@ -1001,8 +1237,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1001
1237
|
color: 'success',
|
|
1002
1238
|
critical: true,
|
|
1003
1239
|
descriptions: {
|
|
1004
|
-
|
|
1005
|
-
tooltip: i18n('approve.
|
|
1240
|
+
title: i18n('approve.title'),
|
|
1241
|
+
tooltip: i18n('approve.description'),
|
|
1006
1242
|
permission: i18n('approve.permission'),
|
|
1007
1243
|
audit: i18n('approve.audit')
|
|
1008
1244
|
}
|
|
@@ -1013,8 +1249,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1013
1249
|
icon: 'fa-light fa-paper-plane',
|
|
1014
1250
|
color: 'primary',
|
|
1015
1251
|
descriptions: {
|
|
1016
|
-
|
|
1017
|
-
tooltip: i18n('submit.
|
|
1252
|
+
title: i18n('submit.title'),
|
|
1253
|
+
tooltip: i18n('submit.description'),
|
|
1018
1254
|
permission: i18n('submit.permission'),
|
|
1019
1255
|
audit: i18n('submit.audit')
|
|
1020
1256
|
}
|
|
@@ -1026,8 +1262,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1026
1262
|
color: 'danger',
|
|
1027
1263
|
critical: true,
|
|
1028
1264
|
descriptions: {
|
|
1029
|
-
|
|
1030
|
-
tooltip: i18n('reject.
|
|
1265
|
+
title: i18n('reject.title'),
|
|
1266
|
+
tooltip: i18n('reject.description'),
|
|
1031
1267
|
permission: i18n('reject.permission'),
|
|
1032
1268
|
audit: i18n('reject.audit')
|
|
1033
1269
|
}
|
|
@@ -1038,8 +1274,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1038
1274
|
icon: 'fa-light fa-download',
|
|
1039
1275
|
color: 'default',
|
|
1040
1276
|
descriptions: {
|
|
1041
|
-
|
|
1042
|
-
tooltip: i18n('export.
|
|
1277
|
+
title: i18n('export.title'),
|
|
1278
|
+
tooltip: i18n('export.description'),
|
|
1043
1279
|
permission: i18n('export.permission'),
|
|
1044
1280
|
audit: i18n('export.audit')
|
|
1045
1281
|
}
|
|
@@ -1050,8 +1286,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1050
1286
|
icon: 'fa-light fa-upload',
|
|
1051
1287
|
color: 'default',
|
|
1052
1288
|
descriptions: {
|
|
1053
|
-
|
|
1054
|
-
tooltip: i18n('import.
|
|
1289
|
+
title: i18n('import.title'),
|
|
1290
|
+
tooltip: i18n('import.description'),
|
|
1055
1291
|
permission: i18n('import.permission'),
|
|
1056
1292
|
audit: i18n('import.audit')
|
|
1057
1293
|
}
|
|
@@ -1062,8 +1298,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1062
1298
|
icon: 'fa-light fa-print',
|
|
1063
1299
|
color: 'default',
|
|
1064
1300
|
descriptions: {
|
|
1065
|
-
|
|
1066
|
-
tooltip: i18n('print.
|
|
1301
|
+
title: i18n('print.title'),
|
|
1302
|
+
tooltip: i18n('print.description'),
|
|
1067
1303
|
permission: i18n('print.permission'),
|
|
1068
1304
|
audit: i18n('print.audit')
|
|
1069
1305
|
}
|
|
@@ -1074,8 +1310,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1074
1310
|
icon: 'fa-light fa-clone',
|
|
1075
1311
|
color: 'warning',
|
|
1076
1312
|
descriptions: {
|
|
1077
|
-
|
|
1078
|
-
tooltip: i18n('duplicate.
|
|
1313
|
+
title: i18n('duplicate.title'),
|
|
1314
|
+
tooltip: i18n('duplicate.description'),
|
|
1079
1315
|
permission: i18n('duplicate.permission'),
|
|
1080
1316
|
audit: i18n('duplicate.audit')
|
|
1081
1317
|
}
|
|
@@ -1084,10 +1320,10 @@ const AXPSystemActions = Object.freeze({
|
|
|
1084
1320
|
key: AXPSystemActionType.Archive,
|
|
1085
1321
|
title: i18n('archive.title'),
|
|
1086
1322
|
icon: 'fa-light fa-box-archive',
|
|
1087
|
-
color: '
|
|
1323
|
+
color: 'default',
|
|
1088
1324
|
descriptions: {
|
|
1089
|
-
|
|
1090
|
-
tooltip: i18n('archive.
|
|
1325
|
+
title: i18n('archive.title'),
|
|
1326
|
+
tooltip: i18n('archive.description'),
|
|
1091
1327
|
permission: i18n('archive.permission'),
|
|
1092
1328
|
audit: i18n('archive.audit')
|
|
1093
1329
|
}
|
|
@@ -1096,10 +1332,10 @@ const AXPSystemActions = Object.freeze({
|
|
|
1096
1332
|
key: AXPSystemActionType.Restore,
|
|
1097
1333
|
title: i18n('restore.title'),
|
|
1098
1334
|
icon: 'fa-light fa-arrow-rotate-left',
|
|
1099
|
-
color: '
|
|
1335
|
+
color: 'default',
|
|
1100
1336
|
descriptions: {
|
|
1101
|
-
|
|
1102
|
-
tooltip: i18n('restore.
|
|
1337
|
+
title: i18n('restore.title'),
|
|
1338
|
+
tooltip: i18n('restore.description'),
|
|
1103
1339
|
permission: i18n('restore.permission'),
|
|
1104
1340
|
audit: i18n('restore.audit')
|
|
1105
1341
|
}
|
|
@@ -1110,8 +1346,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1110
1346
|
icon: 'fa-light fa-user-plus',
|
|
1111
1347
|
color: 'primary',
|
|
1112
1348
|
descriptions: {
|
|
1113
|
-
|
|
1114
|
-
tooltip: i18n('assign.
|
|
1349
|
+
title: i18n('assign.title'),
|
|
1350
|
+
tooltip: i18n('assign.description'),
|
|
1115
1351
|
permission: i18n('assign.permission'),
|
|
1116
1352
|
audit: i18n('assign.audit')
|
|
1117
1353
|
}
|
|
@@ -1122,8 +1358,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1122
1358
|
icon: 'fa-light fa-lock',
|
|
1123
1359
|
color: 'warning',
|
|
1124
1360
|
descriptions: {
|
|
1125
|
-
|
|
1126
|
-
tooltip: i18n('lock.
|
|
1361
|
+
title: i18n('lock.title'),
|
|
1362
|
+
tooltip: i18n('lock.description'),
|
|
1127
1363
|
permission: i18n('lock.permission'),
|
|
1128
1364
|
audit: i18n('lock.audit')
|
|
1129
1365
|
}
|
|
@@ -1134,8 +1370,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1134
1370
|
icon: 'fa-light fa-unlock',
|
|
1135
1371
|
color: 'success',
|
|
1136
1372
|
descriptions: {
|
|
1137
|
-
|
|
1138
|
-
tooltip: i18n('unlock.
|
|
1373
|
+
title: i18n('unlock.title'),
|
|
1374
|
+
tooltip: i18n('unlock.description'),
|
|
1139
1375
|
permission: i18n('unlock.permission'),
|
|
1140
1376
|
audit: i18n('unlock.audit')
|
|
1141
1377
|
}
|
|
@@ -1146,8 +1382,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1146
1382
|
icon: 'fa-light fa-share-nodes',
|
|
1147
1383
|
color: 'info',
|
|
1148
1384
|
descriptions: {
|
|
1149
|
-
|
|
1150
|
-
tooltip: i18n('share.
|
|
1385
|
+
title: i18n('share.title'),
|
|
1386
|
+
tooltip: i18n('share.description'),
|
|
1151
1387
|
permission: i18n('share.permission'),
|
|
1152
1388
|
audit: i18n('share.audit')
|
|
1153
1389
|
}
|
|
@@ -1158,8 +1394,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1158
1394
|
icon: 'fa-light fa-sliders',
|
|
1159
1395
|
color: 'primary',
|
|
1160
1396
|
descriptions: {
|
|
1161
|
-
|
|
1162
|
-
tooltip: i18n('configure.
|
|
1397
|
+
title: i18n('configure.title'),
|
|
1398
|
+
tooltip: i18n('configure.description'),
|
|
1163
1399
|
permission: i18n('configure.permission'),
|
|
1164
1400
|
audit: i18n('configure.audit')
|
|
1165
1401
|
}
|
|
@@ -1170,8 +1406,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1170
1406
|
icon: 'fa-light fa-arrow-down-up-across-line',
|
|
1171
1407
|
color: 'default',
|
|
1172
1408
|
descriptions: {
|
|
1173
|
-
|
|
1174
|
-
tooltip: i18n('reorder.
|
|
1409
|
+
title: i18n('reorder.title'),
|
|
1410
|
+
tooltip: i18n('reorder.description'),
|
|
1175
1411
|
permission: i18n('reorder.permission'),
|
|
1176
1412
|
audit: i18n('reorder.audit')
|
|
1177
1413
|
}
|
|
@@ -1182,8 +1418,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1182
1418
|
icon: 'fa-light fa-magnifying-glass',
|
|
1183
1419
|
color: 'default',
|
|
1184
1420
|
descriptions: {
|
|
1185
|
-
|
|
1186
|
-
tooltip: i18n('preview.
|
|
1421
|
+
title: i18n('preview.title'),
|
|
1422
|
+
tooltip: i18n('preview.description'),
|
|
1187
1423
|
permission: i18n('preview.permission'),
|
|
1188
1424
|
audit: i18n('preview.audit')
|
|
1189
1425
|
}
|
|
@@ -1194,8 +1430,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1194
1430
|
icon: 'fa-light fa-globe',
|
|
1195
1431
|
color: 'success',
|
|
1196
1432
|
descriptions: {
|
|
1197
|
-
|
|
1198
|
-
tooltip: i18n('publish.
|
|
1433
|
+
title: i18n('publish.title'),
|
|
1434
|
+
tooltip: i18n('publish.description'),
|
|
1199
1435
|
permission: i18n('publish.permission'),
|
|
1200
1436
|
audit: i18n('publish.audit')
|
|
1201
1437
|
}
|
|
@@ -1206,8 +1442,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1206
1442
|
icon: 'fa-light fa-globe-slash',
|
|
1207
1443
|
color: 'danger',
|
|
1208
1444
|
descriptions: {
|
|
1209
|
-
|
|
1210
|
-
tooltip: i18n('unpublish.
|
|
1445
|
+
title: i18n('unpublish.title'),
|
|
1446
|
+
tooltip: i18n('unpublish.description'),
|
|
1211
1447
|
permission: i18n('unpublish.permission'),
|
|
1212
1448
|
audit: i18n('unpublish.audit')
|
|
1213
1449
|
}
|
|
@@ -1216,10 +1452,10 @@ const AXPSystemActions = Object.freeze({
|
|
|
1216
1452
|
key: AXPSystemActionType.Upload,
|
|
1217
1453
|
title: i18n('upload.title'),
|
|
1218
1454
|
icon: 'fa-light fa-upload',
|
|
1219
|
-
color: '
|
|
1455
|
+
color: 'default',
|
|
1220
1456
|
descriptions: {
|
|
1221
|
-
|
|
1222
|
-
tooltip: i18n('upload.
|
|
1457
|
+
title: i18n('upload.title'),
|
|
1458
|
+
tooltip: i18n('upload.description'),
|
|
1223
1459
|
permission: i18n('upload.permission'),
|
|
1224
1460
|
audit: i18n('upload.audit')
|
|
1225
1461
|
}
|
|
@@ -1228,10 +1464,10 @@ const AXPSystemActions = Object.freeze({
|
|
|
1228
1464
|
key: AXPSystemActionType.Download,
|
|
1229
1465
|
title: i18n('download.title'),
|
|
1230
1466
|
icon: 'fa-light fa-download',
|
|
1231
|
-
color: '
|
|
1467
|
+
color: 'default',
|
|
1232
1468
|
descriptions: {
|
|
1233
|
-
|
|
1234
|
-
tooltip: i18n('download.
|
|
1469
|
+
title: i18n('download.title'),
|
|
1470
|
+
tooltip: i18n('download.description'),
|
|
1235
1471
|
permission: i18n('download.permission'),
|
|
1236
1472
|
audit: i18n('download.audit')
|
|
1237
1473
|
}
|
|
@@ -1240,10 +1476,10 @@ const AXPSystemActions = Object.freeze({
|
|
|
1240
1476
|
key: AXPSystemActionType.Copy,
|
|
1241
1477
|
title: i18n('copy.title'),
|
|
1242
1478
|
icon: 'fa-light fa-copy',
|
|
1243
|
-
color: '
|
|
1479
|
+
color: 'default',
|
|
1244
1480
|
descriptions: {
|
|
1245
|
-
|
|
1246
|
-
tooltip: i18n('copy.
|
|
1481
|
+
title: i18n('copy.title'),
|
|
1482
|
+
tooltip: i18n('copy.description'),
|
|
1247
1483
|
permission: i18n('copy.permission'),
|
|
1248
1484
|
audit: i18n('copy.audit')
|
|
1249
1485
|
}
|
|
@@ -1254,8 +1490,8 @@ const AXPSystemActions = Object.freeze({
|
|
|
1254
1490
|
icon: 'fa-light fa-arrow-right-arrow-left',
|
|
1255
1491
|
color: 'default',
|
|
1256
1492
|
descriptions: {
|
|
1257
|
-
|
|
1258
|
-
tooltip: i18n('move.
|
|
1493
|
+
title: i18n('move.title'),
|
|
1494
|
+
tooltip: i18n('move.description'),
|
|
1259
1495
|
permission: i18n('move.permission'),
|
|
1260
1496
|
audit: i18n('move.audit')
|
|
1261
1497
|
}
|
|
@@ -1266,16 +1502,430 @@ const AXPSystemActions = Object.freeze({
|
|
|
1266
1502
|
icon: 'fa-light fa-pen',
|
|
1267
1503
|
color: 'default',
|
|
1268
1504
|
descriptions: {
|
|
1269
|
-
|
|
1270
|
-
tooltip: i18n('rename.
|
|
1505
|
+
title: i18n('rename.title'),
|
|
1506
|
+
tooltip: i18n('rename.description'),
|
|
1271
1507
|
permission: i18n('rename.permission'),
|
|
1272
1508
|
audit: i18n('rename.audit')
|
|
1273
1509
|
}
|
|
1274
1510
|
},
|
|
1511
|
+
Manage: {
|
|
1512
|
+
key: AXPSystemActionType.Manage,
|
|
1513
|
+
title: i18n('manage.title'),
|
|
1514
|
+
icon: 'fa-light fa-gear',
|
|
1515
|
+
color: 'default',
|
|
1516
|
+
descriptions: {
|
|
1517
|
+
title: i18n('manage.title'),
|
|
1518
|
+
tooltip: i18n('manage.description'),
|
|
1519
|
+
permission: i18n('manage.permission'),
|
|
1520
|
+
audit: i18n('manage.audit')
|
|
1521
|
+
}
|
|
1522
|
+
},
|
|
1523
|
+
Info: {
|
|
1524
|
+
key: AXPSystemActionType.Info,
|
|
1525
|
+
title: i18n('info.title'),
|
|
1526
|
+
icon: 'fa-light fa-info',
|
|
1527
|
+
color: 'default',
|
|
1528
|
+
descriptions: {
|
|
1529
|
+
title: i18n('info.title'),
|
|
1530
|
+
tooltip: i18n('info.description'),
|
|
1531
|
+
permission: i18n('info.permission'),
|
|
1532
|
+
audit: i18n('info.audit')
|
|
1533
|
+
}
|
|
1534
|
+
},
|
|
1535
|
+
Confirm: {
|
|
1536
|
+
key: AXPSystemActionType.Confirm,
|
|
1537
|
+
title: i18n('confirm.title'),
|
|
1538
|
+
icon: 'fa-light fa-check',
|
|
1539
|
+
color: 'success',
|
|
1540
|
+
descriptions: {
|
|
1541
|
+
title: i18n('confirm.title'),
|
|
1542
|
+
tooltip: i18n('confirm.description'),
|
|
1543
|
+
permission: i18n('confirm.permission'),
|
|
1544
|
+
audit: i18n('confirm.audit')
|
|
1545
|
+
}
|
|
1546
|
+
},
|
|
1547
|
+
Design: {
|
|
1548
|
+
key: AXPSystemActionType.Design,
|
|
1549
|
+
title: i18n('design.title'),
|
|
1550
|
+
icon: 'fa-light fa-paintbrush',
|
|
1551
|
+
color: 'default',
|
|
1552
|
+
descriptions: {
|
|
1553
|
+
title: i18n('design.title'),
|
|
1554
|
+
tooltip: i18n('design.description'),
|
|
1555
|
+
permission: i18n('design.permission'),
|
|
1556
|
+
audit: i18n('design.audit')
|
|
1557
|
+
}
|
|
1558
|
+
},
|
|
1559
|
+
VersionHistory: {
|
|
1560
|
+
key: AXPSystemActionType.VersionHistory,
|
|
1561
|
+
title: i18n('version-history.title'),
|
|
1562
|
+
icon: 'fa-light fa-history',
|
|
1563
|
+
color: 'default',
|
|
1564
|
+
descriptions: {
|
|
1565
|
+
title: i18n('version-history.title'),
|
|
1566
|
+
tooltip: i18n('version-history.description'),
|
|
1567
|
+
permission: i18n('version-history.permission'),
|
|
1568
|
+
audit: i18n('version-history.audit')
|
|
1569
|
+
}
|
|
1570
|
+
},
|
|
1571
|
+
Compare: {
|
|
1572
|
+
key: AXPSystemActionType.Compare,
|
|
1573
|
+
title: i18n('compare.title'),
|
|
1574
|
+
icon: 'fa-light fa-code-compare',
|
|
1575
|
+
color: 'default',
|
|
1576
|
+
descriptions: {
|
|
1577
|
+
title: i18n('compare.title'),
|
|
1578
|
+
tooltip: i18n('compare.description'),
|
|
1579
|
+
permission: i18n('compare.permission'),
|
|
1580
|
+
audit: i18n('compare.audit')
|
|
1581
|
+
}
|
|
1582
|
+
},
|
|
1583
|
+
Comments: {
|
|
1584
|
+
key: AXPSystemActionType.Comments,
|
|
1585
|
+
title: i18n('comments.title'),
|
|
1586
|
+
icon: 'fa-light fa-comments',
|
|
1587
|
+
color: 'default',
|
|
1588
|
+
descriptions: {
|
|
1589
|
+
title: i18n('comments.title'),
|
|
1590
|
+
tooltip: i18n('comments.description'),
|
|
1591
|
+
permission: i18n('comments.permission'),
|
|
1592
|
+
audit: i18n('comments.audit')
|
|
1593
|
+
}
|
|
1594
|
+
},
|
|
1595
|
+
Sign: {
|
|
1596
|
+
key: AXPSystemActionType.Sign,
|
|
1597
|
+
title: i18n('sign.title'),
|
|
1598
|
+
icon: 'fa-light fa-signature',
|
|
1599
|
+
color: 'default',
|
|
1600
|
+
descriptions: {
|
|
1601
|
+
title: i18n('sign.title'),
|
|
1602
|
+
tooltip: i18n('sign.description'),
|
|
1603
|
+
permission: i18n('sign.permission'),
|
|
1604
|
+
audit: i18n('sign.audit')
|
|
1605
|
+
}
|
|
1606
|
+
},
|
|
1607
|
+
Setup: {
|
|
1608
|
+
key: AXPSystemActionType.Setup,
|
|
1609
|
+
title: i18n('setup.title'),
|
|
1610
|
+
icon: 'fa-light fa-cog',
|
|
1611
|
+
color: 'default',
|
|
1612
|
+
descriptions: {
|
|
1613
|
+
title: i18n('setup.title'),
|
|
1614
|
+
tooltip: i18n('setup.description'),
|
|
1615
|
+
permission: i18n('setup.permission'),
|
|
1616
|
+
audit: i18n('setup.audit')
|
|
1617
|
+
}
|
|
1618
|
+
},
|
|
1619
|
+
Send: {
|
|
1620
|
+
key: AXPSystemActionType.Send,
|
|
1621
|
+
title: i18n('send.title'),
|
|
1622
|
+
icon: 'fa-light fa-envelope',
|
|
1623
|
+
color: 'default',
|
|
1624
|
+
descriptions: {
|
|
1625
|
+
title: i18n('send.title'),
|
|
1626
|
+
tooltip: i18n('send.description'),
|
|
1627
|
+
permission: i18n('send.permission'),
|
|
1628
|
+
audit: i18n('send.audit')
|
|
1629
|
+
}
|
|
1630
|
+
},
|
|
1631
|
+
Report: {
|
|
1632
|
+
key: AXPSystemActionType.Report,
|
|
1633
|
+
title: i18n('report.title'),
|
|
1634
|
+
icon: 'fa-light fa-chart-line',
|
|
1635
|
+
color: 'default',
|
|
1636
|
+
descriptions: {
|
|
1637
|
+
title: i18n('report.title'),
|
|
1638
|
+
tooltip: i18n('report.description'),
|
|
1639
|
+
permission: i18n('report.permission'),
|
|
1640
|
+
audit: i18n('report.audit')
|
|
1641
|
+
}
|
|
1642
|
+
},
|
|
1643
|
+
Sent: {
|
|
1644
|
+
key: AXPSystemActionType.Sent,
|
|
1645
|
+
title: i18n('sent.title'),
|
|
1646
|
+
icon: 'fa-light fa-paper-plane',
|
|
1647
|
+
color: 'default',
|
|
1648
|
+
descriptions: {
|
|
1649
|
+
title: i18n('sent.title'),
|
|
1650
|
+
tooltip: i18n('sent.description'),
|
|
1651
|
+
permission: i18n('sent.permission'),
|
|
1652
|
+
audit: i18n('sent.audit')
|
|
1653
|
+
}
|
|
1654
|
+
},
|
|
1655
|
+
Review: {
|
|
1656
|
+
key: AXPSystemActionType.Review,
|
|
1657
|
+
title: i18n('review.title'),
|
|
1658
|
+
icon: 'fa-light fa-eye',
|
|
1659
|
+
color: 'default',
|
|
1660
|
+
descriptions: {
|
|
1661
|
+
title: i18n('review.title'),
|
|
1662
|
+
tooltip: i18n('review.description'),
|
|
1663
|
+
permission: i18n('review.permission'),
|
|
1664
|
+
audit: i18n('review.audit')
|
|
1665
|
+
}
|
|
1666
|
+
},
|
|
1667
|
+
Generate: {
|
|
1668
|
+
key: AXPSystemActionType.Generate,
|
|
1669
|
+
title: i18n('generate.title'),
|
|
1670
|
+
icon: 'fa-light fa-wand-magic-sparkles',
|
|
1671
|
+
color: 'primary',
|
|
1672
|
+
descriptions: {
|
|
1673
|
+
title: i18n('generate.title'),
|
|
1674
|
+
tooltip: i18n('generate.description'),
|
|
1675
|
+
permission: i18n('generate.permission'),
|
|
1676
|
+
audit: i18n('generate.audit')
|
|
1677
|
+
}
|
|
1678
|
+
},
|
|
1679
|
+
Refresh: {
|
|
1680
|
+
key: AXPSystemActionType.Refresh,
|
|
1681
|
+
title: i18n('refresh.title'),
|
|
1682
|
+
icon: 'fa-light fa-arrows-rotate',
|
|
1683
|
+
color: 'default',
|
|
1684
|
+
descriptions: {
|
|
1685
|
+
title: i18n('refresh.title'),
|
|
1686
|
+
tooltip: i18n('refresh.description'),
|
|
1687
|
+
permission: i18n('refresh.permission'),
|
|
1688
|
+
audit: i18n('refresh.audit')
|
|
1689
|
+
}
|
|
1690
|
+
},
|
|
1691
|
+
Reload: {
|
|
1692
|
+
key: AXPSystemActionType.Reload,
|
|
1693
|
+
title: i18n('reload.title'),
|
|
1694
|
+
icon: 'fa-light fa-arrows-rotate',
|
|
1695
|
+
color: 'default',
|
|
1696
|
+
descriptions: {
|
|
1697
|
+
title: i18n('reload.title'),
|
|
1698
|
+
tooltip: i18n('reload.description'),
|
|
1699
|
+
permission: i18n('reload.permission'),
|
|
1700
|
+
audit: i18n('reload.audit')
|
|
1701
|
+
}
|
|
1702
|
+
},
|
|
1703
|
+
Search: {
|
|
1704
|
+
key: AXPSystemActionType.Search,
|
|
1705
|
+
title: i18n('search.title'),
|
|
1706
|
+
icon: 'fa-light fa-magnifying-glass',
|
|
1707
|
+
color: 'default',
|
|
1708
|
+
descriptions: {
|
|
1709
|
+
title: i18n('search.title'),
|
|
1710
|
+
tooltip: i18n('search.description'),
|
|
1711
|
+
permission: i18n('search.permission'),
|
|
1712
|
+
audit: i18n('search.audit')
|
|
1713
|
+
}
|
|
1714
|
+
},
|
|
1715
|
+
Filter: {
|
|
1716
|
+
key: AXPSystemActionType.Filter,
|
|
1717
|
+
title: i18n('filter.title'),
|
|
1718
|
+
icon: 'fa-light fa-filter',
|
|
1719
|
+
color: 'default',
|
|
1720
|
+
descriptions: {
|
|
1721
|
+
title: i18n('filter.title'),
|
|
1722
|
+
tooltip: i18n('filter.description'),
|
|
1723
|
+
permission: i18n('filter.permission'),
|
|
1724
|
+
audit: i18n('filter.audit')
|
|
1725
|
+
}
|
|
1726
|
+
},
|
|
1727
|
+
Sort: {
|
|
1728
|
+
key: AXPSystemActionType.Sort,
|
|
1729
|
+
title: i18n('sort.title'),
|
|
1730
|
+
icon: 'fa-light fa-arrow-down-up-across-line',
|
|
1731
|
+
color: 'default',
|
|
1732
|
+
descriptions: {
|
|
1733
|
+
title: i18n('sort.title'),
|
|
1734
|
+
tooltip: i18n('sort.description'),
|
|
1735
|
+
permission: i18n('sort.permission'),
|
|
1736
|
+
audit: i18n('sort.audit')
|
|
1737
|
+
}
|
|
1738
|
+
},
|
|
1739
|
+
Start: {
|
|
1740
|
+
key: AXPSystemActionType.Start,
|
|
1741
|
+
title: i18n('start.title'),
|
|
1742
|
+
icon: 'fa-light fa-play',
|
|
1743
|
+
color: 'success',
|
|
1744
|
+
descriptions: {
|
|
1745
|
+
title: i18n('start.title'),
|
|
1746
|
+
tooltip: i18n('start.description'),
|
|
1747
|
+
permission: i18n('start.permission'),
|
|
1748
|
+
audit: i18n('start.audit')
|
|
1749
|
+
}
|
|
1750
|
+
},
|
|
1751
|
+
Stop: {
|
|
1752
|
+
key: AXPSystemActionType.Stop,
|
|
1753
|
+
title: i18n('stop.title'),
|
|
1754
|
+
icon: 'fa-light fa-stop',
|
|
1755
|
+
color: 'danger',
|
|
1756
|
+
critical: true,
|
|
1757
|
+
descriptions: {
|
|
1758
|
+
title: i18n('stop.title'),
|
|
1759
|
+
tooltip: i18n('stop.description'),
|
|
1760
|
+
permission: i18n('stop.permission'),
|
|
1761
|
+
audit: i18n('stop.audit')
|
|
1762
|
+
}
|
|
1763
|
+
},
|
|
1764
|
+
Pause: {
|
|
1765
|
+
key: AXPSystemActionType.Pause,
|
|
1766
|
+
title: i18n('pause.title'),
|
|
1767
|
+
icon: 'fa-light fa-pause',
|
|
1768
|
+
color: 'warning',
|
|
1769
|
+
descriptions: {
|
|
1770
|
+
title: i18n('pause.title'),
|
|
1771
|
+
tooltip: i18n('pause.description'),
|
|
1772
|
+
permission: i18n('pause.permission'),
|
|
1773
|
+
audit: i18n('pause.audit')
|
|
1774
|
+
}
|
|
1775
|
+
},
|
|
1776
|
+
Cancel: {
|
|
1777
|
+
key: AXPSystemActionType.Cancel,
|
|
1778
|
+
title: i18n('cancel.title'),
|
|
1779
|
+
icon: 'fa-light fa-xmark',
|
|
1780
|
+
color: 'danger',
|
|
1781
|
+
critical: true,
|
|
1782
|
+
descriptions: {
|
|
1783
|
+
title: i18n('cancel.title'),
|
|
1784
|
+
tooltip: i18n('cancel.description'),
|
|
1785
|
+
permission: i18n('cancel.permission'),
|
|
1786
|
+
audit: i18n('cancel.audit')
|
|
1787
|
+
}
|
|
1788
|
+
},
|
|
1789
|
+
Close: {
|
|
1790
|
+
key: AXPSystemActionType.Close,
|
|
1791
|
+
title: i18n('close.title'),
|
|
1792
|
+
icon: 'fa-light fa-xmark',
|
|
1793
|
+
color: 'default',
|
|
1794
|
+
descriptions: {
|
|
1795
|
+
title: i18n('close.title'),
|
|
1796
|
+
tooltip: i18n('close.description'),
|
|
1797
|
+
permission: i18n('close.permission'),
|
|
1798
|
+
audit: i18n('close.audit')
|
|
1799
|
+
}
|
|
1800
|
+
},
|
|
1801
|
+
Complete: {
|
|
1802
|
+
key: AXPSystemActionType.Complete,
|
|
1803
|
+
title: i18n('complete.title'),
|
|
1804
|
+
icon: 'fa-light fa-check',
|
|
1805
|
+
color: 'success',
|
|
1806
|
+
descriptions: {
|
|
1807
|
+
title: i18n('complete.title'),
|
|
1808
|
+
tooltip: i18n('complete.description'),
|
|
1809
|
+
permission: i18n('complete.permission'),
|
|
1810
|
+
audit: i18n('complete.audit')
|
|
1811
|
+
}
|
|
1812
|
+
},
|
|
1813
|
+
Save: {
|
|
1814
|
+
key: AXPSystemActionType.Save,
|
|
1815
|
+
title: i18n('save.title'),
|
|
1816
|
+
icon: 'fa-light fa-floppy-disk',
|
|
1817
|
+
color: 'primary',
|
|
1818
|
+
descriptions: {
|
|
1819
|
+
title: i18n('save.title'),
|
|
1820
|
+
tooltip: i18n('save.description'),
|
|
1821
|
+
permission: i18n('save.permission'),
|
|
1822
|
+
audit: i18n('save.audit')
|
|
1823
|
+
}
|
|
1824
|
+
},
|
|
1825
|
+
SaveAs: {
|
|
1826
|
+
key: AXPSystemActionType.SaveAs,
|
|
1827
|
+
title: i18n('save-as.title'),
|
|
1828
|
+
icon: 'fa-light fa-floppy-disk',
|
|
1829
|
+
color: 'default',
|
|
1830
|
+
descriptions: {
|
|
1831
|
+
title: i18n('save-as.title'),
|
|
1832
|
+
tooltip: i18n('save-as.description'),
|
|
1833
|
+
permission: i18n('save-as.permission'),
|
|
1834
|
+
audit: i18n('save-as.audit')
|
|
1835
|
+
}
|
|
1836
|
+
},
|
|
1837
|
+
Sync: {
|
|
1838
|
+
key: AXPSystemActionType.Sync,
|
|
1839
|
+
title: i18n('sync.title'),
|
|
1840
|
+
icon: 'fa-light fa-arrows-rotate',
|
|
1841
|
+
color: 'default',
|
|
1842
|
+
descriptions: {
|
|
1843
|
+
title: i18n('sync.title'),
|
|
1844
|
+
tooltip: i18n('sync.description'),
|
|
1845
|
+
permission: i18n('sync.permission'),
|
|
1846
|
+
audit: i18n('sync.audit')
|
|
1847
|
+
}
|
|
1848
|
+
},
|
|
1849
|
+
Reset: {
|
|
1850
|
+
key: AXPSystemActionType.Reset,
|
|
1851
|
+
title: i18n('reset.title'),
|
|
1852
|
+
icon: 'fa-light fa-arrow-rotate-left',
|
|
1853
|
+
color: 'warning',
|
|
1854
|
+
critical: true,
|
|
1855
|
+
descriptions: {
|
|
1856
|
+
title: i18n('reset.title'),
|
|
1857
|
+
tooltip: i18n('reset.description'),
|
|
1858
|
+
permission: i18n('reset.permission'),
|
|
1859
|
+
audit: i18n('reset.audit')
|
|
1860
|
+
}
|
|
1861
|
+
},
|
|
1862
|
+
Clear: {
|
|
1863
|
+
key: AXPSystemActionType.Clear,
|
|
1864
|
+
title: i18n('clear.title'),
|
|
1865
|
+
icon: 'fa-light fa-eraser',
|
|
1866
|
+
color: 'default',
|
|
1867
|
+
descriptions: {
|
|
1868
|
+
title: i18n('clear.title'),
|
|
1869
|
+
tooltip: i18n('clear.description'),
|
|
1870
|
+
permission: i18n('clear.permission'),
|
|
1871
|
+
audit: i18n('clear.audit')
|
|
1872
|
+
}
|
|
1873
|
+
},
|
|
1275
1874
|
});
|
|
1276
1875
|
function getSystemActions(type) {
|
|
1277
1876
|
return Object.values(AXPSystemActions).find(action => action.key === type);
|
|
1278
1877
|
}
|
|
1878
|
+
/**
|
|
1879
|
+
* Resolves the visual appearance (color and icon) for entity actions
|
|
1880
|
+
* using the system actions from the core module.
|
|
1881
|
+
*/
|
|
1882
|
+
function resolveActionLook(actionType) {
|
|
1883
|
+
// Try to get system action first
|
|
1884
|
+
const systemActionType = actionType;
|
|
1885
|
+
if (systemActionType) {
|
|
1886
|
+
const systemAction = getSystemActions(systemActionType);
|
|
1887
|
+
if (systemAction) {
|
|
1888
|
+
return {
|
|
1889
|
+
color: (systemAction.color || 'default'),
|
|
1890
|
+
icon: systemAction.icon || ''
|
|
1891
|
+
};
|
|
1892
|
+
}
|
|
1893
|
+
}
|
|
1894
|
+
// Fallback for unknown actions
|
|
1895
|
+
return {
|
|
1896
|
+
color: 'default',
|
|
1897
|
+
icon: ''
|
|
1898
|
+
};
|
|
1899
|
+
}
|
|
1900
|
+
/**
|
|
1901
|
+
* Resolves the title, description, icon and color for button actions
|
|
1902
|
+
* using the system actions from the core module.
|
|
1903
|
+
* @param actionType
|
|
1904
|
+
* @returns
|
|
1905
|
+
*/
|
|
1906
|
+
function getActionButton(actionType) {
|
|
1907
|
+
const systemActionType = actionType;
|
|
1908
|
+
if (systemActionType) {
|
|
1909
|
+
const systemAction = getSystemActions(systemActionType);
|
|
1910
|
+
if (systemAction) {
|
|
1911
|
+
return {
|
|
1912
|
+
name: actionType,
|
|
1913
|
+
icon: systemAction.icon || '',
|
|
1914
|
+
color: systemAction.color || 'default',
|
|
1915
|
+
title: systemAction.title,
|
|
1916
|
+
description: systemAction.descriptions.title
|
|
1917
|
+
};
|
|
1918
|
+
}
|
|
1919
|
+
}
|
|
1920
|
+
// Fallback for unknown actions
|
|
1921
|
+
return {
|
|
1922
|
+
name: actionType,
|
|
1923
|
+
title: actionType,
|
|
1924
|
+
description: `Perform ${actionType} action`,
|
|
1925
|
+
icon: '',
|
|
1926
|
+
color: 'default'
|
|
1927
|
+
};
|
|
1928
|
+
}
|
|
1279
1929
|
|
|
1280
1930
|
function getNestedKeys(obj, prefix = '') {
|
|
1281
1931
|
let keys = [];
|
|
@@ -1384,10 +2034,10 @@ class AXPCountdownPipe {
|
|
|
1384
2034
|
updateTargetDate(value) {
|
|
1385
2035
|
this.targetDate = new Date(value).getTime();
|
|
1386
2036
|
}
|
|
1387
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
1388
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.
|
|
2037
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPCountdownPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2038
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.8", ngImport: i0, type: AXPCountdownPipe, isStandalone: true, name: "countdown", pure: false }); }
|
|
1389
2039
|
}
|
|
1390
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
2040
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPCountdownPipe, decorators: [{
|
|
1391
2041
|
type: Pipe,
|
|
1392
2042
|
args: [{
|
|
1393
2043
|
name: 'countdown',
|
|
@@ -1413,38 +2063,46 @@ function applyCondition(item, condition) {
|
|
|
1413
2063
|
if (!conditionType) {
|
|
1414
2064
|
return true;
|
|
1415
2065
|
}
|
|
1416
|
-
|
|
2066
|
+
const op = String(conditionType);
|
|
2067
|
+
switch (op) {
|
|
1417
2068
|
case 'equal':
|
|
2069
|
+
case 'eq':
|
|
1418
2070
|
result = isEqual(valueToCompare, conditionValue);
|
|
1419
2071
|
if (loggingEnabled) {
|
|
1420
2072
|
console.log('Equal check result:', result);
|
|
1421
2073
|
}
|
|
1422
2074
|
break;
|
|
1423
2075
|
case 'notEqual':
|
|
2076
|
+
case 'ne':
|
|
2077
|
+
case 'neq':
|
|
1424
2078
|
result = !isEqual(valueToCompare, conditionValue);
|
|
1425
2079
|
if (loggingEnabled) {
|
|
1426
2080
|
console.log('Not equal check result:', result);
|
|
1427
2081
|
}
|
|
1428
2082
|
break;
|
|
1429
2083
|
case 'greaterThan':
|
|
2084
|
+
case 'gt':
|
|
1430
2085
|
result = gt(valueToCompare, conditionValue);
|
|
1431
2086
|
if (loggingEnabled) {
|
|
1432
2087
|
console.log('Greater than check result:', result);
|
|
1433
2088
|
}
|
|
1434
2089
|
break;
|
|
1435
2090
|
case 'lessThan':
|
|
2091
|
+
case 'lt':
|
|
1436
2092
|
result = lt(valueToCompare, conditionValue);
|
|
1437
2093
|
if (loggingEnabled) {
|
|
1438
2094
|
console.log('Less than check result:', result);
|
|
1439
2095
|
}
|
|
1440
2096
|
break;
|
|
1441
2097
|
case 'greaterThanOrEqual':
|
|
2098
|
+
case 'gte':
|
|
1442
2099
|
result = gte(valueToCompare, conditionValue);
|
|
1443
2100
|
if (loggingEnabled) {
|
|
1444
2101
|
console.log('Greater than or equal check result:', result);
|
|
1445
2102
|
}
|
|
1446
2103
|
break;
|
|
1447
2104
|
case 'lessThanOrEqual':
|
|
2105
|
+
case 'lte':
|
|
1448
2106
|
result = lte(valueToCompare, conditionValue);
|
|
1449
2107
|
if (loggingEnabled) {
|
|
1450
2108
|
console.log('Less than or equal check result:', result);
|
|
@@ -1541,7 +2199,9 @@ function applyCondition(item, condition) {
|
|
|
1541
2199
|
console.log('Default case, returning true');
|
|
1542
2200
|
}
|
|
1543
2201
|
}
|
|
1544
|
-
|
|
2202
|
+
// Apply negative flag if present on operator (invert the result)
|
|
2203
|
+
const isNegative = !!condition?.operator?.negative;
|
|
2204
|
+
return isNegative ? !result : result;
|
|
1545
2205
|
}
|
|
1546
2206
|
function applyFilterArray(dataArray, filters, logic = 'and') {
|
|
1547
2207
|
if (filters && filters.length) {
|
|
@@ -1692,10 +2352,10 @@ class AXHighlightService {
|
|
|
1692
2352
|
resultHTML += '</span>';
|
|
1693
2353
|
return resultHTML;
|
|
1694
2354
|
}
|
|
1695
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
1696
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.
|
|
2355
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXHighlightService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2356
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXHighlightService, providedIn: 'root' }); }
|
|
1697
2357
|
}
|
|
1698
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
2358
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXHighlightService, decorators: [{
|
|
1699
2359
|
type: Injectable,
|
|
1700
2360
|
args: [{
|
|
1701
2361
|
providedIn: 'root',
|
|
@@ -1719,10 +2379,10 @@ class AXPActivityLogService {
|
|
|
1719
2379
|
async getHistoryByIds(refId, refType, ids) {
|
|
1720
2380
|
return (await Promise.all(this.providers?.map((p) => p.getHistoryByIds(refId, refType, ids)) ?? [])).flat();
|
|
1721
2381
|
}
|
|
1722
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
1723
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.
|
|
2382
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPActivityLogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2383
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPActivityLogService, providedIn: 'root' }); }
|
|
1724
2384
|
}
|
|
1725
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
2385
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPActivityLogService, decorators: [{
|
|
1726
2386
|
type: Injectable,
|
|
1727
2387
|
args: [{ providedIn: 'root' }]
|
|
1728
2388
|
}] });
|
|
@@ -1738,6 +2398,7 @@ class AXPDistributedEventListenerService {
|
|
|
1738
2398
|
constructor() {
|
|
1739
2399
|
//#region ---- Providers & Caches ----
|
|
1740
2400
|
this.listenerProviders = inject(AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, { optional: true }) || [];
|
|
2401
|
+
this.injector = inject(Injector);
|
|
1741
2402
|
/** Cache for listeners by key. */
|
|
1742
2403
|
this.listenersByKey = new Map();
|
|
1743
2404
|
/** Flag to track if providers have been loaded */
|
|
@@ -1751,19 +2412,76 @@ class AXPDistributedEventListenerService {
|
|
|
1751
2412
|
* @param data The event data to pass to listeners.
|
|
1752
2413
|
*/
|
|
1753
2414
|
async dispatch(key, data) {
|
|
1754
|
-
await this.
|
|
1755
|
-
const
|
|
1756
|
-
|
|
1757
|
-
|
|
2415
|
+
const providers = await this.resolveProviders();
|
|
2416
|
+
const matched = providers.filter(p => p.key === key);
|
|
2417
|
+
if (!matched.length) {
|
|
2418
|
+
console.warn(`[AXPDistributedEventListenerService] No provider found for key='${key}'`);
|
|
2419
|
+
return;
|
|
2420
|
+
}
|
|
2421
|
+
for (const provider of matched) {
|
|
1758
2422
|
try {
|
|
1759
|
-
|
|
2423
|
+
await Promise.resolve(runInInjectionContext(this.injector, () => provider.execute(data)));
|
|
1760
2424
|
}
|
|
1761
|
-
catch (
|
|
1762
|
-
console.error(`
|
|
1763
|
-
return Promise.resolve(); // Continue with other listeners even if one fails
|
|
2425
|
+
catch (err) {
|
|
2426
|
+
console.error(`[AXPDistributedEventListenerService] Provider for key='${key}' failed`, err);
|
|
1764
2427
|
}
|
|
1765
|
-
}
|
|
1766
|
-
|
|
2428
|
+
}
|
|
2429
|
+
}
|
|
2430
|
+
/**
|
|
2431
|
+
* Dispatch with async response (first matching provider, with retry/timeout)
|
|
2432
|
+
*/
|
|
2433
|
+
async dispatchAsync(key, data, options = {
|
|
2434
|
+
timeout: 60_000,
|
|
2435
|
+
retries: 3,
|
|
2436
|
+
retryDelay: 1000,
|
|
2437
|
+
}) {
|
|
2438
|
+
const providers = await this.resolveProviders();
|
|
2439
|
+
const matched = providers.filter(p => p.key === key);
|
|
2440
|
+
if (!matched.length) {
|
|
2441
|
+
throw new Error(`No provider found for key='${key}'`);
|
|
2442
|
+
}
|
|
2443
|
+
const attempt = (n) => {
|
|
2444
|
+
return new Promise((resolve, reject) => {
|
|
2445
|
+
let finished = false;
|
|
2446
|
+
const timer = setTimeout(() => {
|
|
2447
|
+
if (!finished) {
|
|
2448
|
+
if (n < options.retries) {
|
|
2449
|
+
console.warn(`[dispatchAsync] retrying key='${key}' (${n + 1}/${options.retries})`);
|
|
2450
|
+
resolve(attempt(n + 1));
|
|
2451
|
+
}
|
|
2452
|
+
else {
|
|
2453
|
+
reject(new Error(`Timeout: no response for key='${key}' after ${options.retries} attempts.`));
|
|
2454
|
+
}
|
|
2455
|
+
}
|
|
2456
|
+
}, options.timeout);
|
|
2457
|
+
try {
|
|
2458
|
+
const provider = matched[0];
|
|
2459
|
+
const result = runInInjectionContext(this.injector, () => provider.execute(data));
|
|
2460
|
+
Promise.resolve(result)
|
|
2461
|
+
.then((r) => {
|
|
2462
|
+
finished = true;
|
|
2463
|
+
clearTimeout(timer);
|
|
2464
|
+
resolve(r);
|
|
2465
|
+
})
|
|
2466
|
+
.catch(err => {
|
|
2467
|
+
finished = true;
|
|
2468
|
+
clearTimeout(timer);
|
|
2469
|
+
reject(err);
|
|
2470
|
+
});
|
|
2471
|
+
}
|
|
2472
|
+
catch (err) {
|
|
2473
|
+
clearTimeout(timer);
|
|
2474
|
+
reject(err);
|
|
2475
|
+
}
|
|
2476
|
+
});
|
|
2477
|
+
};
|
|
2478
|
+
return attempt(0);
|
|
2479
|
+
}
|
|
2480
|
+
/**
|
|
2481
|
+
* Resolve all providers (handle both direct provider and Promise<provider>)
|
|
2482
|
+
*/
|
|
2483
|
+
async resolveProviders() {
|
|
2484
|
+
return Promise.all(this.listenerProviders.map(p => p instanceof Promise ? p : Promise.resolve(p)));
|
|
1767
2485
|
}
|
|
1768
2486
|
/**
|
|
1769
2487
|
* Returns all listeners for a specific event key.
|
|
@@ -1810,167 +2528,73 @@ class AXPDistributedEventListenerService {
|
|
|
1810
2528
|
this.listenersByKey.clear();
|
|
1811
2529
|
this.providersLoaded = false;
|
|
1812
2530
|
}
|
|
1813
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.
|
|
1814
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.
|
|
2531
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDistributedEventListenerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2532
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDistributedEventListenerService, providedIn: 'root' }); }
|
|
1815
2533
|
}
|
|
1816
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
2534
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDistributedEventListenerService, decorators: [{
|
|
1817
2535
|
type: Injectable,
|
|
1818
2536
|
args: [{
|
|
1819
2537
|
providedIn: 'root',
|
|
1820
2538
|
}]
|
|
1821
2539
|
}] });
|
|
1822
2540
|
|
|
1823
|
-
|
|
1824
|
-
/**
|
|
1825
|
-
* Entity Event Dispatcher - A wrapper for entity-specific events
|
|
1826
|
-
* Handles pattern-based dispatching for entity operations with wildcard support
|
|
1827
|
-
*/
|
|
1828
|
-
class AXPEntityEventDispatcherService {
|
|
2541
|
+
class AXPHookService {
|
|
1829
2542
|
constructor() {
|
|
1830
|
-
this.
|
|
1831
|
-
|
|
1832
|
-
//private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);
|
|
1833
|
-
/**
|
|
1834
|
-
* Dispatch entity events with pattern matching support for wildcard listeners
|
|
1835
|
-
* @param operation The operation type (inserted, updated, deleted)
|
|
1836
|
-
* @param entityName The full entity name (e.g., 'PlatformManagement.Category')
|
|
1837
|
-
* @param data The event data
|
|
1838
|
-
*/
|
|
1839
|
-
async dispatchEntityEvent(operation, entityName, data) {
|
|
1840
|
-
console.log('dispatchEntityEvent', operation, entityName, data);
|
|
1841
|
-
const enhancedData = {
|
|
1842
|
-
...data,
|
|
1843
|
-
entityName,
|
|
1844
|
-
operation,
|
|
1845
|
-
timestamp: new Date(),
|
|
1846
|
-
source: 'entity-dispatcher'
|
|
1847
|
-
};
|
|
1848
|
-
// Get all possible event keys that could match this entity operation
|
|
1849
|
-
const eventKeysToDispatch = await this.getAllMatchingEventKeys(operation, entityName);
|
|
1850
|
-
console.log('eventKeysToDispatch', eventKeysToDispatch);
|
|
1851
|
-
// Dispatch to all matching patterns simultaneously
|
|
1852
|
-
const dispatchPromises = eventKeysToDispatch.map(key => this.eventService.dispatch(key, enhancedData));
|
|
1853
|
-
await Promise.all(dispatchPromises);
|
|
1854
|
-
}
|
|
1855
|
-
/**
|
|
1856
|
-
* Get all event keys that should be dispatched for this entity operation
|
|
1857
|
-
* including wildcard pattern matches
|
|
1858
|
-
*/
|
|
1859
|
-
async getAllMatchingEventKeys(operation, entityName) {
|
|
1860
|
-
const eventKeys = new Set();
|
|
1861
|
-
// 1. Add exact patterns for this specific entity
|
|
1862
|
-
const exactKeys = this.generateEventKeys(operation, entityName);
|
|
1863
|
-
exactKeys.forEach(key => eventKeys.add(key));
|
|
1864
|
-
// 2. Find and add wildcard listeners that match this entity
|
|
1865
|
-
const wildcardKeys = await this.findMatchingWildcardKeys(operation, entityName);
|
|
1866
|
-
wildcardKeys.forEach(key => eventKeys.add(key));
|
|
1867
|
-
return Array.from(eventKeys);
|
|
1868
|
-
}
|
|
1869
|
-
/**
|
|
1870
|
-
* Find wildcard listener keys that match this entity operation
|
|
1871
|
-
*/
|
|
1872
|
-
async findMatchingWildcardKeys(operation, entityName) {
|
|
1873
|
-
const matchingKeys = [];
|
|
1874
|
-
// Get all registered listeners
|
|
1875
|
-
const allListenerKeys = await this.eventService.getRegisteredKeys();
|
|
1876
|
-
// Generate the event key that would be dispatched
|
|
1877
|
-
const actualEventKey = `entity.${operation}.${entityName}`;
|
|
1878
|
-
// Check each listener key for wildcard patterns
|
|
1879
|
-
for (const listenerKey of allListenerKeys) {
|
|
1880
|
-
if (listenerKey.includes('*') && this.matchesEntityPattern(actualEventKey, listenerKey)) {
|
|
1881
|
-
matchingKeys.push(listenerKey);
|
|
1882
|
-
}
|
|
1883
|
-
}
|
|
1884
|
-
return matchingKeys;
|
|
2543
|
+
this.listenerProviders = inject(AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, { optional: true }) || [];
|
|
2544
|
+
this.injector = inject(Injector);
|
|
1885
2545
|
}
|
|
1886
2546
|
/**
|
|
1887
|
-
*
|
|
1888
|
-
* Only supports entity patterns (entity.*)
|
|
2547
|
+
* Resolve all providers (handle both direct providers and Promise<provider>)
|
|
1889
2548
|
*/
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
if (!pattern.startsWith('entity.') || !pattern.includes('*')) {
|
|
1893
|
-
return false;
|
|
1894
|
-
}
|
|
1895
|
-
// Convert pattern to regex
|
|
1896
|
-
const regexPattern = pattern
|
|
1897
|
-
.replace(/\./g, '\\.') // Escape dots
|
|
1898
|
-
.replace(/\*/g, '.*'); // Convert * to regex wildcard
|
|
1899
|
-
const regex = new RegExp(`^${regexPattern}$`);
|
|
1900
|
-
return regex.test(eventKey);
|
|
2549
|
+
async resolveProviders() {
|
|
2550
|
+
return Promise.all(this.listenerProviders.map(p => p instanceof Promise ? p : Promise.resolve(p)));
|
|
1901
2551
|
}
|
|
1902
2552
|
/**
|
|
1903
|
-
*
|
|
1904
|
-
*
|
|
1905
|
-
*
|
|
2553
|
+
* Fire sync hooks (fire-and-forget).
|
|
2554
|
+
* All providers with the given key will be executed.
|
|
2555
|
+
* Execution is not awaited.
|
|
1906
2556
|
*/
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
2557
|
+
fire(key, data) {
|
|
2558
|
+
this.resolveProviders().then(providers => {
|
|
2559
|
+
providers
|
|
2560
|
+
.filter(p => p.key === key)
|
|
2561
|
+
.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0))
|
|
2562
|
+
.forEach(p => {
|
|
2563
|
+
try {
|
|
2564
|
+
runInInjectionContext(this.injector, () => p.execute(data));
|
|
2565
|
+
}
|
|
2566
|
+
catch (err) {
|
|
2567
|
+
console.error(`[AXPHookService] Hook '${key}' failed`, err);
|
|
2568
|
+
}
|
|
2569
|
+
});
|
|
2570
|
+
});
|
|
1920
2571
|
}
|
|
1921
2572
|
/**
|
|
1922
|
-
*
|
|
2573
|
+
* Run async hooks sequentially (waterfall).
|
|
2574
|
+
* The output of each hook is passed as input to the next hook.
|
|
2575
|
+
* Returns the final merged data after all hooks are executed.
|
|
1923
2576
|
*/
|
|
1924
|
-
async
|
|
1925
|
-
await this.
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
static { this.ɵ
|
|
2577
|
+
async runAsync(key, initialData) {
|
|
2578
|
+
const providers = (await this.resolveProviders())
|
|
2579
|
+
.filter(p => p.key === key)
|
|
2580
|
+
.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));
|
|
2581
|
+
let data = initialData;
|
|
2582
|
+
for (const p of providers) {
|
|
2583
|
+
data = await Promise.resolve(runInInjectionContext(this.injector, () => p.execute(data)));
|
|
2584
|
+
}
|
|
2585
|
+
return data;
|
|
2586
|
+
}
|
|
2587
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPHookService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2588
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPHookService, providedIn: 'root' }); }
|
|
1935
2589
|
}
|
|
1936
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.
|
|
2590
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPHookService, decorators: [{
|
|
1937
2591
|
type: Injectable,
|
|
1938
|
-
args: [{
|
|
1939
|
-
providedIn: 'root',
|
|
1940
|
-
}]
|
|
1941
|
-
}] });
|
|
1942
|
-
|
|
1943
|
-
/**
|
|
1944
|
-
* Example implementation of a distributed event listener provider.
|
|
1945
|
-
* This is just a sample to show how to implement the interface.
|
|
1946
|
-
*/
|
|
1947
|
-
class ExampleEventListenerProvider {
|
|
1948
|
-
constructor() {
|
|
1949
|
-
this.key = 'example.event';
|
|
1950
|
-
}
|
|
1951
|
-
async execute(data) {
|
|
1952
|
-
console.log('Example event received:', data);
|
|
1953
|
-
// Your implementation here
|
|
1954
|
-
// For example:
|
|
1955
|
-
// - Log the event
|
|
1956
|
-
// - Update cache
|
|
1957
|
-
// - Send notifications
|
|
1958
|
-
// - Call external APIs
|
|
1959
|
-
// - Update UI state
|
|
1960
|
-
// Simulate async work
|
|
1961
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
1962
|
-
console.log('Example event processed successfully');
|
|
1963
|
-
}
|
|
1964
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ExampleEventListenerProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1965
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ExampleEventListenerProvider }); }
|
|
1966
|
-
}
|
|
1967
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ExampleEventListenerProvider, decorators: [{
|
|
1968
|
-
type: Injectable
|
|
2592
|
+
args: [{ providedIn: 'root' }]
|
|
1969
2593
|
}] });
|
|
1970
2594
|
|
|
1971
2595
|
/**
|
|
1972
2596
|
* Generated bundle index. Do not edit.
|
|
1973
2597
|
*/
|
|
1974
2598
|
|
|
1975
|
-
export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPComponentLogoConfig, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDistributedEventListenerService, AXPElementDataDirective,
|
|
2599
|
+
export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPComponentLogoConfig, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExportTemplateToken, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPGridLayoutDirective, AXPHookService, AXPImageUrlLogoConfig, AXPPlatformScope, AXPSystemActionType, AXPSystemActions, AXP_ACTIVITY_LOG_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, cleanDeep, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getSmart, getSystemActions, objectKeyValueTransforms, resolveActionLook, resolvePlatformScopeKey, resolvePlatformScopeName, setSmart };
|
|
1976
2600
|
//# sourceMappingURL=acorex-platform-core.mjs.map
|