@acorex/platform 21.0.0-next.34 → 21.0.0-next.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-common.mjs +19 -1
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +11 -172
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +7 -8
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +39 -29
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +8 -9
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +468 -255
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +171 -86
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +36 -13
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs → acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs} +5 -60
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +101 -128
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +16 -4
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +25 -5
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-common.d.ts +11 -6
- package/types/acorex-platform-core.d.ts +56 -101
- package/types/acorex-platform-layout-builder.d.ts +0 -1
- package/types/acorex-platform-layout-components.d.ts +4 -3
- package/types/acorex-platform-layout-designer.d.ts +1 -1
- package/types/acorex-platform-layout-entity.d.ts +36 -30
- package/types/acorex-platform-layout-views.d.ts +31 -29
- package/types/acorex-platform-layout-widget-core.d.ts +30 -14
- package/types/acorex-platform-layout-widgets.d.ts +17 -11
- package/types/acorex-platform-themes-default.d.ts +1 -0
- package/types/acorex-platform-workflow.d.ts +28 -51
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-layout-views.mjs","sources":["../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.viewmodel.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/page-component-instance-registry.service.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/page-component-renderer.directive.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.component.html","../../../../libs/platform/layout/views/src/acorex-platform-layout-views.ts"],"sourcesContent":["import { AXPActionMenuItem, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPPageStatus } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPageLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n\n abstract hasTitleActions: Signal<boolean>;\n\n abstract hasPrimaryActions: Signal<boolean>;\n\n abstract hasSecondaryActions: Signal<boolean>;\n\n abstract hasActions: Signal<boolean>;\n\n abstract breadcrumbs: Signal<AXPBreadcrumbItem[]>;\n\n abstract title: Signal<string>;\n\n abstract titleIcon: Signal<string | null>;\n\n abstract hasTitle: Signal<boolean>;\n\n abstract hasTitleIcon: Signal<boolean>;\n\n abstract hasDescription: Signal<boolean>;\n\n abstract description: Signal<string | null>;\n\n abstract hasBreadcrumbs: Signal<boolean>;\n\n abstract hasBadge: Signal<boolean>;\n\n abstract badge: Signal<AXPBadge | null>;\n\n abstract hasStatus: Signal<boolean>;\n\n abstract status: Signal<AXPPageStatus | null>;\n\n abstract hasBackButton: Signal<boolean>;\n\n abstract backButton: Signal<AXPBackButton | null>;\n\n abstract onBackButtonClick: () => void | Promise<void>;\n\n abstract startSideToggle: () => void | Promise<void>;\n\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXClickEvent, AXCommonModule } from '@acorex/cdk/common';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXPComponentSlotModule } from '@acorex/platform/core';\n//\nimport { AXDrawerContainerDirective, AXDrawerDirectiveModule, AXDrawerItemDirective } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPDeviceService, AXPExecuteCommand } from '@acorex/platform/core';\nimport {\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n AXPThemeLayoutHeaderComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPStatusChipComponent } from '@acorex/platform/layout/widgets';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPageLayoutBase } from './page-layout.base';\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPComponentSlotModule,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutHeaderComponent,\n AXPStickyDirective,\n AXPThemeLayoutContainerComponent,\n AXPStatusChipComponent,\n ],\n templateUrl: './page-layout.component.html',\n styleUrls: ['./page-layout.component.scss'],\n selector: 'axp-page-layout',\n encapsulation: ViewEncapsulation.None,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [AXDrawerContainerDirective],\n providers: [],\n})\nexport class AXPPageLayoutComponent {\n protected page = inject<AXPPageLayoutBase>(AXPPageLayoutBase, { optional: true });\n\n protected layoutService = inject(AXPLayoutThemeService);\n protected deviceService = inject(AXPDeviceService);\n\n protected startSideDrawer = viewChild<AXDrawerItemDirective>('startSideDrawer');\n\n protected workflow = inject(AXPWorkflowService);\n protected commandService = inject(AXPCommandService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.page?.title();\n this.page?.description();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-page-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.execute(item.command);\n }\n }\n\n toggleStartSide() {\n this.startSideDrawer()?.toggle();\n }\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n\n protected async execute(command: AXPExecuteCommand) {\n const reserved = ['navigate'];\n if (reserved.includes(command.name)) {\n await this.workflow.execute(command.name, { options: command.options });\n return;\n }\n if (this.commandService.exists(command.name)) {\n await this.commandService.execute(command.name, command.options ?? {});\n } else {\n await this.page?.execute(command);\n }\n }\n\n protected handleOnBackdropClick(event: MouseEvent) {\n event.stopPropagation();\n this.startSideDrawer()?.hide();\n }\n\n //#region ---------------- Status Helpers ----------------\n\n protected getEntityData(): Record<string, any> | null {\n // Get entity data from page context if available\n if (this.page && 'getEntityData' in this.page && typeof (this.page as any).getEntityData === 'function') {\n return (this.page as any).getEntityData();\n }\n return null;\n }\n\n protected async handleStatusTransition(transition: any): Promise<void> {\n // Convert status transition to command and execute\n await this.execute({\n name: 'update-status',\n options: {\n transition,\n },\n });\n }\n\n //#endregion\n}\n","<!-------- Begin Start Side Drawer -------->\n<div id=\"axp-drawer-start\" [mode]=\"deviceService.isSmall() ? 'overlay' : 'push'\" [transition]=\"250\" axDrawerItem\n [backDrop]=\"true\" (onBackdropClick)=\"handleBackdropClick($event)\" #startSideDrawer=\"axDrawerItem\"\n [backdropClass]=\"'ax-bg-darkest/75'\" [collapsed]=\"deviceService.isSmall()\" drawerLocation=\"start\"\n class=\"ax-z-50 ax-h-full\">\n <ng-content select=\"axp-layout-start-side\"></ng-content>\n</div>\n<!-------- Finish Start Side Drawer -------->\n<!--------------------------------------------------------------->\n<!-------- Begin Main Layout Container -------->\n<axp-layout-container id=\"axp-page-layout\" #container>\n <!-------- Begin Page Header -------->\n <axp-layout-header id=\"axp-page-header\" *translate=\"let t\" #sticky=\"axpSticky\" [axpSticky]=\"'axp-is-sticky'\"\n [stickyOffset]=\"50\" [stickyParent]=\"container.hostElement\">\n <!-------- Begin Back Button (Mobile Only) -------->\n @if (page?.hasBackButton() && deviceService.isSmall()) {\n <ax-button id=\"axp-btn-back\" [look]=\"'blank'\" class=\"ax-sm ax-w-fit ax-ms-1\" color=\"secondary\"\n (click)=\"page?.onBackButtonClick()\" [text]=\"page?.backButton()?.title\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-chevron-left rtl:ax-rotate-180\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n <!-------- Finish Back Button -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Bar -------->\n <axp-layout-title-bar id=\"axp-title-bar\">\n <!-------- Begin Title Section -------->\n <div class=\"ax-flex ax-flex-col ax-transition ax-shrink-1 ax-min-w-0\">\n <!-------- Begin Breadcrumbs -------->\n @if (page?.hasBreadcrumbs() && !deviceService.isSmall()) {\n <ax-breadcrumbs id=\"axp-breadcrumb\" class=\"ax-mb-1\">\n @for (item of page?.breadcrumbs(); track $index) {\n <ax-breadcrumbs-item [attr.id]=\"'axp-breadcrumb-item-' + $index\" [active]=\"$last\"\n (click)=\"item.command ? execute(item.command) : null\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n {{ t(item.title) | async }}\n </ax-breadcrumbs-item>\n }\n <ng-template #divider>\n <i class=\"fa-regular fa-chevron-right rtl:ax-rotate-180 fa-sm\"></i>\n </ng-template>\n </ax-breadcrumbs>\n }\n <!-------- Finish Breadcrumbs -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Container -------->\n <div class=\"__title-container\">\n <!-------- Begin Page Title -------->\n @if (page?.hasTitle()) {\n <axp-layout-title id=\"axp-page-title\">\n @if (page?.hasTitleIcon()) {\n <ax-icon [icon]=\"page?.titleIcon()!\" class=\"ax-me-2\"></ax-icon>\n }\n {{ t(page?.title()) | async }}\n </axp-layout-title>\n }\n <!-------- Finish Page Title -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Actions -------->\n @if (page?.hasTitleActions()) {\n <ax-button id=\"axp-btn-title-actions\" [look]=\"'blank'\" class=\"ax-sm -ax-mx-2\">\n <ax-prefix>\n <i class=\"fa-solid fa-caret-down fa-fw\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of page?.titleActions(); track $index) {\n <ng-container>\n <ax-button-item [attr.id]=\"'axp-btn-title-action-' + (sub.name || $index)\"\n [text]=\"(t(sub.title) | async)!\" [color]=\"sub.color\" [disabled]=\"sub.disabled\"\n [selected]=\"sub.command?.metadata?.['isSelected']\" (onClick)=\"handleActionClick(sub)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n @if (sub.command?.metadata?.['isSelected']) {\n <ax-suffix class=\"ax-ms-2\">\n <ax-icon icon=\"fa-solid fa-check\"></ax-icon>\n </ax-suffix>\n }\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n <!-------- Finish Title Actions -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Badge -------->\n @if (page?.hasBadge()) {\n <div id=\"axp-page-badge\" class=\"__title-badge --{{ page?.badge()?.color }}\"\n [attr.title]=\"page?.badge()?.description\">\n <i class=\"fa-solid fa-circle\"></i>\n {{ page?.badge()?.title }}\n </div>\n }\n <!-------- Finish Title Badge -------->\n\n <!-------- Begin Page Status -------->\n\n @if (page?.hasStatus()) {\n <axp-status-chip [value]=\"page?.status()?.value ?? null\" [readonly]=\"page?.status()?.readonly || false\"\n [definitionKey]=\"page?.status()?.definitionKey ?? null\" [entityData]=\"getEntityData()\"\n (transitionExecuted)=\"handleStatusTransition($event)\" class=\"__title-status\"></axp-status-chip>\n }\n <!-------- Finish Page Status -------->\n\n </div>\n <!-------- Finish Title Container -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Description -------->\n @if (page?.hasDescription()) {\n <axp-layout-description id=\"axp-page-description\">\n {{ t(page?.description()) | async }}</axp-layout-description>\n }\n <!-------- Finish Page Description -------->\n </div>\n <!-------- Finish Title Section -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Actions -------->\n <axp-layout-actions id=\"axp-page-actions\" class=\"ax-shrink-0\">\n <axp-component-slot name=\"page-header-actions\"></axp-component-slot>\n <!-------- Begin Primary Actions -------->\n @if (page?.hasPrimaryActions()) {\n @for (item of page?.primaryMenuItems(); track $index) {\n @if (item.visible != false) {\n <ax-button [attr.id]=\"'axp-btn-primary-' + (item.name || item.title)\" [class.ax-sm]=\"deviceService.isSmall()\"\n [iconOnly]=\"deviceService.isSmall()\" [disabled]=\"item.disabled\" [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\" [color]=\"item.color\" (onClick)=\"handleActionClick(item)\">\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n @if (item?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of item?.items; track $index) {\n @if (sub.visible != false) {\n <ax-button-item [attr.id]=\"'axp-btn-primary-' + (item.name || item.title) + '-' + (sub.name || sub.title)\"\n [text]=\"(t(sub.title) | async)!\" [color]=\"sub.color\" [disabled]=\"sub.disabled\"\n (onClick)=\"handleActionClick(sub)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n }\n }\n }\n <!-------- Finish Primary Actions -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Secondary Actions -------->\n @if (page?.hasSecondaryActions()) {\n <ax-button id=\"axp-btn-secondary\" [class.ax-sm]=\"deviceService.isSmall()\" [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\" [color]=\"'default'\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (item of page?.secondaryMenuItems(); track $index) {\n @if (item.visible != false) {\n <ax-button-item [attr.id]=\"'axp-btn-secondary-' + (item.name || item.title)\"\n [text]=\"(item.title | translate | async)!\" [color]=\"item.color\" [disabled]=\"item.disabled\"\n (onClick)=\"handleSecondaryActionClick(item)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n <!-------- Finish Secondary Actions -------->\n </axp-layout-actions>\n <!-------- Finish Page Actions -------->\n </axp-layout-title-bar>\n <!-------- Finish Title Bar -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Toolbar / Navbar -------->\n @if (!sticky.isSticky) {}\n <ng-content select=\"axp-page-toolbar\"></ng-content>\n <!-------- Finish Page Toolbar / Navbar -------->\n </axp-layout-header>\n <!-------- Finish Page Header -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Content -------->\n <ng-content select=\"axp-page-content\"></ng-content>\n <!-------- Finish Page Content -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Footer -------->\n <axp-page-footer-container id=\"axp-page-footer-container\"\n [ngStyle]=\"{ display: tt.isEmpty() && prefixSlot.isEmpty() && suffixSlot.isEmpty() ? 'none' : 'block' }\">\n <axp-layout-container #tt>\n <ng-content select=\"axp-page-footer\"></ng-content>\n </axp-layout-container>\n <axp-page-footer id=\"axp-page-footer\">\n <axp-layout-prefix>\n <axp-component-slot name=\"page-footer-start\" #prefixSlot=\"slot\"></axp-component-slot>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <axp-component-slot name=\"page-footer-end\" #suffixSlot=\"slot\"></axp-component-slot>\n </axp-layout-suffix>\n </axp-page-footer>\n </axp-page-footer-container>\n <!-------- Finish Page Footer -------->\n</axp-layout-container>\n<!-------- Finish Main Layout Container -------->","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBadge,\n AXPBreadcrumbItem,\n AXPExecuteCommand,\n AXPPageStatus,\n} from '@acorex/platform/core';\nimport { AXPPolicyEngineService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { isEmpty, isNil } from 'lodash-es';\nimport { AXPPageLayoutBase } from './page-layout.base';\nimport { AXPPageLayoutComponent } from './page-layout.component';\n@Component({\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n protected readonly policyService = inject(AXPPolicyEngineService);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n async ngOnInit() {\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<string>('');\n public titleIcon = signal<string | null>(null);\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPageTitle());\n const icon = await this.getPageIcon();\n this.titleIcon.set(icon);\n });\n\n protected getPageTitle(): string | Promise<string> {\n return '';\n }\n\n protected getPageIcon(): string | null | Promise<string | null> {\n return null;\n }\n\n public hasTitle = computed(() => this.title() !== '');\n public hasTitleIcon = computed(() => this.titleIcon() !== null);\n\n //#endregion\n\n //#region ---------------- Description ----------------\n\n public description = signal<string | null>(null);\n\n public hasDescription = computed(() => !isNil(this.description()) && !isEmpty(this.description()));\n\n #descriptionEffect = effect(async () => {\n this.updateTrigger();\n this.description.set(await this.getPageDescription());\n });\n\n protected getPageDescription(): string | null | Promise<string | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Breadcrumbs ----------------\n\n private defaultBreadCrumbs: AXPBreadcrumbItem[] = [\n {\n title: '@general:terms.interface.navigation.home',\n icon: 'fa-solid fa-home ax-text-xs ax-me-1',\n command: {\n name: 'navigate',\n options: {\n path: this.homePageService.getCurrent().path,\n },\n },\n },\n ];\n\n public breadcrumbs = signal<AXPBreadcrumbItem[]>(this.defaultBreadCrumbs);\n\n #breadcrumbsEffect = effect(async () => {\n this.updateTrigger();\n const breadCrumbs = await this.getPageBreadcrumbs();\n this.breadcrumbs.set([...this.defaultBreadCrumbs, ...breadCrumbs]);\n });\n\n public hasBreadcrumbs = computed(() => this.breadcrumbs().length > 1);\n\n protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]> {\n return [];\n }\n\n //#endregion\n\n //#region ---------------- Badge ----------------\n\n public badge = signal<AXPBadge | null>(null);\n\n public hasBadge = computed(() => this.badge() !== null);\n\n #badgeEffect = effect(async () => {\n this.updateTrigger();\n this.badge.set(await this.getPageBadge());\n });\n\n protected getPageBadge(): AXPBadge | null | Promise<AXPBadge | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Status ----------------\n\n public status = signal<AXPPageStatus | null>(null);\n\n public hasStatus = computed(() => this.status() !== null);\n\n #statusEffect = effect(async () => {\n this.updateTrigger();\n this.status.set(await this.getPageStatus());\n });\n\n protected getPageStatus(): AXPPageStatus | null | Promise<AXPPageStatus | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Layout ----------------\n\n protected layout = viewChild(AXPPageLayoutComponent);\n\n //TODO: Remove this after migration to the new layout\n protected toggleEndSide() {\n //this.layout()?.toggleStartSide()\n }\n\n //TODO: Remove this after migration to the new layout\n protected toggleStartSide() {\n this.layout()?.toggleStartSide();\n }\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasPrimaryActions = computed(() => this.primaryMenuItems().filter((item) => item.visible != false).length > 0);\n\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getPrimaryMenuItems();\n this.primaryMenuItems.set(items);\n });\n\n public getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasSecondaryActions = computed(\n () => this.secondaryMenuItems().filter((item) => item.visible != false).length > 0,\n );\n\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getSecondaryMenuItems();\n this.secondaryMenuItems.set(items);\n });\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public backButton = signal<AXPBackButton | null>(null);\n\n public hasBackButton = computed(() => this.backButton() !== null);\n\n protected getBackButton(): (AXPBackButton | null) | Promise<AXPBackButton | null> {\n return null;\n }\n\n #backButtonEffect = effect(async () => {\n this.updateTrigger();\n this.backButton.set(await this.getBackButton());\n });\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n public startSideToggle(): void | Promise<void> {\n this.layout();\n }\n\n public onBackButtonClick(): void | Promise<void> { }\n\n //#endregion\n}\n","import { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPopupLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n abstract hasTitleActions: Signal<boolean>;\n abstract hasPrimaryActions: Signal<boolean>;\n abstract hasSecondaryActions: Signal<boolean>;\n abstract hasActions: Signal<boolean>;\n abstract title: Signal<string>;\n abstract hasTitle: Signal<boolean>;\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n} ","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent, AXCommonModule } from \"@acorex/cdk/common\";\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\n//\nimport { AXDrawerDirectiveModule } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPopupLayoutBase } from './popup-layout.base';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n ],\n templateUrl: './popup-layout.component.html',\n styleUrls: ['./popup-layout.component.scss'],\n selector: 'axp-popup-layout',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPPopupLayoutComponent {\n protected popup = inject<AXPPopupLayoutBase>(AXPPopupLayoutBase);\n protected layoutService = inject(AXPLayoutThemeService);\n protected workflow = inject(AXPWorkflowService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.popup?.title();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-popup-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.popup?.execute(item.command);\n }\n }\n\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.popup?.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n} ","<axp-layout-container id=\"axp-popup-layout\" #container>\n <ng-content select=\"axp-page-content\"></ng-content>\n <axp-page-footer id=\"axp-popup-footer\" *translate=\"let t\">\n <ax-prefix> </ax-prefix>\n @if (popup.hasPrimaryActions()) {\n <ax-suffix>\n @for (item of popup.primaryMenuItems(); track $index) {\n <ax-button\n [attr.id]=\"'axp-btn-primary-' + (item.name || item.title)\"\n [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"item.color\"\n (onClick)=\"handleActionClick(item)\"\n >\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-suffix>\n }\n </axp-page-footer>\n</axp-layout-container>\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { AXPPopupLayoutComponent } from './popup-layout.component';\nimport { AXBasePageComponent } from '@acorex/components/page';\n\n@Component({\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n override async ngOnInit() {\n super.ngOnInit();\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<string>('');\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPopupTitle());\n });\n\n protected getPopupTitle(): string | Promise<string> {\n return '';\n }\n\n public hasTitle = computed(() => this.title() !== '');\n\n //#endregion\n\n\n\n //#region ---------------- Layout ----------------\n\n // Placeholder for popup layout reference if needed\n protected layout = viewChild(AXPPopupLayoutComponent);\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasPrimaryActions = computed(() => this.primaryMenuItems().length > 0);\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.primaryMenuItems.set(await this.getPrimaryMenuItems());\n });\n protected getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasSecondaryActions = computed(() => this.secondaryMenuItems().length > 0);\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.secondaryMenuItems.set(await this.getSecondaryMenuItems());\n });\n protected getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n //#endregion\n} ","import { AXFormComponent } from '@acorex/components/form';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport {\n AXPDeviceService,\n AXPExecuteCommand,\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n getChangedPaths,\n getSmart,\n} from '@acorex/platform/core';\nimport { AXPPageStatus, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { computed, effect, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { cloneDeep, get, isEqual } from 'lodash-es';\nimport {\n AXPLayoutDetailsViewAdapter,\n AXPLayoutDetailsViewPage,\n AXPLayoutDetailsViewTabItem,\n} from './details-view.adapter';\n\n//#region ---- Root-context widget expression resolution ----\n\n/**\n * Evaluates `{{ ... }}` strings inside `options.customFilterDefinitions` using `rootContext`\n * (details adapter load data), so filter UI does not depend on widget-renderer contextService.\n */\nasync function buildEvaluatedPageContentsForRootContext(\n currentPage: AXPLayoutDetailsViewPage | null,\n rootContext: Record<string, unknown>,\n evaluatorService: AXPExpressionEvaluatorService,\n): Promise<{\n evaluatedPageContent: AXPWidgetNode[];\n evaluatedTabContentsById: Record<string, AXPWidgetNode[]>;\n}> {\n if (!currentPage) {\n return { evaluatedPageContent: [], evaluatedTabContentsById: {} };\n }\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => getSmart(rootContext, path),\n },\n };\n\n const resolveNodes = async (nodes: AXPWidgetNode[] | undefined): Promise<AXPWidgetNode[]> => {\n if (!nodes?.length) {\n return [];\n }\n const cloned = cloneDeep(nodes);\n for (const node of cloned) {\n const defs = node.options?.['customFilterDefinitions'] as unknown[] | undefined;\n if (Array.isArray(defs) && defs.length > 0) {\n node.options!['customFilterDefinitions'] = await evaluatorService.evaluate(defs, scope);\n }\n }\n return cloned;\n };\n\n const evaluatedPageContent = await resolveNodes(currentPage.content);\n const evaluatedTabContentsById: Record<string, AXPWidgetNode[]> = {};\n for (const tab of currentPage.tabs ?? []) {\n evaluatedTabContentsById[tab.id] = await resolveNodes(tab.content);\n }\n\n return { evaluatedPageContent, evaluatedTabContentsById };\n}\n\n//#endregion\n\nexport const AXPLayoutDetailsViewViewModel = signalStore(\n withState(() => {\n const state = {\n adapter: null as AXPLayoutDetailsViewAdapter | null,\n rootContext: {} as Record<string, any>,\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n scope: null as AXPExpressionEvaluatorScope | null,\n status: AXPPageStatus.Processing,\n currentPage: null as AXPLayoutDetailsViewPage | null,\n currentTab: null as AXPLayoutDetailsViewTabItem | null,\n pageSelectedRows: [] as any[],\n // Cache for rendered tabs per page to prevent re-rendering\n renderedTabsCache: {} as Record<string, Array<{ tabId: string; tab: AXPLayoutDetailsViewTabItem }>>,\n /** Page main column widgets with `customFilterDefinitions` evaluated against `rootContext` */\n evaluatedPageContent: [] as AXPWidgetNode[],\n /** Tab panel widgets keyed by tab id (same evaluation as `evaluatedPageContent`) */\n evaluatedTabContentsById: {} as Record<string, AXPWidgetNode[]>,\n };\n return state;\n }),\n withComputed((store, deviceService = inject(AXPDeviceService)) => ({\n icon: computed(() => store.adapter()?.icon ?? null),\n content: computed(() => {\n const pages = store.adapter()?.pages ?? [];\n const primaryPage = pages.find((p) => p.isPrimary) ?? pages[0];\n return primaryPage?.content ?? [];\n }),\n //\n showPages: computed(() => !store.currentPage() && !deviceService.isLarge()),\n isLarge: computed(() => deviceService.isLarge()),\n //\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isSaving: computed(() => store.status() == AXPPageStatus.Submitting),\n isDirty: computed(() => !isEqual(store.context(), store.previousContext())),\n changesCount: computed(() => getChangedPaths(store.context(), store.previousContext()).length),\n isLoaded: computed(() => store.adapter() != null),\n currentPageSelectedRows: computed(() => store.pageSelectedRows()),\n //\n // Rendered tabs for current page - prevents re-rendering on tab switch\n currentPageRenderedTabs: computed(() => {\n const currentPage = store.currentPage();\n if (!currentPage?.id) {\n return [];\n }\n\n const pageId = currentPage.id;\n const cache = store.renderedTabsCache();\n return cache[pageId] || [];\n }),\n })),\n withMethods(\n (\n store,\n evaluatorService = inject(AXPExpressionEvaluatorService),\n router = inject(Router),\n route = inject(ActivatedRoute),\n deviceService = inject(AXPDeviceService),\n formatService = inject(AXFormatService),\n toastService = inject(AXToastService),\n translateService = inject(AXTranslationService),\n settingsService = inject(AXPSettingsService),\n ) => {\n // Effect to automatically cache current tab when it changes\n effect(() => {\n const currentPage = store.currentPage();\n const currentTab = store.currentTab();\n\n if (currentPage?.id && currentTab?.id) {\n const pageId = currentPage.id;\n const tabId = currentTab.id;\n const cache = store.renderedTabsCache();\n const pageCache = cache[pageId] || [];\n\n // Check if tab is already in cache\n const isTabCached = pageCache.some((cached) => cached.tabId === tabId);\n\n if (!isTabCached) {\n // Add tab to cache for this page\n const newTabCache = {\n tabId: tabId,\n tab: currentTab,\n };\n\n const updatedPageCache = [...pageCache, newTabCache];\n\n // Update the cache immutably\n const updatedCache = {\n ...cache,\n [pageId]: updatedPageCache,\n };\n\n patchState(store, {\n renderedTabsCache: updatedCache,\n });\n }\n }\n });\n\n // Create an effect to handle route changes\n effect(() => {\n if (store.adapter()) {\n route.queryParams.subscribe((params) => {\n const pageId = params['page'];\n const adapter = store.adapter();\n if (adapter) {\n // Find current page from query param or conditionally default to first page\n let currentPage: AXPLayoutDetailsViewPage | null = null;\n if (pageId) {\n const foundPage = adapter.pages.find((p) => p.id === pageId);\n if (foundPage) {\n currentPage = foundPage;\n }\n } else {\n // Only auto-select primary page if layout is large\n if (deviceService.isLarge() || adapter.pages.length == 1) {\n const primaryPage = adapter.pages.find((p) => p.isPrimary) ?? adapter.pages[0];\n currentPage = primaryPage;\n }\n }\n\n // Set current tab to first tab of the current page (internal state only)\n let currentTab = currentPage?.tabs?.[0] ?? null;\n\n // Only update if there's a change. When `currentPage` is still null, `load()` → `loadPage`\n // will set `currentPage` and evaluated content; the first `queryParams` emit would otherwise\n // race and duplicate `buildEvaluatedPageContentsForRootContext` (double render).\n if (store.currentPage()?.id !== currentPage?.id) {\n if (store.currentPage() == null) {\n return;\n }\n patchState(store, {\n currentPage,\n currentTab,\n });\n void (async () => {\n const rootCtx = store.rootContext() as Record<string, unknown>;\n const { evaluatedPageContent, evaluatedTabContentsById } =\n await buildEvaluatedPageContentsForRootContext(currentPage, rootCtx, evaluatorService);\n patchState(store, {\n evaluatedPageContent,\n evaluatedTabContentsById,\n });\n })();\n }\n }\n });\n }\n });\n\n return {\n async loadAdapter(adapter: AXPLayoutDetailsViewAdapter) {\n patchState(store, { adapter });\n\n // Load adapter context if adapter has load function\n let adapterContext = {};\n if (adapter.load) {\n const adapterResult = await adapter.load();\n adapterContext = adapterResult?.data ?? {};\n }\n\n patchState(store, {\n rootContext: cloneDeep(adapterContext),\n });\n },\n\n async loadPage(pageId?: string, forceRefresh?: boolean) {\n const adapter = store.adapter();\n if (!adapter) {\n throw new Error('Adapter must be loaded before loading page');\n }\n\n patchState(store, {\n status: AXPPageStatus.Processing,\n });\n\n // Get page ID from parameter or query params\n const queryParams = router.routerState.snapshot.root.queryParams;\n const targetPageId = pageId || queryParams['page'];\n\n // Find current page from page ID or conditionally default to first page\n let currentPage: AXPLayoutDetailsViewPage | null = null;\n if (targetPageId) {\n const foundPage = adapter.pages.find((p) => p.id === targetPageId);\n if (foundPage) {\n currentPage = foundPage;\n }\n } else {\n // Only auto-select primary page if layout is large\n if (deviceService.isLarge() || adapter.pages.length == 1) {\n const primaryPage = adapter.pages.find((p) => p.isPrimary) ?? adapter.pages[0];\n currentPage = primaryPage;\n }\n }\n\n // Load page data if current page exists\n let context = {};\n if (currentPage) {\n const currentPageIndex = adapter.pages.findIndex((p) => p.id === currentPage.id);\n const loadResult = await adapter.pages[currentPageIndex]?.load?.({ forceRefresh });\n context = loadResult?.data ?? {};\n }\n\n // Set current tab to first tab of the current page (internal state only)\n let currentTab = currentPage?.tabs?.[0] ?? null;\n const rootCtx = store.rootContext() as Record<string, unknown>;\n const { evaluatedPageContent, evaluatedTabContentsById } = await buildEvaluatedPageContentsForRootContext(\n currentPage,\n rootCtx,\n evaluatorService,\n );\n patchState(store, {\n previousContext: cloneDeep(context),\n context: cloneDeep(context),\n status: AXPPageStatus.Rendered,\n currentPage,\n currentTab,\n evaluatedPageContent,\n evaluatedTabContentsById,\n });\n },\n\n async load(adapter: AXPLayoutDetailsViewAdapter) {\n // Setup expression evaluator scope\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return getSmart(store.context(), path);\n },\n isDirty: () => store.isDirty(),\n },\n };\n patchState(store, {\n scope,\n });\n //\n await this.loadAdapter(adapter);\n await this.loadPage(undefined, true);\n },\n\n updateContext(context: any) {\n patchState(store, {\n context,\n });\n },\n\n updatePageSelectedRows(rows: any[]) {\n patchState(store, {\n pageSelectedRows: rows,\n });\n },\n\n //Current Page\n currentPageTitle() {\n const raw = store.currentPage()?.title;\n if (raw) {\n return formatService.format(raw, 'string', store.context());\n } else {\n return null;\n }\n },\n\n currentPageDescription() {\n const raw = store.currentPage()?.description;\n if (raw) {\n return formatService.format(raw, 'string', store.context());\n } else {\n return null;\n }\n },\n\n async currentPagePrimaryActions() {\n // Use getActions() if available for reactive updates, otherwise fall back to static actions\n const currentPage = store.currentPage();\n const allActions = currentPage?.getActions ? await currentPage.getActions() : (currentPage?.actions ?? []);\n\n const raw = allActions.filter((a) => a.priority == 'primary');\n const acceptAction = currentPage?.settings?.commands?.accept;\n const rejectAction = currentPage?.settings?.commands?.reject;\n if (rejectAction) {\n raw.push({\n priority: 'primary',\n zone: 'footer',\n name: 'reject',\n title: rejectAction.title,\n color: rejectAction.color,\n icon: rejectAction.icon,\n command: rejectAction.command,\n visible: rejectAction.visible,\n });\n }\n if (acceptAction) {\n raw.push({\n priority: 'primary',\n zone: 'footer',\n name: 'accept',\n title: acceptAction.title,\n color: acceptAction.color,\n icon: acceptAction.icon,\n command: acceptAction.command,\n visible: acceptAction.visible,\n });\n }\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async currentPageSecondaryActions() {\n // Use getActions() if available for reactive updates, otherwise fall back to static actions\n const currentPage = store.currentPage();\n const allActions = currentPage?.getActions ? await currentPage.getActions() : (currentPage?.actions ?? []);\n\n const raw = allActions.filter((a) => a.priority == 'secondary');\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n currentPageContent() {\n return store.evaluatedPageContent();\n },\n\n currentPageTabs() {\n return store.currentPage()?.tabs?.filter((tab) => tab.visible !== false);\n },\n\n setCurrentPage(page: AXPLayoutDetailsViewPage | null) {\n // Clear previous page cache if changing pages\n const previousPage = store.currentPage();\n if (previousPage?.id && previousPage.id !== page?.id) {\n this.clearPageTabCache(previousPage.id);\n }\n\n if (page) {\n const firstTab = page.tabs?.[0] ?? null;\n\n patchState(store, {\n currentPage: page,\n currentTab: firstTab,\n });\n\n router.navigate([], {\n queryParams: {\n page: page.id,\n },\n queryParamsHandling: 'merge',\n });\n } else {\n patchState(store, {\n currentPage: null,\n currentTab: null,\n });\n // Remove page query parameter\n const currentParams = { ...route.snapshot.queryParams };\n delete currentParams['page'];\n router.navigate([], {\n queryParams: currentParams,\n });\n }\n },\n\n //Current Tab\n setCurrentTab(tab: AXPLayoutDetailsViewTabItem) {\n patchState(store, {\n currentTab: tab,\n });\n // Cache management is handled automatically by the effect\n },\n\n getCurrentTabContent() {\n return store.currentTab()?.content ?? [];\n },\n\n //#region ---- Rendered Tabs Management ----\n\n /**\n * Get content for a specific rendered tab\n */\n getRenderedTabContent(tabId: string) {\n const byTab = store.evaluatedTabContentsById();\n if (Object.prototype.hasOwnProperty.call(byTab, tabId)) {\n return byTab[tabId];\n }\n const renderedTabs = store.currentPageRenderedTabs();\n const renderedTab = renderedTabs.find((cached) => cached.tabId === tabId);\n return renderedTab?.tab?.content ?? [];\n },\n\n /**\n * Clear cache when page changes to free memory\n */\n clearPageTabCache(pageId: string) {\n const cache = store.renderedTabsCache();\n const updatedCache = { ...cache };\n delete updatedCache[pageId];\n\n patchState(store, {\n renderedTabsCache: updatedCache,\n });\n },\n\n //#endregion\n\n title() {\n const raw = store.showPages() ? (store.adapter()?.title ?? '') : (store.adapter()?.label ?? '');\n return raw ? formatService.format(raw, 'string', store.rootContext()) : null;\n },\n\n backButtonTitle() {\n const raw = store.showPages() ? (store.adapter()?.label ?? '') : (store.adapter()?.title ?? '');\n return raw ? formatService.format(raw, 'string', store.rootContext()) : null;\n },\n\n description() {\n const raw = store.adapter()?.description;\n if (raw) {\n return formatService.format(raw, 'string', store.rootContext());\n } else {\n return null;\n }\n },\n\n async primaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'primary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async secondaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'secondary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async breadcrumbs() {\n const rootContext = store.rootContext();\n const scope: AXPExpressionEvaluatorScope = {\n ...rootContext,\n context: {\n eval: (path: string) => get(rootContext, path),\n },\n };\n\n const breadcrumbs = await Promise.all(\n store.adapter()?.breadcrumbs?.map(async (b) => {\n const raw = b?.title ?? '';\n const evaluated =\n typeof raw === 'string' && raw.includes('{{')\n ? await evaluatorService.evaluate(raw, scope)\n : await formatService.format(raw, 'string', rootContext);\n return {\n ...b,\n title: typeof evaluated === 'string' ? evaluated : raw,\n };\n }) ?? [],\n );\n\n // Add current page title as the last breadcrumb item\n const currentPageLabel = store.currentPage()?.label;\n const pages = store.adapter()?.pages ?? [];\n const primaryPage = pages.find((p) => p.isPrimary) ?? pages[0];\n const isMainPage = primaryPage?.id === store.currentPage()?.id;\n if (currentPageLabel && !isMainPage) {\n const pageScope: AXPExpressionEvaluatorScope = {\n ...store.context(),\n context: {\n eval: (path: string) => get(store.context(), path),\n },\n };\n const processedCurrentPageTitle =\n typeof currentPageLabel === 'string' && currentPageLabel.includes('{{')\n ? await evaluatorService.evaluate(currentPageLabel, pageScope)\n : await formatService.format(currentPageLabel, 'string', store.context());\n breadcrumbs.push({\n title: typeof processedCurrentPageTitle === 'string' ? processedCurrentPageTitle : currentPageLabel,\n });\n }\n\n return breadcrumbs;\n },\n\n async discard() {\n patchState(store, {\n context: cloneDeep(store.previousContext()),\n });\n },\n\n async save(command: AXPExecuteCommand, form: AXFormComponent) {\n const formResult = await form.validate();\n if (!formResult.result) {\n return;\n }\n patchState(store, {\n status: AXPPageStatus.Submitting,\n });\n const result = await store.currentPage()?.execute?.(command, store.context());\n const enableOperationToasts = await settingsService.get(AXPCommonSettings.EnableOperationToasts);\n if (result?.success) {\n patchState(store, {\n previousContext: store.context(),\n });\n // After successful save, force refresh the rootContext and reload the current page\n try {\n await this.loadPage(store.currentPage()?.id, true);\n } catch (error: unknown) {\n console.error('Failed to refresh page after save', error);\n }\n if (enableOperationToasts) {\n toastService.show({\n color: 'success',\n title: await translateService.translateAsync('@general:messages.generic.success.title'),\n content: await translateService.translateAsync('@general:messages.generic.success.description'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n } else {\n if (enableOperationToasts) {\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:messages.generic.error.title'),\n content:\n result?.message?.text ||\n (await translateService.translateAsync('@general:messages.generic.error.description')),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n patchState(store, {\n status: AXPPageStatus.Submitted,\n });\n },\n\n goToListPage() {\n if (store.adapter()?.exitUrl) {\n router.navigate([store.adapter()?.exitUrl]);\n }\n },\n };\n },\n ),\n);\n","import { AXPPageLayoutBaseComponent } from '../../layouts';\nimport { Injectable } from '@angular/core';\n\n/**\n * Registry of rendered page component instances by component key.\n * Used so page execute can delegate to the actual component instance in the view.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPPageComponentInstanceRegistryService {\n private readonly instances = new Map<string, AXPPageLayoutBaseComponent>();\n\n register(key: string, instance: AXPPageLayoutBaseComponent): void {\n this.instances.set(key, instance);\n }\n\n unregister(key: string): void {\n this.instances.delete(key);\n }\n\n get(key: string): AXPPageLayoutBaseComponent | null {\n return this.instances.get(key) ?? null;\n }\n}\n","import { AXPPageComponentRegistryService } from '@acorex/platform/layout/components';\nimport { ComponentRef, Directive, effect, inject, input, OnDestroy, OnInit, output, ViewContainerRef } from '@angular/core';\nimport { AXPPageComponentInstanceRegistryService } from './page-component-instance-registry.service';\n\n//#region ---- Page Component Renderer Directive ----\n\n/**\n * Directive for rendering page components dynamically\n * Similar to component-slot pattern but specifically for page components\n */\n@Directive({\n selector: '[axp-page-component-renderer]',\n standalone: true,\n})\nexport class AXPPageComponentRendererDirective implements OnInit, OnDestroy {\n componentKey = input.required<string>();\n rootContext = input<Record<string, any>>({});\n pageConfig = input<Record<string, unknown>>();\n options = input<Record<string, any>>({});\n\n /** Emitted when the component instance is registered and ready */\n componentReady = output<string>();\n\n private viewContainerRef = inject(ViewContainerRef);\n private pageComponentRegistry = inject(AXPPageComponentRegistryService);\n private instanceRegistry = inject(AXPPageComponentInstanceRegistryService);\n private componentRef: ComponentRef<any> | null = null;\n\n #contextEffect = effect(() => {\n const context = this.rootContext();\n if (this.componentRef && context) {\n this.componentRef.setInput('rootContext', context);\n }\n });\n\n #pageConfigEffect = effect(() => {\n const config = this.pageConfig();\n if (this.componentRef && config) {\n this.componentRef.setInput('pageConfig', config);\n }\n });\n\n #optionsEffect = effect(() => {\n const options = this.options();\n if (this.componentRef && options) {\n this.componentRef.setInput('options', options);\n }\n });\n\n async ngOnInit(): Promise<void> {\n await this.loadComponent();\n }\n\n ngOnDestroy(): void {\n if (this.componentRef) {\n this.instanceRegistry.unregister(this.componentKey());\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n\n private async loadComponent(): Promise<void> {\n try {\n // Clear any existing component\n this.viewContainerRef.clear();\n\n // Get component loader from registry\n const loader = await this.pageComponentRegistry.find(this.componentKey());\n if (!loader) {\n console.error(`Component with key \"${this.componentKey()}\" not found in registry`);\n return;\n }\n\n // Load component type\n const ComponentType = await loader();\n\n // Create component instance\n this.componentRef = this.viewContainerRef.createComponent(ComponentType);\n this.instanceRegistry.register(this.componentKey(), this.componentRef.instance);\n\n const context = this.rootContext();\n if (context) {\n this.componentRef.setInput('rootContext', context);\n }\n\n const options = this.options();\n if (options) {\n this.componentRef.setInput('options', options);\n }\n\n const pageConfig = this.pageConfig();\n if (pageConfig) {\n this.componentRef.setInput('pageConfig', pageConfig);\n }\n\n // Notify that component is ready (allows parent to re-fetch actions)\n this.componentReady.emit(this.componentKey());\n } catch (error) {\n console.error(`Failed to load component \"${this.componentKey()}\":`, error);\n }\n }\n}\n\n//#endregion\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostListener,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\n//\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\n//\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPCommonSettings, AXPEntityCommandScope, AXPSettingsService } from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBadge,\n AXPBreadcrumbItem,\n AXPBroadcastEventService,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPPageStatus,\n AXPContextChangeEvent,\n} from '@acorex/platform/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex/platform/layout/components';\nimport {\n AXPWidgetContainerComponent,\n AXPWidgetCoreModule,\n} from '@acorex/platform/layout/widget-core';\nimport { AXPDataListWidgetViewComponent } from '@acorex/platform/layout/widgets';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subject, Subscription, takeUntil } from 'rxjs';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '../../layouts';\nimport {\n AXPLayoutDetailsViewAction,\n AXPLayoutDetailsViewAdapter,\n AXPLayoutDetailsViewPage,\n} from './details-view.adapter';\nimport { AXPLayoutDetailsViewViewModel } from './details-view.viewmodel';\nimport { AXPPageComponentRendererDirective } from './page-component-renderer.directive';\n\n@Component({\n templateUrl: './details-view.component.html',\n styleUrl: './details-view.component.scss',\n selector: 'axp-layout-details-view',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n AXSearchBoxModule,\n AXTabsModule,\n //\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPWidgetCoreModule,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXFormModule,\n AXPPageComponentRendererDirective,\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPLayoutDetailsViewComponent,\n },\n AXPLayoutDetailsViewViewModel,\n ],\n})\nexport class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {\n adapter = input.required<AXPLayoutDetailsViewAdapter>();\n //\n protected vm = inject(AXPLayoutDetailsViewViewModel);\n protected router = inject(Router);\n protected route = inject(ActivatedRoute);\n protected eventService = inject(AXPBroadcastEventService);\n protected deviceService = inject(AXPDeviceService);\n private settingsService = inject(AXPSettingsService);\n private onSelectionChangeSubscription?: Subscription;\n private readonly destroyed$ = new Subject<void>();\n\n protected form = viewChild<AXFormComponent>('form');\n protected widgetContainer = viewChild<AXPWidgetContainerComponent>(AXPWidgetContainerComponent);\n\n protected footerPrimaryActions = signal<AXPActionMenuItem[]>([]);\n protected footerSecondaryActions = signal<AXPActionMenuItem[]>([]);\n\n protected footerActions = computed(() => [...this.footerPrimaryActions(), ...this.footerSecondaryActions()]);\n\n protected hasVisibleFooterPrimaryActions = computed(() => {\n const primaryFooterActions = this.footerPrimaryActions();\n return primaryFooterActions.some((action) => action.visible != false);\n });\n\n protected hasVisibleFooterSecondaryActions = computed(() => {\n const secondaryFooterActions = this.footerSecondaryActions();\n return secondaryFooterActions.some((action) => action.visible != false);\n });\n\n protected hasFooter = computed(() => {\n return (\n (this.hasVisibleFooterPrimaryActions() || this.hasVisibleFooterSecondaryActions()) &&\n !this.vm.currentPage()?.isReadonly\n );\n });\n\n /**\n * Append timestamp query param to trigger router to re-run guards/resolvers\n */\n protected async refreshLayout(): Promise<void> {\n const router = this.router;\n const route = this.route;\n const now = Date.now();\n await router.navigate([], {\n relativeTo: route,\n queryParams: { _ts: now },\n queryParamsHandling: 'merge',\n });\n }\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n //\n await this.vm.load(this.adapter());\n\n this.eventService\n //TODO: Use the constant from the entity module\n .listen('entity:refresh-layout')\n .pipe(takeUntil(this.destroyed$))\n .subscribe((e) => {\n if ((e.data as any).name == this.vm.adapter()?.name) {\n this.refreshLayout();\n }\n });\n }\n\n async ngAfterViewInit() {\n const listWidget = (await this.widgetContainer()?.find('page-list_table')) as AXPDataListWidgetViewComponent;\n if (listWidget?.api && typeof listWidget.api === 'function') {\n const onSelectionChange = listWidget.api()['onSelectionChange'] as Subject<any>;\n if (onSelectionChange) {\n this.onSelectionChangeSubscription = onSelectionChange.subscribe((e: any) => {\n this.vm.updatePageSelectedRows(e);\n this.recompute();\n });\n }\n }\n }\n\n ngOnDestroy(): void {\n this.onSelectionChangeSubscription?.unsubscribe();\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n #FooterActionsEffect = effect(async () => {\n this.updateTrigger();\n const footerPrimaryActions = await this.getFooterPrimaryActions();\n const footerSecondaryActions = await this.getFooterSecondaryActions();\n this.footerPrimaryActions.set(footerPrimaryActions);\n this.footerSecondaryActions.set(footerSecondaryActions);\n });\n\n protected handleOnContextChanged(e: AXPContextChangeEvent) {\n this.vm.updateContext(e.data);\n this.recompute();\n }\n\n protected handleSelectPage(page: AXPLayoutDetailsViewPage) {\n this.vm.setCurrentPage(page);\n }\n\n protected async getAllPrimaryActions(): Promise<AXPLayoutDetailsViewAction[]> {\n if (!this.vm.showPages()) {\n const [primaryActions, pagePrimaryActions] = await Promise.all([\n this.vm.primaryActions(),\n this.vm.currentPagePrimaryActions(),\n ]);\n return [...primaryActions, ...pagePrimaryActions];\n } else {\n return [];\n }\n }\n\n public override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllPrimaryActions()).filter((a) => {\n return (\n a.priority == 'primary' &&\n (((a as any).scope == AXPEntityCommandScope.Selected && this.vm.currentPageSelectedRows().length) ||\n (((a as any).scope == AXPEntityCommandScope.TypeLevel || !(a as any).scope) &&\n a.zone != 'footer' &&\n !this.vm.currentPageSelectedRows().length))\n );\n });\n }\n\n protected async getFooterPrimaryActions(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllPrimaryActions()).filter((item) => item.zone == 'footer');\n }\n\n protected async getAllSecondaryActions(): Promise<AXPLayoutDetailsViewAction[]> {\n if (!this.vm.showPages()) {\n const [secondaryActions, pageSecondaryActions] = await Promise.all([\n this.vm.secondaryActions(),\n this.vm.currentPageSecondaryActions(),\n ]);\n return [...secondaryActions, ...pageSecondaryActions];\n } else {\n return [];\n }\n }\n\n public override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllSecondaryActions()).filter((item) => item.zone == 'header');\n }\n\n protected async getFooterSecondaryActions(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllSecondaryActions()).filter((item) => item.zone == 'footer');\n }\n\n protected override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return (await this.vm.breadcrumbs()) ?? [];\n }\n\n protected override async getPageTitle(): Promise<string> {\n if (this.vm.showPages()) {\n return this.vm.title() || '';\n } else {\n return this.vm.currentPageTitle() || '';\n }\n }\n\n override async getPageDescription(): Promise<string | null> {\n if (this.vm.showPages()) {\n return (await this.vm.description()) || '';\n } else {\n return await this.vm.currentPageDescription();\n }\n }\n override async getBackButton(): Promise<AXPBackButton | null> {\n if (this.vm.adapter()?.pages?.length! > 1) {\n return {\n title: this.vm.backButtonTitle() ?? '',\n };\n } else {\n return {\n title: this.vm.adapter()?.label ?? '',\n };\n }\n }\n\n override async getPageBadge(): Promise<AXPBadge | null> {\n const showPageBadge = await this.settingsService.get<boolean>(AXPCommonSettings.ShowPageBadge);\n if (!showPageBadge) {\n return null;\n }\n const adapter = this.vm.adapter();\n if (!adapter?.getPageBadge) {\n return null;\n }\n return adapter.getPageBadge(this.vm.context(), this.vm.isDirty());\n }\n\n override async getPageStatus(): Promise<AXPPageStatus | null> {\n const adapter = this.vm.adapter();\n if (!adapter?.getPageStatus) {\n return null;\n }\n return adapter.getPageStatus(this.vm.context(), this.vm.currentPage());\n }\n\n /**\n * Get entity data for status chip component\n */\n getEntityData(): Record<string, any> | null {\n return this.vm.context() ?? null;\n }\n\n override async onBackButtonClick(): Promise<void> {\n // When back button is clicked in small layout, go back to page list\n if (!this.vm.showPages() && this.vm.adapter()?.pages?.length! > 1) {\n this.vm.setCurrentPage(null);\n } else {\n this.vm.goToListPage();\n }\n }\n\n //#region ---- Command Execution ----\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (!this.vm.adapter()) {\n return;\n }\n\n const acceptCommand = this.vm.currentPage()?.settings?.commands?.accept?.command.name;\n const rejectCommand = this.vm.currentPage()?.settings?.commands?.reject?.command.name;\n\n if (command.name == acceptCommand) {\n await this.vm.save(command, this.form()!);\n this.recompute();\n return;\n }\n\n if (command.name == rejectCommand) {\n await this.vm.discard();\n this.recompute();\n return;\n }\n\n // Handle status update command\n if (command.name === 'update-status') {\n const transition = command.options?.['transition'];\n if (transition?.toStatus?.name) {\n const status = await this.getPageStatus();\n if (status?.dataPath) {\n // Update entity context with new status value\n const entity = this.vm.context();\n if (entity) {\n entity[status.dataPath] = transition.toStatus.name;\n this.vm.updateContext(entity);\n this.recompute();\n }\n }\n }\n return;\n }\n\n // Get all actions\n const [adapterPrimaryActions, adapterSecondaryActions, pagePrimaryActions, pageSecondaryActions] =\n await Promise.all([\n this.vm.primaryActions(),\n this.vm.secondaryActions(),\n this.vm.currentPagePrimaryActions(),\n this.vm.currentPageSecondaryActions(),\n ]);\n\n // Combine adapter actions (primary + secondary)\n const adapterActions = [...adapterPrimaryActions, ...adapterSecondaryActions];\n\n // Combine current page actions (primary + secondary)\n const pageActions = [...pagePrimaryActions, ...pageSecondaryActions];\n\n const commandExistsInActions = (actions: AXPLayoutDetailsViewAction[], commandName: string): boolean => {\n const check = (list: AXPLayoutDetailsViewAction[] | undefined): boolean => {\n if (!Array.isArray(list) || list.length === 0) return false;\n return list.some(\n (action) =>\n action?.command?.name === commandName ||\n (Array.isArray(action?.items) && check(action.items as AXPLayoutDetailsViewAction[])),\n );\n };\n return check(actions);\n };\n\n // Check if command exists in adapter actions first\n if (commandExistsInActions(adapterActions, command.name)) {\n await this.vm.adapter()?.execute?.(command, this.vm.context());\n }\n // Check if command exists in current page actions\n else if (commandExistsInActions(pageActions, command.name)) {\n console.log('currentPage', this.vm.currentPage());\n await this.vm\n .currentPage()\n ?.execute?.(command, this.vm.pageSelectedRows().length ? this.vm.pageSelectedRows() : this.vm.context());\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n protected async handleKeyboardEvent(event: KeyboardEvent) {\n if (event.ctrlKey) {\n switch (event.code) {\n case 'KeyS':\n event.preventDefault();\n event.stopPropagation();\n await this.execute({ name: this.vm.currentPage()?.settings?.commands?.accept?.command.name || 'save' });\n break;\n }\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n @if (vm.adapter()?.pages?.length! > 1 && vm.isLarge()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ t(vm.title()) | async }}</axp-layout-title>\n <axp-layout-description>{{ t(vm.description()) | async }}</axp-layout-description>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs class=\"axp-vertical-tabs\" [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\">\n @for (item of vm.adapter()?.pages; track $index) {\n <ax-tab-item\n [text]=\"(formatService.format(item.label, 'string', vm.rootContext()) | translate | async)!\"\n (onClick)=\"handleSelectPage(item)\"\n [active]=\"vm.currentPage()?.id === item.id\"\n >\n <ax-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n <!-- Content Section -->\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-4\">\n @if (vm.showPages()) {\n <axp-layout-list class=\"ax-w-full\">\n @for (item of vm.adapter()?.pages; track $index) {\n <axp-layout-list-item (click)=\"handleSelectPage(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"ax-text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"ax-font-semibold\">{{\n formatService.format(item.label, 'string', vm.rootContext()) | translate | async\n }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"ax-text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n } @else {\n <ax-form class=\"ax-h-full ax-w-full\" #form>\n <axp-widgets-container\n #widgetsContainerRef\n [context]=\"vm.context()\"\n (onContextChanged)=\"handleOnContextChanged($event)\"\n >\n <div class=\"ax-flex ax-flex-col ax-w-full ax-gap-4 ax-h-full\">\n @for (item of vm.currentPageContent(); track $index) {\n @if ('type' in item && item.type === 'component') {\n <!-- Component-based content -->\n <div\n axp-page-component-renderer\n [componentKey]=\"$any(item).componentKey\"\n [rootContext]=\"vm.rootContext()\"\n [pageConfig]=\"$any(item).pageConfig\"\n [options]=\"$any(item).options\"\n (componentReady)=\"recompute()\"\n ></div>\n } @else {\n <!-- Widget-based content -->\n <ng-container axp-widget-renderer [node]=\"$any(item)\" [mode]=\"$any(item).mode ?? 'view'\"></ng-container>\n }\n }\n @if (vm.currentPage()?.tabs?.length) {\n <div class=\"axp-horizontal-tabs\">\n <ax-tabs [location]=\"'bottom'\" [fitParent]=\"false\" look=\"classic\">\n @for (tab of vm.currentPageTabs(); track $index) {\n <ax-tab-item\n (onClick)=\"vm.setCurrentTab(tab)\"\n [text]=\"(tab.title | translate | async)!\"\n [active]=\"vm.currentTab()?.id === tab.id\"\n >\n <ax-prefix>\n <ax-icon icon=\"far ${{ tab.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n <div [class]=\"'content'\">\n @for (renderedTab of vm.currentPageRenderedTabs(); track renderedTab.tabId) {\n <div [class]=\"renderedTab.tabId === vm.currentTab()?.id ? '' : 'ax-hidden'\">\n @for (content of vm.getRenderedTabContent(renderedTab.tabId); track $index) {\n <ng-container axp-widget-renderer [node]=\"content\" [mode]=\"content.mode ?? 'view'\">\n </ng-container>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n }\n </axp-page-content>\n\n <!-- Footer Section -->\n @if (hasFooter()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <!-- secondary footer actions -->\n @if (hasVisibleFooterSecondaryActions()) {\n <ax-button\n [class.ax-sm]=\"deviceService.isSmall()\"\n [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\"\n [color]=\"'default'\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (action of footerSecondaryActions(); track $index) {\n @if (action.visible != false) {\n <ax-button-item\n [text]=\"(t(action.title) | async)!\"\n [color]=\"action.color\"\n [disabled]=\"action.disabled || vm.isSaving()\"\n (onClick)=\"execute(action.command!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ action.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (action.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n\n @if (hasVisibleFooterPrimaryActions()) {\n @for (action of footerPrimaryActions(); track $index) {\n @if (action.visible != false) {\n <ax-button\n [class.ax-sm]=\"deviceService.isSmall()\"\n [disabled]=\"action.disabled || vm.isSaving()\"\n [text]=\"(t(action.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"action.color\"\n (onClick)=\"execute(action.command!)\"\n >\n <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n @if (action?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of action?.items; track $index) {\n @if (sub.visible != false) {\n <ax-button-item\n [text]=\"(t(sub.title) | async)!\"\n [color]=\"sub.color\"\n [disabled]=\"sub.disabled\"\n (onClick)=\"execute(sub.command!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n }\n }\n }\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i7","i1","i2","i3","i4","i5","i6","i8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-layout-views.mjs","sources":["../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.viewmodel.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/page-component-instance-registry.service.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/page-component-renderer.directive.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.component.html","../../../../libs/platform/layout/views/src/acorex-platform-layout-views.ts"],"sourcesContent":["import { AXPActionMenuItem, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, AXPPageStatus } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPageLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n\n abstract hasTitleActions: Signal<boolean>;\n\n abstract hasPrimaryActions: Signal<boolean>;\n\n abstract hasSecondaryActions: Signal<boolean>;\n\n abstract hasActions: Signal<boolean>;\n\n abstract breadcrumbs: Signal<AXPBreadcrumbItem[]>;\n\n abstract title: Signal<AXPMultiLanguageString>;\n\n abstract titleIcon: Signal<string | null>;\n\n abstract hasTitle: Signal<boolean>;\n\n abstract hasTitleIcon: Signal<boolean>;\n\n abstract hasDescription: Signal<boolean>;\n\n abstract description: Signal<AXPMultiLanguageString | null>;\n\n abstract hasBreadcrumbs: Signal<boolean>;\n\n abstract hasBadge: Signal<boolean>;\n\n abstract badge: Signal<AXPBadge | null>;\n\n abstract hasStatus: Signal<boolean>;\n\n abstract status: Signal<AXPPageStatus | null>;\n\n abstract hasBackButton: Signal<boolean>;\n\n abstract backButton: Signal<AXPBackButton | null>;\n\n abstract onBackButtonClick: () => void | Promise<void>;\n\n abstract startSideToggle: () => void | Promise<void>;\n\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXClickEvent, AXCommonModule } from '@acorex/cdk/common';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXPComponentSlotModule } from '@acorex/platform/core';\n//\nimport { AXDrawerContainerDirective, AXDrawerDirectiveModule, AXDrawerItemDirective } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPDeviceService, AXPExecuteCommand } from '@acorex/platform/core';\nimport {\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n AXPThemeLayoutHeaderComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPStatusChipComponent } from '@acorex/platform/layout/widgets';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPageLayoutBase } from './page-layout.base';\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPComponentSlotModule,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutHeaderComponent,\n AXPStickyDirective,\n AXPThemeLayoutContainerComponent,\n AXPStatusChipComponent,\n ],\n templateUrl: './page-layout.component.html',\n styleUrls: ['./page-layout.component.scss'],\n selector: 'axp-page-layout',\n encapsulation: ViewEncapsulation.None,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [AXDrawerContainerDirective],\n providers: [],\n})\nexport class AXPPageLayoutComponent {\n protected page = inject<AXPPageLayoutBase>(AXPPageLayoutBase, { optional: true });\n\n protected layoutService = inject(AXPLayoutThemeService);\n protected deviceService = inject(AXPDeviceService);\n\n protected startSideDrawer = viewChild<AXDrawerItemDirective>('startSideDrawer');\n\n protected workflow = inject(AXPWorkflowService);\n protected commandService = inject(AXPCommandService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.page?.title();\n this.page?.description();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-page-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.execute(item.command);\n }\n }\n\n toggleStartSide() {\n this.startSideDrawer()?.toggle();\n }\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n\n protected async execute(command: AXPExecuteCommand) {\n const reserved = ['navigate'];\n if (reserved.includes(command.name)) {\n await this.workflow.execute(command.name, { options: command.options });\n return;\n }\n if (this.commandService.exists(command.name)) {\n await this.commandService.execute(command.name, command.options ?? {});\n } else {\n await this.page?.execute(command);\n }\n }\n\n protected handleOnBackdropClick(event: MouseEvent) {\n event.stopPropagation();\n this.startSideDrawer()?.hide();\n }\n\n //#region ---------------- Status Helpers ----------------\n\n protected getEntityData(): Record<string, any> | null {\n // Get entity data from page context if available\n if (this.page && 'getEntityData' in this.page && typeof (this.page as any).getEntityData === 'function') {\n return (this.page as any).getEntityData();\n }\n return null;\n }\n\n protected async handleStatusTransition(transition: any): Promise<void> {\n // Convert status transition to command and execute\n await this.execute({\n name: 'update-status',\n options: {\n transition,\n },\n });\n }\n\n //#endregion\n}\n","<!-------- Begin Start Side Drawer -------->\n<div id=\"axp-drawer-start\" [mode]=\"deviceService.isSmall() ? 'overlay' : 'push'\" [transition]=\"250\" axDrawerItem\n [backDrop]=\"true\" (onBackdropClick)=\"handleBackdropClick($event)\" #startSideDrawer=\"axDrawerItem\"\n [backdropClass]=\"'ax-bg-darkest/75'\" [collapsed]=\"deviceService.isSmall()\" drawerLocation=\"start\"\n class=\"ax-z-50 ax-h-full\">\n <ng-content select=\"axp-layout-start-side\"></ng-content>\n</div>\n<!-------- Finish Start Side Drawer -------->\n<!--------------------------------------------------------------->\n<!-------- Begin Main Layout Container -------->\n<axp-layout-container id=\"axp-page-layout\" #container>\n <!-------- Begin Page Header -------->\n <axp-layout-header id=\"axp-page-header\" *translate=\"let t\" #sticky=\"axpSticky\" [axpSticky]=\"'axp-is-sticky'\"\n [stickyOffset]=\"50\" [stickyParent]=\"container.hostElement\">\n <!-------- Begin Back Button (Mobile Only) -------->\n @if (page?.hasBackButton() && deviceService.isSmall()) {\n <ax-button id=\"axp-btn-back\" [look]=\"'blank'\" class=\"ax-sm ax-w-fit ax-ms-1\" color=\"secondary\"\n (click)=\"page?.onBackButtonClick()\" [text]=\"(page?.backButton()?.title | translate | async) ?? ''\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-chevron-left rtl:ax-rotate-180\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n <!-------- Finish Back Button -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Bar -------->\n <axp-layout-title-bar id=\"axp-title-bar\">\n <!-------- Begin Title Section -------->\n <div class=\"ax-flex ax-flex-col ax-transition ax-shrink-1 ax-min-w-0\">\n <!-------- Begin Breadcrumbs -------->\n @if (page?.hasBreadcrumbs() && !deviceService.isSmall()) {\n <ax-breadcrumbs id=\"axp-breadcrumb\" class=\"ax-mb-1\">\n @for (item of page?.breadcrumbs(); track $index) {\n <ax-breadcrumbs-item [attr.id]=\"'axp-breadcrumb-item-' + $index\" [active]=\"$last\"\n (click)=\"item.command ? execute(item.command) : null\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n {{ t(item.title) | async }}\n </ax-breadcrumbs-item>\n }\n <ng-template #divider>\n <i class=\"fa-regular fa-chevron-right rtl:ax-rotate-180 fa-sm\"></i>\n </ng-template>\n </ax-breadcrumbs>\n }\n <!-------- Finish Breadcrumbs -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Container -------->\n <div class=\"__title-container\">\n <!-------- Begin Page Title -------->\n @if (page?.hasTitle()) {\n <axp-layout-title id=\"axp-page-title\">\n @if (page?.hasTitleIcon()) {\n <ax-icon [icon]=\"page?.titleIcon()!\" class=\"ax-me-2\"></ax-icon>\n }\n {{ page?.title() | translate | async }}\n </axp-layout-title>\n }\n <!-------- Finish Page Title -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Actions -------->\n @if (page?.hasTitleActions()) {\n <ax-button id=\"axp-btn-title-actions\" [look]=\"'blank'\" class=\"ax-sm -ax-mx-2\">\n <ax-prefix>\n <i class=\"fa-solid fa-caret-down fa-fw\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of page?.titleActions(); track $index) {\n <ng-container>\n <ax-button-item [attr.id]=\"'axp-btn-title-action-' + (sub.name || $index)\"\n [text]=\"(t(sub.title) | async)!\" [color]=\"sub.color\" [disabled]=\"sub.disabled\"\n [selected]=\"sub.command?.metadata?.['isSelected']\" (onClick)=\"handleActionClick(sub)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n <!-------- Finish Title Actions -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Badge -------->\n @if (page?.hasBadge()) {\n <div id=\"axp-page-badge\" class=\"__title-badge --{{ page?.badge()?.color }}\"\n [attr.title]=\"page?.badge()?.description\">\n <i class=\"fa-solid fa-circle\"></i>\n {{ page?.badge()?.title }}\n </div>\n }\n <!-------- Finish Title Badge -------->\n\n <!-------- Begin Page Status -------->\n\n @if (page?.hasStatus()) {\n <axp-status-chip [value]=\"page?.status()?.value ?? null\" [readonly]=\"page?.status()?.readonly || false\"\n [definitionKey]=\"page?.status()?.definitionKey ?? null\" [entityData]=\"getEntityData()\"\n (transitionExecuted)=\"handleStatusTransition($event)\" class=\"__title-status\"></axp-status-chip>\n }\n <!-------- Finish Page Status -------->\n\n </div>\n <!-------- Finish Title Container -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Description -------->\n @if (page?.hasDescription()) {\n <axp-layout-description id=\"axp-page-description\">\n {{ page?.description() | translate | async }}</axp-layout-description>\n }\n <!-------- Finish Page Description -------->\n </div>\n <!-------- Finish Title Section -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Actions -------->\n <axp-layout-actions id=\"axp-page-actions\" class=\"ax-shrink-0\">\n <axp-component-slot name=\"page-header-actions\"></axp-component-slot>\n <!-------- Begin Primary Actions -------->\n @if (page?.hasPrimaryActions()) {\n @for (item of page?.primaryMenuItems(); track $index) {\n @if (item.visible != false) {\n <ax-button [attr.id]=\"'axp-btn-primary-' + (item.name || item.title)\" [class.ax-sm]=\"deviceService.isSmall()\"\n [iconOnly]=\"deviceService.isSmall()\" [disabled]=\"item.disabled\" [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\" [color]=\"item.color\" (onClick)=\"handleActionClick(item)\">\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n @if (item?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of item?.items; track $index) {\n @if (sub.visible != false) {\n <ax-button-item [attr.id]=\"'axp-btn-primary-' + (item.name || item.title) + '-' + (sub.name || sub.title)\"\n [text]=\"(t(sub.title) | async)!\" [color]=\"sub.color\" [disabled]=\"sub.disabled\"\n (onClick)=\"handleActionClick(sub)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n }\n }\n }\n <!-------- Finish Primary Actions -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Secondary Actions -------->\n @if (page?.hasSecondaryActions()) {\n <ax-button id=\"axp-btn-secondary\" [class.ax-sm]=\"deviceService.isSmall()\" [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\" [color]=\"'default'\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (item of page?.secondaryMenuItems(); track $index) {\n @if (item.visible != false) {\n <ax-button-item [attr.id]=\"'axp-btn-secondary-' + (item.name || item.title)\"\n [text]=\"(item.title | translate | async)!\" [color]=\"item.color\" [disabled]=\"item.disabled\"\n (onClick)=\"handleSecondaryActionClick(item)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n <!-------- Finish Secondary Actions -------->\n </axp-layout-actions>\n <!-------- Finish Page Actions -------->\n </axp-layout-title-bar>\n <!-------- Finish Title Bar -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Toolbar / Navbar -------->\n @if (!sticky.isSticky) {}\n <ng-content select=\"axp-page-toolbar\"></ng-content>\n <!-------- Finish Page Toolbar / Navbar -------->\n </axp-layout-header>\n <!-------- Finish Page Header -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Content -------->\n <ng-content select=\"axp-page-content\"></ng-content>\n <!-------- Finish Page Content -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Footer -------->\n <axp-page-footer-container id=\"axp-page-footer-container\"\n [ngStyle]=\"{ display: tt.isEmpty() && prefixSlot.isEmpty() && suffixSlot.isEmpty() ? 'none' : 'block' }\">\n <axp-layout-container #tt>\n <ng-content select=\"axp-page-footer\"></ng-content>\n </axp-layout-container>\n <axp-page-footer id=\"axp-page-footer\">\n <axp-layout-prefix>\n <axp-component-slot name=\"page-footer-start\" #prefixSlot=\"slot\"></axp-component-slot>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <axp-component-slot name=\"page-footer-end\" #suffixSlot=\"slot\"></axp-component-slot>\n </axp-layout-suffix>\n </axp-page-footer>\n </axp-page-footer-container>\n <!-------- Finish Page Footer -------->\n</axp-layout-container>\n<!-------- Finish Main Layout Container -------->","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBadge,\n AXPBreadcrumbItem,\n AXPExecuteCommand,\n AXPMultiLanguageString,\n AXPPageStatus,\n} from '@acorex/platform/core';\nimport { AXPPolicyEngineService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { isEmpty } from 'lodash-es';\nimport { AXPPageLayoutBase } from './page-layout.base';\nimport { AXPPageLayoutComponent } from './page-layout.component';\n@Component({\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n protected readonly policyService = inject(AXPPolicyEngineService);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n async ngOnInit() {\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<AXPMultiLanguageString>('');\n public titleIcon = signal<string | null>(null);\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPageTitle());\n const icon = await this.getPageIcon();\n this.titleIcon.set(icon);\n });\n\n protected getPageTitle(): AXPMultiLanguageString | Promise<AXPMultiLanguageString> {\n return '';\n }\n\n protected getPageIcon(): string | null | Promise<string | null> {\n return null;\n }\n\n public hasTitle = computed(() => {\n const value = this.title();\n if (value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'string') {\n return value.length > 0;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return !isEmpty(value);\n }\n return false;\n });\n public hasTitleIcon = computed(() => this.titleIcon() !== null);\n\n //#endregion\n\n //#region ---------------- Description ----------------\n\n public description = signal<AXPMultiLanguageString | null>(null);\n\n public hasDescription = computed(() => {\n const value = this.description();\n if (value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'string') {\n return value.length > 0;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return !isEmpty(value);\n }\n return false;\n });\n\n #descriptionEffect = effect(async () => {\n this.updateTrigger();\n this.description.set(await this.getPageDescription());\n });\n\n protected getPageDescription(): AXPMultiLanguageString | null | Promise<AXPMultiLanguageString | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Breadcrumbs ----------------\n\n private defaultBreadCrumbs: AXPBreadcrumbItem[] = [\n {\n title: '@general:terms.interface.navigation.home',\n icon: 'fa-solid fa-home ax-text-xs ax-me-1',\n command: {\n name: 'navigate',\n options: {\n path: this.homePageService.getCurrent().path,\n },\n },\n },\n ];\n\n public breadcrumbs = signal<AXPBreadcrumbItem[]>(this.defaultBreadCrumbs);\n\n #breadcrumbsEffect = effect(async () => {\n this.updateTrigger();\n const breadCrumbs = await this.getPageBreadcrumbs();\n this.breadcrumbs.set([...this.defaultBreadCrumbs, ...breadCrumbs]);\n });\n\n public hasBreadcrumbs = computed(() => this.breadcrumbs().length > 1);\n\n protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]> {\n return [];\n }\n\n //#endregion\n\n //#region ---------------- Badge ----------------\n\n public badge = signal<AXPBadge | null>(null);\n\n public hasBadge = computed(() => this.badge() !== null);\n\n #badgeEffect = effect(async () => {\n this.updateTrigger();\n this.badge.set(await this.getPageBadge());\n });\n\n protected getPageBadge(): AXPBadge | null | Promise<AXPBadge | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Status ----------------\n\n public status = signal<AXPPageStatus | null>(null);\n\n public hasStatus = computed(() => this.status() !== null);\n\n #statusEffect = effect(async () => {\n this.updateTrigger();\n this.status.set(await this.getPageStatus());\n });\n\n protected getPageStatus(): AXPPageStatus | null | Promise<AXPPageStatus | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Layout ----------------\n\n protected layout = viewChild(AXPPageLayoutComponent);\n\n //TODO: Remove this after migration to the new layout\n protected toggleEndSide() {\n //this.layout()?.toggleStartSide()\n }\n\n //TODO: Remove this after migration to the new layout\n protected toggleStartSide() {\n this.layout()?.toggleStartSide();\n }\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasPrimaryActions = computed(() => this.primaryMenuItems().filter((item) => item.visible != false).length > 0);\n\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getPrimaryMenuItems();\n this.primaryMenuItems.set(items);\n });\n\n public getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasSecondaryActions = computed(\n () => this.secondaryMenuItems().filter((item) => item.visible != false).length > 0,\n );\n\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getSecondaryMenuItems();\n this.secondaryMenuItems.set(items);\n });\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public backButton = signal<AXPBackButton | null>(null);\n\n public hasBackButton = computed(() => this.backButton() !== null);\n\n protected getBackButton(): (AXPBackButton | null) | Promise<AXPBackButton | null> {\n return null;\n }\n\n #backButtonEffect = effect(async () => {\n this.updateTrigger();\n this.backButton.set(await this.getBackButton());\n });\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n public startSideToggle(): void | Promise<void> {\n this.layout();\n }\n\n public onBackButtonClick(): void | Promise<void> { }\n\n //#endregion\n}\n","import { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPopupLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n abstract hasTitleActions: Signal<boolean>;\n abstract hasPrimaryActions: Signal<boolean>;\n abstract hasSecondaryActions: Signal<boolean>;\n abstract hasActions: Signal<boolean>;\n abstract title: Signal<string>;\n abstract hasTitle: Signal<boolean>;\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n} ","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent, AXCommonModule } from \"@acorex/cdk/common\";\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\n//\nimport { AXDrawerDirectiveModule } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPopupLayoutBase } from './popup-layout.base';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n ],\n templateUrl: './popup-layout.component.html',\n styleUrls: ['./popup-layout.component.scss'],\n selector: 'axp-popup-layout',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPPopupLayoutComponent {\n protected popup = inject<AXPPopupLayoutBase>(AXPPopupLayoutBase);\n protected layoutService = inject(AXPLayoutThemeService);\n protected workflow = inject(AXPWorkflowService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.popup?.title();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-popup-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.popup?.execute(item.command);\n }\n }\n\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.popup?.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n} ","<axp-layout-container id=\"axp-popup-layout\" #container>\n <ng-content select=\"axp-page-content\"></ng-content>\n <axp-page-footer id=\"axp-popup-footer\" *translate=\"let t\">\n <ax-prefix> </ax-prefix>\n @if (popup.hasPrimaryActions()) {\n <ax-suffix>\n @for (item of popup.primaryMenuItems(); track $index) {\n <ax-button\n [attr.id]=\"'axp-btn-primary-' + (item.name || item.title)\"\n [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"item.color\"\n (onClick)=\"handleActionClick(item)\"\n >\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-suffix>\n }\n </axp-page-footer>\n</axp-layout-container>\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { AXPPopupLayoutComponent } from './popup-layout.component';\nimport { AXBasePageComponent } from '@acorex/components/page';\n\n@Component({\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n override async ngOnInit() {\n super.ngOnInit();\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<string>('');\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPopupTitle());\n });\n\n protected getPopupTitle(): string | Promise<string> {\n return '';\n }\n\n public hasTitle = computed(() => this.title() !== '');\n\n //#endregion\n\n\n\n //#region ---------------- Layout ----------------\n\n // Placeholder for popup layout reference if needed\n protected layout = viewChild(AXPPopupLayoutComponent);\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasPrimaryActions = computed(() => this.primaryMenuItems().length > 0);\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.primaryMenuItems.set(await this.getPrimaryMenuItems());\n });\n protected getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasSecondaryActions = computed(() => this.secondaryMenuItems().length > 0);\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.secondaryMenuItems.set(await this.getSecondaryMenuItems());\n });\n protected getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n //#endregion\n} ","import { AXFormComponent } from '@acorex/components/form';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport {\n AXPBackButton,\n AXPBadge,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n AXPMultiLanguageString,\n AXPPageStatus as AXPDetailsPageStatusChip,\n getChangedPaths,\n getSmart,\n} from '@acorex/platform/core';\nimport { AXPPageStatus, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { computed, effect, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { cloneDeep, get, isEmpty, isEqual } from 'lodash-es';\nimport {\n AXPLayoutDetailsViewAdapter,\n AXPLayoutDetailsViewPage,\n AXPLayoutDetailsViewTabItem,\n} from './details-view.adapter';\n\n//#region ---- Root-context widget expression resolution ----\n\n/**\n * Evaluates `{{ ... }}` strings inside `options.customFilterDefinitions` using `rootContext`\n * (details adapter load data), so filter UI does not depend on widget-renderer contextService.\n */\nasync function buildEvaluatedPageContentsForRootContext(\n currentPage: AXPLayoutDetailsViewPage | null,\n rootContext: Record<string, unknown>,\n evaluatorService: AXPExpressionEvaluatorService,\n): Promise<{\n evaluatedPageContent: AXPWidgetNode[];\n evaluatedTabContentsById: Record<string, AXPWidgetNode[]>;\n}> {\n if (!currentPage) {\n return { evaluatedPageContent: [], evaluatedTabContentsById: {} };\n }\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => getSmart(rootContext, path),\n },\n };\n\n const resolveNodes = async (nodes: AXPWidgetNode[] | undefined): Promise<AXPWidgetNode[]> => {\n if (!nodes?.length) {\n return [];\n }\n const cloned = cloneDeep(nodes);\n for (const node of cloned) {\n const defs = node.options?.['customFilterDefinitions'] as unknown[] | undefined;\n if (Array.isArray(defs) && defs.length > 0) {\n node.options!['customFilterDefinitions'] = await evaluatorService.evaluate(defs, scope);\n }\n }\n return cloned;\n };\n\n const evaluatedPageContent = await resolveNodes(currentPage.content);\n const evaluatedTabContentsById: Record<string, AXPWidgetNode[]> = {};\n for (const tab of currentPage.tabs ?? []) {\n evaluatedTabContentsById[tab.id] = await resolveNodes(tab.content);\n }\n\n return { evaluatedPageContent, evaluatedTabContentsById };\n}\n\n//#endregion\n\nexport const AXPLayoutDetailsViewViewModel = signalStore(\n withState(() => {\n const state = {\n adapter: null as AXPLayoutDetailsViewAdapter | null,\n rootContext: {} as Record<string, any>,\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n scope: null as AXPExpressionEvaluatorScope | null,\n status: AXPPageStatus.Processing,\n currentPage: null as AXPLayoutDetailsViewPage | null,\n currentTab: null as AXPLayoutDetailsViewTabItem | null,\n pageSelectedRows: [] as any[],\n // Cache for rendered tabs per page to prevent re-rendering\n renderedTabsCache: {} as Record<string, Array<{ tabId: string; tab: AXPLayoutDetailsViewTabItem }>>,\n /** Page main column widgets with `customFilterDefinitions` evaluated against `rootContext` */\n evaluatedPageContent: [] as AXPWidgetNode[],\n /** Tab panel widgets keyed by tab id (same evaluation as `evaluatedPageContent`) */\n evaluatedTabContentsById: {} as Record<string, AXPWidgetNode[]>,\n };\n return state;\n }),\n withComputed((store, deviceService = inject(AXPDeviceService)) => ({\n icon: computed(() => store.adapter()?.icon ?? null),\n content: computed(() => {\n const pages = store.adapter()?.pages ?? [];\n const primaryPage = pages.find((p) => p.isPrimary) ?? pages[0];\n return primaryPage?.content ?? [];\n }),\n //\n showPages: computed(() => !store.currentPage() && !deviceService.isLarge()),\n isLarge: computed(() => deviceService.isLarge()),\n //\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isSaving: computed(() => store.status() == AXPPageStatus.Submitting),\n isDirty: computed(() => !isEqual(store.context(), store.previousContext())),\n changesCount: computed(() => getChangedPaths(store.context(), store.previousContext()).length),\n isLoaded: computed(() => store.adapter() != null),\n currentPageSelectedRows: computed(() => store.pageSelectedRows()),\n //\n // Rendered tabs for current page - prevents re-rendering on tab switch\n currentPageRenderedTabs: computed(() => {\n const currentPage = store.currentPage();\n if (!currentPage?.id) {\n return [];\n }\n\n const pageId = currentPage.id;\n const cache = store.renderedTabsCache();\n return cache[pageId] || [];\n }),\n })),\n withMethods(\n (\n store,\n evaluatorService = inject(AXPExpressionEvaluatorService),\n router = inject(Router),\n route = inject(ActivatedRoute),\n deviceService = inject(AXPDeviceService),\n formatService = inject(AXFormatService),\n toastService = inject(AXToastService),\n translateService = inject(AXTranslationService),\n settingsService = inject(AXPSettingsService),\n ) => {\n // Effect to automatically cache current tab when it changes\n effect(() => {\n const currentPage = store.currentPage();\n const currentTab = store.currentTab();\n\n if (currentPage?.id && currentTab?.id) {\n const pageId = currentPage.id;\n const tabId = currentTab.id;\n const cache = store.renderedTabsCache();\n const pageCache = cache[pageId] || [];\n\n // Check if tab is already in cache\n const isTabCached = pageCache.some((cached) => cached.tabId === tabId);\n\n if (!isTabCached) {\n // Add tab to cache for this page\n const newTabCache = {\n tabId: tabId,\n tab: currentTab,\n };\n\n const updatedPageCache = [...pageCache, newTabCache];\n\n // Update the cache immutably\n const updatedCache = {\n ...cache,\n [pageId]: updatedPageCache,\n };\n\n patchState(store, {\n renderedTabsCache: updatedCache,\n });\n }\n }\n });\n\n // Create an effect to handle route changes\n effect(() => {\n if (store.adapter()) {\n route.queryParams.subscribe((params) => {\n const pageId = params['page'];\n const adapter = store.adapter();\n if (adapter) {\n // Find current page from query param or conditionally default to first page\n let currentPage: AXPLayoutDetailsViewPage | null = null;\n if (pageId) {\n const foundPage = adapter.pages.find((p) => p.id === pageId);\n if (foundPage) {\n currentPage = foundPage;\n }\n } else {\n // Only auto-select primary page if layout is large\n if (deviceService.isLarge() || adapter.pages.length == 1) {\n const primaryPage = adapter.pages.find((p) => p.isPrimary) ?? adapter.pages[0];\n currentPage = primaryPage;\n }\n }\n\n // Set current tab to first tab of the current page (internal state only)\n let currentTab = currentPage?.tabs?.[0] ?? null;\n\n // Only update if there's a change. When `currentPage` is still null, `load()` → `loadPage`\n // will set `currentPage` and evaluated content; the first `queryParams` emit would otherwise\n // race and duplicate `buildEvaluatedPageContentsForRootContext` (double render).\n if (store.currentPage()?.id !== currentPage?.id) {\n if (store.currentPage() == null) {\n return;\n }\n patchState(store, {\n currentPage,\n currentTab,\n });\n void (async () => {\n const rootCtx = store.rootContext() as Record<string, unknown>;\n const { evaluatedPageContent, evaluatedTabContentsById } =\n await buildEvaluatedPageContentsForRootContext(currentPage, rootCtx, evaluatorService);\n patchState(store, {\n evaluatedPageContent,\n evaluatedTabContentsById,\n });\n })();\n }\n }\n });\n }\n });\n\n /**\n * Breadcrumb titles are rendered with `{{ t(item.title) | async }}`; values must resolve to primitives\n * or `@` keys. Normalize MLS **before** evaluate/format **and** **after**, because `raw` and the evaluator\n * output can both carry MLS maps or locale-shaped objects.\n */\n function applyLocaleIfMultilingual(value: AXPMultiLanguageString | unknown): AXPMultiLanguageString {\n if (\n value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n translateService.isValidMultiLanguageObject(value)\n ) {\n return translateService.resolve(value as AXPMultiLanguageString);\n }\n return value as AXPMultiLanguageString;\n }\n\n /** Post-eval: collapse MLS maps and plain locale objects after evaluate/format (avoids `[object Object]` in `t()`). */\n function finalizeBreadcrumbTitleEvaluated(\n evaluated: unknown,\n fallback: AXPMultiLanguageString,\n ): AXPMultiLanguageString {\n const chosen = evaluated ?? fallback;\n if (\n chosen !== null &&\n chosen !== undefined &&\n typeof chosen === 'object' &&\n !Array.isArray(chosen) &&\n translateService.isValidMultiLanguageObject(chosen)\n ) {\n return translateService.resolve(chosen as AXPMultiLanguageString);\n }\n if (typeof chosen === 'string') {\n return chosen;\n }\n if (chosen !== null && chosen !== undefined && typeof chosen === 'object' && !Array.isArray(chosen)) {\n return translateService.resolve(chosen as AXPMultiLanguageString);\n }\n if (typeof fallback === 'string') {\n return fallback;\n }\n if (\n fallback !== null &&\n fallback !== undefined &&\n translateService.isValidMultiLanguageObject(fallback as unknown)\n ) {\n return translateService.resolve(fallback as AXPMultiLanguageString);\n }\n return translateService.resolve(fallback);\n }\n\n async function resolveBreadcrumbTitleFields(\n raw: AXPMultiLanguageString,\n evalScope: AXPExpressionEvaluatorScope,\n formatContext: Record<string, unknown>,\n ): Promise<AXPMultiLanguageString> {\n /** Pre-eval: locale strip for recognizable MLS payloads before branching on expressions. */\n const sourceAfterPreLocale = applyLocaleIfMultilingual(raw);\n\n const isStructuredMlsObject =\n translateService.isValidMultiLanguageObject(raw) &&\n typeof raw === 'object' &&\n raw !== null &&\n !Array.isArray(raw);\n\n /** Full-string `{{ ... }}` uses `AXPExpressionEvaluatorService.isExpression` (aligned with evaluator API). */\n let evaluated: unknown;\n if (typeof sourceAfterPreLocale === 'string' && evaluatorService.isExpression(sourceAfterPreLocale)) {\n evaluated = await evaluatorService.evaluate(sourceAfterPreLocale, evalScope);\n } else if (isStructuredMlsObject) {\n evaluated = await evaluatorService.evaluate(raw, evalScope);\n } else if (typeof sourceAfterPreLocale === 'string') {\n evaluated = await formatService.format(sourceAfterPreLocale, 'string', formatContext);\n } else {\n evaluated = await formatService.format(raw as AXPMultiLanguageString, 'string', formatContext);\n }\n\n /** Post-eval: MLS-aware resolution again — evaluate may return MLS or map-like wrappers. */\n return finalizeBreadcrumbTitleEvaluated(evaluated, raw);\n }\n\n /**\n * Resolves MLS objects, evaluates format templates, or applies string formatting against page context (same semantics as legacy details layout header meta).\n */\n function convertToMultiLanguageString(\n value: AXPMultiLanguageString | null | undefined,\n ): AXPMultiLanguageString | null {\n if (!value || isEmpty(value)) {\n return null;\n }\n if (translateService.isValidMultiLanguageObject(value)) {\n return translateService.resolve(value as AXPMultiLanguageString);\n }\n return formatService.format(value, 'string', store.context()) as AXPMultiLanguageString ?? '';\n }\n\n return {\n async loadAdapter(adapter: AXPLayoutDetailsViewAdapter) {\n patchState(store, { adapter });\n\n // Load adapter context if adapter has load function\n let adapterContext = {};\n if (adapter.load) {\n const adapterResult = await adapter.load();\n adapterContext = adapterResult?.data ?? {};\n }\n\n patchState(store, {\n rootContext: cloneDeep(adapterContext),\n });\n },\n\n async loadPage(pageId?: string, forceRefresh?: boolean) {\n const adapter = store.adapter();\n if (!adapter) {\n throw new Error('Adapter must be loaded before loading page');\n }\n\n patchState(store, {\n status: AXPPageStatus.Processing,\n });\n\n // Get page ID from parameter or query params\n const queryParams = router.routerState.snapshot.root.queryParams;\n const targetPageId = pageId || queryParams['page'];\n\n // Find current page from page ID or conditionally default to first page\n let currentPage: AXPLayoutDetailsViewPage | null = null;\n if (targetPageId) {\n const foundPage = adapter.pages.find((p) => p.id === targetPageId);\n if (foundPage) {\n currentPage = foundPage;\n }\n } else {\n // Only auto-select primary page if layout is large\n if (deviceService.isLarge() || adapter.pages.length == 1) {\n const primaryPage = adapter.pages.find((p) => p.isPrimary) ?? adapter.pages[0];\n currentPage = primaryPage;\n }\n }\n\n // Load page data if current page exists\n let context = {};\n if (currentPage) {\n const currentPageIndex = adapter.pages.findIndex((p) => p.id === currentPage.id);\n const loadResult = await adapter.pages[currentPageIndex]?.load?.({ forceRefresh });\n context = loadResult?.data ?? {};\n }\n\n // Set current tab to first tab of the current page (internal state only)\n let currentTab = currentPage?.tabs?.[0] ?? null;\n const rootCtx = store.rootContext() as Record<string, unknown>;\n const { evaluatedPageContent, evaluatedTabContentsById } = await buildEvaluatedPageContentsForRootContext(\n currentPage,\n rootCtx,\n evaluatorService,\n );\n patchState(store, {\n previousContext: cloneDeep(context),\n context: cloneDeep(context),\n status: AXPPageStatus.Rendered,\n currentPage,\n currentTab,\n evaluatedPageContent,\n evaluatedTabContentsById,\n });\n },\n\n async load(adapter: AXPLayoutDetailsViewAdapter) {\n // Setup expression evaluator scope\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return getSmart(store.context(), path);\n },\n isDirty: () => store.isDirty(),\n },\n };\n patchState(store, {\n scope,\n });\n //\n await this.loadAdapter(adapter);\n await this.loadPage(undefined, true);\n },\n\n updateContext(context: any) {\n patchState(store, {\n context,\n });\n },\n\n updatePageSelectedRows(rows: any[]) {\n patchState(store, {\n pageSelectedRows: rows,\n });\n },\n\n async currentPagePrimaryActions() {\n // Use getActions() if available for reactive updates, otherwise fall back to static actions\n const currentPage = store.currentPage();\n const allActions = currentPage?.getActions ? await currentPage.getActions() : (currentPage?.actions ?? []);\n\n const raw = allActions.filter((a) => a.priority == 'primary');\n const acceptAction = currentPage?.settings?.commands?.accept;\n const rejectAction = currentPage?.settings?.commands?.reject;\n if (rejectAction) {\n raw.push({\n priority: 'primary',\n zone: 'footer',\n name: 'reject',\n title: rejectAction.title,\n color: rejectAction.color,\n icon: rejectAction.icon,\n command: rejectAction.command,\n visible: rejectAction.visible,\n });\n }\n if (acceptAction) {\n raw.push({\n priority: 'primary',\n zone: 'footer',\n name: 'accept',\n title: acceptAction.title,\n color: acceptAction.color,\n icon: acceptAction.icon,\n command: acceptAction.command,\n visible: acceptAction.visible,\n });\n }\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async currentPageSecondaryActions() {\n // Use getActions() if available for reactive updates, otherwise fall back to static actions\n const currentPage = store.currentPage();\n const allActions = currentPage?.getActions ? await currentPage.getActions() : (currentPage?.actions ?? []);\n\n const raw = allActions.filter((a) => a.priority == 'secondary');\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n currentPageContent() {\n return store.evaluatedPageContent();\n },\n\n currentPageTabs() {\n return store.currentPage()?.tabs?.filter((tab) => tab.visible !== false);\n },\n\n setCurrentPage(page: AXPLayoutDetailsViewPage | null) {\n // Clear previous page cache if changing pages\n const previousPage = store.currentPage();\n if (previousPage?.id && previousPage.id !== page?.id) {\n this.clearPageTabCache(previousPage.id);\n }\n\n if (page) {\n const firstTab = page.tabs?.[0] ?? null;\n\n patchState(store, {\n currentPage: page,\n currentTab: firstTab,\n });\n\n router.navigate([], {\n queryParams: {\n page: page.id,\n },\n queryParamsHandling: 'merge',\n });\n } else {\n patchState(store, {\n currentPage: null,\n currentTab: null,\n });\n // Remove page query parameter\n const currentParams = { ...route.snapshot.queryParams };\n delete currentParams['page'];\n router.navigate([], {\n queryParams: currentParams,\n });\n }\n },\n\n //Current Tab\n setCurrentTab(tab: AXPLayoutDetailsViewTabItem) {\n patchState(store, {\n currentTab: tab,\n });\n // Cache management is handled automatically by the effect\n },\n\n getCurrentTabContent() {\n return store.currentTab()?.content ?? [];\n },\n\n //#region ---- Rendered Tabs Management ----\n\n /**\n * Get content for a specific rendered tab\n */\n getRenderedTabContent(tabId: string) {\n const byTab = store.evaluatedTabContentsById();\n if (Object.prototype.hasOwnProperty.call(byTab, tabId)) {\n return byTab[tabId];\n }\n const renderedTabs = store.currentPageRenderedTabs();\n const renderedTab = renderedTabs.find((cached) => cached.tabId === tabId);\n return renderedTab?.tab?.content ?? [];\n },\n\n /**\n * Clear cache when page changes to free memory\n */\n clearPageTabCache(pageId: string) {\n const cache = store.renderedTabsCache();\n const updatedCache = { ...cache };\n delete updatedCache[pageId];\n\n patchState(store, {\n renderedTabsCache: updatedCache,\n });\n },\n\n //#endregion\n\n //#region ---- Page layout metadata (title, description, back button, badge, status) ----\n\n backButtonTitle() {\n return store.showPages() ? (store.adapter()?.label ?? '') : (store.adapter()?.title ?? '');\n },\n\n async getPageTitle(): Promise<AXPMultiLanguageString> {\n if (store.showPages()) {\n const raw = store.adapter()?.title;\n return convertToMultiLanguageString(raw) ?? '';\n }\n const raw = store.currentPage()?.title;\n return convertToMultiLanguageString(raw) ?? '';\n },\n\n async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n if (store.showPages()) {\n const raw = store.adapter()?.description;\n return convertToMultiLanguageString(raw);\n }\n const raw = store.currentPage()?.description;\n return convertToMultiLanguageString(raw);\n },\n\n async getBackButton(): Promise<AXPBackButton | null> {\n const adapter = store.adapter();\n if (!adapter) {\n return null;\n }\n if ((adapter.pages?.length ?? 0) > 1) {\n const titleRaw = (store.showPages() ? (adapter.label ?? '') : (adapter.title ?? '')) as AXPMultiLanguageString;\n return { title: convertToMultiLanguageString(titleRaw) ?? '@general:terms.common.back' };\n }\n const label = (adapter.label ?? '') as AXPMultiLanguageString;\n return { title: convertToMultiLanguageString(label) ?? '@general:terms.common.back' };\n },\n\n async getPageBadge(): Promise<AXPBadge | null> {\n const showPageBadge = await settingsService.get<boolean>(AXPCommonSettings.ShowPageBadge);\n if (!showPageBadge) {\n return null;\n }\n const adapter = store.adapter();\n if (!adapter?.getPageBadge) {\n return null;\n }\n return adapter.getPageBadge(store.context(), store.isDirty());\n },\n\n async getPageStatus(): Promise<AXPDetailsPageStatusChip | null> {\n const adapter = store.adapter();\n if (!adapter?.getPageStatus) {\n return null;\n }\n return adapter.getPageStatus(store.context(), store.currentPage());\n },\n\n //#endregion\n\n async primaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'primary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async secondaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'secondary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async breadcrumbs() {\n const rootContext = store.rootContext();\n const scope: AXPExpressionEvaluatorScope = {\n ...rootContext,\n context: {\n eval: (path: string) => get(rootContext, path),\n },\n };\n\n const breadcrumbs = await Promise.all(\n store.adapter()?.breadcrumbs?.map(async (b) => {\n const raw = (b?.title ?? '') as AXPMultiLanguageString;\n return {\n ...b,\n title: await resolveBreadcrumbTitleFields(raw, scope, rootContext),\n };\n }) ?? [],\n );\n\n // Add current page title as the last breadcrumb item\n const currentPageLabel = store.currentPage()?.label;\n const pages = store.adapter()?.pages ?? [];\n const primaryPage = pages.find((p) => p.isPrimary) ?? pages[0];\n const isMainPage = primaryPage?.id === store.currentPage()?.id;\n if (currentPageLabel && !isMainPage) {\n const pageScope: AXPExpressionEvaluatorScope = {\n ...store.context(),\n context: {\n eval: (path: string) => get(store.context(), path),\n },\n };\n breadcrumbs.push({\n title: await resolveBreadcrumbTitleFields(currentPageLabel as AXPMultiLanguageString, pageScope, store.context()),\n });\n }\n\n return breadcrumbs;\n },\n\n async discard() {\n patchState(store, {\n context: cloneDeep(store.previousContext()),\n });\n },\n\n async save(command: AXPExecuteCommand, form: AXFormComponent) {\n const formResult = await form.validate();\n if (!formResult.result) {\n return;\n }\n patchState(store, {\n status: AXPPageStatus.Submitting,\n });\n const result = await store.currentPage()?.execute?.(command, store.context());\n const enableOperationToasts = await settingsService.get(AXPCommonSettings.EnableOperationToasts);\n if (result?.success) {\n patchState(store, {\n previousContext: store.context(),\n });\n // After successful save, force refresh the rootContext and reload the current page\n try {\n await this.loadPage(store.currentPage()?.id, true);\n } catch (error: unknown) {\n console.error('Failed to refresh page after save', error);\n }\n if (enableOperationToasts) {\n toastService.show({\n color: 'success',\n title: await translateService.translateAsync('@general:messages.generic.success.title'),\n content: await translateService.translateAsync('@general:messages.generic.success.description'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n } else {\n if (enableOperationToasts) {\n const rawText = result?.message?.text;\n const content = rawText\n ? typeof rawText === 'string'\n ? rawText.startsWith('@')\n ? await translateService.translateAsync(rawText)\n : rawText\n : translateService.resolve(rawText)\n : await translateService.translateAsync('@general:messages.generic.error.description');\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:messages.generic.error.title'),\n content,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n patchState(store, {\n status: AXPPageStatus.Submitted,\n });\n },\n\n goToListPage() {\n if (store.adapter()?.exitUrl) {\n router.navigate([store.adapter()?.exitUrl]);\n }\n },\n };\n },\n ),\n);\n","import { AXPPageLayoutBaseComponent } from '../../layouts';\nimport { Injectable } from '@angular/core';\n\n/**\n * Registry of rendered page component instances by component key.\n * Used so page execute can delegate to the actual component instance in the view.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPPageComponentInstanceRegistryService {\n private readonly instances = new Map<string, AXPPageLayoutBaseComponent>();\n\n register(key: string, instance: AXPPageLayoutBaseComponent): void {\n this.instances.set(key, instance);\n }\n\n unregister(key: string): void {\n this.instances.delete(key);\n }\n\n get(key: string): AXPPageLayoutBaseComponent | null {\n return this.instances.get(key) ?? null;\n }\n}\n","import { AXPPageComponentRegistryService } from '@acorex/platform/layout/components';\nimport { ComponentRef, Directive, effect, inject, input, OnDestroy, OnInit, output, ViewContainerRef } from '@angular/core';\nimport { AXPPageComponentInstanceRegistryService } from './page-component-instance-registry.service';\n\n//#region ---- Page Component Renderer Directive ----\n\n/**\n * Directive for rendering page components dynamically\n * Similar to component-slot pattern but specifically for page components\n */\n@Directive({\n selector: '[axp-page-component-renderer]',\n standalone: true,\n})\nexport class AXPPageComponentRendererDirective implements OnInit, OnDestroy {\n componentKey = input.required<string>();\n rootContext = input<Record<string, any>>({});\n pageConfig = input<Record<string, unknown>>();\n options = input<Record<string, any>>({});\n\n /** Emitted when the component instance is registered and ready */\n componentReady = output<string>();\n\n private viewContainerRef = inject(ViewContainerRef);\n private pageComponentRegistry = inject(AXPPageComponentRegistryService);\n private instanceRegistry = inject(AXPPageComponentInstanceRegistryService);\n private componentRef: ComponentRef<any> | null = null;\n\n #contextEffect = effect(() => {\n const context = this.rootContext();\n if (this.componentRef && context) {\n this.componentRef.setInput('rootContext', context);\n }\n });\n\n #pageConfigEffect = effect(() => {\n const config = this.pageConfig();\n if (this.componentRef && config) {\n this.componentRef.setInput('pageConfig', config);\n }\n });\n\n #optionsEffect = effect(() => {\n const options = this.options();\n if (this.componentRef && options) {\n this.componentRef.setInput('options', options);\n }\n });\n\n async ngOnInit(): Promise<void> {\n await this.loadComponent();\n }\n\n ngOnDestroy(): void {\n if (this.componentRef) {\n this.instanceRegistry.unregister(this.componentKey());\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n\n private async loadComponent(): Promise<void> {\n try {\n // Clear any existing component\n this.viewContainerRef.clear();\n\n // Get component loader from registry\n const loader = await this.pageComponentRegistry.find(this.componentKey());\n if (!loader) {\n console.error(`Component with key \"${this.componentKey()}\" not found in registry`);\n return;\n }\n\n // Load component type\n const ComponentType = await loader();\n\n // Create component instance\n this.componentRef = this.viewContainerRef.createComponent(ComponentType);\n this.instanceRegistry.register(this.componentKey(), this.componentRef.instance);\n\n const context = this.rootContext();\n if (context) {\n this.componentRef.setInput('rootContext', context);\n }\n\n const options = this.options();\n if (options) {\n this.componentRef.setInput('options', options);\n }\n\n const pageConfig = this.pageConfig();\n if (pageConfig) {\n this.componentRef.setInput('pageConfig', pageConfig);\n }\n\n // Notify that component is ready (allows parent to re-fetch actions)\n this.componentReady.emit(this.componentKey());\n } catch (error) {\n console.error(`Failed to load component \"${this.componentKey()}\":`, error);\n }\n }\n}\n\n//#endregion\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostListener,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\n//\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\n//\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPEntityCommandScope } from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBadge,\n AXPBreadcrumbItem,\n AXPBroadcastEventService,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPPageStatus,\n AXPContextChangeEvent,\n AXPMultiLanguageString,\n} from '@acorex/platform/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex/platform/layout/components';\nimport {\n AXPWidgetContainerComponent,\n AXPWidgetCoreModule,\n} from '@acorex/platform/layout/widget-core';\nimport { AXPDataListWidgetViewComponent } from '@acorex/platform/layout/widgets';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subject, Subscription, takeUntil } from 'rxjs';\nimport {\n AXPLayoutDetailsViewAction,\n AXPLayoutDetailsViewAdapter,\n AXPLayoutDetailsViewPage,\n} from './details-view.adapter';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '../../layouts';\nimport { AXPLayoutDetailsViewViewModel } from './details-view.viewmodel';\nimport { AXPPageComponentRendererDirective } from './page-component-renderer.directive';\n\n@Component({\n templateUrl: './details-view.component.html',\n styleUrl: './details-view.component.scss',\n selector: 'axp-layout-details-view',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n AXSearchBoxModule,\n AXTabsModule,\n //\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPWidgetCoreModule,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXFormModule,\n AXPPageComponentRendererDirective,\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPLayoutDetailsViewComponent,\n },\n AXPLayoutDetailsViewViewModel,\n ],\n})\nexport class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {\n adapter = input.required<AXPLayoutDetailsViewAdapter>();\n //\n protected vm = inject(AXPLayoutDetailsViewViewModel);\n protected router = inject(Router);\n protected route = inject(ActivatedRoute);\n protected eventService = inject(AXPBroadcastEventService);\n protected deviceService = inject(AXPDeviceService);\n private onSelectionChangeSubscription?: Subscription;\n private readonly destroyed$ = new Subject<void>();\n\n protected form = viewChild<AXFormComponent>('form');\n protected widgetContainer = viewChild<AXPWidgetContainerComponent>(AXPWidgetContainerComponent);\n\n protected footerPrimaryActions = signal<AXPActionMenuItem[]>([]);\n protected footerSecondaryActions = signal<AXPActionMenuItem[]>([]);\n\n protected footerActions = computed(() => [...this.footerPrimaryActions(), ...this.footerSecondaryActions()]);\n\n protected hasVisibleFooterPrimaryActions = computed(() => {\n const primaryFooterActions = this.footerPrimaryActions();\n return primaryFooterActions.some((action) => action.visible != false);\n });\n\n protected hasVisibleFooterSecondaryActions = computed(() => {\n const secondaryFooterActions = this.footerSecondaryActions();\n return secondaryFooterActions.some((action) => action.visible != false);\n });\n\n protected hasFooter = computed(() => {\n return (\n (this.hasVisibleFooterPrimaryActions() || this.hasVisibleFooterSecondaryActions()) &&\n !this.vm.currentPage()?.isReadonly\n );\n });\n\n /**\n * Append timestamp query param to trigger router to re-run guards/resolvers\n */\n protected async refreshLayout(): Promise<void> {\n const router = this.router;\n const route = this.route;\n const now = Date.now();\n await router.navigate([], {\n relativeTo: route,\n queryParams: { _ts: now },\n queryParamsHandling: 'merge',\n });\n }\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n //\n await this.vm.load(this.adapter());\n\n this.eventService\n //TODO: Use the constant from the entity module\n .listen('entity:refresh-layout')\n .pipe(takeUntil(this.destroyed$))\n .subscribe((e) => {\n if ((e.data as any).name == this.vm.adapter()?.name) {\n this.refreshLayout();\n }\n });\n }\n\n async ngAfterViewInit() {\n const listWidget = (await this.widgetContainer()?.find('page-list_table')) as AXPDataListWidgetViewComponent;\n if (listWidget?.api && typeof listWidget.api === 'function') {\n const onSelectionChange = listWidget.api()['onSelectionChange'] as Subject<any>;\n if (onSelectionChange) {\n this.onSelectionChangeSubscription = onSelectionChange.subscribe((e: any) => {\n this.vm.updatePageSelectedRows(e);\n this.recompute();\n });\n }\n }\n }\n\n ngOnDestroy(): void {\n this.onSelectionChangeSubscription?.unsubscribe();\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n #FooterActionsEffect = effect(async () => {\n this.updateTrigger();\n const footerPrimaryActions = await this.getFooterPrimaryActions();\n const footerSecondaryActions = await this.getFooterSecondaryActions();\n this.footerPrimaryActions.set(footerPrimaryActions);\n this.footerSecondaryActions.set(footerSecondaryActions);\n });\n\n protected handleOnContextChanged(e: AXPContextChangeEvent) {\n this.vm.updateContext(e.data);\n this.recompute();\n }\n\n protected handleSelectPage(page: AXPLayoutDetailsViewPage) {\n this.vm.setCurrentPage(page);\n }\n\n protected async getAllPrimaryActions(): Promise<AXPLayoutDetailsViewAction[]> {\n if (!this.vm.showPages()) {\n const [primaryActions, pagePrimaryActions] = await Promise.all([\n this.vm.primaryActions(),\n this.vm.currentPagePrimaryActions(),\n ]);\n return [...primaryActions, ...pagePrimaryActions];\n } else {\n return [];\n }\n }\n\n public override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllPrimaryActions()).filter((a) => {\n return (\n a.priority == 'primary' &&\n (((a as any).scope == AXPEntityCommandScope.Selected && this.vm.currentPageSelectedRows().length) ||\n (((a as any).scope == AXPEntityCommandScope.TypeLevel || !(a as any).scope) &&\n a.zone != 'footer' &&\n !this.vm.currentPageSelectedRows().length))\n );\n });\n }\n\n protected async getFooterPrimaryActions(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllPrimaryActions()).filter((item) => item.zone == 'footer');\n }\n\n protected async getAllSecondaryActions(): Promise<AXPLayoutDetailsViewAction[]> {\n if (!this.vm.showPages()) {\n const [secondaryActions, pageSecondaryActions] = await Promise.all([\n this.vm.secondaryActions(),\n this.vm.currentPageSecondaryActions(),\n ]);\n return [...secondaryActions, ...pageSecondaryActions];\n } else {\n return [];\n }\n }\n\n public override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllSecondaryActions()).filter((item) => item.zone == 'header');\n }\n\n protected async getFooterSecondaryActions(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllSecondaryActions()).filter((item) => item.zone == 'footer');\n }\n\n protected override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return (await this.vm.breadcrumbs()) ?? [];\n }\n\n protected override async getPageTitle(): Promise<AXPMultiLanguageString> {\n return this.vm.getPageTitle();\n }\n\n override async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n return this.vm.getPageDescription();\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n return this.vm.getBackButton();\n }\n\n override async getPageBadge(): Promise<AXPBadge | null> {\n return this.vm.getPageBadge();\n }\n\n override async getPageStatus(): Promise<AXPPageStatus | null> {\n return this.vm.getPageStatus();\n }\n\n /**\n * Get entity data for status chip component\n */\n getEntityData(): Record<string, any> | null {\n return this.vm.context() ?? null;\n }\n\n override async onBackButtonClick(): Promise<void> {\n // When back button is clicked in small layout, go back to page list\n if (!this.vm.showPages() && this.vm.adapter()?.pages?.length! > 1) {\n this.vm.setCurrentPage(null);\n } else {\n this.vm.goToListPage();\n }\n }\n\n //#region ---- Command Execution ----\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (!this.vm.adapter()) {\n return;\n }\n\n const acceptCommand = this.vm.currentPage()?.settings?.commands?.accept?.command.name;\n const rejectCommand = this.vm.currentPage()?.settings?.commands?.reject?.command.name;\n\n if (command.name == acceptCommand) {\n await this.vm.save(command, this.form()!);\n this.recompute();\n return;\n }\n\n if (command.name == rejectCommand) {\n await this.vm.discard();\n this.recompute();\n return;\n }\n\n // Handle status update command\n if (command.name === 'update-status') {\n const transition = command.options?.['transition'];\n if (transition?.toStatus?.name) {\n const status = await this.vm.getPageStatus();\n if (status?.dataPath) {\n // Update entity context with new status value\n const entity = this.vm.context();\n if (entity) {\n entity[status.dataPath] = transition.toStatus.name;\n this.vm.updateContext(entity);\n this.recompute();\n }\n }\n }\n return;\n }\n\n // Get all actions\n const [adapterPrimaryActions, adapterSecondaryActions, pagePrimaryActions, pageSecondaryActions] =\n await Promise.all([\n this.vm.primaryActions(),\n this.vm.secondaryActions(),\n this.vm.currentPagePrimaryActions(),\n this.vm.currentPageSecondaryActions(),\n ]);\n\n // Combine adapter actions (primary + secondary)\n const adapterActions = [...adapterPrimaryActions, ...adapterSecondaryActions];\n\n // Combine current page actions (primary + secondary)\n const pageActions = [...pagePrimaryActions, ...pageSecondaryActions];\n\n const commandExistsInActions = (actions: AXPLayoutDetailsViewAction[], commandName: string): boolean => {\n const check = (list: AXPLayoutDetailsViewAction[] | undefined): boolean => {\n if (!Array.isArray(list) || list.length === 0) return false;\n return list.some(\n (action) =>\n action?.command?.name === commandName ||\n (Array.isArray(action?.items) && check(action.items as AXPLayoutDetailsViewAction[])),\n );\n };\n return check(actions);\n };\n\n // Check if command exists in adapter actions first\n if (commandExistsInActions(adapterActions, command.name)) {\n await this.vm.adapter()?.execute?.(command, this.vm.context());\n }\n // Check if command exists in current page actions\n else if (commandExistsInActions(pageActions, command.name)) {\n console.log('currentPage', this.vm.currentPage());\n await this.vm\n .currentPage()\n ?.execute?.(command, this.vm.pageSelectedRows().length ? this.vm.pageSelectedRows() : this.vm.context());\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n protected async handleKeyboardEvent(event: KeyboardEvent) {\n if (event.ctrlKey) {\n switch (event.code) {\n case 'KeyS':\n event.preventDefault();\n event.stopPropagation();\n await this.execute({ name: this.vm.currentPage()?.settings?.commands?.accept?.command.name || 'save' });\n break;\n }\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n @if (vm.adapter()?.pages?.length! > 1 && vm.isLarge()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n (formatService.format(vm.showPages() ? (vm.adapter()?.title ?? '') : (vm.adapter()?.label ?? ''), 'string', vm.rootContext())\n | translate\n | async)\n }}</axp-layout-title>\n <axp-layout-description>{{\n (formatService.format(vm.adapter()?.description ?? '', 'string', vm.rootContext()) | translate | async)\n }}</axp-layout-description>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs class=\"axp-vertical-tabs\" [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\">\n @for (item of vm.adapter()?.pages; track $index) {\n <ax-tab-item\n [text]=\"(formatService.format(item.label, 'string', vm.rootContext()) | translate | async)!\"\n (onClick)=\"handleSelectPage(item)\"\n [active]=\"vm.currentPage()?.id === item.id\"\n >\n <ax-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n <!-- Content Section -->\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-4\">\n @if (vm.showPages()) {\n <axp-layout-list class=\"ax-w-full\">\n @for (item of vm.adapter()?.pages; track $index) {\n <axp-layout-list-item (click)=\"handleSelectPage(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"ax-text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"ax-font-semibold\">{{\n formatService.format(item.label, 'string', vm.rootContext()) | translate | async\n }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"ax-text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n } @else {\n <ax-form class=\"ax-h-full ax-w-full\" #form>\n <axp-widgets-container\n #widgetsContainerRef\n [context]=\"vm.context()\"\n (onContextChanged)=\"handleOnContextChanged($event)\"\n >\n <div class=\"ax-flex ax-flex-col ax-w-full ax-gap-4 ax-h-full\">\n @for (item of vm.currentPageContent(); track $index) {\n @if ('type' in item && item.type === 'component') {\n <!-- Component-based content -->\n <div\n axp-page-component-renderer\n [componentKey]=\"$any(item).componentKey\"\n [rootContext]=\"vm.rootContext()\"\n [pageConfig]=\"$any(item).pageConfig\"\n [options]=\"$any(item).options\"\n (componentReady)=\"recompute()\"\n ></div>\n } @else {\n <!-- Widget-based content -->\n <ng-container axp-widget-renderer [node]=\"$any(item)\" [mode]=\"$any(item).mode ?? 'view'\"></ng-container>\n }\n }\n @if (vm.currentPage()?.tabs?.length) {\n <div class=\"axp-horizontal-tabs\">\n <ax-tabs [location]=\"'bottom'\" [fitParent]=\"false\" look=\"classic\">\n @for (tab of vm.currentPageTabs(); track $index) {\n <ax-tab-item\n (onClick)=\"vm.setCurrentTab(tab)\"\n [text]=\"(tab.title | translate | async)!\"\n [active]=\"vm.currentTab()?.id === tab.id\"\n >\n <ax-prefix>\n <ax-icon icon=\"far ${{ tab.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n <div [class]=\"'content'\">\n @for (renderedTab of vm.currentPageRenderedTabs(); track renderedTab.tabId) {\n <div [class]=\"renderedTab.tabId === vm.currentTab()?.id ? '' : 'ax-hidden'\">\n @for (content of vm.getRenderedTabContent(renderedTab.tabId); track $index) {\n <ng-container axp-widget-renderer [node]=\"content\" [mode]=\"content.mode ?? 'view'\">\n </ng-container>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n }\n </axp-page-content>\n\n <!-- Footer Section -->\n @if (hasFooter()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <!-- secondary footer actions -->\n @if (hasVisibleFooterSecondaryActions()) {\n <ax-button\n [class.ax-sm]=\"deviceService.isSmall()\"\n [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\"\n [color]=\"'default'\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (action of footerSecondaryActions(); track $index) {\n @if (action.visible != false) {\n <ax-button-item\n [text]=\"(t(action.title) | async)!\"\n [color]=\"action.color\"\n [disabled]=\"action.disabled || vm.isSaving()\"\n (onClick)=\"execute(action.command!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ action.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (action.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n\n @if (hasVisibleFooterPrimaryActions()) {\n @for (action of footerPrimaryActions(); track $index) {\n @if (action.visible != false) {\n <ax-button\n [class.ax-sm]=\"deviceService.isSmall()\"\n [disabled]=\"action.disabled || vm.isSaving()\"\n [text]=\"(t(action.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"action.color\"\n (onClick)=\"execute(action.command!)\"\n >\n <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n @if (action?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of action?.items; track $index) {\n @if (sub.visible != false) {\n <ax-button-item\n [text]=\"(t(sub.title) | async)!\"\n [color]=\"sub.color\"\n [disabled]=\"sub.disabled\"\n (onClick)=\"execute(sub.command!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n }\n }\n }\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i7","i1","i2","i3","i4","i5","i6","i8"],"mappings":"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"}
|