@acorex/platform 21.0.0-next.88 → 21.0.0-next.90
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-auth.mjs +8 -2
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-common-common-settings.provider-VfmZct9H.mjs → acorex-platform-common-common-settings.provider-DilV4dql.mjs} +15 -42
- package/fesm2022/acorex-platform-common-common-settings.provider-DilV4dql.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +3299 -3200
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-contracts.mjs +1 -0
- package/fesm2022/acorex-platform-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +643 -30
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +98 -189
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-RttFwaw9.mjs} +17 -4
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-RttFwaw9.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-components.mjs +125 -26
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +4 -4
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity-contracts.mjs +106 -12
- package/fesm2022/acorex-platform-layout-entity-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +512 -155
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +921 -173
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +380 -103
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-D4MOHEpI.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-BvFykMTH.mjs} +2 -2
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-D4MOHEpI.mjs.map → acorex-platform-layout-widgets-tabular-data-edit-popup.component-BvFykMTH.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs} +2 -2
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layout-widgets.mjs +575 -239
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +232 -25
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-settings.provider-BUwPqwUS.mjs → acorex-platform-themes-shared-settings.provider-UyKdkeyk.mjs} +48 -1
- package/fesm2022/acorex-platform-themes-shared-settings.provider-UyKdkeyk.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared.mjs +103 -24
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-auth.d.ts +1 -0
- package/types/acorex-platform-common.d.ts +202 -151
- package/types/acorex-platform-contracts.d.ts +1 -0
- package/types/acorex-platform-core.d.ts +162 -7
- package/types/acorex-platform-layout-builder.d.ts +10 -20
- package/types/acorex-platform-layout-components.d.ts +14 -1
- package/types/acorex-platform-layout-entity-contracts.d.ts +31 -2
- package/types/acorex-platform-layout-entity.d.ts +91 -16
- package/types/acorex-platform-layout-views.d.ts +107 -20
- package/types/acorex-platform-layout-widget-core.d.ts +71 -9
- package/types/acorex-platform-layout-widgets.d.ts +48 -26
- package/types/acorex-platform-themes-default.d.ts +60 -6
- package/types/acorex-platform-themes-shared.d.ts +4 -0
- package/fesm2022/acorex-platform-common-common-settings.provider-VfmZct9H.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-settings.provider-BUwPqwUS.mjs.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as _ngrx_signals from '@ngrx/signals';
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
|
-
import { Signal, OnInit, OnDestroy } from '@angular/core';
|
|
3
|
+
import { Signal, InjectionToken, OnInit, OnDestroy } from '@angular/core';
|
|
4
4
|
import * as _acorex_platform_themes_shared from '@acorex/platform/themes/shared';
|
|
5
5
|
import { AXClickEvent } from '@acorex/cdk/common';
|
|
6
|
-
import { AXPTabNavigationService, AXPHomePageService, AXPSettingsService, AXPTabPreviewService, AXPUnsavedChangesConfirmService, AXPEntityCommandScope } from '@acorex/platform/common';
|
|
6
|
+
import { AXPTabNavigationService, AXPHomePageService, AXPSettingsService, AXPTabPreviewService, AXPUnsavedChangesConfirmService, AXPBrowserTitleService, AXPEntityCommandScope } from '@acorex/platform/common';
|
|
7
7
|
import * as i1 from '@acorex/cdk/drawer';
|
|
8
8
|
import { AXDrawerItemDirective } from '@acorex/cdk/drawer';
|
|
9
9
|
import { AXPBreadcrumbItem, AXPMultiLanguageString, AXPBadge, AXPPageStatus, AXPBackButton, AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/contracts';
|
|
@@ -82,6 +82,7 @@ declare class AXPPageLayoutComponent {
|
|
|
82
82
|
isSystemMode: _angular_core.Signal<boolean>;
|
|
83
83
|
isSideMenuOpen: _angular_core.Signal<boolean>;
|
|
84
84
|
isOverlayLoading: _angular_core.Signal<boolean>;
|
|
85
|
+
overlayTaskCount: _angular_core.Signal<number>;
|
|
85
86
|
isNavigationLoading: _angular_core.Signal<boolean>;
|
|
86
87
|
isMenuHorizontal: _angular_core.Signal<boolean>;
|
|
87
88
|
effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
|
|
@@ -95,6 +96,7 @@ declare class AXPPageLayoutComponent {
|
|
|
95
96
|
toggleSideMenu: () => void;
|
|
96
97
|
setNavigationLoading: (value: boolean, delay?: number) => void;
|
|
97
98
|
setOverlayLoading: (value: boolean, delay?: number) => void;
|
|
99
|
+
clearOverlayLoading: () => void;
|
|
98
100
|
loadSettings: () => Promise<void>;
|
|
99
101
|
} & _ngrx_signals.StateSource<{
|
|
100
102
|
currentMode: _acorex_platform_themes_shared.AXPThemeMode;
|
|
@@ -166,6 +168,7 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
166
168
|
isSystemMode: _angular_core.Signal<boolean>;
|
|
167
169
|
isSideMenuOpen: _angular_core.Signal<boolean>;
|
|
168
170
|
isOverlayLoading: _angular_core.Signal<boolean>;
|
|
171
|
+
overlayTaskCount: _angular_core.Signal<number>;
|
|
169
172
|
isNavigationLoading: _angular_core.Signal<boolean>;
|
|
170
173
|
isMenuHorizontal: _angular_core.Signal<boolean>;
|
|
171
174
|
effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
|
|
@@ -179,6 +182,7 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
179
182
|
toggleSideMenu: () => void;
|
|
180
183
|
setNavigationLoading: (value: boolean, delay?: number) => void;
|
|
181
184
|
setOverlayLoading: (value: boolean, delay?: number) => void;
|
|
185
|
+
clearOverlayLoading: () => void;
|
|
182
186
|
loadSettings: () => Promise<void>;
|
|
183
187
|
} & _ngrx_signals.StateSource<{
|
|
184
188
|
currentMode: _acorex_platform_themes_shared.AXPThemeMode;
|
|
@@ -210,7 +214,9 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
210
214
|
protected readonly tabNavigation: AXPTabNavigationService;
|
|
211
215
|
protected readonly tabPreviewService: AXPTabPreviewService;
|
|
212
216
|
protected readonly unsavedChangesConfirm: AXPUnsavedChangesConfirmService;
|
|
217
|
+
protected readonly browserTitleService: AXPBrowserTitleService;
|
|
213
218
|
protected readonly router: Router;
|
|
219
|
+
private readonly pageLayoutDestroyRef;
|
|
214
220
|
private _updateTrigger;
|
|
215
221
|
/** Tab key captured at page init — stable while the route instance is cached. */
|
|
216
222
|
private readonly pageTabKey;
|
|
@@ -219,6 +225,8 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
219
225
|
ngOnInit(): Promise<void>;
|
|
220
226
|
/** Maps the home-page route to the pinned home tab key instead of a path-based key. */
|
|
221
227
|
private resolvePageTabKey;
|
|
228
|
+
/** Stable tab key for this cached page instance (tabular mode). */
|
|
229
|
+
protected getPageTabKey(): string | null;
|
|
222
230
|
protected publishTabStructuredPreview(tabKey: string, input: {
|
|
223
231
|
titleValue: AXPMultiLanguageString;
|
|
224
232
|
descriptionValue: AXPMultiLanguageString | null;
|
|
@@ -235,6 +243,10 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
235
243
|
protected getPageIcon(): string | null | Promise<string | null>;
|
|
236
244
|
hasTitle: _angular_core.Signal<boolean>;
|
|
237
245
|
hasTitleIcon: _angular_core.Signal<boolean>;
|
|
246
|
+
/** Publishes the page title to the browser tab when this instance is the active route. */
|
|
247
|
+
protected publishBrowserTitleIfActive(): Promise<void>;
|
|
248
|
+
/** True when this cached page instance matches the current router location. */
|
|
249
|
+
protected isActivePageForBrowserTitle(): boolean;
|
|
238
250
|
description: _angular_core.WritableSignal<AXPMultiLanguageString | null>;
|
|
239
251
|
hasDescription: _angular_core.Signal<boolean>;
|
|
240
252
|
protected getPageDescription(): AXPMultiLanguageString | null | Promise<AXPMultiLanguageString | null>;
|
|
@@ -242,7 +254,9 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
242
254
|
breadcrumbs: _angular_core.WritableSignal<AXPBreadcrumbItem[]>;
|
|
243
255
|
hasBreadcrumbs: _angular_core.Signal<boolean>;
|
|
244
256
|
protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]>;
|
|
245
|
-
/**
|
|
257
|
+
/** Collects resolved breadcrumb labels (Home excluded upstream) for tab chrome. */
|
|
258
|
+
protected resolveBreadcrumbTabTitleSegments(pageBreadcrumbs: AXPBreadcrumbItem[]): Promise<string[]>;
|
|
259
|
+
/** Joins breadcrumb segments as the stored tab title string. */
|
|
246
260
|
protected resolveBreadcrumbTabTitle(pageBreadcrumbs: AXPBreadcrumbItem[]): Promise<string | null>;
|
|
247
261
|
/** Resolves a breadcrumb label the same way as page chrome (`t(item.title)`). */
|
|
248
262
|
protected resolveBreadcrumbItemTitle(item: AXPBreadcrumbItem | undefined): Promise<string | null>;
|
|
@@ -338,6 +352,7 @@ declare class AXPPopupLayoutComponent {
|
|
|
338
352
|
isSystemMode: _angular_core.Signal<boolean>;
|
|
339
353
|
isSideMenuOpen: _angular_core.Signal<boolean>;
|
|
340
354
|
isOverlayLoading: _angular_core.Signal<boolean>;
|
|
355
|
+
overlayTaskCount: _angular_core.Signal<number>;
|
|
341
356
|
isNavigationLoading: _angular_core.Signal<boolean>;
|
|
342
357
|
isMenuHorizontal: _angular_core.Signal<boolean>;
|
|
343
358
|
effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
|
|
@@ -351,6 +366,7 @@ declare class AXPPopupLayoutComponent {
|
|
|
351
366
|
toggleSideMenu: () => void;
|
|
352
367
|
setNavigationLoading: (value: boolean, delay?: number) => void;
|
|
353
368
|
setOverlayLoading: (value: boolean, delay?: number) => void;
|
|
369
|
+
clearOverlayLoading: () => void;
|
|
354
370
|
loadSettings: () => Promise<void>;
|
|
355
371
|
} & _ngrx_signals.StateSource<{
|
|
356
372
|
currentMode: _acorex_platform_themes_shared.AXPThemeMode;
|
|
@@ -407,6 +423,7 @@ declare abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {
|
|
|
407
423
|
isSystemMode: _angular_core.Signal<boolean>;
|
|
408
424
|
isSideMenuOpen: _angular_core.Signal<boolean>;
|
|
409
425
|
isOverlayLoading: _angular_core.Signal<boolean>;
|
|
426
|
+
overlayTaskCount: _angular_core.Signal<number>;
|
|
410
427
|
isNavigationLoading: _angular_core.Signal<boolean>;
|
|
411
428
|
isMenuHorizontal: _angular_core.Signal<boolean>;
|
|
412
429
|
effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
|
|
@@ -420,6 +437,7 @@ declare abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {
|
|
|
420
437
|
toggleSideMenu: () => void;
|
|
421
438
|
setNavigationLoading: (value: boolean, delay?: number) => void;
|
|
422
439
|
setOverlayLoading: (value: boolean, delay?: number) => void;
|
|
440
|
+
clearOverlayLoading: () => void;
|
|
423
441
|
loadSettings: () => Promise<void>;
|
|
424
442
|
} & _ngrx_signals.StateSource<{
|
|
425
443
|
currentMode: _acorex_platform_themes_shared.AXPThemeMode;
|
|
@@ -548,9 +566,20 @@ interface AXPLayoutDetailsViewAdapter {
|
|
|
548
566
|
getPageStatus?: (context: Record<string, unknown>, currentPage: AXPLayoutDetailsViewPage | null) => Promise<AXPPageStatus | null>;
|
|
549
567
|
}
|
|
550
568
|
|
|
569
|
+
interface AXPLayoutDetailsViewRouteParams {
|
|
570
|
+
moduleName: string;
|
|
571
|
+
entityName: string;
|
|
572
|
+
id: string;
|
|
573
|
+
}
|
|
574
|
+
interface AXPLayoutDetailsViewAdapterLoader {
|
|
575
|
+
load(params: AXPLayoutDetailsViewRouteParams): Promise<AXPLayoutDetailsViewAdapter>;
|
|
576
|
+
}
|
|
577
|
+
declare const AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER: InjectionToken<AXPLayoutDetailsViewAdapterLoader>;
|
|
578
|
+
|
|
551
579
|
declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
552
580
|
adapter: _angular_core.Signal<AXPLayoutDetailsViewAdapter | null>;
|
|
553
581
|
rootContext: _angular_core.Signal<Record<string, any>>;
|
|
582
|
+
savedContext: _angular_core.Signal<Record<string, any>>;
|
|
554
583
|
previousContext: _angular_core.Signal<Record<string, any>>;
|
|
555
584
|
context: _angular_core.Signal<Record<string, any>>;
|
|
556
585
|
scope: _angular_core.Signal<AXPExpressionEvaluatorScope | null>;
|
|
@@ -567,6 +596,8 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
567
596
|
isLarge: _angular_core.Signal<boolean>;
|
|
568
597
|
isBusy: _angular_core.Signal<boolean>;
|
|
569
598
|
isSaving: _angular_core.Signal<boolean>;
|
|
599
|
+
isOverlayBusy: _angular_core.Signal<boolean>;
|
|
600
|
+
isPageReady: _angular_core.Signal<boolean>;
|
|
570
601
|
isDirty: _angular_core.Signal<boolean>;
|
|
571
602
|
changesCount: _angular_core.Signal<1 | 0>;
|
|
572
603
|
isLoaded: _angular_core.Signal<boolean>;
|
|
@@ -574,7 +605,8 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
574
605
|
activeTabContent: _angular_core.Signal<AXPWidgetNode[]>;
|
|
575
606
|
loadAdapter: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
576
607
|
loadPage: (pageId?: string, forceRefresh?: boolean) => Promise<void>;
|
|
577
|
-
load: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
608
|
+
load: (adapter: AXPLayoutDetailsViewAdapter, forceRefresh?: boolean, pageIdFromUrl?: string) => Promise<void>;
|
|
609
|
+
loadFromRoute: (forceRefresh?: boolean) => Promise<void>;
|
|
578
610
|
updateContext: (context: any) => void;
|
|
579
611
|
setFormDirty: (dirty: boolean) => void;
|
|
580
612
|
updatePageSelectedRows: (rows: any[]) => void;
|
|
@@ -601,10 +633,11 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
601
633
|
applySavedState: (context: Record<string, unknown>) => void;
|
|
602
634
|
discard: () => Promise<void>;
|
|
603
635
|
save: (command: AXPExecuteCommand, form: AXFormComponent, liveContext?: Record<string, unknown>) => Promise<boolean>;
|
|
604
|
-
goToListPage: () => void
|
|
636
|
+
goToListPage: () => Promise<void>;
|
|
605
637
|
} & _ngrx_signals.StateSource<{
|
|
606
638
|
adapter: AXPLayoutDetailsViewAdapter | null;
|
|
607
639
|
rootContext: Record<string, any>;
|
|
640
|
+
savedContext: Record<string, any>;
|
|
608
641
|
previousContext: Record<string, any>;
|
|
609
642
|
context: Record<string, any>;
|
|
610
643
|
scope: AXPExpressionEvaluatorScope | null;
|
|
@@ -619,10 +652,10 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
619
652
|
|
|
620
653
|
declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {
|
|
621
654
|
#private;
|
|
622
|
-
adapter: _angular_core.InputSignal<AXPLayoutDetailsViewAdapter>;
|
|
623
655
|
protected vm: {
|
|
624
|
-
adapter: _angular_core.Signal<AXPLayoutDetailsViewAdapter | null>;
|
|
656
|
+
adapter: _angular_core.Signal<_acorex_platform_layout_views.AXPLayoutDetailsViewAdapter | null>;
|
|
625
657
|
rootContext: _angular_core.Signal<Record<string, any>>;
|
|
658
|
+
savedContext: _angular_core.Signal<Record<string, any>>;
|
|
626
659
|
previousContext: _angular_core.Signal<Record<string, any>>;
|
|
627
660
|
context: _angular_core.Signal<Record<string, any>>;
|
|
628
661
|
scope: _angular_core.Signal<_acorex_platform_core.AXPExpressionEvaluatorScope | null>;
|
|
@@ -639,14 +672,17 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
639
672
|
isLarge: _angular_core.Signal<boolean>;
|
|
640
673
|
isBusy: _angular_core.Signal<boolean>;
|
|
641
674
|
isSaving: _angular_core.Signal<boolean>;
|
|
675
|
+
isOverlayBusy: _angular_core.Signal<boolean>;
|
|
676
|
+
isPageReady: _angular_core.Signal<boolean>;
|
|
642
677
|
isDirty: _angular_core.Signal<boolean>;
|
|
643
678
|
changesCount: _angular_core.Signal<1 | 0>;
|
|
644
679
|
isLoaded: _angular_core.Signal<boolean>;
|
|
645
680
|
currentPageSelectedRows: _angular_core.Signal<any[]>;
|
|
646
681
|
activeTabContent: _angular_core.Signal<_acorex_platform_layout_widget_core.AXPWidgetNode[]>;
|
|
647
|
-
loadAdapter: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
682
|
+
loadAdapter: (adapter: _acorex_platform_layout_views.AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
648
683
|
loadPage: (pageId?: string, forceRefresh?: boolean) => Promise<void>;
|
|
649
|
-
load: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
684
|
+
load: (adapter: _acorex_platform_layout_views.AXPLayoutDetailsViewAdapter, forceRefresh?: boolean, pageIdFromUrl?: string) => Promise<void>;
|
|
685
|
+
loadFromRoute: (forceRefresh?: boolean) => Promise<void>;
|
|
650
686
|
updateContext: (context: any) => void;
|
|
651
687
|
setFormDirty: (dirty: boolean) => void;
|
|
652
688
|
updatePageSelectedRows: (rows: any[]) => void;
|
|
@@ -673,10 +709,11 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
673
709
|
applySavedState: (context: Record<string, unknown>) => void;
|
|
674
710
|
discard: () => Promise<void>;
|
|
675
711
|
save: (command: AXPExecuteCommand, form: AXFormComponent, liveContext?: Record<string, unknown>) => Promise<boolean>;
|
|
676
|
-
goToListPage: () => void
|
|
712
|
+
goToListPage: () => Promise<void>;
|
|
677
713
|
} & _ngrx_signals.StateSource<{
|
|
678
|
-
adapter: AXPLayoutDetailsViewAdapter | null;
|
|
714
|
+
adapter: _acorex_platform_layout_views.AXPLayoutDetailsViewAdapter | null;
|
|
679
715
|
rootContext: Record<string, any>;
|
|
716
|
+
savedContext: Record<string, any>;
|
|
680
717
|
previousContext: Record<string, any>;
|
|
681
718
|
context: Record<string, any>;
|
|
682
719
|
scope: _acorex_platform_core.AXPExpressionEvaluatorScope | null;
|
|
@@ -694,14 +731,28 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
694
731
|
private readonly unsavedChangesPopstate;
|
|
695
732
|
private readonly pageComponentInstanceRegistry;
|
|
696
733
|
private readonly shortcutRegistry;
|
|
734
|
+
private readonly workflowService;
|
|
697
735
|
private readonly destroyRef;
|
|
698
736
|
private readonly elementRef;
|
|
737
|
+
private readonly debug;
|
|
699
738
|
private onSelectionChangeSubscription?;
|
|
700
|
-
/**
|
|
701
|
-
private
|
|
739
|
+
/** Cancels in-flight list selection bind when the sidebar page or widget tree changes. */
|
|
740
|
+
private pageListSelectionBindGeneration;
|
|
741
|
+
/** Prevents sidebar tab init events from pushing history before the first page activation completes. */
|
|
742
|
+
private readonly detailsLayoutReady;
|
|
702
743
|
private readonly destroyed$;
|
|
703
744
|
private footerActionsGeneration;
|
|
704
745
|
private keyboardShortcutRegistrationGeneration;
|
|
746
|
+
private overlayFallbackTimer?;
|
|
747
|
+
/** Page id the overlay release logic is bound to; reset on sidebar/page switch. */
|
|
748
|
+
private overlayTargetPageId;
|
|
749
|
+
/** After a page switch, wait for widget registry to clear before accepting remounted widgets. */
|
|
750
|
+
private overlaySawZeroWidgetsAfterPageChange;
|
|
751
|
+
/** Cancels in-flight overlay release when the page changes. */
|
|
752
|
+
private overlayReleaseGeneration;
|
|
753
|
+
private overlayReleasePromise?;
|
|
754
|
+
/** Safety cap when widget ready detection does not settle. */
|
|
755
|
+
private static readonly overlayMaxWaitMs;
|
|
705
756
|
/** Header actions with resolved shortcut chords, keyed by command name. */
|
|
706
757
|
private readonly actionShortcutEntries;
|
|
707
758
|
/** Save/discard use live {@link AXPLayoutDetailsViewViewModel.isDirty}; other actions use evaluated `visible`. */
|
|
@@ -741,15 +792,30 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
741
792
|
protected isFooterActionDisabled(action: AXPActionMenuItem): boolean;
|
|
742
793
|
protected hasFooter: _angular_core.Signal<boolean>;
|
|
743
794
|
/**
|
|
744
|
-
*
|
|
795
|
+
* Re-fetches the entity adapter and reloads the active page.
|
|
745
796
|
*/
|
|
746
797
|
protected refreshLayout(): Promise<void>;
|
|
747
798
|
ngOnInit(): Promise<void>;
|
|
748
|
-
|
|
799
|
+
/** Navigates to {@link AXPLayoutDetailsViewAdapter.exitUrl} when the open record was deleted. */
|
|
800
|
+
private handleEntityDeleted;
|
|
749
801
|
ngOnDestroy(): void;
|
|
750
802
|
private refreshFooterActions;
|
|
803
|
+
/** Whether the active page hosts a related-entity list (`page-list` widget). */
|
|
804
|
+
private pageHasEntityListWidget;
|
|
805
|
+
/** Subscribes to the live data-list selection stream for Selected-scope header actions. */
|
|
806
|
+
private attachSelectionToListWidget;
|
|
751
807
|
protected handleOnContextChanged(e: AXPContextChangeEvent): void;
|
|
752
808
|
private getLiveFormContext;
|
|
809
|
+
/** Whether the active page renders widget nodes (not only hosted components). */
|
|
810
|
+
private pageHasWidgetNodes;
|
|
811
|
+
/** Clears all overlay loading tasks once the page (or hosted view) is ready. */
|
|
812
|
+
private clearPageOverlay;
|
|
813
|
+
private scheduleOverlayFallback;
|
|
814
|
+
private clearOverlayFallback;
|
|
815
|
+
/**
|
|
816
|
+
* Hides overlay after the widget container reports continuous idle (same gate as saved baseline).
|
|
817
|
+
*/
|
|
818
|
+
private requestOverlayRelease;
|
|
753
819
|
private finalizeSave;
|
|
754
820
|
private finalizeDiscard;
|
|
755
821
|
/** Reverts widget form state and view-model context to the last saved baseline. */
|
|
@@ -792,6 +858,11 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
792
858
|
protected pageContentTrackKey(item: AXPPageContentItem, index: number): string;
|
|
793
859
|
/** Whether the active component-based entity page has unsaved edits. */
|
|
794
860
|
private isActivePageComponentDirty;
|
|
861
|
+
/**
|
|
862
|
+
* Widget-form dirty state for leave guards (popstate, canDeactivate).
|
|
863
|
+
* Unlike {@link liveFormIsDirty}, does not suppress dirty while overlay is busy.
|
|
864
|
+
*/
|
|
865
|
+
private hasWidgetFormUnsavedChanges;
|
|
795
866
|
/** Whether the current details page has user-origin unsaved edits (form or component page). */
|
|
796
867
|
private shouldPromptLeave;
|
|
797
868
|
/** Single gate for leaving the page or switching details sub-pages when dirty. */
|
|
@@ -805,19 +876,25 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
805
876
|
/** Waits for builder/effect microtasks to finish after a component page command. */
|
|
806
877
|
private waitForComponentDirtySettle;
|
|
807
878
|
private refreshKeyboardShortcutRegistrations;
|
|
879
|
+
/** i18n scope label for the active details sub-page shortcut group in the help dialog. */
|
|
880
|
+
private getKeyboardShortcutScope;
|
|
881
|
+
/** Primary overview page backed by the entity widget form (not a component-hosted sub-page). */
|
|
882
|
+
private isWidgetFormPrimaryPage;
|
|
883
|
+
private registerDetailsViewShortcutScope;
|
|
808
884
|
private collectActionShortcutEntries;
|
|
809
|
-
private
|
|
810
|
-
/** Whether save/discard core shortcuts are listed in the help dialog (page
|
|
885
|
+
private isShortcutActionAvailable;
|
|
886
|
+
/** Whether save/discard core shortcuts are listed in the help dialog (widget overview page only). */
|
|
811
887
|
private isCoreSaveShortcutAvailable;
|
|
812
888
|
private isCoreDiscardShortcutAvailable;
|
|
813
889
|
private canExecuteSaveShortcut;
|
|
814
890
|
private canExecuteDiscardShortcut;
|
|
815
891
|
private executeDiscardViaShortcut;
|
|
892
|
+
private executeActionShortcut;
|
|
816
893
|
private isActionShortcutActive;
|
|
817
894
|
private registerCoreKeyboardShortcuts;
|
|
818
895
|
private registerActionKeyboardShortcuts;
|
|
819
896
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutDetailsViewComponent, never>;
|
|
820
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutDetailsViewComponent, "axp-layout-details-view", never, {
|
|
897
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutDetailsViewComponent, "axp-layout-details-view", never, {}, {}, never, never, true, never>;
|
|
821
898
|
}
|
|
822
899
|
|
|
823
900
|
type AXPDetailsViewActionShortcut = AXPKeyboardShortcutChord;
|
|
@@ -834,6 +911,16 @@ declare function resolveDetailsViewActionShortcuts(commandBaseName: string, expl
|
|
|
834
911
|
* Resolves save/discard footer command shortcuts from page settings.
|
|
835
912
|
*/
|
|
836
913
|
declare function resolveDetailsViewFooterCommandShortcuts(commandName: string, explicit?: readonly AXPKeyboardShortcut[]): AXPDetailsViewActionShortcut[] | undefined;
|
|
914
|
+
/**
|
|
915
|
+
* Platform defaults for component-page footer save/discard commands (e.g. `MetaDataBuilder:Save`).
|
|
916
|
+
*/
|
|
917
|
+
declare function resolvePageFooterActionDefaultShortcuts(commandName: string): AXPDetailsViewActionShortcut[] | undefined;
|
|
918
|
+
declare function isSaveFooterCommand(commandName: string): boolean;
|
|
919
|
+
declare function isDiscardFooterCommand(commandName: string): boolean;
|
|
920
|
+
/**
|
|
921
|
+
* Resolves keyboard shortcuts for a footer action on entity detail sub-pages.
|
|
922
|
+
*/
|
|
923
|
+
declare function resolvePageFooterActionShortcuts(commandName: string, explicit?: readonly AXPKeyboardShortcut[]): AXPDetailsViewActionShortcut[] | undefined;
|
|
837
924
|
|
|
838
925
|
/**
|
|
839
926
|
* Prompts for unsaved changes before leaving the entity details route (breadcrumbs, menu, back to list).
|
|
@@ -881,5 +968,5 @@ declare class AXPPageComponentRendererDirective implements OnInit, OnDestroy {
|
|
|
881
968
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXPPageComponentRendererDirective, "[axp-page-component-renderer]", never, { "componentKey": { "alias": "componentKey"; "required": true; "isSignal": true; }; "rootContext": { "alias": "rootContext"; "required": false; "isSignal": true; }; "pageConfig": { "alias": "pageConfig"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "componentReady": "componentReady"; }, never, never, true, never>;
|
|
882
969
|
}
|
|
883
970
|
|
|
884
|
-
export { AXPLayoutDetailsViewComponent, AXPLayoutDetailsViewViewModel, AXPPageComponentInstanceRegistryService, AXPPageComponentRendererDirective, AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent, axpDetailsViewCanDeactivateGuard, buildNotSavedPageBadge, getDetailsViewActionCommandBaseName, isDiscardCommand, resolveDetailsViewActionShortcuts, resolveDetailsViewFooterCommandShortcuts };
|
|
885
|
-
export type { AXPDetailsViewActionShortcut, AXPLayoutDetailsViewAction, AXPLayoutDetailsViewAdapter, AXPLayoutDetailsViewPage, AXPLayoutDetailsViewTabItem, AXPPageContentItem };
|
|
971
|
+
export { AXPLayoutDetailsViewComponent, AXPLayoutDetailsViewViewModel, AXPPageComponentInstanceRegistryService, AXPPageComponentRendererDirective, AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent, AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER, axpDetailsViewCanDeactivateGuard, buildNotSavedPageBadge, getDetailsViewActionCommandBaseName, isDiscardCommand, isDiscardFooterCommand, isSaveFooterCommand, resolveDetailsViewActionShortcuts, resolveDetailsViewFooterCommandShortcuts, resolvePageFooterActionDefaultShortcuts, resolvePageFooterActionShortcuts };
|
|
972
|
+
export type { AXPDetailsViewActionShortcut, AXPLayoutDetailsViewAction, AXPLayoutDetailsViewAdapter, AXPLayoutDetailsViewAdapterLoader, AXPLayoutDetailsViewPage, AXPLayoutDetailsViewRouteParams, AXPLayoutDetailsViewTabItem, AXPPageContentItem };
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { Signal, InjectionToken,
|
|
2
|
+
import { Signal, InjectionToken, OnInit, ComponentRef, EventEmitter, OnChanges, TemplateRef, Injector, WritableSignal, SimpleChanges, Type } from '@angular/core';
|
|
3
3
|
import * as _acorex_platform_layout_widget_core from '@acorex/platform/layout/widget-core';
|
|
4
4
|
import * as _ngrx_signals from '@ngrx/signals';
|
|
5
5
|
import * as _acorex_platform_core from '@acorex/platform/core';
|
|
6
6
|
import { AXPContextChangeEvent, AXPExpressionEvaluatorService } from '@acorex/platform/core';
|
|
7
7
|
import { AXValueChangedEvent, AXDataSource } from '@acorex/cdk/common';
|
|
8
8
|
import { AXPOptionsData, AXPMultiLanguageString, AXPDefinitionCategory, AXPDataType, AXPExpression, AXPWidgetTriggers, AXPMetaData, AXPValueTransformerFunctions, AXPValidationRules, AXPPartialNested, AXPProperty } from '@acorex/platform/contracts';
|
|
9
|
+
import * as rxjs from 'rxjs';
|
|
9
10
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
10
11
|
import { AXDataTableColumnComponent } from '@acorex/components/data-table';
|
|
11
12
|
import * as i7 from '@acorex/core/translation';
|
|
@@ -18,18 +19,17 @@ import * as i6 from '@acorex/components/skeleton';
|
|
|
18
19
|
declare enum AXPPageStatus {
|
|
19
20
|
Idle = "idle",// The page is idle.
|
|
20
21
|
Rendering = "rendering",// The page is being rendered.
|
|
21
|
-
Rendered = "rendered",// The rendering process is complete.
|
|
22
|
+
Rendered = "rendered",// The rendering process is complete.
|
|
22
23
|
Processing = "processing",// The page is performing a task or interaction.
|
|
23
24
|
Submitting = "submitting",// The form is being submitted.
|
|
24
25
|
Submitted = "submitted",// Submission is completed.
|
|
25
26
|
Validating = "validating",// The form is being validated.
|
|
26
|
-
Validated = "validated",// Validation is completed.
|
|
27
|
+
Validated = "validated",// Validation is completed.
|
|
27
28
|
Error = "error"
|
|
28
29
|
}
|
|
29
30
|
declare enum AXPWidgetStatus {
|
|
30
|
-
Rendering = "rendering",// The widget is being
|
|
31
|
-
Rendered = "rendered",// The
|
|
32
|
-
Processing = "processing",// The widget is performing a task or interaction.
|
|
31
|
+
Rendering = "rendering",// The widget is being mounted and bound.
|
|
32
|
+
Rendered = "rendered",// The widget shell is ready (async hydration may still run).
|
|
33
33
|
Error = "error"
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -52,6 +52,7 @@ type AXPWidgetCoreElementAction = {
|
|
|
52
52
|
declare abstract class AXPWidgetCoreElement {
|
|
53
53
|
abstract get id(): string | null;
|
|
54
54
|
abstract get status(): Signal<AXPWidgetStatus>;
|
|
55
|
+
abstract get isHydrating(): Signal<boolean>;
|
|
55
56
|
api(): AXPWidgetCoreElementAPI;
|
|
56
57
|
actions(): AXPWidgetCoreElementAction[];
|
|
57
58
|
}
|
|
@@ -61,18 +62,45 @@ declare class AXPWidgetCoreService {
|
|
|
61
62
|
readonly onRefresh: Subject<void>;
|
|
62
63
|
private widgets;
|
|
63
64
|
private readonly onWidgetRegistered;
|
|
65
|
+
/** Fires whenever a widget registers, including re-registration after remount (same id, new instance). */
|
|
66
|
+
readonly widgetRegistered$: rxjs.Observable<{
|
|
67
|
+
id: string;
|
|
68
|
+
widget: AXPWidgetCoreElement;
|
|
69
|
+
}>;
|
|
70
|
+
/** Bumps when widget render/hydration state changes so aggregate computeds re-evaluate. */
|
|
71
|
+
private readonly widgetsRevision;
|
|
64
72
|
private readonly status$;
|
|
65
73
|
readonly status: Signal<AXPPageStatus>;
|
|
74
|
+
readonly registeredWidgetsCount: _angular_core.WritableSignal<number>;
|
|
75
|
+
readonly isRendering: Signal<boolean>;
|
|
76
|
+
readonly isHydrating: Signal<boolean>;
|
|
66
77
|
readonly isBusy: Signal<boolean>;
|
|
67
|
-
|
|
78
|
+
readonly isStructureReady: Signal<boolean>;
|
|
68
79
|
private readonly dirtyWidgetsRevision;
|
|
69
80
|
readonly dirtyWidgetsRevisionSignal: Signal<number>;
|
|
81
|
+
constructor();
|
|
70
82
|
get variables(): any;
|
|
71
83
|
get functions(): {
|
|
72
84
|
[key: string]: Function;
|
|
73
85
|
};
|
|
86
|
+
/** Recomputes aggregate container state after a widget registers or changes status/hydration. */
|
|
87
|
+
notifyWidgetStateChanged(): void;
|
|
88
|
+
/** @deprecated Prefer {@link notifyWidgetStateChanged}. */
|
|
74
89
|
updateStatus(): void;
|
|
75
|
-
|
|
90
|
+
/** Debug snapshot of registered widget render/hydration state. */
|
|
91
|
+
getWidgetStateSnapshot(): {
|
|
92
|
+
count: number;
|
|
93
|
+
isRendering: boolean;
|
|
94
|
+
isHydrating: boolean;
|
|
95
|
+
isStructureReady: boolean;
|
|
96
|
+
isBusy: boolean;
|
|
97
|
+
widgets: Array<{
|
|
98
|
+
id: string;
|
|
99
|
+
status: AXPWidgetStatus;
|
|
100
|
+
isHydrating: boolean;
|
|
101
|
+
}>;
|
|
102
|
+
};
|
|
103
|
+
private detectAggregateStatus;
|
|
76
104
|
refresh(): void;
|
|
77
105
|
setStatus(status: AXPPageStatus): void;
|
|
78
106
|
setVariables(keysValues: any): void;
|
|
@@ -80,6 +108,8 @@ declare class AXPWidgetCoreService {
|
|
|
80
108
|
setFunctions(keysValues: any): void;
|
|
81
109
|
setFunctions(key: string, value: any): void;
|
|
82
110
|
registerWidget(id: string, widget: AXPWidgetCoreElement): void;
|
|
111
|
+
unregisterWidget(id: string): void;
|
|
112
|
+
clearWidgets(): void;
|
|
83
113
|
getWidget(id: string): AXPWidgetCoreElement | undefined;
|
|
84
114
|
waitForWidget(id: string, timeoutMs?: number): Promise<AXPWidgetCoreElement | undefined>;
|
|
85
115
|
listRegisteredWidgetNames(): string[];
|
|
@@ -381,7 +411,7 @@ interface AXPLayoutBuilderStatusChangedEvent {
|
|
|
381
411
|
|
|
382
412
|
type AXPClassMap = Readonly<Record<string, boolean>>;
|
|
383
413
|
type AXPStyleMap = Readonly<Record<string, string | number>>;
|
|
384
|
-
declare abstract class AXPBaseWidgetComponent<TOptions extends Record<string, unknown> = AXPOptionsData> extends AXPWidgetCoreElement {
|
|
414
|
+
declare abstract class AXPBaseWidgetComponent<TOptions extends Record<string, unknown> = AXPOptionsData> extends AXPWidgetCoreElement implements OnInit {
|
|
385
415
|
#private;
|
|
386
416
|
protected readonly token: AXPWidgetNodeToken<TOptions>;
|
|
387
417
|
readonly host: HTMLDivElement;
|
|
@@ -391,12 +421,14 @@ declare abstract class AXPBaseWidgetComponent<TOptions extends Record<string, un
|
|
|
391
421
|
state: _angular_core.Signal<_acorex_platform_core.AXPContextState>;
|
|
392
422
|
savedSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
393
423
|
previousSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
424
|
+
userEditedSinceCommit: _angular_core.Signal<boolean>;
|
|
394
425
|
lastChange: _ngrx_signals.DeepSignal<_acorex_platform_core.AXPContextChangeEvent>;
|
|
395
426
|
isChanged: _angular_core.Signal<boolean>;
|
|
396
427
|
isReset: _angular_core.Signal<boolean>;
|
|
397
428
|
isInitiated: _angular_core.Signal<boolean>;
|
|
398
429
|
isEmpty: _angular_core.Signal<boolean>;
|
|
399
430
|
isSavedCommitted: _angular_core.Signal<boolean>;
|
|
431
|
+
hasUserEditedSinceCommit: _angular_core.Signal<boolean>;
|
|
400
432
|
isDirty: _angular_core.Signal<boolean>;
|
|
401
433
|
snapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
402
434
|
saved: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
@@ -405,6 +437,7 @@ declare abstract class AXPBaseWidgetComponent<TOptions extends Record<string, un
|
|
|
405
437
|
changeEvent: _angular_core.Signal<_acorex_platform_core.AXPContextChangeEvent>;
|
|
406
438
|
update: (path: string, value: any, options?: _acorex_platform_core.AXPContextUpdateOptions) => void;
|
|
407
439
|
applyObjectPaths: (obj: Record<string, unknown>, options?: _acorex_platform_core.AXPContextUpdateOptions, prefix?: string) => void;
|
|
440
|
+
syncPathToSavedBaseline: (path: string, options?: _acorex_platform_core.AXPContextUpdateOptions) => void;
|
|
408
441
|
patch: (context: Record<string, any>, options?: _acorex_platform_core.AXPContextPatchOptions) => void;
|
|
409
442
|
revertToSaved: () => void;
|
|
410
443
|
reset: () => void;
|
|
@@ -419,6 +452,7 @@ declare abstract class AXPBaseWidgetComponent<TOptions extends Record<string, un
|
|
|
419
452
|
state: _acorex_platform_core.AXPContextState;
|
|
420
453
|
savedSnapshot: _acorex_platform_core.AXPContextData;
|
|
421
454
|
previousSnapshot: _acorex_platform_core.AXPContextData;
|
|
455
|
+
userEditedSinceCommit: boolean;
|
|
422
456
|
lastChange: _acorex_platform_core.AXPContextChangeEvent;
|
|
423
457
|
}>;
|
|
424
458
|
readonly config: _acorex_platform_layout_widget_core.AXPWidgetConfig<any>;
|
|
@@ -435,6 +469,10 @@ declare abstract class AXPBaseWidgetComponent<TOptions extends Record<string, un
|
|
|
435
469
|
private _status;
|
|
436
470
|
status: _angular_core.Signal<AXPWidgetStatus>;
|
|
437
471
|
readonly onStatusChanged: BehaviorSubject<AXPWidgetStatus>;
|
|
472
|
+
/** Depth counter so nested async hydration calls share one busy state. */
|
|
473
|
+
private hydrationDepth;
|
|
474
|
+
private _isHydrating;
|
|
475
|
+
isHydrating: _angular_core.Signal<boolean>;
|
|
438
476
|
isBusy: _angular_core.Signal<boolean>;
|
|
439
477
|
parent: AXPLayoutBaseWidgetComponent<any> | null | undefined;
|
|
440
478
|
parentComponent: ComponentRef<any> | null | undefined;
|
|
@@ -447,6 +485,10 @@ declare abstract class AXPBaseWidgetComponent<TOptions extends Record<string, un
|
|
|
447
485
|
})[];
|
|
448
486
|
ngOnInit(): void;
|
|
449
487
|
setStatus(status: AXPWidgetStatus): void;
|
|
488
|
+
/** Marks async data loading (lookup, select, file fetch, etc.). */
|
|
489
|
+
protected beginHydration(): void;
|
|
490
|
+
/** Clears hydration started by {@link beginHydration}. */
|
|
491
|
+
protected endHydration(): void;
|
|
450
492
|
setOptions(values: Partial<TOptions>): void;
|
|
451
493
|
output<T = any>(name: string): T;
|
|
452
494
|
call(name: string, ...args: any[]): void;
|
|
@@ -478,6 +520,8 @@ declare abstract class AXPValueWidgetComponent<T = any | null, TOptions extends
|
|
|
478
520
|
getValue: _angular_core.Signal<T>;
|
|
479
521
|
protected validationRules: _angular_core.Signal<AXPValidationRules>;
|
|
480
522
|
protected extractValue(path: string): any;
|
|
523
|
+
/** Applies schema default without marking the form as user-edited. */
|
|
524
|
+
protected applyDefaultValue(value: T | null | undefined): void;
|
|
481
525
|
setValue(value: T | null | undefined): void;
|
|
482
526
|
protected detectFullPath(): void;
|
|
483
527
|
protected handleValueChanged(e: AXValueChangedEvent<T>): void;
|
|
@@ -785,12 +829,14 @@ declare class AXPWidgetContainerComponent {
|
|
|
785
829
|
state: _angular_core.Signal<_acorex_platform_core.AXPContextState>;
|
|
786
830
|
savedSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
787
831
|
previousSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
832
|
+
userEditedSinceCommit: _angular_core.Signal<boolean>;
|
|
788
833
|
lastChange: _ngrx_signals.DeepSignal<AXPContextChangeEvent>;
|
|
789
834
|
isChanged: _angular_core.Signal<boolean>;
|
|
790
835
|
isReset: _angular_core.Signal<boolean>;
|
|
791
836
|
isInitiated: _angular_core.Signal<boolean>;
|
|
792
837
|
isEmpty: _angular_core.Signal<boolean>;
|
|
793
838
|
isSavedCommitted: _angular_core.Signal<boolean>;
|
|
839
|
+
hasUserEditedSinceCommit: _angular_core.Signal<boolean>;
|
|
794
840
|
isDirty: _angular_core.Signal<boolean>;
|
|
795
841
|
snapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
796
842
|
saved: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
@@ -799,6 +845,7 @@ declare class AXPWidgetContainerComponent {
|
|
|
799
845
|
changeEvent: _angular_core.Signal<AXPContextChangeEvent>;
|
|
800
846
|
update: (path: string, value: any, options?: _acorex_platform_core.AXPContextUpdateOptions) => void;
|
|
801
847
|
applyObjectPaths: (obj: Record<string, unknown>, options?: _acorex_platform_core.AXPContextUpdateOptions, prefix?: string) => void;
|
|
848
|
+
syncPathToSavedBaseline: (path: string, options?: _acorex_platform_core.AXPContextUpdateOptions) => void;
|
|
802
849
|
patch: (context: Record<string, any>, options?: _acorex_platform_core.AXPContextPatchOptions) => void;
|
|
803
850
|
revertToSaved: () => void;
|
|
804
851
|
reset: () => void;
|
|
@@ -813,12 +860,16 @@ declare class AXPWidgetContainerComponent {
|
|
|
813
860
|
state: _acorex_platform_core.AXPContextState;
|
|
814
861
|
savedSnapshot: _acorex_platform_core.AXPContextData;
|
|
815
862
|
previousSnapshot: _acorex_platform_core.AXPContextData;
|
|
863
|
+
userEditedSinceCommit: boolean;
|
|
816
864
|
lastChange: AXPContextChangeEvent;
|
|
817
865
|
}>;
|
|
818
866
|
readonly builderService: AXPWidgetCoreService;
|
|
867
|
+
private readonly debug;
|
|
819
868
|
readonly onContextChanged: EventEmitter<AXPContextChangeEvent>;
|
|
820
869
|
private lastEmittedFormDirty;
|
|
821
870
|
private savedBaselineTimer?;
|
|
871
|
+
private settlePromise?;
|
|
872
|
+
private wasHydrating;
|
|
822
873
|
set context(value: any);
|
|
823
874
|
set functions(v: any);
|
|
824
875
|
readonly isSavedCommitted: _angular_core.Signal<boolean>;
|
|
@@ -826,13 +877,20 @@ declare class AXPWidgetContainerComponent {
|
|
|
826
877
|
constructor();
|
|
827
878
|
status: _angular_core.Signal<_acorex_platform_layout_widget_core.AXPPageStatus>;
|
|
828
879
|
isBusy: _angular_core.Signal<boolean>;
|
|
880
|
+
isHydrating: _angular_core.Signal<boolean>;
|
|
881
|
+
/** True when registered widgets exist and none are rendering or hydrating. */
|
|
882
|
+
isWidgetsReady: _angular_core.Signal<boolean>;
|
|
829
883
|
refresh(): void;
|
|
830
884
|
find(name: string): Promise<_acorex_platform_layout_widget_core.AXPWidgetCoreElement | undefined>;
|
|
831
885
|
private syncExternalContext;
|
|
832
886
|
/** Commits the current data as saved after widget hydration settles. */
|
|
833
887
|
settleSavedBaseline(): Promise<void>;
|
|
888
|
+
/** Resolves when widgets stay registered, structure-ready, and idle for {@link FORM_SAVED_BASELINE_IDLE_MS}. */
|
|
889
|
+
waitUntilSettled(): Promise<void>;
|
|
834
890
|
replaceContext(value: unknown): Promise<void>;
|
|
835
891
|
revertAndSettle(): void;
|
|
892
|
+
/** Re-commits baseline after post-load hydration when the user has not edited the form. */
|
|
893
|
+
private scheduleRebaselineAfterHydration;
|
|
836
894
|
private clearSavedBaselineTimer;
|
|
837
895
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetContainerComponent, never>;
|
|
838
896
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetContainerComponent, "axp-widgets-container", never, { "context": { "alias": "context"; "required": false; }; "functions": { "alias": "functions"; "required": false; }; }, { "onContextChanged": "onContextChanged"; }, never, ["*"], false, never>;
|
|
@@ -1003,12 +1061,14 @@ declare class AXPWidgetRendererDirective {
|
|
|
1003
1061
|
state: _angular_core.Signal<_acorex_platform_core.AXPContextState>;
|
|
1004
1062
|
savedSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
1005
1063
|
previousSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
1064
|
+
userEditedSinceCommit: _angular_core.Signal<boolean>;
|
|
1006
1065
|
lastChange: _ngrx_signals.DeepSignal<_acorex_platform_core.AXPContextChangeEvent>;
|
|
1007
1066
|
isChanged: _angular_core.Signal<boolean>;
|
|
1008
1067
|
isReset: _angular_core.Signal<boolean>;
|
|
1009
1068
|
isInitiated: _angular_core.Signal<boolean>;
|
|
1010
1069
|
isEmpty: _angular_core.Signal<boolean>;
|
|
1011
1070
|
isSavedCommitted: _angular_core.Signal<boolean>;
|
|
1071
|
+
hasUserEditedSinceCommit: _angular_core.Signal<boolean>;
|
|
1012
1072
|
isDirty: _angular_core.Signal<boolean>;
|
|
1013
1073
|
snapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
1014
1074
|
saved: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
@@ -1017,6 +1077,7 @@ declare class AXPWidgetRendererDirective {
|
|
|
1017
1077
|
changeEvent: _angular_core.Signal<_acorex_platform_core.AXPContextChangeEvent>;
|
|
1018
1078
|
update: (path: string, value: any, options?: _acorex_platform_core.AXPContextUpdateOptions) => void;
|
|
1019
1079
|
applyObjectPaths: (obj: Record<string, unknown>, options?: _acorex_platform_core.AXPContextUpdateOptions, prefix?: string) => void;
|
|
1080
|
+
syncPathToSavedBaseline: (path: string, options?: _acorex_platform_core.AXPContextUpdateOptions) => void;
|
|
1020
1081
|
patch: (context: Record<string, any>, options?: _acorex_platform_core.AXPContextPatchOptions) => void;
|
|
1021
1082
|
revertToSaved: () => void;
|
|
1022
1083
|
reset: () => void;
|
|
@@ -1031,6 +1092,7 @@ declare class AXPWidgetRendererDirective {
|
|
|
1031
1092
|
state: _acorex_platform_core.AXPContextState;
|
|
1032
1093
|
savedSnapshot: _acorex_platform_core.AXPContextData;
|
|
1033
1094
|
previousSnapshot: _acorex_platform_core.AXPContextData;
|
|
1095
|
+
userEditedSinceCommit: boolean;
|
|
1034
1096
|
lastChange: _acorex_platform_core.AXPContextChangeEvent;
|
|
1035
1097
|
}>;
|
|
1036
1098
|
protected widgetRegistery: AXPWidgetRegistryService;
|