@acorex-platform/framework-client 2.0.0-next.23 → 2.0.0-next.25
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-layout-entity-acorex-platform-framework-client-layout-entity-DFOMh7gJ.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Bte8Trz3.mjs} +275 -35
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Bte8Trz3.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-_o_CUDxU.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-bCZHSHRa.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-_o_CUDxU.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-bCZHSHRa.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-DN1eNwqP.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-BRN0AcG-.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-DN1eNwqP.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-BRN0AcG-.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-Dyn_JDo9.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-BXAl2p0t.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-Dyn_JDo9.mjs.map → acorex-platform-framework-client-layout-entity-file-list-popup.component-BXAl2p0t.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-Z6B4WJXJ.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-Cc2kuwvV.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-Z6B4WJXJ.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-Cc2kuwvV.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CELbt6ig.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-DRh91YCL.mjs} +26 -5
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-DRh91YCL.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BSjcMKNA.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Ddx_b04d.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BSjcMKNA.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Ddx_b04d.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Co5_b33I.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-DqIuIn76.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Co5_b33I.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-DqIuIn76.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs +168 -81
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-platform-framework-client-layout-entity.d.ts +61 -2
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +2 -0
- package/types/acorex-platform-framework-client-themes-default.d.ts +4 -5
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DFOMh7gJ.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CELbt6ig.mjs.map +0 -1
|
@@ -6195,7 +6195,7 @@ class AXPFileUploaderWidgetService {
|
|
|
6195
6195
|
};
|
|
6196
6196
|
let title = '';
|
|
6197
6197
|
const result = await this.dialogOpener.openPopup({
|
|
6198
|
-
load: () => import('./acorex-platform-framework-client-layout-entity-file-list-popup.component-
|
|
6198
|
+
load: () => import('./acorex-platform-framework-client-layout-entity-file-list-popup.component-BXAl2p0t.mjs').then((m) => m.AXPFileListPopupComponent),
|
|
6199
6199
|
data: {
|
|
6200
6200
|
entity: entity ?? null,
|
|
6201
6201
|
readonly: resolved.readonly,
|
|
@@ -9392,6 +9392,57 @@ function getDataSourcePageIndex(dataSource) {
|
|
|
9392
9392
|
const ds = dataSource;
|
|
9393
9393
|
return ds._page ?? 0;
|
|
9394
9394
|
}
|
|
9395
|
+
/**
|
|
9396
|
+
* Resolves when the next load cycle finishes.
|
|
9397
|
+
* A `loading=false` from an older cycle is ignored until this watch sees `loading=true`.
|
|
9398
|
+
* `stop` settles immediately (cache no-op, or a newer view switch owns the list).
|
|
9399
|
+
*/
|
|
9400
|
+
function watchNextDataSourceLoad(dataSource, isCurrent = () => true) {
|
|
9401
|
+
let settled = false;
|
|
9402
|
+
let sawLoadingStart = false;
|
|
9403
|
+
let loadingSub = { unsubscribe: () => undefined };
|
|
9404
|
+
let changedSub = { unsubscribe: () => undefined };
|
|
9405
|
+
let timeoutId;
|
|
9406
|
+
let resolveLoad = () => undefined;
|
|
9407
|
+
const stop = () => {
|
|
9408
|
+
if (settled) {
|
|
9409
|
+
return;
|
|
9410
|
+
}
|
|
9411
|
+
settled = true;
|
|
9412
|
+
if (timeoutId != null) {
|
|
9413
|
+
clearTimeout(timeoutId);
|
|
9414
|
+
}
|
|
9415
|
+
loadingSub.unsubscribe();
|
|
9416
|
+
changedSub.unsubscribe();
|
|
9417
|
+
resolveLoad();
|
|
9418
|
+
};
|
|
9419
|
+
const promise = new Promise((done) => {
|
|
9420
|
+
resolveLoad = done;
|
|
9421
|
+
});
|
|
9422
|
+
const finish = () => {
|
|
9423
|
+
queueMicrotask(stop);
|
|
9424
|
+
};
|
|
9425
|
+
changedSub = dataSource.onChanged.subscribe(() => {
|
|
9426
|
+
if (!isCurrent() || (sawLoadingStart && !dataSource.isLoading)) {
|
|
9427
|
+
finish();
|
|
9428
|
+
}
|
|
9429
|
+
});
|
|
9430
|
+
loadingSub = dataSource.onLoadingChanged.subscribe((isLoading) => {
|
|
9431
|
+
if (!isCurrent()) {
|
|
9432
|
+
finish();
|
|
9433
|
+
return;
|
|
9434
|
+
}
|
|
9435
|
+
if (isLoading) {
|
|
9436
|
+
sawLoadingStart = true;
|
|
9437
|
+
return;
|
|
9438
|
+
}
|
|
9439
|
+
if (sawLoadingStart) {
|
|
9440
|
+
finish();
|
|
9441
|
+
}
|
|
9442
|
+
});
|
|
9443
|
+
timeoutId = setTimeout(stop, 10_000);
|
|
9444
|
+
return { promise, stop };
|
|
9445
|
+
}
|
|
9395
9446
|
function normalizeListPaging(paging, defaultTake) {
|
|
9396
9447
|
const take = typeof paging?.take === 'number' && paging.take > 0 ? paging.take : defaultTake;
|
|
9397
9448
|
const skip = typeof paging?.skip === 'number' && paging.skip >= 0 ? paging.skip : 0;
|
|
@@ -10931,7 +10982,58 @@ class AXPEntityMasterListViewModel {
|
|
|
10931
10982
|
const resolvedCommand = await this.resolveCommandNameExpression(commandPart, data);
|
|
10932
10983
|
return `${resolvedCommand}${suffix}`;
|
|
10933
10984
|
}
|
|
10934
|
-
|
|
10985
|
+
/**
|
|
10986
|
+
* Marks every in-flight view switch as stale. Call only when the selected view name changes.
|
|
10987
|
+
* Does not clear rows or start a request; {@link setView} does that once this epoch is still current.
|
|
10988
|
+
*/
|
|
10989
|
+
beginViewSwitch() {
|
|
10990
|
+
this.viewSwitchEpochValue += 1;
|
|
10991
|
+
return this.viewSwitchEpochValue;
|
|
10992
|
+
}
|
|
10993
|
+
viewSwitchEpoch() {
|
|
10994
|
+
return this.viewSwitchEpochValue;
|
|
10995
|
+
}
|
|
10996
|
+
isViewSwitchCurrent(epoch) {
|
|
10997
|
+
return epoch === this.viewSwitchEpochValue;
|
|
10998
|
+
}
|
|
10999
|
+
/** Clears the switch skeleton only for the load that still belongs to `epoch`. */
|
|
11000
|
+
finishListTransition(epoch) {
|
|
11001
|
+
if (!this.isViewSwitchCurrent(epoch)) {
|
|
11002
|
+
return;
|
|
11003
|
+
}
|
|
11004
|
+
this.listTransitionLoading.set(false);
|
|
11005
|
+
}
|
|
11006
|
+
async setView(viewName = null, viewSwitchEpoch) {
|
|
11007
|
+
const run = this.setViewChain.then(() => this.applySetView(viewName, viewSwitchEpoch));
|
|
11008
|
+
this.setViewChain = run.then(() => undefined, () => undefined);
|
|
11009
|
+
await run;
|
|
11010
|
+
}
|
|
11011
|
+
isStaleViewSwitch(viewSwitchEpoch) {
|
|
11012
|
+
return viewSwitchEpoch != null && !this.isViewSwitchCurrent(viewSwitchEpoch);
|
|
11013
|
+
}
|
|
11014
|
+
/**
|
|
11015
|
+
* Drops an in-flight list result so it cannot paint on the new view.
|
|
11016
|
+
* Restores the current filter/sort because `AXDataSource.reset()` clears them.
|
|
11017
|
+
* The replacement request starts later, after columns and filters for this view are ready.
|
|
11018
|
+
*/
|
|
11019
|
+
discardInFlightListPresentation() {
|
|
11020
|
+
const currentQuery = this.dataSource.query;
|
|
11021
|
+
const filter = currentQuery.filter;
|
|
11022
|
+
const sort = currentQuery.sort ?? [];
|
|
11023
|
+
this.listResultDiscarded = true;
|
|
11024
|
+
this.listTransitionLoading.set(true);
|
|
11025
|
+
this.dataSource.reset();
|
|
11026
|
+
if (filter != null) {
|
|
11027
|
+
this.dataSource.filter(filter);
|
|
11028
|
+
}
|
|
11029
|
+
if (sort.length > 0) {
|
|
11030
|
+
this.dataSource.sort(...sort);
|
|
11031
|
+
}
|
|
11032
|
+
}
|
|
11033
|
+
async applySetView(viewName, viewSwitchEpoch) {
|
|
11034
|
+
if (this.isStaleViewSwitch(viewSwitchEpoch)) {
|
|
11035
|
+
return;
|
|
11036
|
+
}
|
|
10935
11037
|
const previousViewName = this.view().name;
|
|
10936
11038
|
traceEntityMasterList('viewmodel', 'setView start', () => ({
|
|
10937
11039
|
entity: getEntityInfo(this.entityDef).source,
|
|
@@ -10943,6 +11045,9 @@ class AXPEntityMasterListViewModel {
|
|
|
10943
11045
|
await this.loadUserStylingRules();
|
|
10944
11046
|
await this.loadCustomQueryViews();
|
|
10945
11047
|
await this.refreshVisibleViews();
|
|
11048
|
+
if (this.isStaleViewSwitch(viewSwitchEpoch)) {
|
|
11049
|
+
return;
|
|
11050
|
+
}
|
|
10946
11051
|
const availableViews = this.views();
|
|
10947
11052
|
if (!availableViews.length) {
|
|
10948
11053
|
return;
|
|
@@ -10955,6 +11060,9 @@ class AXPEntityMasterListViewModel {
|
|
|
10955
11060
|
const entitySetting = await this.settings.get(this.settingEntityKey);
|
|
10956
11061
|
resolvedViewName = readPersistedEntityListInstanceCurrentView(entitySetting, this.listInstanceId());
|
|
10957
11062
|
}
|
|
11063
|
+
if (this.isStaleViewSwitch(viewSwitchEpoch)) {
|
|
11064
|
+
return;
|
|
11065
|
+
}
|
|
10958
11066
|
const currentViewName = this.view().name;
|
|
10959
11067
|
const currentViewUnavailable = !availableViews.some((v) => v.name === currentViewName);
|
|
10960
11068
|
const targetView = availableViews.find((c) => c.name === resolvedViewName) ?? (currentViewUnavailable ? availableViews[0] : this.view());
|
|
@@ -10966,13 +11074,25 @@ class AXPEntityMasterListViewModel {
|
|
|
10966
11074
|
if (viewChanged) {
|
|
10967
11075
|
this.view.set(targetView);
|
|
10968
11076
|
this.resolvedListPaging.set(null);
|
|
11077
|
+
if (viewSwitchEpoch != null) {
|
|
11078
|
+
this.discardInFlightListPresentation();
|
|
11079
|
+
}
|
|
11080
|
+
}
|
|
11081
|
+
if (this.isStaleViewSwitch(viewSwitchEpoch)) {
|
|
11082
|
+
return;
|
|
10969
11083
|
}
|
|
10970
11084
|
if (shouldInitializeListState) {
|
|
10971
11085
|
this.applyViewSorts();
|
|
10972
11086
|
await this.applyViewColumns();
|
|
11087
|
+
if (this.isStaleViewSwitch(viewSwitchEpoch)) {
|
|
11088
|
+
return;
|
|
11089
|
+
}
|
|
10973
11090
|
this.applyCardFields();
|
|
10974
11091
|
this.applyViewFilters();
|
|
10975
11092
|
await this.applySettings();
|
|
11093
|
+
if (this.isStaleViewSwitch(viewSwitchEpoch)) {
|
|
11094
|
+
return;
|
|
11095
|
+
}
|
|
10976
11096
|
this.initialListSettingsApplied = true;
|
|
10977
11097
|
}
|
|
10978
11098
|
traceEntityMasterList('viewmodel', 'setView complete', () => ({
|
|
@@ -11012,6 +11132,14 @@ class AXPEntityMasterListViewModel {
|
|
|
11012
11132
|
this.destroyed = new Subject();
|
|
11013
11133
|
this.lastAppliedSortKey = null;
|
|
11014
11134
|
this.lastAppliedFilterKey = null;
|
|
11135
|
+
/** Latest view-tab switch. Older `setView` / refresh continuations must not load. */
|
|
11136
|
+
this.viewSwitchEpochValue = 0;
|
|
11137
|
+
/** `reset()` dropped the in-flight rows; the next criteria apply must refresh even if the keys match. */
|
|
11138
|
+
this.listResultDiscarded = false;
|
|
11139
|
+
this.setViewChain = Promise.resolve();
|
|
11140
|
+
/** True after a view switch discards rows, until that switch's own load finishes. */
|
|
11141
|
+
this.listTransitionLoading = signal(false, /* @ts-ignore */
|
|
11142
|
+
...(ngDevMode ? [{ debugName: "listTransitionLoading" }] : /* istanbul ignore next */ []));
|
|
11015
11143
|
this.hasQueryParamsFilters = false; // Flag to prevent overriding queryParams filters
|
|
11016
11144
|
this.routeQueryContextKey = null;
|
|
11017
11145
|
this.listInstanceId = signal(ENTITY_LIST_DEFAULT_INSTANCE_ID, /* @ts-ignore */
|
|
@@ -12148,26 +12276,41 @@ class AXPEntityMasterListViewModel {
|
|
|
12148
12276
|
this.hasQueryParamsFilters = false;
|
|
12149
12277
|
}
|
|
12150
12278
|
const previousViewName = this.view().name;
|
|
12151
|
-
|
|
12279
|
+
const requestedView = queryParamMap.get('view');
|
|
12280
|
+
const viewSwitchEpoch = requestedView != null && requestedView !== previousViewName ? this.beginViewSwitch() : undefined;
|
|
12281
|
+
await this.setView(requestedView, viewSwitchEpoch);
|
|
12282
|
+
if (viewSwitchEpoch != null && !this.isViewSwitchCurrent(viewSwitchEpoch)) {
|
|
12283
|
+
return { reloadList: false };
|
|
12284
|
+
}
|
|
12152
12285
|
if (instanceChanged) {
|
|
12153
12286
|
this.applyViewFilters();
|
|
12154
12287
|
this.applyViewSorts();
|
|
12155
12288
|
await this.loadPersistedInstanceFilters();
|
|
12289
|
+
if (viewSwitchEpoch != null && !this.isViewSwitchCurrent(viewSwitchEpoch)) {
|
|
12290
|
+
return { reloadList: false };
|
|
12291
|
+
}
|
|
12156
12292
|
this.listFilterSeedEpoch.update((epoch) => epoch + 1);
|
|
12157
12293
|
}
|
|
12158
12294
|
const filtersChanged = await this.syncFiltersFromRouteQueryParam(queryParamMap.get('filters'));
|
|
12159
12295
|
await this.refreshVisibleViews();
|
|
12296
|
+
if (viewSwitchEpoch != null && !this.isViewSwitchCurrent(viewSwitchEpoch)) {
|
|
12297
|
+
return { reloadList: false };
|
|
12298
|
+
}
|
|
12160
12299
|
const viewChanged = this.view().name !== previousViewName;
|
|
12161
12300
|
// Query-filter chips follow toolbar `initialFilters`, re-seeded only when this epoch changes.
|
|
12162
12301
|
if (viewChanged) {
|
|
12163
12302
|
this.listFilterSeedEpoch.update((epoch) => epoch + 1);
|
|
12164
12303
|
}
|
|
12165
|
-
if (filtersChanged || viewChanged || instanceChanged) {
|
|
12304
|
+
if (filtersChanged || viewChanged || instanceChanged || viewSwitchEpoch != null) {
|
|
12166
12305
|
this.lastAppliedFilterKey = null;
|
|
12167
12306
|
this.lastAppliedSortKey = null;
|
|
12168
12307
|
// Keys were cleared to force apply; pass reset so URL view/filter changes still reset paging
|
|
12169
12308
|
// (previously done by the caller via reloadListData(true)).
|
|
12170
|
-
await this.applyFilterAndSort({
|
|
12309
|
+
await this.applyFilterAndSort({
|
|
12310
|
+
resetPagination: true,
|
|
12311
|
+
viewSwitchEpoch,
|
|
12312
|
+
forceReload: viewSwitchEpoch != null,
|
|
12313
|
+
});
|
|
12171
12314
|
}
|
|
12172
12315
|
return { reloadList: false };
|
|
12173
12316
|
}
|
|
@@ -12256,6 +12399,13 @@ class AXPEntityMasterListViewModel {
|
|
|
12256
12399
|
}
|
|
12257
12400
|
async applyFilterAndSort(options) {
|
|
12258
12401
|
await this.ensureListPagingResolved();
|
|
12402
|
+
if (this.isStaleViewSwitch(options?.viewSwitchEpoch)) {
|
|
12403
|
+
return;
|
|
12404
|
+
}
|
|
12405
|
+
// A view switch already dropped the previous result. Only that switch may start the replacement load.
|
|
12406
|
+
if (this.listResultDiscarded && options?.viewSwitchEpoch == null && options?.forceReload !== true) {
|
|
12407
|
+
return;
|
|
12408
|
+
}
|
|
12259
12409
|
const sorts = this.sortedFields()
|
|
12260
12410
|
.filter((sf) => sf.dir)
|
|
12261
12411
|
.map((s) => ({ name: s.name, dir: s.dir }));
|
|
@@ -12269,7 +12419,8 @@ class AXPEntityMasterListViewModel {
|
|
|
12269
12419
|
filters: filters,
|
|
12270
12420
|
});
|
|
12271
12421
|
const filterKey = JSON.stringify(transformedFilter);
|
|
12272
|
-
|
|
12422
|
+
const presentationDiscarded = this.listResultDiscarded;
|
|
12423
|
+
if (sortKey === this.lastAppliedSortKey && filterKey === this.lastAppliedFilterKey && !presentationDiscarded && options?.forceReload !== true) {
|
|
12273
12424
|
traceEntityMasterList('viewmodel', 'applyFilterAndSort skipped (no effective change)', () => ({
|
|
12274
12425
|
entity: getEntityInfo(this.entityDef).source,
|
|
12275
12426
|
activeListLayout: this.activeListLayout(),
|
|
@@ -12277,10 +12428,14 @@ class AXPEntityMasterListViewModel {
|
|
|
12277
12428
|
}));
|
|
12278
12429
|
return; // No effective change; avoid redundant refresh
|
|
12279
12430
|
}
|
|
12431
|
+
if (this.isStaleViewSwitch(options?.viewSwitchEpoch)) {
|
|
12432
|
+
return;
|
|
12433
|
+
}
|
|
12434
|
+
this.listResultDiscarded = false;
|
|
12280
12435
|
this.updateAppliedInlineFilterHighlightText(toolbarFilters);
|
|
12281
12436
|
const filtersChanged = this.lastAppliedFilterKey != null && filterKey !== this.lastAppliedFilterKey;
|
|
12282
12437
|
const sortsChanged = this.lastAppliedSortKey != null && sortKey !== this.lastAppliedSortKey;
|
|
12283
|
-
const shouldResetPagination = options?.resetPagination === true || filtersChanged;
|
|
12438
|
+
const shouldResetPagination = options?.resetPagination === true || filtersChanged || presentationDiscarded;
|
|
12284
12439
|
this.lastAppliedSortKey = sortKey;
|
|
12285
12440
|
this.lastAppliedFilterKey = filterKey;
|
|
12286
12441
|
if (shouldResetPagination) {
|
|
@@ -14611,7 +14766,7 @@ class AXMAttachmentsPageComponentProvider {
|
|
|
14611
14766
|
return [
|
|
14612
14767
|
{
|
|
14613
14768
|
key: ATTACHMENTS_PAGE_COMPONENT_KEY,
|
|
14614
|
-
loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-
|
|
14769
|
+
loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-bCZHSHRa.mjs').then((m) => m.AXMAttachmentsPageComponent),
|
|
14615
14770
|
},
|
|
14616
14771
|
];
|
|
14617
14772
|
}
|
|
@@ -15148,7 +15303,7 @@ class AXMGalleryPageComponentProvider {
|
|
|
15148
15303
|
return [
|
|
15149
15304
|
{
|
|
15150
15305
|
key: GALLERY_PAGE_COMPONENT_KEY,
|
|
15151
|
-
loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-
|
|
15306
|
+
loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-Cc2kuwvV.mjs').then((m) => m.AXMGalleryPageComponent),
|
|
15152
15307
|
},
|
|
15153
15308
|
];
|
|
15154
15309
|
}
|
|
@@ -20181,7 +20336,9 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
20181
20336
|
inst.__axpEntityListRefreshPatched = true;
|
|
20182
20337
|
const originalRefresh = inst.refresh.bind(inst);
|
|
20183
20338
|
this.boundDataListRefresh = originalRefresh;
|
|
20339
|
+
const showPlaceholders = inst.showLoadingPlaceholders?.bind(inst);
|
|
20184
20340
|
inst.refresh = () => {
|
|
20341
|
+
showPlaceholders?.();
|
|
20185
20342
|
void (async () => {
|
|
20186
20343
|
if (this.#relatedFilterReloadInProgress) {
|
|
20187
20344
|
// Filters are being (re)applied by the in-progress sync — only re-fetch.
|
|
@@ -20679,7 +20836,11 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
20679
20836
|
const listInstance = this.listWidget()?.instance;
|
|
20680
20837
|
const dataSource = listInstance?.options?.()?.['dataSource'];
|
|
20681
20838
|
const toolbar = this.getValue()?.toolbar;
|
|
20682
|
-
if (!dataSource?.filter
|
|
20839
|
+
if (!dataSource?.filter) {
|
|
20840
|
+
return false;
|
|
20841
|
+
}
|
|
20842
|
+
dataSource.sort?.(...this.toDataSourceSortOptions(toolbar?.sorts));
|
|
20843
|
+
if (!toolbar?.filters?.length) {
|
|
20683
20844
|
return false;
|
|
20684
20845
|
}
|
|
20685
20846
|
dataSource.filter({ filters: toolbar.filters });
|
|
@@ -20867,7 +21028,9 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
20867
21028
|
if (!isMounted) {
|
|
20868
21029
|
return;
|
|
20869
21030
|
}
|
|
20870
|
-
if (changeTracker.isFilterChanged ||
|
|
21031
|
+
if (changeTracker.isFilterChanged ||
|
|
21032
|
+
changeTracker.isSortChanged ||
|
|
21033
|
+
changeTracker.isViewChanged) {
|
|
20871
21034
|
this.pushToolbarFiltersToDataSource();
|
|
20872
21035
|
listInstance.call('refresh');
|
|
20873
21036
|
}
|
|
@@ -23866,6 +24029,9 @@ function createLookupEntityDataSource(config) {
|
|
|
23866
24029
|
return decorateItem(row);
|
|
23867
24030
|
},
|
|
23868
24031
|
load: async (event) => {
|
|
24032
|
+
if (config.shouldQuery && !config.shouldQuery()) {
|
|
24033
|
+
return { items: [], total: 0 };
|
|
24034
|
+
}
|
|
23869
24035
|
const execute = entity.queries?.list?.execute;
|
|
23870
24036
|
if (!execute || typeof execute !== 'function') {
|
|
23871
24037
|
throw new Error(`Entity ${entity.name} does not have a list query`);
|
|
@@ -23941,8 +24107,9 @@ async function loadLookupTreeChildrenCounts(execute, parentKey, parentIds, confi
|
|
|
23941
24107
|
* Lazy tree for hierarchical lookup entities (`parentKey`).
|
|
23942
24108
|
* Roots use `parentKey isEmpty` unless the widget filter already constrains the parent;
|
|
23943
24109
|
* expanding a node loads `parentKey = nodeId`.
|
|
23944
|
-
* `childrenCount` is taken from the row when present
|
|
23945
|
-
*
|
|
24110
|
+
* `childrenCount` is taken from the row when present. Otherwise the row is marked expandable,
|
|
24111
|
+
* unless `prefetchChildrenCount` is set, in which case one `parentKey in ids` query marks
|
|
24112
|
+
* leaves as 0 so no expander is shown.
|
|
23946
24113
|
*/
|
|
23947
24114
|
function createLookupEntityTreeDataSource(config) {
|
|
23948
24115
|
const parentKey = config.entity.parentKey?.trim();
|
|
@@ -23953,6 +24120,9 @@ function createLookupEntityTreeDataSource(config) {
|
|
|
23953
24120
|
const defaultSorts = getLookupEntityDefaultSorts(entity);
|
|
23954
24121
|
const valueField = config.valueField?.trim() || 'id';
|
|
23955
24122
|
return async (nodeId) => {
|
|
24123
|
+
if (config.shouldQuery && !config.shouldQuery()) {
|
|
24124
|
+
return [];
|
|
24125
|
+
}
|
|
23956
24126
|
const execute = entity.queries?.list?.execute;
|
|
23957
24127
|
if (!execute || typeof execute !== 'function') {
|
|
23958
24128
|
throw new Error(`Entity ${entity.name} does not have a list query`);
|
|
@@ -23977,14 +24147,23 @@ function createLookupEntityTreeDataSource(config) {
|
|
|
23977
24147
|
const query = queryFields?.length ? { ...request, fields: queryFields } : request;
|
|
23978
24148
|
const result = await execute(query);
|
|
23979
24149
|
const items = await decorateListItems(result?.items, decorateItem);
|
|
23980
|
-
const unknownParentIds =
|
|
23981
|
-
|
|
23982
|
-
|
|
23983
|
-
|
|
24150
|
+
const unknownParentIds = config.prefetchChildrenCount
|
|
24151
|
+
? items
|
|
24152
|
+
.filter((item) => resolveKnownLookupTreeChildrenCount(item) == null)
|
|
24153
|
+
.map((item) => item[valueField])
|
|
24154
|
+
.filter((id) => id != null)
|
|
24155
|
+
: [];
|
|
23984
24156
|
const fetchedCounts = unknownParentIds.length > 0 ? await loadLookupTreeChildrenCounts(execute, parentKey, unknownParentIds, config) : new Map();
|
|
23985
24157
|
return items.map((item) => {
|
|
23986
24158
|
const key = item[valueField];
|
|
23987
24159
|
const knownCount = resolveKnownLookupTreeChildrenCount(item);
|
|
24160
|
+
if (knownCount == null && !config.prefetchChildrenCount) {
|
|
24161
|
+
const node = { ...item, hasChild: key != null };
|
|
24162
|
+
if (key != null && node[valueField] == null) {
|
|
24163
|
+
node[valueField] = key;
|
|
24164
|
+
}
|
|
24165
|
+
return node;
|
|
24166
|
+
}
|
|
23988
24167
|
const childrenCount = knownCount ?? (key == null ? 0 : (fetchedCounts.get(String(key)) ?? 0));
|
|
23989
24168
|
const node = {
|
|
23990
24169
|
...item,
|
|
@@ -24507,6 +24686,8 @@ class AXPLookupWidgetTablePanelComponent {
|
|
|
24507
24686
|
/** Set when a row command fires so the following row click does not select. */
|
|
24508
24687
|
#skipNextRowSelection;
|
|
24509
24688
|
#totalCount;
|
|
24689
|
+
/** True until the entity list finishes its first fetch for this panel open. */
|
|
24690
|
+
#awaitingEntityRows;
|
|
24510
24691
|
//#endregion
|
|
24511
24692
|
//#region ----- Lifecycle -----
|
|
24512
24693
|
constructor() {
|
|
@@ -24568,13 +24749,23 @@ class AXPLookupWidgetTablePanelComponent {
|
|
|
24568
24749
|
this.#skipNextRowSelection = false;
|
|
24569
24750
|
this.#totalCount = signal(0, /* @ts-ignore */
|
|
24570
24751
|
...(ngDevMode ? [{ debugName: "#totalCount" }] : /* istanbul ignore next */ []));
|
|
24752
|
+
/** True until the entity list finishes its first fetch for this panel open. */
|
|
24753
|
+
this.#awaitingEntityRows = signal(false, /* @ts-ignore */
|
|
24754
|
+
...(ngDevMode ? [{ debugName: "#awaitingEntityRows" }] : /* istanbul ignore next */ []));
|
|
24571
24755
|
this.tableDataSource = new AXDataSource({
|
|
24572
24756
|
pageSize: 1,
|
|
24573
24757
|
key: 'id',
|
|
24574
|
-
load: async () =>
|
|
24575
|
-
|
|
24576
|
-
|
|
24577
|
-
|
|
24758
|
+
load: async () => {
|
|
24759
|
+
const source = this.dataSource();
|
|
24760
|
+
if (this.#loadedItems.length === 0 && (source.isLoading || this.#awaitingEntityRows())) {
|
|
24761
|
+
await watchNextDataSourceLoad(source).promise;
|
|
24762
|
+
}
|
|
24763
|
+
const total = this.#totalCount();
|
|
24764
|
+
return {
|
|
24765
|
+
items: this.#loadedItems,
|
|
24766
|
+
total: total > 0 ? total : this.#loadedItems.length,
|
|
24767
|
+
};
|
|
24768
|
+
},
|
|
24578
24769
|
});
|
|
24579
24770
|
/**
|
|
24580
24771
|
* Source bound to `ax-data-table`. The table only subscribes to `dataSource` in `ngOnInit`,
|
|
@@ -24592,6 +24783,9 @@ class AXPLookupWidgetTablePanelComponent {
|
|
|
24592
24783
|
return header + maxVisible * itemHeight;
|
|
24593
24784
|
}
|
|
24594
24785
|
const total = this.#totalCount();
|
|
24786
|
+
if (this.#awaitingEntityRows() && total === 0) {
|
|
24787
|
+
return header + maxVisible * itemHeight;
|
|
24788
|
+
}
|
|
24595
24789
|
const rows = total > 0 ? total : Math.min(3, maxVisible);
|
|
24596
24790
|
return header + Math.min(rows, maxVisible) * itemHeight;
|
|
24597
24791
|
}, /* @ts-ignore */
|
|
@@ -24640,17 +24834,30 @@ class AXPLookupWidgetTablePanelComponent {
|
|
|
24640
24834
|
return;
|
|
24641
24835
|
}
|
|
24642
24836
|
untracked(() => {
|
|
24643
|
-
this.#
|
|
24837
|
+
this.#awaitingEntityRows.set(true);
|
|
24838
|
+
const hasCachedRows = source.cachedItems.some((item) => item != null);
|
|
24839
|
+
if (hasCachedRows) {
|
|
24840
|
+
this.#applyLoadedItems(source.cachedItems, source.totalCount);
|
|
24841
|
+
}
|
|
24842
|
+
else {
|
|
24843
|
+
this.#loadedItems.length = 0;
|
|
24844
|
+
this.#totalCount.set(0);
|
|
24845
|
+
}
|
|
24644
24846
|
});
|
|
24645
24847
|
const changedSub = source.onChanged.subscribe((event) => {
|
|
24646
24848
|
this.#applyLoadedItems(event.cachedItems, event.totalCount);
|
|
24647
24849
|
});
|
|
24850
|
+
// Same as tree mode: always load when the panel opens (do not rely on cache after close).
|
|
24648
24851
|
queueMicrotask(() => {
|
|
24852
|
+
source.setPage(0);
|
|
24649
24853
|
if (!source.cachedItems.some((item) => item != null)) {
|
|
24650
|
-
|
|
24854
|
+
this.tableDataSource.refresh({ reset: true });
|
|
24651
24855
|
}
|
|
24652
24856
|
});
|
|
24653
|
-
onCleanup(() =>
|
|
24857
|
+
onCleanup(() => {
|
|
24858
|
+
changedSub.unsubscribe();
|
|
24859
|
+
this.#awaitingEntityRows.set(false);
|
|
24860
|
+
});
|
|
24654
24861
|
});
|
|
24655
24862
|
effect((onCleanup) => {
|
|
24656
24863
|
if (this.parentField()) {
|
|
@@ -24712,6 +24919,7 @@ class AXPLookupWidgetTablePanelComponent {
|
|
|
24712
24919
|
this.#loadedItems.length = 0;
|
|
24713
24920
|
this.#loadedItems.push(...cachedItems.filter((item) => item != null));
|
|
24714
24921
|
this.#totalCount.set(totalCount);
|
|
24922
|
+
this.#awaitingEntityRows.set(false);
|
|
24715
24923
|
this.tableDataSource.config.pageSize = Math.max(this.#loadedItems.length, 1);
|
|
24716
24924
|
this.tableDataSource.refresh({ reset: true });
|
|
24717
24925
|
}
|
|
@@ -24994,6 +25202,9 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
|
|
|
24994
25202
|
}
|
|
24995
25203
|
this.resolvedTableDataSource().refresh({ reset: true });
|
|
24996
25204
|
}
|
|
25205
|
+
isPanelExpanded() {
|
|
25206
|
+
return this.expanded();
|
|
25207
|
+
}
|
|
24997
25208
|
/** Clears the selection. Used by projected `ax-clear-button`. */
|
|
24998
25209
|
reset(_isUserInteraction = false) {
|
|
24999
25210
|
if (this.disabled() || this.readonly()) {
|
|
@@ -25025,7 +25236,10 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
|
|
|
25025
25236
|
this.highlightQuery.set(query);
|
|
25026
25237
|
if (!query) {
|
|
25027
25238
|
source.clearFilter();
|
|
25028
|
-
|
|
25239
|
+
// List load is gated while the popover is closed; refresh here would cache empty rows.
|
|
25240
|
+
if (this.expanded()) {
|
|
25241
|
+
source.refresh();
|
|
25242
|
+
}
|
|
25029
25243
|
return;
|
|
25030
25244
|
}
|
|
25031
25245
|
if (this.parentField() && this.treeDataSource() && typeof this.treeDataSource() === 'function') {
|
|
@@ -25098,7 +25312,7 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
|
|
|
25098
25312
|
{ provide: AXComponent, useExisting: AXPLookupWidgetTableHostComponent },
|
|
25099
25313
|
{ provide: AXClearableComponent, useExisting: AXPLookupWidgetTableHostComponent },
|
|
25100
25314
|
{ provide: AXValuableComponent, useExisting: AXPLookupWidgetTableHostComponent },
|
|
25101
|
-
], viewQueries: [{ propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-solid ax-default ax-lookup-trigger w-full\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: valueItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!searchable()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !searchable()\"\n [attr.inputmode]=\"searchable() ? null : 'none'\"\n [value]=\"triggerInputValue()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <ng-content select=\"ax-suffix\"></ng-content>\n\n <button type=\"button\" class=\"ax-general-button-icon\" tabindex=\"-1\" [disabled]=\"disabled() || readonly()\">\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n\n <ng-content select=\"ax-validation-rule\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"expanded.set(false)\">\n <axp-lookup-widget-table-panel\n
|
|
25315
|
+
], viewQueries: [{ propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-solid ax-default ax-lookup-trigger w-full\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: valueItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!searchable()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !searchable()\"\n [attr.inputmode]=\"searchable() ? null : 'none'\"\n [value]=\"triggerInputValue()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <ng-content select=\"ax-suffix\"></ng-content>\n\n <button type=\"button\" class=\"ax-general-button-icon\" tabindex=\"-1\" [disabled]=\"disabled() || readonly()\">\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n\n <ng-content select=\"ax-validation-rule\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"expanded.set(false)\">\n @if (expanded()) {\n <axp-lookup-widget-table-panel\n [dataSource]=\"resolvedTableDataSource()\"\n [panelOpen]=\"true\"\n [columns]=\"columns()\"\n [highlightText]=\"highlightQuery()\"\n [valueField]=\"valueField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"parentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [rowActions]=\"rowActions()\"\n (itemClick)=\"handleTableItemClick($event)\"\n (rowAction)=\"handleTableRowAction($event)\"\n ></axp-lookup-widget-table-panel>\n }\n </div>\n</ax-popover>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .ax-editor-container{justify-content:flex-start;gap:var(--spacing, .25rem)}:host .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}:host .ax-lookup-value{position:relative;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}:host .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-input-overlay{position:absolute;inset:0;z-index:10;margin:0!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0!important;color:transparent;caret-color:transparent}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "restoreFocusOnClose", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "component", type: AXPLookupWidgetTablePanelComponent, selector: "axp-lookup-widget-table-panel", inputs: ["dataSource", "columns", "valueField", "disabledField", "selectedValues", "parentField", "hasChildrenField", "itemHeight", "maxVisibleItems", "alternate", "highlightText", "rowActions", "panelOpen"], outputs: ["itemClick", "rowAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25102
25316
|
}
|
|
25103
25317
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetTableHostComponent, decorators: [{
|
|
25104
25318
|
type: Component,
|
|
@@ -25108,7 +25322,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
25108
25322
|
{ provide: AXComponent, useExisting: AXPLookupWidgetTableHostComponent },
|
|
25109
25323
|
{ provide: AXClearableComponent, useExisting: AXPLookupWidgetTableHostComponent },
|
|
25110
25324
|
{ provide: AXValuableComponent, useExisting: AXPLookupWidgetTableHostComponent },
|
|
25111
|
-
], template: "<div\n #origin\n class=\"ax-editor-container ax-solid ax-default ax-lookup-trigger w-full\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: valueItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!searchable()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !searchable()\"\n [attr.inputmode]=\"searchable() ? null : 'none'\"\n [value]=\"triggerInputValue()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <ng-content select=\"ax-suffix\"></ng-content>\n\n <button type=\"button\" class=\"ax-general-button-icon\" tabindex=\"-1\" [disabled]=\"disabled() || readonly()\">\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n\n <ng-content select=\"ax-validation-rule\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"expanded.set(false)\">\n <axp-lookup-widget-table-panel\n
|
|
25325
|
+
], template: "<div\n #origin\n class=\"ax-editor-container ax-solid ax-default ax-lookup-trigger w-full\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: valueItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!searchable()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !searchable()\"\n [attr.inputmode]=\"searchable() ? null : 'none'\"\n [value]=\"triggerInputValue()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <ng-content select=\"ax-suffix\"></ng-content>\n\n <button type=\"button\" class=\"ax-general-button-icon\" tabindex=\"-1\" [disabled]=\"disabled() || readonly()\">\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n\n <ng-content select=\"ax-validation-rule\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"expanded.set(false)\">\n @if (expanded()) {\n <axp-lookup-widget-table-panel\n [dataSource]=\"resolvedTableDataSource()\"\n [panelOpen]=\"true\"\n [columns]=\"columns()\"\n [highlightText]=\"highlightQuery()\"\n [valueField]=\"valueField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"parentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [rowActions]=\"rowActions()\"\n (itemClick)=\"handleTableItemClick($event)\"\n (rowAction)=\"handleTableRowAction($event)\"\n ></axp-lookup-widget-table-panel>\n }\n </div>\n</ax-popover>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .ax-editor-container{justify-content:flex-start;gap:var(--spacing, .25rem)}:host .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}:host .ax-lookup-value{position:relative;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}:host .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-input-overlay{position:absolute;inset:0;z-index:10;margin:0!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0!important;color:transparent;caret-color:transparent}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
25112
25326
|
}], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], caption: [{ type: i0.Input, args: [{ isSignal: true, alias: "caption", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], treeDataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeDataSource", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], parentField: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentField", required: false }] }], hasChildrenField: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasChildrenField", required: false }] }], searchFields: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchFields", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueItems", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], selectedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTemplate", required: false }] }], rowActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowActions", required: false }] }], onItemSelected: [{ type: i0.Output, args: ["onItemSelected"] }], triggerSearchInput: [{ type: i0.ViewChild, args: ['triggerSearchInput', { isSignal: true }] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }] } });
|
|
25113
25327
|
|
|
25114
25328
|
//#region ----- Imports -----
|
|
@@ -25167,6 +25381,8 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25167
25381
|
this.hostValueCommitSuppressDepth = 0;
|
|
25168
25382
|
/** Latest {@link findByValue} run; older in-flight runs must not overwrite its result. */
|
|
25169
25383
|
this.findByValueRequestId = 0;
|
|
25384
|
+
/** Allows explicit {@link refresh} to load list data while the popover is closed. */
|
|
25385
|
+
this.forceLookupListQueryDepth = 0;
|
|
25170
25386
|
this.lastEditorLocaleKey = this.resolveEditorLocaleKey();
|
|
25171
25387
|
//#endregion
|
|
25172
25388
|
//#region ----- Computed Properties -----
|
|
@@ -25197,6 +25413,9 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25197
25413
|
/** When false, an empty cascade filter does not lock the editor. Explicit `disabled` is independent. */
|
|
25198
25414
|
this.waitForCascade = computed(() => this.options()['waitForCascade'] ?? true, /* @ts-ignore */
|
|
25199
25415
|
...(ngDevMode ? [{ debugName: "waitForCascade" }] : /* istanbul ignore next */ []));
|
|
25416
|
+
/** ax-tree-view only lazy-loads nodes with `childrenCount > 0`, so non-table tree modes always prefetch. */
|
|
25417
|
+
this.prefetchChildrenCount = computed(() => this.options()['prefetchChildrenCount'] === true || !this.isTableLookupMode(), /* @ts-ignore */
|
|
25418
|
+
...(ngDevMode ? [{ debugName: "prefetchChildrenCount" }] : /* istanbul ignore next */ []));
|
|
25200
25419
|
/** Parent cascade with an empty value. Structurally empty filters and top-level not-in stay enabled. */
|
|
25201
25420
|
this.hasPendingCascadeFilter = computed(() => {
|
|
25202
25421
|
if (this.filterMode() || !this.waitForCascade()) {
|
|
@@ -25323,6 +25542,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25323
25542
|
valueField,
|
|
25324
25543
|
getQueryFields: () => this.lookupQueryFields(),
|
|
25325
25544
|
getCustomFilter: () => this.customFilter(),
|
|
25545
|
+
shouldQuery: () => this.shouldRunLookupListQuery(),
|
|
25326
25546
|
transformFilter: (filter) => this.filterOperatorMiddleware.transformFilter(filter),
|
|
25327
25547
|
decorateItem: (item) => this.decorateLookupItem(item),
|
|
25328
25548
|
byKey: this.lookupByKeyCache.wrap(entityKey, (id) => {
|
|
@@ -25348,6 +25568,8 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25348
25568
|
valueField: this.valueField(),
|
|
25349
25569
|
getQueryFields: () => this.lookupQueryFields(),
|
|
25350
25570
|
getCustomFilter: () => this.customFilter(),
|
|
25571
|
+
shouldQuery: () => this.shouldRunLookupListQuery(),
|
|
25572
|
+
prefetchChildrenCount: this.prefetchChildrenCount(),
|
|
25351
25573
|
transformFilter: (filter) => this.filterOperatorMiddleware.transformFilter(filter),
|
|
25352
25574
|
decorateItem: (item) => this.decorateLookupItem(item),
|
|
25353
25575
|
}) ?? EMPTY_TREE_DATA_SOURCE);
|
|
@@ -25480,7 +25702,9 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25480
25702
|
}
|
|
25481
25703
|
untracked(() => {
|
|
25482
25704
|
if (this.isTableLookupMode()) {
|
|
25483
|
-
this.tableLookupHost()?.
|
|
25705
|
+
if (this.tableLookupHost()?.isPanelExpanded()) {
|
|
25706
|
+
this.tableLookupHost()?.refreshTableData();
|
|
25707
|
+
}
|
|
25484
25708
|
return;
|
|
25485
25709
|
}
|
|
25486
25710
|
this.entityDataSource()?.refresh();
|
|
@@ -25565,6 +25789,16 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25565
25789
|
/** Value can be bound before the entity definition resolves; hydrate the selection label once it does. */
|
|
25566
25790
|
#efEntityHydration;
|
|
25567
25791
|
#filterEffect;
|
|
25792
|
+
/** Multi-column-tree loads only while the lookup popover is open. */
|
|
25793
|
+
shouldRunLookupListQuery() {
|
|
25794
|
+
if (!this.isTableLookupMode()) {
|
|
25795
|
+
return true;
|
|
25796
|
+
}
|
|
25797
|
+
if (this.forceLookupListQueryDepth > 0) {
|
|
25798
|
+
return true;
|
|
25799
|
+
}
|
|
25800
|
+
return this.tableLookupHost()?.isPanelExpanded() ?? false;
|
|
25801
|
+
}
|
|
25568
25802
|
#focusEffect;
|
|
25569
25803
|
//#endregion
|
|
25570
25804
|
//#region ----- Event Handlers -----
|
|
@@ -26066,9 +26300,15 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
26066
26300
|
//#region ----- Component Methods -----
|
|
26067
26301
|
async refresh() {
|
|
26068
26302
|
await this.findByValue();
|
|
26069
|
-
this.
|
|
26070
|
-
|
|
26071
|
-
|
|
26303
|
+
this.forceLookupListQueryDepth++;
|
|
26304
|
+
try {
|
|
26305
|
+
this.entityDataSource()?.refresh();
|
|
26306
|
+
this.tableLookupHost()?.refreshTableData({ immediate: true });
|
|
26307
|
+
this.lookup()?.seedItems(this.selectedItems());
|
|
26308
|
+
}
|
|
26309
|
+
finally {
|
|
26310
|
+
this.forceLookupListQueryDepth--;
|
|
26311
|
+
}
|
|
26072
26312
|
}
|
|
26073
26313
|
clear() {
|
|
26074
26314
|
this.selectedItems.set([]);
|
|
@@ -33370,7 +33610,7 @@ class AXPEntityModule {
|
|
|
33370
33610
|
},
|
|
33371
33611
|
{
|
|
33372
33612
|
key: 'Entity:Bulk',
|
|
33373
|
-
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-
|
|
33613
|
+
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-BRN0AcG-.mjs').then((c) => c.AXPBulkEntityCommand),
|
|
33374
33614
|
},
|
|
33375
33615
|
{
|
|
33376
33616
|
key: 'Entity:OpenList',
|
|
@@ -33532,7 +33772,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
33532
33772
|
},
|
|
33533
33773
|
{
|
|
33534
33774
|
key: 'Entity:Bulk',
|
|
33535
|
-
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-
|
|
33775
|
+
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-BRN0AcG-.mjs').then((c) => c.AXPBulkEntityCommand),
|
|
33536
33776
|
},
|
|
33537
33777
|
{
|
|
33538
33778
|
key: 'Entity:OpenList',
|
|
@@ -33857,5 +34097,5 @@ function detectEntityChanges(oldObj, newObj) {
|
|
|
33857
34097
|
* Generated bundle index. Do not edit.
|
|
33858
34098
|
*/
|
|
33859
34099
|
|
|
33860
|
-
export { AXPEntityListViewCardFieldViewModel as $, AXPEntityDefinitionRegistryService as A, AXPEntityCategoryWidget as B, AXPEntityCategoryWidgetColumnComponent as C, AXPEntityCategoryWidgetEditComponent as D, AXPEntityCategoryWidgetViewComponent as E, AXPEntityCommandTriggerViewModel as F, AXPEntityCreateViewElementViewModel as G, AXPEntityCreateViewModelFactory as H, AXPEntityCreateViewSectionViewModel as I, AXPEntityDataProvider as J, AXPEntityDataProviderImpl as K, AXPEntityDataSelectorRowActionsService as L, AXPEntityDataSelectorService as M, AXPEntityDefinitionProviderWidget as N, AXPEntityDefinitionProviderWidgetEditComponent as O, AXPEntityDeletePerformService as P, AXPEntityDetailListViewModel as Q, AXPEntityDetailPopoverComponent as R, AXPEntityDetailPopoverService as S, AXPEntityDetailViewModelFactory as T, AXPEntityDetailViewModelResolver as U, AXPEntityEventDispatcherService as V, AXPEntityFormBuilderService as W, AXPEntityLifecycleHookKeys as X, AXPEntityListPersistenceModeDefault as Y, AXPEntityListTableService as Z, AXPEntityListToolbarService as _, showOperationResultToast as a, AXPUpdateEntityStatusCommand as a$, AXPEntityListViewColumnViewModel as a0, AXPEntityListViewModelFactory as a1, AXPEntityListViewModelResolver as a2, AXPEntityListWidget as a3, AXPEntityListWidgetViewComponent as a4, AXPEntityMasterCreateViewModel as a5, AXPEntityMasterListCardSelectActionName as a6, AXPEntityMasterListViewModel as a7, AXPEntityMasterListViewQueryViewModel as a8, AXPEntityMasterSingleElementViewModel as a9, AXPLookupWidget as aA, AXPLookupWidgetColumnComponent as aB, AXPLookupWidgetEditComponent as aC, AXPLookupWidgetViewComponent as aD, AXPMiddlewareAbortError as aE, AXPMiddlewareEntityStorageService as aF, AXPMultiSourceDefinitionProviderContext as aG, AXPMultiSourceDefinitionProviderService as aH, AXPMultiSourceFederatedSearchService as aI, AXPMultiSourceSelectorComponent as aJ, AXPMultiSourceSelectorService as aK, AXPMultiSourceSelectorWidget as aL, AXPMultiSourceSelectorWidgetColumnComponent as aM, AXPMultiSourceSelectorWidgetEditComponent as aN, AXPMultiSourceSelectorWidgetViewComponent as aO, AXPMultiSourceType as aP, AXPOpenEntityDetailsCommand as aQ, AXPOpenEntityListCommand as aR, AXPRelatedColumnEnrichmentService as aS, AXPRelatedColumnMetadataResolver as aT, AXPSelectorStructureWidget as aU, AXPSelectorStructureWidgetColumnComponent as aV, AXPSelectorStructureWidgetEditComponent as aW, AXPSelectorStructureWidgetViewComponent as aX, AXPShowFileUploaderPopupCommand as aY, AXPTruncatedBreadcrumbComponent as aZ, AXPUpdateEntityCommand as a_, AXPEntityMasterSingleViewGroupViewModel as aa, AXPEntityMasterSingleViewModel as ab, AXPEntityMasterUpdateElementViewModel as ac, AXPEntityMasterUpdateViewModel as ad, AXPEntityMasterUpdateViewModelFactory as ae, AXPEntityMiddlewareSkipContext as af, AXPEntityModule as ag, AXPEntityPreloadFiltersContainerComponent as ah, AXPEntityPreloadFiltersViewModel as ai, AXPEntityPreloadFiltersViewModelResolver as aj, AXPEntityResolver as ak, AXPEntityRuntimeAccessorService as al, AXPEntityService as am, AXPEntityStorageService as an, AXPEntityUpdateViewSectionViewModel as ao, AXPFileListComponent as ap, AXPFileUploaderLoadFilesQuery as aq, AXPFileUploaderSaveFilesCommand as ar, AXPFileUploaderWidget as as, AXPFileUploaderWidgetColumnComponent as at, AXPFileUploaderWidgetEditComponent as au, AXPFileUploaderWidgetService as av, AXPFileUploaderWidgetViewComponent as aw, AXPGetEntityDetailsQuery as ax, AXPLayoutOrderingConfigService as ay, AXPLookupByKeyCacheService as az, buildSelectedIdsFilter as b, defaultMultiLanguageMiddleware as b$, AXPViewEntityDetailsCommand as b0, AXP_APPEARANCE_SECTION_ORDER as b1, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY as b2, AXP_CLASSIFICATION_SECTION_ORDER as b3, AXP_CLIENT_LOCAL_DEFAULT_MAX_ITEMS as b4, AXP_CLIENT_LOCAL_PLUGIN_NAME as b5, AXP_DATA_SEEDER_TOKEN as b6, AXP_ENTITY_ACTION_PLUGIN as b7, AXP_ENTITY_CONFIG_TOKEN as b8, AXP_ENTITY_DEFINITION_LOADER as b9, axpDeleteEntityCommandDefinition as bA, axpOpenEntityListCommandDefinition as bB, axpRunEntityListPageContextAction as bC, axpShowFileUploaderPopupCommandDefinition as bD, axpUpdateEntityStatusCommandDefinition as bE, buildDataSourceTraceSnapshot as bF, canPersistEntityListState as bG, clientLocalPlugin as bH, cloneLayoutArrays as bI, columnOrderingMiddleware as bJ, columnOrderingMiddlewareProvider as bK, columnWidthMiddleware as bL, columnWidthMiddlewareProvider as bM, committedAttachments as bN, composeEntityMiddlewares as bO, composeEntityStorageMiddlewares as bP, computeEntityAggregates as bQ, configureEntityListColumnsSettingsMigrateDrop as bR, configureEntityListColumnsSettingsVersion as bS, createColumnOrderingMiddlewareProvider as bT, createEntityCardDisplayScope as bU, createEntityCardLogicScope as bV, createEntityMiddlewareContext as bW, createEntityStorageContext as bX, createLayoutOrderingMiddlewareProvider as bY, defaultCardLayoutMiddleware as bZ, defaultCardLayoutMiddlewareProvider as b_, AXP_ENTITY_MIDDLEWARE as ba, AXP_ENTITY_MODIFIER as bb, AXP_ENTITY_STORAGE_MIDDLEWARE as bc, AXP_LOOKUP_FILTER_DEFAULT_OPERATOR as bd, AXP_MULTI_SOURCE_DEFINITION_PROVIDER as be, DEFAULT_COLUMN_ORDER as bf, DEFAULT_GROUP_SPAN_RULES as bg, DEFAULT_PAIR_SPAN_RULES as bh, DEFAULT_PROPERTY_ORDER as bi, DEFAULT_SECTION_ORDER as bj, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE as bk, ENTITY_LIST_LAYOUT_META as bl, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY as bm, ENTITY_MASTER_LIST_TRACE_NS as bn, EntityBuilder as bo, EntityDataAccessor as bp, GALLERY_PAGE_COMPONENT_KEY as bq, TREE_CHILDREN_QUERY_TAKE as br, actionExists as bs, applyDataSourcePagingWithoutLoad as bt, attachmentFieldCount as bu, attachmentsPlugin as bv, attachmentsSemanticallyEqual as bw, axpBuildEntityListPageContextSnapshot as bx, axpCreateEntityAiToolInputDefaults as by, axpCreateEntityCommandDefinition as bz, readLiveAttachmentValue as c, provideEntityMiddlewareBridge as c$, defaultMultiLanguageMiddlewareProvider as c0, defaultSortPresetsMiddleware as c1, defaultSortPresetsMiddlewareProvider as c2, detectEntityChanges as c3, dispatchEntityModifiedSideEffects as c4, ensureHierarchicalRootFilter as c5, ensureLayoutPropertyView as c6, ensureLayoutSection as c7, ensureListActions as c8, entityCreateBridgeMiddleware as c9, getEntityListColumnsSettingsVersion as cA, getEntityListRowId as cB, getMasterInterfacePropertySortKey as cC, hasFileUploaderTitleOrDescriptionFields as cD, hydrateAttachmentFieldToFileList as cE, isAXPMiddlewareAbortError as cF, isAttachmentFieldPresentOnRow as cG, isAttachmentListEntry as cH, isAttachmentStorageRef as cI, isCategoryEntity as cJ, isCategoryFilter as cK, isFileListItem as cL, isFileUploaderEditDialogAuto as cM, isLegacyEntityDataSelectorOptions as cN, layoutOrderingMiddlewareFactory as cO, layoutOrderingMiddlewareProvider as cP, mapEntityStorageErrorToCommandResult as cQ, mapLegacyEntityDataSelectorOptions as cR, mergeEntityListViewAndPersistedFilters as cS, normalizeEntityCardHeaderDisplayValue as cT, normalizeEntityDataSelectorColumnSpecs as cU, normalizeEntityDataSelectorOptions as cV, normalizeEntityFieldToFileList as cW, normalizeEntityListPersistenceMode as cX, normalizeListPaging as cY, prefetchClientLocalRelated as cZ, provideEntity as c_, entityDeleteBridgeMiddleware as ca, entityGetOneBridgeMiddleware as cb, entityListInstanceCurrentViewPath as cc, entityListInstanceFilterPath as cd, entityListStylingRulesPath as ce, entityQueryBridgeMiddleware as cf, entityStorageCreateBridgeMiddleware as cg, entityStorageDeleteBridgeMiddleware as ch, entityStorageGetOneBridgeMiddleware as ci, entityStorageQueryBridgeMiddleware as cj, entityStorageUpdateBridgeMiddleware as ck, entityUpdateBridgeMiddleware as cl, eventDispatchMiddleware as cm, filterEntityMiddlewares as cn, filterEntityStorageMiddlewares as co, filterSortEntityRows as cp, filterTouchesParentKey as cq, findEntityListRowDataInTree as cr, fingerprintAttachmentItem as cs, fingerprintAttachments as ct, fireEntityLifecycleHook as cu, formatLookupItemDisplay as cv, formatLookupItemDisplayAsync as cw, galleryPlugin as cx, getDataSourcePageIndex as cy, getEntityListColumnsSettingsMigrateDrop as cz, saveAttachmentsThroughEntityUpdate as d, provideEntityRealtimeHandlers as d0, provideEntityStorageMiddlewareBridge as d1, provideLocalEntityCatalog as d2, readPersistedEntityListInstanceCurrentView as d3, readPersistedEntityListInstanceFilters as d4, readPersistedEntityListStylingRules as d5, resetPagingForTreeChildrenLoad as d6, resolveAttachmentFieldPath as d7, resolveEntityCardBadgeColorValue as d8, resolveEntityCardHeaderValue as d9, resolveEntityMasterFieldStylingClass as da, resolveEntityMasterRecordStylingClass as db, resolveEntityMasterStylingClass as dc, resolveEntityPluginDetailPageOrder as dd, resolveFileUploaderEditDialog as de, resolveFileUploaderEntityScope as df, resolveLookupDisplayField as dg, resolveLookupDisplayTemplate as dh, resolveLookupEntityCacheKey as di, resolveLookupEntityKey as dj, resolveMasterInterfacePropertyOrder as dk, restoreEntityListExpandedRows as dl, runEntityMiddlewarePipeline as dm, runEntityQuery as dn, runEntityStorageMiddlewarePipeline as dp, searchResultDescriptionMiddleware as dq, searchResultDescriptionMiddlewareProvider as dr, shouldLoadEntityListStateFromStorage as ds, shouldResetEntityListStateOnRouteEntry as dt, traceEntityMasterList as du, attachmentNeedsHydration as e, ATTACHMENTS_PAGE_COMPONENT_KEY as f, AXMEntityCrudService as g, AXMEntityCrudServiceImpl as h, AXPCategoryTreeService as i, AXPClientLocalPluginModule as j, AXPCreateEntityCommand as k, AXPDataSeederService as l, AXPDeleteEntityCommand as m, newBulkExecutionId as n, AXPDomainQueryEntityDefinitionLoader as o, persistedAttachments as p, AXPEditFileUploaderCommand as q, resolveBulkFailureBody as r, settleAfterLoadingDialog as s, AXPEntityBulkPatchPerformService as t, AXPEntityCardComponent as u, AXPEntityCardFieldsResolver as v, watchBulkProgress as w, AXPEntityCardSelectActionName as x, AXPEntityCardSkeletonComponent as y, AXPEntityCategoryTreeSelectorComponent as z };
|
|
33861
|
-
//# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-
|
|
34100
|
+
export { AXPEntityListViewCardFieldViewModel as $, AXPEntityDefinitionRegistryService as A, AXPEntityCategoryWidget as B, AXPEntityCategoryWidgetColumnComponent as C, AXPEntityCategoryWidgetEditComponent as D, AXPEntityCategoryWidgetViewComponent as E, AXPEntityCommandTriggerViewModel as F, AXPEntityCreateViewElementViewModel as G, AXPEntityCreateViewModelFactory as H, AXPEntityCreateViewSectionViewModel as I, AXPEntityDataProvider as J, AXPEntityDataProviderImpl as K, AXPEntityDataSelectorRowActionsService as L, AXPEntityDataSelectorService as M, AXPEntityDefinitionProviderWidget as N, AXPEntityDefinitionProviderWidgetEditComponent as O, AXPEntityDeletePerformService as P, AXPEntityDetailListViewModel as Q, AXPEntityDetailPopoverComponent as R, AXPEntityDetailPopoverService as S, AXPEntityDetailViewModelFactory as T, AXPEntityDetailViewModelResolver as U, AXPEntityEventDispatcherService as V, AXPEntityFormBuilderService as W, AXPEntityLifecycleHookKeys as X, AXPEntityListPersistenceModeDefault as Y, AXPEntityListTableService as Z, AXPEntityListToolbarService as _, showOperationResultToast as a, AXPUpdateEntityStatusCommand as a$, AXPEntityListViewColumnViewModel as a0, AXPEntityListViewModelFactory as a1, AXPEntityListViewModelResolver as a2, AXPEntityListWidget as a3, AXPEntityListWidgetViewComponent as a4, AXPEntityMasterCreateViewModel as a5, AXPEntityMasterListCardSelectActionName as a6, AXPEntityMasterListViewModel as a7, AXPEntityMasterListViewQueryViewModel as a8, AXPEntityMasterSingleElementViewModel as a9, AXPLookupWidget as aA, AXPLookupWidgetColumnComponent as aB, AXPLookupWidgetEditComponent as aC, AXPLookupWidgetViewComponent as aD, AXPMiddlewareAbortError as aE, AXPMiddlewareEntityStorageService as aF, AXPMultiSourceDefinitionProviderContext as aG, AXPMultiSourceDefinitionProviderService as aH, AXPMultiSourceFederatedSearchService as aI, AXPMultiSourceSelectorComponent as aJ, AXPMultiSourceSelectorService as aK, AXPMultiSourceSelectorWidget as aL, AXPMultiSourceSelectorWidgetColumnComponent as aM, AXPMultiSourceSelectorWidgetEditComponent as aN, AXPMultiSourceSelectorWidgetViewComponent as aO, AXPMultiSourceType as aP, AXPOpenEntityDetailsCommand as aQ, AXPOpenEntityListCommand as aR, AXPRelatedColumnEnrichmentService as aS, AXPRelatedColumnMetadataResolver as aT, AXPSelectorStructureWidget as aU, AXPSelectorStructureWidgetColumnComponent as aV, AXPSelectorStructureWidgetEditComponent as aW, AXPSelectorStructureWidgetViewComponent as aX, AXPShowFileUploaderPopupCommand as aY, AXPTruncatedBreadcrumbComponent as aZ, AXPUpdateEntityCommand as a_, AXPEntityMasterSingleViewGroupViewModel as aa, AXPEntityMasterSingleViewModel as ab, AXPEntityMasterUpdateElementViewModel as ac, AXPEntityMasterUpdateViewModel as ad, AXPEntityMasterUpdateViewModelFactory as ae, AXPEntityMiddlewareSkipContext as af, AXPEntityModule as ag, AXPEntityPreloadFiltersContainerComponent as ah, AXPEntityPreloadFiltersViewModel as ai, AXPEntityPreloadFiltersViewModelResolver as aj, AXPEntityResolver as ak, AXPEntityRuntimeAccessorService as al, AXPEntityService as am, AXPEntityStorageService as an, AXPEntityUpdateViewSectionViewModel as ao, AXPFileListComponent as ap, AXPFileUploaderLoadFilesQuery as aq, AXPFileUploaderSaveFilesCommand as ar, AXPFileUploaderWidget as as, AXPFileUploaderWidgetColumnComponent as at, AXPFileUploaderWidgetEditComponent as au, AXPFileUploaderWidgetService as av, AXPFileUploaderWidgetViewComponent as aw, AXPGetEntityDetailsQuery as ax, AXPLayoutOrderingConfigService as ay, AXPLookupByKeyCacheService as az, buildSelectedIdsFilter as b, defaultMultiLanguageMiddleware as b$, AXPViewEntityDetailsCommand as b0, AXP_APPEARANCE_SECTION_ORDER as b1, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY as b2, AXP_CLASSIFICATION_SECTION_ORDER as b3, AXP_CLIENT_LOCAL_DEFAULT_MAX_ITEMS as b4, AXP_CLIENT_LOCAL_PLUGIN_NAME as b5, AXP_DATA_SEEDER_TOKEN as b6, AXP_ENTITY_ACTION_PLUGIN as b7, AXP_ENTITY_CONFIG_TOKEN as b8, AXP_ENTITY_DEFINITION_LOADER as b9, axpDeleteEntityCommandDefinition as bA, axpOpenEntityListCommandDefinition as bB, axpRunEntityListPageContextAction as bC, axpShowFileUploaderPopupCommandDefinition as bD, axpUpdateEntityStatusCommandDefinition as bE, buildDataSourceTraceSnapshot as bF, canPersistEntityListState as bG, clientLocalPlugin as bH, cloneLayoutArrays as bI, columnOrderingMiddleware as bJ, columnOrderingMiddlewareProvider as bK, columnWidthMiddleware as bL, columnWidthMiddlewareProvider as bM, committedAttachments as bN, composeEntityMiddlewares as bO, composeEntityStorageMiddlewares as bP, computeEntityAggregates as bQ, configureEntityListColumnsSettingsMigrateDrop as bR, configureEntityListColumnsSettingsVersion as bS, createColumnOrderingMiddlewareProvider as bT, createEntityCardDisplayScope as bU, createEntityCardLogicScope as bV, createEntityMiddlewareContext as bW, createEntityStorageContext as bX, createLayoutOrderingMiddlewareProvider as bY, defaultCardLayoutMiddleware as bZ, defaultCardLayoutMiddlewareProvider as b_, AXP_ENTITY_MIDDLEWARE as ba, AXP_ENTITY_MODIFIER as bb, AXP_ENTITY_STORAGE_MIDDLEWARE as bc, AXP_LOOKUP_FILTER_DEFAULT_OPERATOR as bd, AXP_MULTI_SOURCE_DEFINITION_PROVIDER as be, DEFAULT_COLUMN_ORDER as bf, DEFAULT_GROUP_SPAN_RULES as bg, DEFAULT_PAIR_SPAN_RULES as bh, DEFAULT_PROPERTY_ORDER as bi, DEFAULT_SECTION_ORDER as bj, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE as bk, ENTITY_LIST_LAYOUT_META as bl, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY as bm, ENTITY_MASTER_LIST_TRACE_NS as bn, EntityBuilder as bo, EntityDataAccessor as bp, GALLERY_PAGE_COMPONENT_KEY as bq, TREE_CHILDREN_QUERY_TAKE as br, actionExists as bs, applyDataSourcePagingWithoutLoad as bt, attachmentFieldCount as bu, attachmentsPlugin as bv, attachmentsSemanticallyEqual as bw, axpBuildEntityListPageContextSnapshot as bx, axpCreateEntityAiToolInputDefaults as by, axpCreateEntityCommandDefinition as bz, readLiveAttachmentValue as c, provideEntityMiddlewareBridge as c$, defaultMultiLanguageMiddlewareProvider as c0, defaultSortPresetsMiddleware as c1, defaultSortPresetsMiddlewareProvider as c2, detectEntityChanges as c3, dispatchEntityModifiedSideEffects as c4, ensureHierarchicalRootFilter as c5, ensureLayoutPropertyView as c6, ensureLayoutSection as c7, ensureListActions as c8, entityCreateBridgeMiddleware as c9, getEntityListColumnsSettingsVersion as cA, getEntityListRowId as cB, getMasterInterfacePropertySortKey as cC, hasFileUploaderTitleOrDescriptionFields as cD, hydrateAttachmentFieldToFileList as cE, isAXPMiddlewareAbortError as cF, isAttachmentFieldPresentOnRow as cG, isAttachmentListEntry as cH, isAttachmentStorageRef as cI, isCategoryEntity as cJ, isCategoryFilter as cK, isFileListItem as cL, isFileUploaderEditDialogAuto as cM, isLegacyEntityDataSelectorOptions as cN, layoutOrderingMiddlewareFactory as cO, layoutOrderingMiddlewareProvider as cP, mapEntityStorageErrorToCommandResult as cQ, mapLegacyEntityDataSelectorOptions as cR, mergeEntityListViewAndPersistedFilters as cS, normalizeEntityCardHeaderDisplayValue as cT, normalizeEntityDataSelectorColumnSpecs as cU, normalizeEntityDataSelectorOptions as cV, normalizeEntityFieldToFileList as cW, normalizeEntityListPersistenceMode as cX, normalizeListPaging as cY, prefetchClientLocalRelated as cZ, provideEntity as c_, entityDeleteBridgeMiddleware as ca, entityGetOneBridgeMiddleware as cb, entityListInstanceCurrentViewPath as cc, entityListInstanceFilterPath as cd, entityListStylingRulesPath as ce, entityQueryBridgeMiddleware as cf, entityStorageCreateBridgeMiddleware as cg, entityStorageDeleteBridgeMiddleware as ch, entityStorageGetOneBridgeMiddleware as ci, entityStorageQueryBridgeMiddleware as cj, entityStorageUpdateBridgeMiddleware as ck, entityUpdateBridgeMiddleware as cl, eventDispatchMiddleware as cm, filterEntityMiddlewares as cn, filterEntityStorageMiddlewares as co, filterSortEntityRows as cp, filterTouchesParentKey as cq, findEntityListRowDataInTree as cr, fingerprintAttachmentItem as cs, fingerprintAttachments as ct, fireEntityLifecycleHook as cu, formatLookupItemDisplay as cv, formatLookupItemDisplayAsync as cw, galleryPlugin as cx, getDataSourcePageIndex as cy, getEntityListColumnsSettingsMigrateDrop as cz, saveAttachmentsThroughEntityUpdate as d, provideEntityRealtimeHandlers as d0, provideEntityStorageMiddlewareBridge as d1, provideLocalEntityCatalog as d2, readPersistedEntityListInstanceCurrentView as d3, readPersistedEntityListInstanceFilters as d4, readPersistedEntityListStylingRules as d5, resetPagingForTreeChildrenLoad as d6, resolveAttachmentFieldPath as d7, resolveEntityCardBadgeColorValue as d8, resolveEntityCardHeaderValue as d9, resolveEntityMasterFieldStylingClass as da, resolveEntityMasterRecordStylingClass as db, resolveEntityMasterStylingClass as dc, resolveEntityPluginDetailPageOrder as dd, resolveFileUploaderEditDialog as de, resolveFileUploaderEntityScope as df, resolveLookupDisplayField as dg, resolveLookupDisplayTemplate as dh, resolveLookupEntityCacheKey as di, resolveLookupEntityKey as dj, resolveMasterInterfacePropertyOrder as dk, restoreEntityListExpandedRows as dl, runEntityMiddlewarePipeline as dm, runEntityQuery as dn, runEntityStorageMiddlewarePipeline as dp, searchResultDescriptionMiddleware as dq, searchResultDescriptionMiddlewareProvider as dr, shouldLoadEntityListStateFromStorage as ds, shouldResetEntityListStateOnRouteEntry as dt, traceEntityMasterList as du, watchNextDataSourceLoad as dv, attachmentNeedsHydration as e, ATTACHMENTS_PAGE_COMPONENT_KEY as f, AXMEntityCrudService as g, AXMEntityCrudServiceImpl as h, AXPCategoryTreeService as i, AXPClientLocalPluginModule as j, AXPCreateEntityCommand as k, AXPDataSeederService as l, AXPDeleteEntityCommand as m, newBulkExecutionId as n, AXPDomainQueryEntityDefinitionLoader as o, persistedAttachments as p, AXPEditFileUploaderCommand as q, resolveBulkFailureBody as r, settleAfterLoadingDialog as s, AXPEntityBulkPatchPerformService as t, AXPEntityCardComponent as u, AXPEntityCardFieldsResolver as v, watchBulkProgress as w, AXPEntityCardSelectActionName as x, AXPEntityCardSkeletonComponent as y, AXPEntityCategoryTreeSelectorComponent as z };
|
|
34101
|
+
//# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Bte8Trz3.mjs.map
|