@acorex-platform/framework-client 0.0.10 → 0.0.15
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-auth.mjs +285 -50
- package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-CbzOYCnI.mjs → acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs} +55 -36
- package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-common-settings-dialog.helper-DQNOCRL6.mjs +29 -0
- package/fesm2022/acorex-platform-framework-client-common-settings-dialog.helper-DQNOCRL6.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-common.mjs +1576 -408
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-core.mjs +561 -25
- package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +154 -42
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CWVU3wXL.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs} +7 -7
- package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs +77 -0
- package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs +2378 -1274
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +92 -84
- package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-CxBxxpmA.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-CxBxxpmA.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-l0JAHKIH.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs} +6 -6
- package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs +256 -0
- package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +17599 -17114
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs +120 -70
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +302 -263
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CpkWwygb.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs} +2 -2
- package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-image-preview.popup-C_EPAvCU.mjs → acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs} +3 -3
- package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-CmtTq2Mt.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs} +5 -5
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-CmtTq2Mt.mjs.map → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DSx0E3NV.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DSx0E3NV.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-DdfcGV1C.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs} +10 -10
- package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs} +5 -5
- package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs +61 -0
- package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +2218 -1504
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-realtime.mjs +227 -0
- package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-runtime.mjs +201 -13
- package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs +158 -0
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs +119 -0
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-D1a7UI71.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs} +5 -6
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs +48 -0
- package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs +42 -0
- package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs +19 -0
- package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs +123 -96
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CXSGiTCK.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs} +3 -3
- package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BY5clQ1J.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs} +3 -3
- package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-themes-shared-settings.provider-DEL2YOTP.mjs → acorex-platform-framework-client-themes-shared-settings.provider-D2XPkc71.mjs} +11 -2
- package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-D2XPkc71.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BXl8u4Yp.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs} +7 -7
- package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-i2sOOkVj.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs} +7 -7
- package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +124 -112
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-workflow.mjs +26 -483
- package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
- package/package.json +14 -9
- package/types/acorex-platform-framework-client-auth.d.ts +76 -5
- package/types/acorex-platform-framework-client-common.d.ts +499 -129
- package/types/acorex-platform-framework-client-core.d.ts +291 -10
- package/types/acorex-platform-framework-client-layout-builder.d.ts +81 -31
- package/types/acorex-platform-framework-client-layout-components.d.ts +295 -41
- package/types/acorex-platform-framework-client-layout-entity.d.ts +1895 -1743
- package/types/acorex-platform-framework-client-layout-views.d.ts +8 -18
- package/types/acorex-platform-framework-client-layout-widget-core.d.ts +20 -35
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +167 -33
- package/types/acorex-platform-framework-client-realtime.d.ts +100 -0
- package/types/acorex-platform-framework-client-runtime.d.ts +60 -2
- package/types/acorex-platform-framework-client-themes-default.d.ts +4 -48
- package/types/acorex-platform-framework-client-workflow.d.ts +16 -127
- package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CbzOYCnI.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CWVU3wXL.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-l0JAHKIH.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CpkWwygb.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-DdfcGV1C.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-B5kSWxGk.mjs +0 -34
- package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-B5kSWxGk.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-DnTHwsDJ.mjs +0 -160
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-DnTHwsDJ.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BpR9g6QS.mjs +0 -121
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BpR9g6QS.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-D1a7UI71.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-D--_MIar.mjs +0 -48
- package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-D--_MIar.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-Byyqk8pH.mjs +0 -42
- package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-Byyqk8pH.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DR6G8gPC.mjs +0 -19
- package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DR6G8gPC.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CXSGiTCK.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BY5clQ1J.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-DEL2YOTP.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BXl8u4Yp.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-i2sOOkVj.mjs.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { signal, computed, effect, untracked, Injectable, inject, ElementRef, DestroyRef, InjectionToken, EventEmitter, Injector, ChangeDetectorRef, ViewChild, Input, Output, ChangeDetectionStrategy, Component, input, output, ViewContainerRef, Directive, NgModule } from '@angular/core';
|
|
3
|
-
import { isSelectionValueEqual, isFormValueEqual, extractValue, getSmart, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';
|
|
3
|
+
import { isSelectionValueEqual, isFormValueEqual, extractValue, getSmart, summarizeFormContextDirtyDiff, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';
|
|
4
4
|
import { AXPPageStatus, AXPWidgetStatus, AXP_WIDGET_TOKEN, AXP_WIDGET_COLUMN_TOKEN, createStringProperty, createBooleanProperty, createSelectProperty, createNumberProperty, cloneProperty } from '@acorex-platform/framework-shared/widget-core';
|
|
5
5
|
import { convertArrayToDataSource, AXDataSource, AX_STYLE_COLOR_TYPES, AX_STYLE_LOOK_TYPES } from '@acorex/cdk/common';
|
|
6
|
-
import { AXPContextStore,
|
|
6
|
+
import { AXPContextStore, AXPDataSourceQueryService, AXPExpressionEvaluatorService, AXPDebugService, FORM_DIRTY_TRACE_NS, OVERLAY_WIDGET_SETTLE_TRACE_NS } from '@acorex-platform/framework-client/core';
|
|
7
7
|
import { set, get, cloneDeep, isEqual, isNil, isUndefined, isObjectLike, merge, sum, isEmpty, isString } from 'lodash-es';
|
|
8
8
|
import { Subject, BehaviorSubject, filter } from 'rxjs';
|
|
9
9
|
import * as i1$1 from '@acorex/components/skeleton';
|
|
@@ -15,6 +15,7 @@ import * as i1 from '@angular/common';
|
|
|
15
15
|
import { CommonModule, NgComponentOutlet } from '@angular/common';
|
|
16
16
|
import { AXDataTableColumnComponent, AXBaseDataTable } from '@acorex/components/data-table';
|
|
17
17
|
import { AXUnsubscriber } from '@acorex/core/utils';
|
|
18
|
+
export { AXP_WIDGETS_ACTION_CATEGORY, AXP_WIDGETS_ACTION_SUB_CONTROLS, AXP_WIDGETS_ADVANCE_CATEGORY, AXP_WIDGETS_ADVANCE_SUB_DATA, AXP_WIDGETS_ADVANCE_SUB_INPUT, AXP_WIDGETS_ADVANCE_SUB_MEDIA, AXP_WIDGETS_ADVANCE_SUB_TOOLS, AXP_WIDGETS_AI_CATEGORY, AXP_WIDGETS_CATEGORIES, AXP_WIDGETS_EDITOR_CATEGORY, AXP_WIDGETS_EDITOR_SUB_CHOICE, AXP_WIDGETS_EDITOR_SUB_COMPOSITE, AXP_WIDGETS_EDITOR_SUB_CONFIG, AXP_WIDGETS_EDITOR_SUB_DATETIME, AXP_WIDGETS_EDITOR_SUB_NUMERIC, AXP_WIDGETS_EDITOR_SUB_RICH, AXP_WIDGETS_EDITOR_SUB_TEXT_INPUTS, AXP_WIDGETS_EDITOR_SUB_VISUAL, AXP_WIDGETS_LAYOUT_CATEGORY, AXP_WIDGETS_LAYOUT_SUB_GRID, AXP_WIDGETS_LAYOUT_SUB_LISTS, AXP_WIDGETS_LAYOUT_SUB_SHELL, AXP_WIDGETS_LAYOUT_SUB_SURFACES, AXP_WIDGETS_LAYOUT_SUB_TABS, AXP_WIDGETS_LAYOUT_SUB_UTILITY, normalizeWidgetCategories } from '@acorex-platform/framework-shared/runtime';
|
|
18
19
|
|
|
19
20
|
class AXPWidgetCoreElement {
|
|
20
21
|
api() {
|
|
@@ -487,14 +488,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
487
488
|
class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
|
|
488
489
|
constructor() {
|
|
489
490
|
super(...arguments);
|
|
490
|
-
this.
|
|
491
|
+
this.registryDataSourceQuery = inject(AXPDataSourceQueryService);
|
|
491
492
|
this.textField = computed(() => this.options()['textField'] ?? 'title', ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
|
|
492
493
|
this.valueField = computed(() => this.options()['valueField'] ?? 'id', ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
|
|
493
494
|
this.textTemplate = computed(() => isNil(this.options()['textTemplate'])
|
|
494
495
|
? undefined
|
|
495
496
|
: this.options()['textTemplate'].replace(/{/g, '{{').replace(/}/g, '}}'), ...(ngDevMode ? [{ debugName: "textTemplate" }] : /* istanbul ignore next */ []));
|
|
496
497
|
this.dataSource = signal(convertArrayToDataSource([]), ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
498
|
+
/** Registry datasource name from options, when options.dataSource is a string or `{ id }` object. */
|
|
499
|
+
this.registryDataSourceName = computed(() => {
|
|
500
|
+
const rawValue = this.options()['dataSource'];
|
|
501
|
+
if (typeof rawValue === 'string') {
|
|
502
|
+
return rawValue;
|
|
503
|
+
}
|
|
504
|
+
if (rawValue && typeof rawValue === 'object' && 'id' in rawValue) {
|
|
505
|
+
return String(rawValue['id']);
|
|
506
|
+
}
|
|
507
|
+
return null;
|
|
508
|
+
}, ...(ngDevMode ? [{ debugName: "registryDataSourceName" }] : /* istanbul ignore next */ []));
|
|
497
509
|
this.selectedItems = signal([], ...(ngDevMode ? [{ debugName: "selectedItems" }] : /* istanbul ignore next */ []));
|
|
510
|
+
/** Reactive flag: registry datasource finished resolving (success or failure). */
|
|
511
|
+
this.registryDataSourceReady = signal(false, ...(ngDevMode ? [{ debugName: "registryDataSourceReady" }] : /* istanbul ignore next */ []));
|
|
512
|
+
/** Reactive bump to reload registry-backed datasources (e.g. after locale change). */
|
|
513
|
+
this.registryRefreshEpoch = signal(0, ...(ngDevMode ? [{ debugName: "registryRefreshEpoch" }] : /* istanbul ignore next */ []));
|
|
498
514
|
//#region ---- DataSource Loading Effect ----
|
|
499
515
|
/**
|
|
500
516
|
* Track the last loaded string dataSource reference to prevent infinite loops
|
|
@@ -503,9 +519,14 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
|
|
|
503
519
|
this.lastStringDataSourceRef = null;
|
|
504
520
|
this.rf = effect(async () => {
|
|
505
521
|
const rawValue = this.options()['dataSource'];
|
|
522
|
+
const registryId = this.registryDataSourceName();
|
|
523
|
+
this.registryRefreshEpoch();
|
|
506
524
|
// For string datasources: prevent infinite loop by checking reference
|
|
507
525
|
if (typeof rawValue === 'string') {
|
|
508
526
|
if (rawValue === this.lastStringDataSourceRef) {
|
|
527
|
+
if (registryId) {
|
|
528
|
+
this.registryDataSourceReady.set(true);
|
|
529
|
+
}
|
|
509
530
|
return;
|
|
510
531
|
}
|
|
511
532
|
this.lastStringDataSourceRef = rawValue;
|
|
@@ -514,6 +535,9 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
|
|
|
514
535
|
// Reset string reference when dataSource changes to non-string
|
|
515
536
|
this.lastStringDataSourceRef = null;
|
|
516
537
|
}
|
|
538
|
+
if (registryId) {
|
|
539
|
+
this.registryDataSourceReady.set(false);
|
|
540
|
+
}
|
|
517
541
|
this.beginHydration();
|
|
518
542
|
try {
|
|
519
543
|
// Process dataSource creation in untracked context
|
|
@@ -523,6 +547,7 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
|
|
|
523
547
|
if (!isEqual(rawValue.config, this.dataSource().config)) {
|
|
524
548
|
this.dataSource.set(rawValue);
|
|
525
549
|
}
|
|
550
|
+
this.registryDataSourceReady.set(true);
|
|
526
551
|
}
|
|
527
552
|
// static array datasource - always recreate when options change
|
|
528
553
|
else if (Array.isArray(rawValue)) {
|
|
@@ -545,35 +570,24 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
|
|
|
545
570
|
},
|
|
546
571
|
});
|
|
547
572
|
this.dataSource.set(ds);
|
|
573
|
+
this.registryDataSourceReady.set(true);
|
|
548
574
|
}
|
|
549
575
|
// resolve data source by name (string or object with id)
|
|
550
|
-
else if (
|
|
551
|
-
const
|
|
552
|
-
const
|
|
553
|
-
if (
|
|
554
|
-
this.dataSource.set(
|
|
555
|
-
key: this.valueField(),
|
|
556
|
-
pageSize: 500,
|
|
557
|
-
}));
|
|
576
|
+
else if (registryId) {
|
|
577
|
+
const queryOptions = this.buildRegistryQueryOptions();
|
|
578
|
+
const result = await this.registryDataSourceQuery.resolve(registryId, queryOptions);
|
|
579
|
+
if (result.dataSource) {
|
|
580
|
+
this.dataSource.set(this.isolateRegistryDataSource(result.dataSource));
|
|
558
581
|
}
|
|
559
582
|
else {
|
|
560
|
-
|
|
561
|
-
if (ds && ds instanceof Promise) {
|
|
562
|
-
const d = await ds;
|
|
563
|
-
this.dataSource.set(d);
|
|
564
|
-
}
|
|
565
|
-
else if (ds) {
|
|
566
|
-
this.dataSource.set(ds);
|
|
567
|
-
}
|
|
568
|
-
// empty datasource
|
|
569
|
-
else {
|
|
570
|
-
this.dataSource.set(convertArrayToDataSource([]));
|
|
571
|
-
}
|
|
583
|
+
this.dataSource.set(convertArrayToDataSource([]));
|
|
572
584
|
}
|
|
585
|
+
this.registryDataSourceReady.set(true);
|
|
573
586
|
}
|
|
574
587
|
// empty datasource
|
|
575
588
|
else {
|
|
576
589
|
this.dataSource.set(convertArrayToDataSource([]));
|
|
590
|
+
this.registryDataSourceReady.set(true);
|
|
577
591
|
}
|
|
578
592
|
});
|
|
579
593
|
}
|
|
@@ -581,25 +595,69 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
|
|
|
581
595
|
this.endHydration();
|
|
582
596
|
}
|
|
583
597
|
}, ...(ngDevMode ? [{ debugName: "rf" }] : /* istanbul ignore next */ []));
|
|
584
|
-
this.effect2 = effect(
|
|
585
|
-
this.
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
598
|
+
this.effect2 = effect(() => {
|
|
599
|
+
const registryName = this.registryDataSourceName();
|
|
600
|
+
const value = this.resolveSelectedItemsValue();
|
|
601
|
+
const registryReady = this.registryDataSourceReady();
|
|
602
|
+
this.dataSource();
|
|
603
|
+
if (registryName && !registryReady) {
|
|
604
|
+
return;
|
|
605
|
+
}
|
|
606
|
+
const resolveSelectedItems = async () => {
|
|
607
|
+
this.beginHydration();
|
|
608
|
+
try {
|
|
609
|
+
const items = [];
|
|
610
|
+
if (Array.isArray(value)) {
|
|
611
|
+
items.push(...(await Promise.all(value.map((item) => this.extractItem(item)))));
|
|
612
|
+
}
|
|
613
|
+
else {
|
|
614
|
+
items.push(await this.extractItem(value));
|
|
615
|
+
}
|
|
616
|
+
this.selectedItems.set(items.filter((c) => c != null));
|
|
591
617
|
}
|
|
592
|
-
|
|
593
|
-
|
|
618
|
+
finally {
|
|
619
|
+
this.endHydration();
|
|
594
620
|
}
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
finally {
|
|
598
|
-
this.endHydration();
|
|
599
|
-
}
|
|
621
|
+
};
|
|
622
|
+
void resolveSelectedItems();
|
|
600
623
|
}, ...(ngDevMode ? [{ debugName: "effect2" }] : /* istanbul ignore next */ []));
|
|
601
624
|
}
|
|
625
|
+
buildRegistryQueryOptions() {
|
|
626
|
+
return {
|
|
627
|
+
valueField: this.valueField(),
|
|
628
|
+
useSamples: this.mode === 'designer',
|
|
629
|
+
};
|
|
630
|
+
}
|
|
602
631
|
//#endregion
|
|
632
|
+
/**
|
|
633
|
+
* Registry datasources are cached globally; each widget needs its own {@link AXDataSource}
|
|
634
|
+
* instance so per-widget filters (e.g. cascade parent id) do not leak across fields.
|
|
635
|
+
*/
|
|
636
|
+
isolateRegistryDataSource(source) {
|
|
637
|
+
const config = source.config;
|
|
638
|
+
if (!config?.load) {
|
|
639
|
+
return source;
|
|
640
|
+
}
|
|
641
|
+
const originalLoad = config.load.bind(source);
|
|
642
|
+
const originalByKey = config.byKey?.bind(source);
|
|
643
|
+
return new AXDataSource({
|
|
644
|
+
pageSize: config.pageSize,
|
|
645
|
+
key: config.key,
|
|
646
|
+
load: (event) => originalLoad(event),
|
|
647
|
+
byKey: originalByKey ? (key) => originalByKey(key) : undefined,
|
|
648
|
+
});
|
|
649
|
+
}
|
|
650
|
+
/** Invalidates cached registry datasource and forces a reload on the next effect run. */
|
|
651
|
+
refreshRegistryDataSource() {
|
|
652
|
+
const registryId = this.registryDataSourceName();
|
|
653
|
+
if (!registryId) {
|
|
654
|
+
return;
|
|
655
|
+
}
|
|
656
|
+
this.registryDataSourceQuery.invalidate(registryId);
|
|
657
|
+
this.lastStringDataSourceRef = null;
|
|
658
|
+
this.registryDataSourceReady.set(false);
|
|
659
|
+
this.registryRefreshEpoch.update((epoch) => epoch + 1);
|
|
660
|
+
}
|
|
603
661
|
async extractItem(item) {
|
|
604
662
|
if (isNil(item)) {
|
|
605
663
|
return null;
|
|
@@ -608,6 +666,13 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
|
|
|
608
666
|
return item;
|
|
609
667
|
}
|
|
610
668
|
const key = extractValue(item, this.valueField());
|
|
669
|
+
const registryName = this.registryDataSourceName();
|
|
670
|
+
if (registryName) {
|
|
671
|
+
const found = await this.registryDataSourceQuery.queryByKey(registryName, key, this.buildRegistryQueryOptions());
|
|
672
|
+
if (found) {
|
|
673
|
+
return found;
|
|
674
|
+
}
|
|
675
|
+
}
|
|
611
676
|
const ds = this.dataSource();
|
|
612
677
|
if (ds.config?.byKey) {
|
|
613
678
|
const found = await ds.config?.byKey(key);
|
|
@@ -630,12 +695,7 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
|
|
|
630
695
|
resolveSelectedItemsValue() {
|
|
631
696
|
return this.getValue();
|
|
632
697
|
}
|
|
633
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
634
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetComponent }); }
|
|
635
698
|
}
|
|
636
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetComponent, decorators: [{
|
|
637
|
-
type: Injectable
|
|
638
|
-
}] });
|
|
639
699
|
class AXPColumnWidgetComponent {
|
|
640
700
|
constructor() {
|
|
641
701
|
this.token = inject(AXP_WIDGET_COLUMN_TOKEN);
|
|
@@ -708,14 +768,14 @@ class AXPBoxModelLayoutWidgetComponent extends AXPLayoutBaseWidgetComponent {
|
|
|
708
768
|
}, ...(ngDevMode ? [{ debugName: "inlineStyle" }] : /* istanbul ignore next */ []));
|
|
709
769
|
this.blockClass = computed(() => {
|
|
710
770
|
return {
|
|
711
|
-
|
|
712
|
-
'
|
|
771
|
+
block: true,
|
|
772
|
+
'w-full': true,
|
|
713
773
|
// 'ax-widget-outline': true,
|
|
714
774
|
};
|
|
715
775
|
}, ...(ngDevMode ? [{ debugName: "blockClass" }] : /* istanbul ignore next */ []));
|
|
716
776
|
this.inlineClass = computed(() => {
|
|
717
777
|
return {
|
|
718
|
-
'
|
|
778
|
+
'inline-block': false,
|
|
719
779
|
};
|
|
720
780
|
}, ...(ngDevMode ? [{ debugName: "inlineClass" }] : /* istanbul ignore next */ []));
|
|
721
781
|
}
|
|
@@ -785,8 +845,8 @@ class AXPFlexBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent
|
|
|
785
845
|
this.hostFlexClass = computed(() => {
|
|
786
846
|
return {
|
|
787
847
|
...this.blockClass(),
|
|
788
|
-
'
|
|
789
|
-
'
|
|
848
|
+
'flex': true,
|
|
849
|
+
'h-full': true,
|
|
790
850
|
};
|
|
791
851
|
}, ...(ngDevMode ? [{ debugName: "hostFlexClass" }] : /* istanbul ignore next */ []));
|
|
792
852
|
this.hostClass = computed(() => {
|
|
@@ -889,18 +949,18 @@ class AXPGridBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent
|
|
|
889
949
|
this.hostGridClass = computed(() => {
|
|
890
950
|
const cls = {
|
|
891
951
|
...this.inlineClass(),
|
|
892
|
-
'
|
|
952
|
+
'grid': true,
|
|
893
953
|
};
|
|
894
954
|
const g = this.grid()?.default;
|
|
895
955
|
if (g?.columns)
|
|
896
|
-
cls[`lg:
|
|
897
|
-
// if (g?.rows) cls[`lg:
|
|
956
|
+
cls[`lg:grid-cols-${g.columns}`] = true;
|
|
957
|
+
// if (g?.rows) cls[`lg:grid-rows-${g.rows}`] = true;
|
|
898
958
|
if (g?.justifyItems)
|
|
899
|
-
cls[`lg:
|
|
959
|
+
cls[`lg:justify-items-${g.justifyItems}`] = true;
|
|
900
960
|
if (g?.alignItems)
|
|
901
|
-
cls[`lg:
|
|
961
|
+
cls[`lg:align-items-${g.alignItems}`] = true;
|
|
902
962
|
if (g?.autoFlow)
|
|
903
|
-
cls[`lg:
|
|
963
|
+
cls[`lg:grid-flow-${g.autoFlow}`] = true;
|
|
904
964
|
return cls;
|
|
905
965
|
}, ...(ngDevMode ? [{ debugName: "hostGridClass" }] : /* istanbul ignore next */ []));
|
|
906
966
|
this.hostClass = computed(() => this.hostGridClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
|
|
@@ -930,20 +990,20 @@ class AXPGridItemBaseLayoutWidgetComponent extends AXPFlexBaseLayoutWidgetCompon
|
|
|
930
990
|
const cls = { ...this.hostFlexClass() };
|
|
931
991
|
const g = this.gridItem();
|
|
932
992
|
// Mobile-first: full width on small screens so items stack vertically and don't overflow
|
|
933
|
-
cls['
|
|
993
|
+
cls['col-span-12'] = true;
|
|
934
994
|
// Large screens: apply defined placement so multi-column layout works on desktop
|
|
935
995
|
if (g?.colSpan)
|
|
936
|
-
cls[`lg:
|
|
996
|
+
cls[`lg:col-span-${g.colSpan}`] = true;
|
|
937
997
|
if (g?.colStart)
|
|
938
|
-
cls[`lg:
|
|
998
|
+
cls[`lg:col-start-${g.colStart}`] = true;
|
|
939
999
|
if (g?.colEnd)
|
|
940
|
-
cls[`lg:
|
|
1000
|
+
cls[`lg:col-end-${g.colEnd}`] = true;
|
|
941
1001
|
if (g?.rowSpan)
|
|
942
|
-
cls[`lg:
|
|
1002
|
+
cls[`lg:row-span-${g.rowSpan}`] = true;
|
|
943
1003
|
if (g?.rowStart)
|
|
944
|
-
cls[`lg:
|
|
1004
|
+
cls[`lg:row-start-${g.rowStart}`] = true;
|
|
945
1005
|
if (g?.rowEnd)
|
|
946
|
-
cls[`lg:
|
|
1006
|
+
cls[`lg:row-end-${g.rowEnd}`] = true;
|
|
947
1007
|
return cls;
|
|
948
1008
|
}, ...(ngDevMode ? [{ debugName: "hostGridItemClass" }] : /* istanbul ignore next */ []));
|
|
949
1009
|
this.hostClass = computed(() => this.hostGridItemClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
|
|
@@ -1195,7 +1255,9 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
|
|
|
1195
1255
|
return this.normalizeColumnAlignment(align);
|
|
1196
1256
|
}
|
|
1197
1257
|
if (typeof align === 'object' && !Array.isArray(align)) {
|
|
1198
|
-
const raw = side === 'header'
|
|
1258
|
+
const raw = side === 'header'
|
|
1259
|
+
? align.header
|
|
1260
|
+
: align.cell;
|
|
1199
1261
|
return this.normalizeColumnAlignment(raw);
|
|
1200
1262
|
}
|
|
1201
1263
|
return 'start';
|
|
@@ -1248,7 +1310,12 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
|
|
|
1248
1310
|
},
|
|
1249
1311
|
],
|
|
1250
1312
|
});
|
|
1251
|
-
this.width =
|
|
1313
|
+
this.width =
|
|
1314
|
+
this.mergedOptions().width === 'auto'
|
|
1315
|
+
? 'auto'
|
|
1316
|
+
: this.customWidth
|
|
1317
|
+
? this.customWidth
|
|
1318
|
+
: (this.mergedOptions().width ?? '200px');
|
|
1252
1319
|
this.allowResizing = this.mergedOptions().allowResizing || true;
|
|
1253
1320
|
this.allowSorting = this.sortEnabled;
|
|
1254
1321
|
this.cdr.detectChanges();
|
|
@@ -1289,7 +1356,9 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
|
|
|
1289
1356
|
// Use a hash of key properties instead of full JSON.stringify
|
|
1290
1357
|
// This is much faster for large objects
|
|
1291
1358
|
const keyProps = ['id', 'code', 'name', 'title'];
|
|
1292
|
-
const keyValues = keyProps
|
|
1359
|
+
const keyValues = keyProps
|
|
1360
|
+
.map((prop) => data?.[prop])
|
|
1361
|
+
.filter((v) => v != null);
|
|
1293
1362
|
if (keyValues.length > 0) {
|
|
1294
1363
|
return `row-${keyValues.join('-')}`;
|
|
1295
1364
|
}
|
|
@@ -1375,7 +1444,9 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
|
|
|
1375
1444
|
},
|
|
1376
1445
|
};
|
|
1377
1446
|
// Start async evaluation - will update injector when complete
|
|
1378
|
-
this.expressionEvaluator
|
|
1447
|
+
this.expressionEvaluator
|
|
1448
|
+
.evaluate(this.mergedOptions(), scope)
|
|
1449
|
+
.then((evaluatedOptions) => {
|
|
1379
1450
|
// Create injector with evaluated options
|
|
1380
1451
|
const tokenValue = {
|
|
1381
1452
|
path: this.node.path,
|
|
@@ -1398,7 +1469,8 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
|
|
|
1398
1469
|
this.pendingEvaluations.delete(cacheKey);
|
|
1399
1470
|
// Schedule batched change detection (performance optimization)
|
|
1400
1471
|
this.scheduleChangeDetection();
|
|
1401
|
-
})
|
|
1472
|
+
})
|
|
1473
|
+
.catch(() => {
|
|
1402
1474
|
// If evaluation fails, keep using the fallback injector
|
|
1403
1475
|
this.pendingEvaluations.delete(cacheKey);
|
|
1404
1476
|
});
|
|
@@ -1427,34 +1499,47 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
|
|
|
1427
1499
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetColumnRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1428
1500
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPWidgetColumnRendererComponent, isStandalone: false, selector: "axp-widget-column-renderer", inputs: { caption: "caption", customExpandIcon: "customExpandIcon", customCollapseIcon: "customCollapseIcon", customWidth: "customWidth", node: "node", footerTemplate: "footerTemplate", expandHandler: "expandHandler", sortEnabled: "sortEnabled", headerSortDirection: "headerSortDirection", headerSortPriority: "headerSortPriority", columnFixed: "columnFixed", cellTemplate: "cellTemplate", headerTemplate: "headerTemplate" }, outputs: { sortToggle: "sortToggle" }, providers: [
|
|
1429
1501
|
AXPWidgetCoreService,
|
|
1430
|
-
{
|
|
1502
|
+
{
|
|
1503
|
+
provide: AXDataTableColumnComponent,
|
|
1504
|
+
useExisting: AXPWidgetColumnRendererComponent,
|
|
1505
|
+
},
|
|
1431
1506
|
], viewQueries: [{ propertyName: "_contentFooterTemplate", first: true, predicate: ["footer"], descendants: true }, { propertyName: "_contentCellTemplate", first: true, predicate: ["cell"], descendants: true }, { propertyName: "_contentHeaderTemplate", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
|
|
1432
1507
|
<ng-template #header>
|
|
1433
1508
|
<div
|
|
1434
|
-
class="axp-widget-column-header
|
|
1509
|
+
class="axp-widget-column-header w-full flex items-center select-none"
|
|
1435
1510
|
[class.axp-widget-column-header--sortable]="sortEnabled"
|
|
1436
|
-
[class.axp-widget-column-header--sort-active]="
|
|
1437
|
-
|
|
1438
|
-
|
|
1511
|
+
[class.axp-widget-column-header--sort-active]="
|
|
1512
|
+
headerSortDirection === 'asc' || headerSortDirection === 'desc'
|
|
1513
|
+
"
|
|
1514
|
+
[class.gap-1]="!sortEnabled"
|
|
1515
|
+
[style.justify-content]="
|
|
1516
|
+
sortEnabled ? 'flex-start' : getHeaderJustifyContent()
|
|
1517
|
+
"
|
|
1439
1518
|
(click)="onHeaderClick($event)"
|
|
1440
1519
|
>
|
|
1441
1520
|
<span
|
|
1442
|
-
class="axp-widget-column-header__caption
|
|
1521
|
+
class="axp-widget-column-header__caption truncate"
|
|
1443
1522
|
[class.axp-widget-column-header__caption--with-sort]="sortEnabled"
|
|
1444
1523
|
[style.text-align]="sortEnabled ? getHeaderTextAlign() : null"
|
|
1445
|
-
|
|
1524
|
+
>{{ caption | translate | async }}</span
|
|
1525
|
+
>
|
|
1446
1526
|
@if (sortEnabled) {
|
|
1447
|
-
<span
|
|
1527
|
+
<span
|
|
1528
|
+
class="axp-widget-column-header__sort flex items-center gap-0.5 shrink-0"
|
|
1529
|
+
>
|
|
1448
1530
|
@if (headerSortPriority !== undefined && headerSortPriority > 1) {
|
|
1449
|
-
<span
|
|
1531
|
+
<span
|
|
1532
|
+
class="axp-widget-column-header__sort-priority text-xs opacity-70"
|
|
1533
|
+
>{{ headerSortPriority }}</span
|
|
1534
|
+
>
|
|
1450
1535
|
}
|
|
1451
1536
|
<i
|
|
1452
|
-
class="fa-solid fa-arrow-up-long
|
|
1453
|
-
[class.
|
|
1537
|
+
class="fa-solid fa-arrow-up-long text-neutral-400"
|
|
1538
|
+
[class.text-primary]="headerSortDirection === 'asc'"
|
|
1454
1539
|
></i>
|
|
1455
1540
|
<i
|
|
1456
|
-
class="fa-solid fa-arrow-down-long
|
|
1457
|
-
[class.
|
|
1541
|
+
class="fa-solid fa-arrow-down-long text-neutral-400"
|
|
1542
|
+
[class.text-primary]="headerSortDirection === 'desc'"
|
|
1458
1543
|
></i>
|
|
1459
1544
|
</span>
|
|
1460
1545
|
}
|
|
@@ -1462,70 +1547,95 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
|
|
|
1462
1547
|
</ng-template>
|
|
1463
1548
|
<ng-template #cell let-row>
|
|
1464
1549
|
<div
|
|
1465
|
-
class="
|
|
1466
|
-
[class.
|
|
1467
|
-
[class.
|
|
1468
|
-
[class.
|
|
1550
|
+
class="w-full"
|
|
1551
|
+
[class.flex]="getCellUseFlexLayout()"
|
|
1552
|
+
[class.gap-2]="expandHandler"
|
|
1553
|
+
[class.items-center]="getCellUseFlexLayout()"
|
|
1469
1554
|
[style.justify-content]="getCellJustifyContent()"
|
|
1470
1555
|
>
|
|
1471
1556
|
@if (expandHandler) {
|
|
1472
1557
|
<div
|
|
1473
1558
|
(click)="handleExpandRow(row)"
|
|
1474
|
-
class="
|
|
1475
|
-
[class.
|
|
1559
|
+
class="expand-handler"
|
|
1560
|
+
[class.invisible]="!hasExpandableRow(row)"
|
|
1476
1561
|
id="ax-expand-handler-container"
|
|
1477
1562
|
[style.padding-inline-start.rem]="row.data?.__meta__?.level * 2"
|
|
1478
1563
|
>
|
|
1479
1564
|
@if (loadingRow() === row) {
|
|
1480
|
-
<i
|
|
1565
|
+
<i
|
|
1566
|
+
class="fas fa-spinner-third animate-twSpin animate-infinite"
|
|
1567
|
+
></i>
|
|
1481
1568
|
} @else {
|
|
1482
1569
|
@if (row.data?.__meta__?.expanded) {
|
|
1483
|
-
<i
|
|
1570
|
+
<i
|
|
1571
|
+
[class]="
|
|
1572
|
+
customCollapseIcon ||
|
|
1573
|
+
'far fa-minus-square text-md opacity-75'
|
|
1574
|
+
"
|
|
1575
|
+
></i>
|
|
1484
1576
|
} @else {
|
|
1485
|
-
<i
|
|
1577
|
+
<i
|
|
1578
|
+
[class]="
|
|
1579
|
+
customExpandIcon || 'far fa-plus-square text-md opacity-75'
|
|
1580
|
+
"
|
|
1581
|
+
></i>
|
|
1486
1582
|
}
|
|
1487
1583
|
}
|
|
1488
1584
|
</div>
|
|
1489
1585
|
}
|
|
1490
1586
|
@if (component && row?.data) {
|
|
1491
1587
|
<ng-container
|
|
1492
|
-
*ngComponentOutlet="
|
|
1588
|
+
*ngComponentOutlet="
|
|
1589
|
+
component;
|
|
1590
|
+
injector: getRowInjector(row.data);
|
|
1591
|
+
inputs: getInputs(row.data)
|
|
1592
|
+
"
|
|
1493
1593
|
></ng-container>
|
|
1494
1594
|
}
|
|
1495
1595
|
</div>
|
|
1496
1596
|
</ng-template>
|
|
1497
1597
|
<ng-template #footer></ng-template>
|
|
1498
|
-
`, isInline: true, styles: [".axp-widget-column-header--sortable{cursor:pointer}.axp-widget-column-header__caption{min-width:0}.axp-widget-column-header__caption--with-sort{flex:1 1 0}.axp-widget-column-header__sort{opacity:0;transition:opacity .15s ease}.axp-widget-column-header--sortable:hover .axp-widget-column-header__sort,.axp-widget-column-header--sortable:focus-within .axp-widget-column-header__sort,.axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}.axp-widget-column-header__sort-priority{line-height:1}:host-context(.
|
|
1598
|
+
`, isInline: true, styles: [".axp-widget-column-header--sortable{cursor:pointer}.axp-widget-column-header__caption{min-width:0}.axp-widget-column-header__caption--with-sort{flex:1 1 0}.axp-widget-column-header__sort{opacity:0;transition:opacity .15s ease}.axp-widget-column-header--sortable:hover .axp-widget-column-header__sort,.axp-widget-column-header--sortable:focus-within .axp-widget-column-header__sort,.axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}.axp-widget-column-header__sort-priority{line-height:1}:host-context(.data-table-head-cell.ax-interactive:hover) .axp-widget-column-header__sort,:host-context(.data-table-head-cell.ax-interactive:focus-within) .axp-widget-column-header__sort,:host-context(.data-table-head-cell) .axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1499
1599
|
}
|
|
1500
1600
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetColumnRendererComponent, decorators: [{
|
|
1501
1601
|
type: Component,
|
|
1502
1602
|
args: [{ selector: 'axp-widget-column-renderer', template: `
|
|
1503
1603
|
<ng-template #header>
|
|
1504
1604
|
<div
|
|
1505
|
-
class="axp-widget-column-header
|
|
1605
|
+
class="axp-widget-column-header w-full flex items-center select-none"
|
|
1506
1606
|
[class.axp-widget-column-header--sortable]="sortEnabled"
|
|
1507
|
-
[class.axp-widget-column-header--sort-active]="
|
|
1508
|
-
|
|
1509
|
-
|
|
1607
|
+
[class.axp-widget-column-header--sort-active]="
|
|
1608
|
+
headerSortDirection === 'asc' || headerSortDirection === 'desc'
|
|
1609
|
+
"
|
|
1610
|
+
[class.gap-1]="!sortEnabled"
|
|
1611
|
+
[style.justify-content]="
|
|
1612
|
+
sortEnabled ? 'flex-start' : getHeaderJustifyContent()
|
|
1613
|
+
"
|
|
1510
1614
|
(click)="onHeaderClick($event)"
|
|
1511
1615
|
>
|
|
1512
1616
|
<span
|
|
1513
|
-
class="axp-widget-column-header__caption
|
|
1617
|
+
class="axp-widget-column-header__caption truncate"
|
|
1514
1618
|
[class.axp-widget-column-header__caption--with-sort]="sortEnabled"
|
|
1515
1619
|
[style.text-align]="sortEnabled ? getHeaderTextAlign() : null"
|
|
1516
|
-
|
|
1620
|
+
>{{ caption | translate | async }}</span
|
|
1621
|
+
>
|
|
1517
1622
|
@if (sortEnabled) {
|
|
1518
|
-
<span
|
|
1623
|
+
<span
|
|
1624
|
+
class="axp-widget-column-header__sort flex items-center gap-0.5 shrink-0"
|
|
1625
|
+
>
|
|
1519
1626
|
@if (headerSortPriority !== undefined && headerSortPriority > 1) {
|
|
1520
|
-
<span
|
|
1627
|
+
<span
|
|
1628
|
+
class="axp-widget-column-header__sort-priority text-xs opacity-70"
|
|
1629
|
+
>{{ headerSortPriority }}</span
|
|
1630
|
+
>
|
|
1521
1631
|
}
|
|
1522
1632
|
<i
|
|
1523
|
-
class="fa-solid fa-arrow-up-long
|
|
1524
|
-
[class.
|
|
1633
|
+
class="fa-solid fa-arrow-up-long text-neutral-400"
|
|
1634
|
+
[class.text-primary]="headerSortDirection === 'asc'"
|
|
1525
1635
|
></i>
|
|
1526
1636
|
<i
|
|
1527
|
-
class="fa-solid fa-arrow-down-long
|
|
1528
|
-
[class.
|
|
1637
|
+
class="fa-solid fa-arrow-down-long text-neutral-400"
|
|
1638
|
+
[class.text-primary]="headerSortDirection === 'desc'"
|
|
1529
1639
|
></i>
|
|
1530
1640
|
</span>
|
|
1531
1641
|
}
|
|
@@ -1533,34 +1643,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
1533
1643
|
</ng-template>
|
|
1534
1644
|
<ng-template #cell let-row>
|
|
1535
1645
|
<div
|
|
1536
|
-
class="
|
|
1537
|
-
[class.
|
|
1538
|
-
[class.
|
|
1539
|
-
[class.
|
|
1646
|
+
class="w-full"
|
|
1647
|
+
[class.flex]="getCellUseFlexLayout()"
|
|
1648
|
+
[class.gap-2]="expandHandler"
|
|
1649
|
+
[class.items-center]="getCellUseFlexLayout()"
|
|
1540
1650
|
[style.justify-content]="getCellJustifyContent()"
|
|
1541
1651
|
>
|
|
1542
1652
|
@if (expandHandler) {
|
|
1543
1653
|
<div
|
|
1544
1654
|
(click)="handleExpandRow(row)"
|
|
1545
|
-
class="
|
|
1546
|
-
[class.
|
|
1655
|
+
class="expand-handler"
|
|
1656
|
+
[class.invisible]="!hasExpandableRow(row)"
|
|
1547
1657
|
id="ax-expand-handler-container"
|
|
1548
1658
|
[style.padding-inline-start.rem]="row.data?.__meta__?.level * 2"
|
|
1549
1659
|
>
|
|
1550
1660
|
@if (loadingRow() === row) {
|
|
1551
|
-
<i
|
|
1661
|
+
<i
|
|
1662
|
+
class="fas fa-spinner-third animate-twSpin animate-infinite"
|
|
1663
|
+
></i>
|
|
1552
1664
|
} @else {
|
|
1553
1665
|
@if (row.data?.__meta__?.expanded) {
|
|
1554
|
-
<i
|
|
1666
|
+
<i
|
|
1667
|
+
[class]="
|
|
1668
|
+
customCollapseIcon ||
|
|
1669
|
+
'far fa-minus-square text-md opacity-75'
|
|
1670
|
+
"
|
|
1671
|
+
></i>
|
|
1555
1672
|
} @else {
|
|
1556
|
-
<i
|
|
1673
|
+
<i
|
|
1674
|
+
[class]="
|
|
1675
|
+
customExpandIcon || 'far fa-plus-square text-md opacity-75'
|
|
1676
|
+
"
|
|
1677
|
+
></i>
|
|
1557
1678
|
}
|
|
1558
1679
|
}
|
|
1559
1680
|
</div>
|
|
1560
1681
|
}
|
|
1561
1682
|
@if (component && row?.data) {
|
|
1562
1683
|
<ng-container
|
|
1563
|
-
*ngComponentOutlet="
|
|
1684
|
+
*ngComponentOutlet="
|
|
1685
|
+
component;
|
|
1686
|
+
injector: getRowInjector(row.data);
|
|
1687
|
+
inputs: getInputs(row.data)
|
|
1688
|
+
"
|
|
1564
1689
|
></ng-container>
|
|
1565
1690
|
}
|
|
1566
1691
|
</div>
|
|
@@ -1568,8 +1693,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
1568
1693
|
<ng-template #footer></ng-template>
|
|
1569
1694
|
`, providers: [
|
|
1570
1695
|
AXPWidgetCoreService,
|
|
1571
|
-
{
|
|
1572
|
-
|
|
1696
|
+
{
|
|
1697
|
+
provide: AXDataTableColumnComponent,
|
|
1698
|
+
useExisting: AXPWidgetColumnRendererComponent,
|
|
1699
|
+
},
|
|
1700
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['caption'], standalone: false, styles: [".axp-widget-column-header--sortable{cursor:pointer}.axp-widget-column-header__caption{min-width:0}.axp-widget-column-header__caption--with-sort{flex:1 1 0}.axp-widget-column-header__sort{opacity:0;transition:opacity .15s ease}.axp-widget-column-header--sortable:hover .axp-widget-column-header__sort,.axp-widget-column-header--sortable:focus-within .axp-widget-column-header__sort,.axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}.axp-widget-column-header__sort-priority{line-height:1}:host-context(.data-table-head-cell.ax-interactive:hover) .axp-widget-column-header__sort,:host-context(.data-table-head-cell.ax-interactive:focus-within) .axp-widget-column-header__sort,:host-context(.data-table-head-cell) .axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
1573
1701
|
}], propDecorators: { customExpandIcon: [{
|
|
1574
1702
|
type: Input
|
|
1575
1703
|
}], customCollapseIcon: [{
|
|
@@ -1624,6 +1752,7 @@ class AXPWidgetContainerComponent {
|
|
|
1624
1752
|
constructor() {
|
|
1625
1753
|
this.contextService = inject(AXPContextStore);
|
|
1626
1754
|
this.builderService = inject(AXPWidgetCoreService);
|
|
1755
|
+
this.debug = inject(AXPDebugService);
|
|
1627
1756
|
this.onContextChanged = new EventEmitter();
|
|
1628
1757
|
this.wasHydrating = false;
|
|
1629
1758
|
this.isSavedCommitted = computed(() => this.contextService.isSavedCommitted(), ...(ngDevMode ? [{ debugName: "isSavedCommitted" }] : /* istanbul ignore next */ []));
|
|
@@ -1653,6 +1782,16 @@ class AXPWidgetContainerComponent {
|
|
|
1653
1782
|
return;
|
|
1654
1783
|
}
|
|
1655
1784
|
this.lastEmittedFormDirty = isDirty;
|
|
1785
|
+
this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'isFormDirty changed', () => ({
|
|
1786
|
+
isFormDirty: isDirty,
|
|
1787
|
+
userEditedSinceCommit: this.contextService.hasUserEditedSinceCommit(),
|
|
1788
|
+
isSavedCommitted: this.contextService.isSavedCommitted(),
|
|
1789
|
+
changePath: changeEvent.path,
|
|
1790
|
+
changeOrigin: changeEvent.origin,
|
|
1791
|
+
dirtyPaths: this.contextService.isSavedCommitted()
|
|
1792
|
+
? summarizeFormContextDirtyDiff(this.contextService.data(), this.contextService.saved())
|
|
1793
|
+
: [],
|
|
1794
|
+
}));
|
|
1656
1795
|
this.onContextChanged.emit({
|
|
1657
1796
|
...changeEvent,
|
|
1658
1797
|
data: cloneDeep(data),
|
|
@@ -1697,6 +1836,10 @@ class AXPWidgetContainerComponent {
|
|
|
1697
1836
|
return;
|
|
1698
1837
|
}
|
|
1699
1838
|
if (this.contextService.isSavedCommitted() && this.isFormDirty()) {
|
|
1839
|
+
const identityPatch = extractPersistedRootIdentityPatch(current, next);
|
|
1840
|
+
if (identityPatch) {
|
|
1841
|
+
this.contextService.patch(identityPatch, { updateSaved: true });
|
|
1842
|
+
}
|
|
1700
1843
|
return;
|
|
1701
1844
|
}
|
|
1702
1845
|
if (this.contextService.isSavedCommitted()) {
|
|
@@ -1735,6 +1878,12 @@ class AXPWidgetContainerComponent {
|
|
|
1735
1878
|
let stableTimer;
|
|
1736
1879
|
let pollTimer;
|
|
1737
1880
|
const finish = (reason) => {
|
|
1881
|
+
const snapshot = this.builderService.getWidgetStateSnapshot();
|
|
1882
|
+
this.debug.trace(OVERLAY_WIDGET_SETTLE_TRACE_NS, 'settle', 'Completed', () => ({
|
|
1883
|
+
reason,
|
|
1884
|
+
idleRetries,
|
|
1885
|
+
...snapshot,
|
|
1886
|
+
}));
|
|
1738
1887
|
if (pollTimer) {
|
|
1739
1888
|
clearTimeout(pollTimer);
|
|
1740
1889
|
}
|
|
@@ -1743,6 +1892,7 @@ class AXPWidgetContainerComponent {
|
|
|
1743
1892
|
}
|
|
1744
1893
|
resolve();
|
|
1745
1894
|
};
|
|
1895
|
+
this.debug.trace(OVERLAY_WIDGET_SETTLE_TRACE_NS, 'settle', 'Started');
|
|
1746
1896
|
const poll = () => {
|
|
1747
1897
|
const snapshot = this.builderService.getWidgetStateSnapshot();
|
|
1748
1898
|
const isSettled = snapshot.count > 0 &&
|
|
@@ -1781,6 +1931,7 @@ class AXPWidgetContainerComponent {
|
|
|
1781
1931
|
revertAndSettle() {
|
|
1782
1932
|
this.clearSavedBaselineTimer();
|
|
1783
1933
|
this.settlePromise = undefined;
|
|
1934
|
+
this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'revertAndSettle');
|
|
1784
1935
|
this.contextService.revertToSaved();
|
|
1785
1936
|
this.lastEmittedFormDirty = undefined;
|
|
1786
1937
|
}
|
|
@@ -1827,11 +1978,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
1827
1978
|
}], functions: [{
|
|
1828
1979
|
type: Input
|
|
1829
1980
|
}] } });
|
|
1981
|
+
function hasPersistedRootIdentity(value) {
|
|
1982
|
+
return ((typeof value === 'string' && value.length > 0) || (typeof value === 'number' && !Number.isNaN(value)));
|
|
1983
|
+
}
|
|
1984
|
+
/** Injects `id` / `_id` from an external context sync when the live form is dirty but lacks a persisted root id. */
|
|
1985
|
+
function extractPersistedRootIdentityPatch(current, next) {
|
|
1986
|
+
const nextId = next['id'] ?? next['_id'];
|
|
1987
|
+
const currentId = current['id'] ?? current['_id'];
|
|
1988
|
+
if (!hasPersistedRootIdentity(nextId) || hasPersistedRootIdentity(currentId)) {
|
|
1989
|
+
return null;
|
|
1990
|
+
}
|
|
1991
|
+
const patch = { id: nextId };
|
|
1992
|
+
if (next['_id'] !== undefined) {
|
|
1993
|
+
patch['_id'] = next['_id'];
|
|
1994
|
+
}
|
|
1995
|
+
return patch;
|
|
1996
|
+
}
|
|
1830
1997
|
|
|
1831
1998
|
class AXPWidgetPlaceholderComponent {
|
|
1832
1999
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1833
2000
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPWidgetPlaceholderComponent, isStandalone: true, selector: "axp-widget-placeholder", ngImport: i0, template: `<div>
|
|
1834
|
-
<ax-skeleton class="
|
|
2001
|
+
<ax-skeleton class="w-full h-10 rounded-md"></ax-skeleton>
|
|
1835
2002
|
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1836
2003
|
}
|
|
1837
2004
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetPlaceholderComponent, decorators: [{
|
|
@@ -1839,7 +2006,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
1839
2006
|
args: [{
|
|
1840
2007
|
selector: 'axp-widget-placeholder',
|
|
1841
2008
|
template: `<div>
|
|
1842
|
-
<ax-skeleton class="
|
|
2009
|
+
<ax-skeleton class="w-full h-10 rounded-md"></ax-skeleton>
|
|
1843
2010
|
</div>`,
|
|
1844
2011
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1845
2012
|
imports: [AXSkeletonModule],
|
|
@@ -3183,149 +3350,10 @@ class AXPWidgetSerializationHelper {
|
|
|
3183
3350
|
}
|
|
3184
3351
|
//#endregion
|
|
3185
3352
|
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
|
|
3190
|
-
title: '@platform-layout-widgets:subcategories.editor-text-inputs.title',
|
|
3191
|
-
};
|
|
3192
|
-
const AXP_WIDGETS_EDITOR_SUB_NUMERIC = {
|
|
3193
|
-
name: 'editor-numeric',
|
|
3194
|
-
order: 2,
|
|
3195
|
-
title: '@platform-layout-widgets:subcategories.editor-numeric.title',
|
|
3196
|
-
};
|
|
3197
|
-
const AXP_WIDGETS_EDITOR_SUB_DATETIME = {
|
|
3198
|
-
name: 'editor-datetime',
|
|
3199
|
-
order: 3,
|
|
3200
|
-
title: '@platform-layout-widgets:subcategories.editor-datetime.title',
|
|
3201
|
-
};
|
|
3202
|
-
const AXP_WIDGETS_EDITOR_SUB_CHOICE = {
|
|
3203
|
-
name: 'editor-choice',
|
|
3204
|
-
order: 4,
|
|
3205
|
-
title: '@platform-layout-widgets:subcategories.editor-choice.title',
|
|
3206
|
-
};
|
|
3207
|
-
const AXP_WIDGETS_EDITOR_SUB_RICH = {
|
|
3208
|
-
name: 'editor-rich',
|
|
3209
|
-
order: 5,
|
|
3210
|
-
title: '@platform-layout-widgets:subcategories.editor-rich.title',
|
|
3211
|
-
};
|
|
3212
|
-
const AXP_WIDGETS_EDITOR_SUB_VISUAL = {
|
|
3213
|
-
name: 'editor-visual',
|
|
3214
|
-
order: 6,
|
|
3215
|
-
title: '@platform-layout-widgets:subcategories.editor-visual.title',
|
|
3216
|
-
};
|
|
3217
|
-
const AXP_WIDGETS_EDITOR_SUB_COMPOSITE = {
|
|
3218
|
-
name: 'editor-composite',
|
|
3219
|
-
order: 7,
|
|
3220
|
-
title: '@platform-layout-widgets:subcategories.editor-composite.title',
|
|
3221
|
-
};
|
|
3222
|
-
const AXP_WIDGETS_EDITOR_SUB_CONFIG = {
|
|
3223
|
-
name: 'editor-config',
|
|
3224
|
-
order: 8,
|
|
3225
|
-
title: '@platform-layout-widgets:subcategories.editor-config.title',
|
|
3226
|
-
};
|
|
3227
|
-
//#endregion
|
|
3228
|
-
//#region ---- Layout sub-categories (widget picker) ----
|
|
3229
|
-
const AXP_WIDGETS_LAYOUT_SUB_SHELL = {
|
|
3230
|
-
name: 'layout-shell',
|
|
3231
|
-
order: 1,
|
|
3232
|
-
title: '@platform-layout-widgets:subcategories.layout-shell.title',
|
|
3233
|
-
};
|
|
3234
|
-
const AXP_WIDGETS_LAYOUT_SUB_GRID = {
|
|
3235
|
-
name: 'layout-grid',
|
|
3236
|
-
order: 2,
|
|
3237
|
-
title: '@platform-layout-widgets:subcategories.layout-grid.title',
|
|
3238
|
-
};
|
|
3239
|
-
const AXP_WIDGETS_LAYOUT_SUB_SURFACES = {
|
|
3240
|
-
name: 'layout-surfaces',
|
|
3241
|
-
order: 3,
|
|
3242
|
-
title: '@platform-layout-widgets:subcategories.layout-surfaces.title',
|
|
3243
|
-
};
|
|
3244
|
-
const AXP_WIDGETS_LAYOUT_SUB_TABS = {
|
|
3245
|
-
name: 'layout-tabs',
|
|
3246
|
-
order: 4,
|
|
3247
|
-
title: '@platform-layout-widgets:subcategories.layout-tabs.title',
|
|
3248
|
-
};
|
|
3249
|
-
const AXP_WIDGETS_LAYOUT_SUB_LISTS = {
|
|
3250
|
-
name: 'layout-lists',
|
|
3251
|
-
order: 5,
|
|
3252
|
-
title: '@platform-layout-widgets:subcategories.layout-lists.title',
|
|
3253
|
-
};
|
|
3254
|
-
const AXP_WIDGETS_LAYOUT_SUB_UTILITY = {
|
|
3255
|
-
name: 'layout-utility',
|
|
3256
|
-
order: 6,
|
|
3257
|
-
title: '@platform-layout-widgets:subcategories.layout-utility.title',
|
|
3258
|
-
};
|
|
3259
|
-
//#endregion
|
|
3260
|
-
//#region ---- Action sub-categories (widget picker) ----
|
|
3261
|
-
const AXP_WIDGETS_ACTION_SUB_CONTROLS = {
|
|
3262
|
-
name: 'action-controls',
|
|
3263
|
-
order: 1,
|
|
3264
|
-
title: '@platform-layout-widgets:subcategories.action-controls.title',
|
|
3265
|
-
};
|
|
3266
|
-
//#endregion
|
|
3267
|
-
//#region ---- Advance sub-categories (widget picker) ----
|
|
3268
|
-
const AXP_WIDGETS_ADVANCE_SUB_MEDIA = {
|
|
3269
|
-
name: 'advance-media',
|
|
3270
|
-
order: 1,
|
|
3271
|
-
title: '@platform-layout-widgets:subcategories.advance-media.title',
|
|
3272
|
-
};
|
|
3273
|
-
const AXP_WIDGETS_ADVANCE_SUB_INPUT = {
|
|
3274
|
-
name: 'advance-input',
|
|
3275
|
-
order: 2,
|
|
3276
|
-
title: '@platform-layout-widgets:subcategories.advance-input.title',
|
|
3277
|
-
};
|
|
3278
|
-
const AXP_WIDGETS_ADVANCE_SUB_DATA = {
|
|
3279
|
-
name: 'advance-data',
|
|
3280
|
-
order: 3,
|
|
3281
|
-
title: '@platform-layout-widgets:subcategories.advance-data.title',
|
|
3282
|
-
};
|
|
3283
|
-
const AXP_WIDGETS_ADVANCE_SUB_TOOLS = {
|
|
3284
|
-
name: 'advance-tools',
|
|
3285
|
-
order: 4,
|
|
3286
|
-
title: '@platform-layout-widgets:subcategories.advance-tools.title',
|
|
3287
|
-
};
|
|
3288
|
-
//#endregion
|
|
3289
|
-
/** Normalizes widget categories to an array for iteration and serialization. */
|
|
3290
|
-
function normalizeWidgetCategories(categories) {
|
|
3291
|
-
if (categories == null) {
|
|
3292
|
-
return [];
|
|
3293
|
-
}
|
|
3294
|
-
return Array.isArray(categories) ? categories : [categories];
|
|
3295
|
-
}
|
|
3296
|
-
const AXP_WIDGETS_LAYOUT_CATEGORY = {
|
|
3297
|
-
name: 'layout',
|
|
3298
|
-
order: 1,
|
|
3299
|
-
title: '@platform-layout-widgets:categories.layout.title',
|
|
3300
|
-
};
|
|
3301
|
-
const AXP_WIDGETS_EDITOR_CATEGORY = {
|
|
3302
|
-
name: 'editor',
|
|
3303
|
-
order: 2,
|
|
3304
|
-
title: '@platform-layout-widgets:categories.editor.title',
|
|
3305
|
-
};
|
|
3306
|
-
const AXP_WIDGETS_ACTION_CATEGORY = {
|
|
3307
|
-
name: 'action',
|
|
3308
|
-
order: 3,
|
|
3309
|
-
title: '@platform-layout-widgets:categories.action.title',
|
|
3310
|
-
};
|
|
3311
|
-
const AXP_WIDGETS_ADVANCE_CATEGORY = {
|
|
3312
|
-
name: 'advance',
|
|
3313
|
-
order: 4,
|
|
3314
|
-
title: '@platform-layout-widgets:categories.advance.title',
|
|
3315
|
-
};
|
|
3316
|
-
/** AI category tab in the widget picker (metadata); unrelated to Widgets:GetForAI listing scope. */
|
|
3317
|
-
const AXP_WIDGETS_AI_CATEGORY = {
|
|
3318
|
-
name: 'ai',
|
|
3319
|
-
order: 5,
|
|
3320
|
-
title: '@platform-layout-widgets:categories.ai.title',
|
|
3321
|
-
};
|
|
3322
|
-
const AXP_WIDGETS_CATEGORIES = [
|
|
3323
|
-
AXP_WIDGETS_LAYOUT_CATEGORY,
|
|
3324
|
-
AXP_WIDGETS_EDITOR_CATEGORY,
|
|
3325
|
-
AXP_WIDGETS_ACTION_CATEGORY,
|
|
3326
|
-
AXP_WIDGETS_ADVANCE_CATEGORY,
|
|
3327
|
-
AXP_WIDGETS_AI_CATEGORY,
|
|
3328
|
-
];
|
|
3353
|
+
/**
|
|
3354
|
+
* Re-export Node-safe widget category constants from shared runtime.
|
|
3355
|
+
* Sidecars and generate-runtime-catalog should import from `@acorex-platform/framework-shared/runtime`.
|
|
3356
|
+
*/
|
|
3329
3357
|
|
|
3330
3358
|
/**
|
|
3331
3359
|
* Standalone cell renderer using the same column-mode widget pipeline as {@link AXPWidgetColumnRendererComponent}.
|
|
@@ -3378,13 +3406,16 @@ class AXPWidgetColumnCellComponent {
|
|
|
3378
3406
|
eval: (path) => getSmart(data, path),
|
|
3379
3407
|
},
|
|
3380
3408
|
};
|
|
3381
|
-
void this.expressionEvaluator
|
|
3409
|
+
void this.expressionEvaluator
|
|
3410
|
+
.evaluate(this.mergedOptions(), scope)
|
|
3411
|
+
.then((evaluatedOptions) => {
|
|
3382
3412
|
const newInjector = this.createRowInjector(evaluatedOptions);
|
|
3383
3413
|
this.rowInjectorsCache.delete(cacheKey);
|
|
3384
3414
|
this.rowInjectorsCache.set(cacheKey, newInjector);
|
|
3385
3415
|
this.pendingEvaluations.delete(cacheKey);
|
|
3386
3416
|
this.scheduleChangeDetection();
|
|
3387
|
-
})
|
|
3417
|
+
})
|
|
3418
|
+
.catch(() => {
|
|
3388
3419
|
this.pendingEvaluations.delete(cacheKey);
|
|
3389
3420
|
});
|
|
3390
3421
|
}
|
|
@@ -3454,7 +3485,11 @@ class AXPWidgetColumnCellComponent {
|
|
|
3454
3485
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPWidgetColumnCellComponent, isStandalone: true, selector: "axp-widget-column-cell", inputs: { node: "node", rowData: "rowData", caption: "caption" }, usesOnChanges: true, ngImport: i0, template: `
|
|
3455
3486
|
@if (component && rowData) {
|
|
3456
3487
|
<ng-container
|
|
3457
|
-
*ngComponentOutlet="
|
|
3488
|
+
*ngComponentOutlet="
|
|
3489
|
+
component;
|
|
3490
|
+
injector: getRowInjector(rowData);
|
|
3491
|
+
inputs: getInputs(rowData)
|
|
3492
|
+
"
|
|
3458
3493
|
></ng-container>
|
|
3459
3494
|
}
|
|
3460
3495
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -3468,7 +3503,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
3468
3503
|
template: `
|
|
3469
3504
|
@if (component && rowData) {
|
|
3470
3505
|
<ng-container
|
|
3471
|
-
*ngComponentOutlet="
|
|
3506
|
+
*ngComponentOutlet="
|
|
3507
|
+
component;
|
|
3508
|
+
injector: getRowInjector(rowData);
|
|
3509
|
+
inputs: getInputs(rowData)
|
|
3510
|
+
"
|
|
3472
3511
|
></ng-container>
|
|
3473
3512
|
}
|
|
3474
3513
|
`,
|
|
@@ -4707,5 +4746,5 @@ const AXP_CALLBACK_VALIDATION_PROPERTY = {
|
|
|
4707
4746
|
* Generated bundle index. Do not edit.
|
|
4708
4747
|
*/
|
|
4709
4748
|
|
|
4710
|
-
export { AXPBaseWidgetComponent, AXPBlockBaseLayoutWidgetComponent, AXPBoxModelLayoutWidgetComponent, AXPColumnWidgetComponent, AXPDataListWidgetComponent, AXPFlexBaseLayoutWidgetComponent, AXPFlexItemBaseLayoutWidgetComponent, AXPGridBaseLayoutWidgetComponent, AXPGridItemBaseLayoutWidgetComponent, AXPInlineBaseLayoutWidgetComponent, AXPLayoutBaseWidgetComponent, AXPPropertyEditorHelper, AXPTableBaseLayoutWidgetComponent, AXPTableItemBaseLayoutWidgetComponent, AXPTableItemOpsBaseLayoutWidgetComponent, AXPValueWidgetComponent, AXPWidgetColumnCellComponent, AXPWidgetColumnRendererComponent, AXPWidgetContainerComponent, AXPWidgetCoreElement, AXPWidgetCoreModule, AXPWidgetCoreService, AXPWidgetRegistryService, AXPWidgetRendererDirective, AXPWidgetSerializationHelper, AXP_ALLOW_CLEAR_PROPERTY, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_ALLOW_SEARCH_PROPERTY, AXP_ANIMATION_PROPERTY_GROUP, AXP_APPEARANCE_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_BETWEEN_VALIDATION_PROPERTY, AXP_BG_COLOR_PROPERTY, AXP_BOX_MODEL_PROPERTY_GROUP, AXP_CALLBACK_VALIDATION_PROPERTY, AXP_COLOR_PROPERTY, AXP_CONTENT_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_DATA_SOURCE_OPTIONS_PROPERTY, AXP_DATE_DEPTH_PROPERTY, AXP_DATE_FORMAT_PROPERTY, AXP_DATE_RANGE_LIMIT_PROPERTY, AXP_DEFAULT_ROW_COUNT_PROPERTY, AXP_DESCRIPTION_PROPERTY, AXP_DIRECTION_PROPERTY, AXP_DISABLED_PROPERTY, AXP_DOWNLOADABLE_PROPERTY, AXP_EQUAL_VALIDATION_PROPERTY, AXP_FALSY_TEXT_PROPERTY, AXP_FIT_LINE_COUNT_PROPERTY, AXP_FONT_SIZE_PROPERTY, AXP_GREATER_THAN_VALIDATION_PROPERTY, AXP_HAS_CLEAR_BUTTON_PROPERTY, AXP_HAS_COPY_ICON_PROPERTY, AXP_HAS_EYE_ICON_PROPERTY, AXP_HAS_ICON_PROPERTY, AXP_HAS_LABEL_PROPERTY, AXP_ICON_PROPERTY, AXP_IS_LOADING_PROPERTY, AXP_LABEL_PROPERTY, AXP_LAYOUT_ADVANCED_GRID_PROPERTY, AXP_LAYOUT_BORDER_PROPERTY, AXP_LAYOUT_COLUMNS_PROPERTY, AXP_LAYOUT_DIRECTION_PROPERTY, AXP_LAYOUT_FLEX_ITEM_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY_GROUP, AXP_LAYOUT_GAP_PROPERTY, AXP_LAYOUT_GRID_ITEM_PROPERTY, AXP_LAYOUT_GRID_PROPERTIES, AXP_LAYOUT_GRID_PROPERTY, AXP_LAYOUT_GRID_PROPERTY_GROUP, AXP_LAYOUT_GRID_ROW_PROPERTIES, AXP_LAYOUT_ROWS_PROPERTY, AXP_LAYOUT_SHOW_HEADER_PROPERTY, AXP_LAYOUT_SPACING_PROPERTY, AXP_LAYOUT_TABLE_PROPERTY_GROUP, AXP_LESS_THAN_VALIDATION_PROPERTY, AXP_MAX_LENGTH_VALIDATION_PROPERTY, AXP_MAX_LINE_COUNT_PROPERTY, AXP_MIN_LENGTH_VALIDATION_PROPERTY, AXP_MIN_LINE_COUNT_PROPERTY, AXP_MULTI_LANGUAGE_PROPERTY, AXP_NAME_PROPERTY, AXP_NUMBER_SEPARATOR_PROPERTY, AXP_PLACEHOLDER_PROPERTY, AXP_READONLY_PROPERTY, AXP_REGULAR_EXPRESSION_VALIDATION_PROPERTY, AXP_REQUIRED_VALIDATION_PROPERTY, AXP_SHOW_PASSWORD_PROPERTY, AXP_SPIN_BUTTON_PROPERTY, AXP_STYLE_COLOR_PROPERTY, AXP_STYLE_LOOK_PROPERTY, AXP_STYLING_PROPERTY_GROUP, AXP_TABLE_COLUMNS_PROPERTY, AXP_TABLE_COLUMN_ALIGNMENT_PROPERTIES, AXP_TABLE_COLUMN_CELL_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEADER_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEIGHT_PROPERTY, AXP_TABLE_COLUMN_WIDTH_PROPERTY, AXP_TABLE_ITEM_COLSPAN_PROPERTY, AXP_TABLE_ITEM_ROWSPAN_PROPERTY, AXP_TEXT_ALIGN_PROPERTY, AXP_TEXT_FIELD_PROPERTY, AXP_TEXT_PROPERTY, AXP_THEME_PROPERTY, AXP_TITLE_PROPERTY, AXP_TRIGGERS_PROPERTY, AXP_TRIGGERS_PROPERTY_GROUP, AXP_TRULY_TEXT_PROPERTY, AXP_VALIDATION_PROPERTY_GROUP, AXP_VALUE_FIELD_PROPERTY, AXP_VERTICAL_ALIGN_PROPERTY,
|
|
4749
|
+
export { AXPBaseWidgetComponent, AXPBlockBaseLayoutWidgetComponent, AXPBoxModelLayoutWidgetComponent, AXPColumnWidgetComponent, AXPDataListWidgetComponent, AXPFlexBaseLayoutWidgetComponent, AXPFlexItemBaseLayoutWidgetComponent, AXPGridBaseLayoutWidgetComponent, AXPGridItemBaseLayoutWidgetComponent, AXPInlineBaseLayoutWidgetComponent, AXPLayoutBaseWidgetComponent, AXPPropertyEditorHelper, AXPTableBaseLayoutWidgetComponent, AXPTableItemBaseLayoutWidgetComponent, AXPTableItemOpsBaseLayoutWidgetComponent, AXPValueWidgetComponent, AXPWidgetColumnCellComponent, AXPWidgetColumnRendererComponent, AXPWidgetContainerComponent, AXPWidgetCoreElement, AXPWidgetCoreModule, AXPWidgetCoreService, AXPWidgetRegistryService, AXPWidgetRendererDirective, AXPWidgetSerializationHelper, AXP_ALLOW_CLEAR_PROPERTY, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_ALLOW_SEARCH_PROPERTY, AXP_ANIMATION_PROPERTY_GROUP, AXP_APPEARANCE_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_BETWEEN_VALIDATION_PROPERTY, AXP_BG_COLOR_PROPERTY, AXP_BOX_MODEL_PROPERTY_GROUP, AXP_CALLBACK_VALIDATION_PROPERTY, AXP_COLOR_PROPERTY, AXP_CONTENT_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_DATA_SOURCE_OPTIONS_PROPERTY, AXP_DATE_DEPTH_PROPERTY, AXP_DATE_FORMAT_PROPERTY, AXP_DATE_RANGE_LIMIT_PROPERTY, AXP_DEFAULT_ROW_COUNT_PROPERTY, AXP_DESCRIPTION_PROPERTY, AXP_DIRECTION_PROPERTY, AXP_DISABLED_PROPERTY, AXP_DOWNLOADABLE_PROPERTY, AXP_EQUAL_VALIDATION_PROPERTY, AXP_FALSY_TEXT_PROPERTY, AXP_FIT_LINE_COUNT_PROPERTY, AXP_FONT_SIZE_PROPERTY, AXP_GREATER_THAN_VALIDATION_PROPERTY, AXP_HAS_CLEAR_BUTTON_PROPERTY, AXP_HAS_COPY_ICON_PROPERTY, AXP_HAS_EYE_ICON_PROPERTY, AXP_HAS_ICON_PROPERTY, AXP_HAS_LABEL_PROPERTY, AXP_ICON_PROPERTY, AXP_IS_LOADING_PROPERTY, AXP_LABEL_PROPERTY, AXP_LAYOUT_ADVANCED_GRID_PROPERTY, AXP_LAYOUT_BORDER_PROPERTY, AXP_LAYOUT_COLUMNS_PROPERTY, AXP_LAYOUT_DIRECTION_PROPERTY, AXP_LAYOUT_FLEX_ITEM_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY_GROUP, AXP_LAYOUT_GAP_PROPERTY, AXP_LAYOUT_GRID_ITEM_PROPERTY, AXP_LAYOUT_GRID_PROPERTIES, AXP_LAYOUT_GRID_PROPERTY, AXP_LAYOUT_GRID_PROPERTY_GROUP, AXP_LAYOUT_GRID_ROW_PROPERTIES, AXP_LAYOUT_ROWS_PROPERTY, AXP_LAYOUT_SHOW_HEADER_PROPERTY, AXP_LAYOUT_SPACING_PROPERTY, AXP_LAYOUT_TABLE_PROPERTY_GROUP, AXP_LESS_THAN_VALIDATION_PROPERTY, AXP_MAX_LENGTH_VALIDATION_PROPERTY, AXP_MAX_LINE_COUNT_PROPERTY, AXP_MIN_LENGTH_VALIDATION_PROPERTY, AXP_MIN_LINE_COUNT_PROPERTY, AXP_MULTI_LANGUAGE_PROPERTY, AXP_NAME_PROPERTY, AXP_NUMBER_SEPARATOR_PROPERTY, AXP_PLACEHOLDER_PROPERTY, AXP_READONLY_PROPERTY, AXP_REGULAR_EXPRESSION_VALIDATION_PROPERTY, AXP_REQUIRED_VALIDATION_PROPERTY, AXP_SHOW_PASSWORD_PROPERTY, AXP_SPIN_BUTTON_PROPERTY, AXP_STYLE_COLOR_PROPERTY, AXP_STYLE_LOOK_PROPERTY, AXP_STYLING_PROPERTY_GROUP, AXP_TABLE_COLUMNS_PROPERTY, AXP_TABLE_COLUMN_ALIGNMENT_PROPERTIES, AXP_TABLE_COLUMN_CELL_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEADER_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEIGHT_PROPERTY, AXP_TABLE_COLUMN_WIDTH_PROPERTY, AXP_TABLE_ITEM_COLSPAN_PROPERTY, AXP_TABLE_ITEM_ROWSPAN_PROPERTY, AXP_TEXT_ALIGN_PROPERTY, AXP_TEXT_FIELD_PROPERTY, AXP_TEXT_PROPERTY, AXP_THEME_PROPERTY, AXP_TITLE_PROPERTY, AXP_TRIGGERS_PROPERTY, AXP_TRIGGERS_PROPERTY_GROUP, AXP_TRULY_TEXT_PROPERTY, AXP_VALIDATION_PROPERTY_GROUP, AXP_VALUE_FIELD_PROPERTY, AXP_VERTICAL_ALIGN_PROPERTY, AXP_WIDGET_DEFINITION_PROVIDER, AXP_WIDGET_PROPERTY_GROUP, WIDGET_CASCADE_TRACE_NS, booleanDefaultProperty, buildWidgetRegistryMapFromProviders, findNonEmptyBreakpoints, largeTextDefaultProperty, mapAXPPropertyToWidgetProperty, numberDefaultProperty, numberMaxValueProperty, numberMinValueProperty, plainTextDefaultProperty, richTextDefaultProperty, selectEditorDefaultValueProperty, selectionListEditorDefaultValueProperty };
|
|
4711
4750
|
//# sourceMappingURL=acorex-platform-framework-client-layout-widget-core.mjs.map
|