@acorex-platform/module-platform-management-client 0.0.38 → 0.0.48
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-module-platform-management-client-acorex-platform-module-platform-management-client-BGVhn6wv.mjs → acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-YuJijjKh.mjs} +465 -101
- package/fesm2022/acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-YuJijjKh.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-command-definition.mjs +20 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-command-definition.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-entity-access-policy.mjs +20 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-entity-access-policy.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-entity-definition.mjs +1499 -30
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-entity-definition.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-module-definition.mjs +396 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-module-definition.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-plugin-definition.mjs +20 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-plugin-definition.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-query-definition.mjs +49 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-query-definition.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-token.mjs +20 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-token.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-widget.mjs +20 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entities-widget.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-acorex-platform-module-platform-management-client-contracts-entity-catalog-BOwC5Ns9.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-acorex-platform-module-platform-management-client-contracts-entity-catalog-HWczTPH2.mjs} +15 -8
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-acorex-platform-module-platform-management-client-contracts-entity-catalog-HWczTPH2.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-command-definition.entity-CdvQlwAk.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-command-definition.entity-C3B1_QMs.mjs} +16 -2
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-command-definition.entity-C3B1_QMs.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-access-policy.entity-Dye4aSKE.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-access-policy.entity-BPkJloHy.mjs} +16 -2
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-access-policy.entity-BPkJloHy.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-definition.entity-BL1I9pmK.mjs +1621 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-definition.entity-BL1I9pmK.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-module-definition.entity-Cknl0vbc.mjs +299 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-module-definition.entity-Cknl0vbc.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-plugin-definition.entity-CwU5hMjI.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-plugin-definition.entity-BxABTl8L.mjs} +16 -2
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-plugin-definition.entity-BxABTl8L.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-query-definition.entity-DGK684Q1.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-query-definition.entity-Cv6HVQOU.mjs} +45 -3
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-query-definition.entity-Cv6HVQOU.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-token.entity-DI_k6-ha.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-token.entity-BV8iSuoK.mjs} +16 -2
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-token.entity-BV8iSuoK.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-contracts-entity-catalog-widget.entity-C18msniH.mjs → acorex-platform-module-platform-management-client-contracts-entity-catalog-widget.entity-BYH6SIqU.mjs} +16 -2
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-widget.entity-BYH6SIqU.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog.mjs +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts.mjs +1664 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query-contract.util-D_af2BUi.mjs +586 -0
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query-contract.util-D_af2BUi.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-create-user-query.command-9Ku7C1BC.mjs → acorex-platform-module-platform-management-client-create-user-query.command-Bh49QHkl.mjs} +374 -324
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query.command-Bh49QHkl.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-entity-definition-form-page.component-BgBWob9p.mjs +329 -0
- package/fesm2022/acorex-platform-module-platform-management-client-entity-definition-form-page.component-BgBWob9p.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-entity-definition-form-page.provider-hLzgoJu3.mjs +23 -0
- package/fesm2022/acorex-platform-module-platform-management-client-entity-definition-form-page.provider-hLzgoJu3.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-list-registered-entities.query-CZM6JQou.mjs +197 -0
- package/fesm2022/acorex-platform-module-platform-management-client-list-registered-entities.query-CZM6JQou.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-local-entities.mjs +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-local-entities.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-platform-management-client-menu-list.component-uF5w1c7t.mjs → acorex-platform-module-platform-management-client-menu-list.component-iMEnFPEY.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-platform-management-client-menu-list.component-uF5w1c7t.mjs.map → acorex-platform-module-platform-management-client-menu-list.component-iMEnFPEY.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-column.component-COfOzMGh.mjs +45 -0
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-column.component-COfOzMGh.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-edit.component-BW2pBOeg.mjs +166 -0
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-edit.component-BW2pBOeg.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-view.component-DD9ETjFD.mjs +45 -0
- package/fesm2022/acorex-platform-module-platform-management-client-query-contract-widget-view.component-DD9ETjFD.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-B0g6dweQ.mjs → acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-DRkE2a7n.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-B0g6dweQ.mjs.map → acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-DRkE2a7n.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-A0v5MWRU.mjs → acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-CXI6fJi3.mjs} +2 -3
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-A0v5MWRU.mjs.map → acorex-platform-module-platform-management-client-rest-api-generator-widget-edit.component-CXI6fJi3.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-view.component-RR5zcsnI.mjs → acorex-platform-module-platform-management-client-rest-api-generator-widget-view.component-C3iHgoC2.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-platform-management-client-rest-api-generator-widget-view.component-RR5zcsnI.mjs.map → acorex-platform-module-platform-management-client-rest-api-generator-widget-view.component-C3iHgoC2.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-platform-management-client-run-user-query.command-BzNa3B48.mjs +144 -0
- package/fesm2022/acorex-platform-module-platform-management-client-run-user-query.command-BzNa3B48.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-platform-management-client.mjs +1 -1
- package/package.json +7 -3
- package/types/acorex-platform-module-platform-management-client-contracts-entities-module-definition.d.ts +5 -0
- package/types/acorex-platform-module-platform-management-client-contracts.d.ts +225 -5
- package/types/acorex-platform-module-platform-management-client.d.ts +35 -3
- package/fesm2022/acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-BGVhn6wv.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-acorex-platform-module-platform-management-client-contracts-entity-catalog-BOwC5Ns9.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-command-definition.entity-CdvQlwAk.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-access-policy.entity-Dye4aSKE.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-definition.entity-CcJ58vfr.mjs +0 -158
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-entity-definition.entity-CcJ58vfr.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-plugin-definition.entity-CwU5hMjI.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-query-definition.entity-DGK684Q1.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-token.entity-DI_k6-ha.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-contracts-entity-catalog-widget.entity-C18msniH.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query.command-9Ku7C1BC.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query.types-DdygAori.mjs +0 -71
- package/fesm2022/acorex-platform-module-platform-management-client-create-user-query.types-DdygAori.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-platform-management-client-list-registered-entities.query-DjStd3a8.mjs +0 -136
- package/fesm2022/acorex-platform-module-platform-management-client-list-registered-entities.query-DjStd3a8.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-platform-management-client-menu-list.component-uF5w1c7t.mjs","sources":["../../../../libs/modules/platform-management/client/src/lib/features/menu-management/pages/menu-list/menu-list.component.ts","../../../../libs/modules/platform-management/client/src/lib/features/menu-management/pages/menu-list/menu-list.component.html"],"sourcesContent":["\nimport { AXPActionMenuItem, AXPExecuteCommand, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTreeViewBeforeDropEvent, AXTreeViewComponent, AXTreeViewDropEvent, AXTreeViewNode } from '@acorex/components/tree-view';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPMenuItem } from '@acorex-platform/framework-client/common';\n\nimport { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n OnDestroy,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPMenuItemAction } from '../../menu-customization.types';\nimport { AXPMenuManagementService, AXPMenuTreeNodeData } from '../../menu-management.service';\n\n//#region ---- Menu List Component ----\n\n@Component({\n selector: 'axm-menu-list',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXTreeViewComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPStateMessageComponent,\n AXBadgeModule,\n ],\n templateUrl: './menu-list.component.html',\n styleUrls: ['./menu-list.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMMenuListComponent,\n },\n ],\n host: { class: 'axm-menu-list-page' },\n})\nexport class AXMMenuListComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {\n //#region ---- Dependencies ----\n\n private menuManagementService = inject(AXPMenuManagementService);\n private layoutBuilder = inject(AXPLayoutBuilderService);\n protected dialogService = inject(AXDialogService);\n protected override toastService = inject(AXToastService);\n private translationService = inject(AXTranslationService);\n private route = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ---- Component State ----\n\n protected tree = viewChild(AXTreeViewComponent);\n protected treeNodes = signal<AXTreeViewNode[]>([]);\n protected isLoading = signal<boolean>(false);\n protected error = signal<string>('');\n protected currentScope = signal<AXPPlatformScope>(AXPPlatformScope.User);\n private isSyncing = false; // Prevent concurrent sync operations\n private destroy$ = new Subject<void>(); // For subscription cleanup\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n // Get scope from route (with memory leak prevention)\n this.route.params.pipe(takeUntil(this.destroy$)).subscribe(async (params) => {\n const scope = params['scope'] as AXPPlatformScope;\n if (scope) {\n this.currentScope.set(scope);\n await this.loadMenuItems();\n this.recompute(); // Update page header after loading\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle before drop validation\n */\n async handleBeforeDrop(e: AXTreeViewBeforeDropEvent): Promise<void> {\n console.log('[handleBeforeDrop] Event triggered!', {\n movedNode: e.movedNode?.['id'],\n previousParent: e.previousParent?.['id'],\n currentParent: e.currentParent?.['id'],\n previousIndex: e.previousIndex,\n currentIndex: e.currentIndex,\n });\n\n const targetParent = (e.currentParent?.['data'] as AXPMenuTreeNodeData) || null;\n\n // Prevent dropping into items with paths (leaf nodes)\n if (targetParent?.menuItem?.path) {\n e.canceled = true;\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.move',\n );\n this.toastService.warning(message);\n return;\n }\n\n // Note: Circular reference validation is handled by the tree component itself\n // Additional validation can be added here if needed based on business rules\n }\n\n /**\n * Handle after drop event to sync changes\n * The event contains information about the moved node and its new position\n */\n async handleAfterDrop(event: AXTreeViewDropEvent): Promise<void> {\n console.log('[handleAfterDrop] Event triggered!', {\n movedNode: event.node?.['id'],\n movedNodeData: event.node?.['data'],\n previousParent: event.previousParent?.['id'],\n currentParent: event.currentParent?.['id'],\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n });\n\n // Check what the tree component has\n const treeComp = this.tree();\n if (treeComp) {\n console.log('[handleAfterDrop] Tree component datasource:', treeComp.datasource);\n }\n\n // Check our signal\n console.log('[handleAfterDrop] Our treeNodes signal:', this.treeNodes());\n\n await this.syncTreeChanges();\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n /**\n * Load menu tree for current scope\n */\n protected async loadMenuItems(): Promise<void> {\n try {\n this.isLoading.set(true);\n this.error.set('');\n\n const treeNodes = await this.menuManagementService.getMenuTreeByScope(this.currentScope());\n this.treeNodes.set(treeNodes);\n this.recompute();\n } catch (error) {\n this.error.set(error instanceof Error ? error.message : 'Failed to load menu items');\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.load',\n );\n this.toastService.danger(message);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /**\n * Sync tree changes to backend\n */\n private async syncTreeChanges(): Promise<void> {\n // Prevent concurrent sync operations\n if (this.isSyncing) {\n return;\n }\n\n try {\n this.isSyncing = true;\n const scope = this.currentScope();\n\n // Get nodes from signal - the tree component mutates the array in place\n // so this.treeNodes() will have the updated structure after drag-drop\n const nodes = this.treeNodes();\n\n console.log('[syncTreeChanges] nodes count:', nodes?.length);\n \n // Log detailed node structure\n const logNode = (n: any, level: number = 0): any => ({\n id: n['id'],\n title: n['title'],\n level,\n childrenCount: (n['children'] as any[])?.length ?? 0,\n children: (n['children'] as any[])?.map((c: any) => logNode(c, level + 1)) ?? [],\n });\n console.log('[syncTreeChanges] Full tree structure:', JSON.stringify(nodes?.map(n => logNode(n)), null, 2));\n\n if (!nodes || nodes.length === 0) {\n console.log('[syncTreeChanges] No nodes to sync');\n return;\n }\n\n await this.menuManagementService.syncTreeChangesByScope(scope, nodes);\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.success.reorder',\n );\n this.toastService.success(message);\n } catch (error) {\n console.error('Failed to sync tree changes:', error);\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.sync',\n );\n this.toastService.danger(message);\n } finally {\n this.isSyncing = false;\n }\n }\n\n //#endregion\n\n //#region ---- Page Layout Interface ----\n\n /**\n * Get page title\n */\n override async getPageTitle(): Promise<string> {\n const scopeName = this.currentScope();\n const scopeKey = scopeName === AXPPlatformScope.User ? 'user' : 'tenant';\n return this.translationService.translateAsync(`@platform-management:menu-management.menus.${scopeKey}.title`);\n }\n\n /**\n * Get page description\n */\n override async getPageDescription(): Promise<string> {\n return this.translationService.translateAsync(\n '@platform-management:menu-management.components.menu-list.description',\n );\n }\n\n /**\n * Get primary menu items (actions)\n */\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n title: await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.add-root.title',\n ),\n icon: 'fa-light fa-plus',\n color: 'primary',\n command: { name: 'add-root' },\n },\n ];\n }\n\n /**\n * Get secondary menu items\n */\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n title: await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.collapse.title',\n ),\n icon: 'fa-light fa-minus-square',\n command: { name: 'collapse' },\n },\n\n {\n title: await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.expand.title',\n ),\n icon: 'fa-light fa-plus-square',\n command: { name: 'expand' },\n break: true,\n },\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.title'),\n icon: 'fa-light fa-rotate-left',\n color: 'danger',\n command: { name: 'reset' },\n },\n ];\n }\n\n /**\n * Execute commands from page actions\n */\n override async execute(command: AXPExecuteCommand): Promise<void> {\n switch (command.name) {\n case 'add-root':\n await this.addRootMenuItem();\n break;\n case 'collapse':\n this.tree()?.collapseAll();\n break;\n case 'expand':\n this.tree()?.expandAll();\n break;\n case 'reset':\n await this.resetCustomizations();\n break;\n }\n }\n\n //#endregion\n\n //#region ---- Action Handlers ----\n\n /**\n * Handle menu item action\n */\n protected async onAction(action: AXPMenuItemAction, nodeData: AXPMenuTreeNodeData): Promise<void> {\n switch (action) {\n case 'show':\n await this.showMenuItem(nodeData);\n break;\n case 'hide':\n await this.hideMenuItem(nodeData);\n break;\n case 'edit':\n await this.editMenuItem(nodeData);\n break;\n case 'delete':\n await this.deleteMenuItem(nodeData);\n break;\n case 'add-child':\n await this.addChildMenuItem(nodeData);\n break;\n }\n }\n\n /**\n * Add new root menu item\n */\n protected async addRootMenuItem(): Promise<void> {\n await this.showMenuItemDialog(null, null);\n }\n\n /**\n * Add new child menu item\n */\n protected async addChildMenuItem(parentNodeData: AXPMenuTreeNodeData): Promise<void> {\n await this.showMenuItemDialog(null, parentNodeData.menuItem.name);\n }\n\n /**\n * Reset customizations\n */\n protected async resetCustomizations(): Promise<void> {\n const title = await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.reset.confirm.title',\n );\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.reset.confirm.message',\n );\n const confirmed = await this.dialogService.confirm(title, message);\n\n if (!confirmed) return;\n\n try {\n // Reset customizations for current scope\n await this.menuManagementService.resetCustomizationsByScope(this.currentScope());\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.success.reset',\n );\n this.toastService.success(message);\n } catch (error) {\n console.error('Failed to reset customizations:', error);\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.reset',\n );\n this.toastService.danger(message);\n } finally {\n // Reload anyway to show current state\n await this.loadMenuItems();\n }\n }\n\n //#endregion\n\n //#region ---- Menu Item Actions ----\n\n /**\n * Show menu item\n */\n private async showMenuItem(nodeData: AXPMenuTreeNodeData): Promise<void> {\n await this.executeMenuAction(\n () => this.menuManagementService.showMenuItemByScope(this.currentScope(), nodeData.menuItem.name!),\n '@platform-management:menu-management.messages.success.show',\n '@platform-management:menu-management.messages.error.show',\n );\n }\n\n /**\n * Hide menu item\n */\n private async hideMenuItem(nodeData: AXPMenuTreeNodeData): Promise<void> {\n await this.executeMenuAction(\n () => this.menuManagementService.hideMenuItemByScope(this.currentScope(), nodeData.menuItem.name!),\n '@platform-management:menu-management.messages.success.hide',\n '@platform-management:menu-management.messages.error.hide',\n );\n }\n\n /**\n * Edit menu item\n */\n private async editMenuItem(nodeData: AXPMenuTreeNodeData): Promise<void> {\n await this.showMenuItemDialog(nodeData);\n }\n\n /**\n * Delete custom menu item\n */\n private async deleteMenuItem(nodeData: AXPMenuTreeNodeData): Promise<void> {\n const title = await this.translationService.translateAsync('@general:actions.delete.title');\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.delete.confirm.message',\n );\n const confirmed = await this.dialogService.confirm(title, message);\n\n if (!confirmed) return;\n\n try {\n const item = nodeData.menuItem;\n if (!item.name) return;\n\n await this.menuManagementService.deleteCustomMenuItemByScope(this.currentScope(), item.name);\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.success.delete',\n );\n this.toastService.success(message);\n await this.loadMenuItems();\n } catch (error) {\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.delete',\n );\n this.toastService.danger(message);\n }\n }\n\n //#endregion\n\n //#region ---- Dialog Helpers ----\n\n /**\n * Show menu item dialog (add/edit)\n */\n private async showMenuItemDialog(\n nodeData: AXPMenuTreeNodeData | null,\n parentName: string | null = null,\n ): Promise<void> {\n const item = nodeData?.menuItem;\n const isEdit = !!item;\n const title = isEdit\n ? '@platform-management:menu-management.components.edit-dialog.title'\n : '@platform-management:menu-management.components.add-dialog.title';\n\n const context = {\n name: item?.name || '',\n text: item?.text || '',\n type: item?.type || 'menu',\n icon: item?.icon || '',\n path: item?.path || '',\n priority: item?.priority || 0,\n description: item?.description || '',\n };\n\n const dialogRef: any = await this.layoutBuilder\n .create()\n .dialog((dialog: any) => {\n dialog\n .setTitle(title)\n .setContext(context)\n .content((flex: any) => {\n flex\n .setDirection('column')\n .formField('@platform-management:menu-management.fields.name', (field: any) => {\n field.path('name');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.name',\n validations: [{ rule: 'required' }],\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@platform-management:menu-management.fields.text', (field: any) => {\n field.path('text');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.text',\n validations: [{ rule: 'required' }],\n });\n })\n .formField('@platform-management:menu-management.fields.icon', (field: any) => {\n field.path('icon');\n field.customWidget('icon-chooser', {});\n })\n .formField('@platform-management:menu-management.fields.path', (field: any) => {\n field.path('path');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.path',\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@platform-management:menu-management.fields.priority', (field: any) => {\n field.path('priority');\n field.numberBox({\n placeholder: '@platform-management:menu-management.fields.priority',\n step: 10,\n });\n })\n .formField('@platform-management:menu-management.fields.description', (field: any) => {\n field.path('description');\n field.largeTextBox({\n placeholder: '@platform-management:menu-management.fields.description',\n rows: 3,\n });\n });\n })\n .setActions((actions: any) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n });\n })\n .show();\n\n const action = dialogRef.action();\n if (action === 'cancel') {\n dialogRef.close();\n return;\n }\n\n const formData = dialogRef.context() as Partial<AXPMenuItem>;\n\n try {\n if (isEdit && item?.name) {\n // Update existing item\n if (nodeData?.metadata?.isCustom) {\n await this.menuManagementService.updateCustomMenuItemByScope(\n this.currentScope(),\n item.name,\n formData as AXPMenuItem,\n );\n } else {\n await this.menuManagementService.updateMenuPropertiesByScope(this.currentScope(), item.name, formData);\n }\n } else {\n // Add new custom item\n const newItem: AXPMenuItem = {\n name: formData.name!,\n text: formData.text!,\n icon: formData.icon,\n path: formData.path,\n priority: formData.priority,\n description: formData.description,\n };\n\n // If parent is specified, add as child\n if (parentName) {\n // Add custom item as child of parent\n await this.menuManagementService.addCustomMenuItemByScope(this.currentScope(), newItem, parentName);\n } else {\n // Add as root level item\n await this.menuManagementService.addCustomMenuItemByScope(this.currentScope(), newItem, null);\n }\n }\n\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.success.save',\n );\n this.toastService.success(message);\n await this.loadMenuItems();\n dialogRef.close();\n } catch (error) {\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.save',\n );\n this.toastService.danger(message);\n }\n }\n\n /**\n * Execute a menu action with common error handling\n */\n private async executeMenuAction(\n action: () => Promise<void>,\n successMessageKey: string,\n errorMessageKey: string,\n ): Promise<void> {\n try {\n await action();\n const message = await this.translationService.translateAsync(successMessageKey);\n this.toastService.success(message);\n await this.loadMenuItems();\n } catch (error) {\n console.error('Menu action failed:', error);\n const message = await this.translationService.translateAsync(errorMessageKey);\n this.toastService.danger(message);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<axp-page-layout>\n <axp-page-content>\n @if (isLoading()) {\n <!-- Loading State -->\n <axp-state-message\n mode=\"loading\"\n icon=\"fa-light fa-spinner-third fa-spin\"\n [title]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.title' | translate | async)!\n \"\n [description]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.description'\n | translate\n | async)!\n \"\n />\n } @else if (error()) {\n <!-- Error State -->\n <axp-state-message\n mode=\"error\"\n icon=\"fa-light fa-circle-exclamation\"\n [title]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.error.title' | translate | async)!\n \"\n [description]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.error.description'\n | translate\n | async)!\n \"\n >\n <ax-button\n slot=\"actions\"\n [text]=\"'@general:actions.retry.title' | translate | async\"\n [look]=\"'outline'\"\n [color]=\"'primary'\"\n (onClick)=\"loadMenuItems()\"\n >\n <i class=\"fa-light fa-rotate-left\"></i>\n </ax-button>\n </axp-state-message>\n } @else if (treeNodes().length === 0) {\n <!-- Empty State -->\n <axp-state-message\n mode=\"empty\"\n icon=\"fa-light fa-bars\"\n [title]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.title' | translate | async)!\n \"\n [description]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.description'\n | translate\n | async)!\n \"\n >\n <ax-button\n slot=\"actions\"\n [text]=\"'@platform-management:menu-management.actions.add-root.title' | translate | async\"\n [look]=\"'solid'\"\n [color]=\"'primary'\"\n (onClick)=\"addRootMenuItem()\"\n >\n <i class=\"fa-light fa-plus\"></i>\n </ax-button>\n </axp-state-message>\n } @else {\n <!-- Menu Tree Content -->\n <div class=\"axm-menu-list__container\">\n <!-- Menu Tree -->\n <div class=\"axm-menu-list__tree\">\n <ax-tree-view\n [(datasource)]=\"treeNodes\"\n [look]=\"'default'\"\n [nodeTemplate]=\"itemTemplate\"\n [selectMode]=\"'none'\"\n [showIcons]=\"false\"\n [showChildrenBadge]=\"false\"\n [dragBehavior]=\"'move'\"\n [dragArea]=\"'handler'\"\n (onBeforeDrop)=\"handleBeforeDrop($event)\"\n (onItemsChange)=\"handleAfterDrop($event)\"\n ></ax-tree-view>\n </div>\n </div>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Custom Item Template -->\n<ng-template #itemTemplate let-node=\"node\" let-level=\"level\">\n @let nodeData = node['data'];\n @let item = nodeData.menuItem;\n @let metadata = nodeData.metadata;\n <div\n class=\"axm-menu-tree-item__wrapper\"\n [class.axm-menu-tree-item__wrapper--hidden]=\"metadata.isHidden\"\n [class.axm-menu-tree-item__wrapper--custom]=\"metadata.isCustom\"\n [class.axm-menu-tree-item__wrapper--group]=\"item.type === 'group'\"\n >\n <!-- Icon (hidden for groups) -->\n @if (item.icon && item.type !== 'group') {\n <i class=\"axm-menu-tree-item__icon\" [class]=\"item.icon\"></i>\n }\n\n <!-- Text or Info -->\n @if (item.type === 'group') {\n <!-- Group Heading -->\n <span class=\"axm-menu-tree-item__group\">\n <i class=\"fa-light fa-layer-group\"></i>\n {{ item.text | translate | async }}\n </span>\n } @else if (item.type === 'break') {\n <!-- Divider -->\n <span class=\"axm-menu-tree-item__divider\">\n <i class=\"fa-light fa-minus\"></i>\n {{ '@platform-management:menu-management.states.divider' | translate | async }}\n </span>\n } @else if (item.text) {\n <!-- Regular Menu Item -->\n <span class=\"axm-menu-tree-item__text\">\n {{ item.text | translate | async }}\n </span>\n } @else if (item.path) {\n <!-- Path-only Item -->\n <span class=\"axm-menu-tree-item__path\">\n <i class=\"fa-light fa-link\"></i>\n {{ item.path }}\n </span>\n }\n\n <!-- Menu Name/Key -->\n @if (item.name) {\n <code class=\"axm-menu-tree-item__name\">{{ item.name }}</code>\n }\n\n <!-- Status Badges -->\n @if (metadata.isHidden) {\n <ax-badge\n [text]=\"('@platform-management:menu-management.states.hidden' | translate | async)!\"\n color=\"danger\"\n ></ax-badge>\n } @else if (metadata.isCustom) {\n <ax-badge\n [text]=\"('@platform-management:menu-management.states.custom' | translate | async)!\"\n color=\"success\"\n ></ax-badge>\n } @else if (metadata.isBuiltIn) {\n <ax-badge\n [text]=\"('@platform-management:menu-management.states.built-in' | translate | async)!\"\n color=\"primary\"\n ></ax-badge>\n }\n\n <!-- Actions Dropdown -->\n <ax-button class=\"axm-menu-tree-item__actions ax-sm\" [look]=\"'blank'\" [iconOnly]=\"true\">\n <ax-prefix>\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </ax-prefix>\n\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n <!-- Edit (only for items with names) -->\n @if (item.name) {\n <ax-button-item\n [text]=\"('@general:actions.edit.title' | translate | async)!\"\n (onClick)=\"onAction('edit', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-edit\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Show/Hide (only for items with names) -->\n @if (item.name && metadata.isBuiltIn) {\n @if (metadata.isHidden) {\n <ax-button-item\n [text]=\"('@platform-management:menu-management.actions.show.title' | translate | async)!\"\n (onClick)=\"onAction('show', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-eye\"></i>\n </ax-prefix>\n </ax-button-item>\n } @else {\n <ax-button-item\n [text]=\"('@platform-management:menu-management.actions.hide.title' | translate | async)!\"\n (onClick)=\"onAction('hide', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-eye-slash\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n }\n\n @if (!item.path && (item.type === 'menu' || !item.type)) {\n <!-- Add Child -->\n <ax-button-item\n [text]=\"('@platform-management:menu-management.actions.add-child.title' | translate | async)!\"\n (onClick)=\"onAction('add-child', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Delete (only for custom items with names) -->\n @if (item.name && metadata.isCustom) {\n <ax-divider></ax-divider>\n <ax-button-item\n [color]=\"'danger'\"\n [text]=\"('@general:actions.delete.title' | translate | async)!\"\n (onClick)=\"onAction('delete', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-trash\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Info message for items without names -->\n @if (!item.name) {\n <ax-divider></ax-divider>\n <div class=\"p-2 text-xs text-neutral-500 italic\">\n {{ '@platform-management:menu-management.messages.info.no-name' | translate | async }}\n </div>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n</ng-template>\n"],"names":["i5","i6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-platform-management-client-menu-list.component-iMEnFPEY.mjs","sources":["../../../../libs/modules/platform-management/client/src/lib/features/menu-management/pages/menu-list/menu-list.component.ts","../../../../libs/modules/platform-management/client/src/lib/features/menu-management/pages/menu-list/menu-list.component.html"],"sourcesContent":["\nimport { AXPActionMenuItem, AXPExecuteCommand, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTreeViewBeforeDropEvent, AXTreeViewComponent, AXTreeViewDropEvent, AXTreeViewNode } from '@acorex/components/tree-view';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPMenuItem } from '@acorex-platform/framework-client/common';\n\nimport { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n OnDestroy,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPMenuItemAction } from '../../menu-customization.types';\nimport { AXPMenuManagementService, AXPMenuTreeNodeData } from '../../menu-management.service';\n\n//#region ---- Menu List Component ----\n\n@Component({\n selector: 'axm-menu-list',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXTreeViewComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPStateMessageComponent,\n AXBadgeModule,\n ],\n templateUrl: './menu-list.component.html',\n styleUrls: ['./menu-list.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMMenuListComponent,\n },\n ],\n host: { class: 'axm-menu-list-page' },\n})\nexport class AXMMenuListComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {\n //#region ---- Dependencies ----\n\n private menuManagementService = inject(AXPMenuManagementService);\n private layoutBuilder = inject(AXPLayoutBuilderService);\n protected dialogService = inject(AXDialogService);\n protected override toastService = inject(AXToastService);\n private translationService = inject(AXTranslationService);\n private route = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ---- Component State ----\n\n protected tree = viewChild(AXTreeViewComponent);\n protected treeNodes = signal<AXTreeViewNode[]>([]);\n protected isLoading = signal<boolean>(false);\n protected error = signal<string>('');\n protected currentScope = signal<AXPPlatformScope>(AXPPlatformScope.User);\n private isSyncing = false; // Prevent concurrent sync operations\n private destroy$ = new Subject<void>(); // For subscription cleanup\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n // Get scope from route (with memory leak prevention)\n this.route.params.pipe(takeUntil(this.destroy$)).subscribe(async (params) => {\n const scope = params['scope'] as AXPPlatformScope;\n if (scope) {\n this.currentScope.set(scope);\n await this.loadMenuItems();\n this.recompute(); // Update page header after loading\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle before drop validation\n */\n async handleBeforeDrop(e: AXTreeViewBeforeDropEvent): Promise<void> {\n console.log('[handleBeforeDrop] Event triggered!', {\n movedNode: e.movedNode?.['id'],\n previousParent: e.previousParent?.['id'],\n currentParent: e.currentParent?.['id'],\n previousIndex: e.previousIndex,\n currentIndex: e.currentIndex,\n });\n\n const targetParent = (e.currentParent?.['data'] as AXPMenuTreeNodeData) || null;\n\n // Prevent dropping into items with paths (leaf nodes)\n if (targetParent?.menuItem?.path) {\n e.canceled = true;\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.move',\n );\n this.toastService.warning(message);\n return;\n }\n\n // Note: Circular reference validation is handled by the tree component itself\n // Additional validation can be added here if needed based on business rules\n }\n\n /**\n * Handle after drop event to sync changes\n * The event contains information about the moved node and its new position\n */\n async handleAfterDrop(event: AXTreeViewDropEvent): Promise<void> {\n console.log('[handleAfterDrop] Event triggered!', {\n movedNode: event.node?.['id'],\n movedNodeData: event.node?.['data'],\n previousParent: event.previousParent?.['id'],\n currentParent: event.currentParent?.['id'],\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n });\n\n // Check what the tree component has\n const treeComp = this.tree();\n if (treeComp) {\n console.log('[handleAfterDrop] Tree component datasource:', treeComp.datasource);\n }\n\n // Check our signal\n console.log('[handleAfterDrop] Our treeNodes signal:', this.treeNodes());\n\n await this.syncTreeChanges();\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n /**\n * Load menu tree for current scope\n */\n protected async loadMenuItems(): Promise<void> {\n try {\n this.isLoading.set(true);\n this.error.set('');\n\n const treeNodes = await this.menuManagementService.getMenuTreeByScope(this.currentScope());\n this.treeNodes.set(treeNodes);\n this.recompute();\n } catch (error) {\n this.error.set(error instanceof Error ? error.message : 'Failed to load menu items');\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.load',\n );\n this.toastService.danger(message);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /**\n * Sync tree changes to backend\n */\n private async syncTreeChanges(): Promise<void> {\n // Prevent concurrent sync operations\n if (this.isSyncing) {\n return;\n }\n\n try {\n this.isSyncing = true;\n const scope = this.currentScope();\n\n // Get nodes from signal - the tree component mutates the array in place\n // so this.treeNodes() will have the updated structure after drag-drop\n const nodes = this.treeNodes();\n\n console.log('[syncTreeChanges] nodes count:', nodes?.length);\n \n // Log detailed node structure\n const logNode = (n: any, level: number = 0): any => ({\n id: n['id'],\n title: n['title'],\n level,\n childrenCount: (n['children'] as any[])?.length ?? 0,\n children: (n['children'] as any[])?.map((c: any) => logNode(c, level + 1)) ?? [],\n });\n console.log('[syncTreeChanges] Full tree structure:', JSON.stringify(nodes?.map(n => logNode(n)), null, 2));\n\n if (!nodes || nodes.length === 0) {\n console.log('[syncTreeChanges] No nodes to sync');\n return;\n }\n\n await this.menuManagementService.syncTreeChangesByScope(scope, nodes);\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.success.reorder',\n );\n this.toastService.success(message);\n } catch (error) {\n console.error('Failed to sync tree changes:', error);\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.sync',\n );\n this.toastService.danger(message);\n } finally {\n this.isSyncing = false;\n }\n }\n\n //#endregion\n\n //#region ---- Page Layout Interface ----\n\n /**\n * Get page title\n */\n override async getPageTitle(): Promise<string> {\n const scopeName = this.currentScope();\n const scopeKey = scopeName === AXPPlatformScope.User ? 'user' : 'tenant';\n return this.translationService.translateAsync(`@platform-management:menu-management.menus.${scopeKey}.title`);\n }\n\n /**\n * Get page description\n */\n override async getPageDescription(): Promise<string> {\n return this.translationService.translateAsync(\n '@platform-management:menu-management.components.menu-list.description',\n );\n }\n\n /**\n * Get primary menu items (actions)\n */\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n title: await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.add-root.title',\n ),\n icon: 'fa-light fa-plus',\n color: 'primary',\n command: { name: 'add-root' },\n },\n ];\n }\n\n /**\n * Get secondary menu items\n */\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n title: await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.collapse.title',\n ),\n icon: 'fa-light fa-minus-square',\n command: { name: 'collapse' },\n },\n\n {\n title: await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.expand.title',\n ),\n icon: 'fa-light fa-plus-square',\n command: { name: 'expand' },\n break: true,\n },\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.title'),\n icon: 'fa-light fa-rotate-left',\n color: 'danger',\n command: { name: 'reset' },\n },\n ];\n }\n\n /**\n * Execute commands from page actions\n */\n override async execute(command: AXPExecuteCommand): Promise<void> {\n switch (command.name) {\n case 'add-root':\n await this.addRootMenuItem();\n break;\n case 'collapse':\n this.tree()?.collapseAll();\n break;\n case 'expand':\n this.tree()?.expandAll();\n break;\n case 'reset':\n await this.resetCustomizations();\n break;\n }\n }\n\n //#endregion\n\n //#region ---- Action Handlers ----\n\n /**\n * Handle menu item action\n */\n protected async onAction(action: AXPMenuItemAction, nodeData: AXPMenuTreeNodeData): Promise<void> {\n switch (action) {\n case 'show':\n await this.showMenuItem(nodeData);\n break;\n case 'hide':\n await this.hideMenuItem(nodeData);\n break;\n case 'edit':\n await this.editMenuItem(nodeData);\n break;\n case 'delete':\n await this.deleteMenuItem(nodeData);\n break;\n case 'add-child':\n await this.addChildMenuItem(nodeData);\n break;\n }\n }\n\n /**\n * Add new root menu item\n */\n protected async addRootMenuItem(): Promise<void> {\n await this.showMenuItemDialog(null, null);\n }\n\n /**\n * Add new child menu item\n */\n protected async addChildMenuItem(parentNodeData: AXPMenuTreeNodeData): Promise<void> {\n await this.showMenuItemDialog(null, parentNodeData.menuItem.name);\n }\n\n /**\n * Reset customizations\n */\n protected async resetCustomizations(): Promise<void> {\n const title = await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.reset.confirm.title',\n );\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.reset.confirm.message',\n );\n const confirmed = await this.dialogService.confirm(title, message);\n\n if (!confirmed) return;\n\n try {\n // Reset customizations for current scope\n await this.menuManagementService.resetCustomizationsByScope(this.currentScope());\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.success.reset',\n );\n this.toastService.success(message);\n } catch (error) {\n console.error('Failed to reset customizations:', error);\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.reset',\n );\n this.toastService.danger(message);\n } finally {\n // Reload anyway to show current state\n await this.loadMenuItems();\n }\n }\n\n //#endregion\n\n //#region ---- Menu Item Actions ----\n\n /**\n * Show menu item\n */\n private async showMenuItem(nodeData: AXPMenuTreeNodeData): Promise<void> {\n await this.executeMenuAction(\n () => this.menuManagementService.showMenuItemByScope(this.currentScope(), nodeData.menuItem.name!),\n '@platform-management:menu-management.messages.success.show',\n '@platform-management:menu-management.messages.error.show',\n );\n }\n\n /**\n * Hide menu item\n */\n private async hideMenuItem(nodeData: AXPMenuTreeNodeData): Promise<void> {\n await this.executeMenuAction(\n () => this.menuManagementService.hideMenuItemByScope(this.currentScope(), nodeData.menuItem.name!),\n '@platform-management:menu-management.messages.success.hide',\n '@platform-management:menu-management.messages.error.hide',\n );\n }\n\n /**\n * Edit menu item\n */\n private async editMenuItem(nodeData: AXPMenuTreeNodeData): Promise<void> {\n await this.showMenuItemDialog(nodeData);\n }\n\n /**\n * Delete custom menu item\n */\n private async deleteMenuItem(nodeData: AXPMenuTreeNodeData): Promise<void> {\n const title = await this.translationService.translateAsync('@general:actions.delete.title');\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.actions.delete.confirm.message',\n );\n const confirmed = await this.dialogService.confirm(title, message);\n\n if (!confirmed) return;\n\n try {\n const item = nodeData.menuItem;\n if (!item.name) return;\n\n await this.menuManagementService.deleteCustomMenuItemByScope(this.currentScope(), item.name);\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.success.delete',\n );\n this.toastService.success(message);\n await this.loadMenuItems();\n } catch (error) {\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.delete',\n );\n this.toastService.danger(message);\n }\n }\n\n //#endregion\n\n //#region ---- Dialog Helpers ----\n\n /**\n * Show menu item dialog (add/edit)\n */\n private async showMenuItemDialog(\n nodeData: AXPMenuTreeNodeData | null,\n parentName: string | null = null,\n ): Promise<void> {\n const item = nodeData?.menuItem;\n const isEdit = !!item;\n const title = isEdit\n ? '@platform-management:menu-management.components.edit-dialog.title'\n : '@platform-management:menu-management.components.add-dialog.title';\n\n const context = {\n name: item?.name || '',\n text: item?.text || '',\n type: item?.type || 'menu',\n icon: item?.icon || '',\n path: item?.path || '',\n priority: item?.priority || 0,\n description: item?.description || '',\n };\n\n const dialogRef: any = await this.layoutBuilder\n .create()\n .dialog((dialog: any) => {\n dialog\n .setTitle(title)\n .setContext(context)\n .content((flex: any) => {\n flex\n .setDirection('column')\n .formField('@platform-management:menu-management.fields.name', (field: any) => {\n field.path('name');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.name',\n validations: [{ rule: 'required' }],\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@platform-management:menu-management.fields.text', (field: any) => {\n field.path('text');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.text',\n validations: [{ rule: 'required' }],\n });\n })\n .formField('@platform-management:menu-management.fields.icon', (field: any) => {\n field.path('icon');\n field.customWidget('icon-chooser', {});\n })\n .formField('@platform-management:menu-management.fields.path', (field: any) => {\n field.path('path');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.path',\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@platform-management:menu-management.fields.priority', (field: any) => {\n field.path('priority');\n field.numberBox({\n placeholder: '@platform-management:menu-management.fields.priority',\n step: 10,\n });\n })\n .formField('@platform-management:menu-management.fields.description', (field: any) => {\n field.path('description');\n field.largeTextBox({\n placeholder: '@platform-management:menu-management.fields.description',\n rows: 3,\n });\n });\n })\n .setActions((actions: any) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n });\n })\n .show();\n\n const action = dialogRef.action();\n if (action === 'cancel') {\n dialogRef.close();\n return;\n }\n\n const formData = dialogRef.context() as Partial<AXPMenuItem>;\n\n try {\n if (isEdit && item?.name) {\n // Update existing item\n if (nodeData?.metadata?.isCustom) {\n await this.menuManagementService.updateCustomMenuItemByScope(\n this.currentScope(),\n item.name,\n formData as AXPMenuItem,\n );\n } else {\n await this.menuManagementService.updateMenuPropertiesByScope(this.currentScope(), item.name, formData);\n }\n } else {\n // Add new custom item\n const newItem: AXPMenuItem = {\n name: formData.name!,\n text: formData.text!,\n icon: formData.icon,\n path: formData.path,\n priority: formData.priority,\n description: formData.description,\n };\n\n // If parent is specified, add as child\n if (parentName) {\n // Add custom item as child of parent\n await this.menuManagementService.addCustomMenuItemByScope(this.currentScope(), newItem, parentName);\n } else {\n // Add as root level item\n await this.menuManagementService.addCustomMenuItemByScope(this.currentScope(), newItem, null);\n }\n }\n\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.success.save',\n );\n this.toastService.success(message);\n await this.loadMenuItems();\n dialogRef.close();\n } catch (error) {\n const message = await this.translationService.translateAsync(\n '@platform-management:menu-management.messages.error.save',\n );\n this.toastService.danger(message);\n }\n }\n\n /**\n * Execute a menu action with common error handling\n */\n private async executeMenuAction(\n action: () => Promise<void>,\n successMessageKey: string,\n errorMessageKey: string,\n ): Promise<void> {\n try {\n await action();\n const message = await this.translationService.translateAsync(successMessageKey);\n this.toastService.success(message);\n await this.loadMenuItems();\n } catch (error) {\n console.error('Menu action failed:', error);\n const message = await this.translationService.translateAsync(errorMessageKey);\n this.toastService.danger(message);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<axp-page-layout>\n <axp-page-content>\n @if (isLoading()) {\n <!-- Loading State -->\n <axp-state-message\n mode=\"loading\"\n icon=\"fa-light fa-spinner-third fa-spin\"\n [title]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.title' | translate | async)!\n \"\n [description]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.loading.description'\n | translate\n | async)!\n \"\n />\n } @else if (error()) {\n <!-- Error State -->\n <axp-state-message\n mode=\"error\"\n icon=\"fa-light fa-circle-exclamation\"\n [title]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.error.title' | translate | async)!\n \"\n [description]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.error.description'\n | translate\n | async)!\n \"\n >\n <ax-button\n slot=\"actions\"\n [text]=\"'@general:actions.retry.title' | translate | async\"\n [look]=\"'outline'\"\n [color]=\"'primary'\"\n (onClick)=\"loadMenuItems()\"\n >\n <i class=\"fa-light fa-rotate-left\"></i>\n </ax-button>\n </axp-state-message>\n } @else if (treeNodes().length === 0) {\n <!-- Empty State -->\n <axp-state-message\n mode=\"empty\"\n icon=\"fa-light fa-bars\"\n [title]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.title' | translate | async)!\n \"\n [description]=\"\n ('@platform-management:menu-management.components.menu-list.empty-states.no-data.description'\n | translate\n | async)!\n \"\n >\n <ax-button\n slot=\"actions\"\n [text]=\"'@platform-management:menu-management.actions.add-root.title' | translate | async\"\n [look]=\"'solid'\"\n [color]=\"'primary'\"\n (onClick)=\"addRootMenuItem()\"\n >\n <i class=\"fa-light fa-plus\"></i>\n </ax-button>\n </axp-state-message>\n } @else {\n <!-- Menu Tree Content -->\n <div class=\"axm-menu-list__container\">\n <!-- Menu Tree -->\n <div class=\"axm-menu-list__tree\">\n <ax-tree-view\n [(datasource)]=\"treeNodes\"\n [look]=\"'default'\"\n [nodeTemplate]=\"itemTemplate\"\n [selectMode]=\"'none'\"\n [showIcons]=\"false\"\n [showChildrenBadge]=\"false\"\n [dragBehavior]=\"'move'\"\n [dragArea]=\"'handler'\"\n (onBeforeDrop)=\"handleBeforeDrop($event)\"\n (onItemsChange)=\"handleAfterDrop($event)\"\n ></ax-tree-view>\n </div>\n </div>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Custom Item Template -->\n<ng-template #itemTemplate let-node=\"node\" let-level=\"level\">\n @let nodeData = node['data'];\n @let item = nodeData.menuItem;\n @let metadata = nodeData.metadata;\n <div\n class=\"axm-menu-tree-item__wrapper\"\n [class.axm-menu-tree-item__wrapper--hidden]=\"metadata.isHidden\"\n [class.axm-menu-tree-item__wrapper--custom]=\"metadata.isCustom\"\n [class.axm-menu-tree-item__wrapper--group]=\"item.type === 'group'\"\n >\n <!-- Icon (hidden for groups) -->\n @if (item.icon && item.type !== 'group') {\n <i class=\"axm-menu-tree-item__icon\" [class]=\"item.icon\"></i>\n }\n\n <!-- Text or Info -->\n @if (item.type === 'group') {\n <!-- Group Heading -->\n <span class=\"axm-menu-tree-item__group\">\n <i class=\"fa-light fa-layer-group\"></i>\n {{ item.text | translate | async }}\n </span>\n } @else if (item.type === 'break') {\n <!-- Divider -->\n <span class=\"axm-menu-tree-item__divider\">\n <i class=\"fa-light fa-minus\"></i>\n {{ '@platform-management:menu-management.states.divider' | translate | async }}\n </span>\n } @else if (item.text) {\n <!-- Regular Menu Item -->\n <span class=\"axm-menu-tree-item__text\">\n {{ item.text | translate | async }}\n </span>\n } @else if (item.path) {\n <!-- Path-only Item -->\n <span class=\"axm-menu-tree-item__path\">\n <i class=\"fa-light fa-link\"></i>\n {{ item.path }}\n </span>\n }\n\n <!-- Menu Name/Key -->\n @if (item.name) {\n <code class=\"axm-menu-tree-item__name\">{{ item.name }}</code>\n }\n\n <!-- Status Badges -->\n @if (metadata.isHidden) {\n <ax-badge\n [text]=\"('@platform-management:menu-management.states.hidden' | translate | async)!\"\n color=\"danger\"\n ></ax-badge>\n } @else if (metadata.isCustom) {\n <ax-badge\n [text]=\"('@platform-management:menu-management.states.custom' | translate | async)!\"\n color=\"success\"\n ></ax-badge>\n } @else if (metadata.isBuiltIn) {\n <ax-badge\n [text]=\"('@platform-management:menu-management.states.built-in' | translate | async)!\"\n color=\"primary\"\n ></ax-badge>\n }\n\n <!-- Actions Dropdown -->\n <ax-button class=\"axm-menu-tree-item__actions ax-sm\" [look]=\"'blank'\" [iconOnly]=\"true\">\n <ax-prefix>\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </ax-prefix>\n\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n <!-- Edit (only for items with names) -->\n @if (item.name) {\n <ax-button-item\n [text]=\"('@general:actions.edit.title' | translate | async)!\"\n (onClick)=\"onAction('edit', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-edit\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Show/Hide (only for items with names) -->\n @if (item.name && metadata.isBuiltIn) {\n @if (metadata.isHidden) {\n <ax-button-item\n [text]=\"('@platform-management:menu-management.actions.show.title' | translate | async)!\"\n (onClick)=\"onAction('show', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-eye\"></i>\n </ax-prefix>\n </ax-button-item>\n } @else {\n <ax-button-item\n [text]=\"('@platform-management:menu-management.actions.hide.title' | translate | async)!\"\n (onClick)=\"onAction('hide', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-eye-slash\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n }\n\n @if (!item.path && (item.type === 'menu' || !item.type)) {\n <!-- Add Child -->\n <ax-button-item\n [text]=\"('@platform-management:menu-management.actions.add-child.title' | translate | async)!\"\n (onClick)=\"onAction('add-child', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Delete (only for custom items with names) -->\n @if (item.name && metadata.isCustom) {\n <ax-divider></ax-divider>\n <ax-button-item\n [color]=\"'danger'\"\n [text]=\"('@general:actions.delete.title' | translate | async)!\"\n (onClick)=\"onAction('delete', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-trash\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Info message for items without names -->\n @if (!item.name) {\n <ax-divider></ax-divider>\n <div class=\"p-2 text-xs text-neutral-500 italic\">\n {{ '@platform-management:menu-management.messages.info.no-name' | translate | async }}\n </div>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n</ng-template>\n"],"names":["i5","i6"],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
|
+
import { q as formatContractCapabilitiesSummary } from './acorex-platform-module-platform-management-client-create-user-query-contract.util-D_af2BUi.mjs';
|
|
5
|
+
|
|
6
|
+
//#region ----- Imports -----
|
|
7
|
+
//#endregion
|
|
8
|
+
//#region ----- Component -----
|
|
9
|
+
class AXMQueryContractWidgetColumnComponent extends AXPValueWidgetComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
//#region ----- Computed Properties -----
|
|
13
|
+
this.summary = computed(() => formatContractCapabilitiesSummary(this.getValue()), /* @ts-ignore */
|
|
14
|
+
...(ngDevMode ? [{ debugName: "summary" }] : /* istanbul ignore next */ []));
|
|
15
|
+
}
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMQueryContractWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMQueryContractWidgetColumnComponent, isStandalone: true, selector: "axm-query-contract-widget-column", usesInheritance: true, ngImport: i0, template: `
|
|
18
|
+
@if (summary()) {
|
|
19
|
+
<span class="text-xs font-medium" [title]="summary()">{{ summary() }}</span>
|
|
20
|
+
}
|
|
21
|
+
<!-- ----- Empty contract capabilities ----- -->
|
|
22
|
+
@else {
|
|
23
|
+
<span class="text-muted">---</span>
|
|
24
|
+
}
|
|
25
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMQueryContractWidgetColumnComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{
|
|
30
|
+
selector: 'axm-query-contract-widget-column',
|
|
31
|
+
template: `
|
|
32
|
+
@if (summary()) {
|
|
33
|
+
<span class="text-xs font-medium" [title]="summary()">{{ summary() }}</span>
|
|
34
|
+
}
|
|
35
|
+
<!-- ----- Empty contract capabilities ----- -->
|
|
36
|
+
@else {
|
|
37
|
+
<span class="text-muted">---</span>
|
|
38
|
+
}
|
|
39
|
+
`,
|
|
40
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
41
|
+
}]
|
|
42
|
+
}] });
|
|
43
|
+
|
|
44
|
+
export { AXMQueryContractWidgetColumnComponent };
|
|
45
|
+
//# sourceMappingURL=acorex-platform-module-platform-management-client-query-contract-widget-column.component-COfOzMGh.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-platform-management-client-query-contract-widget-column.component-COfOzMGh.mjs","sources":["../../../../libs/modules/platform-management/client/src/lib/features/query-contract-widget/query-contract-widget-column.component.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { formatContractCapabilitiesSummary } from '../query-definition/create-user-query-contract.util';\nimport type { AXPUserQueryContractCapabilities } from '../query-definition/create-user-query.types';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-query-contract-widget-column',\n template: `\n @if (summary()) {\n <span class=\"text-xs font-medium\" [title]=\"summary()\">{{ summary() }}</span>\n }\n <!-- ----- Empty contract capabilities ----- -->\n @else {\n <span class=\"text-muted\">---</span>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMQueryContractWidgetColumnComponent extends AXPValueWidgetComponent<AXPUserQueryContractCapabilities> {\n //#region ----- Computed Properties -----\n\n protected readonly summary = computed(() => formatContractCapabilitiesSummary(this.getValue()));\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;AAAA;AAQA;AAEA;AAeM,MAAO,qCAAsC,SAAQ,uBAAyD,CAAA;AAbpH,IAAA,WAAA,GAAA;;;AAgBqB,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,iCAAiC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oFAAC;AAGhG,IAAA;8GANY,qCAAqC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qCAAqC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXtC;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGU,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAbjD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,QAAQ,EAAE;;;;;;;;AAQT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
|
|
2
|
+
import { AXDataSource } from '@acorex/cdk/common';
|
|
3
|
+
import * as i2 from '@acorex/components/label';
|
|
4
|
+
import { AXLabelModule } from '@acorex/components/label';
|
|
5
|
+
import { AXLookupComponent } from '@acorex/components/lookup';
|
|
6
|
+
import * as i3 from '@acorex/components/switch';
|
|
7
|
+
import { AXSwitchModule } from '@acorex/components/switch';
|
|
8
|
+
import * as i5 from '@acorex/core/translation';
|
|
9
|
+
import { AXTranslationModule } from '@acorex/core/translation';
|
|
10
|
+
import * as i1$1 from '@angular/common';
|
|
11
|
+
import { CommonModule } from '@angular/common';
|
|
12
|
+
import * as i0 from '@angular/core';
|
|
13
|
+
import { signal, computed, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
14
|
+
import * as i1 from '@angular/forms';
|
|
15
|
+
import { FormsModule } from '@angular/forms';
|
|
16
|
+
import { isEqual } from 'lodash-es';
|
|
17
|
+
import { a as resolveAvailableContractFields, s as selectedFieldPathsFromGroups, i as pathsFromFilterSection, j as pathsFromSortSection, k as isCollectionQueryKind, l as reconcileContractCapabilities, t as toFilterSection, m as toSortSection, D as DEFAULT_USER_QUERY_PAGING, o as createDefaultContractCapabilities } from './acorex-platform-module-platform-management-client-create-user-query-contract.util-D_af2BUi.mjs';
|
|
18
|
+
import { C as CREATE_USER_QUERY_I18N } from './acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-YuJijjKh.mjs';
|
|
19
|
+
|
|
20
|
+
//#region ----- Imports -----
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region ----- Component -----
|
|
23
|
+
class AXMQueryContractWidgetEditComponent extends AXPValueWidgetComponent {
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region ----- Lifecycle -----
|
|
26
|
+
constructor() {
|
|
27
|
+
super();
|
|
28
|
+
//#region ----- Constants -----
|
|
29
|
+
this.fieldsI18n = CREATE_USER_QUERY_I18N.fields;
|
|
30
|
+
this.placeholdersI18n = CREATE_USER_QUERY_I18N.placeholders;
|
|
31
|
+
//#endregion
|
|
32
|
+
//#region ----- State Signals -----
|
|
33
|
+
this.lastAvailablePaths = signal([], /* @ts-ignore */
|
|
34
|
+
...(ngDevMode ? [{ debugName: "lastAvailablePaths" }] : /* istanbul ignore next */ []));
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region ----- Computed Properties -----
|
|
37
|
+
this.catalogFields = computed(() => {
|
|
38
|
+
const raw = this.options()['fields'];
|
|
39
|
+
return Array.isArray(raw) ? raw : [];
|
|
40
|
+
}, /* @ts-ignore */
|
|
41
|
+
...(ngDevMode ? [{ debugName: "catalogFields" }] : /* istanbul ignore next */ []));
|
|
42
|
+
this.availableFields = computed(() => {
|
|
43
|
+
this.contextService.data();
|
|
44
|
+
const fieldGroups = this.contextService.getValue('source.entity.fieldGroups');
|
|
45
|
+
return resolveAvailableContractFields(this.catalogFields(), selectedFieldPathsFromGroups(fieldGroups));
|
|
46
|
+
}, /* @ts-ignore */
|
|
47
|
+
...(ngDevMode ? [{ debugName: "availableFields" }] : /* istanbul ignore next */ []));
|
|
48
|
+
this.fieldDataSource = computed(() => this.createFieldDataSource(this.availableFields()), { ...(ngDevMode ? { debugName: "fieldDataSource" } : /* istanbul ignore next */ {}), equal: isEqual });
|
|
49
|
+
this.filterPaths = computed(() => pathsFromFilterSection(this.getValue()?.filter), /* @ts-ignore */
|
|
50
|
+
...(ngDevMode ? [{ debugName: "filterPaths" }] : /* istanbul ignore next */ []));
|
|
51
|
+
this.sortPaths = computed(() => pathsFromSortSection(this.getValue()?.sort), /* @ts-ignore */
|
|
52
|
+
...(ngDevMode ? [{ debugName: "sortPaths" }] : /* istanbul ignore next */ []));
|
|
53
|
+
this.pagingEnabled = computed(() => this.getValue()?.paging?.enabled === true, /* @ts-ignore */
|
|
54
|
+
...(ngDevMode ? [{ debugName: "pagingEnabled" }] : /* istanbul ignore next */ []));
|
|
55
|
+
this.valueField = computed(() => this.getValue()?.binding?.valueField ?? '', /* @ts-ignore */
|
|
56
|
+
...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
|
|
57
|
+
this.textField = computed(() => this.getValue()?.binding?.textField ?? '', /* @ts-ignore */
|
|
58
|
+
...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
|
|
59
|
+
this.isCollection = computed(() => {
|
|
60
|
+
this.contextService.data();
|
|
61
|
+
return isCollectionQueryKind(this.contextService.getValue('contract.kind'));
|
|
62
|
+
}, /* @ts-ignore */
|
|
63
|
+
...(ngDevMode ? [{ debugName: "isCollection" }] : /* istanbul ignore next */ []));
|
|
64
|
+
effect(() => {
|
|
65
|
+
const available = this.availableFields();
|
|
66
|
+
const paths = available.map((field) => field.path);
|
|
67
|
+
const boundPath = this.fullPath();
|
|
68
|
+
untracked(() => {
|
|
69
|
+
if (!boundPath) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const current = this.getValue() ?? undefined;
|
|
73
|
+
const previous = this.lastAvailablePaths();
|
|
74
|
+
const next = reconcileContractCapabilities(current, available, previous);
|
|
75
|
+
this.lastAvailablePaths.set(paths);
|
|
76
|
+
if (!current) {
|
|
77
|
+
this.setValue(next);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!isEqual(current, next)) {
|
|
81
|
+
this.setValue(next);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region ----- Event Handlers -----
|
|
88
|
+
onFilterPathsChange(paths) {
|
|
89
|
+
this.patchCapabilities({ filter: toFilterSection(this.fieldsByPaths(paths ?? [])) });
|
|
90
|
+
}
|
|
91
|
+
onSortPathsChange(paths) {
|
|
92
|
+
this.patchCapabilities({ sort: toSortSection(this.fieldsByPaths(paths ?? [])) });
|
|
93
|
+
}
|
|
94
|
+
onPagingChange(enabled) {
|
|
95
|
+
const current = this.currentCapabilities();
|
|
96
|
+
this.patchCapabilities({
|
|
97
|
+
paging: enabled
|
|
98
|
+
? {
|
|
99
|
+
enabled: true,
|
|
100
|
+
definition: {
|
|
101
|
+
...DEFAULT_USER_QUERY_PAGING.definition,
|
|
102
|
+
...(current.paging.enabled ? current.paging.definition : {}),
|
|
103
|
+
},
|
|
104
|
+
}
|
|
105
|
+
: { enabled: false },
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
onValueFieldChange(valueField) {
|
|
109
|
+
const current = this.currentCapabilities();
|
|
110
|
+
const next = String(valueField ?? '').trim() || current.binding.valueField;
|
|
111
|
+
this.patchCapabilities({
|
|
112
|
+
binding: { ...current.binding, valueField: next },
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
onTextFieldChange(textField) {
|
|
116
|
+
const current = this.currentCapabilities();
|
|
117
|
+
const next = String(textField ?? '').trim() || current.binding.textField;
|
|
118
|
+
this.patchCapabilities({
|
|
119
|
+
binding: { ...current.binding, textField: next },
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//#endregion
|
|
123
|
+
//#region ----- Private helpers -----
|
|
124
|
+
currentCapabilities() {
|
|
125
|
+
return this.getValue() ?? createDefaultContractCapabilities(this.availableFields());
|
|
126
|
+
}
|
|
127
|
+
patchCapabilities(patch) {
|
|
128
|
+
this.setValue({
|
|
129
|
+
...this.currentCapabilities(),
|
|
130
|
+
...patch,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
fieldsByPaths(paths) {
|
|
134
|
+
const byPath = new Map(this.availableFields().map((field) => [field.path, field]));
|
|
135
|
+
return paths
|
|
136
|
+
.map((path) => String(path ?? '').trim())
|
|
137
|
+
.filter((path) => path.length > 0)
|
|
138
|
+
.map((path) => byPath.get(path) ?? { path, text: path });
|
|
139
|
+
}
|
|
140
|
+
createFieldDataSource(fields) {
|
|
141
|
+
const items = fields.map((field) => ({
|
|
142
|
+
value: field.path,
|
|
143
|
+
text: field.text || field.path,
|
|
144
|
+
}));
|
|
145
|
+
return new AXDataSource({
|
|
146
|
+
load: () => Promise.resolve({ items, total: items.length }),
|
|
147
|
+
byKey: (key) => {
|
|
148
|
+
const value = String(key ?? '');
|
|
149
|
+
return items.find((row) => row.value === value) ?? { value, text: value };
|
|
150
|
+
},
|
|
151
|
+
pageSize: 1000,
|
|
152
|
+
key: 'value',
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMQueryContractWidgetEditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
156
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMQueryContractWidgetEditComponent, isStandalone: true, selector: "axm-query-contract-widget-edit", host: { classAttribute: "block w-full" }, usesInheritance: true, ngImport: i0, template: "<!-- ----- Filterable fields callers may send (all kinds) ----- -->\n<div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.filterableFields | translate | async }}\n </ax-label>\n <p class=\"axm-query-contract-widget__hint\">\n {{ placeholdersI18n.filterableFields | translate | async }}\n </p>\n <ax-lookup\n mode=\"multi-select\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"filterPaths()\"\n (ngModelChange)=\"onFilterPathsChange($event)\"\n [searchable]=\"true\"\n [placeholder]=\"(placeholdersI18n.filterableFields | translate | async) ?? ''\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n</div>\n\n@if (isCollection()) {\n <!-- ----- Collection sort, paging, and lookup binding ----- -->\n <div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.sortableFields | translate | async }}\n </ax-label>\n <p class=\"axm-query-contract-widget__hint\">\n {{ placeholdersI18n.sortableFields | translate | async }}\n </p>\n <ax-lookup\n mode=\"multi-select\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"sortPaths()\"\n (ngModelChange)=\"onSortPathsChange($event)\"\n [searchable]=\"true\"\n [placeholder]=\"(placeholdersI18n.sortableFields | translate | async) ?? ''\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n </div>\n\n <!-- ----- Paging skip/take contract ----- -->\n <div class=\"axm-query-contract-widget__section axm-query-contract-widget__section--row\">\n <div class=\"axm-query-contract-widget__paging-copy\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.paging | translate | async }}\n </ax-label>\n <p class=\"axm-query-contract-widget__hint\">\n {{ placeholdersI18n.paging | translate | async }}\n </p>\n </div>\n <ax-switch\n class=\"ax-sm\"\n [ngModel]=\"pagingEnabled()\"\n (ngModelChange)=\"onPagingChange($event)\"\n ></ax-switch>\n </div>\n\n <!-- ----- Lookup binding value and text fields ----- -->\n <div class=\"axm-query-contract-widget__binding\">\n <div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.valueField | translate | async }}\n </ax-label>\n <ax-lookup\n mode=\"drop-down-list\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"valueField()\"\n (ngModelChange)=\"onValueFieldChange($event)\"\n [searchable]=\"true\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n </div>\n <div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.textField | translate | async }}\n </ax-label>\n <ax-lookup\n mode=\"drop-down-list\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"textField()\"\n (ngModelChange)=\"onTextFieldChange($event)\"\n [searchable]=\"true\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n </div>\n </div>\n}\n", styles: ["@layer properties;.axm-query-contract-widget{display:flex;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * 4)}.axm-query-contract-widget__section{display:flex;width:100%;flex-direction:column;gap:var(--spacing, .25rem)}.axm-query-contract-widget__section--row{flex-direction:row;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 4)}.axm-query-contract-widget__paging-copy{display:flex;min-width:0px;flex-direction:column;gap:var(--spacing, .25rem)}.axm-query-contract-widget__title{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.axm-query-contract-widget__hint{margin:0;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:rgba(var(--ax-sys-color-text-default))}@supports (color: color-mix(in lab,red,red)){.axm-query-contract-widget__hint{color:color-mix(in oklab,rgba(var(--ax-sys-color-text-default)) 80%,transparent)}}.axm-query-contract-widget__binding{display:grid;width:100%;grid-template-columns:repeat(1,minmax(0,1fr));gap:calc(var(--spacing, .25rem) * 4)}@media(width>=48rem){.axm-query-contract-widget__binding{grid-template-columns:repeat(2,minmax(0,1fr))}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i2.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXSwitchModule }, { kind: "component", type: i3.AXSwitchComponent, selector: "ax-switch", inputs: ["disabled", "readonly", "color", "tabIndex", "value", "name", "isLoading"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged", "readonlyChange", "disabledChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
157
|
+
}
|
|
158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMQueryContractWidgetEditComponent, decorators: [{
|
|
159
|
+
type: Component,
|
|
160
|
+
args: [{ selector: 'axm-query-contract-widget-edit', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
161
|
+
class: 'block w-full',
|
|
162
|
+
}, imports: [CommonModule, FormsModule, AXLabelModule, AXLookupComponent, AXSwitchModule, AXTranslationModule], template: "<!-- ----- Filterable fields callers may send (all kinds) ----- -->\n<div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.filterableFields | translate | async }}\n </ax-label>\n <p class=\"axm-query-contract-widget__hint\">\n {{ placeholdersI18n.filterableFields | translate | async }}\n </p>\n <ax-lookup\n mode=\"multi-select\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"filterPaths()\"\n (ngModelChange)=\"onFilterPathsChange($event)\"\n [searchable]=\"true\"\n [placeholder]=\"(placeholdersI18n.filterableFields | translate | async) ?? ''\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n</div>\n\n@if (isCollection()) {\n <!-- ----- Collection sort, paging, and lookup binding ----- -->\n <div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.sortableFields | translate | async }}\n </ax-label>\n <p class=\"axm-query-contract-widget__hint\">\n {{ placeholdersI18n.sortableFields | translate | async }}\n </p>\n <ax-lookup\n mode=\"multi-select\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"sortPaths()\"\n (ngModelChange)=\"onSortPathsChange($event)\"\n [searchable]=\"true\"\n [placeholder]=\"(placeholdersI18n.sortableFields | translate | async) ?? ''\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n </div>\n\n <!-- ----- Paging skip/take contract ----- -->\n <div class=\"axm-query-contract-widget__section axm-query-contract-widget__section--row\">\n <div class=\"axm-query-contract-widget__paging-copy\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.paging | translate | async }}\n </ax-label>\n <p class=\"axm-query-contract-widget__hint\">\n {{ placeholdersI18n.paging | translate | async }}\n </p>\n </div>\n <ax-switch\n class=\"ax-sm\"\n [ngModel]=\"pagingEnabled()\"\n (ngModelChange)=\"onPagingChange($event)\"\n ></ax-switch>\n </div>\n\n <!-- ----- Lookup binding value and text fields ----- -->\n <div class=\"axm-query-contract-widget__binding\">\n <div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.valueField | translate | async }}\n </ax-label>\n <ax-lookup\n mode=\"drop-down-list\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"valueField()\"\n (ngModelChange)=\"onValueFieldChange($event)\"\n [searchable]=\"true\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n </div>\n <div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.textField | translate | async }}\n </ax-label>\n <ax-lookup\n mode=\"drop-down-list\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"textField()\"\n (ngModelChange)=\"onTextFieldChange($event)\"\n [searchable]=\"true\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n </div>\n </div>\n}\n", styles: ["@layer properties;.axm-query-contract-widget{display:flex;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * 4)}.axm-query-contract-widget__section{display:flex;width:100%;flex-direction:column;gap:var(--spacing, .25rem)}.axm-query-contract-widget__section--row{flex-direction:row;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 4)}.axm-query-contract-widget__paging-copy{display:flex;min-width:0px;flex-direction:column;gap:var(--spacing, .25rem)}.axm-query-contract-widget__title{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.axm-query-contract-widget__hint{margin:0;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:rgba(var(--ax-sys-color-text-default))}@supports (color: color-mix(in lab,red,red)){.axm-query-contract-widget__hint{color:color-mix(in oklab,rgba(var(--ax-sys-color-text-default)) 80%,transparent)}}.axm-query-contract-widget__binding{display:grid;width:100%;grid-template-columns:repeat(1,minmax(0,1fr));gap:calc(var(--spacing, .25rem) * 4)}@media(width>=48rem){.axm-query-contract-widget__binding{grid-template-columns:repeat(2,minmax(0,1fr))}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
163
|
+
}], ctorParameters: () => [] });
|
|
164
|
+
|
|
165
|
+
export { AXMQueryContractWidgetEditComponent };
|
|
166
|
+
//# sourceMappingURL=acorex-platform-module-platform-management-client-query-contract-widget-edit.component-BW2pBOeg.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-platform-management-client-query-contract-widget-edit.component-BW2pBOeg.mjs","sources":["../../../../libs/modules/platform-management/client/src/lib/features/query-contract-widget/query-contract-widget-edit.component.ts","../../../../libs/modules/platform-management/client/src/lib/features/query-contract-widget/query-contract-widget-edit.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLookupComponent } from '@acorex/components/lookup';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, signal, untracked } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { isEqual } from 'lodash-es';\n\nimport {\n createDefaultContractCapabilities,\n DEFAULT_USER_QUERY_PAGING,\n isCollectionQueryKind,\n pathsFromFilterSection,\n pathsFromSortSection,\n reconcileContractCapabilities,\n resolveAvailableContractFields,\n selectedFieldPathsFromGroups,\n toFilterSection,\n toSortSection,\n} from '../query-definition/create-user-query-contract.util';\nimport {\n CREATE_USER_QUERY_I18N as i18n,\n type AXPUserQueryContractCapabilities,\n type AXPUserQueryEntityFieldItem,\n} from '../query-definition/create-user-query.types';\n\n//#endregion\n\n//#region ----- Types -----\n\ninterface AXPQueryContractFieldOption {\n value: string;\n text: string;\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-query-contract-widget-edit',\n templateUrl: './query-contract-widget-edit.component.html',\n styleUrl: './query-contract-widget-edit.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block w-full',\n },\n imports: [CommonModule, FormsModule, AXLabelModule, AXLookupComponent, AXSwitchModule, AXTranslationModule],\n})\nexport class AXMQueryContractWidgetEditComponent extends AXPValueWidgetComponent<AXPUserQueryContractCapabilities> {\n //#region ----- Constants -----\n\n protected readonly fieldsI18n = i18n.fields;\n protected readonly placeholdersI18n = i18n.placeholders;\n\n //#endregion\n\n //#region ----- State Signals -----\n\n private readonly lastAvailablePaths = signal<string[]>([]);\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly catalogFields = computed<AXPUserQueryEntityFieldItem[]>(() => {\n const raw = this.options()['fields'];\n return Array.isArray(raw) ? (raw as AXPUserQueryEntityFieldItem[]) : [];\n });\n\n protected readonly availableFields = computed<AXPUserQueryEntityFieldItem[]>(() => {\n this.contextService.data();\n const fieldGroups = this.contextService.getValue('source.entity.fieldGroups') as\n | Record<string, string[]>\n | undefined;\n return resolveAvailableContractFields(this.catalogFields(), selectedFieldPathsFromGroups(fieldGroups));\n });\n\n protected readonly fieldDataSource = computed(\n () => this.createFieldDataSource(this.availableFields()),\n { equal: isEqual },\n );\n\n protected readonly filterPaths = computed(() => pathsFromFilterSection(this.getValue()?.filter));\n protected readonly sortPaths = computed(() => pathsFromSortSection(this.getValue()?.sort));\n protected readonly pagingEnabled = computed(() => this.getValue()?.paging?.enabled === true);\n protected readonly valueField = computed(() => this.getValue()?.binding?.valueField ?? '');\n protected readonly textField = computed(() => this.getValue()?.binding?.textField ?? '');\n protected readonly isCollection = computed(() => {\n this.contextService.data();\n return isCollectionQueryKind(this.contextService.getValue('contract.kind'));\n });\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const available = this.availableFields();\n const paths = available.map((field) => field.path);\n const boundPath = this.fullPath();\n untracked(() => {\n if (!boundPath) {\n return;\n }\n const current = this.getValue() ?? undefined;\n const previous = this.lastAvailablePaths();\n const next = reconcileContractCapabilities(current, available, previous);\n this.lastAvailablePaths.set(paths);\n if (!current) {\n this.setValue(next);\n return;\n }\n if (!isEqual(current, next)) {\n this.setValue(next);\n }\n });\n });\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onFilterPathsChange(paths: string[] | null | undefined): void {\n this.patchCapabilities({ filter: toFilterSection(this.fieldsByPaths(paths ?? [])) });\n }\n\n protected onSortPathsChange(paths: string[] | null | undefined): void {\n this.patchCapabilities({ sort: toSortSection(this.fieldsByPaths(paths ?? [])) });\n }\n\n protected onPagingChange(enabled: boolean): void {\n const current = this.currentCapabilities();\n this.patchCapabilities({\n paging: enabled\n ? {\n enabled: true,\n definition: {\n ...DEFAULT_USER_QUERY_PAGING.definition,\n ...(current.paging.enabled ? current.paging.definition : {}),\n },\n }\n : { enabled: false },\n });\n }\n\n protected onValueFieldChange(valueField: string | null | undefined): void {\n const current = this.currentCapabilities();\n const next = String(valueField ?? '').trim() || current.binding.valueField;\n this.patchCapabilities({\n binding: { ...current.binding, valueField: next },\n });\n }\n\n protected onTextFieldChange(textField: string | null | undefined): void {\n const current = this.currentCapabilities();\n const next = String(textField ?? '').trim() || current.binding.textField;\n this.patchCapabilities({\n binding: { ...current.binding, textField: next },\n });\n }\n\n //#endregion\n\n //#region ----- Private helpers -----\n\n private currentCapabilities(): AXPUserQueryContractCapabilities {\n return this.getValue() ?? createDefaultContractCapabilities(this.availableFields());\n }\n\n private patchCapabilities(patch: Partial<AXPUserQueryContractCapabilities>): void {\n this.setValue({\n ...this.currentCapabilities(),\n ...patch,\n });\n }\n\n private fieldsByPaths(paths: string[]): AXPUserQueryEntityFieldItem[] {\n const byPath = new Map(this.availableFields().map((field) => [field.path, field]));\n return paths\n .map((path) => String(path ?? '').trim())\n .filter((path) => path.length > 0)\n .map((path) => byPath.get(path) ?? { path, text: path });\n }\n\n private createFieldDataSource(fields: AXPUserQueryEntityFieldItem[]): AXDataSource<AXPQueryContractFieldOption> {\n const items: AXPQueryContractFieldOption[] = fields.map((field) => ({\n value: field.path,\n text: field.text || field.path,\n }));\n\n return new AXDataSource<AXPQueryContractFieldOption>({\n load: () => Promise.resolve({ items, total: items.length }),\n byKey: (key: unknown) => {\n const value = String(key ?? '');\n return items.find((row) => row.value === value) ?? { value, text: value };\n },\n pageSize: 1000,\n key: 'value',\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","<!-- ----- Filterable fields callers may send (all kinds) ----- -->\n<div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.filterableFields | translate | async }}\n </ax-label>\n <p class=\"axm-query-contract-widget__hint\">\n {{ placeholdersI18n.filterableFields | translate | async }}\n </p>\n <ax-lookup\n mode=\"multi-select\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"filterPaths()\"\n (ngModelChange)=\"onFilterPathsChange($event)\"\n [searchable]=\"true\"\n [placeholder]=\"(placeholdersI18n.filterableFields | translate | async) ?? ''\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n</div>\n\n@if (isCollection()) {\n <!-- ----- Collection sort, paging, and lookup binding ----- -->\n <div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.sortableFields | translate | async }}\n </ax-label>\n <p class=\"axm-query-contract-widget__hint\">\n {{ placeholdersI18n.sortableFields | translate | async }}\n </p>\n <ax-lookup\n mode=\"multi-select\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"sortPaths()\"\n (ngModelChange)=\"onSortPathsChange($event)\"\n [searchable]=\"true\"\n [placeholder]=\"(placeholdersI18n.sortableFields | translate | async) ?? ''\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n </div>\n\n <!-- ----- Paging skip/take contract ----- -->\n <div class=\"axm-query-contract-widget__section axm-query-contract-widget__section--row\">\n <div class=\"axm-query-contract-widget__paging-copy\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.paging | translate | async }}\n </ax-label>\n <p class=\"axm-query-contract-widget__hint\">\n {{ placeholdersI18n.paging | translate | async }}\n </p>\n </div>\n <ax-switch\n class=\"ax-sm\"\n [ngModel]=\"pagingEnabled()\"\n (ngModelChange)=\"onPagingChange($event)\"\n ></ax-switch>\n </div>\n\n <!-- ----- Lookup binding value and text fields ----- -->\n <div class=\"axm-query-contract-widget__binding\">\n <div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.valueField | translate | async }}\n </ax-label>\n <ax-lookup\n mode=\"drop-down-list\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"valueField()\"\n (ngModelChange)=\"onValueFieldChange($event)\"\n [searchable]=\"true\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n </div>\n <div class=\"axm-query-contract-widget__section\">\n <ax-label class=\"axm-query-contract-widget__title\">\n {{ fieldsI18n.textField | translate | async }}\n </ax-label>\n <ax-lookup\n mode=\"drop-down-list\"\n [dataSource]=\"fieldDataSource()\"\n [ngModel]=\"textField()\"\n (ngModelChange)=\"onTextFieldChange($event)\"\n [searchable]=\"true\"\n textField=\"text\"\n valueField=\"value\"\n look=\"outline\"\n ></ax-lookup>\n </div>\n </div>\n}\n"],"names":["i18n","i4"],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
|
+
import { q as formatContractCapabilitiesSummary } from './acorex-platform-module-platform-management-client-create-user-query-contract.util-D_af2BUi.mjs';
|
|
5
|
+
|
|
6
|
+
//#region ----- Imports -----
|
|
7
|
+
//#endregion
|
|
8
|
+
//#region ----- Component -----
|
|
9
|
+
class AXMQueryContractWidgetViewComponent extends AXPValueWidgetComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
//#region ----- Computed Properties -----
|
|
13
|
+
this.summary = computed(() => formatContractCapabilitiesSummary(this.getValue()), /* @ts-ignore */
|
|
14
|
+
...(ngDevMode ? [{ debugName: "summary" }] : /* istanbul ignore next */ []));
|
|
15
|
+
}
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMQueryContractWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMQueryContractWidgetViewComponent, isStandalone: true, selector: "axm-query-contract-widget-view", usesInheritance: true, ngImport: i0, template: `
|
|
18
|
+
@if (summary()) {
|
|
19
|
+
<span class="text-xs font-medium" [title]="summary()">{{ summary() }}</span>
|
|
20
|
+
}
|
|
21
|
+
<!-- ----- Empty contract capabilities ----- -->
|
|
22
|
+
@else {
|
|
23
|
+
<span class="text-muted">---</span>
|
|
24
|
+
}
|
|
25
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMQueryContractWidgetViewComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{
|
|
30
|
+
selector: 'axm-query-contract-widget-view',
|
|
31
|
+
template: `
|
|
32
|
+
@if (summary()) {
|
|
33
|
+
<span class="text-xs font-medium" [title]="summary()">{{ summary() }}</span>
|
|
34
|
+
}
|
|
35
|
+
<!-- ----- Empty contract capabilities ----- -->
|
|
36
|
+
@else {
|
|
37
|
+
<span class="text-muted">---</span>
|
|
38
|
+
}
|
|
39
|
+
`,
|
|
40
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
41
|
+
}]
|
|
42
|
+
}] });
|
|
43
|
+
|
|
44
|
+
export { AXMQueryContractWidgetViewComponent };
|
|
45
|
+
//# sourceMappingURL=acorex-platform-module-platform-management-client-query-contract-widget-view.component-DD9ETjFD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-platform-management-client-query-contract-widget-view.component-DD9ETjFD.mjs","sources":["../../../../libs/modules/platform-management/client/src/lib/features/query-contract-widget/query-contract-widget-view.component.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { formatContractCapabilitiesSummary } from '../query-definition/create-user-query-contract.util';\nimport type { AXPUserQueryContractCapabilities } from '../query-definition/create-user-query.types';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-query-contract-widget-view',\n template: `\n @if (summary()) {\n <span class=\"text-xs font-medium\" [title]=\"summary()\">{{ summary() }}</span>\n }\n <!-- ----- Empty contract capabilities ----- -->\n @else {\n <span class=\"text-muted\">---</span>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMQueryContractWidgetViewComponent extends AXPValueWidgetComponent<AXPUserQueryContractCapabilities> {\n //#region ----- Computed Properties -----\n\n protected readonly summary = computed(() => formatContractCapabilitiesSummary(this.getValue()));\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;AAAA;AAQA;AAEA;AAeM,MAAO,mCAAoC,SAAQ,uBAAyD,CAAA;AAblH,IAAA,WAAA,GAAA;;;AAgBqB,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,iCAAiC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oFAAC;AAGhG,IAAA;8GANY,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXpC;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGU,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAb/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,QAAQ,EAAE;;;;;;;;AAQT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
|
-
import {
|
|
4
|
+
import { g as formatRestApiSummary } from './acorex-platform-module-platform-management-client-acorex-platform-module-platform-management-client-YuJijjKh.mjs';
|
|
5
5
|
|
|
6
6
|
//#region ----- Imports -----
|
|
7
7
|
//#endregion
|
|
@@ -42,4 +42,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
42
42
|
}] });
|
|
43
43
|
|
|
44
44
|
export { AXMRestApiGeneratorWidgetColumnComponent };
|
|
45
|
-
//# sourceMappingURL=acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-
|
|
45
|
+
//# sourceMappingURL=acorex-platform-module-platform-management-client-rest-api-generator-widget-column.component-DRkE2a7n.mjs.map
|