@acorex-platform/framework-client 0.0.57 → 0.0.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-framework-client-common.mjs +31 -33
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-core.mjs +157 -2
- package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +55 -19
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CyZpdazq.mjs} +6 -6
- package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs.map → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CyZpdazq.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs +639 -212
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +34 -18
- package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Cmzwhmjw.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BBuYugjl.mjs} +312 -160
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BBuYugjl.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-K9HAtqL6.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-DZDf_nVq.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-K9HAtqL6.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-DZDf_nVq.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-BZECKfez.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-CFFv3jDs.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-BZECKfez.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-CFFv3jDs.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-BuDpC58x.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-BDNPJg_6.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-BuDpC58x.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-BDNPJg_6.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +59 -3
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D5pndfBW.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-Rv0K9r_e.mjs} +226 -137
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-Rv0K9r_e.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs → acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-DqJIiEyu.mjs} +9 -3
- package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-DqJIiEyu.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BFgrSnfT.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Dzqn3rGa.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BFgrSnfT.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Dzqn3rGa.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Ctjz1PjP.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-C97rrrmu.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Ctjz1PjP.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-C97rrrmu.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.mjs → acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-C-r7txgg.mjs} +21 -17
- package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-C-r7txgg.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +48 -9
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-workflow.mjs +47 -1
- package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-platform-framework-client-common.d.ts +2 -3
- package/types/acorex-platform-framework-client-core.d.ts +67 -2
- package/types/acorex-platform-framework-client-layout-builder.d.ts +4 -3
- package/types/acorex-platform-framework-client-layout-components.d.ts +119 -7
- package/types/acorex-platform-framework-client-layout-designer.d.ts +2 -0
- package/types/acorex-platform-framework-client-layout-entity.d.ts +33 -9
- package/types/acorex-platform-framework-client-layout-widget-core.d.ts +14 -1
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +6 -0
- package/types/acorex-platform-framework-client-workflow.d.ts +29 -2
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Cmzwhmjw.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D5pndfBW.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.mjs.map +0 -1
|
@@ -7,11 +7,11 @@ import * as i4$3 from '@acorex-platform/framework-client/common';
|
|
|
7
7
|
import { AXPNotFoundError, AXPMenuRouteAccessService, AXPSettingsService, AXPCommonSettings, resolveEntityCreateListBehavior, platformErrorI18nKey, extractRequestErrorInfo, axpNavigateAppPath, AXPFileTypeProviderService, AXPFileStorageService, resolveFileTypeDisplay, resolveEntityRowDisplayTitle, resolveEntityModifyPopupTitle, commandMessageTextForError, resolveStoredImageDisplayUrl, isStoredImageFileId, AXPFilterOperatorMiddlewareService, AXP_ENTITY_LIST_DISPLAY_MODE_DEFAULT, ENTITY_LIST_DEFAULT_INSTANCE_ID, axpNormalizeEntityListInstanceId, axpGetEntityListInstanceIdFromParamMap, axpRedirectToNotFound, CONTAINS_OPER, toExecuteCommandFailureResult, AXPLocalEntityEngine, AXPLocalEntityRealtimeBridge, AXP_LOCAL_ENTITY_DEFAULT_MAX_ITEMS, resolveSearchableText, evaluateEntityDisplayTemplate, AXPCleanNestedFilters, AXPEntityDetailsNavTrailService, axpComposeEntityDetailsNavTrail, axpIsEntityRecordNotFound, coerceAXPSettingRawValueByKind, AXPDefaultMultiLanguageConfigService, withDefaultMultiLanguageOnWidgetNodeTree, axpIsEntityListPath, axpIsEntityDetailsPath, axpParseEntityListRoute, axpParseEntityDetailsRoute, axpSaveEntityListReturnUrl, AXPMenuRouteGuard, AXP_NOT_FOUND_ROUTE, AXP_PROTECTED_ROUTE_GUARDS, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_DEFINITION_LAZY_RESOLVER } from '@acorex-platform/framework-client/common';
|
|
8
8
|
import { AXPWidgetsCatalog, runtimeCommandPayloadData, createRandomUuid, AXPRequestError, runtimeQueryPayloadData, runtimeQueryCollectionData, runtimeQueryFailure, runtimeQuerySuccessObject, runtimeCommandFailure, runtimeCommandSuccessObject, resolveActionLook, listThemeSurfaceClasses, parseRuntimeHexSurface, AXP_THEME_SURFACE_STYLES, AXPWidgetsList, AXPSystemActionType, coerceFilterDisplayText, AXPPlatformScope, flattenQueryFilterUserGroups, AXP_QUERY_QUICK_SEARCH_FIELD, wrapQueryFilterRoot, isPersistableFilterQuery, isCompleteFilterCondition, resolveFilterQueryIdentityField, extractValue, setSmart, getChangedPaths, isSelectionValueEqual, toAxpGridItemWidgetOptions, runtimeQuerySuccessCollection } from '@acorex-platform/framework-shared/core';
|
|
9
9
|
import { AXPDeviceService, AXPExpressionEvaluatorService, AXPEntityBroadcastService, AXPHookService, AXPDebugService, AXPDataGenerator, AXPContextEvalFactory, ensureRuntimeSurfaceClass, applyFilterArray, createCommandExpressionScope, toExpressionRecord, AXPDistributedEventListenerService, applySortArray, AXHighlightService, AXPColumnWidthService, objectKeyValueTransforms, setupPopupFooterKeyboardShortcuts, AXPContextStore, AXPModuleManifestRegistry, provideAppStartUpTask, AXP_APP_STARTUP_PRIORITY, defaultColumnWidthProvider, AXP_COLUMN_WIDTH_PROVIDER } from '@acorex-platform/framework-client/core';
|
|
10
|
+
import { AXPLayoutBuilderService, AXPDialogOpener, LayoutBuilderModule } from '@acorex-platform/framework-client/layout/builder';
|
|
10
11
|
import * as i0 from '@angular/core';
|
|
11
12
|
import { InjectionToken, inject, Injector, runInInjectionContext, Injectable, signal, output, input, computed, effect, ChangeDetectionStrategy, Component, viewChild, untracked, HostBinding, model, ViewEncapsulation, ElementRef, EnvironmentInjector, NgModule, ChangeDetectorRef, Input, afterNextRender, viewChildren, linkedSignal, DestroyRef, makeEnvironmentProviders } from '@angular/core';
|
|
12
13
|
import { cloneDeep, merge, get, isNil, set, isArray, isString, castArray, has, isPlainObject, orderBy, defaultTo, isEmpty, isEqual, isObjectLike } from 'lodash-es';
|
|
13
14
|
import { Subject, filter, takeUntil, map, distinctUntilChanged, fromEvent, auditTime, merge as merge$1 } from 'rxjs';
|
|
14
|
-
import { AXPLayoutBuilderService, LayoutBuilderModule } from '@acorex-platform/framework-client/layout/builder';
|
|
15
15
|
import { AXPSessionService } from '@acorex-platform/framework-client/auth';
|
|
16
16
|
import { Router, NavigationStart, ActivatedRoute, ROUTES } from '@angular/router';
|
|
17
17
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
@@ -140,12 +140,17 @@ function ensureLayoutPropertyView(layout, prop) {
|
|
|
140
140
|
|
|
141
141
|
const AXP_ENTITY_ACTION_PLUGIN = new InjectionToken('AXP_ENTITY_ACTION_PLUGIN');
|
|
142
142
|
|
|
143
|
+
const pluginSlots = new WeakMap();
|
|
144
|
+
function getModifierPluginSlots(context) {
|
|
145
|
+
return pluginSlots.get(context) ?? [];
|
|
146
|
+
}
|
|
143
147
|
function ensureMaster(entity) {
|
|
144
148
|
entity.interfaces ??= {};
|
|
145
149
|
entity.interfaces.master ??= {};
|
|
146
150
|
return entity.interfaces.master;
|
|
147
151
|
}
|
|
148
152
|
function createModifierContext(entity) {
|
|
153
|
+
const slots = (entity.plugins ?? []).map((ref) => ({ ref, revoked: false }));
|
|
149
154
|
const ctx = {
|
|
150
155
|
entity,
|
|
151
156
|
plugins: {
|
|
@@ -156,16 +161,36 @@ function createModifierContext(entity) {
|
|
|
156
161
|
return ctx;
|
|
157
162
|
},
|
|
158
163
|
remove: (predicate) => {
|
|
159
|
-
if (entity.plugins)
|
|
160
|
-
|
|
164
|
+
if (!entity.plugins) {
|
|
165
|
+
return ctx;
|
|
166
|
+
}
|
|
167
|
+
const removed = new Set(entity.plugins.filter((plugin) => predicate(plugin)));
|
|
168
|
+
for (const slot of slots) {
|
|
169
|
+
if (removed.has(slot.ref)) {
|
|
170
|
+
slot.revoked = true;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
entity.plugins = entity.plugins.filter((plugin) => !removed.has(plugin));
|
|
161
174
|
return ctx;
|
|
162
175
|
},
|
|
163
176
|
find: (name) => ({
|
|
164
|
-
get: () => entity.plugins?.find((
|
|
177
|
+
get: () => entity.plugins?.find((plugin) => plugin.name === name),
|
|
165
178
|
update: (updater) => {
|
|
166
|
-
const
|
|
167
|
-
if (
|
|
168
|
-
|
|
179
|
+
const plugins = entity.plugins;
|
|
180
|
+
if (!plugins) {
|
|
181
|
+
return ctx;
|
|
182
|
+
}
|
|
183
|
+
const index = plugins.findIndex((plugin) => plugin.name === name);
|
|
184
|
+
if (index === -1) {
|
|
185
|
+
return ctx;
|
|
186
|
+
}
|
|
187
|
+
const previous = plugins[index];
|
|
188
|
+
const next = updater(previous);
|
|
189
|
+
plugins[index] = next;
|
|
190
|
+
const slot = slots.find((candidate) => candidate.ref === previous);
|
|
191
|
+
if (slot) {
|
|
192
|
+
slot.ref = next;
|
|
193
|
+
}
|
|
169
194
|
return ctx;
|
|
170
195
|
},
|
|
171
196
|
}),
|
|
@@ -389,6 +414,7 @@ function createModifierContext(entity) {
|
|
|
389
414
|
},
|
|
390
415
|
toEntity: () => entity,
|
|
391
416
|
};
|
|
417
|
+
pluginSlots.set(ctx, slots);
|
|
392
418
|
return ctx;
|
|
393
419
|
}
|
|
394
420
|
|
|
@@ -439,13 +465,14 @@ class AXPEntityMiddleware {
|
|
|
439
465
|
steps.push(this.createModifierStep(entry, context));
|
|
440
466
|
}
|
|
441
467
|
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
468
|
+
// Queue one step per plugin entry already on the entity. A modifier that runs
|
|
469
|
+
// earlier can revoke that entry through plugins.remove; apply then no-ops.
|
|
470
|
+
// Matching by object identity keeps multi-instance plugins (same name, different
|
|
471
|
+
// options) independent.
|
|
472
|
+
for (const slot of getModifierPluginSlots(context)) {
|
|
473
|
+
const contrib = this.providedActionPlugins.find((plugin) => plugin.name === slot.ref.name);
|
|
445
474
|
if (contrib) {
|
|
446
|
-
|
|
447
|
-
// plugins that share a name (e.g. several `status` plugins on one entity).
|
|
448
|
-
steps.push(this.createPluginStep(contrib, pluginRef.options, context));
|
|
475
|
+
steps.push(this.createPluginStep(contrib, slot, context));
|
|
449
476
|
}
|
|
450
477
|
}
|
|
451
478
|
const sorted = steps.sort((a, b) => a.order - b.order);
|
|
@@ -467,11 +494,14 @@ class AXPEntityMiddleware {
|
|
|
467
494
|
run: () => entry.modifier(context),
|
|
468
495
|
};
|
|
469
496
|
}
|
|
470
|
-
createPluginStep(contrib,
|
|
497
|
+
createPluginStep(contrib, slot, context) {
|
|
471
498
|
return {
|
|
472
499
|
order: contrib.order ?? 0,
|
|
473
500
|
run: async () => {
|
|
474
|
-
|
|
501
|
+
if (slot.revoked) {
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
await contrib.apply(context, slot.ref.options);
|
|
475
505
|
},
|
|
476
506
|
};
|
|
477
507
|
}
|
|
@@ -1228,7 +1258,7 @@ class PropertyFilter {
|
|
|
1228
1258
|
const dialog = await this.buildDialog({});
|
|
1229
1259
|
return dialog.build();
|
|
1230
1260
|
}
|
|
1231
|
-
async show() {
|
|
1261
|
+
async show(options) {
|
|
1232
1262
|
// Context: always load by key when we have a record id (authoritative full row), then merge any
|
|
1233
1263
|
// caller/list row context. Skipping fetch when initialContext was non-empty left dialogs without
|
|
1234
1264
|
// fields not present on the passed row (e.g. Entity:View single() with partial list payload).
|
|
@@ -1260,7 +1290,7 @@ class PropertyFilter {
|
|
|
1260
1290
|
}
|
|
1261
1291
|
const dialog = await this.buildDialog(effectiveContext);
|
|
1262
1292
|
dialog.setContext(effectiveContext);
|
|
1263
|
-
return await dialog.show();
|
|
1293
|
+
return await dialog.show(options);
|
|
1264
1294
|
}
|
|
1265
1295
|
/**
|
|
1266
1296
|
* Resolves property `schema.defaultValue` expressions (e.g. `settings.get(...)`)
|
|
@@ -2492,9 +2522,31 @@ class AXPCreateEntityCommand {
|
|
|
2492
2522
|
this.settingsService = inject(AXPSettingsService);
|
|
2493
2523
|
this.openEntityDetailsCommand = inject(AXPOpenEntityDetailsCommand);
|
|
2494
2524
|
this.entityEvents = inject(AXPEntityBroadcastService);
|
|
2525
|
+
this.dialogOpener = inject(AXPDialogOpener);
|
|
2495
2526
|
this.context = {};
|
|
2527
|
+
this.loadCreateDialogRenderer = () => import('@acorex-platform/framework-client/layout/builder').then((module) => module.AXPDialogRendererComponent);
|
|
2496
2528
|
}
|
|
2497
2529
|
async execute(input = {}) {
|
|
2530
|
+
const outcome = await this.dialogOpener.run({
|
|
2531
|
+
load: this.loadCreateDialogRenderer,
|
|
2532
|
+
data: this.createDialogOpenData(input),
|
|
2533
|
+
present: (notifyShown) => this.presentCreateDialog(input, notifyShown),
|
|
2534
|
+
});
|
|
2535
|
+
if (outcome.duplicate) {
|
|
2536
|
+
return { success: false };
|
|
2537
|
+
}
|
|
2538
|
+
return outcome.result;
|
|
2539
|
+
}
|
|
2540
|
+
createDialogOpenData(input) {
|
|
2541
|
+
const resolved = resolveEntityActionCommandInput(input);
|
|
2542
|
+
return {
|
|
2543
|
+
entity: resolved.entity ?? '',
|
|
2544
|
+
dialogSize: input.dialogSize ?? null,
|
|
2545
|
+
data: resolved.data ?? null,
|
|
2546
|
+
options: resolved.options ?? null,
|
|
2547
|
+
};
|
|
2548
|
+
}
|
|
2549
|
+
async presentCreateDialog(input = {}, notifyShown) {
|
|
2498
2550
|
const enableOperationToasts = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);
|
|
2499
2551
|
const dialogSize = input.dialogSize;
|
|
2500
2552
|
const resolved = resolveEntityActionCommandInput(input);
|
|
@@ -2622,7 +2674,7 @@ class AXPCreateEntityCommand {
|
|
|
2622
2674
|
dialogRef.setLoading(false);
|
|
2623
2675
|
}
|
|
2624
2676
|
})
|
|
2625
|
-
.show();
|
|
2677
|
+
.show({ onShown: notifyShown });
|
|
2626
2678
|
const commandResult = result;
|
|
2627
2679
|
if (commandResult.success && commandResult.data) {
|
|
2628
2680
|
const createdItem = commandResult.data?.item ?? commandResult.data;
|
|
@@ -5751,6 +5803,7 @@ class AXPFileUploaderWidgetService {
|
|
|
5751
5803
|
constructor() {
|
|
5752
5804
|
//#region ---- Services & Dependencies ----
|
|
5753
5805
|
this.popupService = inject(AXPopupService);
|
|
5806
|
+
this.dialogOpener = inject(AXPDialogOpener);
|
|
5754
5807
|
this.translate = inject(AXTranslationService);
|
|
5755
5808
|
this.commandExecutor = inject(AXPCommandExecutor);
|
|
5756
5809
|
this.queryExecutor = inject(AXPQueryExecutor);
|
|
@@ -5779,20 +5832,32 @@ class AXPFileUploaderWidgetService {
|
|
|
5779
5832
|
plugins: options?.plugins ?? [],
|
|
5780
5833
|
editDialog: options?.editDialog,
|
|
5781
5834
|
};
|
|
5782
|
-
|
|
5783
|
-
const result = await this.
|
|
5784
|
-
|
|
5835
|
+
let title = '';
|
|
5836
|
+
const result = await this.dialogOpener.openPopup({
|
|
5837
|
+
load: () => import('./acorex-platform-framework-client-layout-entity-file-list-popup.component-C0LgUzzv.mjs').then((m) => m.AXPFileListPopupComponent),
|
|
5785
5838
|
data: {
|
|
5786
|
-
|
|
5787
|
-
|
|
5788
|
-
multiple:
|
|
5789
|
-
accept:
|
|
5790
|
-
|
|
5791
|
-
|
|
5792
|
-
|
|
5793
|
-
plugins: signal(resolved.plugins),
|
|
5794
|
-
editDialog: signal(resolved.editDialog),
|
|
5839
|
+
entity: entity ?? null,
|
|
5840
|
+
readonly: resolved.readonly,
|
|
5841
|
+
multiple: resolved.multiple,
|
|
5842
|
+
accept: resolved.accept,
|
|
5843
|
+
},
|
|
5844
|
+
prepare: async () => {
|
|
5845
|
+
title = await this.translate.translateAsync('@document-management:terms.common.file');
|
|
5795
5846
|
},
|
|
5847
|
+
show: (component) => this.popupService.open(component, {
|
|
5848
|
+
title,
|
|
5849
|
+
data: {
|
|
5850
|
+
files: signal(resolved.files),
|
|
5851
|
+
isReadonly: signal(resolved.readonly),
|
|
5852
|
+
multiple: signal(resolved.multiple),
|
|
5853
|
+
accept: signal(resolved.accept),
|
|
5854
|
+
maxFileSize: signal(resolved.maxFileSize),
|
|
5855
|
+
fileEditable: signal(resolved.fileEditable),
|
|
5856
|
+
showAddItemButton: signal(resolved.showAddItemButton),
|
|
5857
|
+
plugins: signal(resolved.plugins),
|
|
5858
|
+
editDialog: signal(resolved.editDialog),
|
|
5859
|
+
},
|
|
5860
|
+
}),
|
|
5796
5861
|
});
|
|
5797
5862
|
const updatedFiles = result?.data?.data?.files;
|
|
5798
5863
|
if (!updatedFiles) {
|
|
@@ -8619,13 +8684,14 @@ const PLUGIN_SLOT_SPAN = 10_000;
|
|
|
8619
8684
|
const SUB_ORDER_STEP = 10;
|
|
8620
8685
|
const PLUGIN_SLOT_INDEX = {
|
|
8621
8686
|
'meta-data-builder': 0,
|
|
8622
|
-
|
|
8623
|
-
|
|
8624
|
-
|
|
8625
|
-
|
|
8626
|
-
|
|
8627
|
-
|
|
8628
|
-
|
|
8687
|
+
'meta-data-form': 1,
|
|
8688
|
+
attachments: 2,
|
|
8689
|
+
gallery: 3,
|
|
8690
|
+
documents: 4,
|
|
8691
|
+
comments: 5,
|
|
8692
|
+
dashboard: 6,
|
|
8693
|
+
reports: 7,
|
|
8694
|
+
history: 8,
|
|
8629
8695
|
};
|
|
8630
8696
|
//#endregion
|
|
8631
8697
|
//#region ---- Helpers ----
|
|
@@ -8669,7 +8735,7 @@ function normalizeRelatedPageListDetailOrders(relatedEntities, step) {
|
|
|
8669
8735
|
return afterMax;
|
|
8670
8736
|
}
|
|
8671
8737
|
/**
|
|
8672
|
-
* Ordinal within a slot for multi-field pages (attachments, meta-data-builder), stable by field name.
|
|
8738
|
+
* Ordinal within a slot for multi-field pages (attachments, meta-data-builder, meta-data-form), stable by field name.
|
|
8673
8739
|
*/
|
|
8674
8740
|
function subOrderWithinComponentSlot(pages, componentKey, skip, currentField) {
|
|
8675
8741
|
const peerFieldKeys = (pages ?? [])
|
|
@@ -8688,8 +8754,8 @@ function subOrderWithinComponentSlot(pages, componentKey, skip, currentField) {
|
|
|
8688
8754
|
*
|
|
8689
8755
|
* 1. Assigns finite `layout.order` values to related `page-list` / `page-detail` rows that omit
|
|
8690
8756
|
* `order` (the composer otherwise treats them as +Infinity).
|
|
8691
|
-
* 2. Places plugin tabs in a fixed relative order: meta-data-builder →
|
|
8692
|
-
* documents → comments → dashboard → reports → history, after all related tabs.
|
|
8757
|
+
* 2. Places plugin tabs in a fixed relative order: meta-data-builder → meta-data-form → attachments →
|
|
8758
|
+
* gallery → documents → comments → dashboard → reports → history, after all related tabs.
|
|
8693
8759
|
*/
|
|
8694
8760
|
function resolveEntityPluginDetailPageOrder(input, slot, options) {
|
|
8695
8761
|
const relatedStep = options.relatedOrderStep ?? DEFAULT_RELATED_ORDER_STEP;
|
|
@@ -14000,7 +14066,7 @@ class AXMAttachmentsPageComponentProvider {
|
|
|
14000
14066
|
return [
|
|
14001
14067
|
{
|
|
14002
14068
|
key: ATTACHMENTS_PAGE_COMPONENT_KEY,
|
|
14003
|
-
loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-
|
|
14069
|
+
loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-DZDf_nVq.mjs').then((m) => m.AXMAttachmentsPageComponent),
|
|
14004
14070
|
},
|
|
14005
14071
|
];
|
|
14006
14072
|
}
|
|
@@ -14537,7 +14603,7 @@ class AXMGalleryPageComponentProvider {
|
|
|
14537
14603
|
return [
|
|
14538
14604
|
{
|
|
14539
14605
|
key: GALLERY_PAGE_COMPONENT_KEY,
|
|
14540
|
-
loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-
|
|
14606
|
+
loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-BDNPJg_6.mjs').then((m) => m.AXMGalleryPageComponent),
|
|
14541
14607
|
},
|
|
14542
14608
|
];
|
|
14543
14609
|
}
|
|
@@ -17597,6 +17663,7 @@ class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
17597
17663
|
//#region ---- Services & Dependencies ----
|
|
17598
17664
|
this.entityResolver = inject(AXPEntityDefinitionRegistryService);
|
|
17599
17665
|
this.popupService = inject(AXPopupService);
|
|
17666
|
+
this.dialogOpener = inject(AXPDialogOpener);
|
|
17600
17667
|
this.translateService = inject(AXTranslationService);
|
|
17601
17668
|
this.cdr = inject(ChangeDetectorRef);
|
|
17602
17669
|
//#endregion
|
|
@@ -17770,6 +17837,9 @@ class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
17770
17837
|
this.searchTerm.set('');
|
|
17771
17838
|
}
|
|
17772
17839
|
async showTreeSelector() {
|
|
17840
|
+
if (this.isOpen()) {
|
|
17841
|
+
return;
|
|
17842
|
+
}
|
|
17773
17843
|
this.isOpen.set(true);
|
|
17774
17844
|
const currentValue = this.getValue();
|
|
17775
17845
|
const selectedIds = currentValue
|
|
@@ -17778,20 +17848,32 @@ class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
17778
17848
|
// Get current entity ID from context (if editing an entity)
|
|
17779
17849
|
const currentEntityId = this.contextService.getValue('id');
|
|
17780
17850
|
const excludedNodeId = currentEntityId ? String(currentEntityId) : undefined;
|
|
17851
|
+
let title = '';
|
|
17781
17852
|
try {
|
|
17782
|
-
const result = await this.
|
|
17783
|
-
|
|
17784
|
-
size: 'md',
|
|
17853
|
+
const result = await this.dialogOpener.openPopup({
|
|
17854
|
+
load: () => Promise.resolve(AXPEntityCategoryTreeSelectorComponent),
|
|
17785
17855
|
data: {
|
|
17786
|
-
|
|
17787
|
-
|
|
17788
|
-
|
|
17789
|
-
allowMultiple: signal(this.multiple()),
|
|
17790
|
-
selectedValues: signal(selectedIds),
|
|
17791
|
-
searchPlaceholder: signal(this.searchPlaceholderText()),
|
|
17792
|
-
excludedNodeId: signal(excludedNodeId),
|
|
17793
|
-
selectedValuesInput: signal(selectedIds),
|
|
17856
|
+
entity: this.entity(),
|
|
17857
|
+
multiple: this.multiple(),
|
|
17858
|
+
selectedIds,
|
|
17794
17859
|
},
|
|
17860
|
+
prepare: () => {
|
|
17861
|
+
title = `${this.translateService.translateSync('@general:widgets.lookup.search.placeholder')} ${this.translateService.translateSync(this.entityDef()?.formats.plural ?? '')}`;
|
|
17862
|
+
},
|
|
17863
|
+
show: (component) => this.popupService.open(component, {
|
|
17864
|
+
title,
|
|
17865
|
+
size: 'md',
|
|
17866
|
+
data: {
|
|
17867
|
+
entityKey: signal(this.entity()),
|
|
17868
|
+
textField: signal(this.textField()),
|
|
17869
|
+
valueField: signal(this.valueField()),
|
|
17870
|
+
allowMultiple: signal(this.multiple()),
|
|
17871
|
+
selectedValues: signal(selectedIds),
|
|
17872
|
+
searchPlaceholder: signal(this.searchPlaceholderText()),
|
|
17873
|
+
excludedNodeId: signal(excludedNodeId),
|
|
17874
|
+
selectedValuesInput: signal(selectedIds),
|
|
17875
|
+
},
|
|
17876
|
+
}),
|
|
17795
17877
|
});
|
|
17796
17878
|
if (result?.data?.selected && Array.isArray(result.data.selected)) {
|
|
17797
17879
|
const newItems = this.multiple() ? result.data.selected : result.data.selected.slice(0, 1);
|
|
@@ -19041,12 +19123,14 @@ class AXPEntityListToolbarService {
|
|
|
19041
19123
|
* Convert Entity to Toolbar Options
|
|
19042
19124
|
*/
|
|
19043
19125
|
async convertEntityToolbarOptions(entity, options) {
|
|
19044
|
-
const
|
|
19126
|
+
const columnScope = this.resolveColumnScope(options);
|
|
19127
|
+
const baseFilters = this.scopeFiltersToColumns(await this.createFilterDefinitions(entity), columnScope);
|
|
19128
|
+
const sortDefinitions = this.scopeSortsToColumns(await this.createSortDefinitions(entity), columnScope);
|
|
19045
19129
|
const toolbarOptions = {
|
|
19046
19130
|
filterDefinitions: this.mergeFilterDefinitions(baseFilters, options?.customFilterDefinitions),
|
|
19047
19131
|
columnDefinitions: this.createColumnDefinitions(entity, options),
|
|
19048
|
-
sortDefinitions
|
|
19049
|
-
sortPresets: collectEntityListSortPresets(entity),
|
|
19132
|
+
sortDefinitions,
|
|
19133
|
+
sortPresets: this.scopeSortPresetsToColumns(collectEntityListSortPresets(entity), columnScope),
|
|
19050
19134
|
canFilter: true,
|
|
19051
19135
|
canColumns: true,
|
|
19052
19136
|
canSort: true,
|
|
@@ -19179,6 +19263,62 @@ class AXPEntityListToolbarService {
|
|
|
19179
19263
|
title: field.title,
|
|
19180
19264
|
}));
|
|
19181
19265
|
}
|
|
19266
|
+
/**
|
|
19267
|
+
* Related lists pass `includeColumns` / `relatedTableColumns` so the grid only shows chosen columns.
|
|
19268
|
+
* Filters and sorts must use that same set. An empty include means the full entity list (master lists).
|
|
19269
|
+
*/
|
|
19270
|
+
resolveColumnScope(options) {
|
|
19271
|
+
const includeFromOptions = (options?.includeColumns ?? []).filter((name) => name.length > 0);
|
|
19272
|
+
const includeFromRelated = (options?.relatedTableColumns ?? []).map((column) => column.name).filter((name) => name.length > 0);
|
|
19273
|
+
const include = includeFromOptions.length > 0 ? includeFromOptions : includeFromRelated;
|
|
19274
|
+
return {
|
|
19275
|
+
include,
|
|
19276
|
+
exclude: (options?.excludeColumns ?? []).filter((name) => name.length > 0),
|
|
19277
|
+
};
|
|
19278
|
+
}
|
|
19279
|
+
scopeFiltersToColumns(filters, scope) {
|
|
19280
|
+
if (!this.hasColumnScope(scope)) {
|
|
19281
|
+
return filters;
|
|
19282
|
+
}
|
|
19283
|
+
return filters.filter((filter) => this.isFieldInColumnScope(this.filterMatchKeys(filter), scope));
|
|
19284
|
+
}
|
|
19285
|
+
scopeSortsToColumns(sorts, scope) {
|
|
19286
|
+
if (!this.hasColumnScope(scope)) {
|
|
19287
|
+
return sorts;
|
|
19288
|
+
}
|
|
19289
|
+
return sorts.filter((sort) => this.isFieldInColumnScope([sort.name], scope));
|
|
19290
|
+
}
|
|
19291
|
+
scopeSortPresetsToColumns(presets, scope) {
|
|
19292
|
+
if (!this.hasColumnScope(scope)) {
|
|
19293
|
+
return presets;
|
|
19294
|
+
}
|
|
19295
|
+
return presets.filter((preset) => preset.sorts.every((sort) => this.isFieldInColumnScope([sort.name], scope)));
|
|
19296
|
+
}
|
|
19297
|
+
hasColumnScope(scope) {
|
|
19298
|
+
return scope.include.length > 0 || scope.exclude.length > 0;
|
|
19299
|
+
}
|
|
19300
|
+
filterMatchKeys(filter) {
|
|
19301
|
+
const keys = [filter.field, filter.inlineQueryField]
|
|
19302
|
+
.filter((value) => typeof value === 'string' && value.length > 0);
|
|
19303
|
+
return [...new Set(keys)];
|
|
19304
|
+
}
|
|
19305
|
+
isFieldInColumnScope(fields, scope) {
|
|
19306
|
+
if (fields.some((field) => scope.exclude.some((column) => this.fieldMatchesColumn(field, column)))) {
|
|
19307
|
+
return false;
|
|
19308
|
+
}
|
|
19309
|
+
if (scope.include.length === 0) {
|
|
19310
|
+
return true;
|
|
19311
|
+
}
|
|
19312
|
+
return fields.some((field) => scope.include.some((column) => this.fieldMatchesColumn(field, column)));
|
|
19313
|
+
}
|
|
19314
|
+
/**
|
|
19315
|
+
* Exact name, or a column that is a display path of the filter property
|
|
19316
|
+
* (`person.displayName` covers filter field `person`). Nested filters such as
|
|
19317
|
+
* `person.firstName` stay hidden unless that path is itself a listed column.
|
|
19318
|
+
*/
|
|
19319
|
+
fieldMatchesColumn(field, columnName) {
|
|
19320
|
+
return field === columnName || columnName.startsWith(`${field}.`);
|
|
19321
|
+
}
|
|
19182
19322
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityListToolbarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
19183
19323
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityListToolbarService }); }
|
|
19184
19324
|
}
|
|
@@ -25951,11 +26091,11 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
25951
26091
|
return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value) || /^\d+$/.test(value);
|
|
25952
26092
|
}
|
|
25953
26093
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25954
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetColumnComponent, isStandalone: true, selector: "ng-component", inputs: { rawValue: "rawValue", rowData: "rowData" }, viewQueries: [{ propertyName: "moreButton", first: true, predicate: ["moreButton"], descendants: true, isSignal: true }, { propertyName: "lazyTrigger", first: true, predicate: ["lazyTrigger"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (isHydratedStrategy()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handleItemClick($index, $event)\"\n >\n {{ getItemLabel($index) }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"text-muted\">\u2022</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n @if (hasMoreItems()) {\n <span\n class=\"absolute end-0 flex h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems(); $event.stopPropagation()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"flex min-w-0 items-center gap-1\">\n @if (displayCount() > 0) {\n <span\n class=\"cursor-pointer text-primary hover:underline\"\n (click)=\"openLazyPopover(); $event.stopPropagation()\"\n #lazyTrigger\n >\n {{ summaryLabel() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[280px] rounded-lg p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">{{ popoverHeader() }}</h3>\n </div>\n\n @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ resolveError() }}</div>\n } @else {\n <div class=\"flex max-h-64 flex-col gap-3\">\n @for (item of popoverListItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handlePopoverItemClick($index, $event)\"\n >\n {{ getPopoverItemLabel($index) }}\n </span>\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n </div>\n }\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i1$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26094
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetColumnComponent, isStandalone: true, selector: "ng-component", inputs: { rawValue: "rawValue", rowData: "rowData" }, viewQueries: [{ propertyName: "moreButton", first: true, predicate: ["moreButton"], descendants: true, isSignal: true }, { propertyName: "lazyTrigger", first: true, predicate: ["lazyTrigger"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (isHydratedStrategy()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n <span\n class=\"min-w-0 truncate\"\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n [attr.title]=\"getItemLabel($index)\"\n (click)=\"handleItemClick($index, $event)\"\n >\n {{ getItemLabel($index) }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"text-muted\">\u2022</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n @if (hasMoreItems()) {\n <span\n class=\"absolute end-0 flex h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems(); $event.stopPropagation()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"flex min-w-0 items-center gap-1\">\n @if (displayCount() > 0) {\n <span\n class=\"min-w-0 truncate cursor-pointer text-primary hover:underline\"\n [attr.title]=\"summaryLabel()\"\n (click)=\"openLazyPopover(); $event.stopPropagation()\"\n #lazyTrigger\n >\n {{ summaryLabel() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[280px] rounded-lg p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">{{ popoverHeader() }}</h3>\n </div>\n\n @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ resolveError() }}</div>\n } @else {\n <div class=\"flex max-h-64 flex-col gap-3\">\n @for (item of popoverListItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handlePopoverItemClick($index, $event)\"\n >\n {{ getPopoverItemLabel($index) }}\n </span>\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n </div>\n }\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i1$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25955
26095
|
}
|
|
25956
26096
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetColumnComponent, decorators: [{
|
|
25957
26097
|
type: Component,
|
|
25958
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXLoadingModule, AXPopoverModule], inputs: ['rawValue', 'rowData'], template: "@if (isHydratedStrategy()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handleItemClick($index, $event)\"\n >\n {{ getItemLabel($index) }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"text-muted\">\u2022</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n @if (hasMoreItems()) {\n <span\n class=\"absolute end-0 flex h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems(); $event.stopPropagation()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"flex min-w-0 items-center gap-1\">\n @if (displayCount() > 0) {\n <span\n class=\"cursor-pointer text-primary hover:underline\"\n (click)=\"openLazyPopover(); $event.stopPropagation()\"\n #lazyTrigger\n >\n {{ summaryLabel() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[280px] rounded-lg p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">{{ popoverHeader() }}</h3>\n </div>\n\n @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ resolveError() }}</div>\n } @else {\n <div class=\"flex max-h-64 flex-col gap-3\">\n @for (item of popoverListItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handlePopoverItemClick($index, $event)\"\n >\n {{ getPopoverItemLabel($index) }}\n </span>\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n </div>\n }\n </div>\n</ax-popover>\n" }]
|
|
26098
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXLoadingModule, AXPopoverModule], inputs: ['rawValue', 'rowData'], template: "@if (isHydratedStrategy()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n <span\n class=\"min-w-0 truncate\"\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n [attr.title]=\"getItemLabel($index)\"\n (click)=\"handleItemClick($index, $event)\"\n >\n {{ getItemLabel($index) }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"text-muted\">\u2022</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n @if (hasMoreItems()) {\n <span\n class=\"absolute end-0 flex h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems(); $event.stopPropagation()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"flex min-w-0 items-center gap-1\">\n @if (displayCount() > 0) {\n <span\n class=\"min-w-0 truncate cursor-pointer text-primary hover:underline\"\n [attr.title]=\"summaryLabel()\"\n (click)=\"openLazyPopover(); $event.stopPropagation()\"\n #lazyTrigger\n >\n {{ summaryLabel() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[280px] rounded-lg p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">{{ popoverHeader() }}</h3>\n </div>\n\n @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ resolveError() }}</div>\n } @else {\n <div class=\"flex max-h-64 flex-col gap-3\">\n @for (item of popoverListItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handlePopoverItemClick($index, $event)\"\n >\n {{ getPopoverItemLabel($index) }}\n </span>\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n </div>\n }\n </div>\n</ax-popover>\n" }]
|
|
25959
26099
|
}], ctorParameters: () => [], propDecorators: { moreButton: [{ type: i0.ViewChild, args: ['moreButton', { isSignal: true }] }], lazyTrigger: [{ type: i0.ViewChild, args: ['lazyTrigger', { isSignal: true }] }], morePopover: [{ type: i0.ViewChild, args: ['morePopover', { isSignal: true }] }] } });
|
|
25960
26100
|
|
|
25961
26101
|
var lookupWidgetColumn_component = /*#__PURE__*/Object.freeze({
|
|
@@ -26293,6 +26433,7 @@ class AXPMultiSourceSelectorService {
|
|
|
26293
26433
|
constructor() {
|
|
26294
26434
|
//#region ---- Services & Dependencies ----
|
|
26295
26435
|
this.popupService = inject(AXPopupService);
|
|
26436
|
+
this.dialogOpener = inject(AXPDialogOpener);
|
|
26296
26437
|
this.definitionService = inject(AXPMultiSourceDefinitionProviderService);
|
|
26297
26438
|
}
|
|
26298
26439
|
//#endregion
|
|
@@ -26311,13 +26452,20 @@ class AXPMultiSourceSelectorService {
|
|
|
26311
26452
|
* Open selector popup
|
|
26312
26453
|
*/
|
|
26313
26454
|
async open(config) {
|
|
26314
|
-
const
|
|
26315
|
-
|
|
26316
|
-
title: config.title || config.definition.title,
|
|
26317
|
-
size: 'lg',
|
|
26455
|
+
const result = await this.dialogOpener.openPopup({
|
|
26456
|
+
load: () => Promise.resolve().then(function () { return multiSourceSelector_component; }).then((c) => c.AXPMultiSourceSelectorComponent),
|
|
26318
26457
|
data: {
|
|
26319
|
-
|
|
26458
|
+
provider: config.definition.name,
|
|
26459
|
+
title: config.title ?? config.definition.title,
|
|
26460
|
+
multiple: config.multiple,
|
|
26320
26461
|
},
|
|
26462
|
+
show: (component) => this.popupService.open(component, {
|
|
26463
|
+
title: config.title || config.definition.title,
|
|
26464
|
+
size: 'lg',
|
|
26465
|
+
data: {
|
|
26466
|
+
config: signal(config),
|
|
26467
|
+
},
|
|
26468
|
+
}),
|
|
26321
26469
|
});
|
|
26322
26470
|
return result?.data || null;
|
|
26323
26471
|
}
|
|
@@ -27324,11 +27472,11 @@ class AXPSelectorStructureWidgetColumnComponent extends AXPValueWidgetComponent
|
|
|
27324
27472
|
}
|
|
27325
27473
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPSelectorStructureWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
27326
27474
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPSelectorStructureWidgetColumnComponent, isStandalone: true, selector: "axp-selector-structure-widget-column", usesInheritance: true, ngImport: i0, template: `
|
|
27327
|
-
<span class="inline-flex items-center gap-2 text-sm" [title]="cellText()">
|
|
27475
|
+
<span class="inline-flex min-w-0 max-w-full items-center gap-2 text-sm" [title]="cellText()">
|
|
27328
27476
|
@if (previewIcon()) {
|
|
27329
27477
|
<i [class]="previewIcon()" aria-hidden="true"></i>
|
|
27330
27478
|
}
|
|
27331
|
-
<span>{{ cellText() }}</span>
|
|
27479
|
+
<span class="min-w-0 truncate">{{ cellText() }}</span>
|
|
27332
27480
|
</span>
|
|
27333
27481
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27334
27482
|
}
|
|
@@ -27338,11 +27486,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
27338
27486
|
selector: 'axp-selector-structure-widget-column',
|
|
27339
27487
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
27340
27488
|
template: `
|
|
27341
|
-
<span class="inline-flex items-center gap-2 text-sm" [title]="cellText()">
|
|
27489
|
+
<span class="inline-flex min-w-0 max-w-full items-center gap-2 text-sm" [title]="cellText()">
|
|
27342
27490
|
@if (previewIcon()) {
|
|
27343
27491
|
<i [class]="previewIcon()" aria-hidden="true"></i>
|
|
27344
27492
|
}
|
|
27345
|
-
<span>{{ cellText() }}</span>
|
|
27493
|
+
<span class="min-w-0 truncate">{{ cellText() }}</span>
|
|
27346
27494
|
</span>
|
|
27347
27495
|
`,
|
|
27348
27496
|
}]
|
|
@@ -30307,98 +30455,102 @@ class AXPMainEntityContentBuilder {
|
|
|
30307
30455
|
return { section: s, hasProperties: visibleProperties.length > 0, visibleProperties };
|
|
30308
30456
|
})))
|
|
30309
30457
|
.filter((item) => item.hasProperties)
|
|
30310
|
-
.map(({ section: s, visibleProperties }) =>
|
|
30311
|
-
|
|
30312
|
-
|
|
30313
|
-
|
|
30314
|
-
|
|
30315
|
-
|
|
30316
|
-
|
|
30317
|
-
|
|
30318
|
-
|
|
30319
|
-
|
|
30320
|
-
|
|
30321
|
-
|
|
30322
|
-
|
|
30323
|
-
|
|
30324
|
-
|
|
30325
|
-
|
|
30326
|
-
:
|
|
30327
|
-
|
|
30328
|
-
|
|
30329
|
-
|
|
30330
|
-
|
|
30331
|
-
|
|
30332
|
-
|
|
30333
|
-
|
|
30334
|
-
|
|
30335
|
-
|
|
30336
|
-
|
|
30458
|
+
.map(({ section: s, visibleProperties }) => {
|
|
30459
|
+
const sectionLook = s.look ?? 'card';
|
|
30460
|
+
const showSectionChrome = sectionLook !== 'container';
|
|
30461
|
+
return {
|
|
30462
|
+
type: 'grid-item-layout',
|
|
30463
|
+
name: s.id,
|
|
30464
|
+
options: toAxpGridItemWidgetOptions(s.layout),
|
|
30465
|
+
children: [
|
|
30466
|
+
{
|
|
30467
|
+
type: 'fieldset-layout',
|
|
30468
|
+
options: {
|
|
30469
|
+
title: allGroups.find((g) => g.id === s.id)?.title ?? '',
|
|
30470
|
+
icon: allGroups.find((g) => g.id === s.id)?.icon ?? '',
|
|
30471
|
+
collapsible: showSectionChrome,
|
|
30472
|
+
isOpen: !s.collapsed,
|
|
30473
|
+
look: sectionLook,
|
|
30474
|
+
showTitle: showSectionChrome && s.layout?.label?.visible !== false,
|
|
30475
|
+
...(s.layout?.visible != null && String(s.layout.visible).trim() !== ''
|
|
30476
|
+
? { visible: s.layout.visible }
|
|
30477
|
+
: {}),
|
|
30478
|
+
},
|
|
30479
|
+
children: [
|
|
30480
|
+
{
|
|
30481
|
+
type: 'grid-layout',
|
|
30482
|
+
options: {
|
|
30483
|
+
grid: {
|
|
30484
|
+
default: {
|
|
30485
|
+
columns: 12,
|
|
30486
|
+
rows: 1,
|
|
30487
|
+
gap: '20px',
|
|
30488
|
+
},
|
|
30337
30489
|
},
|
|
30338
30490
|
},
|
|
30339
|
-
|
|
30340
|
-
|
|
30341
|
-
|
|
30342
|
-
|
|
30343
|
-
|
|
30344
|
-
|
|
30345
|
-
|
|
30346
|
-
|
|
30347
|
-
|
|
30348
|
-
|
|
30349
|
-
|
|
30350
|
-
|
|
30351
|
-
|
|
30352
|
-
|
|
30353
|
-
|
|
30354
|
-
|
|
30355
|
-
|
|
30356
|
-
|
|
30357
|
-
|
|
30358
|
-
|
|
30359
|
-
|
|
30360
|
-
|
|
30361
|
-
|
|
30362
|
-
|
|
30363
|
-
|
|
30364
|
-
|
|
30365
|
-
|
|
30366
|
-
|
|
30367
|
-
|
|
30368
|
-
|
|
30369
|
-
|
|
30370
|
-
|
|
30371
|
-
...(hintFormFieldOptionsFromDescription(p.description) ?? {}),
|
|
30372
|
-
},
|
|
30373
|
-
children: [
|
|
30374
|
-
{
|
|
30375
|
-
type: interfaceType,
|
|
30376
|
-
path: prefixed,
|
|
30377
|
-
name: prefixed,
|
|
30378
|
-
...(isReadonlyCodeEditor ? { mode: 'view' } : {}),
|
|
30379
|
-
children: p.schema.interface?.children,
|
|
30380
|
-
triggers: p.schema.interface?.triggers,
|
|
30381
|
-
valueTransforms: p.schema.interface?.valueTransforms,
|
|
30382
|
-
options: merge({}, p.schema.interface?.options, {
|
|
30383
|
-
validations: p.validations?.map((c) => ({
|
|
30384
|
-
rule: c.rule,
|
|
30385
|
-
message: c.message,
|
|
30386
|
-
options: c.options,
|
|
30387
|
-
})),
|
|
30388
|
-
// Attach dataPath for merged properties to be available in widgets/options if needed
|
|
30389
|
-
dataPath: p.__dataPath,
|
|
30390
|
-
},
|
|
30391
|
-
// Only set disabled if property doesn't have its own disabled option
|
|
30392
|
-
hasOwnDisabled ? {} : { disabled: !isEditable }),
|
|
30491
|
+
children: visibleProperties.map((p) => {
|
|
30492
|
+
const layout = getPropertyLayout(p.name, p);
|
|
30493
|
+
const viewProp = singleInterface?.properties?.find((vp) => vp.name === p.name);
|
|
30494
|
+
const prefixed = resolveEntityPropertyBindPath(p.name, viewProp?.dataPath, p.__dataPath);
|
|
30495
|
+
// Check if property is editable (exists in update interface)
|
|
30496
|
+
const isEditable = p.__isEditable != null
|
|
30497
|
+
? p.__isEditable
|
|
30498
|
+
: editablePropertyNames.has(p.name);
|
|
30499
|
+
// Check if property has its own disabled option
|
|
30500
|
+
const hasOwnDisabled = p.schema.interface?.options?.disabled !== undefined;
|
|
30501
|
+
let formFieldVisible;
|
|
30502
|
+
const sv = p.schema?.visible;
|
|
30503
|
+
// Template strings are evaluated by `AXPExpressionEvaluatorService` in the widget renderer, not here.
|
|
30504
|
+
if (typeof sv === 'string') {
|
|
30505
|
+
formFieldVisible = sv;
|
|
30506
|
+
}
|
|
30507
|
+
else if (sv === false) {
|
|
30508
|
+
formFieldVisible = false;
|
|
30509
|
+
}
|
|
30510
|
+
const interfaceType = p.schema.interface?.type ?? '';
|
|
30511
|
+
const isReadonlyCodeEditor = interfaceType === 'code-editor' &&
|
|
30512
|
+
(p.schema?.readonly === true ||
|
|
30513
|
+
p.schema.interface?.options?.readOnly === true ||
|
|
30514
|
+
!isEditable);
|
|
30515
|
+
return {
|
|
30516
|
+
type: 'form-field',
|
|
30517
|
+
options: {
|
|
30518
|
+
label: p.title,
|
|
30519
|
+
showLabel: layout?.label?.visible ?? true,
|
|
30520
|
+
...toAxpGridItemWidgetOptions(layout),
|
|
30521
|
+
...(formFieldVisible !== undefined ? { visible: formFieldVisible } : {}),
|
|
30522
|
+
...(hintFormFieldOptionsFromDescription(p.description) ?? {}),
|
|
30393
30523
|
},
|
|
30394
|
-
|
|
30395
|
-
|
|
30396
|
-
|
|
30397
|
-
|
|
30398
|
-
|
|
30399
|
-
|
|
30400
|
-
|
|
30401
|
-
|
|
30524
|
+
children: [
|
|
30525
|
+
{
|
|
30526
|
+
type: interfaceType,
|
|
30527
|
+
path: prefixed,
|
|
30528
|
+
name: prefixed,
|
|
30529
|
+
...(isReadonlyCodeEditor ? { mode: 'view' } : {}),
|
|
30530
|
+
children: p.schema.interface?.children,
|
|
30531
|
+
triggers: p.schema.interface?.triggers,
|
|
30532
|
+
valueTransforms: p.schema.interface?.valueTransforms,
|
|
30533
|
+
options: merge({}, p.schema.interface?.options, {
|
|
30534
|
+
validations: p.validations?.map((c) => ({
|
|
30535
|
+
rule: c.rule,
|
|
30536
|
+
message: c.message,
|
|
30537
|
+
options: c.options,
|
|
30538
|
+
})),
|
|
30539
|
+
// Attach dataPath for merged properties to be available in widgets/options if needed
|
|
30540
|
+
dataPath: p.__dataPath,
|
|
30541
|
+
},
|
|
30542
|
+
// Only set disabled if property doesn't have its own disabled option
|
|
30543
|
+
hasOwnDisabled ? {} : { disabled: !isEditable }),
|
|
30544
|
+
},
|
|
30545
|
+
],
|
|
30546
|
+
};
|
|
30547
|
+
}),
|
|
30548
|
+
},
|
|
30549
|
+
],
|
|
30550
|
+
},
|
|
30551
|
+
],
|
|
30552
|
+
};
|
|
30553
|
+
})),
|
|
30402
30554
|
},
|
|
30403
30555
|
],
|
|
30404
30556
|
};
|
|
@@ -31889,7 +32041,7 @@ const AXPCrudModifier = {
|
|
|
31889
32041
|
const parentKey = ctx.parentKey.get();
|
|
31890
32042
|
const request = parentKey != null ? applyHierarchicalRootListFilter(e, parentKey) : e;
|
|
31891
32043
|
const result = await queryService.fetch(ENTITY_QUERY_DEFAULT, { entity: entityKey, ...request });
|
|
31892
|
-
console.log('event', e);
|
|
32044
|
+
console.log('event', entityKey, e);
|
|
31893
32045
|
if (result && !result.success) {
|
|
31894
32046
|
throw AXPRequestError.fromCommandResult(result);
|
|
31895
32047
|
}
|
|
@@ -32312,7 +32464,7 @@ class AXPEntityModule {
|
|
|
32312
32464
|
},
|
|
32313
32465
|
{
|
|
32314
32466
|
key: 'Entity:Bulk',
|
|
32315
|
-
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-
|
|
32467
|
+
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-CFFv3jDs.mjs').then((c) => c.AXPBulkEntityCommand),
|
|
32316
32468
|
},
|
|
32317
32469
|
{
|
|
32318
32470
|
key: 'Entity:OpenList',
|
|
@@ -32473,7 +32625,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
32473
32625
|
},
|
|
32474
32626
|
{
|
|
32475
32627
|
key: 'Entity:Bulk',
|
|
32476
|
-
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-
|
|
32628
|
+
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-CFFv3jDs.mjs').then((c) => c.AXPBulkEntityCommand),
|
|
32477
32629
|
},
|
|
32478
32630
|
{
|
|
32479
32631
|
key: 'Entity:OpenList',
|
|
@@ -32799,4 +32951,4 @@ function detectEntityChanges(oldObj, newObj) {
|
|
|
32799
32951
|
*/
|
|
32800
32952
|
|
|
32801
32953
|
export { AXPEntityListViewModelResolver as $, AXPEntityDefinitionRegistryService as A, AXPEntityCategoryWidgetViewComponent as B, AXPEntityCommandTriggerViewModel as C, AXPEntityCreateViewElementViewModel as D, AXPEntityCreateViewModelFactory as E, AXPEntityCreateViewSectionViewModel as F, AXPEntityDataProvider as G, AXPEntityDataProviderImpl as H, AXPEntityDataSelectorRowActionsService as I, AXPEntityDataSelectorService as J, AXPEntityDefinitionProviderWidget as K, AXPEntityDefinitionProviderWidgetEditComponent as L, AXPEntityDeletePerformService as M, AXPEntityDetailListViewModel as N, AXPEntityDetailPopoverComponent as O, AXPEntityDetailPopoverService as P, AXPEntityDetailViewModelFactory as Q, AXPEntityDetailViewModelResolver as R, AXPEntityEventDispatcherService as S, AXPEntityFormBuilderService as T, AXPEntityLifecycleHookKeys as U, AXPEntityListPersistenceModeDefault as V, AXPEntityListTableService as W, AXPEntityListToolbarService as X, AXPEntityListViewCardFieldViewModel as Y, AXPEntityListViewColumnViewModel as Z, AXPEntityListViewModelFactory as _, showOperationResultToast as a, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY as a$, AXPEntityListWidget as a0, AXPEntityListWidgetViewComponent as a1, AXPEntityMasterCreateViewModel as a2, AXPEntityMasterListCardSelectActionName as a3, AXPEntityMasterListViewModel as a4, AXPEntityMasterListViewQueryViewModel as a5, AXPEntityMasterSingleElementViewModel as a6, AXPEntityMasterSingleViewGroupViewModel as a7, AXPEntityMasterSingleViewModel as a8, AXPEntityMasterUpdateElementViewModel as a9, AXPLookupWidgetViewComponent as aA, AXPMiddlewareAbortError as aB, AXPMiddlewareEntityStorageService as aC, AXPMultiSourceDefinitionProviderContext as aD, AXPMultiSourceDefinitionProviderService as aE, AXPMultiSourceFederatedSearchService as aF, AXPMultiSourceSelectorComponent as aG, AXPMultiSourceSelectorService as aH, AXPMultiSourceSelectorWidget as aI, AXPMultiSourceSelectorWidgetColumnComponent as aJ, AXPMultiSourceSelectorWidgetEditComponent as aK, AXPMultiSourceSelectorWidgetViewComponent as aL, AXPMultiSourceType as aM, AXPOpenEntityDetailsCommand as aN, AXPOpenEntityListCommand as aO, AXPRelatedColumnEnrichmentService as aP, AXPRelatedColumnMetadataResolver as aQ, AXPSelectorStructureWidget as aR, AXPSelectorStructureWidgetColumnComponent as aS, AXPSelectorStructureWidgetEditComponent as aT, AXPSelectorStructureWidgetViewComponent as aU, AXPShowFileUploaderPopupCommand as aV, AXPTruncatedBreadcrumbComponent as aW, AXPUpdateEntityCommand as aX, AXPUpdateEntityStatusCommand as aY, AXPViewEntityDetailsCommand as aZ, AXP_APPEARANCE_SECTION_ORDER as a_, AXPEntityMasterUpdateViewModel as aa, AXPEntityMasterUpdateViewModelFactory as ab, AXPEntityMiddlewareSkipContext as ac, AXPEntityModule as ad, AXPEntityPreloadFiltersContainerComponent as ae, AXPEntityPreloadFiltersViewModel as af, AXPEntityPreloadFiltersViewModelResolver as ag, AXPEntityResolver as ah, AXPEntityRuntimeAccessorService as ai, AXPEntityService as aj, AXPEntityStorageService as ak, AXPEntityUpdateViewSectionViewModel as al, AXPFileListComponent as am, AXPFileUploaderLoadFilesQuery as an, AXPFileUploaderSaveFilesCommand as ao, AXPFileUploaderWidget as ap, AXPFileUploaderWidgetColumnComponent as aq, AXPFileUploaderWidgetEditComponent as ar, AXPFileUploaderWidgetService as as, AXPFileUploaderWidgetViewComponent as at, AXPGetEntityDetailsQuery as au, AXPLayoutOrderingConfigService as av, AXPLookupByKeyCacheService as aw, AXPLookupWidget as ax, AXPLookupWidgetColumnComponent as ay, AXPLookupWidgetEditComponent as az, buildSelectedIdsFilter as b, defaultSortPresetsMiddlewareProvider as b$, AXP_CLASSIFICATION_SECTION_ORDER as b0, AXP_CLIENT_LOCAL_DEFAULT_MAX_ITEMS as b1, AXP_CLIENT_LOCAL_PLUGIN_NAME as b2, AXP_DATA_SEEDER_TOKEN as b3, AXP_ENTITY_ACTION_PLUGIN as b4, AXP_ENTITY_CONFIG_TOKEN as b5, AXP_ENTITY_DEFINITION_LOADER as b6, AXP_ENTITY_MIDDLEWARE as b7, AXP_ENTITY_MODIFIER as b8, AXP_ENTITY_STORAGE_MIDDLEWARE as b9, axpShowFileUploaderPopupCommandDefinition as bA, axpUpdateEntityStatusCommandDefinition as bB, buildDataSourceTraceSnapshot as bC, canPersistEntityListState as bD, clientLocalPlugin as bE, cloneLayoutArrays as bF, columnOrderingMiddleware as bG, columnOrderingMiddlewareProvider as bH, columnWidthMiddleware as bI, columnWidthMiddlewareProvider as bJ, committedAttachments as bK, composeEntityMiddlewares as bL, composeEntityStorageMiddlewares as bM, computeEntityAggregates as bN, configureEntityListColumnsSettingsMigrateDrop as bO, configureEntityListColumnsSettingsVersion as bP, createColumnOrderingMiddlewareProvider as bQ, createEntityCardDisplayScope as bR, createEntityCardLogicScope as bS, createEntityMiddlewareContext as bT, createEntityStorageContext as bU, createLayoutOrderingMiddlewareProvider as bV, defaultCardLayoutMiddleware as bW, defaultCardLayoutMiddlewareProvider as bX, defaultMultiLanguageMiddleware as bY, defaultMultiLanguageMiddlewareProvider as bZ, defaultSortPresetsMiddleware as b_, AXP_LOOKUP_FILTER_DEFAULT_OPERATOR as ba, AXP_MULTI_SOURCE_DEFINITION_PROVIDER as bb, DEFAULT_COLUMN_ORDER as bc, DEFAULT_PAIR_SPAN_RULES as bd, DEFAULT_PROPERTY_ORDER as be, DEFAULT_SECTION_ORDER as bf, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE as bg, ENTITY_LIST_LAYOUT_META as bh, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY as bi, ENTITY_MASTER_LIST_TRACE_NS as bj, EntityBuilder as bk, EntityDataAccessor as bl, GALLERY_PAGE_COMPONENT_KEY as bm, TREE_CHILDREN_QUERY_TAKE as bn, actionExists as bo, applyDataSourcePagingWithoutLoad as bp, attachmentFieldCount as bq, attachmentNeedsHydration as br, attachmentsPlugin as bs, attachmentsSemanticallyEqual as bt, axpBuildEntityListPageContextSnapshot as bu, axpCreateEntityAiToolInputDefaults as bv, axpCreateEntityCommandDefinition as bw, axpDeleteEntityCommandDefinition as bx, axpOpenEntityListCommandDefinition as by, axpRunEntityListPageContextAction as bz, ATTACHMENTS_PAGE_COMPONENT_KEY as c, provideLocalEntityCatalog as c$, detectEntityChanges as c0, dispatchEntityModifiedSideEffects as c1, ensureHierarchicalRootFilter as c2, ensureLayoutPropertyView as c3, ensureLayoutSection as c4, ensureListActions as c5, entityCreateBridgeMiddleware as c6, entityDeleteBridgeMiddleware as c7, entityGetOneBridgeMiddleware as c8, entityListInstanceCurrentViewPath as c9, hasFileUploaderTitleOrDescriptionFields as cA, hydrateAttachmentFieldToFileList as cB, isAXPMiddlewareAbortError as cC, isAttachmentFieldPresentOnRow as cD, isAttachmentListEntry as cE, isAttachmentStorageRef as cF, isCategoryEntity as cG, isCategoryFilter as cH, isFileListItem as cI, isFileUploaderEditDialogAuto as cJ, isLegacyEntityDataSelectorOptions as cK, layoutOrderingMiddlewareFactory as cL, layoutOrderingMiddlewareProvider as cM, mapEntityStorageErrorToCommandResult as cN, mapLegacyEntityDataSelectorOptions as cO, mergeEntityListViewAndPersistedFilters as cP, normalizeEntityCardHeaderDisplayValue as cQ, normalizeEntityDataSelectorColumnSpecs as cR, normalizeEntityDataSelectorOptions as cS, normalizeEntityFieldToFileList as cT, normalizeEntityListPersistenceMode as cU, normalizeListPaging as cV, prefetchClientLocalRelated as cW, provideEntity as cX, provideEntityMiddlewareBridge as cY, provideEntityRealtimeHandlers as cZ, provideEntityStorageMiddlewareBridge as c_, entityListInstanceFilterPath as ca, entityListStylingRulesPath as cb, entityQueryBridgeMiddleware as cc, entityStorageCreateBridgeMiddleware as cd, entityStorageDeleteBridgeMiddleware as ce, entityStorageGetOneBridgeMiddleware as cf, entityStorageQueryBridgeMiddleware as cg, entityStorageUpdateBridgeMiddleware as ch, entityUpdateBridgeMiddleware as ci, eventDispatchMiddleware as cj, filterEntityMiddlewares as ck, filterEntityStorageMiddlewares as cl, filterSortEntityRows as cm, filterTouchesParentKey as cn, findEntityListRowDataInTree as co, fingerprintAttachmentItem as cp, fingerprintAttachments as cq, fireEntityLifecycleHook as cr, formatLookupItemDisplay as cs, formatLookupItemDisplayAsync as ct, galleryPlugin as cu, getDataSourcePageIndex as cv, getEntityListColumnsSettingsMigrateDrop as cw, getEntityListColumnsSettingsVersion as cx, getEntityListRowId as cy, getMasterInterfacePropertySortKey as cz, AXMEntityCrudService as d, readPersistedEntityListInstanceCurrentView as d0, readPersistedEntityListInstanceFilters as d1, readPersistedEntityListStylingRules as d2, resetPagingForTreeChildrenLoad as d3, resolveAttachmentFieldPath as d4, resolveEntityCardBadgeColorValue as d5, resolveEntityCardHeaderValue as d6, resolveEntityMasterFieldStylingClass as d7, resolveEntityMasterRecordStylingClass as d8, resolveEntityMasterStylingClass as d9, resolveEntityPluginDetailPageOrder as da, resolveFileUploaderEditDialog as db, resolveFileUploaderEntityScope as dc, resolveLookupDisplayField as dd, resolveLookupDisplayTemplate as de, resolveLookupEntityCacheKey as df, resolveLookupEntityKey as dg, resolveMasterInterfacePropertyOrder as dh, restoreEntityListExpandedRows as di, runEntityMiddlewarePipeline as dj, runEntityQuery as dk, runEntityStorageMiddlewarePipeline as dl, searchResultDescriptionMiddleware as dm, searchResultDescriptionMiddlewareProvider as dn, shouldLoadEntityListStateFromStorage as dp, shouldResetEntityListStateOnRouteEntry as dq, traceEntityMasterList as dr, AXMEntityCrudServiceImpl as e, AXPCategoryTreeService as f, AXPClientLocalPluginModule as g, AXPCreateEntityCommand as h, AXPDataSeederService as i, AXPDeleteEntityCommand as j, AXPDomainQueryEntityDefinitionLoader as k, AXPEditFileUploaderCommand as l, AXPEntityBulkPatchPerformService as m, newBulkExecutionId as n, AXPEntityCardComponent as o, persistedAttachments as p, AXPEntityCardFieldsResolver as q, resolveBulkFailureBody as r, settleAfterLoadingDialog as s, AXPEntityCardSelectActionName as t, AXPEntityCardSkeletonComponent as u, AXPEntityCategoryTreeSelectorComponent as v, watchBulkProgress as w, AXPEntityCategoryWidget as x, AXPEntityCategoryWidgetColumnComponent as y, AXPEntityCategoryWidgetEditComponent as z };
|
|
32802
|
-
//# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-
|
|
32954
|
+
//# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BBuYugjl.mjs.map
|