@acorex/platform 20.9.19 → 20.9.21
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-common.mjs +43 -4
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +220 -43
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +70 -12
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-layout-entity.d.ts +49 -3
- package/types/acorex-platform-themes-default.d.ts +8 -0
|
@@ -5442,12 +5442,16 @@ class AXPEntityMasterListViewModel {
|
|
|
5442
5442
|
const entitySetting = await this.settings.get(this.settingEntityKey);
|
|
5443
5443
|
selectedViewName = entitySetting?.list?.currentView;
|
|
5444
5444
|
}
|
|
5445
|
+
// URL `view` wins; fall back to persisted currentView when the query param is absent.
|
|
5445
5446
|
const resolvedViewName = viewName ?? selectedViewName;
|
|
5446
5447
|
const currentViewName = this.view().name;
|
|
5447
5448
|
const currentViewUnavailable = !availableViews.some((v) => v.name === currentViewName);
|
|
5448
5449
|
const nextView = availableViews.find((c) => c.name == resolvedViewName) ??
|
|
5449
5450
|
(currentViewUnavailable ? availableViews[0] : this.view());
|
|
5450
|
-
|
|
5451
|
+
// Columns start empty; bootstrap them on first setView even when the view name is unchanged
|
|
5452
|
+
// (e.g. URL already has ?view=all matching the default view).
|
|
5453
|
+
const needsColumnBootstrap = this.columns().length === 0;
|
|
5454
|
+
const shouldApplyViewState = nextView.name !== currentViewName || currentViewUnavailable || needsColumnBootstrap;
|
|
5451
5455
|
if (shouldApplyViewState) {
|
|
5452
5456
|
this.view.set(nextView);
|
|
5453
5457
|
this.applyViewSorts();
|
|
@@ -5491,6 +5495,8 @@ class AXPEntityMasterListViewModel {
|
|
|
5491
5495
|
/** When true, pager changes are not persisted (programmatic UI sync). */
|
|
5492
5496
|
this.skipListPagingPersistence = false;
|
|
5493
5497
|
this.listPersistenceMode = null;
|
|
5498
|
+
/** Serializes user-setting updates for this entity list to avoid lost merges (e.g. filters vs paging). */
|
|
5499
|
+
this.settingsUpdateChain = Promise.resolve();
|
|
5494
5500
|
this.events$ = new Subject();
|
|
5495
5501
|
//****************** Views ******************//
|
|
5496
5502
|
this.allViews = computed(() => {
|
|
@@ -5774,7 +5780,10 @@ class AXPEntityMasterListViewModel {
|
|
|
5774
5780
|
return this.listPersistenceMode;
|
|
5775
5781
|
}
|
|
5776
5782
|
const value = await this.settings.get(AXPCommonSettings.EntityListPersistenceMode);
|
|
5777
|
-
|
|
5783
|
+
const resolved = value != null && typeof value === 'object' && 'value' in value
|
|
5784
|
+
? value.value
|
|
5785
|
+
: value;
|
|
5786
|
+
this.listPersistenceMode = normalizeEntityListPersistenceMode(resolved);
|
|
5778
5787
|
return this.listPersistenceMode;
|
|
5779
5788
|
}
|
|
5780
5789
|
async shouldLoadPersistedListState() {
|
|
@@ -5820,17 +5829,16 @@ class AXPEntityMasterListViewModel {
|
|
|
5820
5829
|
}
|
|
5821
5830
|
this.loadListPagingFromViewSettings(listViewSetting);
|
|
5822
5831
|
if (columns && columnVisibilityMap && columnWidthsMap) {
|
|
5823
|
-
this.columns.update((prev) =>
|
|
5824
|
-
.
|
|
5825
|
-
|
|
5826
|
-
|
|
5827
|
-
|
|
5828
|
-
width
|
|
5829
|
-
visible
|
|
5830
|
-
}
|
|
5831
|
-
|
|
5832
|
-
|
|
5833
|
-
columns.findIndex((col) => col.name === (b.column?.options?.dataPath ?? b.name))));
|
|
5832
|
+
this.columns.update((prev) => {
|
|
5833
|
+
const next = [...prev].sort((a, b) => columns.findIndex((col) => col.name === (a.column?.options?.dataPath ?? a.name)) -
|
|
5834
|
+
columns.findIndex((col) => col.name === (b.column?.options?.dataPath ?? b.name)));
|
|
5835
|
+
for (const column of next) {
|
|
5836
|
+
const columnKey = column.column?.options?.dataPath ?? column.name;
|
|
5837
|
+
column.width = defaultTo(columnWidthsMap.get(columnKey), column.column?.options?.width);
|
|
5838
|
+
column.visible = columnVisibilityMap.get(columnKey) ?? column.visible;
|
|
5839
|
+
}
|
|
5840
|
+
return next;
|
|
5841
|
+
});
|
|
5834
5842
|
}
|
|
5835
5843
|
if (Array.isArray(sorts) && sorts.length) {
|
|
5836
5844
|
this.setActiveSortsFromQueries(sorts);
|
|
@@ -5923,17 +5931,41 @@ class AXPEntityMasterListViewModel {
|
|
|
5923
5931
|
const wasExpanded = meta?.['expanded'] === true;
|
|
5924
5932
|
this.updateExpandedRowId(rowId, !wasExpanded);
|
|
5925
5933
|
}
|
|
5934
|
+
/**
|
|
5935
|
+
* User-applied filters to persist (excludes hidden view conditions and empty values).
|
|
5936
|
+
*/
|
|
5937
|
+
getPersistableFilterQueries(queries = this.filterQueries()) {
|
|
5938
|
+
return queries.filter((f) => {
|
|
5939
|
+
if (f.hidden === true) {
|
|
5940
|
+
return false;
|
|
5941
|
+
}
|
|
5942
|
+
if (f.readOnly === true) {
|
|
5943
|
+
return false;
|
|
5944
|
+
}
|
|
5945
|
+
const value = f.value;
|
|
5946
|
+
if (value === undefined || value === null || value === '') {
|
|
5947
|
+
return false;
|
|
5948
|
+
}
|
|
5949
|
+
if (Array.isArray(value) && value.length === 0) {
|
|
5950
|
+
return false;
|
|
5951
|
+
}
|
|
5952
|
+
return true;
|
|
5953
|
+
});
|
|
5954
|
+
}
|
|
5955
|
+
enqueueSettingsUpdate(updateFn) {
|
|
5956
|
+
const run = () => this.settings.scope(AXPPlatformScope.User).update(this.settingEntityKey, updateFn);
|
|
5957
|
+
const next = this.settingsUpdateChain.then(run);
|
|
5958
|
+
this.settingsUpdateChain = next.catch(() => undefined);
|
|
5959
|
+
return next;
|
|
5960
|
+
}
|
|
5926
5961
|
async saveSettings(changesType, data) {
|
|
5927
5962
|
if (!(await this.shouldPersistListState())) {
|
|
5928
5963
|
return;
|
|
5929
5964
|
}
|
|
5930
|
-
const updateSettings = (updateFn) => {
|
|
5931
|
-
this.settings.scope(AXPPlatformScope.User).update(this.settingEntityKey, updateFn);
|
|
5932
|
-
};
|
|
5933
5965
|
switch (changesType) {
|
|
5934
5966
|
case 'columnSizes': {
|
|
5935
5967
|
const columnSizeData = data;
|
|
5936
|
-
|
|
5968
|
+
await this.enqueueSettingsUpdate((prev) => {
|
|
5937
5969
|
const field = columnSizeData.dataField.split('-')[1];
|
|
5938
5970
|
const newSettings = { ...prev };
|
|
5939
5971
|
const existingColumns = prev?.list?.views?.[this.view().name]?.columns;
|
|
@@ -5960,7 +5992,7 @@ class AXPEntityMasterListViewModel {
|
|
|
5960
5992
|
}
|
|
5961
5993
|
case 'columnOrders': {
|
|
5962
5994
|
const orderedColumns = data;
|
|
5963
|
-
|
|
5995
|
+
await this.enqueueSettingsUpdate((prev) => {
|
|
5964
5996
|
const newSettings = { ...prev };
|
|
5965
5997
|
set(newSettings, `list.views.${this.view().name}.columns`, orderedColumns.map((c) => ({
|
|
5966
5998
|
name: c.column?.options?.dataPath ?? c.name,
|
|
@@ -5972,7 +6004,7 @@ class AXPEntityMasterListViewModel {
|
|
|
5972
6004
|
break;
|
|
5973
6005
|
}
|
|
5974
6006
|
case 'view':
|
|
5975
|
-
|
|
6007
|
+
await this.enqueueSettingsUpdate((prev) => ({
|
|
5976
6008
|
...prev,
|
|
5977
6009
|
list: {
|
|
5978
6010
|
...prev?.list,
|
|
@@ -5981,7 +6013,7 @@ class AXPEntityMasterListViewModel {
|
|
|
5981
6013
|
}));
|
|
5982
6014
|
break;
|
|
5983
6015
|
case 'pageSize':
|
|
5984
|
-
|
|
6016
|
+
await this.enqueueSettingsUpdate((prev) => ({
|
|
5985
6017
|
...prev,
|
|
5986
6018
|
list: {
|
|
5987
6019
|
...prev?.list,
|
|
@@ -6000,7 +6032,7 @@ class AXPEntityMasterListViewModel {
|
|
|
6000
6032
|
}));
|
|
6001
6033
|
break;
|
|
6002
6034
|
case 'listPaging':
|
|
6003
|
-
|
|
6035
|
+
await this.enqueueSettingsUpdate((prev) => ({
|
|
6004
6036
|
...prev,
|
|
6005
6037
|
list: {
|
|
6006
6038
|
...prev?.list,
|
|
@@ -6016,7 +6048,7 @@ class AXPEntityMasterListViewModel {
|
|
|
6016
6048
|
}));
|
|
6017
6049
|
break;
|
|
6018
6050
|
case 'filters':
|
|
6019
|
-
|
|
6051
|
+
await this.enqueueSettingsUpdate((prev) => ({
|
|
6020
6052
|
...prev,
|
|
6021
6053
|
list: {
|
|
6022
6054
|
...prev?.list,
|
|
@@ -6031,7 +6063,7 @@ class AXPEntityMasterListViewModel {
|
|
|
6031
6063
|
}));
|
|
6032
6064
|
break;
|
|
6033
6065
|
case 'sorts':
|
|
6034
|
-
|
|
6066
|
+
await this.enqueueSettingsUpdate((prev) => ({
|
|
6035
6067
|
...prev,
|
|
6036
6068
|
list: {
|
|
6037
6069
|
...prev?.list,
|
|
@@ -6046,7 +6078,7 @@ class AXPEntityMasterListViewModel {
|
|
|
6046
6078
|
}));
|
|
6047
6079
|
break;
|
|
6048
6080
|
case 'expandedRows':
|
|
6049
|
-
|
|
6081
|
+
await this.enqueueSettingsUpdate((prev) => ({
|
|
6050
6082
|
...prev,
|
|
6051
6083
|
list: {
|
|
6052
6084
|
...prev?.list,
|
|
@@ -6061,7 +6093,7 @@ class AXPEntityMasterListViewModel {
|
|
|
6061
6093
|
}));
|
|
6062
6094
|
break;
|
|
6063
6095
|
case 'listLayout':
|
|
6064
|
-
|
|
6096
|
+
await this.enqueueSettingsUpdate((prev) => ({
|
|
6065
6097
|
...prev,
|
|
6066
6098
|
list: {
|
|
6067
6099
|
...prev?.list,
|
|
@@ -6070,7 +6102,7 @@ class AXPEntityMasterListViewModel {
|
|
|
6070
6102
|
}));
|
|
6071
6103
|
break;
|
|
6072
6104
|
case 'cardContentExpanded':
|
|
6073
|
-
|
|
6105
|
+
await this.enqueueSettingsUpdate((prev) => ({
|
|
6074
6106
|
...prev,
|
|
6075
6107
|
list: {
|
|
6076
6108
|
...prev?.list,
|
|
@@ -6302,9 +6334,10 @@ class AXPEntityMasterListViewModel {
|
|
|
6302
6334
|
/**
|
|
6303
6335
|
* Records the current route query context after initial resolver / view init so the first
|
|
6304
6336
|
* subscription emission does not re-sync unnecessarily.
|
|
6337
|
+
* Pass `overrides` when about to `replaceUrl` query params so the upcoming emission is treated as synced.
|
|
6305
6338
|
*/
|
|
6306
|
-
markRouteQueryContextSynced(queryParamMap) {
|
|
6307
|
-
this.routeQueryContextKey = this.buildRouteQueryContextKey(queryParamMap);
|
|
6339
|
+
markRouteQueryContextSynced(queryParamMap, overrides) {
|
|
6340
|
+
this.routeQueryContextKey = this.buildRouteQueryContextKey(queryParamMap, overrides);
|
|
6308
6341
|
}
|
|
6309
6342
|
/**
|
|
6310
6343
|
* Reacts to any route query param change while the list route is reused (`reuse: queryParamsChange`).
|
|
@@ -6324,21 +6357,36 @@ class AXPEntityMasterListViewModel {
|
|
|
6324
6357
|
if (filtersChanged || viewChanged) {
|
|
6325
6358
|
this.lastAppliedFilterKey = null;
|
|
6326
6359
|
this.lastAppliedSortKey = null;
|
|
6360
|
+
// applyFilterAndSort already emits refresh — avoid a second reloadListData in the host.
|
|
6327
6361
|
await this.applyFilterAndSort();
|
|
6362
|
+
return { reloadList: false };
|
|
6328
6363
|
}
|
|
6364
|
+
// Other query-param context changes (e.g. expression-driven visibility) still need a list reload.
|
|
6329
6365
|
return { reloadList: true };
|
|
6330
6366
|
}
|
|
6331
|
-
buildRouteQueryContextKey(queryParamMap) {
|
|
6332
|
-
|
|
6367
|
+
buildRouteQueryContextKey(queryParamMap, overrides) {
|
|
6368
|
+
const params = {};
|
|
6369
|
+
for (const key of queryParamMap.keys) {
|
|
6370
|
+
params[key] = queryParamMap.get(key) ?? '';
|
|
6371
|
+
}
|
|
6372
|
+
if (overrides) {
|
|
6373
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
6374
|
+
if (value == null) {
|
|
6375
|
+
delete params[key];
|
|
6376
|
+
}
|
|
6377
|
+
else {
|
|
6378
|
+
params[key] = value;
|
|
6379
|
+
}
|
|
6380
|
+
}
|
|
6381
|
+
}
|
|
6382
|
+
return Object.keys(params)
|
|
6333
6383
|
.sort()
|
|
6334
|
-
.map((key) => `${key}=${
|
|
6384
|
+
.map((key) => `${key}=${params[key]}`)
|
|
6335
6385
|
.join('&');
|
|
6336
6386
|
}
|
|
6337
6387
|
async syncFiltersFromRouteQueryParam(filtersJson) {
|
|
6338
6388
|
const nextCanonical = AXPEntityMasterListViewModel.parseQueryParamFiltersToCanonical(filtersJson);
|
|
6339
|
-
const currentCanonical = this.
|
|
6340
|
-
? this.filtersQueryParamCanonical(this.filterQueries())
|
|
6341
|
-
: null;
|
|
6389
|
+
const currentCanonical = this.filtersQueryParamCanonical(this.filterQueries());
|
|
6342
6390
|
if (nextCanonical === currentCanonical) {
|
|
6343
6391
|
return false;
|
|
6344
6392
|
}
|
|
@@ -6855,12 +6903,12 @@ const AXPEntityListViewModelResolver = async (route, state, service = inject(AXP
|
|
|
6855
6903
|
const entityName = route.paramMap.get('entity');
|
|
6856
6904
|
try {
|
|
6857
6905
|
const vm = await service.create(moduleName, entityName);
|
|
6858
|
-
//
|
|
6906
|
+
// URL `filters` are for one-off deep links only; persisted list state loads from user settings.
|
|
6859
6907
|
const filtersParam = route.queryParamMap.get('filters');
|
|
6860
|
-
|
|
6908
|
+
const shouldLoadPersisted = await vm.shouldLoadPersistedListState();
|
|
6909
|
+
if (filtersParam && !shouldLoadPersisted) {
|
|
6861
6910
|
const applied = vm.applyFiltersFromQueryParams(filtersParam);
|
|
6862
6911
|
if (applied) {
|
|
6863
|
-
// Trigger filter and sort application
|
|
6864
6912
|
await vm.applyFilterAndSort();
|
|
6865
6913
|
}
|
|
6866
6914
|
}
|
|
@@ -19522,11 +19570,74 @@ function resolveFileUploaderEntityScope(options, rowData, fieldFallback) {
|
|
|
19522
19570
|
}
|
|
19523
19571
|
return { name: entityName.trim(), id: entityId, field: field.trim() };
|
|
19524
19572
|
}
|
|
19573
|
+
/**
|
|
19574
|
+
* Attachment field names registered by the attachments plugin (`extensions.attachments`)
|
|
19575
|
+
* or properties using the `attachments` widget interface.
|
|
19576
|
+
*/
|
|
19577
|
+
function resolveEntityAttachmentFieldNames(def) {
|
|
19578
|
+
const fields = new Set();
|
|
19579
|
+
const attachCfg = def?.extensions?.attachments;
|
|
19580
|
+
if (attachCfg != null && typeof attachCfg === 'object') {
|
|
19581
|
+
for (const key of Object.keys(attachCfg)) {
|
|
19582
|
+
if (key.trim()) {
|
|
19583
|
+
fields.add(key);
|
|
19584
|
+
}
|
|
19585
|
+
}
|
|
19586
|
+
}
|
|
19587
|
+
const props = def?.properties ?? [];
|
|
19588
|
+
for (const prop of props) {
|
|
19589
|
+
if (prop?.name?.trim() && prop.schema?.interface?.type === 'attachments') {
|
|
19590
|
+
fields.add(prop.name);
|
|
19591
|
+
}
|
|
19592
|
+
}
|
|
19593
|
+
return fields;
|
|
19594
|
+
}
|
|
19595
|
+
/** True when a hydrated key path belongs to a lazy attachment plugin field (top-level property). */
|
|
19596
|
+
function isLazyAttachmentFieldPath(keyPath, lazyFields) {
|
|
19597
|
+
if (!lazyFields.size || !keyPath.trim()) {
|
|
19598
|
+
return false;
|
|
19599
|
+
}
|
|
19600
|
+
const root = keyPath.split(/[.[\]]/)[0];
|
|
19601
|
+
return lazyFields.has(root);
|
|
19602
|
+
}
|
|
19525
19603
|
//#endregion
|
|
19526
19604
|
|
|
19527
19605
|
/** Trace namespace for file-uploader attachment column, load/save, and hydration. */
|
|
19528
19606
|
const FILE_UPLOADER_TRACE_NS = 'file-uploader-attachments';
|
|
19529
19607
|
|
|
19608
|
+
/**
|
|
19609
|
+
* Loads and hydrates entity attachment field values via `FileUploader:LoadFiles`.
|
|
19610
|
+
* Used when read middleware keeps storage refs and the UI mounts the attachments widget.
|
|
19611
|
+
*/
|
|
19612
|
+
async function fetchHydratedEntityAttachments(queryExecutor, scope) {
|
|
19613
|
+
AXPDebugService.instance?.trace(FILE_UPLOADER_TRACE_NS, 'lazy-hydrate', 'Loading attachments on widget display', () => ({
|
|
19614
|
+
entity: scope.name,
|
|
19615
|
+
entityId: scope.id,
|
|
19616
|
+
field: scope.field,
|
|
19617
|
+
}));
|
|
19618
|
+
try {
|
|
19619
|
+
const result = await queryExecutor.fetch('FileUploader:LoadFiles', scope);
|
|
19620
|
+
const files = result?.files ?? [];
|
|
19621
|
+
AXPDebugService.instance?.trace(FILE_UPLOADER_TRACE_NS, 'lazy-hydrate', 'Attachments loaded on widget display', () => ({
|
|
19622
|
+
entity: scope.name,
|
|
19623
|
+
entityId: scope.id,
|
|
19624
|
+
field: scope.field,
|
|
19625
|
+
fileCount: files.length,
|
|
19626
|
+
fileNames: files.map((file) => file.name),
|
|
19627
|
+
}));
|
|
19628
|
+
return files;
|
|
19629
|
+
}
|
|
19630
|
+
catch (error) {
|
|
19631
|
+
AXPDebugService.instance?.warn(FILE_UPLOADER_TRACE_NS, 'lazy-hydrate', 'Failed to load attachments on widget display', () => ({
|
|
19632
|
+
entity: scope.name,
|
|
19633
|
+
entityId: scope.id,
|
|
19634
|
+
field: scope.field,
|
|
19635
|
+
error: error instanceof Error ? error.message : String(error),
|
|
19636
|
+
}));
|
|
19637
|
+
throw error;
|
|
19638
|
+
}
|
|
19639
|
+
}
|
|
19640
|
+
|
|
19530
19641
|
class AXPFileUploaderLoadFilesQuery {
|
|
19531
19642
|
constructor() {
|
|
19532
19643
|
//#region ---- Services & Dependencies ----
|
|
@@ -19839,6 +19950,7 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
19839
19950
|
this.hooks = inject(AXPHookService);
|
|
19840
19951
|
this.fileActionsService = inject(AXPFileActionsService);
|
|
19841
19952
|
this.commandExecutor = inject(AXPCommandExecutor);
|
|
19953
|
+
this.queryExecutor = inject(AXPQueryExecutor);
|
|
19842
19954
|
this.toastService = inject(AXToastService);
|
|
19843
19955
|
this.translateService = inject(AXTranslationService);
|
|
19844
19956
|
//#region ---- Dirty tracking (deferred save pages) ----
|
|
@@ -19852,17 +19964,30 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
19852
19964
|
/** Status before soft-delete; used for restore when baseline was not synced (section layout). */
|
|
19853
19965
|
this.statusBeforeDelete = new Map();
|
|
19854
19966
|
this.autoBaselineSynced = signal(false, ...(ngDevMode ? [{ debugName: "autoBaselineSynced" }] : /* istanbul ignore next */ []));
|
|
19967
|
+
this.hydrateRequestId = 0;
|
|
19855
19968
|
/** Sync baseline from context when not wired by a deferred-save page (section layout). */
|
|
19856
19969
|
this.baselineInitEffect = effect(() => {
|
|
19857
19970
|
if (this.autoBaselineSynced()) {
|
|
19858
19971
|
return;
|
|
19859
19972
|
}
|
|
19860
19973
|
const value = this.getValue();
|
|
19861
|
-
if (value == null) {
|
|
19974
|
+
if (value == null || attachmentNeedsHydration(value)) {
|
|
19862
19975
|
return;
|
|
19863
19976
|
}
|
|
19864
19977
|
this.syncBaseline(value);
|
|
19865
19978
|
}, ...(ngDevMode ? [{ debugName: "baselineInitEffect" }] : /* istanbul ignore next */ []));
|
|
19979
|
+
/** Hydrate attachment refs when the widget is shown (read middleware keeps refs lazy). */
|
|
19980
|
+
this.lazyHydrateEffect = effect(() => {
|
|
19981
|
+
const value = this.getValue();
|
|
19982
|
+
if (!attachmentNeedsHydration(value)) {
|
|
19983
|
+
return;
|
|
19984
|
+
}
|
|
19985
|
+
const scope = resolveFileUploaderEntityScope(this.options(), this.contextService.snapshot(), resolveAttachmentFieldPath(this.options(), this.path));
|
|
19986
|
+
if (!scope?.id) {
|
|
19987
|
+
return;
|
|
19988
|
+
}
|
|
19989
|
+
void this.hydrateAttachments(scope);
|
|
19990
|
+
}, ...(ngDevMode ? [{ debugName: "lazyHydrateEffect" }] : /* istanbul ignore next */ []));
|
|
19866
19991
|
//#endregion
|
|
19867
19992
|
this.multiple = computed(() => this.options()['multiple'], ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
19868
19993
|
this.acceptOverride = signal(undefined, ...(ngDevMode ? [{ debugName: "acceptOverride" }] : /* istanbul ignore next */ []));
|
|
@@ -19939,6 +20064,24 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
19939
20064
|
this.configureFromHooks();
|
|
19940
20065
|
this.loadActions();
|
|
19941
20066
|
}
|
|
20067
|
+
async hydrateAttachments(scope) {
|
|
20068
|
+
const requestId = ++this.hydrateRequestId;
|
|
20069
|
+
try {
|
|
20070
|
+
const files = await fetchHydratedEntityAttachments(this.queryExecutor, scope);
|
|
20071
|
+
if (requestId !== this.hydrateRequestId) {
|
|
20072
|
+
return;
|
|
20073
|
+
}
|
|
20074
|
+
this.skipDirtyEvaluation = true;
|
|
20075
|
+
this.setValue(cloneDeep(files));
|
|
20076
|
+
this.skipDirtyEvaluation = false;
|
|
20077
|
+
this.syncBaseline(files);
|
|
20078
|
+
}
|
|
20079
|
+
catch {
|
|
20080
|
+
if (requestId !== this.hydrateRequestId) {
|
|
20081
|
+
return;
|
|
20082
|
+
}
|
|
20083
|
+
}
|
|
20084
|
+
}
|
|
19942
20085
|
setValue(value) {
|
|
19943
20086
|
super.setValue(value);
|
|
19944
20087
|
if (this.skipDirtyEvaluation) {
|
|
@@ -20496,8 +20639,21 @@ var fileUploaderWidgetEdit_component = /*#__PURE__*/Object.freeze({
|
|
|
20496
20639
|
|
|
20497
20640
|
class AXPFileUploaderWidgetViewComponent extends AXPValueWidgetComponent {
|
|
20498
20641
|
constructor() {
|
|
20499
|
-
super(
|
|
20642
|
+
super();
|
|
20643
|
+
this.queryExecutor = inject(AXPQueryExecutor);
|
|
20644
|
+
this.hydrateRequestId = 0;
|
|
20500
20645
|
this.files = computed(() => (this.getValue() ?? []).filter(file => file.status !== 'deleted') ?? [], ...(ngDevMode ? [{ debugName: "files" }] : /* istanbul ignore next */ []));
|
|
20646
|
+
effect(() => {
|
|
20647
|
+
const value = this.getValue();
|
|
20648
|
+
if (!attachmentNeedsHydration(value)) {
|
|
20649
|
+
return;
|
|
20650
|
+
}
|
|
20651
|
+
const scope = resolveFileUploaderEntityScope(this.options(), this.contextService.snapshot(), resolveAttachmentFieldPath(this.options(), this.path));
|
|
20652
|
+
if (!scope?.id) {
|
|
20653
|
+
return;
|
|
20654
|
+
}
|
|
20655
|
+
void this.hydrateAttachments(scope);
|
|
20656
|
+
});
|
|
20501
20657
|
}
|
|
20502
20658
|
get __class() {
|
|
20503
20659
|
const cls = {};
|
|
@@ -20505,7 +20661,24 @@ class AXPFileUploaderWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
20505
20661
|
cls[`ax-flex-1`] = true;
|
|
20506
20662
|
return cls;
|
|
20507
20663
|
}
|
|
20508
|
-
|
|
20664
|
+
async hydrateAttachments(scope) {
|
|
20665
|
+
const requestId = ++this.hydrateRequestId;
|
|
20666
|
+
try {
|
|
20667
|
+
const files = await fetchHydratedEntityAttachments(this.queryExecutor, scope);
|
|
20668
|
+
if (requestId !== this.hydrateRequestId) {
|
|
20669
|
+
return;
|
|
20670
|
+
}
|
|
20671
|
+
const path = this.fullPath();
|
|
20672
|
+
if (!path) {
|
|
20673
|
+
return;
|
|
20674
|
+
}
|
|
20675
|
+
this.contextService.update(path, files, { origin: 'system' });
|
|
20676
|
+
}
|
|
20677
|
+
catch {
|
|
20678
|
+
/* keep refs; popover / edit can retry */
|
|
20679
|
+
}
|
|
20680
|
+
}
|
|
20681
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFileUploaderWidgetViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
20509
20682
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPFileUploaderWidgetViewComponent, isStandalone: true, selector: "axp-file-uploader-widget-view", host: { properties: { "class": "this.__class" } }, usesInheritance: true, ngImport: i0, template: `
|
|
20510
20683
|
<axp-file-list [files]="files()" [readonly]="true"></axp-file-list>
|
|
20511
20684
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXUploaderModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "enableTitleDescription", "multiple", "look", "titleKey", "showLabel", "linksLayout", "files", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -20530,7 +20703,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
20530
20703
|
],
|
|
20531
20704
|
inputs: [],
|
|
20532
20705
|
}]
|
|
20533
|
-
}], propDecorators: { __class: [{
|
|
20706
|
+
}], ctorParameters: () => [], propDecorators: { __class: [{
|
|
20534
20707
|
type: HostBinding,
|
|
20535
20708
|
args: ['class']
|
|
20536
20709
|
}] } });
|
|
@@ -20698,10 +20871,12 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
20698
20871
|
AXPFileUploaderWidgetEditComponent: AXPFileUploaderWidgetEditComponent,
|
|
20699
20872
|
AXPFileUploaderWidgetService: AXPFileUploaderWidgetService,
|
|
20700
20873
|
AXPFileUploaderWidgetViewComponent: AXPFileUploaderWidgetViewComponent,
|
|
20874
|
+
FILE_UPLOADER_TRACE_NS: FILE_UPLOADER_TRACE_NS,
|
|
20701
20875
|
attachmentFieldCount: attachmentFieldCount,
|
|
20702
20876
|
attachmentNeedsHydration: attachmentNeedsHydration,
|
|
20703
20877
|
attachmentsSemanticallyEqual: attachmentsSemanticallyEqual,
|
|
20704
20878
|
committedAttachments: committedAttachments,
|
|
20879
|
+
fetchHydratedEntityAttachments: fetchHydratedEntityAttachments,
|
|
20705
20880
|
fingerprintAttachmentItem: fingerprintAttachmentItem,
|
|
20706
20881
|
fingerprintAttachments: fingerprintAttachments,
|
|
20707
20882
|
hasFileUploaderTitleOrDescriptionFields: hasFileUploaderTitleOrDescriptionFields,
|
|
@@ -20711,9 +20886,11 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
20711
20886
|
isAttachmentStorageRef: isAttachmentStorageRef,
|
|
20712
20887
|
isFileListItem: isFileListItem,
|
|
20713
20888
|
isFileUploaderEditDialogAuto: isFileUploaderEditDialogAuto,
|
|
20889
|
+
isLazyAttachmentFieldPath: isLazyAttachmentFieldPath,
|
|
20714
20890
|
normalizeEntityFieldToFileList: normalizeEntityFieldToFileList,
|
|
20715
20891
|
persistedAttachments: persistedAttachments,
|
|
20716
20892
|
resolveAttachmentFieldPath: resolveAttachmentFieldPath,
|
|
20893
|
+
resolveEntityAttachmentFieldNames: resolveEntityAttachmentFieldNames,
|
|
20717
20894
|
resolveFileUploaderEditDialog: resolveFileUploaderEditDialog,
|
|
20718
20895
|
resolveFileUploaderEntityScope: resolveFileUploaderEntityScope
|
|
20719
20896
|
});
|
|
@@ -25020,7 +25197,7 @@ const AXPCrudModifier = {
|
|
|
25020
25197
|
queries.list = {
|
|
25021
25198
|
execute: async (e) => {
|
|
25022
25199
|
const res = await dataService.query(e);
|
|
25023
|
-
//console.log('query', res, ctx.module.get() + '.' + ctx.name.get(), e);
|
|
25200
|
+
// console.log('query', res, ctx.module.get() + '.' + ctx.name.get(), e);
|
|
25024
25201
|
return res;
|
|
25025
25202
|
},
|
|
25026
25203
|
type: AXPEntityQueryType.List,
|
|
@@ -26508,5 +26685,5 @@ function detectEntityChanges(oldObj, newObj) {
|
|
|
26508
26685
|
* Generated bundle index. Do not edit.
|
|
26509
26686
|
*/
|
|
26510
26687
|
|
|
26511
|
-
export { ATTACHMENTS_PAGE_COMPONENT_KEY, AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEditFileUploaderCommand, AXPEntitiesListDataSourceDefinition, AXPEntityApplyUpdatesAction, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorRowActionsService, AXPEntityDataSelectorService, AXPEntityDefinitionProviderWidget, AXPEntityDefinitionProviderWidgetEditComponent, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityFormBuilderService, AXPEntityListPersistenceModeDefault, AXPEntityListTableService, AXPEntityListToolbarService, AXPEntityListViewCardFieldViewModel, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListCardSelectActionName, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityPreloadFiltersContainerComponent, AXPEntityPreloadFiltersViewModel, AXPEntityPreloadFiltersViewModelResolver, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPFileListComponent, AXPFileUploaderLoadFilesQuery, AXPFileUploaderSaveFilesCommand, AXPFileUploaderWidget, AXPFileUploaderWidgetColumnComponent, AXPFileUploaderWidgetEditComponent, AXPFileUploaderWidgetService, AXPFileUploaderWidgetViewComponent, AXPGetEntityDetailsQuery, AXPLayoutOrderingConfigService, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPMultiSourceDefinitionProviderContext, AXPMultiSourceDefinitionProviderService, AXPMultiSourceFederatedSearchService, AXPMultiSourceSelectorComponent, AXPMultiSourceSelectorService, AXPMultiSourceSelectorWidget, AXPMultiSourceSelectorWidgetColumnComponent, AXPMultiSourceSelectorWidgetEditComponent, AXPMultiSourceSelectorWidgetViewComponent, AXPMultiSourceType, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPRelatedColumnEnrichmentService, AXPRelatedColumnMetadataResolver, AXPSelectorStructureWidget, AXPSelectorStructureWidgetColumnComponent, AXPSelectorStructureWidgetEditComponent, AXPSelectorStructureWidgetViewComponent, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXPTruncatedBreadcrumbComponent, AXPUpdateEntityCommand, AXPViewEntityDetailsCommand, AXP_APPEARANCE_SECTION_ORDER, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY, AXP_CLASSIFICATION_SECTION_ORDER, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, AXP_MULTI_SOURCE_DEFINITION_PROVIDER, DEFAULT_COLUMN_ORDER, DEFAULT_PAIR_SPAN_RULES, DEFAULT_PROPERTY_ORDER, DEFAULT_SECTION_ORDER, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY, EntityBuilder, EntityDataAccessor, actionExists, applyDataSourcePagingWithoutLoad, attachmentFieldCount, attachmentNeedsHydration, attachmentsPlugin, attachmentsSemanticallyEqual, axpCreateEntityAiToolInputDefaults, axpCreateEntityCommandDefinition, canPersistEntityListState, cloneLayoutArrays, columnOrderingMiddleware, columnOrderingMiddlewareProvider, columnWidthMiddleware, columnWidthMiddlewareProvider, commandMessageTextForError, committedAttachments, computeEntityAggregates, createColumnOrderingMiddlewareProvider, createLayoutOrderingMiddlewareProvider, createModifierContext, defaultCardLayoutMiddleware, defaultCardLayoutMiddlewareProvider, defaultMultiLanguageMiddleware, defaultMultiLanguageMiddlewareProvider, detectEntityChanges, ensureLayoutPropertyView, ensureLayoutSection, ensureListActions, eventDispatchMiddleware, filterSortEntityRows, findEntityListRowDataInTree, fingerprintAttachmentItem, fingerprintAttachments, formatLookupItemDisplay, formatLookupItemDisplayAsync, getDataSourcePageIndex, getEntityListRowId, getMasterInterfacePropertySortKey, hasFileUploaderTitleOrDescriptionFields, hydrateAttachmentFieldToFileList, isAXPMiddlewareAbortError, isAttachmentFieldPresentOnRow, isAttachmentListEntry, isAttachmentStorageRef, isCategoryEntity, isCategoryFilter, isFileListItem, isFileUploaderEditDialogAuto, isLegacyEntityDataSelectorOptions, layoutOrderingMiddlewareFactory, layoutOrderingMiddlewareProvider, mapEntityStorageErrorToCommandResult, mapLegacyEntityDataSelectorOptions, normalizeEntityDataSelectorOptions, normalizeEntityFieldToFileList, normalizeEntityListPersistenceMode, normalizeListPaging, persistedAttachments, provideEntity, resolveAttachmentFieldPath, resolveEntityPluginDetailPageOrder, resolveFileUploaderEditDialog, resolveFileUploaderEntityScope, resolveLookupDisplayField, resolveLookupDisplayTemplate, restoreEntityListExpandedRows, runEntityQuery, searchResultDescriptionMiddleware, searchResultDescriptionMiddlewareProvider, shouldLoadEntityListStateFromStorage, shouldResetEntityListStateOnRouteEntry };
|
|
26688
|
+
export { ATTACHMENTS_PAGE_COMPONENT_KEY, AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEditFileUploaderCommand, AXPEntitiesListDataSourceDefinition, AXPEntityApplyUpdatesAction, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorRowActionsService, AXPEntityDataSelectorService, AXPEntityDefinitionProviderWidget, AXPEntityDefinitionProviderWidgetEditComponent, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityFormBuilderService, AXPEntityListPersistenceModeDefault, AXPEntityListTableService, AXPEntityListToolbarService, AXPEntityListViewCardFieldViewModel, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListCardSelectActionName, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityPreloadFiltersContainerComponent, AXPEntityPreloadFiltersViewModel, AXPEntityPreloadFiltersViewModelResolver, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPFileListComponent, AXPFileUploaderLoadFilesQuery, AXPFileUploaderSaveFilesCommand, AXPFileUploaderWidget, AXPFileUploaderWidgetColumnComponent, AXPFileUploaderWidgetEditComponent, AXPFileUploaderWidgetService, AXPFileUploaderWidgetViewComponent, AXPGetEntityDetailsQuery, AXPLayoutOrderingConfigService, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPMultiSourceDefinitionProviderContext, AXPMultiSourceDefinitionProviderService, AXPMultiSourceFederatedSearchService, AXPMultiSourceSelectorComponent, AXPMultiSourceSelectorService, AXPMultiSourceSelectorWidget, AXPMultiSourceSelectorWidgetColumnComponent, AXPMultiSourceSelectorWidgetEditComponent, AXPMultiSourceSelectorWidgetViewComponent, AXPMultiSourceType, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPRelatedColumnEnrichmentService, AXPRelatedColumnMetadataResolver, AXPSelectorStructureWidget, AXPSelectorStructureWidgetColumnComponent, AXPSelectorStructureWidgetEditComponent, AXPSelectorStructureWidgetViewComponent, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXPTruncatedBreadcrumbComponent, AXPUpdateEntityCommand, AXPViewEntityDetailsCommand, AXP_APPEARANCE_SECTION_ORDER, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY, AXP_CLASSIFICATION_SECTION_ORDER, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, AXP_MULTI_SOURCE_DEFINITION_PROVIDER, DEFAULT_COLUMN_ORDER, DEFAULT_PAIR_SPAN_RULES, DEFAULT_PROPERTY_ORDER, DEFAULT_SECTION_ORDER, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY, EntityBuilder, EntityDataAccessor, FILE_UPLOADER_TRACE_NS, actionExists, applyDataSourcePagingWithoutLoad, attachmentFieldCount, attachmentNeedsHydration, attachmentsPlugin, attachmentsSemanticallyEqual, axpCreateEntityAiToolInputDefaults, axpCreateEntityCommandDefinition, canPersistEntityListState, cloneLayoutArrays, columnOrderingMiddleware, columnOrderingMiddlewareProvider, columnWidthMiddleware, columnWidthMiddlewareProvider, commandMessageTextForError, committedAttachments, computeEntityAggregates, createColumnOrderingMiddlewareProvider, createLayoutOrderingMiddlewareProvider, createModifierContext, defaultCardLayoutMiddleware, defaultCardLayoutMiddlewareProvider, defaultMultiLanguageMiddleware, defaultMultiLanguageMiddlewareProvider, detectEntityChanges, ensureLayoutPropertyView, ensureLayoutSection, ensureListActions, eventDispatchMiddleware, fetchHydratedEntityAttachments, filterSortEntityRows, findEntityListRowDataInTree, fingerprintAttachmentItem, fingerprintAttachments, formatLookupItemDisplay, formatLookupItemDisplayAsync, getDataSourcePageIndex, getEntityListRowId, getMasterInterfacePropertySortKey, hasFileUploaderTitleOrDescriptionFields, hydrateAttachmentFieldToFileList, isAXPMiddlewareAbortError, isAttachmentFieldPresentOnRow, isAttachmentListEntry, isAttachmentStorageRef, isCategoryEntity, isCategoryFilter, isFileListItem, isFileUploaderEditDialogAuto, isLazyAttachmentFieldPath, isLegacyEntityDataSelectorOptions, layoutOrderingMiddlewareFactory, layoutOrderingMiddlewareProvider, mapEntityStorageErrorToCommandResult, mapLegacyEntityDataSelectorOptions, normalizeEntityDataSelectorOptions, normalizeEntityFieldToFileList, normalizeEntityListPersistenceMode, normalizeListPaging, persistedAttachments, provideEntity, resolveAttachmentFieldPath, resolveEntityAttachmentFieldNames, resolveEntityPluginDetailPageOrder, resolveFileUploaderEditDialog, resolveFileUploaderEntityScope, resolveLookupDisplayField, resolveLookupDisplayTemplate, restoreEntityListExpandedRows, runEntityQuery, searchResultDescriptionMiddleware, searchResultDescriptionMiddlewareProvider, shouldLoadEntityListStateFromStorage, shouldResetEntityListStateOnRouteEntry };
|
|
26512
26689
|
//# sourceMappingURL=acorex-platform-layout-entity.mjs.map
|