@acorex/platform 21.0.0-next.71 → 21.0.0-next.73
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/contracts/README.md +3 -0
- package/fesm2022/acorex-platform-auth.mjs +82 -60
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-common-common-settings.provider-Bi1RYif5.mjs → acorex-platform-common-common-settings.provider-Ytey9uhY.mjs} +15 -1
- package/fesm2022/acorex-platform-common-common-settings.provider-Ytey9uhY.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +3796 -1677
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-contracts.mjs +10 -0
- package/fesm2022/acorex-platform-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-core.mjs +1126 -114
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +56 -170
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +254 -53
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +199 -126
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs → acorex-platform-layout-entity-attachments-page.component-B0EkdqvH.mjs} +6 -1
- package/fesm2022/acorex-platform-layout-entity-attachments-page.component-B0EkdqvH.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-entity.mjs +403 -460
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +675 -301
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +126 -75
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs} +2 -2
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs.map → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs} +2 -2
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layout-widgets.mjs +450 -750
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default-error-401.component-B1nsdpTY.mjs +48 -0
- package/fesm2022/acorex-platform-themes-default-error-401.component-B1nsdpTY.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-error-404.component-D4UvRe8u.mjs +42 -0
- package/fesm2022/acorex-platform-themes-default-error-404.component-D4UvRe8u.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +79 -35
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared.mjs +3 -0
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +57 -54
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/package.json +5 -1
- package/types/acorex-platform-auth.d.ts +31 -22
- package/types/acorex-platform-common.d.ts +892 -259
- package/types/acorex-platform-contracts.d.ts +39 -0
- package/types/acorex-platform-core.d.ts +291 -47
- package/types/acorex-platform-layout-builder.d.ts +10 -22
- package/types/acorex-platform-layout-components.d.ts +86 -14
- package/types/acorex-platform-layout-entity.d.ts +218 -212
- package/types/acorex-platform-layout-views.d.ts +125 -67
- package/types/acorex-platform-layout-widget-core.d.ts +56 -62
- package/types/acorex-platform-layout-widgets.d.ts +78 -65
- package/types/acorex-platform-themes-default.d.ts +14 -4
- package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs +0 -31
- package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs +0 -25
- package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +0 -1
|
@@ -6,7 +6,7 @@ import { AXClickEvent } from '@acorex/cdk/common';
|
|
|
6
6
|
import * as i1 from '@acorex/cdk/drawer';
|
|
7
7
|
import { AXDrawerItemDirective } from '@acorex/cdk/drawer';
|
|
8
8
|
import * as _acorex_platform_core from '@acorex/platform/core';
|
|
9
|
-
import { AXPActionMenuItem, AXPBreadcrumbItem, AXPMultiLanguageString, AXPBadge, AXPPageStatus, AXPBackButton, AXPExecuteCommand, AXPDeviceService, AXPExecuteCommandResult, AXPExpressionEvaluatorScope, AXPBroadcastEventService, AXPContextChangeEvent } from '@acorex/platform/core';
|
|
9
|
+
import { AXPActionMenuItem, AXPBreadcrumbItem, AXPMultiLanguageString, AXPBadge, AXPPageStatus, AXPBackButton, AXPExecuteCommand, AXPDeviceService, AXPKeyboardShortcut, AXPExecuteCommandResult, AXPExpressionEvaluatorScope, AXPBroadcastEventService, AXPContextChangeEvent, AXPKeyboardShortcutChord } from '@acorex/platform/core';
|
|
10
10
|
import { AXPCommandService, AXPPolicyEngineService } from '@acorex/platform/runtime';
|
|
11
11
|
import { AXPWorkflowService } from '@acorex/platform/workflow';
|
|
12
12
|
import * as _acorex_core_translation from '@acorex/core/translation';
|
|
@@ -14,12 +14,14 @@ import { AXTranslationService } from '@acorex/core/translation';
|
|
|
14
14
|
import { AXToastService } from '@acorex/components/toast';
|
|
15
15
|
import { AXFormatService } from '@acorex/core/format';
|
|
16
16
|
import { AXPSessionService } from '@acorex/platform/auth';
|
|
17
|
-
import { AXPHomePageService, AXPEntityCommandScope } from '@acorex/platform/common';
|
|
17
|
+
import { AXPHomePageService, AXPSettingsService, AXPEntityCommandScope } from '@acorex/platform/common';
|
|
18
18
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
19
19
|
import * as _acorex_platform_layout_widget_core from '@acorex/platform/layout/widget-core';
|
|
20
20
|
import { AXPWidgetNode, AXPPageStatus as AXPPageStatus$1, AXPWidgetContainerComponent } from '@acorex/platform/layout/widget-core';
|
|
21
21
|
import * as _acorex_platform_layout_views from '@acorex/platform/layout/views';
|
|
22
22
|
import { AXFormComponent } from '@acorex/components/form';
|
|
23
|
+
import { AXTabStripChangedEvent } from '@acorex/components/tabs';
|
|
24
|
+
import * as _angular_router from '@angular/router';
|
|
23
25
|
import { Router, ActivatedRoute } from '@angular/router';
|
|
24
26
|
|
|
25
27
|
declare abstract class AXPPageLayoutBase {
|
|
@@ -47,6 +49,10 @@ declare abstract class AXPPageLayoutBase {
|
|
|
47
49
|
abstract onBackButtonClick: () => void | Promise<void>;
|
|
48
50
|
abstract startSideToggle: () => void | Promise<void>;
|
|
49
51
|
abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;
|
|
52
|
+
/** Whether the page has user-origin edits that are not yet persisted. */
|
|
53
|
+
abstract hasUnsavedChanges(): boolean;
|
|
54
|
+
/** Resolves the page title badge (used by host layouts for nested entity pages). */
|
|
55
|
+
abstract resolvePageBadge(): AXPBadge | null | Promise<AXPBadge | null>;
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
declare class AXPPageLayoutComponent {
|
|
@@ -121,6 +127,12 @@ declare class AXPPageLayoutComponent {
|
|
|
121
127
|
protected handleBackdropClick(e: AXClickEvent): boolean;
|
|
122
128
|
protected execute(command: AXPExecuteCommand): Promise<void>;
|
|
123
129
|
protected handleOnBackdropClick(event: MouseEvent): void;
|
|
130
|
+
/**
|
|
131
|
+
* Breadcrumbs and other in-page `navigate` commands bypass `routerLink`, so prompt here
|
|
132
|
+
* when the hosted page implements {@link AXPUnsavedChangesCanDeactivate}.
|
|
133
|
+
* A successful confirm sets `leaveConfirmed` for the router guard on the subsequent navigation.
|
|
134
|
+
*/
|
|
135
|
+
private canLeaveCurrentPage;
|
|
124
136
|
protected getEntityData(): Record<string, any> | null;
|
|
125
137
|
protected handleStatusTransition(transition: any): Promise<void>;
|
|
126
138
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPageLayoutComponent, never>;
|
|
@@ -193,6 +205,7 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
193
205
|
protected readonly toastService: AXToastService;
|
|
194
206
|
protected readonly homePageService: AXPHomePageService;
|
|
195
207
|
protected readonly policyService: AXPPolicyEngineService;
|
|
208
|
+
protected readonly settingsService: AXPSettingsService;
|
|
196
209
|
private _updateTrigger;
|
|
197
210
|
protected updateTrigger: _angular_core.Signal<number>;
|
|
198
211
|
protected recompute(): void;
|
|
@@ -212,7 +225,9 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
212
225
|
protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]>;
|
|
213
226
|
badge: _angular_core.WritableSignal<AXPBadge | null>;
|
|
214
227
|
hasBadge: _angular_core.Signal<boolean>;
|
|
215
|
-
|
|
228
|
+
hasUnsavedChanges(): boolean;
|
|
229
|
+
protected getPageBadge(): Promise<AXPBadge | null>;
|
|
230
|
+
resolvePageBadge(): Promise<AXPBadge | null>;
|
|
216
231
|
status: _angular_core.WritableSignal<AXPPageStatus | null>;
|
|
217
232
|
hasStatus: _angular_core.Signal<boolean>;
|
|
218
233
|
protected getPageStatus(): AXPPageStatus | null | Promise<AXPPageStatus | null>;
|
|
@@ -244,6 +259,15 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
244
259
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPageLayoutBaseComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
245
260
|
}
|
|
246
261
|
|
|
262
|
+
/**
|
|
263
|
+
* Builds the standard "Not Saved" page badge when the global show-page-badge setting is enabled.
|
|
264
|
+
*/
|
|
265
|
+
declare function buildNotSavedPageBadge(translateService: AXTranslationService, settingsService: AXPSettingsService): Promise<AXPBadge | null>;
|
|
266
|
+
/**
|
|
267
|
+
* Whether a command name represents a discard/revert action on a details sub-page.
|
|
268
|
+
*/
|
|
269
|
+
declare function isDiscardCommand(commandName: string, rejectCommandName?: string | null): boolean;
|
|
270
|
+
|
|
247
271
|
declare abstract class AXPPopupLayoutBase {
|
|
248
272
|
abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;
|
|
249
273
|
abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;
|
|
@@ -463,6 +487,7 @@ interface AXPLayoutDetailsViewPage {
|
|
|
463
487
|
color: string;
|
|
464
488
|
visible?: string | boolean;
|
|
465
489
|
command: AXPExecuteCommand;
|
|
490
|
+
shortcuts?: AXPKeyboardShortcut[];
|
|
466
491
|
};
|
|
467
492
|
reject?: {
|
|
468
493
|
title: string;
|
|
@@ -470,6 +495,7 @@ interface AXPLayoutDetailsViewPage {
|
|
|
470
495
|
color: string;
|
|
471
496
|
visible?: string | boolean;
|
|
472
497
|
command: AXPExecuteCommand;
|
|
498
|
+
shortcuts?: AXPKeyboardShortcut[];
|
|
473
499
|
};
|
|
474
500
|
};
|
|
475
501
|
};
|
|
@@ -502,14 +528,9 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
502
528
|
currentPage: _angular_core.Signal<AXPLayoutDetailsViewPage | null>;
|
|
503
529
|
currentTab: _angular_core.Signal<AXPLayoutDetailsViewTabItem | null>;
|
|
504
530
|
pageSelectedRows: _angular_core.Signal<any[]>;
|
|
505
|
-
renderedTabsCache: _angular_core.Signal<Record<string, {
|
|
506
|
-
tabId: string;
|
|
507
|
-
tab: AXPLayoutDetailsViewTabItem;
|
|
508
|
-
}[]>>;
|
|
509
531
|
evaluatedPageContent: _angular_core.Signal<AXPWidgetNode[]>;
|
|
510
532
|
evaluatedTabContentsById: _angular_core.Signal<Record<string, AXPWidgetNode[]>>;
|
|
511
|
-
|
|
512
|
-
formBaselineCommitted: _angular_core.Signal<boolean>;
|
|
533
|
+
formDirty: _angular_core.Signal<boolean>;
|
|
513
534
|
icon: _angular_core.Signal<string | null>;
|
|
514
535
|
content: _angular_core.Signal<_acorex_platform_layout_views.AXPPageContentItem[]>;
|
|
515
536
|
showPages: _angular_core.Signal<boolean>;
|
|
@@ -520,16 +541,12 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
520
541
|
changesCount: _angular_core.Signal<1 | 0>;
|
|
521
542
|
isLoaded: _angular_core.Signal<boolean>;
|
|
522
543
|
currentPageSelectedRows: _angular_core.Signal<any[]>;
|
|
523
|
-
|
|
524
|
-
tabId: string;
|
|
525
|
-
tab: AXPLayoutDetailsViewTabItem;
|
|
526
|
-
}[]>;
|
|
544
|
+
activeTabContent: _angular_core.Signal<AXPWidgetNode[]>;
|
|
527
545
|
loadAdapter: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
528
546
|
loadPage: (pageId?: string, forceRefresh?: boolean) => Promise<void>;
|
|
529
547
|
load: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
530
|
-
updateContext: (context: any
|
|
531
|
-
|
|
532
|
-
resetFormBaselineCommitted: () => void;
|
|
548
|
+
updateContext: (context: any) => void;
|
|
549
|
+
setFormDirty: (dirty: boolean) => void;
|
|
533
550
|
updatePageSelectedRows: (rows: any[]) => void;
|
|
534
551
|
currentPagePrimaryActions: () => Promise<any>;
|
|
535
552
|
currentPageSecondaryActions: () => Promise<any>;
|
|
@@ -537,9 +554,6 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
537
554
|
currentPageTabs: () => AXPLayoutDetailsViewTabItem[] | undefined;
|
|
538
555
|
setCurrentPage: (page: AXPLayoutDetailsViewPage | null) => void;
|
|
539
556
|
setCurrentTab: (tab: AXPLayoutDetailsViewTabItem) => void;
|
|
540
|
-
getCurrentTabContent: () => AXPWidgetNode[];
|
|
541
|
-
getRenderedTabContent: (tabId: string) => AXPWidgetNode[];
|
|
542
|
-
clearPageTabCache: (pageId: string) => void;
|
|
543
557
|
backButtonTitle: () => _acorex_core_translation.AXMultiLanguageString;
|
|
544
558
|
getPageTitle: () => Promise<AXPMultiLanguageString>;
|
|
545
559
|
getPageDescription: () => Promise<AXPMultiLanguageString | null>;
|
|
@@ -554,8 +568,9 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
554
568
|
icon?: string;
|
|
555
569
|
command?: AXPExecuteCommand;
|
|
556
570
|
}[]>;
|
|
571
|
+
applySavedState: (context: Record<string, unknown>) => void;
|
|
557
572
|
discard: () => Promise<void>;
|
|
558
|
-
save: (command: AXPExecuteCommand, form: AXFormComponent) => Promise<boolean>;
|
|
573
|
+
save: (command: AXPExecuteCommand, form: AXFormComponent, liveContext?: Record<string, unknown>) => Promise<boolean>;
|
|
559
574
|
goToListPage: () => void;
|
|
560
575
|
} & _ngrx_signals.StateSource<{
|
|
561
576
|
adapter: AXPLayoutDetailsViewAdapter | null;
|
|
@@ -567,14 +582,9 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
567
582
|
currentPage: AXPLayoutDetailsViewPage | null;
|
|
568
583
|
currentTab: AXPLayoutDetailsViewTabItem | null;
|
|
569
584
|
pageSelectedRows: any[];
|
|
570
|
-
renderedTabsCache: Record<string, Array<{
|
|
571
|
-
tabId: string;
|
|
572
|
-
tab: AXPLayoutDetailsViewTabItem;
|
|
573
|
-
}>>;
|
|
574
585
|
evaluatedPageContent: AXPWidgetNode[];
|
|
575
586
|
evaluatedTabContentsById: Record<string, AXPWidgetNode[]>;
|
|
576
|
-
|
|
577
|
-
formBaselineCommitted: boolean;
|
|
587
|
+
formDirty: boolean;
|
|
578
588
|
}>>;
|
|
579
589
|
|
|
580
590
|
declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {
|
|
@@ -590,16 +600,11 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
590
600
|
currentPage: _angular_core.Signal<AXPLayoutDetailsViewPage | null>;
|
|
591
601
|
currentTab: _angular_core.Signal<_acorex_platform_layout_views.AXPLayoutDetailsViewTabItem | null>;
|
|
592
602
|
pageSelectedRows: _angular_core.Signal<any[]>;
|
|
593
|
-
renderedTabsCache: _angular_core.Signal<Record<string, {
|
|
594
|
-
tabId: string;
|
|
595
|
-
tab: _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem;
|
|
596
|
-
}[]>>;
|
|
597
603
|
evaluatedPageContent: _angular_core.Signal<_acorex_platform_layout_widget_core.AXPWidgetNode[]>;
|
|
598
604
|
evaluatedTabContentsById: _angular_core.Signal<Record<string, _acorex_platform_layout_widget_core.AXPWidgetNode[]>>;
|
|
599
|
-
|
|
600
|
-
formBaselineCommitted: _angular_core.Signal<boolean>;
|
|
605
|
+
formDirty: _angular_core.Signal<boolean>;
|
|
601
606
|
icon: _angular_core.Signal<string | null>;
|
|
602
|
-
content: _angular_core.Signal<
|
|
607
|
+
content: _angular_core.Signal<AXPPageContentItem[]>;
|
|
603
608
|
showPages: _angular_core.Signal<boolean>;
|
|
604
609
|
isLarge: _angular_core.Signal<boolean>;
|
|
605
610
|
isBusy: _angular_core.Signal<boolean>;
|
|
@@ -608,16 +613,12 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
608
613
|
changesCount: _angular_core.Signal<1 | 0>;
|
|
609
614
|
isLoaded: _angular_core.Signal<boolean>;
|
|
610
615
|
currentPageSelectedRows: _angular_core.Signal<any[]>;
|
|
611
|
-
|
|
612
|
-
tabId: string;
|
|
613
|
-
tab: _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem;
|
|
614
|
-
}[]>;
|
|
616
|
+
activeTabContent: _angular_core.Signal<_acorex_platform_layout_widget_core.AXPWidgetNode[]>;
|
|
615
617
|
loadAdapter: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
616
618
|
loadPage: (pageId?: string, forceRefresh?: boolean) => Promise<void>;
|
|
617
619
|
load: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
618
|
-
updateContext: (context: any
|
|
619
|
-
|
|
620
|
-
resetFormBaselineCommitted: () => void;
|
|
620
|
+
updateContext: (context: any) => void;
|
|
621
|
+
setFormDirty: (dirty: boolean) => void;
|
|
621
622
|
updatePageSelectedRows: (rows: any[]) => void;
|
|
622
623
|
currentPagePrimaryActions: () => Promise<any>;
|
|
623
624
|
currentPageSecondaryActions: () => Promise<any>;
|
|
@@ -625,9 +626,6 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
625
626
|
currentPageTabs: () => _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem[] | undefined;
|
|
626
627
|
setCurrentPage: (page: AXPLayoutDetailsViewPage | null) => void;
|
|
627
628
|
setCurrentTab: (tab: _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem) => void;
|
|
628
|
-
getCurrentTabContent: () => _acorex_platform_layout_widget_core.AXPWidgetNode[];
|
|
629
|
-
getRenderedTabContent: (tabId: string) => _acorex_platform_layout_widget_core.AXPWidgetNode[];
|
|
630
|
-
clearPageTabCache: (pageId: string) => void;
|
|
631
629
|
backButtonTitle: () => _acorex_core_translation.AXMultiLanguageString;
|
|
632
630
|
getPageTitle: () => Promise<AXPMultiLanguageString>;
|
|
633
631
|
getPageDescription: () => Promise<AXPMultiLanguageString | null>;
|
|
@@ -642,8 +640,9 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
642
640
|
icon?: string;
|
|
643
641
|
command?: AXPExecuteCommand;
|
|
644
642
|
}[]>;
|
|
643
|
+
applySavedState: (context: Record<string, unknown>) => void;
|
|
645
644
|
discard: () => Promise<void>;
|
|
646
|
-
save: (command: AXPExecuteCommand, form: AXFormComponent) => Promise<boolean>;
|
|
645
|
+
save: (command: AXPExecuteCommand, form: AXFormComponent, liveContext?: Record<string, unknown>) => Promise<boolean>;
|
|
647
646
|
goToListPage: () => void;
|
|
648
647
|
} & _ngrx_signals.StateSource<{
|
|
649
648
|
adapter: AXPLayoutDetailsViewAdapter | null;
|
|
@@ -655,31 +654,34 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
655
654
|
currentPage: AXPLayoutDetailsViewPage | null;
|
|
656
655
|
currentTab: _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem | null;
|
|
657
656
|
pageSelectedRows: any[];
|
|
658
|
-
renderedTabsCache: Record<string, Array<{
|
|
659
|
-
tabId: string;
|
|
660
|
-
tab: _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem;
|
|
661
|
-
}>>;
|
|
662
657
|
evaluatedPageContent: _acorex_platform_layout_widget_core.AXPWidgetNode[];
|
|
663
658
|
evaluatedTabContentsById: Record<string, _acorex_platform_layout_widget_core.AXPWidgetNode[]>;
|
|
664
|
-
|
|
665
|
-
formBaselineCommitted: boolean;
|
|
659
|
+
formDirty: boolean;
|
|
666
660
|
}>;
|
|
667
661
|
protected router: Router;
|
|
668
662
|
protected route: ActivatedRoute;
|
|
669
663
|
protected eventService: AXPBroadcastEventService;
|
|
670
664
|
protected deviceService: AXPDeviceService;
|
|
665
|
+
private readonly unsavedChangesConfirm;
|
|
666
|
+
private readonly unsavedChangesPopstate;
|
|
667
|
+
private readonly pageComponentInstanceRegistry;
|
|
668
|
+
private readonly shortcutRegistry;
|
|
669
|
+
private readonly destroyRef;
|
|
670
|
+
private readonly elementRef;
|
|
671
671
|
private onSelectionChangeSubscription?;
|
|
672
|
+
/** Prevents sidebar tab init events from pushing history before {@link ngOnInit} load completes. */
|
|
673
|
+
private detailsLayoutReady;
|
|
672
674
|
private readonly destroyed$;
|
|
673
|
-
private formBaselineCaptured;
|
|
674
|
-
private formBaselinePageKey;
|
|
675
|
-
private formBaselineTimer?;
|
|
676
|
-
private suppressDirtySync;
|
|
677
675
|
private footerActionsGeneration;
|
|
678
|
-
private
|
|
676
|
+
private keyboardShortcutRegistrationGeneration;
|
|
677
|
+
/** Header actions with resolved shortcut chords, keyed by command name. */
|
|
678
|
+
private readonly actionShortcutEntries;
|
|
679
679
|
/** Save/discard use live {@link AXPLayoutDetailsViewViewModel.isDirty}; other actions use evaluated `visible`. */
|
|
680
680
|
private static isTruthyActionFlag;
|
|
681
681
|
protected form: _angular_core.Signal<AXFormComponent | undefined>;
|
|
682
682
|
protected widgetContainer: _angular_core.Signal<AXPWidgetContainerComponent | undefined>;
|
|
683
|
+
private readonly sidebarTabs;
|
|
684
|
+
private sidebarTabChangeSuppressed;
|
|
683
685
|
protected footerPrimaryActions: _angular_core.WritableSignal<AXPActionMenuItem[]>;
|
|
684
686
|
protected footerSecondaryActions: _angular_core.WritableSignal<AXPActionMenuItem[]>;
|
|
685
687
|
protected footerActions: _angular_core.Signal<AXPActionMenuItem[]>;
|
|
@@ -689,6 +691,7 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
689
691
|
color: string;
|
|
690
692
|
visible?: string | boolean;
|
|
691
693
|
command: AXPExecuteCommand;
|
|
694
|
+
shortcuts?: _acorex_platform_core.AXPKeyboardShortcut[];
|
|
692
695
|
} | null>;
|
|
693
696
|
protected acceptFooterCommand: _angular_core.Signal<{
|
|
694
697
|
title: string;
|
|
@@ -696,10 +699,13 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
696
699
|
color: string;
|
|
697
700
|
visible?: string | boolean;
|
|
698
701
|
command: AXPExecuteCommand;
|
|
702
|
+
shortcuts?: _acorex_platform_core.AXPKeyboardShortcut[];
|
|
699
703
|
} | null>;
|
|
700
704
|
protected hasSaveDiscardFooterCommands: _angular_core.Signal<boolean>;
|
|
701
|
-
/** Entity save/discard — driven live by
|
|
705
|
+
/** Entity save/discard — driven live by widget/container dirty state, not evaluated action metadata. */
|
|
702
706
|
protected showSaveDiscardFooter: _angular_core.Signal<boolean>;
|
|
707
|
+
/** Live dirty flag for widget-based entity forms (not component-hosted pages). */
|
|
708
|
+
protected liveFormIsDirty: _angular_core.Signal<boolean>;
|
|
703
709
|
protected hasVisibleFooterPrimaryActions: _angular_core.Signal<boolean>;
|
|
704
710
|
protected hasVisibleFooterSecondaryActions: _angular_core.Signal<boolean>;
|
|
705
711
|
protected isSaveDiscardFooterAction(action: AXPActionMenuItem): boolean;
|
|
@@ -715,16 +721,15 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
715
721
|
ngOnDestroy(): void;
|
|
716
722
|
private refreshFooterActions;
|
|
717
723
|
protected handleOnContextChanged(e: AXPContextChangeEvent): void;
|
|
724
|
+
private getLiveFormContext;
|
|
725
|
+
private finalizeSave;
|
|
726
|
+
private finalizeDiscard;
|
|
718
727
|
/**
|
|
719
|
-
*
|
|
720
|
-
*/
|
|
721
|
-
private resetFormDirtyBaseline;
|
|
722
|
-
/**
|
|
723
|
-
* Commits a clean baseline immediately when widgets are mounted; otherwise defers to idle commit.
|
|
728
|
+
* `ax-tabs` selects on click before we can confirm. Revert synchronously, then confirm + switch.
|
|
724
729
|
*/
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
730
|
+
protected handleSidebarTabChanged(event: AXTabStripChangedEvent): void;
|
|
731
|
+
protected handleSelectPage(page: AXPLayoutDetailsViewPage): Promise<void>;
|
|
732
|
+
private completePageSwitch;
|
|
728
733
|
protected getAllPrimaryActions(): Promise<AXPLayoutDetailsViewAction[]>;
|
|
729
734
|
getPrimaryMenuItems(): Promise<AXPActionMenuItem[]>;
|
|
730
735
|
protected getFooterPrimaryActions(): Promise<AXPActionMenuItem[]>;
|
|
@@ -742,12 +747,65 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
742
747
|
*/
|
|
743
748
|
getEntityData(): Record<string, any> | null;
|
|
744
749
|
onBackButtonClick(): Promise<void>;
|
|
750
|
+
/**
|
|
751
|
+
* Router guard hook — same unsaved-changes confirm as dialog builder {@link confirmCloseWhenDirty}.
|
|
752
|
+
*/
|
|
753
|
+
canDeactivate(): Promise<boolean>;
|
|
754
|
+
/** Active entity component page instance, when the current details sub-page is component-based. */
|
|
755
|
+
private getActivePageComponentInstance;
|
|
756
|
+
/** Component key for the current details sub-page, when content is component-based. */
|
|
757
|
+
private getActivePageComponentKey;
|
|
758
|
+
private static isComponentPageContent;
|
|
759
|
+
/** Whether the active component-based entity page has unsaved edits. */
|
|
760
|
+
private isActivePageComponentDirty;
|
|
761
|
+
/** Whether the current details page has user-origin unsaved edits (form or component page). */
|
|
762
|
+
private shouldPromptLeave;
|
|
763
|
+
/** Single gate for leaving the page or switching details sub-pages when dirty. */
|
|
764
|
+
private confirmLeaveIfDirty;
|
|
745
765
|
execute(command: AXPExecuteCommand): Promise<void>;
|
|
746
|
-
|
|
766
|
+
/**
|
|
767
|
+
* After a component-based page command (e.g. custom discard/save), align view-model dirty
|
|
768
|
+
* state and widget context with the hosted page when it no longer reports unsaved changes.
|
|
769
|
+
*/
|
|
770
|
+
private syncDirtyStateAfterPageComponentCommand;
|
|
771
|
+
/** Waits for builder/effect microtasks to finish after a component page command. */
|
|
772
|
+
private waitForComponentDirtySettle;
|
|
773
|
+
private refreshKeyboardShortcutRegistrations;
|
|
774
|
+
private collectActionShortcutEntries;
|
|
775
|
+
private isHeaderActionAvailable;
|
|
776
|
+
/** Whether save/discard core shortcuts are listed in the help dialog (page supports them). */
|
|
777
|
+
private isCoreSaveShortcutAvailable;
|
|
778
|
+
private isCoreDiscardShortcutAvailable;
|
|
779
|
+
private canExecuteSaveShortcut;
|
|
780
|
+
private canExecuteDiscardShortcut;
|
|
781
|
+
private executeDiscardViaShortcut;
|
|
782
|
+
private isActionShortcutActive;
|
|
783
|
+
private registerCoreKeyboardShortcuts;
|
|
784
|
+
private registerActionKeyboardShortcuts;
|
|
747
785
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutDetailsViewComponent, never>;
|
|
748
786
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutDetailsViewComponent, "axp-layout-details-view", never, { "adapter": { "alias": "adapter"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
749
787
|
}
|
|
750
788
|
|
|
789
|
+
type AXPDetailsViewActionShortcut = AXPKeyboardShortcutChord;
|
|
790
|
+
/**
|
|
791
|
+
* Returns the base workflow/command name from a composite entity action command id (`cmd&actionName`).
|
|
792
|
+
*/
|
|
793
|
+
declare function getDetailsViewActionCommandBaseName(commandName: string | undefined): string;
|
|
794
|
+
/**
|
|
795
|
+
* Resolves keyboard shortcuts for a header entity action.
|
|
796
|
+
* Explicit `shortcuts` wins; pass `[]` to disable. Otherwise known commands use platform defaults.
|
|
797
|
+
*/
|
|
798
|
+
declare function resolveDetailsViewActionShortcuts(commandBaseName: string, explicit?: readonly AXPKeyboardShortcut[]): AXPDetailsViewActionShortcut[] | undefined;
|
|
799
|
+
/**
|
|
800
|
+
* Resolves save/discard footer command shortcuts from page settings.
|
|
801
|
+
*/
|
|
802
|
+
declare function resolveDetailsViewFooterCommandShortcuts(commandName: string, explicit?: readonly AXPKeyboardShortcut[]): AXPDetailsViewActionShortcut[] | undefined;
|
|
803
|
+
|
|
804
|
+
/**
|
|
805
|
+
* Prompts for unsaved changes before leaving the entity details route (breadcrumbs, menu, back to list).
|
|
806
|
+
*/
|
|
807
|
+
declare const axpDetailsViewCanDeactivateGuard: _angular_router.CanDeactivateFn<AXPLayoutDetailsViewComponent>;
|
|
808
|
+
|
|
751
809
|
/**
|
|
752
810
|
* Registry of rendered page component instances by component key.
|
|
753
811
|
* Used so page execute can delegate to the actual component instance in the view.
|
|
@@ -789,5 +847,5 @@ declare class AXPPageComponentRendererDirective implements OnInit, OnDestroy {
|
|
|
789
847
|
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>;
|
|
790
848
|
}
|
|
791
849
|
|
|
792
|
-
export { AXPLayoutDetailsViewComponent, AXPLayoutDetailsViewViewModel, AXPPageComponentInstanceRegistryService, AXPPageComponentRendererDirective, AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent };
|
|
793
|
-
export type { AXPLayoutDetailsViewAction, AXPLayoutDetailsViewAdapter, AXPLayoutDetailsViewPage, AXPLayoutDetailsViewTabItem, AXPPageContentItem };
|
|
850
|
+
export { AXPLayoutDetailsViewComponent, AXPLayoutDetailsViewViewModel, AXPPageComponentInstanceRegistryService, AXPPageComponentRendererDirective, AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent, axpDetailsViewCanDeactivateGuard, buildNotSavedPageBadge, getDetailsViewActionCommandBaseName, isDiscardCommand, resolveDetailsViewActionShortcuts, resolveDetailsViewFooterCommandShortcuts };
|
|
851
|
+
export type { AXPDetailsViewActionShortcut, AXPLayoutDetailsViewAction, AXPLayoutDetailsViewAdapter, AXPLayoutDetailsViewPage, AXPLayoutDetailsViewTabItem, AXPPageContentItem };
|