@acorex/platform 0.0.0-ACOREX

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.
Files changed (116) hide show
  1. package/README.md +7 -0
  2. package/auth/README.md +3 -0
  3. package/common/README.md +3 -0
  4. package/core/README.md +4 -0
  5. package/fesm2022/acorex-platform-auth.mjs +1362 -0
  6. package/fesm2022/acorex-platform-auth.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-common-common-settings.provider-G9XcXXOG.mjs +127 -0
  8. package/fesm2022/acorex-platform-common-common-settings.provider-G9XcXXOG.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-common.mjs +4601 -0
  10. package/fesm2022/acorex-platform-common.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-core.mjs +4374 -0
  12. package/fesm2022/acorex-platform-core.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-domain.mjs +3234 -0
  14. package/fesm2022/acorex-platform-domain.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-builder.mjs +2847 -0
  16. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs +121 -0
  18. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-layout-components.mjs +8583 -0
  20. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-layout-designer.mjs +2474 -0
  22. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-layout-entity.mjs +19150 -0
  24. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-layout-views.mjs +1468 -0
  26. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-layout-widget-core.mjs +2950 -0
  28. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs +72 -0
  30. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs +158 -0
  32. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs +29 -0
  34. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs +172 -0
  36. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGQqY5Mw.mjs +111 -0
  38. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGQqY5Mw.mjs.map +1 -0
  39. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs +274 -0
  40. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs +64 -0
  42. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs +34 -0
  44. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
  45. package/fesm2022/acorex-platform-layout-widgets.mjs +29791 -0
  46. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -0
  47. package/fesm2022/acorex-platform-native.mjs +155 -0
  48. package/fesm2022/acorex-platform-native.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-runtime-catalog-command-definition.mjs +20 -0
  50. package/fesm2022/acorex-platform-runtime-catalog-command-definition.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-runtime-catalog-query-definition.mjs +20 -0
  52. package/fesm2022/acorex-platform-runtime-catalog-query-definition.mjs.map +1 -0
  53. package/fesm2022/acorex-platform-runtime.mjs +899 -0
  54. package/fesm2022/acorex-platform-runtime.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cvvr4HnL.mjs +160 -0
  56. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cvvr4HnL.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-TYoLN1Jq.mjs +120 -0
  58. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-TYoLN1Jq.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-C2z5Lq9y.mjs +237 -0
  60. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-C2z5Lq9y.mjs.map +1 -0
  61. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs +31 -0
  62. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
  63. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs +25 -0
  64. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
  65. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  66. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  67. package/fesm2022/acorex-platform-themes-default.mjs +2589 -0
  68. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs +55 -0
  70. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs +57 -0
  72. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
  73. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs +168 -0
  74. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +1 -0
  75. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-CHfrTtol.mjs +65 -0
  76. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-CHfrTtol.mjs.map +1 -0
  77. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BSmvnUVq.mjs +64 -0
  78. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BSmvnUVq.mjs.map +1 -0
  79. package/fesm2022/acorex-platform-themes-shared.mjs +2125 -0
  80. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -0
  81. package/fesm2022/acorex-platform-workflow.mjs +2501 -0
  82. package/fesm2022/acorex-platform-workflow.mjs.map +1 -0
  83. package/fesm2022/acorex-platform.mjs +6 -0
  84. package/fesm2022/acorex-platform.mjs.map +1 -0
  85. package/layout/builder/README.md +1578 -0
  86. package/layout/components/README.md +3 -0
  87. package/layout/designer/README.md +4 -0
  88. package/layout/entity/README.md +4 -0
  89. package/layout/views/README.md +3 -0
  90. package/layout/widget-core/README.md +4 -0
  91. package/layout/widgets/README.md +3 -0
  92. package/native/README.md +4 -0
  93. package/package.json +103 -0
  94. package/runtime/README.md +3 -0
  95. package/themes/default/README.md +3 -0
  96. package/themes/shared/README.md +3 -0
  97. package/types/acorex-platform-auth.d.ts +680 -0
  98. package/types/acorex-platform-common.d.ts +2926 -0
  99. package/types/acorex-platform-core.d.ts +2896 -0
  100. package/types/acorex-platform-domain.d.ts +2353 -0
  101. package/types/acorex-platform-layout-builder.d.ts +926 -0
  102. package/types/acorex-platform-layout-components.d.ts +2903 -0
  103. package/types/acorex-platform-layout-designer.d.ts +422 -0
  104. package/types/acorex-platform-layout-entity.d.ts +3189 -0
  105. package/types/acorex-platform-layout-views.d.ts +667 -0
  106. package/types/acorex-platform-layout-widget-core.d.ts +1086 -0
  107. package/types/acorex-platform-layout-widgets.d.ts +5478 -0
  108. package/types/acorex-platform-native.d.ts +28 -0
  109. package/types/acorex-platform-runtime-catalog-command-definition.d.ts +137 -0
  110. package/types/acorex-platform-runtime-catalog-query-definition.d.ts +125 -0
  111. package/types/acorex-platform-runtime.d.ts +470 -0
  112. package/types/acorex-platform-themes-default.d.ts +573 -0
  113. package/types/acorex-platform-themes-shared.d.ts +170 -0
  114. package/types/acorex-platform-workflow.d.ts +1806 -0
  115. package/types/acorex-platform.d.ts +2 -0
  116. package/workflow/README.md +4 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-layout-entity.mjs","sources":["../../../../libs/platform/layout/entity/src/lib/plugins/shared.ts","../../../../libs/platform/layout/entity/src/lib/plugins/types.ts","../../../../libs/platform/layout/entity/src/lib/entity-middleware/entity-modifier.context.ts","../../../../libs/platform/layout/entity/src/lib/entity-middleware/entity-provider.ts","../../../../libs/platform/layout/entity/src/lib/entity-middleware/entity-middleware.ts","../../../../libs/platform/layout/entity/src/lib/entity.config.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-column-metadata.resolver.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-column-enrichment.service.ts","../../../../libs/platform/layout/entity/src/lib/entity-registery.service.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-forms/entity-form-builder.service.ts","../../../../libs/platform/layout/entity/src/lib/commands/open-entity-details.command.ts","../../../../libs/platform/layout/entity/src/lib/commands/create-entity.command.ts","../../../../libs/platform/layout/entity/src/lib/commands/create-entity.command.definition.ts","../../../../libs/platform/layout/entity/src/lib/commands/update-entity.command.ts","../../../../libs/platform/layout/entity/src/lib/commands/view-entity-details.command.ts","../../../../libs/platform/layout/entity/src/lib/components/entity-detail-popover.component.ts","../../../../libs/platform/layout/entity/src/lib/components/entity-detail-popover.component.html","../../../../libs/platform/layout/entity/src/lib/components/entity-detail-popover.service.ts","../../../../libs/platform/layout/entity/src/lib/entity-storage-service.ts","../../../../libs/platform/layout/entity/src/lib/entity.service.ts","../../../../libs/platform/layout/entity/src/lib/components/entity-preload-filters-container.component.ts","../../../../libs/platform/layout/entity/src/lib/entity-data-seeder.ts","../../../../libs/platform/layout/entity/src/lib/entities-list.datasource.ts","../../../../libs/platform/layout/entity/src/lib/entity.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/related-entity-include-columns.ts","../../../../libs/platform/layout/entity/src/lib/entity-detail-list.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/entity-events.keys.ts","../../../../libs/platform/layout/entity/src/lib/entity-events/entity-event-dispatcher.service.ts","../../../../libs/platform/layout/entity/src/lib/entity-master-create.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/entity-master-list.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/workflows/delete-entity.workflow.ts","../../../../libs/platform/layout/entity/src/lib/entity-master-update.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/workflows/modify-section.workflow.ts","../../../../libs/platform/layout/entity/src/lib/entity-master-single.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/entity-preload-filters.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/entity-component-page-order.util.ts","../../../../libs/platform/layout/entity/src/lib/entity-definition-crud.token.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-category/category-tree.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/entity-category-tree-selector.component.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-category/entity-category-batch-resolver.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/entity-category-widget-column.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/truncated-breadcrumb.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/entity-category-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/entity-category-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/entity-category-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-definition-provider-widget/entity-definition-provider-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-definition-provider-widget/entity-definition-provider-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-definition-provider-widget/entity-definition-provider-widget-edit.component.html","../../../../libs/platform/layout/entity/src/lib/widgets/entity-list/entity-list.mappers.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-list/entity-list-table.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-list/entity-list-toolbar.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-list/entity-list-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-list/entity-list-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/entity-data-selector.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/looks/lookup-widget-look-base.interface.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/looks/lookup-widget-select.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/looks/lookup-widget-tagbox.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-widget-column.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-widget-column.component.html","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector-widget.types.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-definition.provider.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-federated-search.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector-widget-column.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/selector-structure-widget/selector-structure-widget-column.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/selector-structure-widget/selector-structure-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/selector-structure-widget/selector-structure-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/selector-structure-widget/selector-structure-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widget-definition.provider.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/details-view-badge-status.service.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/layout-adapter-builder.service.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/base-related-entity-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/page-component-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/page-details-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/page-list-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/tab-details-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/tab-list-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converter-factory.service.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/main-entity-content-builder.service.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/layout-adapter-factory.service.ts","../../../../libs/platform/layout/entity/src/lib/entity-details-view-route.resolver.ts","../../../../libs/platform/layout/entity/src/lib/guards/entity-preload-filter.guard.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/event-dispatch.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/column-width.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/column-ordering.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/layout-ordering-config.service.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/layout-ordering.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/search-result-description.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/default-multi-language.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/crud.middleware.ts","../../../../libs/platform/layout/entity/src/lib/search-definition-command.provider.ts","../../../../libs/platform/layout/entity/src/lib/search-definition.provider.ts","../../../../libs/platform/layout/entity/src/lib/storage-middleware/storage-middleware.types.ts","../../../../libs/platform/layout/entity/src/lib/storage-middleware/storage-middleware.tokens.ts","../../../../libs/platform/layout/entity/src/lib/storage-middleware/storage-middleware.wrapper.ts","../../../../libs/platform/layout/entity/src/lib/workflows/create-entity.workflow.ts","../../../../libs/platform/layout/entity/src/lib/workflows/modify-entity.workflow.ts","../../../../libs/platform/layout/entity/src/lib/workflows/show-details.workflow.ts","../../../../libs/platform/layout/entity/src/lib/workflows/show-file-uploader-popup.workflow.ts","../../../../libs/platform/layout/entity/src/lib/workflows/show-list.workflow.ts","../../../../libs/platform/layout/entity/src/lib/entity.module.ts","../../../../libs/platform/layout/entity/src/lib/provide-entity.ts","../../../../libs/platform/layout/entity/src/lib/queries/get-entity-details.query.ts","../../../../libs/platform/layout/entity/src/lib/utils.ts","../../../../libs/platform/layout/entity/src/acorex-platform-layout-entity.ts"],"sourcesContent":["import { AXPEntityModifierContext } from '../entity-middleware/entity-modifier.types';\n\nexport function ensureListActions(ctx: AXPEntityModifierContext) {\n ctx.interfaces.update((i) => {\n const next: any = i ?? {};\n next.master = next.master ?? {};\n next.master.list = next.master.list ?? { actions: [], views: [] };\n next.master.list.actions = next.master.list.actions ?? [];\n return next;\n });\n}\n\nexport function actionExists(actions: any[] | undefined, commandName: string, name?: string): boolean {\n if (!actions) return false;\n return actions.some((a) => {\n const cmd = typeof a.command === 'object' ? a.command?.name : a.command;\n if (name && a.name) {\n return a.name === name;\n }\n return cmd === commandName;\n });\n}\n\n//#region ---- Layout Helpers (Safe / Shared) ----\n\nexport interface AXPEntityLayoutSectionLike {\n id: string;\n}\n\nexport interface AXPEntityLayoutPropertyLike {\n name: string;\n}\n\nexport interface AXPEntityLayoutLike<\n TSection extends AXPEntityLayoutSectionLike = AXPEntityLayoutSectionLike,\n TProperty extends AXPEntityLayoutPropertyLike = AXPEntityLayoutPropertyLike,\n> {\n sections: TSection[];\n properties?: TProperty[];\n}\n\n/**\n * Clones `sections` and `properties` arrays to prevent accidental cross-interface mutations.\n * Many entity definitions reuse the same array instances across create/update/single interfaces.\n */\nexport function cloneLayoutArrays<TLayout extends AXPEntityLayoutLike>(\n layout: TLayout,\n): TLayout & { properties: NonNullable<TLayout['properties']> } {\n return {\n ...layout,\n sections: [...layout.sections] as TLayout['sections'],\n properties: [...(layout.properties ?? [])] as NonNullable<TLayout['properties']>,\n };\n}\n\nexport function ensureLayoutSection<TLayout extends AXPEntityLayoutLike>(\n layout: TLayout,\n section: TLayout['sections'][number],\n): void {\n if (!layout.sections.some((s) => s.id === section.id)) {\n layout.sections = [...layout.sections, section] as TLayout['sections'];\n }\n}\n\nexport function ensureLayoutPropertyView<TLayout extends AXPEntityLayoutLike>(\n layout: TLayout & { properties: NonNullable<TLayout['properties']> },\n prop: NonNullable<TLayout['properties']>[number],\n): void {\n if (!layout.properties.some((p) => p.name === prop.name)) {\n layout.properties = [...layout.properties, prop];\n }\n}\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport { AXPEntityModifierContext } from '../entity-middleware/entity-modifier.types';\n\nexport interface AXPEntityActionPlugin {\n name: string;\n order?: number;\n apply: (ctx: AXPEntityModifierContext, options?: any) => Promise<void> | void;\n}\n\nexport const AXP_ENTITY_ACTION_PLUGIN = new InjectionToken<AXPEntityActionPlugin[]>(\n 'AXP_ENTITY_ACTION_PLUGIN'\n);\n\n\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityModifierContext } from './entity-modifier.types';\n\nexport function createModifierContext(entity: AXPEntity): AXPEntityModifierContext {\n const ctx: AXPEntityModifierContext = {\n entity,\n\n title: {\n get: () => entity.title,\n set: (newTitle) => {\n entity.title = newTitle;\n return ctx;\n },\n },\n\n module: {\n get: () => entity.module,\n set: (newValue) => {\n entity.module = newValue;\n return ctx;\n },\n },\n\n name: {\n get: () => entity.name,\n set: (newValue) => {\n entity.name = newValue;\n return ctx;\n },\n },\n\n\n parentKey: {\n get: () => entity.parentKey,\n set: (newValue) => {\n entity.parentKey = newValue;\n return ctx;\n },\n },\n\n category: {\n get: () => entity.category,\n update: (updater) => {\n entity.category = updater(entity.category);\n return ctx;\n },\n },\n\n properties: {\n list: () => entity.properties,\n add: (...props) => {\n entity.properties.push(...props);\n return ctx;\n },\n remove: (predicate) => {\n entity.properties = entity.properties.filter((p) => !predicate(p));\n return ctx;\n },\n find: (name) => ({\n get: () => entity.properties.find((p) => p.name === name),\n update: (updater) => {\n const index = entity.properties.findIndex((p) => p.name === name);\n if (index !== -1) entity.properties[index] = updater(entity.properties[index]);\n return ctx;\n },\n }),\n },\n\n columns: {\n list: () => entity.columns,\n add: (...cols) => {\n entity.columns ??= [];\n entity.columns.push(...cols);\n return ctx;\n },\n remove: (predicate) => {\n if (entity.columns) entity.columns = entity.columns.filter((c) => !predicate(c));\n return ctx;\n },\n find: (name) => ({\n get: () => entity.columns?.find((c) => c.name === name),\n update: (updater) => {\n const index = entity.columns?.findIndex((c) => c.name === name);\n if (index !== undefined && index !== -1 && entity.columns)\n entity.columns[index] = updater(entity.columns[index]);\n return ctx;\n },\n }),\n },\n\n formats: {\n get: () => entity.formats,\n update: (updater) => {\n entity.formats = updater(entity.formats);\n return ctx;\n },\n },\n\n relatedEntities: {\n list: () => entity.relatedEntities,\n add: (...items) => {\n entity.relatedEntities ??= [];\n entity.relatedEntities.push(...items);\n return ctx;\n },\n remove: (predicate) => {\n if (entity.relatedEntities) entity.relatedEntities = entity.relatedEntities.filter((r) => !predicate(r));\n return ctx;\n },\n },\n\n groups: {\n list: () => entity.groups,\n add: (...items) => {\n entity.groups ??= [];\n entity.groups.push(...items);\n return ctx;\n },\n remove: (predicate) => {\n if (entity.groups) entity.groups = entity.groups.filter((g) => !predicate(g));\n return ctx;\n },\n },\n\n commands: {\n get: () => entity.commands,\n update: (updater) => {\n entity.commands = updater(entity.commands);\n return ctx;\n },\n },\n\n queries: {\n get: () => entity.queries,\n update: (updater) => {\n entity.queries = updater(entity.queries);\n return ctx;\n },\n },\n\n validations: {\n get: () => entity.validations,\n update: (updater) => {\n entity.validations = updater(entity.validations);\n return ctx;\n },\n },\n\n interfaces: {\n get: () => entity.interfaces,\n update: (updater) => {\n entity.interfaces = updater(entity.interfaces);\n return ctx;\n },\n\n master: {\n get: () => entity.interfaces?.master,\n update: (updater) => {\n entity.interfaces ??= {};\n entity.interfaces.master = updater(entity.interfaces.master);\n return ctx;\n },\n\n list: {\n get: () => entity.interfaces?.master?.list,\n update: (updater) => {\n entity.interfaces ??= {};\n entity.interfaces.master ??= {};\n entity.interfaces.master.list = updater(entity.interfaces.master.list);\n return ctx;\n },\n },\n\n create: {\n get: () => entity.interfaces?.master?.create,\n update: (updater) => {\n entity.interfaces ??= {};\n entity.interfaces.master ??= {};\n entity.interfaces.master.create = updater(entity.interfaces.master.create);\n return ctx;\n },\n },\n modify: {\n get: () => entity.interfaces?.master?.create,\n update: (updater) => {\n entity.interfaces ??= {};\n entity.interfaces.master ??= {};\n entity.interfaces.master.update = updater(entity.interfaces.master.update);\n return ctx;\n },\n },\n single: {\n get: () => entity.interfaces?.master?.single,\n update: (updater) => {\n entity.interfaces ??= {};\n entity.interfaces.master ??= {};\n entity.interfaces.master.single = updater(entity.interfaces.master.single);\n return ctx;\n },\n },\n },\n\n detail: {\n get: () => entity.interfaces?.detail,\n update: (updater) => {\n entity.interfaces ??= {};\n entity.interfaces.detail = updater(entity.interfaces.detail);\n return ctx;\n },\n\n list: {\n get: () => entity.interfaces?.detail?.list,\n update: (updater) => {\n entity.interfaces ??= {};\n entity.interfaces.detail ??= {};\n entity.interfaces.detail.list = updater(entity.interfaces.detail.list);\n return ctx;\n },\n },\n },\n },\n\n\n toEntity: () => entity,\n };\n\n return ctx;\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPEntityModifierProvider } from './entity-modifier.types';\n\nexport const AXP_ENTITY_MODIFIER = new InjectionToken<AXPEntityModifierProvider[]>('AXP_ENTITY_MODIFIER');\n","import { AXPEntity } from '@acorex/platform/common';\nimport { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\n\nimport { AXP_ENTITY_ACTION_PLUGIN, AXPEntityActionPlugin } from '../plugins';\nimport { createModifierContext } from './entity-modifier.context';\nimport { AXPEntityModifier, AXPEntityModifierProvider } from './entity-modifier.types';\nimport { AXP_ENTITY_MODIFIER } from './entity-provider';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityMiddleware {\n //#region ---- Fields ----\n\n private exactModifiers = new Map<string, AXPEntityModifier>();\n private patternModifiers: Array<{ pattern: RegExp; modifier: AXPEntityModifier }> = [];\n protected providedModifiers: AXPEntityModifierProvider[] = inject(AXP_ENTITY_MODIFIER, { optional: true }) || [];\n protected providedActionPlugins: AXPEntityActionPlugin[] = inject(AXP_ENTITY_ACTION_PLUGIN, { optional: true }) || [];\n protected injector: Injector = inject(Injector);\n\n //#endregion\n\n //#region ---- Constructor ----\n\n constructor() {\n for (const { entityName, modifier } of this.providedModifiers) {\n this.register(entityName, modifier);\n }\n }\n\n //#endregion\n\n //#region ---- Registration Methods ----\n\n register(entityName: string | RegExp, modifier: AXPEntityModifier): void {\n if (entityName instanceof RegExp) {\n this.patternModifiers.push({ pattern: this.normalizeRegExp(entityName), modifier });\n return;\n }\n\n if (entityName.includes('*')) {\n const pattern = this.wildcardToRegExp(entityName);\n this.patternModifiers.push({ pattern, modifier });\n return;\n }\n\n this.exactModifiers.set(entityName, modifier);\n }\n\n //#endregion\n\n //#region ---- Processing ----\n\n async process(entity: AXPEntity): Promise<AXPEntity> {\n // First, expand action plugins if entity.plugins exists\n const context = createModifierContext(entity);\n const plugins = (entity as any).plugins as Array<{ name: string; options?: any }> | undefined;\n if (plugins && plugins.length) {\n const sorted = [...this.providedActionPlugins].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n for (const p of plugins) {\n const contrib = sorted.find((x) => x.name === p.name);\n if (contrib) {\n try {\n await runInInjectionContext(this.injector, () => contrib.apply(context, p.options));\n } catch (err) {\n console.error('[AXPEntityMiddleware] action plugin failed:', p.name, err);\n }\n }\n }\n }\n\n // Then apply entity-specific modifiers\n // Collect all matching modifiers\n const modifiers: AXPEntityModifier[] = [];\n\n // Exact match first\n const exact = this.exactModifiers.get(entity.name);\n if (exact) {\n modifiers.push(exact);\n }\n\n // Then all pattern matches\n for (const { pattern, modifier } of this.patternModifiers) {\n if (pattern.test(entity.name)) {\n modifiers.push(modifier);\n }\n }\n // Apply all matching modifiers in order\n for (const modifier of modifiers) {\n runInInjectionContext(this.injector, () => modifier(context));\n }\n\n return context.toEntity();\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private wildcardToRegExp(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+?^${}()|\\[\\]\\\\]/g, '\\\\$&');\n const regexStr = `^${escaped.replace(/\\*/g, '.*')}$`;\n return new RegExp(regexStr);\n }\n\n private normalizeRegExp(rx: RegExp): RegExp {\n const flags = rx.flags.replace('g', '');\n return new RegExp(rx.source, flags);\n }\n\n //#endregion\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport { inject, Injectable, InjectionToken, Type } from '@angular/core';\n\nexport interface AXPEntityConfigs {\n viewers: {\n root: () => Type<any> | Promise<Type<any>>;\n detail: {\n list: () => Type<any> | Promise<Type<any>>;\n };\n master: {\n single: () => Type<any> | Promise<Type<any>>;\n details: () => Type<any> | Promise<Type<any>>;\n create: () => Type<any> | Promise<Type<any>>;\n modify: () => Type<any> | Promise<Type<any>>;\n list: () => Type<any> | Promise<Type<any>>;\n };\n };\n}\n\nexport const AXP_ENTITY_CONFIG_TOKEN = new InjectionToken<AXPEntityConfigs>('AXP_ENTITY_CONFIG_TOKEN');\n\n/** Raw input from entity loaders' list(). */\nexport type AXPEntityListInput = { name: string; module: string };\n\n/** Output from listAll(); fullName is populated by the resolver. */\nexport type AXPEntityListEntry = { name: string; module: string; fullName: string };\n\nexport interface AXPEntityDefinitionLoader {\n get(moduleName: string, entityName: string): Promise<AXPEntity | null>;\n list(): Promise<AXPEntityListInput[]>;\n}\n\nexport const AXP_ENTITY_DEFINITION_LOADER = new InjectionToken<AXPEntityDefinitionLoader>(\n 'AXP_ENTITY_DEFINITION_PROVIDER',\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityResolver {\n private providers = inject(AXP_ENTITY_DEFINITION_LOADER);\n\n /** Aggregates list() from all entity loaders (including lazy). Populates fullName. */\n async listAll(): Promise<AXPEntityListEntry[]> {\n const loaders = await this.resolveLoaders();\n const results: AXPEntityListEntry[] = [];\n for (const loader of loaders) {\n const items = await loader.list();\n for (const it of items) {\n results.push({\n name: it.name,\n module: it.module,\n fullName: `${it.module}.${it.name}`,\n });\n }\n }\n return results;\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n const loaders = await this.resolveLoaders();\n for (const loader of loaders) {\n const entity = await loader.get(moduleName, entityName);\n if (entity) return entity;\n }\n return null;\n }\n\n private async resolveLoaders(): Promise<AXPEntityDefinitionLoader[]> {\n const raw = this.providers;\n if (!raw) return [];\n const arr = Array.isArray(raw) ? raw : [raw];\n const loaders: AXPEntityDefinitionLoader[] = [];\n for (const p of arr) {\n const loader = p instanceof Promise ? await p : p;\n loaders.push(loader);\n }\n return loaders;\n }\n}\n","import { AXPEntity, AXPEntityTableColumn } from '@acorex/platform/common';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityResolver } from '../../entity.config';\n\n//#region ---- Types ----\n\nexport interface AXPRelatedColumnMetadata {\n title?: string;\n showAs?: AXPEntityTableColumn['showAs'];\n}\n\n//#endregion\n\nconst LOOKUP_WIDGET_TYPE = 'lookup-editor';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPRelatedColumnMetadataResolver {\n private readonly entityLoader = inject(AXPEntityResolver);\n\n /**\n * Resolves title and showAs for a column that references a related entity property via dotted path.\n * Uses relatedEntities when available; falls back to lookup expose when not.\n */\n async resolve(entity: AXPEntity, columnName: string): Promise<AXPRelatedColumnMetadata | null> {\n if (!columnName.includes('.')) {\n return null;\n }\n\n const parts = columnName.split(/\\.(.+)/);\n if (parts.length < 2) {\n return null;\n }\n\n const [dataPath, propName] = parts;\n\n // Try relatedEntities first\n const relatedEntities = entity.relatedEntities ?? [];\n let related = relatedEntities.find((r) => r.persistence?.dataPath === dataPath);\n\n // Fallback: find lookup property whose expose target matches this path\n if (!related) {\n const lookupEntity = this.findLookupEntityByExposeTarget(entity, dataPath, propName);\n if (!lookupEntity) {\n return null;\n }\n related = { entity: lookupEntity, persistence: { dataPath } };\n }\n\n const [moduleName, entityName] = related.entity.split('.');\n const sourceEntity = await this.entityLoader.get(moduleName, entityName);\n\n if (!sourceEntity) {\n return null;\n }\n\n const sourceProp = sourceEntity.properties?.find((p) => p.name === propName);\n if (!sourceProp) {\n return null;\n }\n\n const title = sourceProp.title;\n const showAs = this.deriveShowAs(sourceProp);\n\n return { title, showAs };\n }\n\n /**\n * Finds a lookup property whose expose target matches the dotted path.\n * Returns the lookup's entity string (e.g. 'PersonCore.Person') or null.\n */\n private findLookupEntityByExposeTarget(\n entity: AXPEntity,\n dataPath: string,\n propName: string\n ): string | null {\n const targetPath = `${dataPath}.${propName}`;\n\n for (const prop of entity.properties ?? []) {\n const iface = prop.schema?.interface;\n if (iface?.type !== LOOKUP_WIDGET_TYPE) {\n continue;\n }\n\n const expose = iface.options?.['expose'] as Array<{ source: string; target: string }> | undefined;\n const match = expose?.find((e) => e.target === targetPath);\n\n if (match) {\n return (iface.options?.['entity'] as string) ?? null;\n }\n }\n\n return null;\n }\n\n /**\n * Derives showAs from source property schema.\n * Passes through the full interface (type, options, children) for column display.\n */\n private deriveShowAs(prop: { schema?: { interface?: any } }): AXPRelatedColumnMetadata['showAs'] {\n const iface = prop.schema?.interface;\n if (!iface?.type) {\n return undefined;\n }\n\n return {\n type: iface.type,\n options: {\n ...(iface.options ?? {}),\n ...(iface.children?.length && { children: iface.children }),\n },\n };\n }\n}\n","import { AXPEntity, AXPEntityTableColumn } from '@acorex/platform/common';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPRelatedColumnMetadataResolver } from './related-column-metadata.resolver';\n\nconst LOOKUP_WIDGET_TYPE = 'lookup-editor';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPRelatedColumnEnrichmentService {\n private readonly metadataResolver = inject(AXPRelatedColumnMetadataResolver);\n\n /**\n * Enriches entity columns with:\n * 1. dataPath for FK columns (e.g. fromPersonId) derived from lookup property schema\n * 2. title and showAs from related entity properties for dotted paths (e.g. person.firstName)\n */\n async enrich(entity: AXPEntity): Promise<AXPEntity> {\n const columns = entity.columns;\n if (!columns?.length) {\n return entity;\n }\n\n const enrichedColumns: AXPEntityTableColumn[] = [];\n\n for (const column of columns) {\n let enriched = { ...column };\n\n // Derive dataPath for FK columns when missing\n if (!enriched.options?.dataPath) {\n const derivedDataPath = this.deriveDataPathForFkColumn(entity, column);\n if (derivedDataPath) {\n enriched = {\n ...enriched,\n options: { ...enriched.options, dataPath: derivedDataPath },\n };\n }\n }\n\n // Enrich title/showAs for dotted path columns\n const needsMetadataEnrichment =\n column.name.includes('.') && (!enriched.title || !enriched.showAs);\n\n if (needsMetadataEnrichment) {\n const metadata = await this.metadataResolver.resolve(entity, column.name);\n if (metadata) {\n enriched = {\n ...enriched,\n title: enriched.title ?? metadata.title,\n showAs: enriched.showAs ?? metadata.showAs,\n };\n }\n }\n\n enrichedColumns.push(enriched);\n }\n\n return {\n ...entity,\n columns: enrichedColumns,\n };\n }\n\n /**\n * Derives dataPath for FK columns from lookup property schema.\n * Uses expose.target where source matches textField (default 'title').\n */\n private deriveDataPathForFkColumn(\n entity: AXPEntity,\n column: AXPEntityTableColumn\n ): string | null {\n const prop = entity.properties?.find((p) => p.name === column.name);\n if (!prop?.schema?.interface) {\n return null;\n }\n\n const iface = prop.schema.interface;\n if (iface.type !== LOOKUP_WIDGET_TYPE) {\n return null;\n }\n\n const expose = iface.options?.['expose'] as Array<{ source: string; target: string }> | undefined;\n const textField = (iface.options?.['textField'] as string) ?? 'title';\n\n if (!expose?.length) {\n return null;\n }\n\n const match = expose.find((e) => e.source === textField);\n if (match) {\n return match.target;\n }\n\n // Fallback: use first non-id expose\n const fallback = expose.find((e) => e.source !== 'id');\n return fallback?.target ?? null;\n }\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPModuleManifestRegistry } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\n// import { AXPEntityMiddleware } from './entity-middleware';\nimport { Subject } from 'rxjs';\nimport { AXPEntityMiddleware } from './entity-middleware/entity-middleware';\nimport { AXPEntityResolver } from './entity.config';\nimport { AXPRelatedColumnEnrichmentService } from './services/entity-details/related-column-enrichment.service';\n\nexport interface AXPEntityPreloadEntity {\n module: string;\n entity: string;\n}\n\nexport interface AXPEntityDefinitionPreloader {\n preload(): AXPEntityPreloadEntity[];\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPEntityDefinitionRegistryService {\n private middleware = inject(AXPEntityMiddleware);\n private columnEnrichment = inject(AXPRelatedColumnEnrichmentService);\n private onChanged = new Subject<{ name: string }>();\n\n get onChanged$() {\n return this.onChanged.asObservable();\n }\n\n // Stores AXPEntityConfig objects, keyed by a combination of module and entity name.\n private entities = new Map<string, AXPEntity>();\n\n // Entity resolver service for dynamically loading entity configurations.\n private entityResolver = inject(AXPEntityResolver); // Assuming AXPEntityLoader is the correct type\n\n //#region ---- Refresh APIs ----\n\n /**\n * Force re-load and re-process entity definitions, then re-register them.\n * Overloads:\n * - refresh(): refresh all registered entities\n * - refresh(fullName: string): refresh by fully-qualified name `<module>.<entity>`\n * - refresh(moduleName: string, entityName: string): refresh by parts\n */\n async refresh(): Promise<void>;\n async refresh(fullName: string): Promise<void>;\n async refresh(moduleName: string, entityName: string): Promise<void>;\n async refresh(arg1?: string, arg2?: string): Promise<void> {\n // No parameters: refresh all currently registered entities\n if (typeof arg1 === 'undefined' && typeof arg2 === 'undefined') {\n const keys = Array.from(this.entities.keys());\n for (const key of keys) {\n const [m, e] = key.split('.');\n if (m && e) {\n await this.refreshOne(m, e);\n }\n }\n return;\n }\n\n // One parameter: treat as fully-qualified name\n if (typeof arg1 === 'string' && typeof arg2 === 'undefined') {\n const [moduleName, entityName] = arg1.split('.');\n if (!moduleName || !entityName) {\n throw new Error(`Invalid entity full name: ${arg1}`);\n }\n await this.refreshOne(moduleName, entityName);\n return;\n }\n\n // Two parameters: module + entity\n if (typeof arg1 === 'string' && typeof arg2 === 'string') {\n await this.refreshOne(arg1, arg2);\n return;\n }\n }\n\n /** Executes the actual refresh for a single entity */\n private async refreshOne(moduleName: string, entityName: string): Promise<void> {\n const config = await this.entityResolver.get(moduleName, entityName);\n if (!config) {\n throw new Error(`Invalid entity name: ${moduleName}.${entityName}`);\n }\n const processedConfig = await this.middleware.process(config);\n const enrichedConfig = await this.columnEnrichment.enrich(processedConfig);\n this.register(enrichedConfig);\n }\n\n //#endregion\n\n /**\n * Registers a new entity configuration. Entities are identified uniquely by a combination\n * of their module and name.\n *\n * @param config The configuration object of the entity to be registered.\n */\n register(config: AXPEntity): void {\n const key = this.createEntityKey(config.module, config.name);\n this.entities.set(key, config);\n this.onChanged.next({ name: key });\n }\n\n /**\n * Returns an array of all registered entity configurations.\n *\n * @returns An array of AXPEntity objects.\n */\n getAll(): AXPEntity[] {\n return Array.from(this.entities.values());\n }\n\n /**\n * Clear all registered entity configurations.\n * Should be called when modules are cleared to prevent stale entity data.\n * @param preserveModules Optional list of module names whose entities should be preserved\n */\n clear(preserveModules?: string[]): void {\n if (preserveModules && preserveModules.length > 0) {\n const preserveSet = new Set(preserveModules);\n // Remove only entities from non-preserved modules\n for (const [key, entity] of this.entities.entries()) {\n if (!preserveSet.has(entity.module)) {\n this.entities.delete(key);\n }\n }\n } else {\n this.entities.clear();\n }\n this.onChanged.next({ name: '' });\n }\n\n /**\n * Resolves an entity configuration based on module and entity name. If the configuration\n * is not already registered, attempts to load it dynamically. Throws an error if the\n * entity cannot be found or loaded.\n *\n * @param moduleName The module name of the entity.\n * @param entityName The name of the entity.\n * @returns A promise resolving to the entity configuration.\n * @throws Error if the entity configuration cannot be resolved.\n */\n async resolve(moduleName: string, entityName: string): Promise<AXPEntity> {\n const key = this.createEntityKey(moduleName, entityName);\n let config = this.entities.get(key) ?? null;\n\n if (!config) {\n\n try {\n config = await this.entityResolver.get(moduleName, entityName);\n if (config) {\n const processedConfig = await this.middleware.process(config);\n const enrichedConfig = await this.columnEnrichment.enrich(processedConfig);\n this.register(enrichedConfig);\n return enrichedConfig;\n }\n } catch (error) {\n throw error; // Rethrow to allow error handling by caller\n }\n\n if (!config) {\n throw new Error(`Invalid entity name: ${key}`);\n }\n }\n return config;\n }\n\n async exists(moduleName: string, entityName: string): Promise<boolean> {\n const key = this.createEntityKey(moduleName, entityName);\n return this.entities.has(key);\n }\n\n\n /**\n * Creates a unique key for an entity based on its module and name.\n *\n * @param moduleName The module name of the entity.\n * @param entityName The name of the entity.\n * @returns The unique key for the entity.\n */\n private createEntityKey(moduleName: string, entityName: string): string {\n return `${moduleName}.${entityName}`;\n }\n}\n","import { AXPopupSizeType } from '@acorex/components/popup';\nimport { AXPEntity, AXPEntityProperty, AXPEntityPropertyView, AXPEntitySectionView } from '@acorex/platform/common';\nimport {\n AXPDialogRef,\n AXPLayoutBuilderService,\n AXPWidgetNodeExtendedProperties,\n IActionBuilder,\n IFormFieldBuilder,\n} from '@acorex/platform/layout/builder';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\nimport { AXPDeviceService, AXPGridLayoutOptions } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { merge } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\n//#region ---- Fluent Builder Types ----\n\ntype EntityInterfaceKind = 'create' | 'update' | 'single';\n\ninterface IEntitySelectorStage {\n /** Select target entity using \"module.entity\" format */\n entity(fullName: string): IInterfaceSelectorStage;\n}\n\ninterface IInterfaceSelectorStage {\n /** Use master.create interface */\n create(initialData?: any): IPropertyFilterStage;\n /** Use master.update interface. Accepts id (string) or full record data (object). */\n update(data: string | Record<string, any>): IPropertyFilterStage;\n /** Use master.single interface (read-only view). Accepts id (string) or full record data (object). */\n single(data: string | Record<string, any>): IPropertyFilterStage;\n}\n\ninterface IPropertyFilterStage {\n /** Only include provided property names (by AXPEntityProperty.name). Mutually exclusive with exclude(). */\n include(...propertyNames: string[]): IPropertyFilterStage;\n /** Exclude provided property names (by AXPEntityProperty.name). Ignored if include() was already set. */\n exclude(...propertyNames: string[]): IPropertyFilterStage;\n /** Mark provided property names as readonly. Overrides property schema for display. */\n readonlyProperties(...propertyNames: string[]): IPropertyFilterStage;\n /** Optionally override dialog title */\n title(text: string): IPropertyFilterStage;\n /** Provide initial dialog context/model data */\n context(context: any): IPropertyFilterStage;\n /** Override dialog size (e.g., 'sm' | 'md' | 'lg' | 'xl' | 'full') */\n size(size: AXPopupSizeType): IPropertyFilterStage;\n /** Configure footer actions (cancel/submit/custom). If not called, defaults to cancel+submit. */\n actions(delegate: (a: IActionBuilder) => void): IPropertyFilterStage;\n /**\n * Handler invoked when user clicks an action. Receives AXPDialogRef.\n * If handler throws, dialog stays open for retry.\n * If handler returns, dialog closes and show() resolves with the return value.\n */\n onAction<T = any>(\n handler: (dialogRef: AXPDialogRef) => T | Promise<T>,\n ): IPropertyFilterStage & { show(): Promise<T> };\n /** Add an extra field into a specific group, using the original field builder API */\n field(groupId: string, path: string, delegate?: (field: CompatFormFieldBuilder) => void): IPropertyFilterStage;\n /** Build and return the widget node without showing dialog */\n build(): Promise<AXPWidgetNode>;\n /** Show dialog */\n show(): Promise<AXPDialogRef>;\n\n mode(mode: 'edit' | 'view'): IPropertyFilterStage;\n}\n\n//#endregion\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityFormBuilderService implements IEntitySelectorStage {\n //#region ---- Services & Dependencies ----\n\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly deviceService = inject(AXPDeviceService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n entity(fullName: string): IInterfaceSelectorStage {\n return new InterfaceSelector(this.entityRegistry, this.layoutBuilder, this.deviceService, fullName, this);\n }\n\n /**\n * Fetches a record by ID for the specified entity.\n * @param fullName - Entity full name in \"module.entity\" format\n * @param id - Record ID to fetch\n * @returns Promise resolving to the record data, or empty object if not found\n */\n async getRecordById(fullName: string, id: string): Promise<Record<string, any>> {\n if (!id) {\n throw new Error('Record id is required.');\n }\n\n const { moduleName, entityName } = parseEntityFullName(fullName);\n const entity = await this.entityRegistry.resolve(moduleName, entityName);\n\n try {\n const byKeyFn = entity?.queries?.byKey?.execute as unknown as (id: string) => Promise<any>;\n if (typeof byKeyFn === 'function') {\n return (await byKeyFn(id)) ?? {};\n }\n } catch {\n // Return empty object if fetch fails\n }\n\n return {};\n }\n\n //#endregion\n}\n\n//#region ---- Builders ----\n\nclass InterfaceSelector implements IInterfaceSelectorStage {\n constructor(\n private readonly entityRegistry: AXPEntityDefinitionRegistryService,\n private readonly layoutBuilder: AXPLayoutBuilderService,\n private readonly deviceService: AXPDeviceService,\n private readonly fullName: string,\n private readonly formBuilderService: AXPEntityFormBuilderService,\n ) {}\n\n create(initialData?: any): IPropertyFilterStage {\n const filter = new PropertyFilter(\n this.entityRegistry,\n this.layoutBuilder,\n this.deviceService,\n this.fullName,\n 'create',\n undefined,\n this.formBuilderService,\n );\n if (initialData) {\n filter.context(initialData);\n }\n return filter;\n }\n\n update(data: string | Record<string, any>): IPropertyFilterStage {\n let recordId: string | undefined;\n let initialData: any = {};\n\n if (typeof data === 'string') {\n recordId = data;\n } else if (data && typeof data === 'object') {\n initialData = data;\n recordId = data['id'] || data['_id'];\n }\n\n const filter = new PropertyFilter(\n this.entityRegistry,\n this.layoutBuilder,\n this.deviceService,\n this.fullName,\n 'update',\n recordId,\n this.formBuilderService,\n );\n\n return filter;\n }\n\n single(data: string | Record<string, any>): IPropertyFilterStage {\n let recordId: string | undefined;\n let initialData: any = {};\n\n if (typeof data === 'string') {\n recordId = data;\n } else if (data && typeof data === 'object') {\n initialData = data;\n recordId = data['id'] || data['_id'];\n }\n\n const filter = new PropertyFilter(\n this.entityRegistry,\n this.layoutBuilder,\n this.deviceService,\n this.fullName,\n 'single',\n recordId,\n this.formBuilderService,\n );\n\n if (Object.keys(initialData).length > 0) {\n filter.context(initialData);\n }\n\n return filter;\n }\n}\n\nclass PropertyFilter implements IPropertyFilterStage {\n private includeList: Set<string> | null = null;\n private excludeList: Set<string> | null = null;\n private readonlyList: Set<string> | null = null;\n private overrideTitle?: string;\n private initialContext: any = {};\n private recordId?: string;\n private externalActionsDelegate?: (a: IActionBuilder) => void;\n private onActionHandler?: (dialogRef: AXPDialogRef) => any | Promise<any>;\n private extraFieldsByGroup = new Map<\n string,\n Array<{ path: string; delegate?: (field: CompatFormFieldBuilder) => void }>\n >();\n private externalSize?: AXPopupSizeType;\n private externalMode?: 'edit' | 'view';\n constructor(\n private readonly entityRegistry: AXPEntityDefinitionRegistryService,\n private readonly layoutBuilder: AXPLayoutBuilderService,\n private readonly deviceService: AXPDeviceService,\n private readonly fullName: string,\n private readonly kind: EntityInterfaceKind,\n recordId?: string,\n private readonly formBuilderService?: AXPEntityFormBuilderService,\n ) {\n this.recordId = recordId;\n }\n\n include(...propertyNames: string[]): IPropertyFilterStage {\n this.includeList = new Set(propertyNames.filter(Boolean));\n return this;\n }\n\n exclude(...propertyNames: string[]): IPropertyFilterStage {\n // Ignored when include list is present\n if (!this.includeList) {\n this.excludeList = new Set(propertyNames.filter(Boolean));\n }\n return this;\n }\n\n readonlyProperties(...propertyNames: string[]): IPropertyFilterStage {\n this.readonlyList = new Set(propertyNames.filter(Boolean));\n return this;\n }\n\n title(text: string): IPropertyFilterStage {\n this.overrideTitle = text;\n return this;\n }\n\n context(context: any): IPropertyFilterStage {\n this.initialContext = context ?? {};\n return this;\n }\n\n size(size: AXPopupSizeType): IPropertyFilterStage {\n this.externalSize = size;\n return this;\n }\n\n actions(delegate: (a: IActionBuilder) => void): IPropertyFilterStage {\n this.externalActionsDelegate = delegate;\n return this;\n }\n\n onAction<T = any>(\n handler: (dialogRef: AXPDialogRef) => T | Promise<T>,\n ): IPropertyFilterStage & { show(): Promise<T> } {\n this.onActionHandler = handler as (dialogRef: AXPDialogRef) => any | Promise<any>;\n return this;\n }\n\n field(groupId: string, path: string, delegate?: (field: CompatFormFieldBuilder) => void): IPropertyFilterStage {\n const list = this.extraFieldsByGroup.get(groupId) ?? [];\n list.push({ path, delegate });\n\n this.extraFieldsByGroup.set(groupId, list);\n return this;\n }\n\n mode(mode: 'edit' | 'view'): IPropertyFilterStage {\n this.externalMode = mode;\n return this;\n }\n\n async build(): Promise<AXPWidgetNode> {\n const dialog = await this.buildDialog();\n return dialog.build();\n }\n\n async show(): Promise<AXPDialogRef | any> {\n const dialog = await this.buildDialog();\n\n // Context: load record by id for update/single and merge with provided context (context overrides)\n let baseContext: any = {};\n\n // Only fetch by key if we don't already have initial data\n const hasInitialData = this.initialContext && Object.keys(this.initialContext).length > 0;\n\n if ((this.kind === 'update' || this.kind === 'single') && !hasInitialData) {\n const id = this.recordId;\n if (!id) {\n throw new Error(`Record id is required for ${this.kind}().`);\n }\n\n // Use the public method if service is available, otherwise fallback to direct entity access\n if (this.formBuilderService) {\n baseContext = await this.formBuilderService.getRecordById(this.fullName, id);\n } else {\n // Fallback to original implementation if service is not available\n const { moduleName, entityName } = parseEntityFullName(this.fullName);\n const entity = await this.entityRegistry.resolve(moduleName, entityName);\n\n try {\n const byKeyFn = entity?.queries?.byKey?.execute as unknown as (id: string) => Promise<any>;\n if (typeof byKeyFn === 'function') {\n baseContext = (await byKeyFn(id)) ?? {};\n }\n } catch {\n baseContext = {};\n }\n }\n }\n\n const effectiveContext = merge({}, baseContext, this.initialContext);\n dialog.setContext(effectiveContext);\n\n return await dialog.show();\n }\n\n /**\n * Builds the dialog node structure without showing it.\n * This method is shared by both build() and show() methods.\n */\n private async buildDialog() {\n const { moduleName, entityName } = parseEntityFullName(this.fullName);\n const entity = await this.entityRegistry.resolve(moduleName, entityName);\n\n // Select the appropriate interface based on kind\n const iface = getEntityInterface(entity, this.kind);\n\n if (!iface) {\n throw new Error(`Entity interface not found: ${entity.module}.${entity.name}.interfaces.master.${this.kind}`);\n }\n\n // Title and size\n const title = this.overrideTitle || entity.formats?.individual || entity.title || `${entity.module}.${entity.name}`;\n\n // Build content using LayoutBuilder\n const mainSections = (iface.sections ?? []).slice();\n const mainProps = (entity.properties ?? []).slice();\n const mainViewLayoutMap = buildViewLayoutMap(iface.properties ?? []);\n const allowedNames = this.computeAllowedNames(mainProps.map((p) => p.name));\n\n // Collect all groups for title lookup (main + merged)\n const allGroups = [...(entity.groups ?? [])];\n\n // Process merge-detail related entities\n const mergeDetailEntities = (entity.relatedEntities ?? []).filter(\n (re) => !re.hidden && re.layout?.type === 'merge-detail',\n );\n\n // Build merged properties map by section\n const mergedPropsBySection = new Map<string, MergedEntityProperty[]>();\n\n // Initialize with main entity properties\n for (const prop of mainProps) {\n if (!allowedNames.has(prop.name) || !mainViewLayoutMap.has(prop.name)) continue;\n const groupId = prop.groupId ?? 'default';\n if (!mergedPropsBySection.has(groupId)) {\n mergedPropsBySection.set(groupId, []);\n }\n const viewLayout = mainViewLayoutMap.get(prop.name);\n const mergedProp: MergedEntityProperty = {\n ...prop,\n __layout: viewLayout?.layout,\n __order: viewLayout?.layout?.order,\n };\n if (this.readonlyList?.has(prop.name)) {\n mergedProp.schema = { ...(mergedProp.schema ?? {}), readonly: true };\n }\n mergedPropsBySection.get(groupId)!.push(mergedProp);\n }\n\n // Track extra sections from related entities\n const extraSections: MergedSection[] = [];\n const mainSectionIds = new Set(mainSections.map((s) => s.id));\n\n // Group related entities by position for ordered processing\n const beforeEntities = mergeDetailEntities\n .filter((re) => re.layout?.position === 'before')\n .sort((a, b) => (a.layout?.order ?? Infinity) - (b.layout?.order ?? Infinity));\n const middleEntities = mergeDetailEntities.filter((re) => !re.layout?.position || re.layout?.position === 'middle');\n const afterEntities = mergeDetailEntities\n .filter((re) => re.layout?.position === 'after')\n .sort((a, b) => (a.layout?.order ?? Infinity) - (b.layout?.order ?? Infinity));\n\n // Process related entities in order: before, middle, after\n const processRelatedEntity = async (relatedEntity: {\n entity: string;\n layout?: { type?: string; order?: number; position?: 'before' | 'middle' | 'after' };\n persistence?: { dataPath?: string };\n excludeProperties?: string[];\n }) => {\n try {\n const [relModuleName, relEntityName] = relatedEntity.entity.split('.');\n const relEntityDef = await this.entityRegistry.resolve(relModuleName, relEntityName);\n if (!relEntityDef) return;\n\n // Get the matching interface for the related entity\n const relIface = getEntityInterface(relEntityDef, this.kind);\n if (!relIface) return;\n\n // Merge related groups into allGroups (avoid duplicates)\n for (const rg of relEntityDef.groups ?? []) {\n if (!allGroups.some((g) => g.id === rg.id)) {\n allGroups.push(rg);\n }\n }\n\n // Compute dataPath for field prefixing\n const dataPath = relatedEntity.persistence?.dataPath || relEntityName;\n const position = relatedEntity.layout?.position ?? 'middle';\n const entityOrder = relatedEntity.layout?.order ?? Infinity;\n\n // Build view layout map for related entity\n const relViewLayoutMap = buildViewLayoutMap(relIface.properties ?? []);\n\n // Process each section in related interface\n for (const relSection of relIface.sections ?? []) {\n const sectionId = relSection.id;\n const sectionHasMainEquivalent = mainSectionIds.has(sectionId);\n\n // Get properties for this section\n const excludeProperties =\n relatedEntity?.excludeProperties && relatedEntity.excludeProperties.length > 0\n ? new Set(relatedEntity.excludeProperties)\n : undefined;\n const sectionProps: MergedEntityProperty[] = [];\n for (const prop of relEntityDef.properties ?? []) {\n if (prop.groupId !== sectionId) continue;\n if (excludeProperties?.has(prop.name)) continue;\n if (!relViewLayoutMap.has(prop.name)) continue;\n\n const viewLayout = relViewLayoutMap.get(prop.name);\n\n // Clone property and add merge-detail metadata\n const mergedProp: MergedEntityProperty = {\n ...prop,\n __dataPath: dataPath,\n __layout: viewLayout?.layout,\n __order: viewLayout?.layout?.order,\n };\n\n // Apply generic propertyOverrides extension (e.g. for identifier defaultValue on nested paths)\n const override = (entity as any)?.extensions?.propertyOverrides?.[`${dataPath}.${prop.name}`];\n if (override?.schema) {\n mergedProp.schema = { ...(mergedProp.schema ?? {}), ...override.schema };\n }\n\n // Prefix expressions in schema options\n if (mergedProp.schema?.interface?.options) {\n mergedProp.schema = {\n ...mergedProp.schema,\n interface: {\n ...mergedProp.schema.interface,\n options: prefixExpressions(mergedProp.schema.interface.options, dataPath),\n },\n };\n }\n\n // Prefix expressions in visible/readonly if they are strings\n if (typeof mergedProp.schema?.visible === 'string') {\n mergedProp.schema = {\n ...mergedProp.schema,\n visible: prefixExpressions(mergedProp.schema.visible, dataPath),\n };\n }\n if (typeof mergedProp.schema?.readonly === 'string') {\n mergedProp.schema = {\n ...mergedProp.schema,\n readonly: prefixExpressions(mergedProp.schema.readonly, dataPath),\n };\n }\n\n sectionProps.push(mergedProp);\n }\n\n if (sectionProps.length === 0) continue;\n\n if (sectionHasMainEquivalent) {\n // Merge into existing section\n const existing = mergedPropsBySection.get(sectionId) ?? [];\n if (position === 'before') {\n mergedPropsBySection.set(sectionId, [...sectionProps, ...existing]);\n } else {\n mergedPropsBySection.set(sectionId, [...existing, ...sectionProps]);\n }\n } else {\n // Create new section entry\n if (!mergedPropsBySection.has(sectionId)) {\n mergedPropsBySection.set(sectionId, []);\n }\n const existing = mergedPropsBySection.get(sectionId) ?? [];\n if (position === 'before') {\n mergedPropsBySection.set(sectionId, [...sectionProps, ...existing]);\n } else {\n mergedPropsBySection.set(sectionId, [...existing, ...sectionProps]);\n }\n\n // Track as extra section if not already tracked\n if (!extraSections.some((s) => s.id === sectionId)) {\n extraSections.push({\n ...relSection,\n __entityOrder: entityOrder,\n __position: position,\n });\n }\n }\n }\n } catch {\n // Silently ignore failures to resolve or merge\n }\n };\n\n // Process in order\n for (const re of beforeEntities) await processRelatedEntity(re);\n for (const re of middleEntities) await processRelatedEntity(re);\n for (const re of afterEntities) await processRelatedEntity(re);\n\n // Build final sorted sections list\n const finalSections = sortMergedSections(mainSections, extraSections, mainSectionIds);\n\n // Calculate recommended dialog size based on form complexity (using merged data)\n const allMergedProps = Array.from(mergedPropsBySection.values()).flat();\n const mergedViewLayoutMap = new Map<string, AXPEntityPropertyView>();\n for (const prop of allMergedProps) {\n if ((prop as MergedEntityProperty).__layout) {\n mergedViewLayoutMap.set(prop.name, { name: prop.name, layout: (prop as MergedEntityProperty).__layout });\n }\n }\n const calculatedSize = this.calculateRecommendedDialogSize(\n finalSections,\n allMergedProps,\n mergedViewLayoutMap,\n new Set(allMergedProps.map((p) => p.name)),\n );\n\n const renderedSections = finalSections.filter((section) => {\n const sectionProps = mergedPropsBySection.get(section.id) ?? [];\n const extraFields = this.extraFieldsByGroup.get(section.id) ?? [];\n return sectionProps.length > 0 || extraFields.length > 0;\n });\n const sectionScaleFactors = normalizeLayoutFillRowGaps(\n renderedSections,\n (s) => s.layout,\n (s) => s.id,\n );\n\n const dialog = this.layoutBuilder.create().dialog((d) => {\n d.setTitle(title);\n d.setSize(this.externalSize ?? calculatedSize);\n d.setCloseButton(true);\n d.content((layout) => {\n // Default mode: 'view' for single, 'edit' for create/update\n const defaultMode: 'edit' | 'view' = this.kind === 'single' ? 'view' : 'edit';\n layout.mode(this.externalMode ?? defaultMode);\n\n // Wrap content in a grid container to support colSpan layouts\n layout.grid((grid) => {\n // Configure grid with 12 columns (like Bootstrap)\n grid.setColumns(12);\n grid.setGap('1rem');\n\n for (const section of finalSections) {\n const groupId = section.id;\n const sectionProps = mergedPropsBySection.get(groupId) ?? [];\n const extraFields = this.extraFieldsByGroup.get(groupId) ?? [];\n\n if (sectionProps.length === 0 && extraFields.length === 0) {\n continue;\n }\n\n const sectionLayout = section.layout ?? undefined;\n grid.item(sectionLayout, (fs) => {\n fs.setLook('fieldset');\n fs.setTitle((getGroupTitleFromList(allGroups, groupId) || groupId) as string);\n fs.setCols(12);\n\n // Sort properties by order within section\n const orderedProps = [...sectionProps].sort((a, b) => {\n const aOrder = (a as MergedEntityProperty).__order ?? Infinity;\n const bOrder = (b as MergedEntityProperty).__order ?? Infinity;\n return aOrder - bOrder;\n });\n applySectionScaleToProperties(\n orderedProps as MergedEntityProperty[],\n sectionScaleFactors.get(groupId),\n );\n normalizeLayoutFillRowGaps(orderedProps, (p) => (p as MergedEntityProperty).__layout);\n\n for (const prop of orderedProps) {\n const mergedProp = prop as MergedEntityProperty;\n const dataPath = mergedProp.__dataPath;\n const fieldPath = dataPath ? `${dataPath}.${prop.name}` : prop.name;\n\n fs.formField(prop.title as string, (field) => {\n field.path(fieldPath);\n\n if (prop.schema?.visible !== undefined) {\n field.visible(prop.schema?.visible);\n }\n if (prop.schema?.readonly !== undefined) {\n field.readonly(prop.schema.readonly);\n }\n if (prop.schema?.defaultValue !== undefined) {\n field.defaultValue(prop.schema.defaultValue);\n }\n\n const fieldLayout = toFieldLayout(mergedProp.__layout);\n if (fieldLayout) {\n field.layout(fieldLayout);\n }\n\n if ((fieldLayout as any)?.label?.visible === false) {\n field.setShowLabel(false);\n }\n\n const widgetType = prop.schema?.interface?.type || '';\n const widgetOptions = buildWidgetOptions(prop);\n const extendedProperties = buildWidgetExtendedProperties(prop);\n\n const finalExtendedProps = dataPath\n ? prefixExpressions(extendedProperties, dataPath)\n : extendedProperties;\n\n field.customWidget(widgetType, { ...widgetOptions, ...finalExtendedProps });\n });\n }\n\n for (const extra of extraFields) {\n const label = extra.path?.split('.').slice(-1)[0] || extra.path;\n fs.formField(label, (f) => {\n const legacy = toCompatFormFieldBuilder(f);\n legacy.path(extra.path);\n extra.delegate?.(legacy);\n });\n }\n });\n }\n });\n });\n\n // Actions: external if provided, otherwise default based on kind\n if (this.externalActionsDelegate) {\n d.setActions(this.externalActionsDelegate);\n } else if (this.kind === 'single') {\n // For single (read-only view), only show cancel/close button\n d.setActions((a) => a.cancel());\n } else {\n // For create/update, show cancel + submit\n d.setActions((a) => a.cancel().submit());\n }\n\n if (this.onActionHandler) {\n d.onAction(this.onActionHandler);\n }\n });\n\n return dialog;\n }\n\n private computeAllowedNames(allNames: string[]): Set<string> {\n if (this.includeList && this.includeList.size > 0) {\n return new Set(allNames.filter((n) => this.includeList!.has(n)));\n }\n if (this.excludeList && this.excludeList.size > 0) {\n return new Set(allNames.filter((n) => !this.excludeList!.has(n)));\n }\n return new Set(allNames);\n }\n\n /**\n * Calculates the recommended dialog size based on form complexity.\n * Considers number of sections, properties, and average field width.\n *\n * @param sections - Interface sections to display\n * @param entityProps - All entity properties\n * @param nameToViewLayout - Map of property names to their view layout configurations\n * @param allowedNames - Set of property names that should be displayed (after filtering)\n * @returns Recommended dialog size ('full' | 'lg' | 'md')\n */\n private calculateRecommendedDialogSize(\n sections: any[],\n entityProps: AXPEntityProperty[],\n nameToViewLayout: Map<string, AXPEntityPropertyView>,\n allowedNames: Set<string>,\n ): AXPopupSizeType {\n // Mobile devices always use full screen\n if (this.deviceService.isMobileDevice()) {\n return 'full';\n }\n\n // Calculate number of visible properties\n const visibleProperties = entityProps.filter((p) => allowedNames.has(p.name) && nameToViewLayout.has(p.name));\n const visiblePropertyCount = visibleProperties.length;\n\n // Calculate average colSpan to determine field width\n // colSpan determines how many columns a field occupies in a 12-column grid\n // Examples:\n // - colSpan = 12 → 1 field per row (full width)\n // - colSpan = 6 → 2 fields per row (half width each)\n // - colSpan = 4 → 3 fields per row (one-third width each)\n // - colSpan = 3 → 4 fields per row (one-quarter width each)\n let totalColSpan = 0;\n let propertiesWithLayout = 0;\n let hasColSpan3 = false; // Track if any field has colSpan = 3\n\n for (const prop of visibleProperties) {\n const viewLayout = nameToViewLayout.get(prop.name);\n const positions = viewLayout?.layout?.positions;\n\n if (positions) {\n // Get colSpan from the largest available breakpoint\n const colSpan =\n positions.lg?.colSpan ?? positions.xl?.colSpan ?? positions.md?.colSpan ?? positions.sm?.colSpan ?? 12; // default: full width\n\n totalColSpan += colSpan;\n propertiesWithLayout++;\n\n // Check if this field has colSpan = 3\n if (colSpan <= 3) {\n hasColSpan3 = true;\n }\n } else {\n // If no layout defined, assume full width (12 columns)\n totalColSpan += 12;\n propertiesWithLayout++;\n }\n }\n\n // Average colSpan: lower value = more fields per row, higher value = fewer fields per row\n const avgColSpan = propertiesWithLayout > 0 ? totalColSpan / propertiesWithLayout : 12;\n\n // Decision logic:\n // - 10+ properties → complex form → needs 'lg'\n // - avgColSpan <= 4 → 3+ fields per row → needs 'lg' (more horizontal space needed)\n // - hasColSpan3 && avgColSpan <= 6 → row can sum to 12 with colSpan=3 (e.g., 9+3, 5+4+3, etc.) → needs 'lg'\n // - Otherwise → 'md' is sufficient\n\n if (visiblePropertyCount >= 10) {\n return 'lg';\n }\n\n // If average colSpan <= 4, it means we can fit 3+ fields per row (12/4 = 3)\n // This requires more horizontal space, so use 'lg'\n if (avgColSpan <= 4) {\n return 'lg';\n }\n\n // If there's a field with colSpan = 3 and avgColSpan <= 6,\n // it means rows can sum to 12 with multiple fields including the colSpan=3 field\n // (e.g., 9+3=12, 5+4+3=12, 4+3+3+2=12, etc.)\n // This needs 'lg' for better horizontal space to accommodate the layout\n if (hasColSpan3 && avgColSpan <= 6) {\n return 'lg';\n }\n\n // For other cases (including full-width fields), 'md' is sufficient\n return 'md';\n }\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nconst LAYOUT_BREAKPOINTS = ['sm', 'md', 'lg', 'xl', 'xxl', 'xxxl'] as const;\nconst GRID_COLUMNS = 12;\n\ntype LayoutWithPositions = { positions?: Record<string, { colSpan?: number }> } | null | undefined;\n\nfunction getColSpanAt(layout: LayoutWithPositions, breakpoint: string): number {\n return layout?.positions?.[breakpoint]?.colSpan ?? GRID_COLUMNS;\n}\n\nfunction setColSpanAt(layout: LayoutWithPositions, breakpoint: string, colSpan: number): void {\n if (!layout) return;\n const positions = layout['positions'] ?? {};\n if (!layout['positions']) (layout as Record<string, unknown>)['positions'] = positions;\n const placement = positions[breakpoint] ?? {};\n if (!positions[breakpoint]) (positions as Record<string, unknown>)[breakpoint] = placement;\n (placement as { colSpan?: number }).colSpan = colSpan;\n}\n\n/** Scale factors per breakpoint for sections that were expanded to fill row gaps */\ntype SectionScaleFactors = Map<string, Record<string, number>>;\n\n/**\n * Ensures each row in a 12-column grid is filled: if the last item in a row has\n * colSpan < 12 and there is remaining space, its colSpan is increased to fill the row.\n * Applied per breakpoint so that property/section layouts stay consistent.\n * Use after include/exclude so that hidden items do not leave empty row gaps.\n * When getItemId is provided (e.g. for sections), returns scale factors (newColSpan/oldColSpan)\n * per breakpoint for each expanded item so that child properties can be scaled proportionally.\n */\nfunction normalizeLayoutFillRowGaps<T>(\n items: T[],\n getLayout: (item: T) => LayoutWithPositions,\n getItemId?: (item: T) => string | undefined,\n): SectionScaleFactors {\n const scaleFactors: SectionScaleFactors = new Map();\n if (items.length === 0) return scaleFactors;\n\n for (const breakpoint of LAYOUT_BREAKPOINTS) {\n const colSpans = items.map((item) => getColSpanAt(getLayout(item), breakpoint));\n let i = 0;\n while (i < colSpans.length) {\n let rowSum = 0;\n const rowStart = i;\n while (i < colSpans.length && rowSum + colSpans[i] <= GRID_COLUMNS) {\n rowSum += colSpans[i];\n i++;\n }\n if (i === rowStart) {\n rowSum = colSpans[i];\n i++;\n }\n if (rowSum < GRID_COLUMNS && rowSum > 0 && i > rowStart) {\n const lastIdx = i - 1;\n const oldColSpan = colSpans[lastIdx];\n const fill = GRID_COLUMNS - rowSum;\n const newColSpan = Math.min(GRID_COLUMNS, oldColSpan + fill);\n const layout = getLayout(items[lastIdx]);\n if (layout) {\n setColSpanAt(layout, breakpoint, newColSpan);\n }\n if (getItemId && oldColSpan > 0) {\n const id = getItemId(items[lastIdx]);\n if (id) {\n const factors = scaleFactors.get(id) ?? {};\n factors[breakpoint] = newColSpan / oldColSpan;\n scaleFactors.set(id, factors);\n }\n }\n }\n }\n }\n return scaleFactors;\n}\n\n/**\n * Scales every property's colSpan inside a section by the section's scale factors\n * (e.g. when the section was expanded to fill a row). Each breakpoint is scaled\n * and capped at GRID_COLUMNS.\n */\nfunction applySectionScaleToProperties(\n properties: MergedEntityProperty[],\n sectionScaleFactors: Record<string, number> | undefined,\n): void {\n if (!sectionScaleFactors || Object.keys(sectionScaleFactors).length === 0) return;\n\n for (const prop of properties) {\n const layout = prop.__layout;\n if (!layout?.['positions']) continue;\n const positions = layout['positions'] as Record<string, { colSpan?: number }>;\n for (const breakpoint of LAYOUT_BREAKPOINTS) {\n const factor = sectionScaleFactors[breakpoint];\n if (factor == null) continue;\n const placement = positions[breakpoint];\n if (!placement || placement.colSpan == null) continue;\n const scaled = Math.min(GRID_COLUMNS, Math.round(placement.colSpan * factor));\n placement.colSpan = scaled;\n }\n }\n}\n\n// No extra action builders to keep API identical to dynamic-form-builder\n\nfunction parseEntityFullName(fullName: string): { moduleName: string; entityName: string } {\n const [moduleName, entityName] = (fullName || '').split('.');\n if (!moduleName || !entityName) {\n throw new Error(`Invalid entity full name: \"${fullName}\"`);\n }\n return { moduleName, entityName };\n}\n\nfunction buildViewLayoutMap(views: AXPEntityPropertyView[]): Map<string, AXPEntityPropertyView> {\n const map = new Map<string, AXPEntityPropertyView>();\n for (const v of views || []) {\n if (v?.name) {\n map.set(v.name, v);\n }\n }\n return map;\n}\n\nfunction orderProperties(props: AXPEntityProperty[], viewProps: AXPEntityPropertyView[]): AXPEntityProperty[] {\n if (!viewProps || viewProps.length === 0) {\n return props;\n }\n\n // Build a map of property name to its order value\n // Use layout.order if present, otherwise use array index\n const orderIndex = new Map<string, number>();\n viewProps.forEach((vp, idx) => {\n const order = vp.layout?.order ?? idx;\n orderIndex.set(vp.name, order);\n });\n const x = [...props].sort((a, b) => {\n const ai = orderIndex.has(a.name) ? (orderIndex.get(a.name) as number) : Number.MAX_SAFE_INTEGER;\n const bi = orderIndex.has(b.name) ? (orderIndex.get(b.name) as number) : Number.MAX_SAFE_INTEGER;\n if (ai !== bi) return ai - bi;\n return 0;\n });\n\n return x;\n}\n\nfunction buildFieldPath(prop: AXPEntityProperty, viewProps: AXPEntityPropertyView[]): string {\n const vp = (viewProps || []).find((x) => x.name === prop.name);\n const prefix = vp?.dataPath ? `${vp.dataPath}.` : '';\n return `${prefix}${prop.name}`;\n}\n\nfunction toFieldLayout(layout?: AXPEntityPropertyView['layout']): Partial<AXPGridLayoutOptions> | undefined {\n const positions = layout?.positions;\n if (!positions) return undefined;\n\n // Check if any position is defined\n const hasPositions = positions.sm || positions.md || positions.lg || positions.xl || positions.xxl || positions.xxxl;\n if (!hasPositions) return undefined;\n\n // Return the layout in the correct AXPGridLayoutOptions format\n return {\n ...layout,\n positions: {\n sm: positions.sm,\n md: positions.md,\n lg: positions.lg,\n xl: positions.xl,\n xxl: positions.xxl,\n xxxl: positions.xxxl,\n },\n };\n}\n\nfunction buildWidgetOptions(prop: AXPEntityProperty): Record<string, any> {\n const base = prop.schema?.interface?.options || {};\n const validations = (prop.validations || []).map((c: any) => ({\n rule: c.rule,\n message: c.message,\n options: c.options,\n }));\n return {\n ...base,\n validations,\n };\n}\n\n/**\n * Extracts extended widget node properties from entity property schema\n * These properties include triggers, meta, valueTransforms, and other AXPWidgetNode properties\n * that are not part of the standard widget options\n * Note: mode is not included here as it's handled separately in the field builder\n */\nfunction buildWidgetExtendedProperties(prop: AXPEntityProperty): AXPWidgetNodeExtendedProperties | undefined {\n const widget = prop.schema?.interface;\n if (!widget) {\n return undefined;\n }\n\n const extended: AXPWidgetNodeExtendedProperties = {};\n\n // Extract children if present\n extended.children = prop.schema.interface?.children;\n\n // Extract triggers if present\n if (widget.triggers !== undefined) {\n extended.triggers = widget.triggers as any;\n }\n\n // Extract valueTransforms if present\n if (widget.valueTransforms !== undefined) {\n extended.valueTransforms = widget.valueTransforms;\n }\n\n // Extract meta if present (may be in options or directly in widget)\n if ((widget as any).meta !== undefined) {\n extended.meta = (widget as any).meta;\n }\n\n // Return undefined if no extended properties were found\n if (Object.keys(extended).length === 0) {\n return undefined;\n }\n\n return extended;\n}\n\nfunction getGroupTitle(entity: AXPEntity, groupId: string): string | undefined {\n const g = (entity.groups || []).find((x) => x.id === groupId);\n return g?.title;\n}\n\nfunction getGroupTitleFromList(groups: { id: string; title?: string }[], groupId: string): string | undefined {\n const g = groups.find((x) => x.id === groupId);\n return g?.title;\n}\n\n/**\n * Gets the appropriate interface from an entity based on the kind\n */\nfunction getEntityInterface(entity: AXPEntity, kind: EntityInterfaceKind) {\n if (kind === 'create') {\n return entity?.interfaces?.master?.create;\n } else if (kind === 'update') {\n return entity?.interfaces?.master?.update;\n } else {\n return entity?.interfaces?.master?.single;\n }\n}\n\n// Backward compatibility adapter for external callers providing the old dynamic-form field builder delegate\ntype CompatFormFieldBuilder = {\n path(path: string): any;\n layout(config: any): any;\n visible(condition: boolean | string): any;\n readonly(condition: boolean | string): any;\n customWidget(type: string, options?: any): any;\n} & Partial<IFormFieldBuilder>;\n\nfunction toCompatFormFieldBuilder(field: IFormFieldBuilder): CompatFormFieldBuilder {\n return {\n ...field,\n path: (p: string) => field.path(p),\n layout: (c: any) => field.layout(c as any),\n visible: (cond: boolean | string) => field.visible(cond as any),\n readonly: (cond: boolean | string) => field.readonly(cond as any),\n customWidget: (type: string, options?: any) => field.customWidget(type, options),\n mode: (mode: 'edit' | 'view') => field.mode(mode as any),\n } as CompatFormFieldBuilder;\n}\n\n/**\n * Prefixes context.eval() expressions and expose targets with a dataPath.\n * - Transforms `context.eval(\"field\")` to `context.eval(\"dataPath.field\")`\n * - Transforms expose `target: \"field\"` to `target: \"dataPath.field\"`\n * Recursively processes objects and arrays.\n */\nfunction prefixExpressions<T>(value: T, dataPath: string, parentKey?: string): T {\n if (!dataPath) return value;\n\n if (typeof value === 'string') {\n // Special handling for 'target' key in expose arrays - prefix the path directly\n if (parentKey === 'target') {\n // Don't prefix if already prefixed or if it starts with $ (absolute path)\n if (value.startsWith(dataPath + '.') || value.startsWith('$')) {\n return value as T;\n }\n return `${dataPath}.${value}` as T;\n }\n\n // Match context.eval(\"...\") or context.eval('...')\n return value.replace(/context\\.eval\\([\"']([^\"']+)[\"']\\)/g, (match, path) => {\n // Don't prefix if already prefixed or if it's an absolute path\n if (path.startsWith(dataPath + '.') || path.startsWith('$')) {\n return match;\n }\n return `context.eval(\"${dataPath}.${path}\")`;\n }) as T;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => prefixExpressions(item, dataPath, parentKey)) as T;\n }\n\n if (value !== null && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n result[key] = prefixExpressions((value as Record<string, unknown>)[key], dataPath, key);\n }\n return result as T;\n }\n\n return value;\n}\n\n/**\n * Extended property type with merge-detail metadata\n */\ninterface MergedEntityProperty extends AXPEntityProperty {\n __dataPath?: string;\n __layout?: AXPEntityPropertyView['layout'];\n __order?: number;\n}\n\n/**\n * Section with ordering metadata for merge-detail\n */\ninterface MergedSection extends AXPEntitySectionView {\n __entityOrder?: number;\n __position?: 'before' | 'middle' | 'after';\n}\n\n/**\n * Groups properties by their groupId (section)\n */\nfunction groupPropertiesBySection(properties: AXPEntityProperty[]): Map<string, AXPEntityProperty[]> {\n const map = new Map<string, AXPEntityProperty[]>();\n for (const prop of properties) {\n const groupId = prop.groupId ?? 'default';\n if (!map.has(groupId)) {\n map.set(groupId, []);\n }\n map.get(groupId)!.push(prop);\n }\n return map;\n}\n\n/**\n * Sorts sections by position and order:\n * 1. Before sections (sorted by entityOrder, then section order)\n * 2. Middle sections (main + middle-only, sorted by effective order while preserving original index for stable sort)\n * 3. After sections (sorted by entityOrder, then section order)\n */\nfunction sortMergedSections(\n mainSections: AXPEntitySectionView[],\n extraSections: MergedSection[],\n mainSectionIds: Set<string>,\n): AXPEntitySectionView[] {\n const beforeSections = extraSections\n .filter((s) => s.__position === 'before' && !mainSectionIds.has(s.id))\n .sort((a, b) => {\n const entityOrderDiff = (a.__entityOrder ?? Infinity) - (b.__entityOrder ?? Infinity);\n if (entityOrderDiff !== 0) return entityOrderDiff;\n return (a.order ?? 0) - (b.order ?? 0);\n });\n\n const middleSections = extraSections.filter((s) => s.__position === 'middle' && !mainSectionIds.has(s.id));\n\n const afterSections = extraSections\n .filter((s) => s.__position === 'after' && !mainSectionIds.has(s.id))\n .sort((a, b) => {\n const entityOrderDiff = (a.__entityOrder ?? Infinity) - (b.__entityOrder ?? Infinity);\n if (entityOrderDiff !== 0) return entityOrderDiff;\n return (a.order ?? 0) - (b.order ?? 0);\n });\n\n // Middle block: main sections + middle-only sections\n // Sort by order (undefined order is treated as 0)\n const middleBlock = [...mainSections, ...middleSections];\n const sortedMiddleBlock = middleBlock.sort((a, b) => {\n // Treat undefined order as 0 for sorting\n const aOrder = a.order ?? 0;\n const bOrder = b.order ?? 0;\n return aOrder - bOrder;\n });\n\n return [...beforeSections, ...sortedMiddleBlock, ...afterSections];\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\n\n//#region ---- Types ----\n\nexport interface AXPOpenEntityDetailsCommandInput {\n entity: string;\n data: { id: string };\n}\n\n//#endregion\n\n//#region ---- Entity Open Details Command ----\n\n/**\n * Generic command to open entity details view\n * Can be used by any entity to navigate to its detail page\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPOpenEntityDetailsCommand\n implements AXPCommand<AXPOpenEntityDetailsCommandInput, AXPExecuteCommandResult>\n{\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly router = inject(Router);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- Command Execution ----\n\n /**\n * Execute the command to navigate to entity details\n * @param input - Command input containing entity and data information\n */\n async execute(input: AXPOpenEntityDetailsCommandInput): Promise<AXPExecuteCommandResult> {\n const { entity, data } = input;\n\n if (!entity) {\n return {\n success: false,\n message: {\n text: 'Entity name is required for opening details view',\n },\n };\n }\n\n if (!data?.id) {\n return {\n success: false,\n message: {\n text: 'Entity ID is required for opening details view',\n },\n };\n }\n\n const [module, entityName] = entity.split('.');\n\n if (!module || !entityName) {\n return {\n success: false,\n message: {\n text: 'Entity must be in format \"ModuleName.EntityName\"',\n },\n };\n }\n\n const url = `/${this.sessionService.application?.name}/m/${module}/e/${entityName}/${data.id}/view`;\n\n // Navigate to the entity details page\n this.router.navigate([url]);\n\n return {\n success: true,\n };\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXPEntityFormBuilderService } from '../services/entity-forms/entity-form-builder.service';\nimport { AXPOpenEntityDetailsCommand } from './open-entity-details.command';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPCreateEntityCommand implements AXPCommand<any, any> {\n private entityForm = inject(AXPEntityFormBuilderService);\n private entityService = inject(AXPEntityDefinitionRegistryService);\n private toastService = inject(AXToastService);\n private translationService = inject(AXTranslationService);\n private settingsService = inject(AXPSettingsService);\n private openEntityDetailsCommand = inject(AXPOpenEntityDetailsCommand);\n\n protected context = {};\n\n async execute(input: any): Promise<AXPExecuteCommandResult<any>> {\n const enableOperationToasts = await this.settingsService.get<boolean>(AXPCommonSettings.EnableOperationToasts);\n const dialogSize = input['dialogSize'];\n const { entity, entityInfo, data, options } = input.__context__ as {\n entity: string;\n entityInfo: {\n name: string;\n module: string;\n title: string;\n parentKey: string;\n };\n data: any;\n options: any;\n metadata: any;\n };\n\n const excludeProperties = options?.excludeProperties;\n const includeProperties = options?.includeProperties;\n\n // Extract decoration and layout from options (similar to workflow)\n const decoration = options?.['decoration'];\n const layout = options?.['layout'];\n const headerTitle = decoration?.header?.title;\n const layoutSize = layout?.size;\n\n const [moduleName, entityName] = (entity || '').split('.');\n if (!moduleName || !entityName) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-identifier'),\n },\n };\n }\n const entityRef = await this.entityService.resolve(moduleName, entityName);\n\n let chain = this.entityForm.entity(`${moduleName}.${entityName}`).create(data);\n chain.actions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.create.title');\n });\n if (excludeProperties && excludeProperties.length > 0) {\n chain = chain.exclude(...excludeProperties);\n }\n if (includeProperties && includeProperties.length > 0) {\n chain = chain.include(...includeProperties);\n }\n\n // Set dialog title: use decoration.header.title if available, otherwise use entityInfo.title\n if (headerTitle) {\n chain = chain.title(headerTitle);\n } else if (entityInfo?.title) {\n const createText = await this.translationService.translateAsync('@general:actions.create.title');\n const translatedTitle = await this.translationService.translateAsync(entityInfo.title);\n chain = chain.title(`${createText} ${translatedTitle}`);\n }\n\n // Set dialog size: prioritize layout.size, then dialogSize from input\n const finalSize = layoutSize || dialogSize;\n if (finalSize) {\n chain.size(finalSize);\n }\n\n const result = await chain\n .onAction<AXPExecuteCommandResult<any>>(async (dialogRef) => {\n if (dialogRef.action() === 'cancel') {\n return { success: false };\n }\n\n const createFn = entityRef.commands?.create?.execute as\n | ((payload: any) => Promise<AXPExecuteCommandResult<any>>)\n | undefined;\n\n if (!createFn) {\n const msg = await this.translationService.translateAsync(\n '@general:messages.entity.create-command-unavailable',\n );\n if (enableOperationToasts) {\n this.toastService.show({\n color: 'danger',\n title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n content: msg,\n });\n }\n throw new Error(msg);\n }\n\n dialogRef.setLoading(true);\n try {\n const context = dialogRef.context();\n const result = await createFn(context);\n if (result) {\n return {\n success: true,\n data: result.data ?? result,\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n };\n } else {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.create-failed'),\n },\n };\n }\n } catch (e: any) {\n const errorMsg =\n e.message ?? (await this.translationService.translateAsync('@general:messages.entity.create-failed'));\n\n if (enableOperationToasts) {\n this.toastService.show({\n color: 'danger',\n title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n content: errorMsg,\n });\n }\n throw e;\n } finally {\n dialogRef.setLoading(false);\n }\n })\n .show();\n\n const commandResult = result as unknown as AXPExecuteCommandResult<any>;\n const redirectOption = options?.process?.redirect;\n const shouldRedirect =\n redirectOption !== undefined\n ? redirectOption\n : await this.settingsService.get<boolean>(AXPCommonSettings.RedirectToDetailsAfterCreate);\n if (commandResult.success && shouldRedirect && commandResult.data) {\n const createdItem = commandResult.data?.item ?? commandResult.data;\n const createdId = createdItem?.id;\n if (createdId != null) {\n await this.openEntityDetailsCommand.execute({\n entity: `${moduleName}.${entityName}`,\n data: { id: String(createdId) },\n });\n }\n }\n return commandResult;\n }\n}\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport { defineCommand } from '@acorex/platform/runtime/catalog-command-definition';\n\n/**\n * Merged into AI/tool payloads for `Entity:Create` so post-create navigation does not run from agent flows.\n * Applied in the AI module when normalizing tool arguments (not in the generic command executor).\n */\nexport const axpCreateEntityAiToolInputDefaults = {\n __context__: {\n options: {\n process: {\n redirect: false,\n },\n },\n },\n} as const satisfies Record<string, unknown>;\n\nexport const axpCreateEntityCommandDefinition = defineCommand({\n key: 'Entity:Create',\n title: 'Create entity (dialog)',\n description:\n 'AXPCreateEntityCommand reads __context__ (entity, entityInfo, data, options, metadata) and optional root dialogSize; builds AXPEntityFormBuilderService create chain with exclude/include, decoration header title, layout size; submits insert via entity form flow.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'dialogSize',\n title: 'Dialog size',\n description: 'Optional root dialogSize; layout.size from options can override.',\n interface: { name: 'text-editor' },\n },\n {\n name: '__context__',\n title: 'Command context',\n description:\n 'Required nested object: entity (Module.Entity), entityInfo { name, module, title, parentKey }, data seed, options { excludeProperties, includeProperties, decoration, layout, process { redirect } }. For AI/tool calls, defaults include options.process.redirect = false (see toolInputDefaults) to avoid navigating away after create.',\n interface: { name: 'json' },\n validations: [{ rule: 'required' }],\n },\n ],\n outcomes: {\n mode: 'dynamic',\n summary: 'Dialog submit persists entity; navigation/toast behavior per entity form builder and settings.',\n derivesFrom: 'AXPExecuteCommandResult<any> from entity form chain and AXPOpenEntityDetailsCommand',\n },\n ai: {\n shortDescription:\n 'Opens create dialog with pre-filled data; execution waits until the user submits or cancels, then returns—use for human-confirmed inserts into mock storage.',\n usage: {\n whenToUse: [\n 'Adding a row when the user should review or edit values before save; same entity create pipeline as the UI (storage middlewares apply on submit).',\n ],\n avoidWhen: [\n 'Non-interactive headless insert—ConnectivityMock:EntityStorage:Insert is disabled; there is no silent insert tool in this catalog.',\n ],\n followUpTools: ['PlatformManagement:ListRegisteredEntities', 'ConnectivityMock:EntityStorage:Query'],\n },\n tags: ['entity', 'create', 'form', 'dialog', 'human-in-the-loop', 'mock', 'entity-storage', 'wait-user'],\n toolInputDefaults: { ...axpCreateEntityAiToolInputDefaults },\n },\n});\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPBroadcastEventService, AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXPEntityFormBuilderService } from '../services/entity-forms/entity-form-builder.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPUpdateEntityCommand implements AXPCommand<any, any> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityForm = inject(AXPEntityFormBuilderService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly entityService = inject(AXPEntityDefinitionRegistryService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly eventService = inject(AXPBroadcastEventService);\n\n //#endregion\n\n //#region ---- Command Execution ----\n\n async execute(input: any): Promise<AXPExecuteCommandResult<any>> {\n const enableOperationToasts = await this.settingsService.get<boolean>(AXPCommonSettings.EnableOperationToasts);\n const dialogSize = input['dialogSize'];\n const { entity, entityInfo, data, options } = input.__context__ as {\n entity: string;\n entityInfo: {\n name: string;\n module: string;\n title: string;\n parentKey: string;\n };\n data: string | any;\n options: any;\n metadata: any;\n };\n\n const excludeProperties = options?.excludeProperties;\n const includeProperties = options?.includeProperties;\n\n const decoration = options?.['decoration'];\n const layout = options?.['layout'];\n const headerTitle = decoration?.header?.title;\n const layoutSize = layout?.size;\n\n const [moduleName, entityName] = (entity || '').split('.');\n if (!moduleName || !entityName) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-identifier'),\n },\n };\n }\n\n const entityRef = await this.entityService.resolve(moduleName, entityName);\n\n let dialogRef: any;\n\n try {\n // Validate data type\n if (!data || (typeof data !== 'string' && typeof data !== 'object')) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n // Pass data directly to update() - it handles string | object internally\n let chain = this.entityForm.entity(`${moduleName}.${entityName}`).update(data);\n\n chain.actions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.apply.title');\n });\n\n if (excludeProperties && excludeProperties.length > 0) {\n chain = chain.exclude(...excludeProperties);\n }\n\n if (includeProperties && includeProperties.length > 0) {\n chain = chain.include(...includeProperties);\n }\n\n if (headerTitle) {\n chain = chain.title(headerTitle);\n } else if (entityInfo?.title) {\n const editText = await this.translationService.translateAsync('@general:actions.edit.title');\n const translatedTitle = await this.translationService.translateAsync(entityInfo.title);\n chain = chain.title(`${editText} ${translatedTitle}`);\n }\n\n const finalSize = layoutSize || dialogSize;\n if (finalSize) {\n chain.size(finalSize);\n }\n\n dialogRef = await chain.show();\n\n if (dialogRef.action() === 'cancel') {\n dialogRef.close();\n return {\n success: false,\n // message: {\n // text: await this.translationService.translateAsync('@general:messages.generic.cancel.description'),\n // },\n };\n } else if (dialogRef.action() === 'submit') {\n dialogRef.setLoading(true);\n const context = dialogRef.context();\n const updateFn = entityRef.commands?.update?.execute as (payload: any) => Promise<AXPExecuteCommandResult<any>>;\n\n if (!updateFn) {\n const msg = await this.translationService.translateAsync(\n '@general:messages.entity.update-command-unavailable',\n );\n if (enableOperationToasts) {\n this.toastService.show({\n color: 'danger',\n title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n content: msg,\n });\n }\n return {\n success: false,\n message: { text: msg },\n };\n }\n\n const result = await updateFn(context);\n\n if (result) {\n dialogRef.close();\n return {\n success: true,\n data: result,\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n };\n }\n\n return (\n result ?? {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.command-no-result'),\n },\n }\n );\n }\n\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-action'),\n },\n };\n } catch (error) {\n const text =\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.entity.update-failed');\n if (enableOperationToasts) {\n this.toastService.show({\n color: 'danger',\n title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n content: text,\n });\n }\n return {\n success: false,\n message: { text },\n };\n } finally {\n if (dialogRef) {\n dialogRef.setLoading(false);\n }\n }\n }\n\n //#endregion\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXPEntityFormBuilderService } from '../services/entity-forms/entity-form-builder.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPViewEntityDetailsCommand implements AXPCommand<any, any> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityForm = inject(AXPEntityFormBuilderService);\n private readonly entityService = inject(AXPEntityDefinitionRegistryService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command Execution ----\n\n async execute(input: any): Promise<AXPExecuteCommandResult<any>> {\n const excludeProperties = input['excludeProperties'];\n const { entity, entityInfo, data } = input.__context__ as {\n entity: string;\n entityInfo: {\n name: string;\n module: string;\n title: string;\n parentKey: string;\n };\n data: string | any;\n options: any;\n metadata: any;\n };\n\n const [moduleName, entityName] = (entity || '').split('.');\n if (!moduleName || !entityName) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-identifier'),\n },\n };\n }\n\n await this.entityService.resolve(moduleName, entityName);\n\n let dialogRef: any;\n\n try {\n // Validate data type\n if (!data || (typeof data !== 'string' && typeof data !== 'object')) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n // Pass data directly to single() - it handles string | object internally\n let chain = this.entityForm.entity(`${moduleName}.${entityName}`).single(data);\n\n if (excludeProperties && excludeProperties.length > 0) {\n chain = chain.exclude(...excludeProperties);\n }\n\n if (entityInfo?.title) {\n const detailText = await this.translationService.translateAsync('@general:actions.detail.title');\n // const translatedTitle = await this.translationService.translateAsync(entityInfo.title);\n chain = chain.title(`${detailText}`);\n }\n\n chain = chain.actions((actions) => {\n actions.submit('@general:actions.ok.title');\n });\n\n dialogRef = await chain.show();\n\n // For single/view mode, only close action is available\n // No need to show any message when closing a read-only view\n dialogRef.close();\n return {\n success: true,\n metadata: {\n refresh: false,\n },\n };\n } catch (error) {\n return {\n success: false,\n message: {\n text:\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.entity.view-failed'),\n },\n };\n } finally {\n if (dialogRef) {\n dialogRef.setLoading(false);\n }\n }\n }\n\n //#endregion\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPMetaData, AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule, AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandService, AXPQueryService } from '@acorex/platform/runtime';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, inject, input, signal, viewChild } from '@angular/core';\nimport { get } from 'lodash-es';\n\n@Component({\n selector: 'axp-entity-detail-popover',\n templateUrl: './entity-detail-popover.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXPopoverModule,\n AXPWidgetCoreModule,\n AXTranslationModule,\n AXLoadingModule,\n AXPResolveMultiLanguageStringPipe,\n ],\n})\nexport class AXPEntityDetailPopoverComponent {\n //#region ---- Dependencies ----\n\n private readonly commandService = inject(AXPCommandService);\n private readonly queryService = inject(AXPQueryService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n entity = input.required<string>();\n entityId = input.required<string | number>();\n textField = input<string>('title');\n valueField = input<string>('id');\n item = input<AXPMetaData>();\n breadcrumb = input<string | null>(null);\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected detailPopover = viewChild<AXPopoverComponent>('detailPopover');\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected entityDetails = signal<any>(null);\n protected isLoadingDetails = signal(false);\n protected isDetailPopoverOpen = signal(false);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Show the entity detail popover\n */\n async show(target: ElementRef | HTMLElement): Promise<void> {\n this.isDetailPopoverOpen.set(true);\n this.isLoadingDetails.set(true);\n this.entityDetails.set(null);\n\n // Open the popover immediately to display loading state\n if (this.detailPopover()) {\n const targetElement = target instanceof ElementRef ? target.nativeElement : target;\n this.detailPopover()!.target = targetElement;\n this.detailPopover()!.open();\n } else {\n // In case the view child is not ready yet, schedule an immediate open\n setTimeout(() => {\n if (this.detailPopover()) {\n const targetElement = target instanceof ElementRef ? target.nativeElement : target;\n this.detailPopover()!.target = targetElement;\n this.detailPopover()!.open();\n }\n }, 0);\n }\n\n // Fetch entity details using the query\n try {\n const result = await this.queryService.fetch('Entity:GetDetails', {\n entity: this.entity(),\n id: this.entityId(),\n });\n\n if (result?.success) {\n this.entityDetails.set(result);\n }\n } catch (error) {\n console.error('Failed to fetch entity details:', error);\n } finally {\n this.isLoadingDetails.set(false);\n }\n }\n\n /**\n * Hide the entity detail popover\n */\n hide(): void {\n this.isDetailPopoverOpen.set(false);\n this.entityDetails.set(null);\n this.isLoadingDetails.set(false);\n if (this.detailPopover()) {\n this.detailPopover()!.close();\n }\n }\n\n protected onDetailPopoverOpenChange(event: any): void {\n this.isDetailPopoverOpen.set(event);\n\n if (!event) {\n this.entityDetails.set(null);\n this.isLoadingDetails.set(false);\n }\n }\n\n protected async navigateToDetails(): Promise<void> {\n if (this.entityId()) {\n await this.commandService.execute('Entity:OpenDetails', {\n entity: this.entity(),\n data: { id: this.entityId() },\n });\n this.hide();\n }\n }\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n /**\n * Returns true if a value is meaningful for display (non-empty/non-null).\n */\n private hasMeaningfulValue(value: unknown): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === 'string') return value.trim().length > 0;\n if (Array.isArray(value)) return value.length > 0;\n if (typeof value === 'object') return Object.keys(value as object).length > 0;\n return true;\n }\n\n /**\n * Calculates an importance score for a property based on its widget type,\n * whether it currently has a meaningful value, and metadata like title.\n */\n private getPropertyImportanceScore(prop: any, data: any): number {\n const schema = prop.showAs?.type ?? prop.schema;\n\n const importanceMap: Record<string, number> = {\n [AXPWidgetsCatalog.text]: 100,\n [AXPWidgetsCatalog.select]: 95,\n [AXPWidgetsCatalog.number]: 90,\n [AXPWidgetsCatalog.dateTime]: 85,\n [AXPWidgetsCatalog.richText]: 80,\n [AXPWidgetsCatalog.largeText]: 75,\n [AXPWidgetsCatalog.contact]: 74,\n [AXPWidgetsCatalog.toggle]: 65,\n [AXPWidgetsCatalog.checkbox]: 60,\n [AXPWidgetsCatalog.color]: 40,\n };\n\n let score = importanceMap[schema as string] ?? 50;\n\n // Prefer fields that actually have a value for the current entity\n const valuePath = prop.path ?? prop.name;\n if (this.hasMeaningfulValue(get(data, valuePath))) {\n score += 20;\n }\n\n // Slight preference for human-friendly titled fields\n const hasTitle = prop.title && prop.title !== prop.name;\n if (hasTitle) {\n score += 5;\n }\n\n return score;\n }\n\n /**\n * Calculates a name-based importance score to prioritize common key fields\n * like title, description, status, and important dates.\n * Name priority MUST come before widget-type priority.\n */\n private getNameImportanceScore(prop: any): number {\n const rawName = (prop.options?.dataPath ?? prop.name ?? '').toString();\n const normalized = rawName.toLowerCase();\n const collapsed = normalized.replace(/[^a-z0-9]/g, '');\n\n const priorities: Array<{ keys: string[]; score: number }> = [\n { keys: ['title', 'name', 'subject', 'code'], score: 120 },\n { keys: ['description', 'details', 'summary', 'remark', 'remarks'], score: 110 },\n { keys: ['status', 'state', 'phase', 'stage'], score: 105 },\n { keys: ['priority', 'severity', 'rank'], score: 100 },\n { keys: ['expirydate', 'expirationdate', 'expiredate', 'duedate', 'deadline', 'enddate'], score: 98 },\n { keys: ['startdate', 'createdat', 'createdon', 'updatedat', 'updatedon'], score: 95 },\n { keys: ['owner', 'assignee', 'assignedto'], score: 92 },\n { keys: ['email', 'phone', 'mobile', 'contact'], score: 90 },\n { keys: ['category', 'type', 'label', 'tag', 'note', 'notes'], score: 85 },\n { keys: ['primary', 'active', 'active', 'enabled', 'archived', 'deleted', 'locked', 'disabled'], score: -2 }, // send to bottom,\n ];\n\n for (const group of priorities) {\n for (const key of group.keys) {\n if (collapsed === key || collapsed.endsWith(key)) {\n return group.score;\n }\n }\n }\n // Pattern-based priorities (generic forms like validFrom/validTo, start*/end*)\n if (collapsed.endsWith('from') || collapsed.endsWith('to')) {\n return 97;\n }\n if (collapsed.startsWith('start') || collapsed.startsWith('end')) {\n return 96;\n }\n return 0;\n }\n\n protected getEntityPropertiesWithWidgets(): Array<{ name: string; title: string; node: AXPWidgetNode }> {\n const data = this.entityDetails()?.entityData;\n const entityDefinition = this.entityDetails()?.entityDefinition as AXPEntity;\n\n if (!data || !entityDefinition?.properties) return [];\n\n // Use properties (not columns) for correct titles and schema; columns may have dataPath that doesn't match\n const importantProperties = entityDefinition.properties\n .filter((prop) => {\n // Exclude technical fields\n if (prop.name === 'id' || prop.name === this.textField() || prop.name === this.valueField()) {\n return false;\n }\n\n // Only include properties that have a meaningful value (using get for dotted paths)\n const path = this.resolveDataPath(prop, data);\n const value = get(data, path);\n if (!this.hasMeaningfulValue(value)) {\n return false;\n }\n\n const schema = prop.schema?.interface?.type;\n const importantWidgets = [\n AXPWidgetsCatalog.text,\n AXPWidgetsCatalog.largeText,\n AXPWidgetsCatalog.richText,\n AXPWidgetsCatalog.lookup,\n AXPWidgetsCatalog.number,\n AXPWidgetsCatalog.toggle,\n AXPWidgetsCatalog.checkbox,\n AXPWidgetsCatalog.dateTime,\n AXPWidgetsCatalog.color,\n AXPWidgetsCatalog.contact,\n ] as string[];\n\n return importantWidgets.includes(schema!);\n })\n .map((prop) => {\n const path = this.resolveDataPath(prop, data);\n const schema = prop.schema?.interface?.type;\n const options = prop.schema?.interface?.options ?? {};\n return {\n ...prop,\n schema,\n path,\n options,\n };\n })\n .sort((a, b) => {\n const nameScoreA = this.getNameImportanceScore(a);\n const nameScoreB = this.getNameImportanceScore(b);\n if (nameScoreA !== nameScoreB) return nameScoreB - nameScoreA;\n\n const widgetScoreA = this.getPropertyImportanceScore(a, data);\n const widgetScoreB = this.getPropertyImportanceScore(b, data);\n if (widgetScoreA !== widgetScoreB) return widgetScoreB - widgetScoreA;\n\n const aHasValue = this.hasMeaningfulValue(get(data, a.path));\n const bHasValue = this.hasMeaningfulValue(get(data, b.path));\n if (aHasValue !== bHasValue) return aHasValue ? -1 : 1;\n\n const aHasTitle = a.title && a.title !== a.name;\n const bHasTitle = b.title && b.title !== b.name;\n if (aHasTitle !== bHasTitle) return aHasTitle ? -1 : 1;\n\n return a.name.localeCompare(b.name);\n })\n .slice(0, 7)\n .map((prop) => {\n const widgetNode: AXPWidgetNode = {\n type: prop.schema || AXPWidgetsCatalog.text,\n path: prop.path,\n options: { ...prop.options },\n mode: 'view',\n };\n\n return {\n name: prop.name,\n title: prop.title || prop.name,\n node: widgetNode,\n };\n });\n\n return importantProperties;\n }\n\n /**\n * Resolves the data path for a property. For lookups with expose, returns the expanded path\n * when data has it (e.g. personTitle). Otherwise returns property name (e.g. personTitleId).\n */\n private resolveDataPath(prop: { name: string; schema?: { interface?: { options?: { expose?: Array<{ target: string }> } } } }, data: any): string {\n const iface = prop.schema?.interface;\n const expose = iface?.options?.['expose'] as Array<{ source: string; target: string }> | undefined;\n\n if (expose?.length) {\n // Try expanded path first (e.g. personTitle for personTitle.title)\n const textTarget = expose.find((e) => e.source !== 'id');\n if (textTarget) {\n const expandedPath = textTarget.target.split('.')[0];\n const expandedValue = get(data, expandedPath);\n if (expandedValue != null && typeof expandedValue === 'object') {\n return expandedPath;\n }\n }\n }\n\n return prop.name;\n }\n\n //#endregion\n}\n","<ax-popover [openOn]=\"'manual'\" #detailPopover (openChange)=\"onDetailPopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[400px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold ax-text-on-lightest-surface\">\n {{\n (entityDetails()?.entityData?.[textField()] ?? item()?.[textField()]) | axpResolveMultiLanguageString\n }}\n </h3>\n @if (breadcrumb()) {\n <div class=\"ax-text-xs ax-text-neutral-500 ax-mt-1\">{{ breadcrumb() }}</div>\n }\n </div>\n @if (isLoadingDetails()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-py-8\">\n <ax-loading>Loading details...</ax-loading>\n </div>\n } @else if (entityDetails()) {\n <div class=\"ax-space-y-3 ax-mb-4\">\n <!-- Important Entity Data -->\n @if (entityDetails()?.entityData) {\n <axp-widgets-container [context]=\"entityDetails()?.entityData\">\n <div class=\"ax-space-y-2\">\n @for (item of getEntityPropertiesWithWidgets(); track item.name) {\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-sm ax-font-medium\">{{ item.title | translate | async }}:</span>\n <div class=\"ax-flex-1 ax-ml-2 ax-max-w-48\">\n <ng-container axp-widget-renderer [node]=\"item.node\" [mode]=\"'view'\"></ng-container>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n }\n </div>\n <div class=\"ax-flex ax-gap-2 ax-justify-end ax-sm\">\n <ax-button\n [color]=\"'primary'\"\n [look]=\"'solid'\"\n [text]=\"'@general:actions.open-details.title' | translate | async\"\n (click)=\"navigateToDetails()\"\n >\n </ax-button>\n </div>\n }\n </div>\n</ax-popover>\n","import { Injectable, ElementRef, ViewContainerRef, inject, ComponentRef, ApplicationRef, createComponent, EnvironmentInjector } from '@angular/core';\nimport { AXPEntityDetailPopoverComponent } from './entity-detail-popover.component';\nimport { AXPMetaData } from '@acorex/platform/core';\n\nexport interface AXPEntityDetailPopoverOptions {\n entity: string;\n id: string | number;\n item: AXPMetaData,\n textField?: string;\n valueField?: string;\n breadcrumb?: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPEntityDetailPopoverService {\n\n //#region ---- Dependencies ----\n\n private readonly applicationRef = inject(ApplicationRef);\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private activePopoverRef: ComponentRef<AXPEntityDetailPopoverComponent> | null = null;\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Show entity detail popover\n * @param target - The target element to position the popover\n * @param options - Configuration options for the popover\n */\n async show(target: ElementRef | HTMLElement, options: AXPEntityDetailPopoverOptions): Promise<void> {\n // Close any existing popover\n this.hide();\n\n // Create component dynamically\n this.activePopoverRef = createComponent(AXPEntityDetailPopoverComponent, {\n environmentInjector: this.environmentInjector,\n });\n\n // Set inputs\n this.activePopoverRef.setInput('entity', options.entity);\n this.activePopoverRef.setInput('entityId', options.id);\n this.activePopoverRef.setInput('textField', options.textField || 'title');\n this.activePopoverRef.setInput('valueField', options.valueField || 'id');\n this.activePopoverRef.setInput('breadcrumb', options.breadcrumb || null);\n this.activePopoverRef.setInput('item', options.item);\n\n // Attach to application\n this.applicationRef.attachView(this.activePopoverRef.hostView);\n\n // Append to document body\n document.body.appendChild(this.activePopoverRef.location.nativeElement);\n\n // Show the popover\n await this.activePopoverRef.instance.show(target);\n }\n\n /**\n * Hide the active popover\n */\n hide(): void {\n if (this.activePopoverRef) {\n this.activePopoverRef.instance.hide();\n this.applicationRef.detachView(this.activePopoverRef.hostView);\n this.activePopoverRef.destroy();\n this.activePopoverRef = null;\n }\n }\n\n /**\n * Check if a popover is currently active\n */\n get isActive(): boolean {\n return this.activePopoverRef !== null;\n }\n\n //#endregion\n}\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXPCategoryEntity, AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport {\n AXPEntityCreateDto,\n AXPEntityDetailDto,\n AXPEntityListItemDto,\n AXPEntityModel,\n AXPEntityUpdateDto,\n} from './entity.types';\n\nexport abstract class AXPEntityStorageService<\n TKey,\n TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n TCreateDto extends AXPEntityCreateDto = TDetailDto,\n TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto,\n> {\n abstract get dbName(): string;\n\n abstract initial(\n entityName: string,\n collection: TCreateDto[],\n options?: {\n mergeType?: 'merge' | 'replace';\n uniqueKeys?: string[];\n },\n ): Promise<TCreateDto[]>;\n\n abstract getOne(entityName: string, id: TKey): Promise<TDetailDto>;\n\n abstract updateOne(entityName: string, id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;\n\n abstract deleteOne(entityName: string, id: TKey): Promise<void>;\n\n abstract insertOne(entityName: string, entity: TCreateDto): Promise<TKey>;\n\n abstract getAll(entityName: string): Promise<TListItemDto[]>;\n\n abstract query(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;\n}\n\nexport abstract class AXPEntityDataProvider<\n TKey,\n TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n TCreateDto extends AXPEntityCreateDto = TDetailDto,\n TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto,\n> {\n abstract get entityName(): string;\n\n abstract initial(collection: TCreateDto[]): Promise<void>;\n\n abstract getOne(id: TKey): Promise<TDetailDto>;\n\n abstract getAll(): Promise<TListItemDto[]>;\n\n abstract updateOne(id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;\n\n abstract deleteOne(id: TKey): Promise<void>;\n\n abstract insertOne(entity: TCreateDto): Promise<TKey>;\n\n abstract query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;\n}\n\nexport class AXPEntityDataProviderImpl<\n TKey,\n TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n TCreateDto extends AXPEntityCreateDto = TDetailDto,\n TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto,\n> implements AXPEntityDataProvider<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>\n{\n constructor(\n private storageService: AXPEntityStorageService<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>,\n public entityName: string,\n ) {}\n\n async initial(collection: TCreateDto[]): Promise<void> {\n await this.storageService.initial(this.entityName, collection);\n }\n\n getOne(id: TKey): Promise<TDetailDto> {\n return this.storageService.getOne(this.entityName, id);\n }\n\n getAll(): Promise<TListItemDto[]> {\n return this.storageService.getAll(this.entityName);\n }\n\n query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>> {\n return this.storageService.query(this.entityName, request);\n }\n\n updateOne(id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto> {\n return this.storageService.updateOne(this.entityName, id, keyValues);\n }\n\n deleteOne(id: TKey): Promise<void> {\n return this.storageService.deleteOne(this.entityName, id);\n }\n\n insertOne(entity: TCreateDto): Promise<TKey> {\n return this.storageService.insertOne(this.entityName, entity);\n }\n}\n\nexport abstract class AXMEntityCrudService<\n TKey,\n TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n TCreateDto extends AXPEntityCreateDto = TDetailDto,\n TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto,\n> {\n abstract insertOne(request: TCreateDto): Promise<TKey>;\n\n abstract getOne(id: TKey): Promise<TDetailDto>;\n\n abstract deleteOne(id: TKey): Promise<void>;\n\n abstract updateOne(id: TKey, values: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;\n\n abstract query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;\n}\n\nexport class AXMEntityCrudServiceImpl<\n TKey,\n TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n TCreateDto extends AXPEntityCreateDto = Omit<TDetailDto, 'id'>,\n TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto,\n> {\n private _storageService = inject(AXPEntityStorageService);\n private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n private _entityDataProvider = new AXPEntityDataProviderImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>(\n this._storageService,\n this.entityName,\n );\n\n private _entityCategoryDataProvider = new AXPEntityDataProviderImpl<TKey, AXPCategoryEntity<TKey>>(\n this._storageService,\n `${this.entityName}Category`,\n );\n\n constructor(private entityName: string) {}\n\n async insertOne(request: TCreateDto): Promise<TKey> {\n return this._entityDataProvider.insertOne(request);\n }\n\n async getOne(id: TKey): Promise<TDetailDto> {\n return this._entityDataProvider.getOne(id);\n }\n\n //DELETE\n async deleteOne(id: TKey): Promise<void> {\n return this._entityDataProvider.deleteOne(id);\n }\n\n async updateOne(id: TKey, values: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto> {\n return this._entityDataProvider.updateOne(id, values);\n }\n\n async query(request: AXPQueryRequest = { skip: 0, take: 100 }): Promise<AXPPagedListResult<TListItemDto>> {\n const [moduleName, entityName] = this._entityDataProvider.entityName.split('.');\n try {\n const entityRef = await this.entityRegistery.resolve(moduleName, entityName);\n if (entityRef.parentKey) {\n if (!request.filter?.filters?.length && request.filter?.field !== entityRef.parentKey) {\n request.filter = {\n value: true,\n field: entityRef.parentKey,\n operator: {\n type: 'isEmpty',\n },\n };\n }\n }\n } catch (error) {\n console.error(error);\n }\n return this._entityDataProvider.query(request);\n }\n\n async findOne(filter: AXDataSourceFilterOption): Promise<TListItemDto> {\n const result = await this._entityDataProvider.query({ filter, skip: 0, take: 1 });\n return result.items[0];\n }\n\n async getRoots(request: {}): Promise<AXPPagedListResult<TListItemDto>> {\n const queryRequest: AXPQueryRequest = {\n skip: 0,\n take: 1000,\n filter: {\n value: true,\n field: 'parentId',\n operator: {\n type: 'isEmpty',\n },\n },\n };\n const result = await this._entityDataProvider.query(queryRequest);\n return result;\n }\n\n async getChildren(request: { parentId: TKey; parentKey?: string }): Promise<AXPPagedListResult<TListItemDto>> {\n const parentKey = request.parentKey ?? 'parentId';\n const queryRequest: AXPQueryRequest = {\n skip: 0,\n take: 1000,\n filter: {\n value: request.parentId,\n field: parentKey,\n operator: {\n type: 'equal',\n },\n },\n };\n const result = await this._entityDataProvider.query(queryRequest);\n return result;\n }\n\n async getByCategory(request: { categoryId: TKey; categoryKey?: string }): Promise<AXPPagedListResult<TListItemDto>> {\n const queryRequest: AXPQueryRequest = {\n skip: 0,\n take: 1000,\n filter: {\n value: request.categoryId,\n field: request.categoryKey ?? 'categoryIds',\n operator: {\n type: 'contains',\n },\n },\n };\n const result = await this._entityDataProvider.query(queryRequest);\n return result;\n }\n\n async getCategoriesList(\n request: AXPQueryRequest = { skip: 0, take: 1000 },\n ): Promise<AXPPagedListResult<AXPCategoryEntity<TKey>>> {\n return this._entityCategoryDataProvider.query(request);\n }\n\n get storageService() {\n return this._storageService;\n }\n\n async custom<Req, Res>(request: Req) {}\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/core';\nimport { AXPCommandService, AXPQueryExecutor } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMEntityCrudServiceImpl } from './entity-storage-service';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { AXPEntityCreateDto, AXPEntityDetailDto, AXPEntityListItemDto, AXPEntityModel, AXPEntityUpdateDto } from './entity.types';\n\n//#region ---- EntityDataAccessor ----\n\n/**\n * Data accessor for entity operations.\n * Provides methods to query and execute commands with smart resolution:\n * 1. Checks entity definition queries/commands first\n * 2. Falls back to CRUD service if not defined\n */\nexport class EntityDataAccessor<\n TKey = any,\n TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n TCreateDto extends AXPEntityCreateDto = Omit<TDetailDto, 'id'>,\n TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto\n> {\n private crudService: AXMEntityCrudServiceImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto> | null = null;\n private entityDef: AXPEntity | null = null;\n private entityDefPromise: Promise<AXPEntity> | null = null;\n\n constructor(\n private module: string,\n private entity: string,\n private entityRegistry: AXPEntityDefinitionRegistryService,\n private queryExecutor: AXPQueryExecutor,\n private commandService: AXPCommandService\n ) { }\n\n /**\n * Resolves the entity definition lazily and caches it.\n * @returns The resolved entity definition\n */\n private async resolveEntityDef(): Promise<AXPEntity> {\n if (this.entityDef) {\n return this.entityDef;\n }\n\n if (!this.entityDefPromise) {\n this.entityDefPromise = this.entityRegistry.resolve(this.module, this.entity);\n }\n\n this.entityDef = await this.entityDefPromise;\n if (!this.entityDef) {\n throw new Error(`Entity \"${this.module}.${this.entity}\" could not be resolved`);\n }\n\n return this.entityDef;\n }\n\n /**\n * Gets a single entity by key.\n * @param key - The entity key\n * @returns The entity detail or null if not found\n */\n async byKey(key: TKey): Promise<TDetailDto | null> {\n const entityDef = await this.resolveEntityDef();\n const execute = entityDef.queries?.byKey?.execute;\n if (typeof execute === 'function') {\n return await execute(key);\n } else if (typeof execute === 'string') {\n return await this.queryExecutor.fetch<TKey, TDetailDto>(execute, key);\n }\n\n // Fallback to CRUD service\n if (!this.crudService) {\n this.crudService = new AXMEntityCrudServiceImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>(\n `${this.module}.${this.entity}`\n );\n }\n return await this.crudService.getOne(key);\n }\n\n /**\n * Queries a list of entities.\n * @param request - The query request (optional)\n * @returns The paged list result\n */\n async query(request?: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>> {\n const entityDef = await this.resolveEntityDef();\n const defaultRequest: AXPQueryRequest = { skip: 0, take: 10 };\n const queryRequest = request || defaultRequest;\n\n const execute = entityDef.queries?.list?.execute;\n if (typeof execute === 'function') {\n return await execute(queryRequest);\n } else if (typeof execute === 'string') {\n const result = await this.queryExecutor.fetch<AXPQueryRequest, AXPPagedListResult<TListItemDto>>(\n execute,\n queryRequest\n );\n if (!result) {\n throw new Error(`Query \"${execute}\" returned null`);\n }\n return result;\n }\n\n // Fallback to CRUD service\n if (!this.crudService) {\n this.crudService = new AXMEntityCrudServiceImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>(\n `${this.module}.${this.entity}`\n );\n }\n return await this.crudService.query(queryRequest);\n }\n\n /**\n * Creates a new entity.\n * @param data - The entity data to create\n * @returns The created entity key\n */\n async create(data: TCreateDto): Promise<TKey> {\n const entityDef = await this.resolveEntityDef();\n const execute = entityDef.commands?.create?.execute;\n if (typeof execute === 'function') {\n const result = await execute(data);\n return (result as any)?.id || result;\n } else if (typeof execute === 'string') {\n const result = await this.commandService.execute<TCreateDto, { id: TKey }>(execute, data);\n if (!result?.success) {\n throw new Error(result?.message?.text || 'Failed to create entity');\n }\n return result.data?.id || (result.data as any);\n }\n\n // Fallback to CRUD service\n if (!this.crudService) {\n this.crudService = new AXMEntityCrudServiceImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>(\n `${this.module}.${this.entity}`\n );\n }\n return await this.crudService.insertOne(data);\n }\n\n /**\n * Updates an existing entity.\n * @param id - The entity key\n * @param data - The entity data to update\n * @returns The updated entity\n */\n async update(id: TKey, data: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto> {\n const entityDef = await this.resolveEntityDef();\n const execute = entityDef.commands?.update?.execute;\n const updateData = { id, ...data } as Partial<TUpdateDto> & { id: TKey };\n\n if (typeof execute === 'function') {\n return await execute(updateData);\n } else if (typeof execute === 'string') {\n const result = await this.commandService.execute<Partial<TUpdateDto> & { id: TKey }, TDetailDto>(\n execute,\n updateData\n );\n if (!result?.success) {\n throw new Error(result?.message?.text || 'Failed to update entity');\n }\n return result.data as TDetailDto;\n }\n\n // Fallback to CRUD service\n if (!this.crudService) {\n this.crudService = new AXMEntityCrudServiceImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>(\n `${this.module}.${this.entity}`\n );\n }\n return await this.crudService.updateOne(id, data);\n }\n\n /**\n * Deletes an entity.\n * @param id - The entity key\n */\n async delete(id: TKey): Promise<void> {\n const entityDef = await this.resolveEntityDef();\n const execute = entityDef.commands?.delete?.execute;\n if (typeof execute === 'function') {\n await execute(id);\n return;\n } else if (typeof execute === 'string') {\n const result = await this.commandService.execute<TKey, void>(execute, id);\n if (!result?.success) {\n throw new Error(result?.message?.text || 'Failed to delete entity');\n }\n return;\n }\n\n // Fallback to CRUD service\n if (!this.crudService) {\n this.crudService = new AXMEntityCrudServiceImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>(\n `${this.module}.${this.entity}`\n );\n }\n return await this.crudService.deleteOne(id);\n }\n}\n\n//#endregion\n\n//#region ---- EntityBuilder ----\n\n/**\n * Builder class for entity operations.\n * Provides methods to create paths and access entity data.\n */\nexport class EntityBuilder {\n readonly module: string;\n readonly entity: string;\n\n constructor(\n module: string,\n entity: string,\n private sessionService: AXPSessionService,\n private entityRegistry: AXPEntityDefinitionRegistryService,\n private queryExecutor: AXPQueryExecutor,\n private commandService: AXPCommandService\n ) {\n this.module = module;\n this.entity = entity;\n }\n\n /**\n * Creates a path for the entity.\n * @param path - The path segment (defaults to 'list')\n * @returns The full path string\n */\n createPath(path: string = 'list'): string {\n return `/${this.sessionService.application?.name}/m/${this.module}/e/${this.entity}/${path}`;\n }\n\n /**\n * Gets the data accessor for the entity with generic type support.\n * Entity definition is resolved lazily on first method call.\n * @returns An EntityDataAccessor instance\n */\n data<\n TKey = any,\n TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n TCreateDto extends AXPEntityCreateDto = Omit<TDetailDto, 'id'>,\n TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto\n >(): EntityDataAccessor<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto> {\n return new EntityDataAccessor<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>(\n this.module,\n this.entity,\n this.entityRegistry,\n this.queryExecutor,\n this.commandService\n );\n }\n}\n\n//#endregion\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityService {\n private sessionService = inject(AXPSessionService);\n private entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private queryExecutor = inject(AXPQueryExecutor);\n private commandService = inject(AXPCommandService);\n\n /**\n * @deprecated Use `withEntity(module, entity).createPath(path)` instead.\n * This method will be removed in a future version.\n */\n createPath(module: string, entity: string, path: string = 'list'): string {\n return `/${this.sessionService.application?.name}/m/${module}/e/${entity}/${path}`;\n }\n\n /**\n * Creates a builder for entity operations.\n * Entity definition is resolved lazily when data accessor methods are called.\n * @param module - The module name\n * @param entity - The entity name\n * @returns An EntityBuilder instance\n */\n withEntity(module: string, entity: string): EntityBuilder;\n\n /**\n * Creates a builder for entity operations using dot notation.\n * Entity definition is resolved lazily when data accessor methods are called.\n * @param entityKey - The entity key in format \"module.entity\"\n * @returns An EntityBuilder instance\n * @throws Error if the entity key format is invalid\n */\n withEntity(entityKey: string): EntityBuilder;\n\n withEntity(moduleOrEntityKey: string, entity?: string): EntityBuilder {\n let module: string;\n let entityName: string;\n\n if (entity !== undefined) {\n // Two parameters: module and entity\n module = moduleOrEntityKey;\n entityName = entity;\n } else {\n // Single parameter: \"module.entity\" format\n const dotIndex = moduleOrEntityKey.indexOf('.');\n if (dotIndex === -1) {\n throw new Error(\n `Invalid entity key format: \"${moduleOrEntityKey}\". Expected format: \"module.entity\"`\n );\n }\n module = moduleOrEntityKey.substring(0, dotIndex);\n entityName = moduleOrEntityKey.substring(dotIndex + 1);\n }\n\n return new EntityBuilder(module, entityName, this.sessionService, this.entityRegistry, this.queryExecutor, this.commandService);\n }\n}\n","import type { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { AXPFilterQuery } from '@acorex/platform/core';\nimport {\n AXPPreloadFiltersApplyEvent,\n AXPPreloadFiltersComponent,\n AXPThemeLayoutBlockComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\n\nimport { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n// import { AXPEntityMasterListViewComponent } from 'libs/platform/themes/default/src/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component';\nimport { AXPEntityPreloadFiltersViewModel } from '../entity-preload-filters.viewmodel';\nimport { AXPEntityService } from '../entity.service';\n\n@Component({\n selector: 'axp-entity-preload-filters-container',\n template: `\n <axp-page-layout>\n <axp-page-content>\n <div class=\"ax-flex ax-flex-col ax-justify-center ax-h-full ax-items-center\">\n <axp-preload-filters\n [filterDefinitions]=\"preloadFiltersDef()\"\n [showAllButton]=\"hasNoRequiredFilters()\"\n (apply)=\"onApply($event)\"\n (showAll)=\"onShowAll()\"\n ></axp-preload-filters>\n @if (noMatchText()) {\n <div role=\"alert\" class=\"ax-mt-4 ax-text-center ax-text-danger ax-text-sm ax-max-w-md ax-px-4\">\n {{ noMatchText() }}\n </div>\n }\n </div>\n </axp-page-content>\n </axp-page-layout>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPPageLayoutComponent, AXPThemeLayoutBlockComponent, AXPPreloadFiltersComponent],\n providers: [\n // {\n // provide: AXPPageLayoutBase,\n // useExisting: AXPEntityMasterListViewComponent,\n // },\n ],\n})\nexport class AXPEntityPreloadFiltersContainerComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly entityService = inject(AXPEntityService);\n private readonly filterOperatorMiddleware = inject(AXPFilterOperatorMiddlewareService);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly noMatchText = signal<string | null>(null);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n private vm = computed<AXPEntityPreloadFiltersViewModel>(() => {\n return this.route.snapshot.data['vm'] as AXPEntityPreloadFiltersViewModel;\n });\n\n preloadFiltersDef = computed(() => {\n return this.vm()?.preloadFiltersDef() ?? [];\n });\n\n hasNoRequiredFilters = computed(() => {\n return this.vm()?.requiredFiltersDef().length === 0;\n });\n\n //#endregion\n\n //#region ---- Page Layout Overrides ----\n\n protected override getPageTitle(): string {\n return this.vm()?.title() ?? '';\n }\n\n protected override getPageDescription(): string | null {\n return this.vm()?.description() ?? null;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n async onApply(event: AXPPreloadFiltersApplyEvent): Promise<void> {\n const vm = this.vm();\n if (!vm) {\n console.error('[AXPEntityPreloadFiltersContainerComponent] ViewModel not found');\n return;\n }\n\n this.noMatchText.set(null);\n\n const filterQueries = this.buildPreloadFilterQueries(event.filterValues as Record<string, unknown>);\n const app = this.route.snapshot.parent?.parent?.paramMap.get('app');\n const module = this.route.snapshot.parent?.paramMap.get('module');\n const entity = this.route.snapshot.paramMap.get('entity');\n\n if (!app || !module || !entity) {\n console.error('[AXPEntityPreloadFiltersContainerComponent] Missing route params');\n return;\n }\n\n if (filterQueries.length === 0) {\n await this.router.navigate([app, 'm', module, 'e', entity, 'list']);\n return;\n }\n\n const listFilter = this.buildListQueryFilter(filterQueries);\n\n try {\n const result = await this.entityService.withEntity(module, entity).data().query({\n skip: 0,\n take: 1,\n filter: listFilter,\n });\n\n const total = result.total ?? 0;\n\n if (total === 0) {\n this.noMatchText.set(await this.translateService.translateAsync('@general:messages.preload-filters.no-match'));\n return;\n }\n\n if (total > 1) {\n await this.router.navigate([app, 'm', module, 'e', entity, 'list'], {\n queryParams: {\n filters: JSON.stringify(filterQueries),\n },\n });\n return;\n }\n\n const first = result.items[0];\n const id =\n first && typeof first === 'object' && first !== null && 'id' in first\n ? (first as { id: unknown }).id\n : undefined;\n if (id === undefined || id === null) {\n console.error('[AXPEntityPreloadFiltersContainerComponent] List item has no id');\n this.noMatchText.set(await this.translateService.translateAsync('@general:messages.preload-filters.no-match'));\n return;\n }\n\n await this.router.navigate([app, 'm', module, 'e', entity, String(id), 'view']);\n } catch (err) {\n console.error('[AXPEntityPreloadFiltersContainerComponent] List query failed', err);\n this.noMatchText.set(await this.translateService.translateAsync('@general:messages.preload-filters.no-match'));\n }\n }\n\n async onShowAll(): Promise<void> {\n this.noMatchText.set(null);\n const app = this.route.snapshot.parent?.parent?.paramMap.get('app');\n const module = this.route.snapshot.parent?.paramMap.get('module');\n const entity = this.route.snapshot.paramMap.get('entity');\n\n if (!app || !module || !entity) {\n return;\n }\n\n // `AXPEntityPreloadFilterGuard` only allows the list when `filters` exists on the query string.\n // Empty array = no filter constraints (same UX as \"show all\") but satisfies the guard.\n await this.router.navigate([app, 'm', module, 'e', entity, 'list'], {\n queryParams: { filters: JSON.stringify([]) },\n });\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private buildPreloadFilterQueries(context: Record<string, unknown>): AXPFilterQuery[] {\n const filters: AXPFilterQuery[] = [];\n const filterDefs = this.preloadFiltersDef();\n\n for (const filterDef of filterDefs) {\n const fieldName = filterDef.field;\n const value = fieldName ? context[fieldName] : undefined;\n if (value !== undefined && value !== null && value !== '') {\n filters.push({\n field: fieldName,\n operator: { type: 'equal' as const },\n value,\n });\n }\n }\n\n return filters;\n }\n\n private buildListQueryFilter(filterQueries: AXPFilterQuery[]): AXDataSourceFilterOption {\n return this.filterOperatorMiddleware.transformFilter({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: filterQueries as AXDataSourceFilterOption[],\n });\n }\n\n //#endregion\n}\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { castArray } from 'lodash-es';\n\nexport interface AXPDataSeeder {\n seed(): Promise<void>;\n}\n\nexport const AXP_DATA_SEEDER_TOKEN = new InjectionToken<AXPDataSeeder[]>('AXP_DATA_SEEDER_TOKEN');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPDataSeederService {\n private loaders = inject(AXP_DATA_SEEDER_TOKEN, { optional: true });\n\n async seed(): Promise<void> {\n for (const loader of castArray(this.loaders)) {\n if (!loader) continue;\n\n const seederName = loader.constructor?.name || 'UnknownSeeder';\n const startTime = performance.now();\n\n try {\n await loader.seed();\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`[AXPDataSeeder] Seeder \"${seederName}\" failed (continuing with next):`, message);\n if (err instanceof Error && err.stack) {\n console.error(err.stack);\n }\n // Optionally log to your system-log / app-log entity here if you have one (inject a writer and persist).\n continue;\n }\n\n const duration = performance.now() - startTime;\n if (duration > 3000) {\n console.warn(`[AXPDataSeeder] Seeder \"${seederName}\" took ${duration.toFixed(2)}ms (>3000ms threshold)`);\n }\n }\n }\n}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport {\n applyFilterArray,\n applySortArray,\n AXPDataSourceDefinition,\n AXPDataSourceDefinitionProvider,\n AXPFilterDefinition,\n} from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { inject } from '@angular/core';\nimport { AXPEntityResolver } from './entity.config';\n\n/**\n * Data source definition provider that returns all entity names\n * from entity loaders' list() (const.ts in each module).\n */\nexport class AXPEntitiesListDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly entityResolver = inject(AXPEntityResolver);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n items(): Promise<AXPDataSourceDefinition[]> {\n return Promise.resolve([\n {\n name: 'entities',\n title: 'Entities',\n columns: [\n {\n name: 'entity',\n title: 'Entity',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'module',\n title: 'Module',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'title',\n title: 'Title',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n ],\n filters: [\n {\n field: 'entity',\n title: 'Entity',\n operator: { type: 'equal' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n {\n field: 'module',\n title: 'Module',\n operator: { type: 'equal' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ],\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'title', title: 'Title' },\n source: () => {\n return new AXDataSource({\n key: 'title',\n load: async (query) => {\n const entries = await this.entityResolver.listAll();\n let items = entries.map((e) => ({\n title: e.fullName,\n entity: e.name,\n module: e.module,\n }));\n if (query.filter) {\n items = applyFilterArray(items, [query.filter]);\n }\n const rawSort = Array.isArray(query.sort) ? query.sort : query.sort ? [query.sort] : [];\n const sortOpt =\n rawSort.length > 0 ? rawSort : [{ field: 'title' as const, dir: 'asc' as const }];\n items = applySortArray(items, sortOpt);\n return { items, total: items.length };\n },\n byKey: async (key: unknown) => {\n const k = String(key);\n const entries = await this.entityResolver.listAll();\n const e = entries.find((x) => x.fullName === k);\n if (!e) throw new Error(`Entity not found: ${k}`);\n return { title: e.fullName, entity: e.name, module: e.module };\n },\n pageSize: 1000,\n });\n },\n },\n ]);\n }\n\n //#endregion\n}\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport {\n AXPEntity,\n AXPEntityAction,\n AXPEntityCommandScope,\n AXPEntityProperty,\n AXPEntityTableColumn,\n} from '@acorex/platform/common';\nimport { resolveActionLook } from '@acorex/platform/core';\nimport { AXPMetaData } from '@acorex/platform/core';\nimport { AXPWidgetColumnNode } from '@acorex/platform/layout/widget-core';\nimport { computed } from '@angular/core';\n\nexport class AXPEntityCommandTriggerViewModel {\n priority: 'primary' | 'secondary';\n order: number;\n color: AXStyleColorType;\n icon: string;\n title: string;\n name: string;\n key?: string;\n separated: boolean;\n scope: AXPEntityCommandScope;\n disabled: boolean | string;\n hidden: boolean | string;\n options: any;\n metadata?: AXPMetaData;\n default?: boolean;\n items?: AXPEntityCommandTriggerViewModel[];\n isChild?: boolean;\n\n constructor(entity: AXPEntity, action: AXPEntityAction, isChild = false) {\n this.name = `${typeof action.command === 'string' ? action.command : action.command.name}&${action.name}`;\n this.options = typeof action.command === 'object' ? action.command.options : undefined;\n this.metadata = typeof action.command === 'object' ? action.command.metadata : undefined;\n const resolvedLook = resolveActionLook(action.type);\n this.priority = action.priority;\n this.title = action.title;\n this.separated = action.separated ?? false;\n this.color = action.color ?? resolvedLook.color;\n this.icon = action.icon ?? resolvedLook.icon;\n this.hidden = action.hidden ?? false;\n this.disabled = action.disabled ?? false;\n this.default = action.default ?? false;\n this.scope = action.scope;\n this.order = action.order ?? 0;\n this.isChild = isChild;\n this.items = action.items?.map((child) => new AXPEntityCommandTriggerViewModel(entity, child, true));\n }\n}\n\nexport class AXPEntityListViewColumnViewModel {\n constructor(\n public readonly property: AXPEntityProperty,\n public readonly column: AXPEntityTableColumn,\n ) { }\n\n name = this.property.name;\n title = this.column.title ?? this.property.title;\n visible = this.column?.options?.visible ?? true;\n dir = this.column.sort?.dir;\n sortEnabled = this.property.options?.sort?.enabled;\n width: '';\n\n node = computed<AXPWidgetColumnNode>(() => {\n const widget = this.property.schema.interface!;\n return {\n path: this.column.options?.dataPath ?? this.name,\n type: widget.type,\n options: {\n ...widget?.options,\n ...this.column?.options,\n columnName: this.name,\n // Include children from widget interface so column components can access them\n ...(widget.children ? { children: widget.children } : {}),\n },\n } as AXPWidgetColumnNode;\n });\n}\n","import { AXPEntityTableColumn } from '@acorex/platform/common';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { cloneDeep } from 'lodash-es';\n\n//#region ---- Types ----\n\nexport interface ResolvedRelatedEntityColumns {\n /** When `columns` was `string[]`, or derived names when using table column defs */\n includeColumns?: string[];\n /** Evaluated `AXPEntityTableColumn[]` (`options.visible` string → boolean); drives list + toolbar when set */\n relatedTableColumns?: AXPEntityTableColumn[];\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction isRelatedEntityStringColumns(columns: string[] | AXPEntityTableColumn[]): columns is string[] {\n return columns.length === 0 || typeof columns[0] === 'string';\n}\n\n/**\n * Property names from `AXPRelatedEntity.columns` (no expression evaluation).\n * Empty array means caller can treat as “no name filter” (show all allowed by entity).\n */\nexport function getRelatedEntityColumnNames(columns: string[] | AXPEntityTableColumn[] | undefined): string[] {\n if (!columns?.length) {\n return [];\n }\n if (isRelatedEntityStringColumns(columns)) {\n return [...columns];\n }\n return (columns as AXPEntityTableColumn[]).map((c) => c.name);\n}\n\nfunction isTruthyVisible(value: unknown): boolean {\n if (value === true) {\n return true;\n }\n if (value === false || value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'string') {\n const t = value.trim().toLowerCase();\n return t !== '' && t !== 'false' && t !== '0';\n }\n if (typeof value === 'number') {\n return value !== 0 && !Number.isNaN(value);\n }\n return Boolean(value);\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Resolves `AXPRelatedEntity.columns` for `entity-list`:\n * - `string[]` → `includeColumns` only (legacy).\n * - `AXPEntityTableColumn[]` → evaluates `options.visible` when it is a string (parent detail context),\n * drops hidden / invisible columns, and returns `relatedTableColumns` + matching `includeColumns`.\n */\nexport async function resolveRelatedEntityColumns(\n columns: string[] | AXPEntityTableColumn[] | undefined,\n expressionEvaluator: AXPExpressionEvaluatorService,\n scope: AXPExpressionEvaluatorScope,\n): Promise<ResolvedRelatedEntityColumns> {\n if (!columns?.length) {\n return {};\n }\n\n if (isRelatedEntityStringColumns(columns)) {\n return { includeColumns: getRelatedEntityColumnNames(columns) };\n }\n\n const relatedTableColumns: AXPEntityTableColumn[] = [];\n\n for (const raw of columns) {\n const col = cloneDeep(raw);\n if (col.hidden === true) {\n continue;\n }\n\n let visible: boolean | string | undefined = col.options?.visible;\n if (visible === undefined) {\n visible = true;\n } else if (typeof visible === 'string') {\n const evaluated = await expressionEvaluator.evaluate(visible, scope);\n visible = isTruthyVisible(evaluated);\n }\n\n if (visible === false) {\n continue;\n }\n\n col.options = { ...col.options, visible: true };\n relatedTableColumns.push(col);\n }\n\n return {\n relatedTableColumns,\n includeColumns: relatedTableColumns.map((c) => c.name),\n };\n}\n\n//#endregion\n","import { AXDataSource, AXDataSourceFilterOption, AXDataSourceOperator } from '@acorex/cdk/common';\nimport { AXFormatService } from '@acorex/core/format';\nimport {\n AXPEntity,\n AXPEntityCommandScope,\n AXPFilterOperatorMiddlewareService,\n AXPRelatedEntity,\n getEntityInfo,\n} from '@acorex/platform/common';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPQueryExecutor } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { Injector, computed, signal } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { AXPEntityCommandTriggerViewModel, AXPEntityListViewColumnViewModel } from './entity.viewmodel';\nimport { getRelatedEntityColumnNames } from './services/entity-details/related-entity-converters/related-entity-include-columns';\n\nexport class AXPEntityDetailListViewModel {\n private detailEntity = signal<AXPEntity | null>(null);\n private formatService = this.injector.get(AXFormatService);\n private workflow = this.injector.get(AXPWorkflowService);\n private filterOperatorMiddleware = this.injector.get(AXPFilterOperatorMiddlewareService);\n private expressionEvaluator = this.injector.get(AXPExpressionEvaluatorService);\n private queryExecutor = this.injector.get(AXPQueryExecutor);\n\n dataSource = new AXDataSource({\n byKey: async (key) => {\n const execute = this.detailEntity()?.queries?.byKey?.execute;\n if (typeof execute === 'function') {\n return await execute(key);\n } else if (typeof execute === 'string') {\n return await this.queryExecutor.fetch(execute, key);\n }\n return null;\n },\n load: async (e) => {\n const execute = this.detailEntity()?.queries?.list?.execute;\n if (typeof execute === 'function') {\n return await execute(e);\n } else if (typeof execute === 'string') {\n return await this.queryExecutor.fetch(execute, e);\n }\n return null;\n },\n pageSize: 5,\n key: 'id',\n });\n\n public parentKey = computed(() => {\n return this.detailEntity()?.parentKey;\n });\n\n constructor(\n private injector: Injector,\n private detailEntityConfig: AXPRelatedEntity,\n private parent: { entity: AXPEntity; data: any },\n ) {\n this.initialize();\n }\n\n async initialize() {\n const entityResolver = this.injector.get(AXPEntityDefinitionRegistryService);\n const [moduleName, entityName] = this.detailEntityConfig.entity.split('.');\n const entity = await entityResolver.resolve(moduleName, entityName);\n if (!entity) {\n throw Error(`Invalid enitity name: ${this.detailEntityConfig.entity}`);\n }\n this.detailEntity.set(entity);\n this.applyFilterAndSort();\n }\n\n public selectedItems = signal<any[]>([]);\n\n public hasSelectedItems = computed<boolean>(() => {\n return this.selectedItems().length > 0;\n });\n\n public clearSelection(): void {\n this.selectedItems.set([]);\n }\n\n //****************** Title ******************//\n public title = computed<string>(() => {\n return (\n this.detailEntityConfig.title ??\n this.detailEntity()?.interfaces?.detail?.list?.title! ??\n this.detailEntity()?.formats.plural!\n );\n });\n\n //****************** Visibility ******************//\n public hidden = computed<Promise<boolean>>(async () => {\n if (typeof this.detailEntityConfig.hidden == 'string') {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(this.parent.data, path);\n },\n },\n };\n return await this.expressionEvaluator.evaluate(this.detailEntityConfig.hidden, scope);\n } else {\n return this.detailEntityConfig.hidden ?? false;\n }\n });\n\n //****************** Inline filter ******************//\n public inlineFiltersPlaceholders = computed<string[]>(() => {\n //return this.entityDef.properties.filter(p => p.options?.filter?.inline?.enabled).map(c => c.title);\n return [];\n });\n\n public hasInlineFilters = computed<boolean>(() => {\n return this.inlineFiltersPlaceholders().length > 0;\n });\n\n //****************** Actions ******************//\n private allActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n const originalList = this.detailEntity()?.interfaces?.master?.list?.actions ?? [];\n const detailEntityActionList = this.detailEntityConfig.actions ?? [];\n\n // Create a map to track which actions from detailEntityActionList have been used\n const usedOverrideActions = new Set<string>();\n\n // Start with original actions, applying overrides where they exist\n const mergedActions = originalList.map((originalAction) => {\n const originalCommandName =\n typeof originalAction.command === 'string' ? originalAction.command : originalAction.command.name;\n\n const overrideAction = detailEntityActionList.find((action) => {\n const actionCommandName = typeof action.command === 'string' ? action.command : action.command.name;\n return actionCommandName === originalCommandName && action.name === originalAction.name;\n });\n\n if (overrideAction) {\n // Mark this override action as used\n const overrideKey = `${typeof overrideAction.command === 'string' ? overrideAction.command : overrideAction.command.name}_${overrideAction.name}`;\n usedOverrideActions.add(overrideKey);\n return new AXPEntityCommandTriggerViewModel(this.detailEntity()!, overrideAction);\n }\n\n return new AXPEntityCommandTriggerViewModel(this.detailEntity()!, originalAction);\n });\n\n // Add any remaining actions from detailEntityActionList that weren't used as overrides\n const additionalActions = detailEntityActionList\n .filter((action) => {\n const actionKey = `${typeof action.command === 'string' ? action.command : action.command.name}_${action.name}`;\n return !usedOverrideActions.has(actionKey);\n })\n .map((action) => new AXPEntityCommandTriggerViewModel(this.detailEntity()!, action));\n\n // Do not filter by hidden here; hidden/disabled may be expressions that must be evaluated dynamically\n return [...additionalActions, ...mergedActions];\n });\n\n public selectedScopeActionsCount = computed<number>(() => {\n return this.allActions().filter((a) => a.scope == AXPEntityCommandScope.Selected).length;\n });\n\n public primaryActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n return this.allActions().filter(\n (a) =>\n a.priority == 'primary' &&\n ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n );\n });\n\n public secondaryActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n return this.allActions().filter(\n (a) =>\n a.priority == 'secondary' &&\n ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n );\n });\n public primaryRowActions = computed<AXPEntityCommandTriggerViewModel[]>(() =>\n this.allActions().filter((a) => a.scope == AXPEntityCommandScope.Individual && a.priority === 'primary'),\n );\n\n public secondaryRowActions = computed<AXPEntityCommandTriggerViewModel[]>(() =>\n this.allActions().filter((a) => a.scope == AXPEntityCommandScope.Individual && a.priority === 'secondary'),\n );\n\n //****************** Filter ******************//\n\n private inlineFilters: AXDataSourceFilterOption = {\n field: null as any,\n logic: 'or',\n operator: null as any,\n filters: [],\n };\n\n applyInlineFilter(value: string) {\n // const props = this.entityDef.properties.filter(c => c.options?.filter?.inline?.enabled);\n // this.inlineFilters.filters = [];\n // if (value) {\n // props.forEach(p => {\n // this.inlineFilters.filters?.push({\n // field: p.name,\n // operator: {\n // type: 'contains'\n // },\n // value\n // })\n // })\n // }\n this.applyFilterAndSort();\n }\n\n async applyFilterAndSort() {\n this.dataSource.clearFilter();\n //\n //this.dataSource.sort(...this.detailEntity.().map(s => ({ dir: s.dir, field: s.name } as AXDataSourceSortOption)));\n //\n\n const parentFilters: AXDataSourceFilterOption[] =\n (await Promise.all(\n this.detailEntityConfig.conditions?.map(async (c) => {\n return {\n field: c.name,\n operator: c.operator as unknown as AXDataSourceOperator,\n // value: this.parent.data?.id,\n value: await this.evaluateExpressions(c.value),\n } as AXDataSourceFilterOption;\n }) ?? [],\n )) ?? [];\n const parentFilterWrapper: AXDataSourceFilterOption = {\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: parentFilters,\n };\n //\n const inline = this.inlineFilters.filters?.length ?? 0;\n const parent = parentFilterWrapper.filters?.length ?? 0;\n //\n if (inline) {\n this.dataSource.filter(this.filterOperatorMiddleware.transformFilter(this.inlineFilters));\n } else if (!inline && parent) {\n this.dataSource.filter(this.filterOperatorMiddleware.transformFilter(parentFilterWrapper));\n } else if (inline && parent) {\n this.dataSource.filter(\n this.filterOperatorMiddleware.transformFilter({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: [this.inlineFilters, parentFilterWrapper],\n }),\n );\n }\n //\n this.dataSource.refresh();\n }\n\n //****************** Columns ******************//\n\n columns = computed(() => {\n if (this.detailEntity()) {\n const detailColumnNames = getRelatedEntityColumnNames(this.detailEntityConfig.columns);\n const columns = this.detailEntity()?.columns?.map((c) => c.name) ?? [];\n const props =\n this.detailEntity()?.properties.filter(\n (p) =>\n p.schema.visible !== false &&\n (detailColumnNames.length === 0 || detailColumnNames.includes(p.name)),\n ) ?? [];\n const displayColumns = props.filter((p) => columns.some((c) => c == p.name));\n return displayColumns.map((p) => {\n return new AXPEntityListViewColumnViewModel(p, this.detailEntity()?.columns?.find((c) => c.name == p.name)!);\n });\n }\n return [];\n });\n\n //****************** Commands ******************//\n public async executeCommand(commandName: string, data: any = null) {\n const action = this.allActions().find((c) => {\n const isSelectedScope = this.selectedItems().length\n ? c.scope == AXPEntityCommandScope.Selected\n : c.scope == AXPEntityCommandScope.Individual;\n return c.name == commandName && (isSelectedScope || c.scope == AXPEntityCommandScope.TypeLevel);\n });\n\n if (!action) return;\n\n const actionData = action.options?.process?.data;\n const initialData = actionData ? { ...data, ...(await this.evaluateExpressions(actionData)) } : data;\n const options = await this.evaluateExpressions(action?.options);\n await this.workflow.execute(commandName.split('&')[0], {\n entity: getEntityInfo(this.detailEntity()!).source,\n data: action.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : initialData,\n entityInfo: {\n name: this.detailEntity()?.name,\n module: this.detailEntity()?.module,\n title: this.detailEntity()?.title,\n parentKey: this.detailEntity()?.parentKey,\n source: `${this.detailEntity()?.module}.${this.detailEntity()?.name}`,\n },\n options,\n });\n }\n\n public evaluateExpressions = async (actionData: { [key: string]: string } | string) => {\n const parentData = this.parent.data;\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(parentData, path);\n },\n },\n };\n\n return await this.expressionEvaluator.evaluate(actionData, scope);\n };\n\n //#region ---- Evaluated Actions (Primary/Secondary) ----\n\n /**\n * Evaluate hidden/disabled expressions for primary actions and return the visible list.\n */\n public async getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]> {\n const scope: AXPExpressionEvaluatorScope = {};\n const actions = await Promise.all(\n this.allActions()\n .filter(\n (a) =>\n a.priority == 'primary' &&\n ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n )\n .map(async (a) => {\n const isHidden = await this.evaluateExpressions(a.hidden as string);\n if (isHidden) return null;\n const disabled = await this.evaluateExpressions(a.disabled as string);\n return { ...a, disabled } as AXPEntityCommandTriggerViewModel;\n }),\n );\n return actions.filter(Boolean) as AXPEntityCommandTriggerViewModel[];\n }\n\n /**\n * Evaluate hidden/disabled expressions for secondary actions and return the visible list.\n */\n public async getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]> {\n const scope: AXPExpressionEvaluatorScope = {};\n const actions = await Promise.all(\n this.allActions()\n .filter(\n (a) =>\n a.priority == 'secondary' &&\n ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n )\n .map(async (a) => {\n const isHidden = await this.evaluateExpressions(a.hidden as string);\n if (isHidden) return null;\n const disabled = await this.evaluateExpressions(a.disabled as string);\n return { ...a, disabled } as AXPEntityCommandTriggerViewModel;\n }),\n );\n return actions.filter(Boolean) as AXPEntityCommandTriggerViewModel[];\n }\n\n //#endregion\n}\n","export const AXPEntityEventsKeys = {\n REFRESH_LAYOUT: 'entity:refresh-layout',\n REFRESH_DATA: 'entity:refresh-data',\n};\n","import { Injectable, inject } from '@angular/core';\nimport { AXPDistributedEventListenerService } from '@acorex/platform/core';\n\n/**\n * Entity Event Dispatcher - A wrapper for entity-specific events\n * Handles pattern-based dispatching for entity operations with wildcard support\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPEntityEventDispatcherService {\n private readonly eventService = inject(AXPDistributedEventListenerService);\n\n async dispatchEntityEvent(\n operation: 'inserted' | 'updated' | 'deleted',\n entityName: string,\n data: any,\n ): Promise<void> {\n const enhancedData = {\n ...data,\n entityName,\n operation,\n timestamp: new Date(),\n source: 'entity-dispatcher',\n };\n\n const eventKeysToDispatch = await this.getAllMatchingEventKeys(operation, entityName);\n const dispatchPromises = eventKeysToDispatch.map((key) => this.eventService.dispatch(key, enhancedData));\n await Promise.all(dispatchPromises);\n }\n\n private async getAllMatchingEventKeys(operation: string, entityName: string): Promise<string[]> {\n const eventKeys = new Set<string>();\n const exactKeys = this.generateEventKeys(operation, entityName);\n exactKeys.forEach((key) => eventKeys.add(key));\n const wildcardKeys = await this.findMatchingWildcardKeys(operation, entityName);\n wildcardKeys.forEach((key) => eventKeys.add(key));\n return Array.from(eventKeys);\n }\n\n private async findMatchingWildcardKeys(operation: string, entityName: string): Promise<string[]> {\n const matchingKeys: string[] = [];\n const allListenerKeys = await this.eventService.getRegisteredKeys();\n const actualEventKey = `entity.${operation}.${entityName}`;\n for (const listenerKey of allListenerKeys) {\n if (listenerKey.includes('*') && this.matchesEntityPattern(actualEventKey, listenerKey)) {\n matchingKeys.push(listenerKey);\n }\n }\n return matchingKeys;\n }\n\n private matchesEntityPattern(eventKey: string, pattern: string): boolean {\n if (!pattern.startsWith('entity.') || !pattern.includes('*')) {\n return false;\n }\n const regexPattern = pattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*');\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(eventKey);\n }\n\n private generateEventKeys(operation: string, entityName: string): string[] {\n const keys: string[] = [];\n keys.push(`entity.${operation}`);\n keys.push(`entity.${operation}.${entityName}`);\n const entityParts = entityName.split('.');\n if (entityParts.length > 1) {\n const moduleName = entityParts[0];\n keys.push(`entity.${operation}.${moduleName}`);\n }\n return keys;\n }\n\n async dispatchInserted(entityName: string, data: any): Promise<void> {\n await this.dispatchEntityEvent('inserted', entityName, data);\n }\n\n async dispatchUpdated(entityName: string, data: any): Promise<void> {\n await this.dispatchEntityEvent('updated', entityName, data);\n }\n\n async dispatchDeleted(entityName: string, data: any): Promise<void> {\n await this.dispatchEntityEvent('deleted', entityName, data);\n }\n}\n\n\n","import {\n AXPEntity,\n AXPEntityProperty,\n AXPEntityPropertyCreateView,\n AXPEntityPropertyLayoutConfig,\n AXPEntitySectionView,\n getEntityInfo,\n} from '@acorex/platform/common';\nimport {\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n AXPGridLayoutOptions,\n} from '@acorex/platform/core';\nimport { AXPPageStatus, AXPWidgetCoreService, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { cloneDeep, get, merge, set } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\n\nexport class AXPEntityCreateViewSectionViewModel {\n constructor(\n private entity: AXPEntity,\n private section: AXPEntitySectionView,\n ) {}\n\n group = this.entity.groups?.find((c) => c.id == this.section.id)!;\n name = signal(this.group.id);\n\n title = computed<string>(() => {\n return this.group.title ?? this.group.id;\n });\n\n description = computed<string | null | undefined>(() => {\n return this.group.description;\n });\n\n layout = computed<AXPGridLayoutOptions>(() => {\n const source = cloneDeep(this.section.layout ?? {}) as object;\n set(source, 'positions.default.colSpan', 12);\n return source as AXPGridLayoutOptions;\n });\n\n elements = computed(() => {\n const { interfaces, properties } = this.entity;\n const createProps = interfaces?.master?.create?.properties ?? [];\n const createPropNames = new Set(createProps.map(({ name }) => name));\n\n const filteredProperties = properties.filter(\n ({ groupId, schema, name }) => groupId === this.group.id && createPropNames.has(name),\n );\n\n return filteredProperties.map((property) => {\n const createProp = createProps.find(({ name }) => name === property.name);\n return new AXPEntityCreateViewElementViewModel(this.entity, this, property, createProp!);\n });\n });\n}\n\nexport class AXPEntityCreateViewElementViewModel {\n constructor(\n private entity: AXPEntity,\n private section: AXPEntityCreateViewSectionViewModel,\n private property: AXPEntityProperty,\n private createProp: AXPEntityPropertyCreateView,\n ) {}\n\n name = signal(this.property.name);\n title = signal(this.property.title);\n description = signal(this.property.description);\n\n editable = computed<boolean>(() => {\n return !(this.property.schema.readonly ?? false);\n });\n\n isVisible = computed<boolean | string>(() => {\n return this.property.schema.visible ?? true;\n });\n\n isRequired = computed<boolean>(() => {\n return this.property.validations?.some((c) => c.rule == 'required') || false;\n });\n\n layout = computed<AXPEntityPropertyLayoutConfig>(() => {\n const source = cloneDeep(this.createProp.layout ?? {}) as object;\n set(source, 'positions.default.colSpan', 12);\n return source as AXPEntityPropertyLayoutConfig;\n });\n\n node = computed<AXPWidgetNode>(() => {\n const schema = this.property.schema!;\n const widget = schema.interface!;\n return {\n type: widget.type,\n mode: this.editable() ? 'edit' : 'view',\n path: this.name(),\n name: this.name(),\n children: widget.children,\n triggers: widget.triggers,\n defaultValue: schema.defaultValue,\n valueTransforms: widget.valueTransforms,\n options: merge({}, schema.interface?.options, {\n validations: this.property.validations?.map((c) => ({ rule: c.rule, message: c.message, options: c.options })),\n }),\n } as AXPWidgetNode;\n });\n}\n\nexport class AXPEntityMasterCreateViewModel {\n private entityDef = cloneDeep(this.config)!;\n\n private workflow = this.injector.get(AXPWorkflowService);\n private expressionEvaluator = this.injector.get(AXPExpressionEvaluatorService);\n\n public builder: AXPWidgetCoreService;\n\n constructor(\n private readonly injector: Injector,\n private readonly config: AXPEntity,\n private readonly initialData: any = {},\n private readonly commandOptions: any,\n ) {\n if (!initialData) initialData = {};\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(get(initialData, path));\n });\n });\n },\n },\n };\n\n this.context.set(initialData);\n this.options.set(commandOptions);\n //\n const { redirect = true, canCreateNewOne = true } = commandOptions?.['process'] ?? {};\n this.canCreateNewOne.set(canCreateNewOne);\n this.redirect.set(redirect);\n }\n\n public context = signal<any>(this.initialData ?? {});\n public options = signal<any>(this.commandOptions ?? {});\n\n public isInProgress = signal<boolean>(false);\n public canCreateNewOne = signal<boolean>(true);\n public redirect = signal<boolean>(true);\n\n public sections = computed<AXPEntityCreateViewSectionViewModel[]>(() => {\n const { interfaces, properties } = this.entityDef;\n const createProps = interfaces?.master?.create?.properties?.map(({ name }) => name) ?? [];\n\n const visibleProperties = properties.filter(({ groupId, schema, name }) => groupId && createProps.includes(name));\n\n const sections =\n interfaces?.master?.create?.sections?.filter(({ id }) =>\n visibleProperties.some(({ groupId }) => groupId === id),\n ) ?? [];\n console.log({ sections, visibleProperties });\n return sections.map((section) => new AXPEntityCreateViewSectionViewModel(this.entityDef, section));\n });\n\n public async save(): Promise<any | void> {\n try {\n this.isInProgress.set(true);\n this.builder.setStatus(AXPPageStatus.Submitting);\n const exec = this.entityDef.commands?.create?.execute as Function;\n const result = await exec(this.context());\n this.context.update((c) => ({ ...c, ...result }));\n return new Promise((resolve) => {\n setTimeout(() => {\n this.builder.setStatus(AXPPageStatus.Submitted);\n resolve(result);\n });\n });\n } catch (error: any) {\n this.builder.setStatus(AXPPageStatus.Error);\n return Promise.reject(error);\n } finally {\n this.isInProgress.set(false);\n }\n }\n\n public async createNewOne() {\n await this.workflow.execute('create-entity', {\n entity: getEntityInfo(this.entityDef).source,\n options: this.options(),\n data: this.initialData,\n // entityInfo\n });\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityCreateViewModelFactory {\n private entityService = inject(AXPEntityDefinitionRegistryService);\n private layout = inject(AXPLayoutThemeService);\n private injector = inject(Injector);\n\n public async create(\n moduleName: string,\n entityName: string,\n initialData: any = null,\n options: { canCreateNewOne: boolean; redirect: boolean } = { canCreateNewOne: true, redirect: true },\n ): Promise<AXPEntityMasterCreateViewModel> {\n this.layout.setNavigationLoading(true);\n const config = await this.entityService.resolve(moduleName, entityName);\n this.layout.setNavigationLoading(false);\n return new AXPEntityMasterCreateViewModel(this.injector, config, initialData, options);\n }\n}\n","import { AXDataSource, AXDataSourceFilterOption, AXDataSourceSortOption } from '@acorex/cdk/common';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n AXPEntity,\n AXPEntityCommandScope,\n AXPEntityProperty,\n AXPFilterOperatorMiddlewareService,\n AXPQueryView,\n AXPRefreshEvent,\n AXPReloadEvent,\n AXPSettingsService,\n getEntityInfo,\n} from '@acorex/platform/common';\nimport {\n AXPBreadcrumbItem,\n AXPBroadcastEventService,\n AXPExecuteCommand,\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n AXPFilterDefinition,\n AXPFilterQuery,\n AXPPlatformScope,\n} from '@acorex/platform/core';\nimport { AXPWidgetRegistryService, AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandService, AXPQueryExecutor } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService, ofType } from '@acorex/platform/workflow';\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';\nimport { cloneDeep, get, omit, orderBy, set } from 'lodash-es';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPEntityEventsKeys } from './entity-events.keys';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { AXPEntityCommandTriggerViewModel, AXPEntityListViewColumnViewModel } from './entity.viewmodel';\n\nexport interface AXPEntityMasterListViewSortPropViewModel {\n name: string;\n title: string;\n dir?: string;\n}\n\nexport class AXPEntityMasterListViewQueryViewModel {\n constructor(\n private entity: AXPEntity,\n private section: AXPEntityMasterListViewModel,\n private view: AXPQueryView,\n ) {}\n\n name = this.view.name;\n title = this.view.title;\n sorts = this.view.sorts;\n columns = this.view.columns;\n conditions = this.view.conditions;\n indexCol = this.view.indexCol;\n pageSize = this.view.pageSize;\n}\n\nexport class AXPEntityMasterListViewModel {\n readonly entityDef = cloneDeep(this.config)!;\n private readonly _viewDef = cloneDeep(this.entityDef.interfaces?.master?.list)!;\n private readonly formatService = this.injector.get(AXFormatService);\n private readonly session = this.injector.get(AXPSessionService);\n private readonly workflow = this.injector.get(AXPWorkflowService);\n private readonly settings = this.injector.get(AXPSettingsService);\n private readonly widgetResolver = this.injector.get(AXPWidgetRegistryService);\n private readonly expressionEvaluator = this.injector.get(AXPExpressionEvaluatorService);\n private readonly commandService = this.injector.get(AXPCommandService);\n private readonly eventService = this.injector.get(AXPBroadcastEventService);\n private readonly queryExecutor = this.injector.get(AXPQueryExecutor);\n\n private readonly filterOperatorMiddleware = this.injector.get(AXPFilterOperatorMiddlewareService);\n\n private settingEntityKey = `${this.config.module}:${this.config.name}`;\n private readonly destroyed = new Subject<void>();\n private lastAppliedSortKey: string | null = null;\n private lastAppliedFilterKey: string | null = null;\n private hasQueryParamsFilters = false; // Flag to prevent overriding queryParams filters\n\n public events$: Subject<{ action: string; meta?: any }> = new Subject();\n\n //****************** Views ******************//\n\n views = computed(() => {\n const views = this.entityDef.interfaces?.master?.list?.views ?? [];\n\n return views.map((v) => {\n return new AXPEntityMasterListViewQueryViewModel(this.entityDef, this, v);\n });\n });\n\n view = signal<AXPEntityMasterListViewQueryViewModel>(this.views()[0]);\n\n async setView(viewName: string | null = null) {\n const entitySetting = await this.settings.get(this.settingEntityKey);\n const selectedViewName = entitySetting?.list?.currentView;\n if (viewName != this.view().name) {\n this.view.set(this.views().find((c) => c.name == (viewName || selectedViewName)) ?? this.views()[0]);\n\n this.applyViewSorts();\n this.applyViewColumns();\n this.applyViewFilters();\n // this.applyFilterAndSort();\n await this.applySettings();\n }\n }\n\n dataSource = new AXDataSource({\n byKey: async (key) => {\n const execute = this.entityDef.queries?.byKey?.execute;\n if (typeof execute === 'function') {\n return await execute(key);\n } else if (typeof execute === 'string') {\n return await this.queryExecutor.fetch(execute, key);\n }\n return null;\n },\n load: async (e) => {\n const execute = this.entityDef.queries?.list?.execute;\n if (typeof execute === 'function') {\n return await execute(e);\n } else if (typeof execute === 'string') {\n return await this.queryExecutor.fetch(execute, e);\n }\n return null;\n },\n pageSize: this.view().pageSize || 10,\n key: 'id',\n });\n\n constructor(\n private injector: Injector,\n private config: AXPEntity,\n ) {\n this.workflow.events$\n .pipe(ofType(AXPRefreshEvent, AXPReloadEvent))\n .pipe(takeUntil(this.destroyed))\n .subscribe((event) => {\n if (event.payload.entity == getEntityInfo(this.entityDef).source) {\n this.selectedItems.set([]);\n this.events$.next({ action: 'refresh', meta: event.payload.meta });\n }\n });\n this.eventService\n .listen(AXPEntityEventsKeys.REFRESH_LAYOUT)\n .pipe(takeUntil(this.destroyed))\n .subscribe((e) => {\n if ((e.data as any).name == getEntityInfo(this.entityDef).source) {\n this.selectedItems.set([]);\n this.events$.next({ action: 'refresh' });\n }\n });\n this.sortedFields.set(this.sortableFields());\n }\n\n public async applySettings() {\n this.saveSettings('view');\n\n const listViewSetting = await this.settings.get(this.settingEntityKey);\n if (listViewSetting) {\n const columns = listViewSetting.list?.views?.[this.view().name]?.columns;\n const pageSize = listViewSetting.list?.views?.[this.view().name]?.pageSize;\n const sorts = listViewSetting.list?.views?.[this.view().name]?.sorts as any[] | undefined;\n const filters = listViewSetting.list?.views?.[this.view().name]?.filters as AXPFilterQuery[] | undefined;\n let columnVisibilityMap: Map<string, any> | undefined;\n let columnWidthsMap: Map<string, any> | undefined;\n if (columns) {\n columnVisibilityMap = new Map(columns.map((col: any) => [col.name, col.visible]));\n columnWidthsMap = new Map(columns.map((col: any) => [col.name, col.width]));\n }\n\n // Do not set pageSize here to avoid triggering an extra load\n\n if (columns && columnVisibilityMap && columnWidthsMap) {\n this.columns.update((prev) =>\n prev\n .map((c: any) => {\n return {\n ...c,\n width: columnWidthsMap!.get(c.column?.options?.dataPath ?? c.name),\n visible: columnVisibilityMap!.get(c.column?.options?.dataPath ?? c.name) ?? c.visible,\n };\n }) // Update visibility\n .sort(\n (a, b) =>\n columns.findIndex((col: any) => col.name === (a.column?.options?.dataPath ?? a.name)) -\n columns.findIndex((col: any) => col.name === (b.column?.options?.dataPath ?? b.name)),\n ),\n );\n }\n\n if (Array.isArray(sorts)) {\n // sorts are AXPSortQuery[]; ensure we map by name\n const sortsMap = new Map(sorts.map((s: any) => [s.name, s.dir]));\n this.sortedFields.update((prev) => prev.map((sf) => ({ ...sf, dir: sortsMap.get(sf.name) || sf.dir })));\n }\n\n // Don't override filters if they came from queryParams\n if (Array.isArray(filters) && !this.hasQueryParamsFilters) {\n this.filterQueries.set(filters);\n }\n }\n }\n\n public async saveSettings(\n changesType: 'columnSizes' | 'columnOrders' | 'view' | 'pageSize' | 'filters' | 'sorts',\n data?: any,\n ) {\n const updateSettings = (updateFn: (prev: any) => any) => {\n this.settings.scope(AXPPlatformScope.User).update(this.settingEntityKey, updateFn);\n };\n\n switch (changesType) {\n case 'columnSizes':\n updateSettings((prev) => {\n const field = data.dataField.split('-')[1];\n const newSettings = { ...prev };\n\n const existingColumns = prev?.list?.views?.[this.view().name]?.columns as any[] | undefined;\n const baseColumns =\n Array.isArray(existingColumns) && existingColumns.length\n ? existingColumns\n : this.allAvailableColumns().map((c: any) => ({\n name: c.column?.options?.dataPath ?? c.name,\n visible: c.visible,\n width: c.width,\n }));\n\n const updatedColumns = baseColumns.map((c: any) => ({\n ...c,\n width: c.name === field ? data.width : c.width,\n }));\n const x = this.allAvailableColumns().map((c: any) => ({\n name: c.column?.options?.dataPath ?? c.name,\n visible: c.visible,\n width: c.width,\n }));\n\n set(newSettings, `list.views.${this.view().name}.columns`, updatedColumns);\n console.log(newSettings, `list.views.${this.view().name}.columns`);\n return newSettings;\n });\n break;\n case 'columnOrders':\n updateSettings((prev) => {\n const newSettings = { ...prev };\n\n set(\n newSettings,\n `list.views.${this.view().name}.columns`,\n data.map((c: any) => ({\n name: c.column?.options?.dataPath ?? c.name,\n visible: c.visible,\n width: c.width,\n })),\n );\n\n return newSettings;\n });\n break;\n case 'view':\n updateSettings((prev) => ({\n ...prev,\n list: {\n ...prev?.list,\n currentView: this.view().name,\n },\n }));\n break;\n\n case 'pageSize':\n updateSettings((prev) => ({\n ...prev,\n list: {\n ...prev?.list,\n views: {\n ...prev?.list?.views,\n [this.view().name]: {\n ...prev?.list?.views?.[this.view().name],\n pageSize: data,\n },\n },\n },\n }));\n break;\n\n case 'filters':\n updateSettings((prev) => ({\n ...prev,\n list: {\n ...prev?.list,\n views: {\n ...prev?.list?.views,\n [this.view().name]: {\n ...prev?.list?.views?.[this.view().name],\n filters: data,\n },\n },\n },\n }));\n break;\n\n case 'sorts':\n updateSettings((prev) => ({\n ...prev,\n list: {\n ...prev?.list,\n views: {\n ...prev?.list?.views,\n [this.view().name]: {\n ...prev?.list?.views?.[this.view().name],\n sorts: data,\n },\n },\n },\n }));\n break;\n\n default:\n break;\n }\n }\n\n public selectedItems = signal<any[]>([]);\n\n /**\n * Selected category from the category sidebar (left panel).\n * Used to set default category when creating new entities via command.\n * Structure: { id: string; title: string } or null when \"All Items\" is selected.\n */\n public selectedCategory = signal<{ id: string; title: string } | null>(null);\n\n public parentKey = computed(() => {\n return this.entityDef.parentKey;\n });\n\n public hasSelectedItems = computed<boolean>(() => {\n return this.selectedItems().length > 0;\n });\n\n public clearSelection(): void {\n this.selectedItems.set([]);\n }\n\n /**\n * Sets the selected category from the category sidebar.\n * Call with null to clear (e.g. when \"All Items\" is selected).\n */\n public setSelectedCategory(category: { id: string; title: string } | null): void {\n this.selectedCategory.set(category);\n }\n\n //****************** Title ******************//\n public title = computed<string>(() => {\n return this._viewDef.title ?? this.entityDef.formats.plural!;\n });\n //****************** Description ******************//\n public description = computed<string | null>(() => {\n return this._viewDef.description ?? null;\n });\n\n //****************** Inline filter ******************//\n public inlineFiltersPlaceholders = computed<string[]>(() => {\n return this.entityDef.properties.filter((p) => p.options?.filter?.inline?.enabled).map((c) => c.title ?? c.name);\n });\n\n public hasInlineFilters = computed<boolean>(() => {\n return this.inlineFiltersPlaceholders().length > 0;\n });\n\n //****************** Beardcrumbs ******************//\n public beardcrumbs = computed<AXPBreadcrumbItem[]>(() => {\n return [\n {\n title: this.title(),\n },\n ];\n });\n\n //****************** Actions ******************//\n private allActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n const list = this.entityDef.interfaces?.master?.list?.actions ?? [];\n const actions = list.map((tr) => new AXPEntityCommandTriggerViewModel(this.entityDef, tr)) ?? [];\n const orderedActions = orderBy(actions, 'order', 'asc');\n return orderedActions;\n });\n\n /** Flattened actions including children for execute lookup */\n private flattenedActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n const flatten = (items: AXPEntityCommandTriggerViewModel[]): AXPEntityCommandTriggerViewModel[] => {\n const result: AXPEntityCommandTriggerViewModel[] = [];\n for (const a of items) {\n result.push(a);\n if (a.items?.length) {\n result.push(...flatten(a.items));\n }\n }\n return result;\n };\n return flatten(this.allActions());\n });\n\n public async getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]> {\n const scope: AXPExpressionEvaluatorScope = {};\n const actions = await Promise.all(\n this.allActions()\n .filter(\n (a) =>\n a.priority == 'primary' &&\n ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n )\n .map(async (a) => {\n const isHidden = await this.expressionEvaluator.evaluate(a.hidden, scope);\n if (isHidden) return null;\n const disabled = await this.expressionEvaluator.evaluate(a.disabled, scope);\n return { ...a, disabled };\n }),\n );\n return actions as AXPEntityCommandTriggerViewModel[];\n }\n\n public async getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]> {\n const scope: AXPExpressionEvaluatorScope = {};\n const actions = await Promise.all(\n this.allActions()\n .filter(\n (a) =>\n a.priority == 'secondary' &&\n ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n )\n .map(async (a) => {\n const isHidden = await this.expressionEvaluator.evaluate(a.hidden, scope);\n if (isHidden) return null;\n const disabled = await this.expressionEvaluator.evaluate(a.disabled, scope);\n return { ...a, disabled };\n }),\n );\n return actions as AXPEntityCommandTriggerViewModel[];\n }\n\n public selectedScopeActionsCount = computed<number>(() => {\n return this.allActions().filter((a) => a.scope == AXPEntityCommandScope.Selected).length;\n });\n\n public primaryRowActions = computed<AXPEntityCommandTriggerViewModel[]>(() =>\n this.allActions().filter((a) => a.scope == AXPEntityCommandScope.Individual && a.priority === 'primary'),\n );\n\n public async secondaryRowActions(rowData: any): Promise<AXPEntityCommandTriggerViewModel[]> {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(rowData, path),\n },\n };\n\n const actions = await Promise.all(\n this.allActions()\n .filter((a) => a.scope === AXPEntityCommandScope.Individual && a.priority === 'secondary')\n .map(async (a) => {\n const isHidden = await this.expressionEvaluator.evaluate(a.hidden, scope);\n if (isHidden) return null;\n const disabled = await this.expressionEvaluator.evaluate(a.disabled, scope);\n return { ...a, disabled };\n }),\n );\n\n return actions.filter(Boolean) as AXPEntityCommandTriggerViewModel[];\n }\n\n //****************** Filter ******************//\n\n filterQueries = signal<AXPFilterQuery[]>([]);\n\n private static readonly URL_FILTER_OPERATOR_TYPES = new Set<string>([\n 'equal',\n 'isNull',\n 'isEmpty',\n 'lt',\n 'lte',\n 'gt',\n 'gte',\n 'startsWith',\n 'endsWith',\n 'contains',\n 'in',\n ]);\n\n get properties(): AXPEntityProperty[] {\n return this.entityDef.properties;\n }\n\n /**\n * Canonical JSON for the `filters` query param (sorted by field), or null when there are no active value filters.\n */\n filtersQueryParamCanonical(queries: AXPFilterQuery[]): string | null {\n const items = this.toUrlFilterPayloadItems(queries);\n return items.length ? JSON.stringify(items) : null;\n }\n\n /**\n * Parse a `filters` query string to the same canonical form used by {@link filtersQueryParamCanonical}.\n */\n static parseQueryParamFiltersToCanonical(filtersJson: string | null): string | null {\n if (!filtersJson) {\n return null;\n }\n try {\n const parsed: unknown = JSON.parse(filtersJson);\n let rows: Array<{ field: string; value: unknown; operator?: unknown }> = [];\n if (Array.isArray(parsed)) {\n rows = parsed.filter(\n (x): x is { field: string; value: unknown; operator?: unknown } =>\n !!x && typeof x === 'object' && typeof (x as { field?: unknown }).field === 'string',\n ) as Array<{ field: string; value: unknown; operator?: unknown }>;\n } else if (parsed !== null && typeof parsed === 'object') {\n rows = Object.entries(parsed as Record<string, unknown>)\n .filter(([_, value]) => value !== undefined && value !== null && value !== '')\n .map(([field, value]) => ({ field, value, operator: { type: 'equal' } }));\n } else {\n return null;\n }\n const items = rows\n .filter((r) => r.field !== '' && r.value !== undefined && r.value !== null && r.value !== '')\n .map((r) => ({\n field: r.field,\n operator: AXPEntityMasterListViewModel.coerceFilterOperatorFromUrl(r.operator),\n value: r.value,\n }))\n .sort((a, b) => a.field.localeCompare(b.field));\n return items.length ? JSON.stringify(items) : null;\n } catch {\n return null;\n }\n }\n\n private toUrlFilterPayloadItems(\n queries: AXPFilterQuery[],\n ): Array<{ field: string; operator: { type: string }; value: unknown }> {\n return queries\n .filter(\n (f) =>\n typeof f.field === 'string' && f.field !== '' && f.value !== undefined && f.value !== null && f.value !== '',\n )\n .map((f) => ({\n field: f.field as string,\n operator: AXPEntityMasterListViewModel.coerceFilterOperatorFromUrl(f.operator),\n value: f.value,\n }))\n .sort((a, b) => a.field.localeCompare(b.field));\n }\n\n private static coerceFilterOperatorFromUrl(op: unknown): { type: string } {\n if (op && typeof op === 'object' && op !== null && 'type' in op) {\n const t = String((op as { type: string }).type);\n if (AXPEntityMasterListViewModel.URL_FILTER_OPERATOR_TYPES.has(t)) {\n return { type: t };\n }\n }\n return { type: 'equal' };\n }\n\n /**\n * Apply filters from query params\n */\n applyFiltersFromQueryParams(filtersJson: string | null): boolean {\n if (!filtersJson) {\n return false;\n }\n\n try {\n const parsed = JSON.parse(filtersJson);\n\n // Handle both array and object formats\n let filters: AXPFilterQuery[] = [];\n if (Array.isArray(parsed)) {\n // Already in array format\n filters = parsed;\n } else if (typeof parsed === 'object' && parsed !== null) {\n // Convert object to array of filter queries\n filters = Object.entries(parsed)\n .filter(([_, value]) => value !== undefined && value !== null && value !== '')\n .map(([field, value]) => ({\n field,\n operator: { type: 'equal' as const },\n value,\n }));\n }\n\n if (filters.length > 0) {\n const convertedFilters: AXPFilterQuery[] = filters\n .filter((f) => typeof f.field === 'string' && f.field !== '')\n .map((f) => ({\n field: f.field,\n operator: AXPEntityMasterListViewModel.coerceFilterOperatorFromUrl(\n f.operator,\n ) as AXPFilterQuery['operator'],\n value: f.value,\n readOnly: true,\n }));\n this.filterQueries.set(convertedFilters);\n this.hasQueryParamsFilters = true; // Mark that we have filters from queryParams\n return true;\n }\n } catch (error) {\n console.error('[AXPEntityMasterListViewModel] Failed to parse filters from query params:', error);\n }\n\n return false;\n }\n\n get filtersDef(): AXPFilterDefinition[] {\n const props = this.entityDef.properties.filter(\n (c) =>\n c.options?.filter?.advance?.enabled ||\n c.options?.filter?.inline?.enabled ||\n c.options?.filter?.preload?.enabled,\n );\n return props.map((e) => {\n const widgetConfig = this.widgetResolver.resolve(\n e.schema.interface?.type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap],\n );\n\n const type = (e.options?.filter?.advance?.widgetType ||\n widgetConfig?.defaultFilterWidgetName ||\n e.schema.interface?.type) as AXPWidgetTypesMap[keyof AXPWidgetTypesMap];\n\n const disabled = e.schema.interface?.options?.['disabled'];\n const iface = e.schema.interface ?? {};\n return {\n title: e.title,\n field: e.name,\n operator: {\n type: 'contains',\n },\n widget: { ...omit(iface as object, 'triggers'), path: e.name, type },\n filters: [],\n isParametric: false,\n icon: widgetConfig?.icon,\n filterType: {\n advance: e.options?.filter?.advance?.enabled ?? false,\n inline: e.options?.filter?.inline?.enabled ?? false,\n preload: e.options?.filter?.preload,\n },\n disabled,\n triggers: e.schema.interface?.triggers,\n };\n });\n }\n\n get preloadFiltersDef(): AXPFilterDefinition[] {\n return this.filtersDef.filter((f) => f.filterType.preload?.enabled);\n }\n\n // const viewFilters = this.view().conditions.map((f) => ({\n // field: f.name,\n // operator: f.operator,\n // value: f.value,\n // }));\n async applyViewFilters() {\n // Don't override filters if they came from queryParams\n if (this.hasQueryParamsFilters) {\n return;\n }\n\n const viewFilters = this.view().conditions.map((f) => ({\n field: f.name,\n operator: f.operator,\n value: f.value,\n }));\n this.filterQueries.set(viewFilters as AXPFilterQuery[]);\n }\n\n resetFilters() {\n this.hasQueryParamsFilters = false; // Reset flag when user resets filters\n this.applyViewFilters();\n }\n\n async applyFilterAndSort() {\n const sorts = this.sortedFields()\n .filter((sf) => sf.dir)\n .map((s) => ({ name: s.name, dir: s.dir })) as { name: string; dir: string }[];\n const filters = this.filterQueries();\n\n const sortKey = JSON.stringify(sorts);\n const filterKey = JSON.stringify(filters);\n\n if (sortKey === this.lastAppliedSortKey && filterKey === this.lastAppliedFilterKey) {\n return; // No effective change; avoid redundant refresh\n }\n\n // Determine if filters changed (for pagination reset)\n const filtersChanged = filterKey !== this.lastAppliedFilterKey;\n\n this.lastAppliedSortKey = sortKey;\n this.lastAppliedFilterKey = filterKey;\n\n this.dataSource.clearFilter();\n this.dataSource.sort(...sorts.map((s) => ({ dir: s.dir as any, field: s.name }) as AXDataSourceSortOption));\n\n this.dataSource.filter(\n this.filterOperatorMiddleware.transformFilter({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: filters as AXDataSourceFilterOption[],\n }),\n );\n this.events$.next({ action: 'refresh', meta: { resetPagination: filtersChanged } });\n }\n\n //****************** Columns ******************//\n\n private allAvailableColumns = (): AXPEntityListViewColumnViewModel[] => {\n const { columns = [], properties } = this.entityDef;\n // const visibleProperties = properties.filter(({ schema }) => schema?.visible !== false);\n const propNames = new Set(properties.map(({ name }) => name));\n return columns\n .filter(({ name, showAs, hidden }) => (propNames.has(name) || showAs) && !hidden)\n .map((column) => {\n if (column.showAs) {\n const widgetConfig = this.widgetResolver.resolve(\n column.showAs.type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap],\n );\n const property: AXPEntityProperty = {\n ...widgetConfig,\n name: column.name,\n title: column.title ?? '',\n schema: {\n dataType: 'string',\n interface: {\n type: column.showAs.type,\n options: column.showAs.options,\n },\n },\n };\n return new AXPEntityListViewColumnViewModel(property, column);\n } else {\n const property = properties.find(({ name }) => name === column.name);\n return new AXPEntityListViewColumnViewModel(property!, column);\n }\n });\n };\n\n visibleColumnCount = () => {\n return this.columns().filter((c) => c.visible == true).length;\n };\n\n columns = signal<AXPEntityListViewColumnViewModel[]>([]);\n\n resetColumns() {\n this.applyViewColumns();\n }\n\n async onColumnsChanged(columns: AXPEntityListViewColumnViewModel[]) {\n this.saveSettings('columnOrders', columns);\n }\n\n applyViewColumns() {\n const cols = this.view().columns;\n const cloned = this.allAvailableColumns().map((c) => {\n const column = this.entityDef.columns?.find((cc) => cc.name == c.name);\n const col = new AXPEntityListViewColumnViewModel(c.property, column!);\n col.visible = !cols.some((c) => c == col.name) && col.visible != false;\n return col;\n });\n this.columns.set(cloned);\n }\n\n onColumnsOrderChanged(event: any) {\n const columns = [...this.columns()];\n moveItemInArray(columns, event.previousIndex - 1, event.currentIndex - 1);\n this.columns.set(columns);\n this.saveSettings('columnOrders', columns);\n }\n\n //****************** Sort ******************//\n\n sortableFields = () => {\n const props = this.entityDef.properties.filter((c) => c.options?.sort?.enabled);\n return props.map((e) => {\n return {\n name: e.name,\n title: e.title,\n dir: undefined,\n };\n });\n };\n\n sortableFieldsCount = () => {\n return this.entityDef.properties.filter((c) => c.options?.sort?.enabled).length ?? 0;\n };\n\n canSort = () => {\n return this.sortableFieldsCount() > 0;\n };\n\n canAddMoreSort = () => {\n return this.sortedCount() < this.sortableFieldsCount();\n };\n\n sortedCount = () => {\n return this.sortedFields().filter((i) => i.dir).length;\n };\n\n sortedFields = signal<AXPEntityMasterListViewSortPropViewModel[]>([]);\n\n resetSorts() {\n this.applyViewSorts();\n }\n\n applyViewSorts() {\n const viewSorts = this.view().sorts;\n\n this.sortedFields.update((prev) => {\n const viewSortsMap = new Map(viewSorts.map((vs) => [vs.name, vs]));\n return prev.map((sf) => {\n const updatedSort = viewSortsMap.get(sf.name);\n if (updatedSort) {\n return { ...updatedSort, title: sf.title };\n }\n return sf;\n });\n });\n }\n\n //****************** Commands ******************//\n public async executeCommand(commandName: string, data: any = null) {\n const action = this.flattenedActions().find((c) => {\n return (\n c.name == commandName &&\n ((this.selectedItems().length && !data // added by Arash\n ? c.scope == AXPEntityCommandScope.Selected\n : c.scope == AXPEntityCommandScope.Individual) ||\n c.scope == AXPEntityCommandScope.TypeLevel)\n );\n });\n const command = commandName.split('&')[0];\n const options = await this.evaluateExpressions(action?.options, data);\n\n const baseData = action?.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : data;\n const commandData = this.mergeDefaultCategoryForCreate(command, baseData);\n\n if (this.workflow.exists(command)) {\n await this.workflow.execute(command, {\n entity: getEntityInfo(this.entityDef).source,\n entityInfo: {\n name: this.entityDef.name,\n module: this.entityDef.module,\n title: this.entityDef.title,\n parentKey: this.entityDef.parentKey,\n source: `${this.entityDef.module}.${this.entityDef.name}`,\n },\n data: commandData,\n options: options,\n metadata: action?.metadata,\n });\n } else {\n const commandOptions = {\n __context__: {\n data: commandData,\n entity: getEntityInfo(this.entityDef).source,\n entityInfo: {\n name: this.entityDef.name,\n module: this.entityDef.module,\n title: this.entityDef.title,\n parentKey: this.entityDef.parentKey,\n },\n options,\n },\n __metadata__: action?.metadata,\n };\n\n this.commandService.execute(command, commandOptions);\n // this.commandService.execute(command, {\n // entity: getEntityInfo(this.entityDef).source,\n // entityInfo: {\n // name: this.entityDef.name,\n // module: this.entityDef.module,\n // title: this.entityDef.title,\n // parentKey: this.entityDef.parentKey,\n // source: `${this.entityDef.module}.${this.entityDef.name}`,\n // },\n // data: action?.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : data,\n // options: options,\n // metadata: action?.metadata,\n // });\n }\n }\n\n /**\n * Merges default category from selected category in sidebar when executing create command.\n * For Entity:Create and create-entity, if entity has category plugin and a category is selected,\n * pre-fills categoryIds and categories for the create form.\n */\n private mergeDefaultCategoryForCreate(command: string, baseData: any): any {\n const isCreateCommand = command === 'Entity:Create' || command === 'create-entity';\n if (!isCreateCommand) {\n return baseData;\n }\n\n const categoryExt = (this.entityDef as any).extensions?.category;\n if (!categoryExt) {\n return baseData;\n }\n\n const selectedCat = this.selectedCategory();\n if (!selectedCat) {\n return baseData;\n }\n\n const propName = categoryExt.propertyName || 'categoryIds';\n const valueField = categoryExt.valueField ?? 'id';\n const textField = categoryExt.textField ?? 'title';\n const idVal = (selectedCat as any)[valueField] ?? selectedCat.id;\n const titleVal = (selectedCat as any)[textField] ?? selectedCat.title;\n const defaultCategoryData = {\n [propName]: [idVal],\n categories: [{ [valueField]: idVal, [textField]: titleVal }],\n };\n\n if (baseData == null || (Array.isArray(baseData) && baseData.length === 0)) {\n return defaultCategoryData;\n }\n if (typeof baseData === 'object' && !Array.isArray(baseData)) {\n return { ...baseData, ...defaultCategoryData };\n }\n return baseData;\n }\n\n private evaluateExpressions = async (options: { [key: string]: string }, data: any) => {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(data, path);\n },\n },\n };\n return await this.expressionEvaluator.evaluate(options, scope);\n };\n\n async execute(command: AXPExecuteCommand): Promise<void> {\n switch (command?.name) {\n case 'navigate':\n await this.workflow.execute('navigate', {\n options: {\n path: command.options?.['path'],\n },\n });\n break;\n default:\n this.executeCommand(command.name);\n break;\n }\n }\n\n //\n destroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityListViewModelFactory {\n private entityService = inject(AXPEntityDefinitionRegistryService);\n private layout = inject(AXPLayoutThemeService);\n private injector = inject(Injector);\n\n public async create(moduleName: string, entityName: string): Promise<AXPEntityMasterListViewModel> {\n this.layout.setNavigationLoading(true);\n const config = await this.entityService.resolve(moduleName, entityName);\n this.layout.setNavigationLoading(false);\n return new AXPEntityMasterListViewModel(this.injector, config);\n }\n}\n\nexport const AXPEntityListViewModelResolver: ResolveFn<Promise<AXPEntityMasterListViewModel>> = async (\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n service: AXPEntityListViewModelFactory = inject(AXPEntityListViewModelFactory),\n): Promise<AXPEntityMasterListViewModel> => {\n const moduleName = route.parent?.paramMap.get('module') as string;\n const entityName = route.paramMap.get('entity') as string;\n\n const vm = await service.create(moduleName, entityName);\n\n // Check if filters are provided in query params\n const filtersParam = route.queryParamMap.get('filters');\n if (filtersParam) {\n const applied = vm.applyFiltersFromQueryParams(filtersParam);\n if (applied) {\n // Trigger filter and sort application\n await vm.applyFilterAndSort();\n }\n }\n\n return vm;\n};\n","import { AXDialogService } from '@acorex/components/dialog';\nimport { AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPEntity, AXPRefreshEvent, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\n\nexport const AXPEntityDeletedEvent = createWorkFlowEvent<{ entity: string; ids: string[]; meta?: any }>(\n '[Entity] Deleted',\n);\n\nexport interface AXPEntityDeleteOptions {\n source: string;\n ids: string[];\n}\n\n@Injectable()\nexport class AXPEntityPerformDeleteAction extends AXPWorkflowAction {\n private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n private dialogService = inject(AXDialogService);\n private loadingDialog = inject(AXLoadingDialogService);\n private translationService = inject(AXTranslationService);\n private settingsService = inject(AXPSettingsService);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const moduleEntity = context.getVariable('entity');\n const data = context.getVariable<any>('data');\n const meta = context.getVariable<any>('meta');\n\n const showResult = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n const entities: AXPEntityDeleteOptions[] = [];\n if (moduleEntity != null) {\n const ids = Array.isArray(data) ? data.map((c) => c.id) : [data.id];\n entities.push({\n source: moduleEntity,\n ids: ids,\n });\n } else {\n const listEntities = context.getVariable('entities');\n entities.push(...listEntities);\n }\n\n const entityDefinitions: { [key: string]: AXPEntity } = {};\n let deletedCount = 0;\n context.setVariable('deleteSuccessful', false);\n for await (const entity of entities) {\n const [moduleName, entityName] = entity.source.split('.');\n const entityDefinition = await this.entityRegistery.resolve(moduleName, entityName);\n if (data != null && entityDefinition.parentKey && data[entityDefinition.parentKey]) {\n context.setVariable('meta', { ...meta, refreshTargetId: data[entityDefinition.parentKey] });\n }\n entityDefinitions[entity.source] = entityDefinition;\n }\n\n // Compute consolidated ids from all entities\n const idLength = entities.reduce((acc: number, curr) => acc + curr.ids.length, 0);\n let dialog: any;\n let showDialogTimeout: any;\n let isDialogShown = false;\n\n // Create dialog config but don't show it yet\n const createDialog = async () => {\n dialog = this.loadingDialog.show({\n title: await this.translationService.translateAsync('@general:workflow.deleting'),\n mode: 'determinate',\n status: 'Deleting...',\n progressValue: 0,\n text: `0/${idLength}`,\n buttons: [\n {\n text: await this.translationService.translateAsync('@general:actions.cancel.title'),\n color: 'danger',\n onClick: () => {\n if (dialog) {\n dialog.close();\n }\n },\n },\n ],\n });\n isDialogShown = true;\n };\n\n // Set timeout to show dialog after 2 seconds if process is not complete\n showDialogTimeout = setTimeout(async () => {\n await createDialog();\n }, 2000);\n\n let allPromises: any[] = [];\n for (const entity of entities) {\n const entityDefinition = entityDefinitions[entity.source];\n if (entityDefinition.commands?.delete != null) {\n const deleteExec = entityDefinition.commands?.delete?.execute as Function;\n const entityPromises = (entity.ids as any[])\n .map((id, i) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(deleteExec(id));\n }, i * 200);\n });\n })\n .map((p) =>\n p?.then(\n (value) => {\n deletedCount++;\n if (isDialogShown && dialog) {\n dialog.setProgressText(`${deletedCount}/${idLength}`);\n dialog.setProgressValue((deletedCount / idLength) * 100);\n }\n return { status: 'fulfilled', value };\n },\n (reason) => ({ status: 'rejected', reason }),\n ),\n );\n\n allPromises = allPromises.concat(entityPromises);\n } else {\n // Clear timeout if error occurs\n clearTimeout(showDialogTimeout);\n throw new Error(\n `The delete operation cannot be performed on ${entityDefinition.title}. This action might be restricted or not applicable for the selected item.`,\n );\n }\n }\n\n const results = await Promise.all(allPromises);\n // Clear timeout as process is complete\n clearTimeout(showDialogTimeout);\n\n if (isDialogShown) {\n setTimeout(() => {\n dialog.close();\n }, 300);\n }\n\n // Store the last entity for use in event dispatching\n const lastEntity = entities[entities.length - 1];\n\n // Handle different scenarios for alerts\n const successfulPromises = results.filter((result: any) => result?.status === 'fulfilled').length;\n const failedPromises = results.filter((result: any) => result?.status === 'rejected').length;\n\n if (successfulPromises > 0 && failedPromises === 0) {\n // All items deleted successfully\n if (showResult) {\n await this.dialogService.alert(\n await this.translationService.translateAsync('@general:workflow.success-delete-title'),\n await this.translationService.translateAsync('@general:workflow.success-delete-body', {\n params: { item: successfulPromises },\n }), //TODO test translation\n 'success',\n );\n }\n // Dispatch actions\n this.dispatch(AXPEntityDeletedEvent({ entity: lastEntity.source, ids: lastEntity.ids, meta: meta }));\n this.dispatch(AXPRefreshEvent({ entity: lastEntity.source, meta: context.getVariable<any>('meta') }));\n } else if (successfulPromises > 0 && failedPromises > 0) {\n // Some items deleted successfully, some failed\n if (showResult) {\n await this.dialogService.alert(\n await this.translationService.translateAsync('@general:workflow.success-partial-delete-title'),\n await this.translationService.translateAsync('@general:workflow.partial-delete-body', {\n params: { success: successfulPromises, fail: failedPromises },\n }),\n 'warning',\n );\n }\n // Dispatch actions\n this.dispatch(AXPEntityDeletedEvent({ entity: lastEntity.source, ids: lastEntity.ids, meta: meta }));\n } else if (successfulPromises === 0 && failedPromises > 0) {\n // No items deleted, all failed\n if (showResult) {\n await this.dialogService.alert(\n await this.translationService.translateAsync('@general:workflow.fail-delete-title'),\n await this.translationService.translateAsync('@general:workflow.fail-delete-body', {\n params: { item: failedPromises },\n }),\n 'danger',\n );\n }\n } else {\n // No items to delete (no successful or failed promises)\n if (showResult) {\n await this.dialogService.alert(\n await this.translationService.translateAsync('@general:workflow.no-need'),\n await this.translationService.translateAsync('@general:workflow.no-item'),\n 'primary',\n );\n }\n }\n }\n}\n\nexport const AXPDeleteEntityWorkflow: AXPWorkflow = {\n startStepId: 'confirm-delete',\n steps: {\n 'confirm-delete': {\n action: 'show-prompt-dialog',\n input: {\n title: '@general:workflow.warning',\n message: '@general:workflow.confirm-delete',\n type: 'danger',\n },\n nextSteps: [\n {\n conditions: [\n {\n type: 'AND',\n conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"result\") == true' }],\n },\n ],\n nextStepId: 'perform-delete',\n },\n ],\n },\n 'perform-delete': {\n action: 'entity-perform-delete',\n },\n },\n};\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport {\n AXPEntity,\n AXPEntityProperty,\n AXPEntityPropertyLayoutConfig,\n AXPEntitySectionView,\n} from '@acorex/platform/common';\nimport { AXPGridLayoutOptions } from '@acorex/platform/core';\nimport { AXPPageStatus, AXPWidgetCoreService, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { computed, inject, Injectable, Injector, signal } from '@angular/core';\nimport { cloneDeep, merge, set } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\n\nexport class AXPEntityUpdateViewSectionViewModel {\n constructor(\n private entity: AXPEntity,\n private section: AXPEntitySectionView,\n ) {}\n\n group = this.entity.groups?.find((c) => c.id == this.section.id)!;\n name = signal(this.group.id);\n\n title = computed<string>(() => {\n return this.group.title ?? this.group.id;\n });\n\n description = computed<string | null | undefined>(() => {\n return this.group.description;\n });\n\n layout = computed<AXPGridLayoutOptions>(() => {\n const source = cloneDeep(this.section.layout ?? {}) as object;\n set(source, 'positions.default.colSpan', 12);\n return source as AXPGridLayoutOptions;\n });\n\n elements = computed(() => {\n const { interfaces, properties } = this.entity;\n const updateProps = interfaces?.master?.update?.properties ?? [];\n const updatePropNames = new Set(updateProps.map(({ name }) => name));\n\n const filteredProperties = properties.filter(\n ({ groupId, schema, name }) => groupId === this.group.id && schema.visible !== false && updatePropNames.has(name),\n );\n\n return filteredProperties.map((property) => {\n const updateProp = updateProps.find(({ name }) => name === property.name);\n return new AXPEntityMasterUpdateElementViewModel(this.entity, property);\n });\n });\n}\n\nexport class AXPEntityMasterUpdateElementViewModel {\n constructor(\n private entity: AXPEntity,\n private property: AXPEntityProperty,\n ) {}\n\n name = signal(this.property.name);\n title = signal(this.property.title);\n description = signal(this.property.description);\n\n editable = computed<boolean>(() => {\n return !(this.property.schema.readonly ?? false);\n });\n\n isVisible = computed<boolean | string>(() => {\n return this.property.schema.visible ?? true;\n });\n\n isRequired = computed<boolean>(() => {\n return this.property.validations?.some((c) => c.rule == 'required') || false;\n });\n\n layout = computed<AXPEntityPropertyLayoutConfig>(() => {\n const updateProp = this.entity.interfaces?.master?.update?.properties?.find((c) => c.name == this.property.name);\n const source = cloneDeep(updateProp?.layout ?? {}) as object;\n set(source, 'positions.default.colSpan', 12);\n return source as AXPEntityPropertyLayoutConfig;\n });\n\n node = computed<AXPWidgetNode>(() => {\n const schema = this.property.schema!;\n const widget = schema.interface!;\n return {\n type: widget.type,\n mode: this.editable() ? 'edit' : 'view',\n path: this.name(),\n name: this.name(),\n children: widget.children,\n triggers: widget.triggers,\n valueTransforms: widget.valueTransforms,\n options: merge({}, schema.interface?.options, {\n validations: this.property.validations?.map((c) => ({ rule: c.rule, message: c.message, options: c.options })),\n }),\n } as AXPWidgetNode;\n });\n}\n\nexport class AXPEntityMasterUpdateViewModel {\n private entityDef = cloneDeep(this.config)!;\n private workflow = this.injector.get(AXPWorkflowService);\n private sessionService = this.injector.get(AXPSessionService);\n\n // Dynamically resolve identifiers when needed\n private get moduleName(): string {\n return (this.config as any).module ?? '';\n }\n\n private get entityName(): string {\n return (this.config as any).name ?? '';\n }\n\n private get entityId(): string {\n return this.entityData?.id ?? '';\n }\n\n public builder: AXPWidgetCoreService;\n\n constructor(\n private injector: Injector,\n private config: AXPEntity,\n private entityData: any,\n private props: string[],\n ) {}\n\n public isInProgress = signal<boolean>(false);\n\n public context = signal<any>(cloneDeep(this.entityData));\n\n elements = computed(() => {\n const props = this.entityDef.properties.filter((c) => this.props.includes(c.name) && c.schema.visible !== false);\n return props.map((e) => {\n return new AXPEntityMasterUpdateElementViewModel(this.entityDef, e);\n });\n });\n\n sections = computed<AXPEntityUpdateViewSectionViewModel[]>(() => {\n const { interfaces, properties } = this.entityDef;\n const updateProps = interfaces?.master?.update?.properties?.map(({ name }) => name) ?? [];\n\n const visibleProperties = properties.filter(\n ({ groupId, schema, name }) => groupId && schema.visible !== false && updateProps.includes(name),\n );\n\n const sections =\n interfaces?.master?.update?.sections?.filter(({ id }) =>\n visibleProperties.some(({ groupId }) => groupId === id),\n ) ?? [];\n\n return sections.map((section) => new AXPEntityUpdateViewSectionViewModel(this.entityDef, section));\n });\n\n public async save(): Promise<any> {\n this.isInProgress.set(true);\n this.builder.setStatus(AXPPageStatus.Submitting);\n try {\n const com = this.entityDef.commands?.update;\n if (com) {\n return new Promise((resolve) => {\n setTimeout(async () => {\n const exec = com.execute as Function;\n const result = await exec(this.context());\n this.builder.setStatus(AXPPageStatus.Submitted);\n resolve(result);\n });\n });\n }\n } catch (error: any) {\n this.builder.setStatus(AXPPageStatus.Error);\n return Promise.reject(error);\n } finally {\n this.isInProgress.set(false);\n }\n }\n\n public reset() {\n this.context.set(cloneDeep(this.entityData));\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityMasterUpdateViewModelFactory {\n private entityService = inject(AXPEntityDefinitionRegistryService);\n private layout = inject(AXPLayoutThemeService);\n private injector = inject(Injector);\n\n public async create(\n moduleName: string,\n entityName: string,\n id: string,\n props: string[],\n ): Promise<AXPEntityMasterUpdateViewModel> {\n const config = await this.entityService.resolve(moduleName, entityName);\n this.layout.setNavigationLoading(true);\n if (config.queries?.byKey) {\n const func = config.queries?.byKey?.execute as Function;\n const data = await func(id);\n this.layout.setNavigationLoading(false);\n\n return new AXPEntityMasterUpdateViewModel(this.injector, config, data, props);\n }\n this.layout.setNavigationLoading(false);\n return Promise.reject('cannot fetch ');\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPRefreshEvent } from '@acorex/platform/common';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPEntityMasterUpdateViewModelFactory } from '../entity-master-update.viewmodel';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXP_ENTITY_CONFIG_TOKEN } from '../entity.config';\n\nexport const AXPEntityModifyEvent = createWorkFlowEvent<{ entity: string; values: any }>('[Entity] Modified');\n\n@Injectable()\nexport class AXPEntityModifySectionPopupAction extends AXPWorkflowAction {\n private popupService = inject(AXPopupService);\n private platform = inject(AXPlatform);\n private translateService = inject(AXTranslationService);\n private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n private config = inject(AXP_ENTITY_CONFIG_TOKEN);\n private factory = inject(AXPEntityMasterUpdateViewModelFactory);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const [moduleName, entityName] = context.getVariable<string>('entity').split('.');\n const { properties, id, title } = context.getVariable('data');\n const entityRef = await this.entityRegistery.resolve(moduleName, entityName);\n const vm = await this.factory.create(moduleName, entityName, id, properties);\n\n const options = context.getVariable<any>('options');\n const decoration = options?.['decoration'];\n const headerTitle = decoration?.header?.title;\n\n const com = await this.config.viewers.master.modify();\n const popup = await this.popupService.open(com, {\n title: headerTitle\n ? headerTitle\n : title ??\n `${this.translateService.translateSync('entity.modify')} ${this.translateService.translateSync(\n entityRef.formats.individual\n )}`,\n size: this.platform.is('Mobile') || this.platform.is('SM') ? 'full' : 'md',\n data: {\n vm,\n properties,\n entity: entityRef,\n },\n });\n context.setOutput('result', false);\n if (popup.data?.result == true) {\n context.setOutput('result', true);\n context.setVariable('data', cloneDeep(popup.data.context));\n }\n }\n}\n\n@Injectable()\nexport class AXPEntityModifyConfirmedAction extends AXPWorkflowAction {\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const updatedData = context.getVariable('data');\n this.dispatch(AXPEntityModifyEvent({ entity: context.getVariable<string>('entity'), values: updatedData }));\n\n const gridItemParentKey = context.getVariable('parentKey');\n\n this.dispatch(\n AXPRefreshEvent({\n entity: context.getVariable<string>('entity'),\n meta: {\n refreshTargetId: updatedData[gridItemParentKey],\n },\n })\n );\n }\n}\n\nexport const AXPModifyEntitySectionWorkflow: AXPWorkflow = {\n startStepId: 'modifyPopup',\n steps: {\n modifyPopup: {\n id: 'modifyPopup',\n action: 'AXPEntityModifySectionPopupAction',\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"result\") == true' }],\n nextStepId: 'successToast',\n },\n ],\n },\n successToast: {\n id: 'successToast',\n action: 'AXPToastAction',\n input: {\n color: 'success',\n title: '@general:workflow.entity-modified-title',\n content: '@general:workflow.entity-modified-body',\n },\n nextSteps: [\n {\n conditions: [],\n nextStepId: 'modifyConfirmed',\n },\n ],\n },\n modifyConfirmed: {\n id: 'modifyConfirmed',\n action: 'AXPEntityModifyConfirmedAction',\n },\n },\n};\n","import { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPEntity, AXPEntityPropertyView, AXPEntitySectionView, getEntityInfo } from '@acorex/platform/common';\nimport {\n AXPBreadcrumbItem,\n AXPExecuteCommand,\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n AXPGridLayoutOptions,\n} from '@acorex/platform/core';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService, ofType } from '@acorex/platform/workflow';\nimport { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';\nimport { cloneDeep, get, merge, set } from 'lodash-es';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPEntityDetailListViewModel } from './entity-detail-list.viewmodel';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { AXPEntityService } from './entity.service';\nimport { AXPEntityCommandTriggerViewModel } from './entity.viewmodel';\nimport { AXPEntityDeletedEvent } from './workflows/delete-entity.workflow';\nimport { AXPEntityModifyEvent } from './workflows/modify-section.workflow';\n\nexport class AXPEntityMasterSingleViewGroupViewModel {\n constructor(\n private entity: AXPEntity,\n private section: AXPEntitySectionView,\n ) {}\n\n group = this.entity.groups?.find((c) => c.id == this.section.id)!;\n name = signal(this.group.id);\n isLoading = signal(false);\n\n title = computed<string>(() => {\n return this.group.title ?? this.group.id;\n });\n\n description = computed<string | null | undefined>(() => {\n return this.group.description;\n });\n\n layout = computed<AXPGridLayoutOptions>(() => {\n const source = cloneDeep(this.section.layout ?? {}) as object;\n set(source, 'positions.sm.colSpan', 12);\n return source as AXPGridLayoutOptions;\n });\n\n props = computed(() => {\n const { properties, interfaces } = this.entity;\n const groupProperties = properties\n .filter(({ groupId, schema }) => groupId === this.group.id && schema.visible !== false)\n .map(({ name }) => name);\n\n const viewProperties =\n interfaces?.master?.single?.properties?.filter(({ name }) => groupProperties.includes(name)) ?? [];\n\n return viewProperties.map((prop) => new AXPEntityMasterSingleElementViewModel(this.entity, this, prop));\n });\n\n editableProps = computed(() => {\n const { properties, interfaces } = this.entity;\n const editablePropertyNames = interfaces?.master?.update?.properties?.map(({ name }) => name) ?? [];\n\n const filteredProperties = properties.filter(\n ({ groupId, schema, name }) =>\n groupId === this.group.id && schema.visible !== false && editablePropertyNames.includes(name),\n );\n\n return filteredProperties.map((prop) => new AXPEntityMasterSingleElementViewModel(this.entity, this, prop));\n });\n\n editable = computed(() => {\n return this.editableProps().length > 0;\n });\n}\n\nexport class AXPEntityMasterSingleElementViewModel {\n constructor(\n private entity: AXPEntity,\n private section: AXPEntityMasterSingleViewGroupViewModel,\n private propertyView: AXPEntityPropertyView,\n ) {}\n\n private property = this.entity.properties.find((c) => c.name == this.propertyView.name)!;\n name = signal(this.property.name);\n path = signal(this.propertyView.dataPath ?? this.property.name);\n title = signal(this.property.title);\n showLabel = signal(this.propertyView.layout?.label?.visible != false);\n description = signal(this.property.description);\n\n layout = computed<AXPGridLayoutOptions>(() => {\n const viewProp = this.entity.interfaces?.master?.single?.properties?.find((c) => c.name == this.property.name);\n const source = cloneDeep(viewProp?.layout ?? {}) as object;\n set(source, 'positions.default.colSpan', 12);\n return source as AXPGridLayoutOptions;\n });\n\n node = computed<AXPWidgetNode>(() => {\n const schema = this.property.schema!;\n const widget = schema.interface!;\n return {\n type: widget.type,\n mode: 'view',\n path: this.path(),\n children: widget.children,\n valueTransforms: widget.valueTransforms,\n options: merge({}, schema.interface?.options),\n } as AXPWidgetNode;\n });\n}\n\nexport class AXPEntityMasterSingleViewModel {\n entityDef = cloneDeep(this.config)!;\n private readonly _viewDef = cloneDeep(this.entityDef.interfaces?.master?.single)!;\n private readonly session = this.injector.get(AXPSessionService);\n private readonly formatService = this.injector.get(AXFormatService);\n private readonly workflow = this.injector.get(AXPWorkflowService);\n private readonly commandService = this.injector.get(AXPCommandService);\n private readonly destroyed = new Subject<void>();\n private translateService = this.injector.get(AXTranslationService);\n private entityService = this.injector.get(AXPEntityService);\n private expressionEvaluator = this.injector.get(AXPExpressionEvaluatorService);\n private entityDefinitionRegistryService = this.injector.get(AXPEntityDefinitionRegistryService);\n private _updateTrigger = signal(1);\n public readonly updateTrigger = this._updateTrigger.asReadonly();\n\n constructor(\n private injector: Injector,\n private config: AXPEntity,\n private entityData: any,\n ) {\n this.workflow.events$\n .pipe(ofType(AXPEntityDeletedEvent))\n .pipe(takeUntil(this.destroyed))\n .subscribe((event) => {\n if (\n event.payload.entity == getEntityInfo(this.entityDef).source &&\n event.payload.ids.includes(this.context().id)\n ) {\n this.workflow.execute('show-list-view', {\n entity: getEntityInfo(this.entityDef).source,\n });\n }\n });\n this.workflow.events$\n .pipe(ofType(AXPEntityModifyEvent))\n .pipe(takeUntil(this.destroyed))\n .subscribe(async (event) => {\n if (\n event.payload.entity == getEntityInfo(this.entityDef).source &&\n event.payload.values.id === this.context().id\n ) {\n this.context.set(event.payload.values);\n }\n });\n this.entityDefinitionRegistryService.onChanged$.pipe(takeUntil(this.destroyed)).subscribe((event) => {\n if (event.name == getEntityInfo(this.entityDef).source) {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n });\n }\n\n public context = signal<any>(cloneDeep(this.entityData));\n\n private actions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n return (\n this.entityDef.interfaces?.master?.single?.actions?.map(\n (tr) => new AXPEntityCommandTriggerViewModel(this.entityDef, tr),\n ) ?? []\n );\n });\n\n public primaryActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n return this.actions().filter((c) => c.priority == 'primary');\n });\n\n public secondaryActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n return this.actions().filter((c) => c.priority == 'secondary');\n });\n\n public sections = computed<AXPEntityMasterSingleViewGroupViewModel[]>(() => {\n const { interfaces, properties } = this.entityDef;\n const viewProps = interfaces?.master?.single?.properties?.map(({ name }) => name) ?? [];\n\n const filteredProperties = properties.filter(\n ({ groupId, schema, name }) => groupId && schema.visible !== false && viewProps.includes(name),\n );\n\n const groups =\n interfaces?.master?.single?.sections?.filter(({ id }) =>\n filteredProperties.some(({ groupId }) => groupId === id),\n ) ?? [];\n\n return groups.map((section) => new AXPEntityMasterSingleViewGroupViewModel(this.entityDef, section));\n });\n\n public navigateToUp() {\n this.workflow.execute('navigate', {\n options: {\n path: this.entityService.createPath(this.entityDef.module, this.entityDef.name),\n },\n });\n }\n\n //****************** Title ******************//\n public title = computed<string>(() => {\n const suggestedProps = this.entityDef.properties.find((c) => ['title', 'name', 'code'].includes(c.name));\n let suggestedFormat = 'Item #{{id}}';\n if (suggestedProps) suggestedFormat = `{{${suggestedProps.name}}}`;\n return this.formatService.format(this._viewDef.title ?? suggestedFormat, 'string', this.context());\n });\n //****************** Description ******************//\n public description = computed<string | null>(() => {\n return this._viewDef.description\n ? this.formatService.format(this._viewDef.description, 'string', this.context())\n : null;\n });\n\n //****************** Beardcrumbs ******************//\n public beardcrumbs = computed<AXPBreadcrumbItem[]>(() => {\n return [\n {\n title: this.entityDef.formats.plural ?? this.entityDef.formats.individual,\n command: {\n name: 'navigate',\n options: {\n path: `/${this.session.application?.name}/m/${this.entityDef.module}/e/${this.entityDef.name}/list`,\n },\n },\n },\n {\n title: this.title(),\n },\n ];\n });\n\n evaluateExpressions = async (options: { [key: string]: string }, data: any) => {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(data, path);\n },\n },\n };\n return await this.expressionEvaluator.evaluate(options, scope);\n };\n\n public relatedEntities = computed<Promise<AXPEntityDetailListViewModel[]>>(async () => {\n const relatedEntities =\n this.entityDef.relatedEntities?.map(\n (re) => new AXPEntityDetailListViewModel(this.injector, re, { entity: this.entityDef, data: this.entityData }),\n ) ?? [];\n\n const filteredEntities = await Promise.all(relatedEntities.map(async (re) => ((await re.hidden()) ? null : re)));\n\n return filteredEntities.filter((re) => re !== null) as AXPEntityDetailListViewModel[];\n });\n\n public async executeCommand(commandName: string, data: any = null) {\n //TODO: syntax for workflow\n const command = commandName.split('&')[0];\n switch (command) {\n case 'modify-entity-section': {\n this.workflow.execute('modify-entity-section', {\n entity: getEntityInfo(this.entityDef).source,\n data: {\n id: this.context().id,\n properties: (data as AXPEntityMasterSingleViewGroupViewModel).editableProps().map((m) => m.name()),\n },\n });\n break;\n }\n default: {\n const action = this.actions().find((c) => c.name == commandName);\n const options = await this.evaluateExpressions(action?.options, this.context());\n //\n if (this.workflow.exists(command)) {\n this.workflow.execute(command, {\n entity: getEntityInfo(this.entityDef).source,\n data: this.context(),\n options,\n });\n } else {\n this.commandService.execute(command, data);\n }\n }\n }\n }\n\n async execute(command: AXPExecuteCommand) {\n switch (command?.name) {\n case 'navigate':\n await this.workflow.execute('navigate', {\n options: {\n path: command.options?.['path'],\n },\n });\n break;\n default:\n this.executeCommand(command.name, command.options);\n break;\n }\n }\n //\n //\n destroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityDetailViewModelFactory {\n private entityService = inject(AXPEntityDefinitionRegistryService);\n private layout = inject(AXPLayoutThemeService);\n private injector = inject(Injector);\n\n public async create(moduleName: string, entityName: string, id: string): Promise<AXPEntityMasterSingleViewModel> {\n const config = await this.entityService.resolve(moduleName, entityName);\n this.layout.setNavigationLoading(true);\n if (config.queries?.byKey) {\n const func = config.queries?.byKey?.execute as Function;\n const data = await func(id);\n this.layout.setNavigationLoading(false);\n return new AXPEntityMasterSingleViewModel(this.injector, config, data);\n }\n this.layout.setNavigationLoading(false);\n return Promise.reject('cannot fetch ');\n }\n}\n\nexport const AXPEntityDetailViewModelResolver: ResolveFn<Promise<AXPEntityMasterSingleViewModel>> = (\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n service: AXPEntityDetailViewModelFactory = inject(AXPEntityDetailViewModelFactory),\n): Promise<AXPEntityMasterSingleViewModel> => {\n const moduleName = route.parent?.paramMap.get('module') as string;\n const entityName = route.paramMap.get('entity') as string;\n const id = route.paramMap.get('id') as string;\n //\n return service.create(moduleName, entityName, id);\n};\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPFilterDefinition, AXPFilterQuery } from '@acorex/platform/core';\nimport { AXPWidgetRegistryService, AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { Injector, computed, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\n\nexport class AXPEntityPreloadFiltersViewModel {\n readonly entityDef = cloneDeep(this.config);\n private readonly widgetResolver = this.injector.get(AXPWidgetRegistryService);\n\n //#region ---- Constructor ----\n\n constructor(\n private injector: Injector,\n private config: AXPEntity,\n ) {}\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Entity title\n */\n title = computed<string>(() => {\n return this.entityDef.formats.plural ?? this.entityDef.title;\n });\n\n /**\n * Entity description\n */\n description = computed<string | null>(() => {\n return this.entityDef.interfaces?.master?.list?.description ?? null;\n });\n\n /**\n * All filter definitions for properties with preload enabled\n */\n preloadFiltersDef = computed<AXPFilterDefinition[]>(() => {\n const props = this.entityDef.properties.filter((c) => c.options?.filter?.preload?.enabled);\n\n return props.map((e) => {\n const widgetConfig = this.widgetResolver.resolve(\n e.schema.interface?.type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap],\n );\n\n const type = e.schema.interface?.type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap];\n\n // Merge validations with existing options\n const validations = e.options?.filter?.preload?.required\n ? [\n {\n rule: 'required',\n message: 'This field is required',\n options: {},\n },\n ]\n : [];\n const mergedOptions = {\n ...e.schema.interface?.options,\n validations,\n };\n\n return {\n title: e.title,\n field: e.name,\n operator: {\n type: 'contains',\n },\n widget: {\n ...e.schema.interface,\n path: e.name,\n type,\n options: mergedOptions,\n },\n filters: [],\n isParametric: false,\n icon: widgetConfig?.icon,\n filterType: {\n advance: false,\n inline: false,\n preload: e.options?.filter?.preload,\n },\n };\n });\n });\n\n /**\n * Required filter definitions only\n */\n requiredFiltersDef = computed<AXPFilterDefinition[]>(() => {\n return this.preloadFiltersDef().filter((c) => c.filterType.preload?.required);\n });\n\n //#region ---- Methods ----\n\n /**\n * Serialize filter values to plain objects (remove signals, functions, etc.)\n */\n serializeFilters(filters: any): AXPFilterQuery[] {\n return JSON.parse(JSON.stringify(filters));\n }\n\n //#endregion\n}\n\n//#region ---- Resolver ----\n\nexport const AXPEntityPreloadFiltersViewModelResolver: ResolveFn<Promise<AXPEntityPreloadFiltersViewModel>> = async (\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n): Promise<AXPEntityPreloadFiltersViewModel> => {\n const injector = inject(Injector);\n const entityRegistry = inject(AXPEntityDefinitionRegistryService);\n\n const moduleName = route.parent?.paramMap.get('module') as string;\n const entityName = route.paramMap.get('entity') as string;\n\n const entity = await entityRegistry.resolve(moduleName, entityName);\n\n return new AXPEntityPreloadFiltersViewModel(injector, entity);\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPEntityPage, AXPRelatedEntity } from '@acorex/platform/common';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Built-in entity detail tabs from plugins. Sidebar order (after related page-list / page-detail\n * tabs): meta-data-builder → attachments → documents → comments → history.\n */\nexport type EntityDetailPluginPageSlot =\n | 'meta-data-builder'\n | 'attachments'\n | 'documents'\n | 'comments'\n | 'history';\n\n/** Identifies an `entity.pages` entry when skipping its order during recomputation. */\nexport interface SkipEntityComponentPageRef {\n componentKey: string;\n /** When set, only the page with this `field` is skipped (e.g. attachments / meta-data per field). */\n field?: string;\n}\n\nexport interface ResolveEntityPluginDetailPageOrderOptions {\n /** Component key of the page being added or updated (used to count sibling tabs in the same slot). */\n componentKey: string;\n /**\n * Ignore this page when counting siblings / recomputing (the page currently being updated).\n */\n skipPage?: SkipEntityComponentPageRef;\n /**\n * Field name for multi-page slots (`attachments`, `meta-data-builder`). Omit for single-tab slots.\n */\n field?: string;\n /** Gap between auto-assigned related tab orders. Default: 10. */\n relatedOrderStep?: number;\n /** Minimum start of the plugin zone (after related tabs). Default: 100_000. */\n pluginZoneFloor?: number;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DEFAULT_RELATED_ORDER_STEP = 10;\nconst DEFAULT_PLUGIN_ZONE_FLOOR = 100_000;\n/** Space per plugin slot so multiple fields in one slot do not cross into the next. */\nconst PLUGIN_SLOT_SPAN = 10_000;\nconst SUB_ORDER_STEP = 10;\n\nconst PLUGIN_SLOT_INDEX: Record<EntityDetailPluginPageSlot, number> = {\n 'meta-data-builder': 0,\n attachments: 1,\n documents: 2,\n comments: 3,\n history: 4,\n};\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction shouldSkipPageForMax(\n page: AXPEntityPage & { field?: string },\n skip?: SkipEntityComponentPageRef,\n): boolean {\n if (!skip) {\n return false;\n }\n if (page.componentKey !== skip.componentKey) {\n return false;\n }\n if (skip.field !== undefined) {\n return page.field === skip.field;\n }\n return true;\n}\n\nfunction normalizeRelatedPageListDetailOrders(\n relatedEntities: AXPRelatedEntity[] | undefined,\n step: number,\n): number {\n const pageTabRelated = (relatedEntities ?? []).filter(\n (re) => re.layout?.type === 'page-list' || re.layout?.type === 'page-detail',\n );\n\n let maxExplicit = 0;\n for (const re of pageTabRelated) {\n const o = re.layout?.order;\n if (typeof o === 'number' && Number.isFinite(o)) {\n maxExplicit = Math.max(maxExplicit, o);\n }\n }\n\n let cursor = maxExplicit;\n for (const re of pageTabRelated) {\n const layout = re.layout;\n if (!layout || layout.order != null) {\n continue;\n }\n cursor += step;\n re.layout = { ...layout, order: cursor };\n }\n\n let afterMax = 0;\n for (const re of pageTabRelated) {\n const o = re.layout?.order;\n if (typeof o === 'number' && Number.isFinite(o)) {\n afterMax = Math.max(afterMax, o);\n }\n }\n return afterMax;\n}\n\n/**\n * Ordinal within a slot for multi-field pages (attachments, meta-data-builder), stable by field name.\n */\nfunction subOrderWithinComponentSlot(\n pages: Array<AXPEntityPage & { field?: string }> | undefined,\n componentKey: string,\n skip: SkipEntityComponentPageRef | undefined,\n currentField: string | undefined,\n): number {\n const peerFieldKeys = (pages ?? [])\n .filter((p) => p.componentKey === componentKey && !shouldSkipPageForMax(p, skip))\n .map((p) => p.field ?? '');\n const keySet = new Set(peerFieldKeys);\n keySet.add(currentField ?? '');\n const sorted = [...keySet].sort((a, b) => a.localeCompare(b));\n const index = sorted.indexOf(currentField ?? '');\n return Math.max(0, index) * SUB_ORDER_STEP;\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Resolves `layout.order` for a built-in plugin detail tab (`entity.pages`).\n *\n * 1. Assigns finite `layout.order` values to related `page-list` / `page-detail` rows that omit\n * `order` (the composer otherwise treats them as +Infinity).\n * 2. Places plugin tabs in a fixed relative order: meta-data-builder → attachments → documents →\n * comments → history, after all related tabs.\n */\nexport function resolveEntityPluginDetailPageOrder(\n input: {\n relatedEntities?: AXPRelatedEntity[];\n pages?: Array<AXPEntityPage & { field?: string }>;\n },\n slot: EntityDetailPluginPageSlot,\n options: ResolveEntityPluginDetailPageOrderOptions,\n): number {\n const relatedStep = options.relatedOrderStep ?? DEFAULT_RELATED_ORDER_STEP;\n const zoneFloor = options.pluginZoneFloor ?? DEFAULT_PLUGIN_ZONE_FLOOR;\n const { componentKey, skipPage, field } = options;\n\n const afterRelatedMax = normalizeRelatedPageListDetailOrders(input.relatedEntities, relatedStep);\n const pluginZoneStart = Math.max(afterRelatedMax + relatedStep, zoneFloor);\n\n const slotIndex = PLUGIN_SLOT_INDEX[slot];\n const subOrder = subOrderWithinComponentSlot(input.pages, componentKey, skipPage, field);\n\n return pluginZoneStart + slotIndex * PLUGIN_SLOT_SPAN + subOrder;\n}\n\n//#endregion\n","/**\n * Re-export from domain to avoid circular dependency: layout/components must not depend on layout/entity.\n * Consumers that only need the token/interface can import from @acorex/platform/domain.\n */\nexport {\n AXP_ENTITY_DEFINITION_CRUD_SERVICE,\n type AXPEntityDefinitionCrudService,\n} from '@acorex/platform/domain';\n","import { AXDataSourceSortOption } from '@acorex/cdk/common';\nimport { AXTreeViewNode } from '@acorex/components/tree-view';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPMultiLanguageString, resolveMultiLanguageString } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\n//#region ---- Constants ----\n\n/**\n * i18n key for the synthetic root node (\"all categories\"). Resolve in templates with the translate pipe.\n */\nexport const AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY = '@general:terms.interface.selection.all-items';\n\n//#endregion\n\n//#region ---- Interfaces ----\n\nexport interface CategoryQueryEvent {\n skip: number;\n take: number;\n sort?: AXDataSourceSortOption[];\n filter?: {\n field?: string;\n value?: unknown;\n operator?: { type: string };\n filters?: unknown[];\n logic?: string;\n };\n}\n\nexport interface CategoryQueryResult {\n items: Record<string, unknown>[];\n total?: number;\n totalCount?: number;\n}\n\nexport type CategoryQueryFunction = (event: CategoryQueryEvent) => Promise<CategoryQueryResult>;\n\nexport interface CategoryTreeConfig {\n entityKey: string;\n textField?: string;\n valueField?: string;\n parentKey?: string;\n}\n\nexport interface CategoryTreeNodeData {\n categoryEntityDef: AXPEntity | null;\n categoryEntityQueryFunc: CategoryQueryFunction | null;\n basicQueryEvent: CategoryQueryEvent;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPCategoryTreeService {\n //#region ---- Services & Dependencies ----\n\n protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /** Sort field for list queries (backend); matches configured category display field. */\n private getAlphabeticalSortOptions(config: CategoryTreeConfig): AXDataSourceSortOption[] {\n const field = config.textField ?? 'title';\n return [{ field, dir: 'asc' }];\n }\n\n /**\n * Sort tree nodes by resolved display title (locale-aware).\n * Ensures correct order for multi-language titles when storage order differs from UI order.\n */\n private sortTreeNodesByDisplayTitle(nodes: AXTreeViewNode[]): AXTreeViewNode[] {\n return [...nodes].sort((a, b) =>\n String(a['title'] ?? '').localeCompare(String(b['title'] ?? ''), undefined, {\n sensitivity: 'base',\n numeric: true,\n }),\n );\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Initialize category tree data source\n */\n async initializeCategoryTree(config: CategoryTreeConfig): Promise<CategoryTreeNodeData | null> {\n const { entityKey } = config;\n if (!entityKey) {\n return null;\n }\n\n try {\n const [module, entity] = entityKey.split('.');\n if (!module || !entity) {\n return null;\n }\n\n const categoryEntityDef = await this.entityResolver.resolve(module, entity);\n if (!categoryEntityDef?.queries?.list?.execute || typeof categoryEntityDef.queries.list.execute !== 'function') {\n return null;\n }\n\n const categoryEntityQueryFunc = categoryEntityDef.queries.list.execute as CategoryQueryFunction;\n const basicQueryEvent: CategoryQueryEvent = {\n skip: 0,\n take: 1000,\n };\n\n return {\n categoryEntityDef,\n categoryEntityQueryFunc,\n basicQueryEvent,\n };\n } catch (error) {\n console.error('Error initializing category tree:', error);\n return null;\n }\n }\n\n /**\n * Create root node with children from items\n */\n async createRootNode(items: Record<string, unknown>[], config: CategoryTreeConfig): Promise<AXTreeViewNode> {\n const textField = config.textField ?? 'title';\n const valueField = config.valueField ?? 'id';\n const rootTitleKey = AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY;\n\n const rootNode: AXTreeViewNode = {\n id: 'all',\n title: rootTitleKey,\n icon: 'fa-solid fa-folder',\n childrenCount: items.length,\n expanded: true,\n data: { [valueField]: 'all', [textField]: rootTitleKey },\n };\n\n const childNodes: AXTreeViewNode[] = this.sortTreeNodesByDisplayTitle(\n items.map((item) => this.convertToTreeNode(item, config)),\n );\n rootNode['children'] = childNodes;\n\n return rootNode;\n }\n\n /**\n * Convert entity item to AXTreeViewNode format\n */\n convertToTreeNode(item: Record<string, unknown>, config: CategoryTreeConfig): AXTreeViewNode {\n const textField = config.textField ?? 'title';\n const valueField = config.valueField ?? 'id';\n\n // Determine childrenCount properly:\n // - Use explicit childrenCount from backend if it's a number (including 0)\n // - Or use children array length if available\n // - Default to undefined to indicate \"unknown\" - this allows lazy loading to work\n let childrenCount: number | undefined;\n if (typeof item['childrenCount'] === 'number') {\n childrenCount = item['childrenCount'];\n } else if (Array.isArray(item['children'])) {\n childrenCount = (item['children'] as unknown[]).length;\n }\n\n const rawTitle = item[textField];\n const titleText = resolveMultiLanguageString(rawTitle as AXPMultiLanguageString, this.translation.getActiveLang());\n\n return {\n id: String(item[valueField] ?? ''),\n title: titleText,\n icon: 'fa-solid fa-folder',\n childrenCount,\n expanded: false,\n data: item,\n };\n }\n\n /**\n * Load root categories\n */\n async loadRootCategories(\n treeData: CategoryTreeNodeData,\n config: CategoryTreeConfig,\n ): Promise<Record<string, unknown>[] | null> {\n if (!treeData.categoryEntityQueryFunc) {\n return null;\n }\n\n try {\n const res = await treeData.categoryEntityQueryFunc({\n ...treeData.basicQueryEvent,\n sort: this.getAlphabeticalSortOptions(config),\n });\n return res?.items ?? null;\n } catch (error) {\n console.error('Error loading root categories:', error);\n return null;\n }\n }\n\n /**\n * Fetches a single category item by ID. Uses byKey when available (full item with parent),\n * otherwise falls back to list query with filter so ancestor chains can be built.\n */\n async fetchItemById(\n id: string,\n treeData: CategoryTreeNodeData,\n config: CategoryTreeConfig,\n ): Promise<Record<string, unknown> | null> {\n const byKey = treeData.categoryEntityDef?.queries?.byKey?.execute as\n | ((key: string) => Promise<Record<string, unknown> | null>)\n | undefined;\n if (typeof byKey === 'function') {\n try {\n const item = await byKey(id);\n return item ?? null;\n } catch (error) {\n console.error('Error fetching category by key:', error);\n return null;\n }\n }\n\n if (!treeData.categoryEntityQueryFunc) return null;\n try {\n const valueField = config.valueField ?? 'id';\n const event: CategoryQueryEvent = {\n ...treeData.basicQueryEvent,\n filter: {\n field: valueField,\n value: id,\n operator: { type: 'equal' },\n },\n };\n const res = await treeData.categoryEntityQueryFunc(event);\n return res?.items?.[0] ?? null;\n } catch (error) {\n console.error('Error fetching category by id:', error);\n return null;\n }\n }\n\n /**\n * Load children for a given node\n */\n async loadChildren(\n node: AXTreeViewNode,\n treeData: CategoryTreeNodeData,\n config: CategoryTreeConfig,\n ): Promise<AXTreeViewNode[]> {\n if (!treeData.categoryEntityQueryFunc || !treeData.categoryEntityDef?.parentKey) {\n return [];\n }\n\n try {\n const event: CategoryQueryEvent = {\n ...treeData.basicQueryEvent,\n sort: this.getAlphabeticalSortOptions(config),\n filter: {\n field: treeData.categoryEntityDef.parentKey,\n value: node['id'],\n operator: { type: 'equal' },\n },\n };\n\n const res = await treeData.categoryEntityQueryFunc(event);\n if (!res?.items) {\n return [];\n }\n\n return this.sortTreeNodesByDisplayTitle(res.items.map((item) => this.convertToTreeNode(item, config)));\n } catch (error) {\n console.error('Error loading children:', error);\n return [];\n }\n }\n\n /**\n * Search categories recursively (all levels)\n */\n async searchCategories(\n searchValue: string,\n treeData: CategoryTreeNodeData,\n config: CategoryTreeConfig,\n ): Promise<Record<string, unknown>[] | null> {\n if (!treeData.categoryEntityDef || !treeData.categoryEntityQueryFunc) {\n return null;\n }\n\n try {\n const categoryInlineFilters = treeData.categoryEntityDef.properties.filter(\n (p) => p.options?.filter?.inline?.enabled,\n );\n\n // Search all categories (no parent filter - recursive search)\n const event: CategoryQueryEvent = {\n ...treeData.basicQueryEvent,\n sort: this.getAlphabeticalSortOptions(config),\n filter: {\n filters: categoryInlineFilters.map((cif) => ({\n field: cif.name,\n operator: {\n type: 'contains',\n },\n value: searchValue,\n })),\n logic: 'or',\n },\n };\n\n const res = await treeData.categoryEntityQueryFunc(event);\n return res?.items ?? null;\n } catch (error) {\n console.error('Error searching categories:', error);\n return null;\n }\n }\n\n /**\n * Update children at a specific node in the tree\n */\n updateChildrenAtPath(nodes: AXTreeViewNode[], targetId: string, childNodes: AXTreeViewNode[]): AXTreeViewNode[] {\n return nodes.map((node) => {\n if (node['id'] === targetId) {\n return { ...node, ['children']: childNodes, childrenCount: childNodes.length };\n }\n const nodeChildren = node['children'] as AXTreeViewNode[] | undefined;\n if (nodeChildren?.length) {\n return { ...node, ['children']: this.updateChildrenAtPath(nodeChildren, targetId, childNodes) };\n }\n return node;\n });\n }\n\n //#endregion\n}\n","import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTreeViewComponent, AXTreeViewNode, AXTreeViewNodeSelectEvent } from '@acorex/components/tree-view';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {\n AXHighlightService,\n AXPMultiLanguageString,\n AXPMultiLanguageStringResolverService,\n AXPResolveMultiLanguageStringPipe,\n} from '@acorex/platform/core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n inject,\n OnInit,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY,\n AXPCategoryTreeService,\n CategoryTreeConfig,\n CategoryTreeNodeData,\n} from '../../services/entity-category/category-tree.service';\n\n@Component({\n selector: 'axp-entity-category-tree-selector',\n template: `\n <div class=\"ax-flex ax-flex-col ax-h-full\">\n @if (loading()) {\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-3\">\n @for (i of [1, 2, 3, 4]; track i) {\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n }\n </div>\n } @else if (treeData) {\n <div class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0\">\n <div class=\"ax-p-4 ax-border-b ax-flex ax-flex-col ax-gap-2\">\n <ax-search-box\n (onValueChanged)=\"handleSearchChange($event)\"\n [value]=\"searchValue()\"\n [delayTime]=\"300\"\n [placeholder]=\"searchPlaceholder()\"\n ></ax-search-box>\n @if (isSearching() && searchValue().trim()) {\n <div class=\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\">\n <span>{{ '@general:terms.interface.category.search.searching' | translate | async }}</span>\n </div>\n } @else if (searchValue().trim() && !isSearching()) {\n <div class=\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\">\n @if (searchResultCount() > 0) {\n <span>{{ resultsFoundText() }}</span>\n }\n </div>\n }\n </div>\n @if (showNoSearchResults()) {\n <div class=\"ax-flex-1 ax-flex ax-items-center ax-justify-center\">\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"'@general:terms.interface.category.search.no-results-found.title'\"\n [description]=\"'@general:terms.interface.category.search.no-results-found.description'\"\n >\n </axp-state-message>\n </div>\n } @else {\n <div class=\"ax-flex-1 ax-overflow-auto ax-p-4\">\n <ax-tree-view\n [datasource]=\"datasource\"\n [dragBehavior]=\"'none'\"\n [selectMode]=\"allowMultiple() ? 'multiple' : 'single'\"\n [selectionBehavior]=\"allowMultiple() ? 'intermediate-nested' : 'all'\"\n [showIcons]=\"true\"\n [titleField]=\"textField()\"\n [idField]=\"valueField()\"\n (onNodeSelect)=\"onNodeSelect($event)\"\n [nodeTemplate]=\"itemTemplate\"\n #tree\n >\n </ax-tree-view>\n\n <ng-template #itemTemplate let-node=\"node\" let-level=\"level\">\n @if (node) {\n @let item = node.data || node;\n @let tf = textField();\n @let rawLabel = item[tf] ?? node.title;\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-w-full ax-overflow-hidden ax-p-2 ax-pe-0\">\n <!-- @if (allowMultiple()) {\n <ax-check-box\n [ngModel]=\"node['indeterminate'] ? null : node['selected'] || false\"\n [indeterminate]=\"node['indeterminate'] || false\"\n (onValueChanged)=\"handleCheckboxChange(node.id, $event.value)\"\n (click)=\"$event.stopPropagation()\"\n (pointerdown)=\"$event.stopPropagation()\"\n [disabled]=\"node.disabled || node.id === 'all'\"\n ></ax-check-box>\n } -->\n <ax-icon\n class=\"fas fa-folder\"\n [style.color]=\"item.color ?? 'rgba(var(--ax-sys-color-warning-500), 1)'\"\n ></ax-icon>\n <span class=\"ax-truncate\">\n @if (node.id === 'all') {\n {{ categoryTreeRootTitleI18nKey | translate | async }}\n } @else {\n {{ rawLabel | axpResolveMultiLanguageString }}\n }\n </span>\n </div>\n }\n </ng-template>\n </div>\n }\n </div>\n } @else {\n <div class=\"ax-flex-1 ax-flex ax-items-center ax-justify-center\">\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@general:terms.interface.category.search.no-records.title'\"\n [description]=\"'@general:terms.interface.category.search.no-records.description'\"\n >\n </axp-state-message>\n </div>\n }\n </div>\n <ax-footer>\n @if (allowMultiple() && selectedNodeIds().length > 0) {\n <ax-prefix>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <ax-badge [text]=\"selectedNodeIds().length.toString()\" color=\"primary\"></ax-badge>\n <span class=\"ax-text-base ax-font-medium ax-text-text-primary\">\n {{ '@general:terms.interface.items-selected' | translate | async }}\n </span>\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n class=\"ax-text-sm\"\n [text]=\"'@general:terms.interface.unselect-all' | translate | async\"\n (onClick)=\"onClearAll()\"\n ></ax-button>\n </div>\n </ax-prefix>\n }\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"onCancel()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.ok.title' | translate | async\"\n [disabled]=\"selectedNodeIds().length === 0\"\n (onClick)=\"onConfirm()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXBadgeModule,\n AXCheckBoxModule,\n AXDecoratorModule,\n AXSearchBoxModule,\n AXSkeletonModule,\n AXTreeViewComponent,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPResolveMultiLanguageStringPipe,\n FormsModule,\n ],\n})\nexport class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n protected readonly categoryTreeService = inject(AXPCategoryTreeService);\n\n /** i18n key for the synthetic \"all items\" root row; resolved in the template with the translate pipe. */\n protected readonly categoryTreeRootTitleI18nKey = AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY;\n\n private readonly translationService = inject(AXTranslationService);\n private readonly mlsResolver = inject(AXPMultiLanguageStringResolverService);\n protected readonly highlightService = inject(AXHighlightService);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n //#endregion\n\n //#region ---- Properties (Set by popup service) ----\n\n entityKey = signal<string>('');\n textField = signal<string>('title');\n valueField = signal<string>('id');\n allowMultiple = signal<boolean>(false);\n selectedValues = signal<string[]>([]);\n /** Optional input for when popup passes selected values via inputs instead of data */\n selectedValuesInput = signal<string[]>([]);\n searchPlaceholder = signal<string>('@general:terms.interface.category.search.placeholder');\n excludedNodeId = signal<string | undefined>(undefined); // Node ID to disable\n searchWithChildren = signal<boolean>(true); // Include children of search results\n\n //#endregion\n\n //#region ---- View Queries ----\n\n protected tree = viewChild<AXTreeViewComponent>('tree');\n\n //#endregion\n\n //#region ---- Component State ----\n\n protected loading = signal(true);\n protected selectedNodeIds = signal<string[]>([]);\n protected searchValue = signal<string>('');\n protected searchResultCount = signal<number>(0);\n protected isSearching = signal<boolean>(false);\n protected resultsFoundText = signal<string>('');\n protected noRecordsTitle = signal<string>('');\n private currentSearchTerm: string | null = null;\n private isRefreshing = false;\n private isUpdatingSelection = false; // Flag to prevent recursive updates during batch operations\n\n /**\n * Computed property to check if we should show the \"no search results\" empty state.\n * Returns true when search is active, not searching, and no results found.\n */\n protected readonly showNoSearchResults = computed(() => {\n const searchVal = this.searchValue().trim();\n const searching = this.isSearching();\n const resultCount = this.searchResultCount();\n return searchVal.length > 0 && !searching && resultCount === 0;\n });\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n protected treeData: CategoryTreeNodeData | null = null;\n private treeConfig: CategoryTreeConfig | null = null;\n private nodeDataCache = new Map<string, Record<string, unknown>>(); // Cache node data by id for getSelectedItems\n private matchingNodeIds = new Set<string>(); // IDs of nodes matching search term\n private relevantNodeIds = new Set<string>(); // For search filtering\n private expandedNodesBeforeSearch: string[] = []; // Store expanded nodes before search to restore after\n private nodesExpandedDuringSearch: string[] = []; // Track nodes we expanded during search\n private initialExpandSyncDone = false;\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n constructor() {\n super();\n // When popup sets data after ngOnInit, run initial expand/sync when we get selected ids and tree is ready\n effect(() => {\n if (this.initialExpandSyncDone) return;\n const loading = this.loading();\n const fromData = this.selectedValues().filter((id) => id && id !== 'all');\n const fromInput = (this.selectedValuesInput() ?? []).filter((id) => id && id !== 'all');\n const ids = fromData.length > 0 ? fromData : fromInput;\n if (loading || ids.length === 0 || !this.treeData || !this.treeConfig) return;\n if (this.selectedNodeIds().length > 0) return; // already set in initializeTree\n this.initialExpandSyncDone = true;\n this.runInitialExpandAndSync(ids);\n });\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.initializeTree();\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async initializeTree(): Promise<void> {\n if (!this.entityKey()) {\n this.loading.set(false);\n return;\n }\n\n this.loading.set(true);\n\n try {\n this.treeConfig = {\n entityKey: this.entityKey(),\n textField: this.textField(),\n valueField: this.valueField(),\n };\n\n this.treeData = await this.categoryTreeService.initializeCategoryTree(this.treeConfig);\n if (!this.treeData) {\n this.loading.set(false);\n return;\n }\n\n // Get parentKey from entity definition\n if (this.treeData.categoryEntityDef?.parentKey) {\n this.treeConfig.parentKey = this.treeData.categoryEntityDef.parentKey;\n }\n\n // Resolve initial selected IDs from data (popup) or input binding\n const fromData = this.selectedValues().filter((id) => id && id !== 'all');\n const fromInput = (this.selectedValuesInput() ?? []).filter((id) => id && id !== 'all');\n const initialSelectedIds = fromData.length > 0 ? fromData : fromInput;\n\n if (initialSelectedIds.length > 0) {\n await this.loadMissingNodeData(initialSelectedIds);\n // Re-fetch any node that has no parent info (batch query may return minimal fields)\n await this.ensureParentDataInCache(initialSelectedIds);\n this.selectedNodeIds.set(initialSelectedIds);\n }\n } catch (error) {\n console.error('Error loading entity definition:', error);\n } finally {\n // Now let tree render by setting loading to false\n this.loading.set(false);\n }\n\n // AFTER tree renders: wait for tree to exist, then expand path and sync selection\n const selectedIds = this.selectedNodeIds();\n if (selectedIds.length > 0) {\n this.initialExpandSyncDone = true;\n this.runExpandAndSyncWhenTreeReady(selectedIds);\n }\n }\n\n /**\n * Called when popup data arrives after ngOnInit: load data, set selection, expand and sync.\n */\n private runInitialExpandAndSync(ids: string[]): void {\n this.selectedNodeIds.set(ids);\n Promise.resolve()\n .then(() => this.loadMissingNodeData(ids))\n .then(() => this.ensureParentDataInCache(ids))\n .then(() => {\n this.runExpandAndSyncWhenTreeReady(ids);\n })\n .catch((err) => console.error('Error in runInitialExpandAndSync:', err));\n }\n\n /**\n * Runs expand path + sync selection once the tree viewChild is available.\n * Uses retry loop so we don't run before the view has rendered the tree.\n */\n private runExpandAndSyncWhenTreeReady(selectedIds: string[]): void {\n const maxWaitMs = 3500;\n const pollMs = 80;\n const start = Date.now();\n\n const run = async (): Promise<void> => {\n while (Date.now() - start < maxWaitMs) {\n const treeComponent = this.tree();\n if (treeComponent) {\n try {\n await new Promise((resolve) => setTimeout(resolve, 320));\n const ancestorChains = await this.buildAncestorChains(selectedIds);\n await this.expandAncestorNodesInOrder(ancestorChains);\n await new Promise((resolve) => setTimeout(resolve, 120));\n await this.syncSelectionWithTree(selectedIds);\n } catch (error) {\n console.error('Error syncing selection after tree render:', error);\n }\n this.changeDetectorRef.markForCheck();\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, pollMs));\n }\n };\n\n run();\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Handles search input value changes - Uses server-side search for efficiency and reliability\n */\n async handleSearchChange(event: AXValueChangedEvent<string>): Promise<void> {\n if (!this.treeData || !this.treeConfig) {\n return;\n }\n\n const searchTerm = (event.value ?? '').trim().toLowerCase();\n const previousSearchTerm = this.searchValue();\n\n // If search is cleared, always reset (even if not user interaction)\n if (!searchTerm) {\n if (previousSearchTerm || this.matchingNodeIds.size > 0) {\n this.searchValue.set('');\n this.currentSearchTerm = null;\n await this.resetSearch();\n }\n return;\n }\n\n // For non-empty search, only process user interactions to avoid unnecessary updates\n if (!event.isUserInteraction) {\n return;\n }\n\n // Prevent concurrent searches\n // if (this.isSearching() && this.currentSearchTerm !== null) {\n // if (this.currentSearchTerm === searchTerm) {\n // return;\n // }\n // }\n\n this.searchValue.set(event.value ?? '');\n this.currentSearchTerm = searchTerm;\n\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n\n // Store expanded nodes before starting a new search (only on first search)\n if (!previousSearchTerm && this.expandedNodesBeforeSearch.length === 0) {\n const expandedNodes = treeComponent.getExpandedNodes();\n this.expandedNodesBeforeSearch = expandedNodes\n .map((node) => String(node['id'] ?? ''))\n .filter((id) => id && id !== 'all');\n }\n\n // Collapse nodes from previous search before starting new search\n if (previousSearchTerm && this.nodesExpandedDuringSearch.length > 0) {\n const nodesToCollapse = [...this.nodesExpandedDuringSearch].reverse();\n this.nodesExpandedDuringSearch = [];\n for (const nodeId of nodesToCollapse) {\n // Only collapse if it wasn't originally expanded before search\n if (!this.expandedNodesBeforeSearch.includes(nodeId)) {\n try {\n treeComponent.collapseNode(nodeId);\n } catch {\n // Node might not exist anymore, ignore\n }\n }\n }\n }\n\n this.isSearching.set(true);\n\n try {\n // Step 1: Use server-side search to get matching items\n const searchResults = await this.categoryTreeService.searchCategories(searchTerm, this.treeData, this.treeConfig);\n\n // Check if search term changed during the API call\n if (this.currentSearchTerm !== searchTerm) {\n return;\n }\n\n if (!searchResults || searchResults.length === 0) {\n this.matchingNodeIds.clear();\n this.relevantNodeIds.clear();\n this.searchResultCount.set(0);\n await this.updateTranslatedMessages(0, searchTerm);\n // Clear highlighting and reload tree to show all nodes\n this.highlightService.clear();\n await treeComponent.reloadData();\n return;\n }\n\n // Store matching node IDs from search results\n this.matchingNodeIds.clear();\n const valueField = this.treeConfig.valueField || 'id';\n searchResults.forEach((item) => {\n const nodeId = String(item[valueField] ?? '');\n if (nodeId) {\n this.matchingNodeIds.add(nodeId);\n // Cache node data\n this.nodeDataCache.set(nodeId, item);\n }\n });\n\n const resultCount = searchResults.length;\n this.searchResultCount.set(resultCount);\n\n // Update translated messages\n await this.updateTranslatedMessages(resultCount, searchTerm);\n\n // Step 2: Collect parent IDs (builds relevantNodeIds for filtering)\n const parentsToExpand = await this.collectParentIds(searchResults);\n\n // Step 2.5: Collect children IDs if searchWithChildren is enabled\n if (this.searchWithChildren()) {\n await this.collectChildrenIds(searchResults);\n }\n\n // Step 3: Reload tree to apply filtering\n await treeComponent.reloadData();\n\n // Step 4: Expand root node\n if (!treeComponent.isNodeExpanded('all')) {\n try {\n await treeComponent.expandNode('all');\n this.nodesExpandedDuringSearch.push('all');\n } catch {\n // Root might not exist\n }\n }\n\n // Step 4: Expand all parent nodes in order (from root to leaves)\n // Expand nodes sequentially to maintain proper order (parent before children)\n const sortedParents = await this.sortParentsByDepth(Array.from(parentsToExpand));\n for (const parentId of sortedParents) {\n // Only expand if not already expanded\n if (!treeComponent.isNodeExpanded(parentId)) {\n try {\n await treeComponent.expandNode(parentId);\n this.nodesExpandedDuringSearch.push(parentId);\n // Small delay to prevent overwhelming the tree component\n await new Promise((resolve) => setTimeout(resolve, 10));\n } catch {\n // Node might not exist, ignore\n }\n }\n }\n\n // Step 5: Apply highlighting after tree is rendered\n // Use setTimeout to ensure DOM is updated after tree reload\n setTimeout(() => {\n if (this.searchValue().trim()) {\n this.highlightService.highlight('ax-tree-view .ax-truncate', this.searchValue().trim());\n }\n }, 100);\n } catch (error) {\n console.error('Error searching categories:', error);\n this.matchingNodeIds.clear();\n this.relevantNodeIds.clear();\n this.searchResultCount.set(0);\n this.highlightService.clear();\n // Reload tree to clear any filters\n const treeComponent = this.tree();\n if (treeComponent) {\n await treeComponent.reloadData();\n }\n } finally {\n if (this.currentSearchTerm === searchTerm) {\n this.currentSearchTerm = null;\n }\n this.isSearching.set(false);\n }\n }\n\n /**\n * Collects all parent IDs for the given search results\n * Handles both nested 'parent' object and 'parentId' field in search results\n * Recursively fetches parent nodes to build the full parent chain\n */\n private async collectParentIds(items: Record<string, unknown>[]): Promise<Set<string>> {\n const parentsToExpand = new Set<string>();\n const valueField = this.treeConfig?.valueField || 'id';\n const parentKey = this.treeData?.categoryEntityDef?.parentKey || 'parentId';\n\n // Build relevantNodeIds = matching nodes + all parents\n this.relevantNodeIds.clear();\n this.matchingNodeIds.forEach((id) => this.relevantNodeIds.add(id));\n\n // Recursively extract all parent IDs\n const extractParentIds = async (item: Record<string, unknown>): Promise<void> => {\n // First, try to get parent from nested 'parent' object (if available)\n const parent = item['parent'] as Record<string, unknown> | undefined;\n if (parent) {\n const parentId = String(parent[valueField] ?? parent['id'] ?? '');\n if (parentId && parentId !== 'all') {\n parentsToExpand.add(parentId);\n this.relevantNodeIds.add(parentId); // Add to filter set\n this.nodeDataCache.set(parentId, parent);\n await extractParentIds(parent);\n }\n } else {\n // Fallback: use parentId field and fetch parent from server\n // Try both parentKey from entity definition and common 'parentId' field\n const parentIdValue = item[parentKey] ?? item['parentId'];\n if (parentIdValue) {\n const parentId = String(parentIdValue);\n if (parentId && parentId !== 'all') {\n // Add to sets first\n parentsToExpand.add(parentId);\n this.relevantNodeIds.add(parentId);\n\n // Fetch parent from server if not already cached\n if (!this.nodeDataCache.has(parentId)) {\n const parentItem = await this.fetchItemById(parentId);\n if (parentItem) {\n this.nodeDataCache.set(parentId, parentItem);\n // Recursively fetch parent's parent\n await extractParentIds(parentItem);\n }\n } else {\n // Parent already in cache, recursively process it\n const cachedParent = this.nodeDataCache.get(parentId);\n if (cachedParent) {\n await extractParentIds(cachedParent);\n }\n }\n }\n }\n }\n };\n\n // Process all items\n for (const item of items) {\n await extractParentIds(item);\n }\n\n return parentsToExpand;\n }\n\n /**\n * Collects children IDs for matching search results recursively\n * Adds all descendants (children, grandchildren, etc.) to relevantNodeIds so they appear in the filtered tree\n */\n private async collectChildrenIds(items: Record<string, unknown>[]): Promise<void> {\n if (!this.treeData?.categoryEntityQueryFunc || !this.treeConfig) {\n return;\n }\n\n const valueField = this.treeConfig.valueField || 'id';\n const parentKey = this.treeData.categoryEntityDef?.parentKey;\n if (!parentKey) {\n return;\n }\n\n // For each matching node, recursively fetch all its descendants\n for (const item of items) {\n const nodeId = String(item[valueField] ?? '');\n if (!nodeId || nodeId === 'all') {\n continue;\n }\n\n await this.collectChildrenRecursively(nodeId, valueField, parentKey);\n }\n }\n\n /**\n * Recursively collects all descendant IDs for a given node\n */\n private async collectChildrenRecursively(nodeId: string, valueField: string, parentKey: string): Promise<void> {\n if (!this.treeData?.categoryEntityQueryFunc) {\n return;\n }\n\n try {\n // Fetch children for this node\n const event = {\n ...this.treeData.basicQueryEvent,\n filter: {\n field: parentKey,\n value: nodeId,\n operator: { type: 'equal' },\n },\n };\n\n const res = await this.treeData.categoryEntityQueryFunc(event);\n if (res?.items && res.items.length > 0) {\n // Add children IDs to relevantNodeIds so they appear in filtered tree\n for (const child of res.items) {\n const childId = String(child[valueField] ?? '');\n if (childId && childId !== 'all') {\n this.relevantNodeIds.add(childId);\n // Cache child data\n this.nodeDataCache.set(childId, child);\n // Recursively fetch children of this child\n await this.collectChildrenRecursively(childId, valueField, parentKey);\n }\n }\n }\n } catch (error) {\n console.error(`Error fetching children for node ${nodeId}:`, error);\n }\n }\n\n /**\n * Fetches a single item by ID. Uses category tree service so byKey is used when available\n * (returns full item with parent/parentId for building ancestor chains).\n */\n private async fetchItemById(id: string): Promise<Record<string, unknown> | null> {\n if (!this.treeData || !this.treeConfig) return null;\n return this.categoryTreeService.fetchItemById(id, this.treeData, this.treeConfig);\n }\n\n /**\n * Sorts parent IDs by their depth (root first, leaves last)\n * Optimized to use cached data and batch fetch missing items\n */\n private async sortParentsByDepth(parentIds: string[]): Promise<string[]> {\n const parentKey = this.treeData?.categoryEntityDef?.parentKey;\n if (!parentKey || parentIds.length === 0) {\n return parentIds;\n }\n\n // Build depth map using cached data first\n const depthMap = new Map<string, number>();\n const itemCache = new Map<string, Record<string, unknown>>();\n const missingIds = new Set<string>();\n\n // First pass: calculate depth using cached data, collect missing IDs\n for (const parentId of parentIds) {\n if (depthMap.has(parentId)) {\n continue;\n }\n\n let depth = 0;\n let currentId: string | null = parentId;\n const visited = new Set<string>();\n\n while (currentId && currentId !== 'all' && !visited.has(currentId)) {\n visited.add(currentId);\n depth++;\n\n // Check cache first\n let item = this.nodeDataCache.get(currentId);\n if (!item) {\n item = itemCache.get(currentId);\n }\n\n // If still not found, mark for batch fetch\n if (!item) {\n missingIds.add(currentId);\n break;\n }\n\n itemCache.set(currentId, item);\n currentId = this.getParentIdFromNodeData(item);\n }\n\n if (missingIds.size === 0 || !missingIds.has(parentId)) {\n depthMap.set(parentId, depth);\n }\n }\n\n // Batch fetch missing items in parallel\n if (missingIds.size > 0) {\n const fetchPromises = Array.from(missingIds).map((id) => this.fetchItemById(id));\n const fetchedItems = await Promise.all(fetchPromises);\n\n fetchedItems.forEach((item, index) => {\n if (item) {\n const id = Array.from(missingIds)[index];\n itemCache.set(id, item);\n this.nodeDataCache.set(id, item);\n }\n });\n\n // Second pass: calculate depth for items that were missing\n for (const parentId of parentIds) {\n if (depthMap.has(parentId)) {\n continue;\n }\n\n let depth = 0;\n let currentId: string | null = parentId;\n const visited = new Set<string>();\n\n while (currentId && currentId !== 'all' && !visited.has(currentId)) {\n visited.add(currentId);\n depth++;\n\n const item: Record<string, unknown> | undefined =\n this.nodeDataCache.get(currentId) || itemCache.get(currentId);\n if (item) {\n currentId = this.getParentIdFromNodeData(item);\n } else {\n break;\n }\n }\n\n depthMap.set(parentId, depth);\n }\n }\n\n // Sort by depth (lower depth = closer to root = expand first)\n return parentIds.sort((a, b) => {\n const depthA = depthMap.get(a) ?? 0;\n const depthB = depthMap.get(b) ?? 0;\n return depthA - depthB;\n });\n }\n\n /**\n * Updates translated messages for search results\n */\n private async updateTranslatedMessages(resultCount: number, searchTerm: string): Promise<void> {\n if (resultCount > 0) {\n const key =\n resultCount === 1\n ? '@general:terms.interface.category.search.results-found.singular'\n : '@general:terms.interface.category.search.results-found.plural';\n const text = await this.translationService.translateAsync(key, { params: { count: resultCount } });\n this.resultsFoundText.set(text);\n } else {\n this.resultsFoundText.set('');\n }\n\n // Update no records title\n const noRecordsTitleKey = '@general:terms.interface.category.search.no-records.title';\n const noRecordsTitleText = await this.translationService.translateAsync(noRecordsTitleKey, {\n params: { term: searchTerm },\n });\n this.noRecordsTitle.set(noRecordsTitleText);\n }\n\n /**\n * Resets search state and restores tree to original expanded state\n */\n private async resetSearch(): Promise<void> {\n // Clear all search-related state\n this.searchResultCount.set(0);\n this.resultsFoundText.set('');\n this.noRecordsTitle.set('');\n this.currentSearchTerm = null;\n this.isSearching.set(false);\n this.matchingNodeIds.clear();\n this.relevantNodeIds.clear();\n // Clear highlighting\n this.highlightService.clear();\n\n const treeComponent = this.tree();\n if (!treeComponent) {\n this.expandedNodesBeforeSearch = [];\n this.nodesExpandedDuringSearch = [];\n return;\n }\n\n // Store current selected IDs before reload\n const selectedIds = this.selectedNodeIds();\n\n // Reload tree to show all nodes (no filtering)\n await treeComponent.reloadData();\n\n // Collapse nodes that were expanded during search (in reverse order - leaves first)\n const nodesToCollapse = [...this.nodesExpandedDuringSearch].reverse();\n this.nodesExpandedDuringSearch = [];\n\n for (const nodeId of nodesToCollapse) {\n // Only collapse if it wasn't originally expanded before search\n if (!this.expandedNodesBeforeSearch.includes(nodeId)) {\n try {\n treeComponent.collapseNode(nodeId);\n } catch {\n // Node might not exist anymore, ignore\n }\n }\n }\n\n // Clear the stored expanded nodes\n this.expandedNodesBeforeSearch = [];\n\n // Restore selection state after tree reload\n if (selectedIds.length > 0) {\n // Wait for tree to stabilize after reload\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n // Re-sync selection with tree\n await this.restoreSelectionAfterReload(selectedIds);\n }\n }\n\n /**\n * Restores selection state after tree reload.\n * Expands ancestor nodes and selects the previously selected leaf nodes.\n */\n private async restoreSelectionAfterReload(selectedIds: string[]): Promise<void> {\n const treeComponent = this.tree();\n if (!treeComponent || selectedIds.length === 0) {\n return;\n }\n\n this.isUpdatingSelection = true;\n try {\n // Build ancestor chains for selected nodes\n const ancestorChains = await this.buildAncestorChains(selectedIds);\n\n // Expand ancestor nodes to make selected nodes visible\n await this.expandAncestorNodesInOrder(ancestorChains);\n\n // Wait for tree to render expanded nodes\n await new Promise((resolve) => setTimeout(resolve, 50));\n\n // Select the nodes visually in the tree\n for (const id of selectedIds) {\n try {\n treeComponent.selectNode(id);\n } catch {\n // Node might not be in tree yet\n }\n }\n } finally {\n this.isUpdatingSelection = false;\n }\n }\n\n protected async onNodeSelect(event: AXTreeViewNodeSelectEvent): Promise<void> {\n const node = event.node;\n const nodeId = String(node['id'] ?? '');\n if (!node) {\n return;\n }\n\n // Only process USER interactions, not programmatic selections\n // This prevents infinite loops when datasource callback syncs selection\n if (!event.isUserInteraction) {\n return;\n }\n\n // Don't process if we're already updating selection\n if (this.isUpdatingSelection) {\n return;\n }\n\n // Cache node data for getSelectedItems (except for 'all' node)\n if (nodeId !== 'all') {\n const nodeData = node['data'];\n if (nodeData && typeof nodeData === 'object' && nodeData !== null && !Array.isArray(nodeData)) {\n this.nodeDataCache.set(nodeId, nodeData as Record<string, unknown>);\n }\n }\n\n // Check if this node is being selected or deselected\n const isSelected = node['selected'] === true;\n\n if (this.allowMultiple()) {\n const children = node['children'] as unknown[] | undefined;\n const childrenCount = node['childrenCount'] as number | undefined;\n\n // Determine if this node has children (is a parent node)\n // A node has children if: childrenCount > 0, or has non-empty children array\n // Note: childrenCount === undefined means \"unknown\" - we need to check via datasource\n const hasLoadedChildren = children && children.length > 0;\n const hasChildrenCount = childrenCount !== undefined && childrenCount > 0;\n const isDefinitelyLeaf = childrenCount === 0 && (!children || children.length === 0);\n\n if (isSelected) {\n // SELECTION: Only add LEAF nodes to selectedNodeIds\n this.isUpdatingSelection = true;\n try {\n if (nodeId === 'all') {\n // \"All Items\" selected - recursively select all leaf descendants\n await this.selectAllLeafDescendants(nodeId);\n } else if (isDefinitelyLeaf) {\n // This is definitely a leaf node - add it directly\n const currentSelected = new Set(this.selectedNodeIds());\n currentSelected.add(nodeId);\n this.selectedNodeIds.set(Array.from(currentSelected));\n } else if (hasLoadedChildren || hasChildrenCount) {\n // This node has children - only add its leaf descendants\n await this.selectAllLeafDescendants(nodeId);\n } else {\n // childrenCount is undefined - fetch once and reuse to avoid double datasource call\n const childNodes = await this.datasource(nodeId);\n if (!childNodes || childNodes.length === 0) {\n // No children - this is a leaf node, add it\n const currentSelected = new Set(this.selectedNodeIds());\n currentSelected.add(nodeId);\n this.selectedNodeIds.set(Array.from(currentSelected));\n } else {\n // Has children - pass prefetched childNodes to avoid datasource(nodeId) again\n await this.selectAllLeafDescendants(nodeId, childNodes);\n }\n }\n } finally {\n this.isUpdatingSelection = false;\n }\n } else {\n // DESELECTION: Remove node (if leaf) and all leaf descendants from selectedNodeIds\n this.isUpdatingSelection = true;\n try {\n await this.deselectAllLeafDescendants(nodeId);\n } finally {\n this.isUpdatingSelection = false;\n }\n }\n } else {\n // Single selection mode: just update selectedNodeIds\n if (isSelected) {\n this.selectedNodeIds.set([nodeId]);\n } else {\n this.selectedNodeIds.set([]);\n }\n }\n }\n\n /** Datasource callback for tree-view component. */\n protected datasource = async (id?: string): Promise<AXTreeViewNode[]> => {\n if (!this.treeData || !this.treeConfig) {\n return [];\n }\n\n // If no id provided, return root nodes\n if (!id) {\n const items = await this.categoryTreeService.loadRootCategories(this.treeData, this.treeConfig);\n if (!items) {\n return [];\n }\n\n this.cacheNodeData(items);\n\n const rootNode = await this.categoryTreeService.createRootNode(items, this.treeConfig);\n this.processRootNode(rootNode);\n\n // Filter root's children when search is active\n if (this.relevantNodeIds.size > 0 && rootNode['children']) {\n rootNode['children'] = (rootNode['children'] as AXTreeViewNode[]).filter((child) => {\n const childId = String(child['id'] ?? '');\n return this.relevantNodeIds.has(childId);\n });\n rootNode['childrenCount'] = (rootNode['children'] as AXTreeViewNode[]).length;\n }\n\n return [rootNode];\n }\n\n // Load children for the specified parent\n const targetNode: AXTreeViewNode = { id, title: '', data: {} };\n let childNodes = await this.categoryTreeService.loadChildren(targetNode, this.treeData, this.treeConfig);\n\n // Filter children when search is active\n if (this.relevantNodeIds.size > 0) {\n childNodes = childNodes.filter((child) => {\n const childId = String(child['id'] ?? '');\n return this.relevantNodeIds.has(childId);\n });\n }\n\n this.cacheNodeDataFromNodes(childNodes);\n this.processChildNodes(childNodes);\n\n // Mark excluded node as disabled\n const excludedId = this.excludedNodeId();\n if (excludedId) {\n childNodes.forEach((node) => {\n const nodeId = String(node['id'] ?? '');\n if (nodeId === excludedId) {\n node['disabled'] = true;\n }\n });\n }\n\n // Mark pre-selected nodes as selected in the child nodes (for visual display)\n // ONLY do this during initial load, NOT during user selection changes\n if (!this.isUpdatingSelection) {\n const selectedIds = this.selectedNodeIds();\n childNodes.forEach((node) => {\n const nodeId = String(node['id'] ?? '');\n if (nodeId && selectedIds.includes(nodeId)) {\n node['selected'] = true;\n }\n });\n\n // After children load, programmatically select pre-selected nodes in tree component\n // This ensures the tree's internal state matches our selectedNodeIds\n // Skip this if we're in the middle of a selection update (user is selecting/deselecting)\n const treeComponent = this.tree();\n if (treeComponent && selectedIds.length > 0) {\n // Use setTimeout to ensure nodes are in tree structure before selecting\n setTimeout(() => {\n // Double-check we're not in a selection update when timeout fires\n if (this.isUpdatingSelection) {\n return;\n }\n this.isUpdatingSelection = true;\n try {\n // Re-check selectedNodeIds at this point (might have changed)\n const currentSelectedIds = this.selectedNodeIds();\n childNodes.forEach((node) => {\n const nodeId = String(node['id'] ?? '');\n if (nodeId && currentSelectedIds.includes(nodeId) && nodeId !== 'all') {\n try {\n treeComponent.selectNode(nodeId);\n } catch {\n // Node might not be in tree yet\n }\n }\n });\n } finally {\n this.isUpdatingSelection = false;\n }\n }, 10);\n }\n }\n\n return childNodes;\n };\n\n protected async onConfirm(): Promise<void> {\n // Use internal selectedNodeIds state which is kept in sync via onNodeSelect events\n const selectedItems = await this.getSelectedItems();\n this.close({ selected: selectedItems });\n }\n\n protected async onCancel(): Promise<void> {\n await this.close();\n }\n\n /**\n * Clears all selected items\n */\n protected onClearAll(): void {\n this.selectedNodeIds.set([]);\n const treeComponent = this.tree();\n if (treeComponent) {\n treeComponent.deselectAll();\n }\n }\n\n /**\n * Checks if a node matches the current search term\n */\n protected isMatchingNode(nodeId: string): boolean {\n return this.matchingNodeIds.has(nodeId);\n }\n\n /**\n * Checks if a node is currently selected\n */\n protected isNodeSelected(nodeId: string | number | undefined): boolean {\n if (!nodeId || nodeId === 'all') {\n return false;\n }\n const id = String(nodeId);\n return this.selectedNodeIds().includes(id);\n }\n\n /**\n * Expands parent nodes, collects all LEAF descendants, and selects them visually.\n * If the parent itself is a leaf (no children), it will be added.\n * When prefetchedChildren is provided, avoids an extra datasource(parentId) call.\n */\n private async selectAllLeafDescendants(\n parentId: string,\n prefetchedChildren?: AXTreeViewNode[],\n ): Promise<void> {\n if (!this.treeData || !this.treeConfig) {\n return;\n }\n\n const treeComponent = this.tree();\n\n try {\n const leafIds = new Set<string>();\n // Expand and collect leaf nodes; pass prefetchedChildren to avoid duplicate API call\n await this.collectLeafNodes(parentId, leafIds, treeComponent, prefetchedChildren);\n\n // Also check if the parent itself is a leaf (has no children)\n if (parentId !== 'all') {\n const isLeaf = await this.isLeafNodeCheck(parentId);\n if (isLeaf) {\n leafIds.add(parentId);\n }\n }\n\n if (leafIds.size === 0) {\n return;\n }\n\n // Update our internal state\n const currentSelected = new Set(this.selectedNodeIds());\n for (const leafId of leafIds) {\n currentSelected.add(leafId);\n }\n this.selectedNodeIds.set(Array.from(currentSelected));\n\n // Select all leaf nodes visually in the tree\n if (treeComponent) {\n for (const leafId of leafIds) {\n try {\n treeComponent.selectNode(leafId);\n } catch {\n // Node might not be in tree yet\n }\n }\n }\n } catch (error) {\n console.error(`Error selecting leaf descendants for node ${parentId}:`, error);\n }\n }\n\n /**\n * Removes all LEAF descendants from selectedNodeIds.\n * For 'all' node: clears everything and uses tree's deselectAll().\n * For other nodes: tree handles visual state via user click.\n */\n private async deselectAllLeafDescendants(parentId: string): Promise<void> {\n if (!this.treeData || !this.treeConfig) {\n return;\n }\n\n try {\n // Special case: deselecting 'all' clears everything\n if (parentId === 'all') {\n this.selectedNodeIds.set([]);\n // Use tree's deselectAll() to clear all visual selections\n const treeComponent = this.tree();\n if (treeComponent) {\n treeComponent.deselectAll();\n }\n return;\n }\n\n const leafIds = new Set<string>();\n await this.collectLeafNodes(parentId, leafIds);\n\n // Also check if the parent itself is a leaf\n const isLeaf = await this.isLeafNodeCheck(parentId);\n if (isLeaf) {\n leafIds.add(parentId);\n }\n\n if (leafIds.size === 0) {\n return;\n }\n\n // Only update our internal state - tree handles visual state\n const currentSelected = this.selectedNodeIds();\n const newSelected = currentSelected.filter((id) => !leafIds.has(id));\n this.selectedNodeIds.set(newSelected);\n } catch (error) {\n console.error(`Error deselecting leaf descendants for node ${parentId}:`, error);\n }\n }\n\n /**\n * Recursively expands parent nodes and collects LEAF node IDs.\n * When treeComponent is provided, expands each parent node before loading children.\n * When prefetchedChildren is provided, uses it instead of calling datasource(parentId) (one less API call).\n * Fetches each node's children at most once by passing grandchildren when recursing.\n */\n private async collectLeafNodes(\n parentId: string,\n collection: Set<string>,\n treeComponent?: AXTreeViewComponent,\n prefetchedChildren?: AXTreeViewNode[],\n ): Promise<void> {\n if (!this.treeData || !this.treeConfig) {\n return;\n }\n\n try {\n let childNodes: AXTreeViewNode[];\n\n if (prefetchedChildren !== undefined) {\n childNodes = prefetchedChildren;\n } else if (parentId === 'all') {\n // Expand 'all' node if tree component provided\n if (treeComponent) {\n try {\n treeComponent.expandNode('all');\n } catch {\n // Ignore expand errors\n }\n }\n\n // Get root node's children (single datasource call)\n const rootNodes = await this.datasource();\n if (!rootNodes || rootNodes.length === 0) {\n return;\n }\n const rootNode = rootNodes[0];\n childNodes = (rootNode['children'] as AXTreeViewNode[]) || [];\n } else {\n // Expand this parent node if tree component provided\n if (treeComponent) {\n try {\n treeComponent.expandNode(parentId);\n } catch {\n // Ignore expand errors\n }\n }\n\n // Load children via datasource (single call per parent)\n childNodes = await this.datasource(parentId);\n }\n\n if (!childNodes || childNodes.length === 0) {\n return;\n }\n\n // Process each child: fetch grandchildren once, then recurse with them to avoid double datasource call\n for (const childNode of childNodes) {\n const childId = String(childNode['id'] ?? '');\n if (!childId || childId === 'all' || collection.has(childId)) {\n continue;\n }\n\n // Cache node data\n this.cacheNodeFromTreeNode(childNode);\n\n // Fetch children once; use result to decide leaf vs recurse (avoids nodeHasChildren -> extra datasource)\n const grandchildNodes = await this.datasource(childId);\n if (!grandchildNodes || grandchildNodes.length === 0) {\n collection.add(childId);\n } else {\n await this.collectLeafNodes(childId, collection, treeComponent, grandchildNodes);\n }\n }\n } catch (error) {\n console.error(`Error collecting leaf nodes for ${parentId}:`, error);\n }\n }\n\n /**\n * Checks if a node has children\n */\n private async nodeHasChildren(nodeId: string, node?: AXTreeViewNode): Promise<boolean> {\n // First check node properties if available\n if (node) {\n const children = node['children'] as AXTreeViewNode[] | undefined;\n const childrenCount = node['childrenCount'] as number | undefined;\n\n if (children && children.length > 0) {\n return true;\n }\n if (childrenCount !== undefined && childrenCount > 0) {\n return true;\n }\n if (childrenCount === 0) {\n return false;\n }\n }\n\n // Query datasource to check\n const childNodes = await this.datasource(nodeId);\n return childNodes && childNodes.length > 0;\n }\n\n /**\n * Checks if a node is a leaf (has no children)\n */\n private async isLeafNodeCheck(nodeId: string): Promise<boolean> {\n const hasChildren = await this.nodeHasChildren(nodeId);\n return !hasChildren;\n }\n\n /**\n * Caches node data from a tree node\n */\n private cacheNodeFromTreeNode(node: AXTreeViewNode): void {\n const nodeId = String(node['id'] ?? '');\n if (!nodeId || !this.treeConfig) {\n return;\n }\n\n let nodeData = node['data'] as Record<string, unknown> | undefined;\n if (!nodeData || typeof nodeData !== 'object') {\n const valueField = this.treeConfig.valueField || 'id';\n const textField = this.treeConfig.textField || 'title';\n nodeData = {\n [valueField]: nodeId,\n [textField]: node['title'] ?? '',\n ...(node as Record<string, unknown>),\n };\n }\n this.nodeDataCache.set(nodeId, nodeData);\n }\n\n //#endregion\n\n /**\n * Builds complete ancestor chains for all selected node IDs.\n * Returns a Map where key is the selected node ID and value is array of ancestor IDs from root to parent.\n * Batch-fetches missing node and ancestor data in parallel to minimize API calls.\n */\n private async buildAncestorChains(selectedIds: string[]): Promise<Map<string, string[]>> {\n const ancestorChains = new Map<string, string[]>();\n if (!this.treeData || !this.treeConfig) return ancestorChains;\n if (!this.treeData.categoryEntityDef?.parentKey) return ancestorChains;\n\n // Collect and batch-fetch all missing IDs (selected nodes without parent + ancestors) in rounds\n let toFetch = new Set<string>();\n for (const nodeId of selectedIds) {\n const cached = this.nodeDataCache.get(nodeId);\n if (!cached || this.getParentIdFromNodeData(cached) === null) {\n toFetch.add(nodeId);\n }\n }\n\n while (toFetch.size > 0) {\n const results = await Promise.all(Array.from(toFetch).map((id) => this.fetchItemById(id)));\n const idsArr = Array.from(toFetch);\n results.forEach((item, i) => {\n if (item) this.nodeDataCache.set(idsArr[i], item);\n });\n\n toFetch = new Set<string>();\n for (const nodeId of selectedIds) {\n let currentData = this.nodeDataCache.get(nodeId) ?? null;\n const visited = new Set<string>();\n while (currentData) {\n const parentId = this.getParentIdFromNodeData(currentData);\n if (!parentId || visited.has(parentId)) break;\n visited.add(parentId);\n if (!this.nodeDataCache.has(parentId)) {\n toFetch.add(parentId);\n break;\n }\n currentData = this.nodeDataCache.get(parentId) ?? null;\n }\n }\n }\n\n // Build chains from cache (no further API calls)\n for (const nodeId of selectedIds) {\n const chain: string[] = [];\n let currentData = this.nodeDataCache.get(nodeId) ?? null;\n if (!currentData) continue;\n const visited = new Set<string>();\n while (currentData) {\n const parentId = this.getParentIdFromNodeData(currentData);\n if (!parentId || visited.has(parentId)) break;\n visited.add(parentId);\n chain.unshift(parentId);\n currentData = this.nodeDataCache.get(parentId) ?? null;\n }\n ancestorChains.set(nodeId, chain);\n }\n\n return ancestorChains;\n }\n\n /**\n * Expands ancestor nodes in order from root to leaf.\n * This ensures parent nodes are loaded into the tree before selecting children.\n */\n private async expandAncestorNodesInOrder(ancestorChains: Map<string, string[]>): Promise<void> {\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n\n // Collect all unique ancestors and sort by depth (shallowest first)\n const allAncestors = new Set<string>();\n const ancestorDepths = new Map<string, number>();\n\n ancestorChains.forEach((chain) => {\n chain.forEach((ancestorId, depth) => {\n allAncestors.add(ancestorId);\n // Keep the minimum depth if ancestor appears in multiple chains\n const existingDepth = ancestorDepths.get(ancestorId);\n if (existingDepth === undefined || depth < existingDepth) {\n ancestorDepths.set(ancestorId, depth);\n }\n });\n });\n\n // Sort by depth (root ancestors first)\n const sortedAncestors = Array.from(allAncestors).sort((a, b) => {\n return (ancestorDepths.get(a) ?? 0) - (ancestorDepths.get(b) ?? 0);\n });\n\n try {\n if (!treeComponent.isNodeExpanded('all')) {\n await treeComponent.expandNode('all');\n await this.waitForNodeExpanded(treeComponent, 'all');\n }\n } catch {\n // Root might not exist\n }\n\n for (const ancestorId of sortedAncestors) {\n try {\n if (!treeComponent.isNodeExpanded(ancestorId)) {\n await treeComponent.expandNode(ancestorId);\n await this.waitForNodeExpanded(treeComponent, ancestorId);\n }\n } catch {\n // Ancestor might not be in tree yet\n }\n }\n }\n\n /** Waits until the node is expanded (tree has loaded children). Polls so deep paths load. */\n private async waitForNodeExpanded(\n treeComponent: AXTreeViewComponent,\n nodeId: string,\n maxWaitMs = 2800,\n pollMs = 60,\n ): Promise<void> {\n const deadline = Date.now() + maxWaitMs;\n while (Date.now() < deadline) {\n try {\n if (treeComponent.isNodeExpanded(nodeId)) return;\n } catch {\n // Node may not exist yet\n }\n await new Promise((r) => setTimeout(r, pollMs));\n }\n }\n\n /**\n * Syncs selection state with the tree component.\n * Selects leaf nodes and manually updates parent states (indeterminate/selected).\n */\n private async syncSelectionWithTree(selectedIds: string[]): Promise<void> {\n const treeComponent = this.tree();\n if (!treeComponent || selectedIds.length === 0) {\n return;\n }\n\n // Wait for tree to be fully initialized after ancestor expansion\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n // Keep track of successfully synced nodes\n const syncedNodes = new Set<string>();\n\n // Try multiple times to sync selection (nodes might load progressively)\n for (let attempt = 0; attempt < 5; attempt++) {\n for (const id of selectedIds) {\n if (id && id !== 'all' && !syncedNodes.has(id)) {\n try {\n const node = treeComponent.findNode(id);\n if (node) {\n // Node exists in tree - mark it as selected using both methods\n // 1. Direct property assignment for immediate visual feedback\n node['selected'] = true;\n node['indeterminate'] = false;\n // 2. Use selectNode API for tree's internal state tracking\n try {\n treeComponent.selectNode(id);\n } catch {\n // selectNode might fail but direct assignment should work\n }\n syncedNodes.add(id);\n }\n } catch {\n // Node not in tree yet\n }\n }\n }\n\n // If all nodes are synced, we're done\n if (syncedNodes.size === selectedIds.length) {\n break;\n }\n\n // Wait before next attempt\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n // Now update parent states (indeterminate/selected) based on children\n // This uses bottom-up traversal with datasource fallback for loading children\n await this.updateParentStatesAfterSelection(selectedIds);\n\n // Refresh tree to apply changes\n treeComponent.refresh();\n\n // Trigger change detection to update UI\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * Updates parent node states (selected/indeterminate) based on children selection.\n * Called after leaf nodes are selected to properly show parent states.\n * Works bottom-up from deepest parents to root, tracking states in a Map.\n */\n private async updateParentStatesAfterSelection(selectedLeafIds: string[]): Promise<void> {\n if (!this.treeData || !this.treeConfig || selectedLeafIds.length === 0) {\n return;\n }\n\n const parentKey = this.treeData.categoryEntityDef?.parentKey;\n if (!parentKey) {\n return;\n }\n\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n\n // Track node states: { selected: boolean, indeterminate: boolean }\n // This allows us to reference child states when processing parents\n const nodeStates = new Map<string, { selected: boolean; indeterminate: boolean }>();\n\n // Initialize with selected leaf nodes\n for (const leafId of selectedLeafIds) {\n nodeStates.set(leafId, { selected: true, indeterminate: false });\n }\n\n // Collect all unique parent IDs from selected nodes\n const parentsToUpdate = new Set<string>();\n for (const leafId of selectedLeafIds) {\n const nodeData = this.nodeDataCache.get(leafId);\n if (!nodeData) {\n continue;\n }\n\n let currentData: Record<string, unknown> | undefined = nodeData;\n while (currentData) {\n const parentId = this.getParentIdFromNodeData(currentData);\n if (!parentId) break;\n parentsToUpdate.add(parentId);\n currentData = this.nodeDataCache.get(parentId);\n }\n }\n\n // Sort parents by depth (deepest first so we update bottom-up)\n const sortedParents = await this.sortParentsByDepth(Array.from(parentsToUpdate));\n const reversedParents = [...sortedParents].reverse(); // Deepest first\n\n // Batch-load children for parents that don't have them in tree (parallel instead of sequential)\n const parentIdsNeedingLoad = reversedParents.filter((parentId) => {\n const parentNode = treeComponent.findNode(parentId);\n const treeChildren = parentNode?.['children'] as AXTreeViewNode[] | undefined;\n return !treeChildren || treeChildren.length === 0;\n });\n const childrenByParentId = new Map<string, Array<{ id: string }>>();\n if (parentIdsNeedingLoad.length > 0) {\n const results = await Promise.all(\n parentIdsNeedingLoad.map((id) => this.datasource(id)),\n );\n results.forEach((dsChildren, index) => {\n if (dsChildren && dsChildren.length > 0) {\n childrenByParentId.set(parentIdsNeedingLoad[index], dsChildren.map((c) => ({ id: String(c['id'] ?? '') })));\n }\n });\n }\n\n for (const parentId of reversedParents) {\n try {\n const parentNode = treeComponent.findNode(parentId);\n\n // Get all direct children: from tree node, or from batch-loaded map\n let childrenList: Array<{ id: string }> = [];\n const treeChildren = parentNode?.['children'] as AXTreeViewNode[] | undefined;\n if (treeChildren && treeChildren.length > 0) {\n childrenList = treeChildren.map((c) => ({ id: String(c['id'] ?? '') }));\n } else {\n const loaded = childrenByParentId.get(parentId);\n if (loaded && loaded.length > 0) {\n childrenList = loaded;\n }\n }\n\n if (childrenList.length === 0) {\n continue;\n }\n\n // Count child states using our tracked nodeStates Map\n let fullySelectedCount = 0;\n let indeterminateCount = 0;\n let totalCount = 0;\n\n for (const child of childrenList) {\n if (!child.id || child.id === 'all') {\n continue;\n }\n totalCount++;\n\n const childState = nodeStates.get(child.id);\n if (childState) {\n if (childState.selected && !childState.indeterminate) {\n // Child is fully selected\n fullySelectedCount++;\n } else if (childState.indeterminate) {\n // Child is indeterminate\n indeterminateCount++;\n }\n // If neither, child is not selected at all\n }\n // If childState is undefined, child is not in our tracking = not selected\n }\n\n // Determine parent state based on children\n let parentSelected = false;\n let parentIndeterminate = false;\n\n if (totalCount > 0) {\n if (fullySelectedCount === totalCount && indeterminateCount === 0) {\n // All children are fully selected - parent is fully selected\n parentSelected = true;\n parentIndeterminate = false;\n } else if (fullySelectedCount > 0 || indeterminateCount > 0) {\n // Some children selected or indeterminate - parent is indeterminate\n parentSelected = true;\n parentIndeterminate = true;\n }\n // else: no children selected - parent stays unselected\n }\n\n // Store state in our tracking Map (for use by parent's parent)\n nodeStates.set(parentId, { selected: parentSelected, indeterminate: parentIndeterminate });\n\n // Update tree node if it exists\n if (parentNode) {\n parentNode['selected'] = parentSelected;\n parentNode['indeterminate'] = parentIndeterminate;\n }\n } catch (error) {\n console.error(`Error updating parent state for ${parentId}:`, error);\n }\n }\n }\n\n /**\n * Loads node data for IDs that are selected but not yet in the cache.\n * This is critical for pre-selected values in collapsed branches.\n * Fetches all missing IDs in parallel to minimize API calls and latency.\n */\n private async loadMissingNodeData(selectedIds: string[]): Promise<void> {\n if (!this.treeData || !this.treeConfig || selectedIds.length === 0) {\n return;\n }\n\n const missingIds = selectedIds.filter((id) => !this.nodeDataCache.has(id));\n if (missingIds.length === 0) return;\n\n try {\n const valueField = this.treeConfig.valueField || 'id';\n const results = await Promise.all(missingIds.map((id) => this.fetchItemById(id)));\n results.forEach((item, index) => {\n if (item) {\n const id = missingIds[index];\n this.nodeDataCache.set(String(item[valueField] ?? id), item);\n }\n });\n } catch (error) {\n console.error('Error loading missing node data:', error);\n }\n }\n\n /**\n * For each selected id, if cached item has no parent (e.g. batch query returned minimal fields),\n * re-fetch by id so we have parent/parentId for building ancestor chains.\n * Fetches all needing refresh in parallel.\n */\n private async ensureParentDataInCache(selectedIds: string[]): Promise<void> {\n if (!this.treeConfig) return;\n const idsNeedingFetch = selectedIds.filter((id) => {\n const cached = this.nodeDataCache.get(id);\n return cached && this.getParentIdFromNodeData(cached) === null;\n });\n if (idsNeedingFetch.length === 0) return;\n const results = await Promise.all(idsNeedingFetch.map((id) => this.fetchItemById(id)));\n results.forEach((full, index) => {\n if (full) this.nodeDataCache.set(idsNeedingFetch[index], full);\n });\n }\n\n /**\n * Resolves parent ID from node data: supports nested `parent` object or flat parentId/parentKey.\n */\n private getParentIdFromNodeData(item: Record<string, unknown>): string | null {\n if (!item || !this.treeConfig) return null;\n const valueField = this.treeConfig.valueField || 'id';\n const parentKey = this.treeData?.categoryEntityDef?.parentKey || 'parentId';\n const parent = item['parent'] as Record<string, unknown> | undefined;\n if (parent && typeof parent === 'object') {\n const id = String(parent[valueField] ?? parent['id'] ?? '');\n return id && id !== 'all' ? id : null;\n }\n const parentIdValue = item[parentKey] ?? item['parentId'];\n if (parentIdValue == null || parentIdValue === '') return null;\n const id = String(parentIdValue);\n return id && id !== 'all' ? id : null;\n }\n\n /**\n * Marks nodes as selected in the tree structure based on selectedNodeIds.\n * This ensures pre-selected nodes appear selected when the tree is rendered.\n */\n private markNodesAsSelected(node: AXTreeViewNode): void {\n const selectedIds = this.selectedNodeIds();\n if (selectedIds.length === 0) {\n return;\n }\n\n // Mark the node itself if it's selected\n this.markNodeAsSelectedIfNeeded(node);\n\n // Recursively mark children\n const nodeChildren = node['children'] as AXTreeViewNode[] | undefined;\n if (nodeChildren) {\n nodeChildren.forEach((child) => {\n this.markNodesAsSelected(child);\n });\n }\n }\n\n /**\n * Marks a single node as selected if it's in the selectedNodeIds list.\n */\n private markNodeAsSelectedIfNeeded(node: AXTreeViewNode): void {\n const selectedIds = this.selectedNodeIds();\n const nodeId = String(node['id'] ?? '');\n if (nodeId && selectedIds.includes(nodeId)) {\n node['selected'] = true;\n }\n }\n\n /**\n * Marks a node and its children as disabled if the node ID matches the excluded ID.\n */\n private markNodeAsDisabled(node: AXTreeViewNode, excludedId: string): void {\n const nodeId = String(node['id'] ?? '');\n if (nodeId === excludedId) {\n node['disabled'] = true;\n }\n\n // Recursively mark children\n const nodeChildren = node['children'] as AXTreeViewNode[] | undefined;\n if (nodeChildren) {\n nodeChildren.forEach((child) => {\n this.markNodeAsDisabled(child, excludedId);\n });\n }\n }\n\n /**\n * Processes root node: marks excluded as disabled, marks selected, and syncs selection with tree component\n */\n private processRootNode(rootNode: AXTreeViewNode): void {\n const excludedId = this.excludedNodeId();\n if (excludedId) {\n this.markNodeAsDisabled(rootNode, excludedId);\n }\n\n this.markNodesAsSelected(rootNode);\n\n // Sync selection with tree component after a short delay to ensure tree is rendered\n const treeComponent = this.tree();\n if (treeComponent) {\n setTimeout(() => {\n this.isUpdatingSelection = true;\n try {\n const selectedIds = this.selectedNodeIds();\n selectedIds.forEach((id) => {\n if (id && id !== 'all') {\n try {\n treeComponent.selectNode(id);\n } catch {\n // Node might not be in tree yet\n }\n }\n });\n } finally {\n this.isUpdatingSelection = false;\n }\n }, 0);\n }\n }\n\n /**\n * Processes child nodes: marks excluded as disabled\n * Selection marking is handled in datasource callback ONLY during initial load\n */\n private processChildNodes(childNodes: AXTreeViewNode[]): void {\n const excludedId = this.excludedNodeId();\n\n childNodes.forEach((node) => {\n const nodeId = String(node['id'] ?? '');\n if (excludedId && nodeId === excludedId) {\n node['disabled'] = true;\n }\n });\n }\n\n /**\n * Caches node data from items array\n */\n private cacheNodeData(items: Record<string, unknown>[]): void {\n items.forEach((item) => {\n const itemId = String(item[this.treeConfig!.valueField || 'id'] ?? '');\n if (itemId && typeof item === 'object' && item !== null) {\n this.nodeDataCache.set(itemId, item as Record<string, unknown>);\n }\n });\n }\n\n /**\n * Caches node data from tree nodes\n */\n private cacheNodeDataFromNodes(nodes: AXTreeViewNode[]): void {\n nodes.forEach((node) => {\n const nodeId = String(node['id'] ?? '');\n const nodeData = node['data'] as Record<string, unknown> | undefined;\n if (nodeData && nodeId && typeof nodeData === 'object') {\n this.nodeDataCache.set(nodeId, nodeData);\n }\n });\n }\n\n /**\n * Calculate the full path from root to the selected node.\n * Returns an array of strings like [\"Operations\", \"IT Operations\"] for node \"IT Operations\" under parent \"Operations\".\n * Uses tree-view's getNodePath() API when available, otherwise falls back to manual calculation.\n */\n private async calculateNodePath(nodeId: string, nodeData: Record<string, unknown>): Promise<string[]> {\n if (!this.treeData || !this.treeConfig) {\n const title = this.getNodeTitle(nodeData);\n return title ? [title] : [];\n }\n\n const treeComponent = this.tree();\n if (treeComponent) {\n try {\n // Use tree-view's getNodePath() to get ID path, then convert to titles\n // Note: getNodePath() returns the path INCLUDING the node itself\n const idPath = treeComponent.getNodePath(nodeId);\n if (idPath && idPath.length > 0) {\n const titlePath: string[] = [];\n for (const pathId of idPath) {\n if (pathId === 'all') continue; // Skip root node\n const pathNode = treeComponent.findNode(pathId);\n if (pathNode) {\n const nodeData = pathNode['data'] as Record<string, unknown> | undefined;\n const pathTitle = nodeData\n ? this.getNodeTitle(nodeData)\n : this.mlsResolver.resolve(pathNode['title'] as AXPMultiLanguageString);\n if (pathTitle) {\n titlePath.push(pathTitle);\n }\n } else {\n // Node not in tree, try cache\n const cachedData = this.nodeDataCache.get(pathId);\n if (cachedData) {\n const pathTitle = this.getNodeTitle(cachedData);\n if (pathTitle) {\n titlePath.push(pathTitle);\n }\n }\n }\n }\n // DO NOT add current node title again - it's already included in idPath\n return titlePath.length > 0 ? titlePath : this.getNodeTitle(nodeData) ? [this.getNodeTitle(nodeData)] : [];\n }\n } catch (error) {\n // Fall through to manual calculation if getNodePath fails\n console.warn('Error using getNodePath, falling back to manual calculation:', error);\n }\n }\n\n // Fallback: Manual path calculation\n return this.calculateNodePathManually(nodeId, nodeData);\n }\n\n /**\n * Manual path calculation fallback\n */\n private async calculateNodePathManually(nodeId: string, nodeData: Record<string, unknown>): Promise<string[]> {\n if (!this.treeData || !this.treeConfig) {\n const title = this.getNodeTitle(nodeData);\n return title ? [title] : [];\n }\n\n const parentKey = this.treeData.categoryEntityDef?.parentKey;\n if (!parentKey) {\n const title = this.getNodeTitle(nodeData);\n return title ? [title] : [];\n }\n\n const path: string[] = [];\n let currentId: string | null = nodeId;\n let currentData: Record<string, unknown> | undefined = nodeData;\n const visitedIds = new Set<string>();\n\n while (currentId && currentData && !visitedIds.has(currentId)) {\n visitedIds.add(currentId);\n const title = this.getNodeTitle(currentData);\n if (title) path.unshift(title);\n\n const parentId = this.getParentIdFromNodeData(currentData);\n if (!parentId || parentId === currentId) break;\n\n let parentData = this.nodeDataCache.get(parentId);\n if (!parentData && this.treeData.categoryEntityQueryFunc) {\n try {\n const fetched = await this.fetchItemById(parentId);\n if (fetched) {\n parentData = fetched;\n this.nodeDataCache.set(parentId, fetched);\n }\n } catch (error) {\n console.error('Error fetching parent node:', error);\n break;\n }\n }\n\n if (!parentData) break;\n\n currentId = parentId;\n currentData = parentData;\n }\n\n return path.length > 0 ? path : this.getNodeTitle(nodeData) ? [this.getNodeTitle(nodeData)] : [];\n }\n\n /**\n * Get the display title for a node.\n */\n private getNodeTitle(nodeData: Record<string, unknown>): string {\n if (!nodeData || !this.treeConfig) {\n return '';\n }\n const textField = this.treeConfig.textField || 'title';\n const raw = nodeData[textField];\n return this.mlsResolver.resolve(raw as AXPMultiLanguageString);\n }\n\n private async getSelectedItems(): Promise<Array<Record<string, unknown> & { id: string; path: string[] }>> {\n // selectedNodeIds now only contains LEAF nodes (already filtered)\n const selectedIds = this.selectedNodeIds();\n if (selectedIds.length === 0) {\n return [];\n }\n\n const treeComponent = this.tree();\n\n // Get node data from cache and calculate paths\n const items = await Promise.all(\n selectedIds.map(async (id): Promise<(Record<string, unknown> & { id: string; path: string[] }) | null> => {\n // First try to get from cache\n let nodeData = this.nodeDataCache.get(id);\n\n // If not in cache, try to get from tree component\n if (!nodeData && treeComponent) {\n try {\n const node = treeComponent.findNode(id);\n if (node) {\n nodeData = (node['data'] as Record<string, unknown>) || (node as Record<string, unknown>);\n // Cache it for future use\n if (nodeData && typeof nodeData === 'object') {\n this.nodeDataCache.set(id, nodeData);\n }\n }\n } catch {\n // Node not found in tree\n }\n }\n\n // If still no data, try to fetch from server\n if (!nodeData) {\n const fetchedData = await this.fetchItemById(id);\n if (fetchedData) {\n nodeData = fetchedData;\n this.nodeDataCache.set(id, fetchedData);\n }\n }\n\n // If still no data, skip this node\n if (!nodeData) {\n console.warn(`Could not find data for selected node: ${id}`);\n return null;\n }\n\n const path = await this.calculateNodePath(id, nodeData);\n return {\n ...nodeData,\n id: id,\n path: path,\n };\n }),\n );\n\n return items.filter((item): item is Record<string, unknown> & { id: string; path: string[] } => item != null);\n }\n\n //#endregion\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString, resolveMultiLanguageString } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPEntityStorageService } from '../../entity-storage-service';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\nexport interface ResolvedCategory {\n id: string;\n title: string;\n path: string[];\n}\n\ninterface PendingRequest {\n ids: string[];\n valueField: string;\n textField: string;\n parentKey?: string;\n resolve: (m: Map<string, ResolvedCategory>) => void;\n reject: (err: unknown) => void;\n}\n\n/**\n * Batch-resolves category data for entity-category-widget-column.\n * Only fetches when the column is visible. Returns full path for hierarchical display (e.g. \"… > Sales\").\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityCategoryBatchResolverService {\n private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n private readonly entityStorage = inject(AXPEntityStorageService);\n private readonly translation = inject(AXTranslationService);\n\n private readonly cache = new Map<string, Map<string, ResolvedCategory>>();\n private readonly pendingByEntity = new Map<string, PendingRequest[]>();\n private flushScheduled = false;\n\n async resolve(\n entityKey: string,\n ids: string[],\n valueField: string,\n textField: string,\n parentKey?: string,\n ): Promise<Map<string, ResolvedCategory>> {\n const uniqueIds = Array.from(new Set(ids.filter((id) => id != null && id !== '')));\n if (uniqueIds.length === 0) return new Map();\n\n const cached = this.getFromCache(entityKey, uniqueIds, valueField);\n if (cached.size === uniqueIds.length) return cached;\n\n return new Promise<Map<string, ResolvedCategory>>((resolve, reject) => {\n const list = this.pendingByEntity.get(entityKey) ?? [];\n list.push({\n ids: uniqueIds,\n valueField,\n textField,\n parentKey,\n resolve: (m) => {\n const subset = new Map<string, ResolvedCategory>();\n for (const id of uniqueIds) {\n const r = m.get(id);\n if (r) subset.set(id, r);\n }\n resolve(subset);\n },\n reject,\n });\n this.pendingByEntity.set(entityKey, list);\n this.scheduleFlush();\n });\n }\n\n private getFromCache(\n entityKey: string,\n ids: string[],\n valueField: string,\n ): Map<string, ResolvedCategory> {\n const entityCache = this.cache.get(entityKey);\n if (!entityCache) return new Map();\n const result = new Map<string, ResolvedCategory>();\n for (const id of ids) {\n const cached = entityCache.get(id);\n if (cached) result.set(id, cached);\n }\n return result;\n }\n\n private setCache(entityKey: string, items: ResolvedCategory[], valueField: string): void {\n let entityCache = this.cache.get(entityKey);\n if (!entityCache) {\n entityCache = new Map();\n this.cache.set(entityKey, entityCache);\n }\n for (const item of items) {\n entityCache.set(item.id, item);\n }\n }\n\n private scheduleFlush(): void {\n if (this.flushScheduled) return;\n this.flushScheduled = true;\n queueMicrotask(() => {\n this.flushScheduled = false;\n this.flushAll();\n });\n }\n\n private async flushAll(): Promise<void> {\n const entities = Array.from(this.pendingByEntity.keys());\n for (const entityKey of entities) {\n await this.flush(entityKey);\n }\n }\n\n private async flush(entityKey: string): Promise<void> {\n const list = this.pendingByEntity.get(entityKey);\n if (!list?.length) return;\n this.pendingByEntity.delete(entityKey);\n\n const first = list[0];\n const { valueField, textField, parentKey } = first;\n const allIds = Array.from(new Set(list.flatMap((r) => r.ids)));\n\n try {\n const result = await this.fetchAndResolve(\n entityKey,\n allIds,\n valueField,\n textField,\n parentKey,\n );\n for (const req of list) {\n const subset = new Map<string, ResolvedCategory>();\n for (const id of req.ids) {\n const r = result.get(id);\n if (r) subset.set(id, r);\n }\n req.resolve(subset);\n }\n } catch (err) {\n for (const req of list) req.reject(err);\n }\n }\n\n private async fetchAndResolve(\n entityKey: string,\n ids: string[],\n valueField: string,\n textField: string,\n parentKey?: string,\n ): Promise<Map<string, ResolvedCategory>> {\n const [moduleName, entityName] = entityKey.split('.');\n if (!moduleName || !entityName) return new Map();\n\n try {\n let items: any[];\n let allItems: any[];\n\n if (parentKey) {\n // Use storage directly to fetch ALL categories. The entity's list execute adds\n // a default filter (parentId isEmpty) that returns only roots - we need the full tree.\n const allResult = await this.entityStorage.query(entityKey, {\n skip: 0,\n take: 10000,\n });\n allItems = allResult?.items ?? [];\n items = allItems.filter((c: any) => ids.includes(String(get(c, valueField))));\n } else {\n const entityDef = await this.entityResolver.resolve(moduleName, entityName);\n const listExecute = entityDef?.queries?.list?.execute as (req: any) => Promise<{ items: any[] }>;\n if (!listExecute || typeof listExecute !== 'function') return new Map();\n const result = await listExecute({\n skip: 0,\n take: ids.length + 100,\n filter: { field: valueField, operator: { type: 'in' }, value: ids },\n });\n items = result?.items ?? [];\n allItems = items;\n }\n\n const pathMap = parentKey\n ? this.buildPathMap(allItems, valueField, textField, parentKey)\n : null;\n\n const result = new Map<string, ResolvedCategory>();\n for (const item of items) {\n const id = String(get(item, valueField));\n const rawTitle = get(item, textField);\n const titleText = this.resolveCategoryLabel(rawTitle);\n const path = pathMap\n ? pathMap.get(id) ?? (rawTitle != null && rawTitle !== '' ? [titleText] : [])\n : rawTitle != null && rawTitle !== ''\n ? [titleText]\n : [];\n result.set(id, {\n id,\n title: titleText,\n path,\n });\n }\n\n this.setCache(entityKey, Array.from(result.values()), valueField);\n return result;\n } catch (error) {\n console.error('[EntityCategoryBatchResolver] Failed:', error);\n return new Map();\n }\n }\n\n private buildPathMap(\n items: any[],\n valueField: string,\n textField: string,\n parentKey: string,\n ): Map<string, string[]> {\n const map = new Map<string, any>();\n for (const item of items) {\n map.set(String(get(item, valueField)), item);\n }\n\n const pathMap = new Map<string, string[]>();\n const visited = new Set<string>();\n\n const buildPath = (id: string): string[] => {\n if (visited.has(id)) return pathMap.get(id) ?? [];\n const item = map.get(id);\n if (!item) return [];\n const parentId = get(item, parentKey);\n const title = this.resolveCategoryLabel(get(item, textField));\n if (\n parentId == null ||\n parentId === '' ||\n parentId === 'all' ||\n String(parentId) === id\n ) {\n const path = title ? [title] : [];\n pathMap.set(id, path);\n visited.add(id);\n return path;\n }\n const parentPath = buildPath(String(parentId));\n const path = title ? [...parentPath, title] : parentPath;\n pathMap.set(id, path);\n visited.add(id);\n return path;\n };\n\n for (const item of items) {\n const id = String(get(item, valueField));\n if (!pathMap.has(id)) buildPath(id);\n }\n return pathMap;\n }\n\n private resolveCategoryLabel(raw: unknown): string {\n return resolveMultiLanguageString(raw as AXPMultiLanguageString, this.translation.getActiveLang());\n }\n}\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPColumnItemListComponent, AXPColumnItemListItem } from '@acorex/platform/layout/components';\nimport { AXPColumnWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, Input, signal } from '@angular/core';\nimport { castArray, get, isNil } from 'lodash-es';\nimport { AXPEntityDetailPopoverService } from '../../components';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPEntityCategoryBatchResolverService } from '../../services/entity-category/entity-category-batch-resolver.service';\n\n@Component({\n selector: 'axp-entity-category-widget-column',\n host: {\n class: 'ax-w-full',\n },\n template: `\n <axp-column-item-list [items]=\"columnItems()\" [itemTemplate]=\"itemTemplate\" />\n\n <!-- Item Template -->\n <ng-template #itemTemplate let-item>\n <div>\n @if (hasParent(item.originalItem)) {\n <ax-badge\n [color]=\"'primary'\"\n [look]=\"'twotone'\"\n class=\"ax-p-0.5\"\n [text]=\"getItemText(item.originalItem)\"\n [axTooltip]=\"getBreadcrumbPath(item.originalItem)\"\n [axTooltipPlacement]=\"'top'\"\n >\n <ax-prefix>\n <i class=\"fal fa-ellipsis-h ax-text-on-primary ax-text-xs ax-ps-1\"></i>\n <i class=\"fal fa-angle-right rtl:ax-rotate-180 ax-text-on-primary ax-text-xs ax-px-1\"></i>\n </ax-prefix>\n </ax-badge>\n } @else {\n <ax-badge\n [color]=\"'primary'\"\n [look]=\"'twotone'\"\n class=\"ax-p-0.5\"\n [text]=\"getItemText(item.originalItem)\"\n [axTooltip]=\"getBreadcrumbPath(item.originalItem)\"\n [axTooltipPlacement]=\"'top'\"\n ></ax-badge>\n }\n </div>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPColumnItemListComponent, AXBadgeModule, AXDecoratorModule, AXTooltipModule],\n inputs: ['rawValue', 'rowData'],\n})\nexport class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComponent<any> {\n //#region ---- Services & Dependencies ----\n\n protected readonly entityDetailPopoverService = inject(AXPEntityDetailPopoverService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n private readonly categoryBatchResolver = inject(AXPEntityCategoryBatchResolverService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n private readonly rawValueSignal = signal<any>(null);\n\n @Input('rawValue')\n set rawValueInput(value: any) {\n this.rawValueSignal.set(value);\n }\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected entity = computed<string>(() => (this.options['entity'] as string) ?? '');\n protected valueField = computed<string>(() => (this.options['valueField'] as string) ?? 'id');\n protected textField = computed<string>(() => (this.options['textField'] as string) ?? 'title');\n protected columnName = computed<string>(() => (this.options['columnName'] as string) ?? '');\n\n protected defaultTextField = computed<string>(() => {\n const textField =\n this.entityDef()?.formats.lookup ?? this.entityDef()?.properties.find((c) => c.name != 'id')?.name ?? 'title';\n return textField;\n });\n\n protected displayField = computed<string>(() => {\n if (this.textField()) {\n return this.textField();\n }\n return this.defaultTextField();\n });\n\n //#endregion\n\n //#region ---- Component State ----\n\n protected host = inject(ElementRef);\n private entityDef = signal<AXPEntity | null>(null);\n protected displayItems = signal<any[]>([]);\n protected selectedItemIndex = signal<number>(-1);\n\n //#endregion\n\n //#region ---- Effects ----\n\n private efEntity = effect(async () => {\n const entityKey = this.entity();\n if (!entityKey) {\n return;\n }\n\n const [module, entity] = entityKey.split('.');\n if (!module || !entity) {\n return;\n }\n\n this.entityDef.set(await this.entityResolver.resolve(module, entity));\n });\n\n private efDisplay = effect(async () => {\n const value = this.rawValueSignal();\n const entity = this.entityDef();\n\n // Wait for entity definition to be loaded before processing value\n if (!entity) {\n this.displayItems.set([]);\n return;\n }\n\n if (isNil(value)) {\n this.displayItems.set([]);\n } else {\n const items = castArray(value);\n const itemsWithPaths = await this.resolveItemsWithPaths(items);\n this.displayItems.set(itemsWithPaths.filter((c) => c != null));\n }\n });\n\n //#endregion\n\n //#region ---- Computed Properties (Derived) ----\n\n protected visibleItems = computed(() => this.displayItems());\n\n protected columnItems = computed<AXPColumnItemListItem[]>(() => {\n return this.visibleItems().map((item) => ({\n id: this.getItemId(item),\n content: this.getItemText(item),\n originalItem: item, // Store original item for template access\n }));\n });\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n protected async showItemDetail(item: any, index: number): Promise<void> {\n if (this.options['disableDetailPopover']) {\n return;\n }\n\n const columnData = this.rowData[this.columnName()];\n const id = Array.isArray(columnData) ? columnData[index] : columnData;\n\n this.selectedItemIndex.set(index);\n\n const entityKey = this.entity();\n if (entityKey && id) {\n await this.entityDetailPopoverService.show(this.host, {\n entity: entityKey,\n id: id,\n textField: this.textField(),\n valueField: this.valueField(),\n item,\n breadcrumb: this.getBreadcrumbPath(item),\n });\n }\n }\n\n protected handleItemClick(listItem: AXPColumnItemListItem): void {\n if (this.options['disableDetailPopover']) {\n return;\n }\n\n const originalItem = (listItem as any).originalItem;\n if (!originalItem) {\n return;\n }\n\n const items = this.visibleItems();\n const itemIndex = items.findIndex((item) => this.getItemId(item) === listItem.id);\n if (itemIndex >= 0) {\n this.showItemDetail(originalItem, itemIndex);\n }\n }\n\n protected getItemPath(item: any): string[] {\n if (!item) {\n return [];\n }\n // If path is available as array, return it\n if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n return item.path;\n }\n // Fall back to display field if no path\n const displayValue = get(item, this.displayField());\n return displayValue ? [String(displayValue)] : [];\n }\n\n protected hasParent(item: any): boolean {\n const path = this.getItemPath(item);\n return path.length > 1;\n }\n\n protected getItemText(item: any): string {\n const path = this.getItemPath(item);\n if (path.length === 0) {\n return '';\n }\n // Return the last item in the path (the actual node)\n return path[path.length - 1];\n }\n\n protected joinPath(path: string[]): string {\n return path.join(' > ');\n }\n\n protected getItemId(item: any): string {\n if (!item) {\n return '';\n }\n return String(get(item, this.valueField()) ?? '');\n }\n\n protected getBreadcrumbPath(item: any): string {\n const path = this.getItemPath(item);\n if (path.length === 0) {\n return '';\n }\n return this.joinPath(path);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async resolveItemsWithPaths(items: any[]): Promise<any[]> {\n const entityKey = this.entity();\n const valueField = this.valueField();\n const textField = this.displayField();\n const parentKey =\n this.entityDef()?.parentKey ?? (entityKey?.endsWith('Category') ? 'parentId' : undefined);\n\n // When record has categories: [{id, parentId, title}] from middleware, build path from chain\n const hasFullChain = items.some(\n (item) =>\n item &&\n typeof item === 'object' &&\n get(item, 'parentId') != null &&\n get(item, valueField) != null,\n );\n if (hasFullChain && items.length > 0) {\n return items\n .filter((item) => item != null)\n .map((item) => this.buildItemWithPathFromChain(item, items, valueField, textField, parentKey ?? 'parentId'));\n }\n\n const needsResolve = items.filter((item) => {\n if (isNil(item)) return false;\n if (typeof item !== 'object') return true;\n const idVal = get(item, valueField);\n const hasPath = item.path && Array.isArray(item.path) && item.path.length > 0;\n return !hasPath && idVal != null && idVal !== '';\n });\n\n const idsToResolve = needsResolve.map((item) =>\n typeof item === 'object' ? String(get(item, valueField)) : String(item),\n );\n\n let resolvedMap = new Map<string, { id: string; title: string; path: string[] }>();\n if (idsToResolve.length > 0 && entityKey) {\n resolvedMap = await this.categoryBatchResolver.resolve(\n entityKey,\n idsToResolve,\n valueField,\n textField,\n parentKey,\n );\n }\n\n return Promise.all(items.map((item) => this.extractItemWithPath(item, resolvedMap)));\n }\n\n /**\n * Build path from categories array when record has full chain (id, parentId, title).\n * Used when middleware enriches categories on create/update.\n */\n private buildItemWithPathFromChain(\n item: any,\n allItems: any[],\n valueField: string,\n textField: string,\n parentKey: string,\n ): any {\n const map = new Map<string, any>();\n for (const c of allItems) {\n const id = get(c, valueField);\n if (id != null) map.set(String(id), c);\n }\n const path: string[] = [];\n let current: any = item;\n const visited = new Set<string>();\n while (current) {\n const id = String(get(current, valueField) ?? '');\n if (!id || visited.has(id)) break;\n visited.add(id);\n const title = String(get(current, textField) ?? '');\n if (title) path.unshift(title);\n const parentId = get(current, parentKey);\n if (parentId == null || parentId === '' || String(parentId) === id) break;\n current = map.get(String(parentId));\n }\n const pathArray = path.length > 0 ? path : get(item, textField) ? [String(get(item, textField))] : [];\n return {\n [valueField]: get(item, valueField),\n [textField]: get(item, textField),\n path: pathArray,\n };\n }\n\n private async extractItemWithPath(\n item: any,\n resolvedMap?: Map<string, { id: string; title: string; path: string[] }>,\n ): Promise<any> {\n if (isNil(item)) return null;\n\n const valueField = this.valueField();\n const textField = this.displayField();\n\n let itemObj: any;\n if (typeof item === 'object') {\n itemObj = item;\n const idVal = get(itemObj, valueField);\n const hasPath = itemObj.path && Array.isArray(itemObj.path) && itemObj.path.length > 0;\n if (!hasPath && resolvedMap && idVal != null && idVal !== '') {\n const r = resolvedMap.get(String(idVal));\n if (r) {\n itemObj = {\n [valueField]: r.id,\n [textField]: r.title,\n path: r.path,\n };\n }\n }\n } else {\n if (resolvedMap) {\n const r = resolvedMap.get(String(item));\n if (r) {\n itemObj = { [valueField]: r.id, [textField]: r.title, path: r.path };\n } else {\n itemObj = { [valueField]: item, [textField]: item, path: [String(item)] };\n }\n } else {\n itemObj = { [valueField]: item, [textField]: item, path: [String(item)] };\n }\n }\n\n if (itemObj.path && Array.isArray(itemObj.path) && itemObj.path.length > 0) {\n return itemObj;\n }\n\n return await this.calculateItemPath(itemObj);\n }\n\n /**\n * Calculate the full path from root to the item.\n * Returns an array of strings like [\"C\", \"B\"] for item B under parent C.\n */\n private async calculateItemPath(item: any): Promise<any> {\n if (!item || !this.entityDef()) {\n return item;\n }\n\n // If item already has a path array, return it as is\n if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n return item;\n }\n\n const parentKey = this.entityDef()?.parentKey;\n if (!parentKey) {\n // No parent key means flat structure, return item with just its title as path array\n const title = get(item, this.displayField()) ?? '';\n return { ...item, path: title ? [title] : [] };\n }\n\n const valueField = this.valueField();\n const textField = this.displayField();\n const byKey = this.entityDef()?.queries?.byKey?.execute as Function;\n\n if (!byKey) {\n return item;\n }\n\n const path: string[] = [];\n let currentItem: any = item;\n const visitedIds = new Set<string>(); // Prevent infinite loops\n\n // Build path by traversing up the parent chain\n while (currentItem) {\n const currentId = String(get(currentItem, valueField) ?? '');\n if (!currentId || visitedIds.has(currentId)) {\n break; // Prevent infinite loops\n }\n visitedIds.add(currentId);\n\n const title = String(get(currentItem, textField) ?? '');\n if (title) {\n path.unshift(title); // Add to beginning to maintain hierarchy order\n }\n\n // Get parent ID from current item\n const parentId = get(currentItem, parentKey);\n if (parentId == null || parentId === '' || parentId === 'all' || String(parentId) === currentId) {\n break; // Reached root or invalid parent\n }\n\n try {\n // Fetch parent item\n const parentItem = await byKey(parentId);\n if (!parentItem) {\n break; // Parent not found, stop traversal\n }\n currentItem = parentItem;\n } catch (error) {\n console.error('Error fetching parent item:', error);\n break;\n }\n }\n\n // Return item with path array, or just the item title if no path\n const pathArray = path.length > 0 ? path : get(item, textField) ? [String(get(item, textField))] : [];\n return { ...item, path: pathArray };\n }\n\n //#endregion\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\n\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPMultiLanguageStringResolverService, AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\n\n@Component({\n selector: 'axp-truncated-breadcrumb',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'ax-block' },\n template: `\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-flex-wrap\" #container [title]=\"fullPath()\">\n @if (sections().length === 0) {\n <span class=\"ax-text-muted\">---</span>\n } @else {\n @if (isExpanded() && canToggle()) {\n @for (section of sections(); track $index; let isLast = $last) {\n <span class=\"ax-text-sm\">{{ section | axpResolveMultiLanguageString }}</span>\n @if (!isLast) {\n <ax-icon [class]=\"separatorIcon()\" class=\"rtl:ax-rotate-180 ax-text-muted ax-text-xs\"></ax-icon>\n }\n }\n <span\n class=\"ax-text-sm ax-text-primary ax-cursor-pointer hover:ax-opacity-75 ax-ml-1\"\n (click)=\"handleCollapseClick($event)\"\n title=\"Collapse\"\n >\n <ax-icon [class]=\"eyeIcon()\" class=\"ax-text-primary\"></ax-icon>\n </span>\n } @else {\n @for (section of displayedSections(); track $index; let isLast = $last) {\n <span class=\"ax-text-sm\">{{ section.text }}</span>\n\n @if (!isLast || (isLast && hasHiddenSections())) {\n <ax-icon\n [class]=\"separatorIcon()\"\n [class.ax-cursor-pointer]=\"canToggle()\"\n class=\"rtl:ax-rotate-180 ax-text-muted ax-text-xs ax-transition-opacity\"\n (click)=\"handleSeparatorClick($event)\"\n ></ax-icon>\n }\n }\n\n @if (hasHiddenSections()) {\n <span\n class=\"ax-text-sm ax-text-primary ax-cursor-pointer hover:ax-opacity-75\"\n (click)=\"handleEllipsisClick($event)\"\n >\n <ax-icon [class]=\"ellipsisIcon()\" class=\"ax-text-primary\"></ax-icon>\n </span>\n\n <ax-icon [class]=\"separatorIcon()\" class=\"rtl:ax-rotate-180 ax-text-muted ax-text-xs\"></ax-icon>\n <span class=\"ax-text-sm\">{{ lastSection().text }}</span>\n }\n }\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXDecoratorModule, AXPResolveMultiLanguageStringPipe],\n})\nexport class AXPTruncatedBreadcrumbComponent implements OnDestroy {\n private readonly mlsResolver = inject(AXPMultiLanguageStringResolverService);\n\n /** Plain string or locale map per segment; truncation uses resolved text (see {@link resolvedSectionTexts}). */\n sections = input<ReadonlyArray<AXPMultiLanguageString | null | undefined>>([]);\n characterLimit = input<number | 'auto'>(20);\n sectionLimit = input<number | 'auto'>(2);\n separatorIcon = input<string>('fa-solid fa-chevron-right');\n ellipsisIcon = input<string>('fa-solid fa-ellipsis');\n eyeIcon = input<string>('fa-solid fa-eye');\n\n protected container = viewChild<ElementRef<HTMLDivElement>>('container');\n protected isExpanded = signal(false);\n private containerWidth = signal<number>(0);\n private resizeObserver: ResizeObserver | null = null;\n\n //#region ---- Logic ----\n\n /** Resolved display strings for length / ellipsis (same rules as the pipe). */\n protected resolvedSectionTexts = computed(() =>\n this.sections().map((s) => this.mlsResolver.resolve(s as AXPMultiLanguageString)),\n );\n\n protected effectiveCharacterLimit = computed(() => {\n const limit = this.characterLimit();\n if (limit !== 'auto') return limit;\n \n // When auto, check if sectionLimit is also auto - if so, take as much space as needed\n if (this.sectionLimit() === 'auto') {\n const sections = this.resolvedSectionTexts();\n // Return the maximum length of any section to prevent truncation\n return sections.length > 0 ? Math.max(...sections.map(s => s.length)) : Number.MAX_SAFE_INTEGER;\n }\n \n // If only characterLimit is auto, calculate based on container width\n const width = this.containerWidth();\n return width === 0 ? 20 : Math.max(20, Math.floor((width - 100) / 10));\n });\n\n protected effectiveSectionLimit = computed(() => {\n const limit = this.sectionLimit();\n if (limit !== 'auto') return limit;\n\n // When auto, check if characterLimit is also auto - if so, take as much space as needed\n if (this.characterLimit() === 'auto') {\n // Return all sections to prevent hiding any\n return this.resolvedSectionTexts().length;\n }\n\n // If only sectionLimit is auto, calculate based on container width\n const width = this.containerWidth();\n const sections = this.resolvedSectionTexts();\n if (width === 0 || sections.length <= 1) return sections.length;\n\n // Estimate: Roughly 100px per section + separator\n const estimatedSectionWidth = 100;\n const availableWidth = width - 40; // Small buffer\n const fitCount = Math.floor(availableWidth / estimatedSectionWidth);\n\n return Math.max(1, Math.min(fitCount, sections.length));\n });\n\n protected hasTruncatedText = computed(() => {\n const limit = this.effectiveCharacterLimit();\n return this.resolvedSectionTexts().some((s) => s.length > limit);\n });\n\n protected hasHiddenSections = computed(() => {\n return this.resolvedSectionTexts().length > this.effectiveSectionLimit() + 1;\n });\n\n /**\n * canToggle: If this is false, NO Eye Icon and NO Click events will exist.\n */\n protected canToggle = computed(() => {\n return this.hasHiddenSections() || this.hasTruncatedText();\n });\n\n protected allSectionsTruncated = computed(() => {\n const limit = this.effectiveCharacterLimit();\n return this.resolvedSectionTexts().map((s) => ({\n text: s.length > limit ? s.substring(0, limit) + '...' : s,\n original: s,\n }));\n });\n\n protected displayedSections = computed(() => {\n const limit = this.effectiveSectionLimit();\n const truncated = this.allSectionsTruncated();\n return this.hasHiddenSections() ? truncated.slice(0, limit) : truncated;\n });\n\n protected lastSection = computed(() => {\n const truncated = this.allSectionsTruncated();\n return truncated[truncated.length - 1] || { text: '' };\n });\n\n protected fullPath = computed(() => {\n const sections = this.resolvedSectionTexts();\n return sections.length > 0 ? sections.join(' > ') : '';\n });\n\n //#endregion\n\n constructor() {\n afterNextRender(() => {\n this.initializeResizeObserver();\n });\n\n // Automatically collapse if the window grows and everything fits\n effect(() => {\n if (this.isExpanded() && !this.canToggle()) {\n untracked(() => this.isExpanded.set(false));\n }\n });\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n protected handleSeparatorClick(event: Event): void {\n if (this.canToggle()) {\n event.stopPropagation();\n this.isExpanded.set(true);\n }\n }\n\n protected handleEllipsisClick(event: Event): void {\n event.stopPropagation();\n this.isExpanded.set(true);\n }\n\n protected handleCollapseClick(event: Event): void {\n event.stopPropagation();\n this.isExpanded.set(false);\n }\n\n private initializeResizeObserver(): void {\n const el = this.container()?.nativeElement;\n if (!el) return;\n this.containerWidth.set(el.offsetWidth);\n this.resizeObserver = new ResizeObserver((entries) => {\n this.containerWidth.set(entries[0].contentRect.width);\n });\n this.resizeObserver.observe(el);\n }\n}\n","import { AXClickEvent, AXFocusEvent, AXHtmlEvent, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPMultiLanguageString, extractValue, resolveMultiLanguageString, setSmart } from '@acorex/platform/core';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { castArray, get, isEmpty, isNil, set } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPEntityCategoryTreeSelectorComponent } from './entity-category-tree-selector.component';\nimport { AXPEntityCategoryWidgetOptions } from './entity-category-widget.types';\nimport { AXPTruncatedBreadcrumbComponent } from './truncated-breadcrumb.component';\n\n@Component({\n selector: 'axp-entity-category-widget-edit',\n template: `\n <ax-tag-box\n #tagBoxComponent\n [tagTemplate]=\"tagTemplate\"\n [ngModel]=\"selectedItems()\"\n [textField]=\"displayField()\"\n [valueField]=\"valueField()\"\n (onValueChanged)=\"handleValueChange($event)\"\n [placeholder]=\"selectedItems().length ? '' : searchPlaceholderText()\"\n [addOnEnter]=\"false\"\n [addOnComma]=\"false\"\n [readonly]=\"true\"\n [disabled]=\"disabled()\"\n (onKeyUp)=\"handleKeyUp($event)\"\n (onBlur)=\"handleOnBlur($event)\"\n >\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (selectedItems().length > 1 || allowClear()) {\n <ax-clear-button (click)=\"handleClearClick()\"></ax-clear-button>\n }\n\n <ax-suffix>\n <ax-button color=\"ghost\" look=\"blank\" [disabled]=\"isLoading() || disabled()\" (onClick)=\"handleAddClick($event)\">\n @if (isLoading()) {\n <ax-loading></ax-loading>\n } @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n </ax-tag-box>\n <ng-template #tagTemplate let-item let-index=\"index\">\n <div class=\"ax-inline-flex ax-items-center ax-gap-1.5 ax-rounded-md ax-px-3 ax-py-1 ax-text-sm ax-surface\">\n <axp-truncated-breadcrumb\n [attr.data-color]=\"item.color\"\n [sections]=\"getItemPath(item)\"\n [characterLimit]=\"characterLimit()\"\n [sectionLimit]=\"sectionLimit()\"\n ></axp-truncated-breadcrumb>\n <button type=\"button\" (click)=\"handleRemoveItem($event, index)\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXValidationModule,\n AXFormModule,\n AXTagBoxModule,\n AXTranslationModule,\n AXPTruncatedBreadcrumbComponent\n],\n})\nexport class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent<any, AXPEntityCategoryWidgetOptions> {\n //#region ---- Services & Dependencies ----\n\n protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n protected readonly popupService = inject(AXPopupService);\n private readonly translateService = inject(AXTranslationService);\n protected readonly cdr = inject(ChangeDetectorRef);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected entity = computed<string>(() => (this.options()['entity'] as string) ?? '');\n protected multiple = computed<boolean>(() => (this.options()['multiple'] ?? false) as boolean);\n protected disabled = computed<boolean>(() => (this.options()['disabled'] ?? false) as boolean);\n protected textField = computed<string>(() => (this.options()['textField'] as string) ?? 'title');\n protected valueField = computed<string>(() => (this.options()['valueField'] as string) ?? 'id');\n protected expose = computed<Array<{ source: string; target: string }> | undefined>(\n () => this.options()['expose'] as Array<{ source: string; target: string }> | undefined,\n );\n protected allowClear = computed<boolean>(() => (this.options()['allowClear'] ?? false) as boolean);\n protected characterLimit = computed<number | 'auto'>(\n () => (this.options()['characterLimit'] as number | 'auto') ?? 'auto',\n );\n protected sectionLimit = computed<number | 'auto'>(\n () => (this.options()['sectionLimit'] as number | 'auto') ?? 'auto',\n );\n\n protected defaultTextField = computed<string>(() => {\n const textField =\n this.entityDef()?.formats.lookup ?? this.entityDef()?.properties.find((c) => c.name != 'id')?.name ?? 'title';\n return textField;\n });\n\n protected displayField = computed<string>(() => {\n if (this.textField()) {\n return this.textField();\n }\n return this.defaultTextField();\n });\n\n protected searchPlaceholderText = signal<string>('');\n\n //#endregion\n\n //#region ---- Component State ----\n\n protected selectedItems = signal<any[]>([]);\n protected isLoading = signal(false);\n protected isOpen = signal(false);\n protected tagBox = viewChild<AXTagBoxComponent>('tagBoxComponent');\n protected searchTerm = signal<string | null>(null);\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private entityDef = signal<AXPEntity | null>(null);\n\n /**\n * Flag to prevent the value effect from running during internal updates.\n * This prevents circular dependency when setItems() calls setValue().\n */\n private isInternalUpdate = false;\n\n //#endregion\n\n //#region ---- Effects ----\n\n #efEntity = effect(async () => {\n const entityKey = this.entity();\n if (!entityKey) return;\n const [module, entity] = entityKey.split('.');\n this.entityDef.set(await this.entityResolver.resolve(module, entity));\n });\n\n #efValue = effect(() => {\n const value = this.getValue();\n const entity = this.entityDef();\n\n // Wait for entity definition to be loaded before processing value\n if (!entity) {\n return;\n }\n\n // Skip if this is an internal update (e.g., from setItems -> setValue)\n // This prevents circular dependency\n if (this.isInternalUpdate) {\n return;\n }\n\n if (value) {\n this.findByValue();\n } else {\n this.clear();\n }\n });\n\n #efSearchPlaceholder = effect(async () => {\n const entity = this.entityDef();\n if (!entity) {\n this.searchPlaceholderText.set('');\n return;\n }\n\n const displayFieldName = this.displayField();\n const displayProperty = entity.properties.find((property) => property.name === displayFieldName);\n if (displayProperty) {\n const translated = await this.translateService.translateAsync(displayProperty.title || displayProperty.name);\n this.searchPlaceholderText.set(translated ? `Search in ${translated}...` : '');\n } else {\n const fallback = await this.translateService.translateAsync('@general:actions.search.title');\n this.searchPlaceholderText.set(fallback ? `${fallback}...` : '');\n }\n });\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n protected handleAddClick(e: AXClickEvent): void {\n this.showTreeSelector();\n }\n\n protected handleValueChange(e: AXValueChangedEvent): void {\n if (e.isUserInteraction) {\n if (isNil(e.value) || isEmpty(e.value)) {\n this.clear();\n } else {\n const items = Array.isArray(e.value) ? e.value : [e.value];\n this.setItems(items);\n }\n }\n }\n\n protected handleOnBlur(e: AXFocusEvent): void {\n setTimeout(() => {\n if (!this.isOpen()) {\n this.clearInput();\n }\n }, 100);\n }\n\n protected async handleKeyUp(e: AXHtmlEvent): Promise<void> {\n const keyEvent = e.nativeEvent as KeyboardEvent;\n const value = this.tagBox()?.inputValue() ?? '';\n this.searchTerm.set(value);\n if ((keyEvent.code == 'Enter' || keyEvent.code == 'NumpadEnter') && value) {\n this.isLoading.set(true);\n // For category widget, always open selector on Enter\n this.showTreeSelector();\n this.isLoading.set(false);\n }\n if (keyEvent.code == 'ArrowDown') {\n this.showTreeSelector();\n }\n }\n\n protected handleClearClick(): void {\n this.clear();\n }\n\n protected async handleRemoveItem(event: Event, index: number): Promise<void> {\n event.stopPropagation();\n if (this.disabled()) {\n return;\n }\n\n const currentItems = this.selectedItems();\n if (index < 0 || index >= currentItems.length) {\n return;\n }\n\n const filteredItems = currentItems.filter((_, i) => i !== index);\n\n if (filteredItems.length === 0) {\n this.clear();\n } else {\n await this.setItems(filteredItems);\n }\n }\n\n public clearInput(): void {\n this.tagBox()?.inputValue.set('');\n this.searchTerm.set('');\n }\n\n private async showTreeSelector(): Promise<void> {\n this.isOpen.set(true);\n\n const currentValue = this.getValue();\n const selectedIds = currentValue\n ? (this.multiple() ? castArray(currentValue) : [currentValue])\n .map((v) => String(extractValue(v, this.valueField())))\n .filter((id) => id && id !== 'all')\n : [];\n\n // Get current entity ID from context (if editing an entity)\n const currentEntityId = this.contextService.getValue('id');\n const excludedNodeId = currentEntityId ? String(currentEntityId) : undefined;\n\n try {\n const result = await this.popupService.open(AXPEntityCategoryTreeSelectorComponent, {\n title: `${this.translateService.translateSync('@general:widgets.lookup.search.placeholder')} ${this.translateService.translateSync(\n this.entityDef()?.formats.plural ?? '',\n )}`,\n size: 'md',\n data: {\n entityKey: signal(this.entity()),\n textField: signal(this.textField()),\n valueField: signal(this.valueField()),\n allowMultiple: signal(this.multiple()),\n selectedValues: signal(selectedIds),\n searchPlaceholder: signal(this.searchPlaceholderText()),\n excludedNodeId: signal(excludedNodeId),\n selectedValuesInput: signal(selectedIds),\n },\n });\n\n if (result?.data?.selected && Array.isArray(result.data.selected)) {\n // Use the popup result directly as the source of truth\n // This ensures that deselected items are properly removed\n const newItems = result.data.selected;\n\n if (newItems.length === 0) {\n // All items were deselected\n this.clear();\n } else {\n // Set the new selection (replaces existing selection entirely)\n await this.setItems(newItems);\n }\n } else if (result?.data?.selected === undefined && result?.data !== undefined) {\n // User cancelled or closed popup without confirming - don't change anything\n // This case is handled by the catch block or no result.data.selected\n }\n } catch (error) {\n console.error('Error opening category tree selector:', error);\n } finally {\n this.isOpen.set(false);\n this.tagBox()?.focus();\n }\n }\n\n public clear(): void {\n // Set flag to prevent circular dependency with the value effect\n this.isInternalUpdate = true;\n\n try {\n this.setValue(null);\n this.clearInput();\n this.selectedItems.set([]);\n this.cdr.markForCheck();\n } finally {\n // Reset flag after a short delay to ensure effect has time to skip\n setTimeout(() => {\n this.isInternalUpdate = false;\n }, 0);\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async findByValue(): Promise<void> {\n this.isLoading.set(true);\n const rawValue = this.getValue();\n\n // If no value, clear and return\n if (!rawValue) {\n this.setItems([]);\n this.isLoading.set(false);\n return;\n }\n\n const values = castArray(rawValue);\n const byKey = this.entityDef()?.queries?.byKey?.execute as Function;\n\n if (!byKey) {\n this.setItems([]);\n this.isLoading.set(false);\n return;\n }\n\n if (values.length === 0) {\n this.setItems([]);\n this.isLoading.set(false);\n return;\n }\n\n try {\n if (this.multiple()) {\n // Filter out null/undefined/empty values\n const validValues = values.filter((v) => v != null && v !== '' && v !== 'all');\n if (validValues.length === 0) {\n this.setItems([]);\n this.isLoading.set(false);\n return;\n }\n\n const items = await Promise.all(\n validValues.map((value) => {\n const id = extractValue(value, this.valueField());\n if (!id) return null;\n return byKey(id);\n }),\n );\n\n // Filter out null results\n const validItems = items.filter((item) => item != null);\n\n // Calculate paths for items loaded from value\n const itemsWithPaths = await Promise.all(validItems.map((item) => this.calculateItemPath(item)));\n this.setItems(itemsWithPaths);\n } else {\n const id = extractValue(values[0], this.valueField());\n if (!id || id === 'all') {\n this.setItems([]);\n this.isLoading.set(false);\n return;\n }\n\n const item = await byKey(id);\n if (!item) {\n this.setItems([]);\n this.isLoading.set(false);\n return;\n }\n\n // Calculate path for item loaded from value\n const itemWithPath = await this.calculateItemPath(item);\n this.setItems(itemWithPath);\n }\n } catch (error) {\n console.error('Error loading category items from value:', error);\n this.setItems([]);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private async setItems(items: any[]): Promise<void> {\n // Set flag to prevent circular dependency with the value effect\n this.isInternalUpdate = true;\n\n try {\n if (!items || items.length == 0) {\n this.selectedItems.set([]);\n this.setValue(null);\n this.cdr.markForCheck();\n return;\n }\n\n items = castArray(items);\n this.clearInput();\n\n // Ensure all items have paths\n const itemsWithPaths = await Promise.all(\n items.map(async (item) => {\n // If item already has a path array, return it as is\n if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n return item;\n }\n // Otherwise, calculate the path\n return await this.calculateItemPath(item);\n }),\n );\n\n this.selectedItems.set(itemsWithPaths);\n\n const keys = itemsWithPaths.map((item) => get(item, this.valueField()));\n\n // Extract data from valueField and set context by expose path\n if (this.expose()) {\n const exposeValue = castArray(this.expose());\n const itemToExpose: any = {};\n\n exposeValue.forEach((i) => {\n if (typeof i == 'string') {\n const values = itemsWithPaths.map((item) => set({}, i as string, get(item, i)));\n setSmart(itemToExpose, i, this.singleOrMultiple(values));\n } else {\n // Extract data from item by source path and set context by target path\n const values = this.multiple()\n ? itemsWithPaths.map((item) => set({}, i.source, get(item, i.source)))\n : itemsWithPaths.map((item) => get(item, i.source));\n setSmart(itemToExpose, i.target, this.singleOrMultiple(values));\n }\n });\n this.contextService.patch(itemToExpose, true);\n // Fire triggers\n this.setValue(this.singleOrMultiple(keys));\n } else {\n this.setValue(this.singleOrMultiple(keys));\n }\n\n // Trigger change detection\n this.cdr.markForCheck();\n } finally {\n // Reset flag after a short delay to ensure effect has time to skip\n setTimeout(() => {\n this.isInternalUpdate = false;\n }, 0);\n }\n }\n\n private singleOrMultiple(values: any[]): any | any[] {\n return this.multiple() ? values : values[0];\n }\n\n protected getItemLabel(item: any): string {\n if (!item) {\n return '';\n }\n // If path is available as array, join it with customizable separator\n if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n return this.joinPath(item.path);\n }\n // Fall back to display field if no path\n return this.joinPath([get(item, this.displayField())].filter((x) => x != null && x !== ''));\n }\n\n /**\n * Get item path as array for breadcrumb component (raw MLS or string per segment).\n */\n protected getItemPath(item: any): AXPMultiLanguageString[] {\n if (!item) {\n return [];\n }\n // If path is available as array, return it\n if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n return item.path;\n }\n // Fall back to display field if no path\n const displayValue = get(item, this.displayField());\n return displayValue != null && displayValue !== '' ? [displayValue as AXPMultiLanguageString] : [];\n }\n\n /**\n * Join path array with separator.\n * Override this method to customize the separator (e.g., \" > \", \" -> \", \" / \")\n */\n protected joinPath(path: unknown[]): string {\n const lang = this.translateService.getActiveLang();\n return path\n .map((p) => resolveMultiLanguageString(p as AXPMultiLanguageString, lang))\n .filter((s) => s.length > 0)\n .join(' > ');\n }\n\n protected getItemId(item: any): string {\n if (!item) {\n return '';\n }\n return String(get(item, this.valueField()) ?? '');\n }\n\n /**\n * Calculate the full path from root to the item.\n * Returns an array of strings like [\"C\", \"B\"] for item B under parent C.\n */\n private async calculateItemPath(item: any): Promise<any> {\n if (!item || !this.entityDef()) {\n return item;\n }\n\n // If item already has a path array, return it as is\n if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n return item;\n }\n\n const parentKey = this.entityDef()?.parentKey;\n if (!parentKey) {\n // No parent key means flat structure, return item with just its title as path array\n const title = get(item, this.displayField());\n return { ...item, path: title != null && title !== '' ? [title] : [] };\n }\n\n const valueField = this.valueField();\n const textField = this.displayField();\n const byKey = this.entityDef()?.queries?.byKey?.execute as Function;\n\n if (!byKey) {\n return item;\n }\n\n const path: AXPMultiLanguageString[] = [];\n let currentItem: any = item;\n const visitedIds = new Set<string>(); // Prevent infinite loops\n\n // Build path by traversing up the parent chain\n while (currentItem) {\n const currentId = String(get(currentItem, valueField) ?? '');\n if (!currentId || visitedIds.has(currentId)) {\n break; // Prevent infinite loops\n }\n visitedIds.add(currentId);\n\n const title = get(currentItem, textField);\n if (title != null && title !== '') {\n path.unshift(title as AXPMultiLanguageString); // Add to beginning to maintain hierarchy order\n }\n\n // Get parent ID from current item\n const parentId = get(currentItem, parentKey);\n if (!parentId || parentId === 'all' || parentId === currentId) {\n break; // Reached root or invalid parent\n }\n\n try {\n // Fetch parent item\n const parentItem = await byKey(parentId);\n if (!parentItem) {\n break; // Parent not found, stop traversal\n }\n currentItem = parentItem;\n } catch (error) {\n console.error('Error fetching parent item:', error);\n break;\n }\n }\n\n // Return item with path array, or just the item title if no path\n const rawLeafTitle = get(item, textField);\n const pathArray = path.length > 0 ? path : rawLeafTitle != null && rawLeafTitle !== '' ? [rawLeafTitle as AXPMultiLanguageString] : [];\n return { ...item, path: pathArray };\n }\n\n //#endregion\n}\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPMultiLanguageString, AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { castArray, isNil } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\n@Component({\n selector: 'axp-entity-category-widget-view',\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else {\n @if (displayItems().length > 1) {\n @for (item of displayItems(); track item.id) {\n <ax-badge\n class=\"ax-p-0.5 {{ badgeClass() }}\"\n [text]=\"item.titleRaw | axpResolveMultiLanguageString\"\n ></ax-badge>\n }\n } @else if (displayItems().length == 1) {\n <ax-badge\n class=\"ax-p-0.5 {{ badgeClass() }}\"\n [text]=\"displayItems()[0].titleRaw | axpResolveMultiLanguageString\"\n ></ax-badge>\n } @else {\n <span class=\"ax-text-muted\">---</span>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXLoadingModule, AXBadgeModule, AXPResolveMultiLanguageStringPipe],\n})\nexport class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetComponent<any> {\n //#region ---- Services & Dependencies ----\n\n protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected entity = computed<string>(() => (this.options()['entity'] as string) ?? '');\n protected multiple = computed<boolean>(() => (this.options()['multiple'] ?? false) as boolean);\n protected valueField = computed<string>(() => (this.options()['valueField'] as string) ?? 'id');\n protected textField = computed<string>(() => (this.options()['textField'] as string) ?? 'title');\n protected badgeClass = computed<string>(() => (this.options()['badgeClass'] as string) ?? 'ax-accent1');\n\n protected displayField = computed<string>(() => {\n return (\n this.textField() ??\n this.entityDef()?.formats.lookup ??\n this.entityDef()?.properties.find((c) => c.name != 'id')?.name ??\n 'title'\n );\n });\n\n //#endregion\n\n //#region ---- Component State ----\n\n protected loading = signal(false);\n private entityDef = signal<AXPEntity | null>(null);\n protected displayItems = signal<Array<{ id: string; titleRaw: AXPMultiLanguageString | null | undefined }>>([]);\n\n //#endregion\n\n //#region ---- Effects ----\n\n private efEntity = effect(async () => {\n const entityKey = this.entity();\n if (!entityKey) {\n return;\n }\n\n const [module, entity] = entityKey.split('.');\n if (!module || !entity) {\n return;\n }\n\n this.entityDef.set(await this.entityResolver.resolve(module, entity));\n });\n\n private efDisplay = effect(async () => {\n const value = this.getValue();\n if (isNil(value)) {\n this.displayItems.set([]);\n } else {\n const items = castArray(value).map(async (item: any) => await this.extractItem(item));\n this.displayItems.set(await Promise.all(items));\n }\n });\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async extractItem(item: any): Promise<{ id: string; titleRaw: AXPMultiLanguageString | null | undefined }> {\n if (typeof item == 'object') {\n return {\n id: item[this.valueField()],\n titleRaw: item[this.displayField()],\n };\n }\n\n const def = this.entityDef();\n const byKey = def?.queries?.byKey?.execute as Function;\n if (byKey) {\n this.loading.set(true);\n try {\n const fetchedItem = await byKey(item);\n return {\n id: fetchedItem[this.valueField()],\n titleRaw: fetchedItem[this.displayField()],\n };\n } finally {\n this.loading.set(false);\n }\n }\n\n return {\n id: String(item),\n titleRaw: String(item),\n };\n }\n\n //#endregion\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_ALLOW_CLEAR_PROPERTY,\n AXP_ALLOW_MULTIPLE_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n AXP_DATA_PROPERTY_GROUP,\n AXP_DISABLED_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\nexport const AXPEntityCategoryWidget: AXPWidgetConfig = {\n name: 'entity-category-editor',\n title: 'Entity Category',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n defaultFilterWidgetName: 'lookup-filter',\n type: 'editor',\n icon: 'fa-light fa-sitemap',\n properties: [\n AXP_DISABLED_PROPERTY,\n AXP_ALLOW_CLEAR_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'entity',\n title: 'Entity',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'entity',\n path: 'options.entity',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n AXP_ALLOW_MULTIPLE_PROPERTY,\n {\n name: 'textField',\n title: 'Text Field',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'textField',\n path: 'options.textField',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'valueField',\n title: 'Value Field',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'valueField',\n path: 'options.valueField',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'parentKey',\n title: 'Parent Key',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'parentKey',\n path: 'options.parentKey',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'expose',\n title: 'Expose',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'expose',\n path: 'options.expose',\n type: AXPWidgetsCatalog.select,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () =>\n import('./entity-category-widget-view.component').then((c) => c.AXPEntityCategoryWidgetViewComponent),\n },\n edit: {\n component: () =>\n import('./entity-category-widget-edit.component').then((c) => c.AXPEntityCategoryWidgetEditComponent),\n },\n column: {\n component: () =>\n import('./entity-category-widget-column.component').then((c) => c.AXPEntityCategoryWidgetColumnComponent),\n },\n designer: {\n component: () =>\n import('./entity-category-widget-edit.component').then((c) => c.AXPEntityCategoryWidgetEditComponent),\n },\n },\n};\n","import {\n AXPWidgetConfig,\n AXPWidgetGroupEnum,\n createBooleanProperty,\n} from '@acorex/platform/layout/widget-core';\nimport {\n AXP_BEHAVIOR_PROPERTY_GROUP,\n AXP_ALLOW_CLEAR_PROPERTY,\n AXP_ALLOW_MULTIPLE_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n AXP_DISABLED_PROPERTY,\n AXP_NAME_PROPERTY,\n AXP_PLACEHOLDER_PROPERTY,\n AXP_READONLY_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\nexport const AXPEntityDefinitionProviderWidget: AXPWidgetConfig = {\n name: 'entity-definition-provider-editor',\n title: 'Entity definition',\n description: 'Select a registered entity (module.name)',\n icon: 'fa-light fa-database',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n type: 'editor',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n AXP_DISABLED_PROPERTY,\n AXP_READONLY_PROPERTY,\n AXP_PLACEHOLDER_PROPERTY,\n AXP_ALLOW_CLEAR_PROPERTY,\n AXP_ALLOW_MULTIPLE_PROPERTY,\n createBooleanProperty({\n name: 'allowSearch',\n title: 'Allow search',\n path: 'options.allowSearch',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n }),\n ],\n components: {\n view: {\n component: () =>\n import('@acorex/platform/layout/widgets').then((m) => m.AXPProviderSelectWidgetViewComponent),\n },\n edit: {\n component: () =>\n import('./entity-definition-provider-widget-edit.component').then(\n (c) => c.AXPEntityDefinitionProviderWidgetEditComponent,\n ),\n },\n column: {\n component: () =>\n import('@acorex/platform/layout/widgets').then((m) => m.AXPProviderSelectWidgetColumnComponent),\n },\n designer: {\n component: () =>\n import('./entity-definition-provider-widget-edit.component').then(\n (c) => c.AXPEntityDefinitionProviderWidgetEditComponent,\n ),\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n entityDefinitionProvider: 'entity-definition-provider-editor';\n }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPProviderSelectWidgetEditBase } from '@acorex/platform/layout/widgets';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, signal, untracked } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { get } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\n@Component({\n selector: 'axp-entity-definition-provider-widget-edit',\n templateUrl: './entity-definition-provider-widget-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n AXSelectBoxModule,\n AXFormModule,\n AXDecoratorModule,\n AXSearchBoxModule,\n AXTranslationModule,\n AsyncPipe,\n ],\n})\nexport class AXPEntityDefinitionProviderWidgetEditComponent extends AXPProviderSelectWidgetEditBase {\n //#region ---- Services & Dependencies ----\n\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n\n /**\n * Last applied module filter (from context) to avoid redundant reloads.\n */\n private readonly lastModuleFilterKey = signal<string | null | undefined>(undefined);\n\n //#endregion\n\n //#region ---- React to sibling module field (context signal) ----\n\n /**\n * Reloads entity options when `filterModuleField` changes in form context (not only via `widget.refresh()`).\n */\n private readonly reloadWhenModuleContextChanges = effect(() => {\n this.options();\n const filterField = this.options()['filterModuleField'] as string | undefined;\n if (!filterField) {\n return;\n }\n this.contextService.data();\n this.parentPath();\n const data = this.contextService.data();\n const path = this.resolveSiblingContextPath(filterField);\n const modRaw = get(data as object, path) ?? get(data as object, filterField);\n const modStr =\n modRaw != null && String(modRaw).trim() !== '' ? String(modRaw).trim() : null;\n if (modStr === this.lastModuleFilterKey()) {\n return;\n }\n this.lastModuleFilterKey.set(modStr);\n untracked(() => {\n void this.reloadProviderData();\n });\n });\n\n //#endregion\n\n //#region ---- Data loading ----\n\n /**\n * Options:\n * - `filterModuleField`: sibling context field name (e.g. `entityListModule`); when set, only entities in that module are listed.\n * - `valueFormat`: `fullKey` (`module.name`, default) or `entityName` (short name only, for menus that store `entityListRef.entity`).\n */\n protected override async loadDataSourceRows(): Promise<Array<{ value: string; title: string }>> {\n const entities = this.entityRegistry.getAll();\n const filterModuleField = this.options()['filterModuleField'] as string | undefined;\n const valueFormat = (this.options()['valueFormat'] as 'fullKey' | 'entityName') ?? 'fullKey';\n\n let list = entities;\n if (filterModuleField) {\n const mod = this.readModuleFromContext(filterModuleField);\n list = mod ? entities.filter((e: AXPEntity) => e.module === mod) : [];\n }\n\n return list.map((e: AXPEntity) => ({\n value: valueFormat === 'entityName' ? e.name : `${e.module}.${e.name}`,\n title: `${e.title} (${e.module}.${e.name})`,\n }));\n }\n\n //#endregion\n\n //#region ---- Refresh (e.g. when sibling module field changes) ----\n\n override refresh(): void {\n void this.reloadProviderData().then(() => {\n super.refresh();\n });\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Reads sibling field from context store data (same shape as `lodash/get` paths).\n */\n private readModuleFromContext(field: string): string | null {\n const data = this.contextService.data();\n if (data == null || typeof data !== 'object') {\n return null;\n }\n const path = this.resolveSiblingContextPath(field);\n const modRaw = get(data as object, path) ?? get(data as object, field);\n return modRaw != null && String(modRaw).trim() !== '' ? String(modRaw).trim() : null;\n }\n\n /**\n * Resolves a sibling field path relative to the current widget's parent path.\n */\n private resolveSiblingContextPath(fieldName: string): string {\n const parent = this.parentPath();\n return parent ? `${parent}.${fieldName}` : fieldName;\n }\n\n //#endregion\n}\n","<ax-select-box\n [placeholder]=\"(placeholder() | translate | async) ?? ''\"\n [dataSource]=\"dataSource()\"\n [disabled]=\"disabled()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [textTemplate]=\"textTemplate()\"\n [multiple]=\"multiple()\"\n [readonly]=\"readonly()\"\n [ngModel]=\"filterMode() ? selectFilterDisplayValue() : getValue()\"\n (onValueChanged)=\"handleValueChange($event)\"\n>\n @if (allowSearch()) {\n <ax-search-box\n [autoSearch]=\"false\"\n [ngModel]=\"searchValue()\"\n (onValueChanged)=\"handleSearchValueChange($event)\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n }\n @if (hasClearButton() && !filterMode()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n</ax-select-box>\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPDataListWidgetColumn } from '@acorex/platform/layout/widgets';\n\n//#region ---- Column Mapping Helpers ----\n\n/**\n * Maps an entity property to a list widget column configuration.\n * Preserves readonly behavior and leverages the property's interface options when available.\n */\nexport function mapPropertyToWidgetColumn(property: any): AXPDataListWidgetColumn {\n return {\n name: property.name,\n title: property.title,\n visible: true,\n widget: property.schema?.interface\n ? {\n type: property.schema.interface.type || 'text-editor',\n path: property.name,\n options: {\n readonly: true,\n ...property.schema.interface.options,\n },\n }\n : {\n type: 'text-editor',\n path: property.name,\n options: { readonly: true },\n },\n };\n}\n\n/**\n * Maps an entity column metadata (and its related property) to a list widget column configuration.\n * Uses column.showAs when property is undefined (e.g. for related entity columns like person.firstName).\n */\nexport function mapEntityColumnToWidgetColumn(entity: AXPEntity, column: any): AXPDataListWidgetColumn {\n const property = entity.properties.find((p) => p.name === column.name);\n\n const widgetFromProperty = property?.schema?.interface\n ? {\n type: property.schema.interface.type || 'text-editor',\n path: column.options?.dataPath || column.name,\n options: {\n readonly: true,\n columnName: column.name,\n ...property.schema.interface.options,\n ...(property.schema.interface.children?.length && { children: property.schema.interface.children }),\n },\n }\n : null;\n\n const widgetFromShowAs =\n column.showAs && !widgetFromProperty\n ? {\n type: column.showAs.type || 'text-editor',\n path: column.options?.dataPath || column.name,\n options: {\n readonly: true,\n columnName: column.name,\n ...column.showAs.options,\n },\n }\n : null;\n\n const defaultWidget = {\n type: 'text-editor',\n path: column.options?.dataPath || column.name,\n options: { readonly: true, columnName: column.name },\n };\n\n const widget = widgetFromProperty ?? widgetFromShowAs ?? defaultWidget;\n\n return {\n name: column.name,\n title: column.title || property?.title || column.name,\n width: column.options?.width,\n visible: column.options?.visible !== false,\n widget,\n };\n}\n\n//#endregion\n\n//#region ---- Include/Exclude Utilities ----\n\n/**\n * Applies include and exclude filters to a named collection while preserving order.\n */\nexport function applyIncludeExclude<T extends { name: string }>(\n items: T[],\n include: string[] = [],\n exclude: string[] = [],\n): T[] {\n let result = items;\n if (include.length > 0) {\n result = result.filter((i) => include.includes(i.name));\n }\n if (exclude.length > 0) {\n result = result.filter((i) => !exclude.includes(i.name));\n }\n return result;\n}\n\n/**\n * Returns only visible (non-hidden) properties of an entity.\n */\nexport function getVisibleProperties(entity: AXPEntity): any[] {\n return entity.properties.filter((prop) => prop.schema?.visible !== false);\n}\n\n//#endregion\n","import { AXDataSource } from '@acorex/cdk/common';\nimport { AXRowCommandItemClickEvent } from '@acorex/components/data-table';\nimport { AXPEntity, AXPEntityCommandScope, AXPEntityTableColumn, getEntityInfo } from '@acorex/platform/common';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport {\n AXPDataListWidgetColumn,\n AXPDataListWidgetComponentOptions,\n AXPDataListWidgetRowCommand,\n AXP_ROW_EXPR_PREFIX,\n} from '@acorex/platform/layout/widgets';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPEntityCommandTriggerViewModel } from '../../entity.viewmodel';\nimport {\n applyIncludeExclude,\n getVisibleProperties,\n mapEntityColumnToWidgetColumn as mapEntityColumnToWidgetColumnHelper,\n mapPropertyToWidgetColumn,\n} from './entity-list.mappers';\n\n@Injectable()\nexport class AXPEntityListTableService {\n //#region ---- Services & Dependencies ----\n private readonly workflow = inject(AXPWorkflowService);\n private readonly commandService = inject(AXPCommandService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Convert Entity to List Widget Options\n */\n async convertEntityToListOptions(\n entity: AXPEntity,\n options: any,\n allActions: AXPEntityCommandTriggerViewModel[],\n ): Promise<AXPDataListWidgetComponentOptions> {\n const listOptions = {\n // 📊 Data Source\n dataSource: this.createDataSource(entity),\n\n // 📋 Columns from Properties\n columns: this.createColumnsFromProperties(entity, options),\n\n // 🎯 Row Commands from Actions\n primaryCommands: this.createRowCommands(allActions, 'primary'),\n secondaryCommands: this.createRowCommands(allActions, 'secondary'),\n\n // ⚙️ Table Features\n showIndex: entity.interfaces?.master?.list?.views?.[0]?.indexCol ?? false,\n allowSelection: this.hasSelectedScopeActions(entity),\n paging: true,\n showHeader: true,\n showFooter: false,\n\n // 🔗 Entity Configuration\n parentField: entity.parentKey,\n fetchDataMode: 'manual',\n\n minHeight: 250,\n\n // ⏳ Loading Configuration\n loading: {\n enabled: true,\n animation: true,\n },\n\n // 🎪 Events\n ...this.createDefaultEvents(entity, allActions),\n };\n console.log('listOptions', listOptions);\n\n return listOptions;\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Create DataSource for Entity\n */\n private createDataSource(entity: AXPEntity): AXDataSource {\n return new AXDataSource({\n byKey: (key) => {\n const func = entity.queries?.byKey?.execute as Function;\n return func(key);\n },\n load: (e) => {\n const func = entity.queries?.list?.execute as Function;\n if (!func || typeof func !== 'function') {\n throw new Error(`Entity ${entity.name} does not have a list query`);\n }\n return func(e);\n },\n pageSize: entity.interfaces?.master?.list?.views?.[0]?.pageSize || 10,\n key: 'id',\n });\n }\n\n /**\n * Convert Properties to Columns\n */\n private createColumnsFromProperties(entity: AXPEntity, options?: any): AXPDataListWidgetColumn[] {\n const excludeColumns = options?.excludeColumns || [];\n const includeColumns = options?.includeColumns || [];\n const relatedTableColumns = options?.relatedTableColumns as AXPEntityTableColumn[] | undefined;\n\n let baseColumns: AXPDataListWidgetColumn[];\n\n if (relatedTableColumns?.length) {\n baseColumns = relatedTableColumns.map((col) => this.mapEntityColumnToWidgetColumn(entity, col));\n } else if (entity.columns && entity.columns.length > 0) {\n baseColumns = entity.columns.map((col) => this.mapEntityColumnToWidgetColumn(entity, col));\n } else {\n baseColumns = getVisibleProperties(entity).map((prop) => mapPropertyToWidgetColumn(prop));\n }\n\n return applyIncludeExclude(baseColumns, includeColumns, excludeColumns);\n }\n\n /**\n * Map EntityTableColumn to ListWidgetColumn\n */\n private mapEntityColumnToWidgetColumn(entity: AXPEntity, column: any): AXPDataListWidgetColumn {\n return mapEntityColumnToWidgetColumnHelper(entity, column);\n }\n\n /**\n * Convert Entity Actions to Row Commands\n */\n private createRowCommands(\n actions: AXPEntityCommandTriggerViewModel[],\n priority: 'primary' | 'secondary',\n ): AXPDataListWidgetRowCommand[] {\n return actions\n .filter(\n (action) =>\n action.scope === AXPEntityCommandScope.Individual && // Only individual actions\n action.priority === priority,\n )\n .map((action) => ({\n name: action.name as any,\n text: action.title,\n icon: action.icon,\n color: action.color,\n look: 'outline',\n hidden: priority === 'secondary' ? this.wrapRowExpr(action.hidden) : action.hidden,\n disabled: priority === 'secondary' ? this.wrapRowExpr(action.disabled) : action.disabled,\n }));\n }\n\n /**\n * Wraps string values with AXP_ROW_EXPR_PREFIX so widget-renderer does not\n * evaluate them (it only treats {{ ... }} as expressions). Data-list will\n * unwrap and evaluate per row with row data. Only used for secondary commands.\n */\n private wrapRowExpr(value: boolean | string | undefined): boolean | string | undefined {\n if (value === undefined || value === null || typeof value !== 'string') {\n return value;\n }\n return `${AXP_ROW_EXPR_PREFIX}${value}`;\n }\n\n /**\n * Check if entity has Selected Scope Actions\n */\n private hasSelectedScopeActions(entity: AXPEntity): boolean {\n const actions = entity.interfaces?.master?.list?.actions || [];\n return actions.some((action) => action.scope === AXPEntityCommandScope.Selected);\n }\n\n private evaluateExpressions = async (options: { [key: string]: string }, data: any) => {\n if (!options) {\n return {} as any;\n }\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(data, path);\n },\n },\n };\n return await this.expressionEvaluator.evaluate(options, scope);\n };\n\n /**\n * Handle execution of a row command (shared by double-click and command handlers)\n */\n private async handleRowCommand(\n e: AXRowCommandItemClickEvent,\n selectedRows: any[] | undefined,\n entity: AXPEntity,\n allActions: AXPEntityCommandTriggerViewModel[],\n ): Promise<void> {\n const data = e.data;\n const commandName = e.name;\n const action = allActions.find((c) => {\n return (\n c.name == e.name &&\n ((selectedRows?.length\n ? c.scope == AXPEntityCommandScope.Selected\n : c.scope == AXPEntityCommandScope.Individual) ||\n c.scope == AXPEntityCommandScope.TypeLevel)\n );\n });\n const command = commandName.split('&')[0];\n\n const options = await this.evaluateExpressions(action?.options as any, data);\n if (this.commandService.exists(command)) {\n await this.commandService.execute(command, {\n __context__: {\n entity: getEntityInfo(entity).source,\n entityInfo: {\n name: entity.name,\n module: entity.module,\n title: entity.title,\n parentKey: entity.parentKey,\n source: `${entity.module}.${entity.name}`,\n },\n\n data: action?.scope == AXPEntityCommandScope.Selected ? selectedRows : data,\n\n options,\n metadata: action?.metadata,\n },\n options,\n metadata: action?.metadata,\n });\n } else {\n await this.workflow.execute(command, {\n entity: getEntityInfo(entity).source,\n entityInfo: {\n name: entity.name,\n module: entity.module,\n title: entity.title,\n parentKey: entity.parentKey,\n source: `${entity.module}.${entity.name}`,\n },\n data: action?.scope == AXPEntityCommandScope.Selected ? selectedRows : data,\n options: options,\n metadata: action?.metadata,\n });\n }\n }\n\n /**\n * Create default events\n */\n private createDefaultEvents(entity: AXPEntity, allActions: AXPEntityCommandTriggerViewModel[]) {\n return {\n onRowClick: (row: any) => {\n console.log('Entity List - Row clicked:', row);\n },\n onRowDoubleClick: (e: any) => {\n console.log('Entity List - Row double clicked:', e);\n const defaultAction = allActions.find((c) => {\n const commandName = c.name.split('&')[0];\n return ((c as any).default || commandName === 'open-entity') && !c.hidden;\n });\n\n if (!defaultAction) {\n return;\n }\n\n const d: AXRowCommandItemClickEvent = {\n component: e.component,\n name: defaultAction.name,\n data: e.data,\n };\n this.handleRowCommand(d, undefined, entity, allActions);\n },\n onSelectionChange: (selectedRows: any[]) => {\n console.log('Entity List - Selection changed:', selectedRows);\n },\n onRowCommand: async (e: AXRowCommandItemClickEvent, selectedRows: any[]) => {\n await this.handleRowCommand(e, selectedRows, entity, allActions);\n },\n };\n }\n\n //#endregion\n}\n","import { AXPEntity, AXPEntityTableColumn } from '@acorex/platform/common';\nimport { AXPColumnQuery, AXPFilterDefinition, AXPSortDefinition } from '@acorex/platform/core';\nimport { AXPWidgetRegistryService, AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { Injectable, inject } from '@angular/core';\nimport { omit } from 'lodash-es';\nimport { applyIncludeExclude, getVisibleProperties } from './entity-list.mappers';\n\nexport interface AXPEntityListToolbarConvertOptions {\n excludeColumns?: string[];\n includeColumns?: string[];\n /** Related list: evaluated `AXPEntityTableColumn[]` from `AXPRelatedEntity.columns` */\n relatedTableColumns?: AXPEntityTableColumn[];\n customFilterDefinitions?: Partial<AXPFilterDefinition>[];\n}\n\n@Injectable()\nexport class AXPEntityListToolbarService {\n //#region ---- Services & Dependencies ----\n\n private readonly widgetResolver = inject(AXPWidgetRegistryService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Convert Entity to Toolbar Options\n */\n async convertEntityToolbarOptions(\n entity: AXPEntity,\n options: AXPEntityListToolbarConvertOptions | undefined,\n ): Promise<{\n filterDefinitions: AXPFilterDefinition[];\n columnDefinitions: AXPColumnQuery[];\n sortDefinitions: AXPSortDefinition[];\n }> {\n const baseFilters = this.createFilterDefinitions(entity);\n const toolbarOptions = {\n filterDefinitions: this.mergeFilterDefinitions(baseFilters, options?.customFilterDefinitions),\n columnDefinitions: this.createColumnDefinitions(entity, options),\n sortDefinitions: this.createSortDefinitions(entity),\n canFilter: true,\n canColumns: true,\n canSort: true,\n };\n\n return toolbarOptions;\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Merges custom filter definitions into the entity-derived list by `field`.\n * Matching fields: custom properties are applied on top of the base definition.\n * Non-matching custom entries are appended.\n */\n private mergeFilterDefinitions(\n base: AXPFilterDefinition[],\n custom?: Partial<AXPFilterDefinition>[],\n ): AXPFilterDefinition[] {\n if (!custom?.length) {\n return base;\n }\n\n const result = [...base];\n const fieldToIndex = new Map<string, number>();\n result.forEach((def, index) => {\n const key = this.filterFieldKey(def.field);\n if (key !== undefined) {\n fieldToIndex.set(key, index);\n }\n });\n\n for (const customDef of custom) {\n const key = this.filterFieldKey(customDef.field);\n if (key !== undefined && fieldToIndex.has(key)) {\n const idx = fieldToIndex.get(key)!;\n result[idx] = this.mergeFilterDefinition(result[idx], customDef);\n } else {\n result.push(customDef as AXPFilterDefinition);\n }\n }\n\n return result;\n }\n\n private filterFieldKey(field: AXPFilterDefinition['field'] | undefined): string | undefined {\n if (field === undefined || field === null) {\n return undefined;\n }\n return String(field);\n }\n\n private mergeFilterDefinition(base: AXPFilterDefinition, custom: Partial<AXPFilterDefinition>): AXPFilterDefinition {\n const merged: AXPFilterDefinition = {\n ...base,\n ...custom,\n widget:\n base.widget && custom.widget\n ? {\n ...base.widget,\n ...custom.widget,\n options: {\n ...(base.widget.options ?? {}),\n ...(custom.widget.options ?? {}),\n },\n }\n : (custom.widget ?? base.widget),\n filterType:\n base.filterType && custom.filterType\n ? {\n ...base.filterType,\n ...custom.filterType,\n preload:\n base.filterType.preload || custom.filterType.preload\n ? {\n ...base.filterType.preload,\n ...custom.filterType.preload,\n }\n : undefined,\n }\n : (custom.filterType ?? base.filterType),\n };\n\n return merged;\n }\n\n /**\n * Create Filter Definitions for Toolbar\n */\n private createFilterDefinitions(entity: AXPEntity): AXPFilterDefinition[] {\n const props = entity.properties.filter(\n (c) => c.options?.filter?.advance?.enabled || c.options?.filter?.inline?.enabled,\n );\n return props.map((e) => {\n const widgetConfig = this.widgetResolver.resolve(\n e.schema.interface?.type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap],\n );\n\n const type = (e.options?.filter?.advance?.widgetType ||\n widgetConfig?.defaultFilterWidgetName ||\n e.schema.interface?.type) as AXPWidgetTypesMap[keyof AXPWidgetTypesMap];\n const iface = e.schema.interface ?? {};\n return {\n title: e.title,\n field: e.name,\n operator: {\n type: 'contains',\n },\n widget: { ...omit(iface as object, 'triggers'), path: e.name, type },\n filters: [],\n isParametric: false,\n icon: widgetConfig?.icon,\n filterType: {\n advance: e.options?.filter?.advance?.enabled ?? false,\n inline: e.options?.filter?.inline?.enabled ?? false,\n },\n triggers: e.schema.interface?.triggers,\n };\n });\n }\n\n /**\n * Create Column Definitions for Toolbar.\n * Includes both entity.properties and enriched columns (e.g. person.firstName with showAs).\n */\n private createColumnDefinitions(entity: AXPEntity, options?: AXPEntityListToolbarConvertOptions): AXPColumnQuery[] {\n const { columns = [] } = entity;\n const excludeColumns = options?.excludeColumns || [];\n const includeColumns = options?.includeColumns || [];\n const relatedTableColumns = options?.relatedTableColumns;\n\n const visibleProperties = getVisibleProperties(entity);\n const visiblePropNames = new Set(visibleProperties.map(({ name }) => name));\n\n let baseColumns: AXPColumnQuery[];\n\n if (relatedTableColumns?.length) {\n baseColumns = relatedTableColumns.map((column) => {\n const property = visibleProperties.find(({ name }) => name === column.name);\n return {\n name: column.name,\n title: column.title || property?.title || column.name,\n visible: column.options?.visible !== false,\n } as AXPColumnQuery;\n });\n } else if (columns.length > 0) {\n baseColumns = columns\n .filter(({ name }) => visiblePropNames.has(name))\n .map((column) => {\n const property = visibleProperties.find(({ name }) => name === column.name);\n return {\n name: column.name,\n title: property?.title!,\n visible: column?.options?.visible ?? true,\n } as AXPColumnQuery;\n });\n } else {\n baseColumns = visibleProperties.map(\n (property) =>\n ({\n name: property.name,\n title: property.title,\n visible: true,\n }) as AXPColumnQuery,\n );\n }\n\n return applyIncludeExclude(baseColumns, includeColumns, excludeColumns);\n }\n\n /**\n * Create Sort Definitions for Toolbar.\n * Includes entity.properties with sort enabled, plus enriched columns (dotted paths).\n */\n private createSortDefinitions(entity: AXPEntity): AXPSortDefinition[] {\n const fromProperties = entity.properties\n .filter((c) => c.options?.sort?.enabled)\n .map((e) => ({ name: e.name, title: e.title }));\n\n const columns = entity.columns ?? [];\n const fromColumns = columns\n .filter((col) => col.name.includes('.') && col.title)\n .map((col) => ({ name: col.name, title: col.title ?? col.name }));\n\n const seen = new Set<string>();\n return [...fromProperties, ...fromColumns].filter((s) => {\n if (seen.has(s.name)) return false;\n seen.add(s.name);\n return true;\n });\n }\n\n //#endregion\n}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPEntity,\n AXPEntityAction,\n AXPEntityCommandScope,\n AXPEntityTableColumn,\n AXPRefreshEvent,\n} from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPBroadcastEventService,\n AXPColumnQuery,\n AXPDeviceService,\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n AXPFilterDefinition,\n getChangedPaths,\n} from '@acorex/platform/core';\nimport {\n AXPValueWidgetComponent,\n AXPWidgetCoreModule,\n AXPWidgetNode,\n AXPWidgetRendererDirective,\n AXPWidgetsCatalog,\n} from '@acorex/platform/layout/widget-core';\nimport { AXPDataListWidgetColumn, AXPDataListWidgetViewComponent } from '@acorex/platform/layout/widgets';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService, ofType } from '@acorex/platform/workflow';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n linkedSignal,\n signal,\n untracked,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { get } from 'lodash-es';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPEntityEventsKeys } from '../../entity-events.keys';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPEntityCommandTriggerViewModel } from '../../entity.viewmodel';\nimport { AXPEntityListTableService } from './entity-list-table.service';\nimport { AXPEntityListToolbarService } from './entity-list-toolbar.service';\n\n@Component({\n template: `\n @if (showEntityActions()) {\n <div class=\"ax-flex ax-gap-2 ax-justify-end ax-mb-4\">\n @for (action of primaryActions(); track $index) {\n @if (action.visible != false) {\n <ax-button\n [class.ax-sm]=\"deviceService.isSmall()\"\n [iconOnly]=\"deviceService.isSmall()\"\n [disabled]=\"action.disabled\"\n [text]=\"action.title\"\n [look]=\"'solid'\"\n [color]=\"action.color\"\n (onClick)=\"handleActionClick(action)\"\n >\n <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n @if (action?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of action?.items; track $index) {\n @if (sub.visible != false) {\n <ax-button-item\n [text]=\"sub.title\"\n [color]=\"sub.color\"\n [disabled]=\"sub.disabled\"\n (onClick)=\"handleActionClick(sub)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n }\n }\n @if (secondaryActions().length) {\n <ax-button\n [class.ax-sm]=\"deviceService.isSmall()\"\n [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\"\n [color]=\"'default'\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (item of secondaryActions(); track $index) {\n @if (item.visible != false) {\n <ax-button-item\n [text]=\"item.title\"\n [color]=\"item.color\"\n [disabled]=\"item.disabled\"\n (onClick)=\"handleSecondaryActionClick(item)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-h-full\" [style.max-height]=\"maxHeight()\">\n @if (toolbarNode() != null && showToolbar()) {\n <ng-container\n #toolbar\n axp-widget-renderer\n [node]=\"toolbarNode()!\"\n [parentNode]=\"this\"\n [index]=\"index\"\n [mode]=\"this.mode\"\n ></ng-container>\n }\n <!-- <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-1 \">\n <span\n >{{ selectedItems().length }}\n <span>{{ '@general:terms.interface.items-selected' | translate | async }}</span>\n </span>\n <ax-button\n text=\"@general:terms.interface.unselect-all\"\n class=\"ax-xs\"\n (onClick)=\"handleUnselectAll()\"\n ></ax-button>\n </div> -->\n @if (listNode() != null) {\n <ng-container\n #list\n axp-widget-renderer\n [node]=\"listNode()!\"\n [parentNode]=\"this\"\n [index]=\"index\"\n [mode]=\"this.mode\"\n ></ng-container>\n }\n </div>\n `,\n standalone: true,\n host: {\n '[class]': '\"ax-h-full\"',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [AXPEntityListTableService, AXPEntityListToolbarService],\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXPWidgetCoreModule,\n AXButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n ],\n})\nexport class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {\n protected entityService = inject(AXPEntityDefinitionRegistryService);\n protected workflow = inject(AXPWorkflowService);\n protected entityListTableService = inject(AXPEntityListTableService);\n protected entityListToolbarService = inject(AXPEntityListToolbarService);\n protected deviceService = inject(AXPDeviceService);\n protected commandService = inject(AXPCommandService);\n protected eventService = inject(AXPBroadcastEventService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n protected isMounted = signal(false);\n\n public readonly entity = signal<AXPEntity | null>(null);\n protected listNode = signal<AXPWidgetNode | null>(null);\n protected list = viewChild<AXPWidgetRendererDirective>('list');\n protected allWidgets = viewChildren<AXPWidgetRendererDirective>(AXPWidgetRendererDirective);\n protected listWidget = linkedSignal(() =>\n this.allWidgets().find((widget) => widget.node()?.type === AXPWidgetsCatalog.dataList),\n );\n\n protected toolbarWidget = computed(() =>\n this.allWidgets().find((widget) => widget.node()?.type === AXPWidgetsCatalog.listToolbar),\n );\n\n protected selectedItems = signal<any[]>([]);\n\n protected toolbarNode = signal<AXPWidgetNode | null>(null);\n protected destroyed = new Subject<void>();\n\n //options\n protected entitySource = computed(() => this.options()['entity']);\n protected excludeColumns = computed(() => this.options()['excludeColumns'] as string[]);\n protected includeColumns = computed(() => this.options()['includeColumns'] as string[]);\n protected relatedTableColumns = computed(\n () => this.options()['relatedTableColumns'] as AXPEntityTableColumn[] | undefined,\n );\n protected customFilterDefinitions = computed(\n () => this.options()['customFilterDefinitions'] as Partial<AXPFilterDefinition>[] | undefined,\n );\n protected externalActions = computed(() => this.options()['actions'] as AXPEntityAction[]);\n protected maxHeight = computed(() => this.options()['maxHeight'] as string);\n\n protected showEntityActions = computed(() => this.options()['showEntityActions'] ?? true);\n protected showToolbar = computed(() => this.options()['showToolbar'] ?? true);\n\n //actions\n protected allActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n const originalList = this.entity()?.interfaces?.master?.list?.actions ?? [];\n const externalActionList = this.externalActions() ?? [];\n\n const usedOverrideActions = new Set<string>();\n\n const mergedActions = originalList.map((originalAction: any) => {\n const originalCommandName =\n typeof originalAction.command === 'string' ? originalAction.command : originalAction.command?.name;\n\n const overrideAction = externalActionList.find((action: any) => {\n const actionCommandName = typeof action?.command === 'string' ? action.command : action?.command?.name;\n return actionCommandName === originalCommandName;\n });\n\n if (overrideAction) {\n const overrideKey = `${\n typeof overrideAction.command === 'string' ? overrideAction.command : overrideAction.command?.name\n }`;\n usedOverrideActions.add(overrideKey);\n return new AXPEntityCommandTriggerViewModel(this.entity()!, overrideAction);\n }\n\n return new AXPEntityCommandTriggerViewModel(this.entity()!, originalAction);\n });\n\n const additionalActions = externalActionList\n .filter((action: any) => {\n const actionKey = `${typeof action?.command === 'string' ? action.command : action?.command?.name}`;\n return !usedOverrideActions.has(actionKey);\n })\n .map((action: any) => new AXPEntityCommandTriggerViewModel(this.entity()!, action));\n return [...additionalActions, ...mergedActions];\n });\n\n protected primaryActions = computed(() => {\n const actions = this.allActions()\n .filter(\n (a) =>\n !a.isChild &&\n a.priority == 'primary' &&\n ((a.scope == AXPEntityCommandScope.Selected && this.selectedItems().length) ||\n (a.scope == AXPEntityCommandScope.TypeLevel && !this.selectedItems().length)),\n )\n .map(\n (tr) =>\n ({\n name: tr.name,\n title: tr.title,\n icon: tr.icon,\n color: tr.color,\n disabled: tr.disabled,\n items: tr.items?.map((sub) => ({\n name: sub.name,\n title: sub.title,\n icon: sub.icon,\n color: sub.color,\n disabled: sub.disabled,\n command: {\n name: sub.name,\n options: sub.options,\n metadata: sub.metadata,\n },\n })),\n visible: tr.hidden !== true,\n command: {\n name: tr.name,\n options: tr.options,\n metadata: tr.metadata,\n },\n }) as AXPActionMenuItem,\n );\n return actions;\n });\n\n protected handleUnselectAll() {\n this.selectedItems.set([]);\n }\n\n protected secondaryActions = computed(() => {\n const actions = this.allActions()\n .filter((a) => a.priority == 'secondary' && a.scope == AXPEntityCommandScope.TypeLevel)\n .map(\n (tr) =>\n ({\n name: tr.name,\n title: tr.title,\n icon: tr.icon,\n color: tr.color,\n disabled: tr.disabled,\n visible: tr.hidden !== true,\n separated: tr.separated,\n command: {\n name: tr.name,\n options: tr.options,\n metadata: tr.metadata,\n },\n }) as AXPActionMenuItem,\n );\n return actions;\n });\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.execute(item.command.name, null);\n }\n }\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.execute(item.command.name, null);\n }\n }\n\n // ngDoCheck(): void {\n // console.log(this.listWidget()?.instance.output('selectedRows'));\n // }\n\n protected async execute(commandName: string, _data: unknown) {\n const action = this.allActions().find((c) => {\n return (\n c.name == commandName &&\n ((this.selectedItems().length\n ? c.scope == AXPEntityCommandScope.Selected\n : c.scope == AXPEntityCommandScope.Individual) ||\n c.scope == AXPEntityCommandScope.TypeLevel)\n );\n });\n const command = commandName.split('&')[0];\n const commandData =\n action?.scope == AXPEntityCommandScope.Selected\n ? this.selectedItems()\n : action?.options?.['process']?.data || null;\n const options = await this.evaluateToolbarExpressions(action?.options, commandData);\n if (this.commandService.exists(command)) {\n await this.commandService.execute(command, {\n __context__: {\n entity: this.entitySource(),\n entityInfo: {\n name: this.entity()?.name,\n module: this.entity()?.module,\n title: this.entity()?.title,\n parentKey: this.entity()?.parentKey,\n source: `${this.entity()?.module}.${this.entity()?.name}`,\n },\n data: commandData,\n options,\n metadata: action?.metadata,\n },\n options,\n metadata: action?.metadata,\n });\n } else {\n await this.workflow.execute(command, {\n entity: this.entitySource(),\n entityInfo: {\n name: this.entity()?.name,\n module: this.entity()?.module,\n title: this.entity()?.title,\n parentKey: this.entity()?.parentKey,\n source: `${this.entity()?.module}.${this.entity()?.name}`,\n },\n data: commandData,\n options,\n metadata: action?.metadata,\n });\n }\n }\n\n private async evaluateToolbarExpressions(opts: unknown, expressionData: unknown): Promise<Record<string, unknown>> {\n if (!opts) {\n return {};\n }\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(expressionData as object, path),\n },\n };\n return (await this.expressionEvaluator.evaluate(opts, scope)) as Record<string, unknown>;\n }\n //#region ---- Query Change Handler ----\n protected queries = undefined;\n #effect = effect(() => {\n //TODO: this is a temporary solution to handle the query changes; this should be removed when the query changes are handled in the widget core;\n if (this.getValue()?.toolbar) {\n this.queries = this.getValue()?.toolbar;\n }\n const listInstance = this.listWidget()?.instance;\n // const dataSource = this.listWidget()?.options()['dataSource'] as AXDataSource;\n const dataSource = listInstance?.options()?.['dataSource'] as AXDataSource;\n const isMounted = this.isMounted();\n if (!this.hasRequiredDependencies(dataSource, this.queries, listInstance)) {\n return;\n }\n\n untracked(() => {\n this.handleQueryChanges(this.queries, dataSource, listInstance, isMounted);\n });\n });\n\n /**\n * Validates that all required dependencies are available\n */\n private hasRequiredDependencies(dataSource: AXDataSource | undefined, queries: any, listInstance: any): boolean {\n return !!(dataSource && queries && listInstance);\n }\n\n /**\n * Handles all query-related changes (filters, sorts, columns)\n */\n private handleQueryChanges(queries: any, dataSource: AXDataSource, listInstance: any, isMounted: boolean): void {\n const changeTracker = this.analyzeChanges(queries);\n this.previousQueries = queries;\n\n this.applyDataSourceChanges(dataSource, queries, changeTracker);\n this.handleListRefresh(listInstance, changeTracker, isMounted);\n this.handleColumnChanges(changeTracker);\n }\n\n /**\n * Analyzes what has changed between current and previous queries\n */\n private analyzeChanges(queries: any) {\n const changes = getChangedPaths(queries, this.previousQueries);\n return {\n isFilterChanged: changes.includes('filters'),\n isSortChanged: changes.includes('sorts'),\n isColumnsChanged: changes.includes('columns'),\n hasAnyChange: changes.length > 0,\n };\n }\n\n /**\n * Applies filter and sort changes to the data source\n */\n private applyDataSourceChanges(\n dataSource: AXDataSource,\n queries: any,\n changeTracker: ReturnType<typeof this.analyzeChanges>,\n ): void {\n if (changeTracker.isFilterChanged) {\n dataSource.filter({\n filters: queries?.filters,\n });\n }\n\n if (changeTracker.isSortChanged) {\n dataSource.sort(...(queries.sorts || []));\n }\n }\n\n /**\n * Handles list refresh logic based on changes and mount status\n */\n private handleListRefresh(\n listInstance: any,\n changeTracker: ReturnType<typeof this.analyzeChanges>,\n isMounted: boolean,\n ): void {\n const shouldRefresh = changeTracker.isFilterChanged || changeTracker.isSortChanged || !isMounted;\n\n if (shouldRefresh) {\n listInstance.call('refresh');\n\n // Set mounted flag only on initial load (not when filters/sorts change)\n if (!changeTracker.isFilterChanged && !changeTracker.isSortChanged) {\n this.isMounted.set(true);\n }\n }\n }\n\n /**\n * Handles column-related changes\n * TODO: Implement column change logic\n */\n private handleColumnChanges(changeTracker: ReturnType<typeof this.analyzeChanges>): void {\n if (!changeTracker.isColumnsChanged) {\n return;\n }\n\n const listInstance = this.listWidget()?.instance as AXPDataListWidgetViewComponent | undefined;\n const toolbarState = this.getValue()?.toolbar as { columns?: AXPColumnQuery[] } | undefined;\n\n if (!listInstance || !toolbarState?.columns) {\n return;\n }\n\n // Current columns from list options\n const currentColumns = (listInstance.options()['columns'] || []) as AXPDataListWidgetColumn[];\n const columnByName = new Map(currentColumns.map((c) => [c.name, c] as const));\n\n // Build new ordered columns array based on toolbar order/visibility\n const updatedColumns: AXPDataListWidgetColumn[] = toolbarState.columns\n .map((q) => {\n const base = columnByName.get(q.name);\n if (!base) {\n return null;\n }\n // Preserve all existing column config but update visibility\n return { ...base, visible: q.visible } as AXPDataListWidgetColumn;\n })\n .filter((c): c is AXPDataListWidgetColumn => c != null);\n\n // Apply updated columns to the list widget and refresh\n listInstance.setOptions({ columns: updatedColumns });\n }\n\n //#endregion\n\n protected context = {};\n\n protected previousQueries: any = null;\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n\n const [moduleName, entityName] = this.entitySource().split('.');\n if (!moduleName || !entityName) {\n throw new Error('Invalid entity source');\n }\n\n // Resolve entity and set it in the signal\n const resolvedEntity = await this.entityService.resolve(moduleName, entityName);\n if (!resolvedEntity) {\n throw new Error(`Entity not found: ${this.entitySource()}`);\n }\n this.entity.set(resolvedEntity);\n\n const options = {\n excludeColumns: this.excludeColumns(),\n includeColumns: this.includeColumns(),\n relatedTableColumns: this.relatedTableColumns(),\n customFilterDefinitions: this.customFilterDefinitions(),\n };\n\n const listOptions = await this.entityListTableService.convertEntityToListOptions(\n resolvedEntity,\n options,\n this.allActions(),\n );\n const toolbarOptions = await this.entityListToolbarService.convertEntityToolbarOptions(resolvedEntity, options);\n setTimeout(() => {\n this.listNode.set({\n type: AXPWidgetsCatalog.dataList,\n options: listOptions,\n path: `table`,\n name: 'table',\n mode: 'view',\n defaultValue: this.getValue()?.table,\n });\n\n this.toolbarNode.set({\n type: AXPWidgetsCatalog.listToolbar,\n path: `toolbar`,\n options: toolbarOptions,\n mode: 'view',\n defaultValue: {\n filters: this.getValue()?.toolbar?.filters,\n sorts: this.getValue()?.toolbar?.sorts,\n columns: this.getValue()?.toolbar?.columns,\n },\n });\n }, 100);\n }\n\n async ngAfterViewInit(): Promise<void> {\n this.workflow.events$\n .pipe(ofType(AXPRefreshEvent))\n .pipe(takeUntil(this.destroyed))\n .subscribe((event) => {\n if (event.payload.entity == this.entitySource()) {\n this.listWidget()?.instance.call('refresh');\n }\n });\n\n this.eventService\n .listen(AXPEntityEventsKeys.REFRESH_LAYOUT)\n .pipe(takeUntil(this.destroyed))\n .subscribe((e) => {\n if ((e.data as any).name == `${this.entity()?.module}.${this.entity()?.name}`) {\n this.listWidget()?.instance.call('refresh');\n }\n });\n\n const listWidget = (await this.layoutService.waitForWidget(\n `${this.entitySource()}-tab-list_table`,\n 500,\n )) as AXPDataListWidgetViewComponent;\n if (listWidget?.api && typeof listWidget.api === 'function') {\n const onSelectionChange = listWidget.api()['onSelectionChange'] as Subject<any>;\n if (onSelectionChange) {\n onSelectionChange.pipe(takeUntil(this.destroyed)).subscribe((e: any) => {\n this.selectedItems.set(e);\n });\n }\n }\n }\n\n ngOnDestroy(): void {\n this.listWidget.set(undefined);\n this.destroyed.next();\n this.destroyed.complete();\n }\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\n\nexport const AXPEntityListWidget: AXPWidgetConfig = {\n name: 'entity-list',\n title: 'Entity List',\n description: 'Displays entity data in a table format',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n icon: 'fa-solid fa-square',\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],\n components: {\n view: {\n component: () => import('./entity-list-widget-view.component').then((c) => c.AXPEntityListWidgetViewComponent),\n },\n edit: {\n component: () => import('./entity-list-widget-view.component').then((c) => c.AXPEntityListWidgetViewComponent),\n },\n print: {\n component: () => import('./entity-list-widget-view.component').then((c) => c.AXPEntityListWidgetViewComponent),\n },\n designer: {\n component: () => import('./entity-list-widget-view.component').then((c) => c.AXPEntityListWidgetViewComponent),\n },\n },\n};\n","import { AXLoadingModule } from '@acorex/components/loading';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPMultiLanguageString, AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, computed, effect, HostBinding, inject, signal } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { castArray, get, isNil } from 'lodash-es';\n\n@Component({\n selector: 'axp-lookup-widget-view',\n template: `\n @if(loading())\n {\n <ax-loading></ax-loading>\n }\n @else{\n @if(displayItems().length > 1) {\n @for (item of displayItems(); track $index) {\n <ax-badge class=\"ax-p-0.5 {{badgeClass()}}\" [text]=\"item.text | axpResolveMultiLanguageString\" ></ax-badge>\n }\n }\n @else if(displayItems().length == 1) {\n <ax-badge class=\"ax-p-0.5 {{badgeClass()}}\" [text]=\"displayItems()[0].text | axpResolveMultiLanguageString\" ></ax-badge>\n }\n @else {\n <span class=\"ax-text-muted\">---</span>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXLoadingModule, AXBadgeModule, AXPResolveMultiLanguageStringPipe]\n})\nexport class AXPLookupWidgetViewComponent extends AXPValueWidgetComponent<any> {\n protected readonly formatService = inject(AXFormatService);\n protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n\n\n protected entity = computed<string>(() => this.options()['entity'] as string);\n protected multiple = computed<boolean>(() => this.options()['multiple'] as boolean);\n protected valueField = computed<string>(() => (this.options()['valueField'] as string) ?? 'id');\n protected textField = computed<string>(() => (this.options()['textField'] as string) ?? 'title');\n protected badgeClass = computed<string>(() => (this.options()['badgeClass'] as string) ?? 'ax-accent1');\n protected displayFormat = computed<string | undefined>(() => {\n const template = this.options()['displayFormat'] as string | undefined;\n return template ? template.replace(/\\{/g, '{{').replace(/\\}/g, '}}') : undefined;\n });\n\n protected displayField = computed<string>(() => {\n return this.textField() ?? this.entityDef()?.formats.lookup ?? this.entityDef()?.properties.find((c) => c.name != 'id')?.name ?? 'title';\n });\n\n protected loading = signal(false);\n private entityDef = signal<AXPEntity | null>(null);\n\n protected displayItems = signal<any[]>([]);\n\n\n private efEntity = effect(async () => {\n const [module, entity] = this.entity().split('.');\n this.entityDef.set(await this.entityResolver.resolve(module, entity));\n });\n\n private efDisplay = effect(async () => {\n const value = this.getValue();\n if (isNil(value)) {\n this.displayItems.set([]);\n }\n else {\n const items = castArray(value).map(async (item: any) => await this.extractItem(item));\n this.displayItems.set(await Promise.all(items));\n }\n })\n\n\n private async extractItem(item: any) {\n if (typeof item == 'object') {\n return {\n id: item[this.valueField()],\n text: this.getDisplayRaw(item),\n };\n }\n\n const def = this.entityDef();\n const byKey = def?.queries?.byKey?.execute as Function;\n if (byKey) {\n this.loading.set(true);\n const fetchedItem = await byKey(item);\n this.loading.set(false);\n return {\n id: fetchedItem[this.valueField()],\n text: this.getDisplayRaw(fetchedItem),\n };\n }\n\n return {\n id: item,\n text: item,\n };\n }\n\n /**\n * Raw label for {@link AXPResolveMultiLanguageStringPipe} (handles {@link AXPMultiLanguageString} and plain strings).\n */\n private getDisplayRaw(item: any): string | AXPMultiLanguageString {\n if (!item) {\n return '';\n }\n\n const template = this.displayFormat();\n if (template) {\n const formatted = this.formatService.format(template, 'string', item);\n if (formatted) {\n return formatted;\n }\n }\n\n const raw = get(item, this.displayField());\n if (raw == null) {\n return '';\n }\n if (typeof raw === 'string' || typeof raw === 'number' || typeof raw === 'boolean') {\n return String(raw);\n }\n if (typeof raw === 'object' && !Array.isArray(raw)) {\n return raw as AXPMultiLanguageString;\n }\n return String(raw);\n }\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n cls[`ax-flex`] = true;\n cls[`ax-gap-1`] = true;\n return cls;\n }\n}\n","import { AXDataSource, AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport {\n AXPCleanNestedFilters,\n AXPEntity,\n AXPEntityProperty,\n AXPFilterOperatorMiddlewareService,\n} from '@acorex/platform/common';\nimport { AXPCategoryEntity } from '@acorex/platform/core';\nimport {\n AXPCategoryTreeDataSource,\n AXPDataSelectorAllowCreate,\n AXPDataSelectorColumn,\n AXPDataSelectorConfig,\n AXPDataSelectorService,\n} from '@acorex/platform/layout/components';\nimport { AXPWidgetRegistryService, AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\n//#region ---- Types ----\n\nexport interface AXPEntityDataSelectorOptions {\n entity: AXPEntity;\n title: string;\n allowMultiple?: boolean;\n filters?: AXDataSourceFilterOption | null;\n parentFilters?: AXDataSourceFilterOption | null;\n columns?: string[];\n sortedFields?: { name: string; dir: 'asc' | 'desc' }[];\n allowCreate?: AXPDataSelectorAllowCreate;\n searchFields?: string[];\n initialSearchTerm?: string;\n selectedItemIds?: string[] | number[];\n categoryFilter?: {\n title: string;\n dataSource: AXPCategoryTreeDataSource;\n filterField: string;\n filterOperator?: 'equal' | 'contains' | 'in';\n width?: string;\n };\n showCategoryFilter?: boolean; // Show category filter automatically if entity has category plugin (default: true)\n}\n\nexport interface AXPEntityDataSelectorResult {\n items: any[];\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPEntityDataSelectorService {\n //#region ---- Services & Dependencies ----\n\n private readonly dataSelectorService = inject(AXPDataSelectorService);\n private readonly filterOperatorMiddleware = inject(AXPFilterOperatorMiddlewareService);\n private readonly widgetResolver = inject(AXPWidgetRegistryService);\n private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n private readonly commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Open entity data selector popup\n */\n async open(options: AXPEntityDataSelectorOptions): Promise<AXPEntityDataSelectorResult | null> {\n const config = this.createDataSelectorConfig(options);\n\n // Handle category filter\n if (options.categoryFilter) {\n // Use provided category filter config\n config.categoryFilter = {\n enabled: true,\n ...options.categoryFilter,\n };\n } else {\n // Auto-detect category filter from entity plugin if enabled\n const showCategoryFilter = options.showCategoryFilter ?? true;\n if (showCategoryFilter) {\n const categoryExt = (options.entity as any)?.extensions?.category;\n if (categoryExt) {\n const categoryTreeDataSource = await this.createCategoryTreeDataSource(categoryExt.entity);\n if (categoryTreeDataSource) {\n const propertyName = categoryExt.propertyName || 'categoryIds';\n const filterOperator = 'contains' as const;\n\n config.categoryFilter = {\n enabled: true,\n title: '@general:terms.classification.categories',\n dataSource: categoryTreeDataSource,\n filterField: propertyName,\n filterOperator,\n };\n }\n }\n }\n }\n\n const result = (await this.dataSelectorService.open(config)) as AXPEntityDataSelectorResult | null;\n return result;\n }\n\n /**\n * Execute Entity:Create and return created item.\n * Used by lookup widget and data selector for inline create.\n */\n async executeEntityCreate(entity: AXPEntity, mode: 'full' | 'quick'): Promise<any | null> {\n return this.executeCreate(entity, mode);\n }\n\n /**\n * Normalize item's phones/emails for expose/display.\n * Call this when receiving items from any source (create, API, selector).\n */\n normalizeItemContactArrays(item: any): any {\n return this.normalizeContactArrays(item);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Create data selector configuration from entity options\n */\n private createDataSelectorConfig(options: AXPEntityDataSelectorOptions): AXPDataSelectorConfig {\n const dataSource = this.createDataSource(options);\n const columns = this.createColumns(options);\n const searchFields = this.getSearchFields(options);\n\n const allowCreate = options.allowCreate ?? this.getAllowCreate(options.entity);\n\n return {\n title: options.title,\n dataSource,\n columns,\n selectionMode: options.allowMultiple ? 'multiple' : 'single',\n searchFields,\n initialSearchTerm: options.initialSearchTerm,\n parentField: options.entity.parentKey,\n filters: options.filters || undefined,\n allowCreate,\n onCreate: allowCreate !== 'none' ? (mode) => this.executeCreate(options.entity, mode) : undefined,\n selectedItemIds: options.selectedItemIds,\n // Note: Custom filters will be applied to the dataSource in createDataSource\n };\n }\n\n /**\n * Create data source from entity definition\n */\n private createDataSource(options: AXPEntityDataSelectorOptions): AXDataSource<any> {\n const { entity, filters, parentFilters } = options;\n\n return new AXDataSource({\n byKey: (key) => {\n const func = entity.queries?.byKey?.execute as Function;\n return func(key);\n },\n load: (e) => {\n const func = entity.queries?.list?.execute as Function;\n if (!func || typeof func !== 'function') {\n throw new Error(`Entity ${entity.name} does not have a list query`);\n }\n this.mergeFilters(e, filters, parentFilters);\n return func(e);\n },\n pageSize: 10,\n key: 'id',\n });\n }\n\n /**\n * Create columns configuration from entity definition\n */\n private createColumns(options: AXPEntityDataSelectorOptions): AXPDataSelectorColumn[] {\n const { entity, columns = [] } = options;\n const { columns: entityColumns = [], properties } = entity;\n const visibleProperties = properties.filter(({ schema }) => schema?.visible !== false);\n const visiblePropNames = new Set(visibleProperties.map(({ name }) => name));\n\n // Priority list of column names to show by default (in order of importance)\n const priorityColumnNames = ['title', 'displayName', 'name', 'code', 'description'];\n\n // Filter visible columns\n const filteredColumns = entityColumns.filter(({ name, showAs }) => visiblePropNames.has(name) || showAs);\n\n // If no columns specified, use only priority columns\n let columnsToProcess: typeof filteredColumns;\n if (columns.length === 0) {\n // Filter to only priority columns that exist\n const priorityColumns = filteredColumns\n .filter((column) => priorityColumnNames.includes(column.name))\n .sort((a, b) => {\n const indexA = priorityColumnNames.indexOf(a.name);\n const indexB = priorityColumnNames.indexOf(b.name);\n return indexA - indexB;\n });\n\n columnsToProcess = priorityColumns;\n } else {\n // If columns are specified, filter by them\n columnsToProcess = filteredColumns.filter(({ name }) => columns.includes(name));\n }\n\n return columnsToProcess.map((column) => {\n let property: AXPEntityProperty;\n let widgetType: string;\n let widgetOptions: any;\n\n if (column.showAs) {\n // Use custom column configuration\n const widgetConfig = this.widgetResolver.resolve(\n column.showAs.type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap],\n );\n property = {\n ...widgetConfig,\n name: column.name,\n title: column.title ?? '',\n schema: {\n dataType: 'string',\n interface: {\n type: column.showAs.type,\n options: { ...column.showAs.options, disableDetailPopover: true },\n },\n },\n };\n widgetType = column.showAs.type;\n widgetOptions = { ...column.showAs.options, disableDetailPopover: true };\n } else {\n // Use entity property configuration - same columns, title, and interface as entity\n property = visibleProperties.find(({ name }) => name === column.name)!;\n const iface = property?.schema?.interface;\n widgetType = iface?.type || 'text';\n widgetOptions = {\n ...(iface?.options ?? {}),\n ...(iface?.children?.length && { children: iface.children }),\n disableDetailPopover: true, // Column content is visible in lookup popup - no need for detail popover\n };\n }\n\n // Get width from column options (set by middleware)\n // Note: Column width resolution is now handled by AXPDataSelectorService\n // to support all data selector instances (not just entity-based ones)\n const width = column.options?.width;\n\n return {\n name: column.name,\n title: property.title || column.title || column.name,\n visible: true,\n dataPath: column.options?.dataPath,\n width,\n widget: {\n type: widgetType,\n options: widgetOptions,\n },\n };\n });\n }\n\n /**\n * Get searchable fields from entity properties\n */\n private getSearchFields(options: AXPEntityDataSelectorOptions): { name: string; title: string }[] {\n const { entity, searchFields } = options;\n const searchableFields =\n entity.properties\n .filter((p) => p.options?.filter?.inline?.enabled)\n .map((p) => {\n return {\n name: p.name,\n title: p.title,\n };\n }) ?? [];\n\n if (searchFields && searchFields.length > 0) {\n return searchableFields.filter((f) => searchFields.includes(f.name));\n }\n\n // Auto-detect searchable fields from entity properties\n return searchableFields;\n }\n\n /**\n * Get allowCreate mode from entity\n */\n private getAllowCreate(entity: AXPEntity): AXPDataSelectorAllowCreate {\n if (entity.commands?.create?.execute == null) return 'none';\n const quickCreate = entity.interfaces?.master?.create?.quickCreate;\n return quickCreate?.enabled === true ? 'quick' : 'full';\n }\n\n /**\n * Execute Entity:Create and return created item\n */\n private async executeCreate(entity: AXPEntity, mode: 'full' | 'quick'): Promise<any | null> {\n const quickCreate = entity.interfaces?.master?.create?.quickCreate;\n const options: Record<string, unknown> = {};\n if (mode === 'quick' && quickCreate) {\n if (quickCreate.properties?.length) {\n options['includeProperties'] = quickCreate.properties;\n }\n if (quickCreate.excludeProperties?.length) {\n options['excludeProperties'] = quickCreate.excludeProperties;\n }\n if (quickCreate.layout) {\n options['layout'] = quickCreate.layout;\n }\n }\n\n const result = await this.commandService.execute('Entity:Create', {\n __context__: {\n entity: `${entity.module}.${entity.name}`,\n entityInfo: {\n name: entity.name,\n module: entity.module,\n title: entity.title,\n parentKey: entity.parentKey,\n },\n data: {},\n options,\n },\n });\n\n if (result?.success && result?.data) {\n const item = Array.isArray(result.data) ? result.data[0] : result.data;\n return this.normalizeContactArrays(item);\n }\n return null;\n }\n\n /**\n * Normalize phones/emails from repeater form to plain arrays of { value: string }.\n * Repeater/ContactBox can return nested structure: { value: { label: \"\", value: \"101010\" } }\n * Contact widget expects: { value: \"101010\", label?: string }\n */\n private normalizeContactArrays(item: any): any {\n if (!item || typeof item !== 'object') return item;\n const normalized = { ...item };\n for (const key of ['phones', 'emails']) {\n const arr = normalized[key];\n if (Array.isArray(arr)) {\n normalized[key] = arr.map((entry: any) => {\n if (entry && typeof entry === 'object' && 'value' in entry) {\n const inner = entry.value;\n if (typeof inner === 'object' && inner && 'value' in inner) {\n return {\n value: String(inner.value ?? ''),\n ...(inner.label && { label: inner.label }),\n };\n }\n return {\n value: String(entry.value ?? ''),\n ...(entry.label && { label: entry.label }),\n };\n }\n if (typeof entry === 'string') {\n return { value: entry };\n }\n return { value: '' };\n });\n }\n }\n return normalized;\n }\n\n /**\n * Create category tree data source from category entity key\n */\n private async createCategoryTreeDataSource(categoryEntityKey: string): Promise<AXPCategoryTreeDataSource | null> {\n try {\n const [module, entity] = categoryEntityKey.split('.');\n if (!module || !entity) {\n return null;\n }\n\n const categoryEntity = await this.entityResolver.resolve(module, entity);\n if (!categoryEntity?.queries?.list?.execute || typeof categoryEntity.queries.list.execute !== 'function') {\n return null;\n }\n\n const listQuery = categoryEntity.queries.list.execute as Function;\n const parentKey = categoryEntity.parentKey || 'parentId';\n\n const categoryTreeDataSource: AXPCategoryTreeDataSource = {\n loadRootNodes: async (): Promise<AXPCategoryEntity[]> => {\n const result = await listQuery({\n skip: 0,\n take: 1000,\n filter: {\n field: parentKey,\n operator: { type: 'isNull' },\n },\n sort: [{ field: 'title', dir: 'asc' }],\n });\n return (result?.items || []).map((item: any) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item[parentKey],\n childrenCount: item.childrenCount || 0,\n }));\n },\n loadChildNodes: async (parentId: string): Promise<AXPCategoryEntity[]> => {\n const result = await listQuery({\n skip: 0,\n take: 1000,\n filter: {\n field: parentKey,\n operator: { type: 'equal' },\n value: parentId,\n },\n sort: [{ field: 'title', dir: 'asc' }],\n });\n return (result?.items || []).map((item: any) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item[parentKey],\n childrenCount: item.childrenCount || 0,\n }));\n },\n searchNodes: async (searchValue: string): Promise<AXPCategoryEntity[]> => {\n const result = await listQuery({\n skip: 0,\n take: 1000,\n filter: {\n filters: [\n {\n field: 'title',\n operator: { type: 'contains' },\n value: searchValue,\n },\n {\n field: 'name',\n operator: { type: 'contains' },\n value: searchValue,\n },\n ],\n logic: 'or',\n },\n sort: [{ field: 'title', dir: 'asc' }],\n });\n return (result?.items || []).map((item: any) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item[parentKey],\n childrenCount: item.childrenCount || 0,\n }));\n },\n };\n\n return categoryTreeDataSource;\n } catch (error) {\n console.error('Error creating category tree data source:', error);\n return null;\n }\n }\n\n /**\n * Merge custom and parent filters into data source query\n */\n private mergeFilters(\n request: any,\n customFilter: AXDataSourceFilterOption | null | undefined,\n parentFilters: AXDataSourceFilterOption | null | undefined,\n ) {\n if (!customFilter && !parentFilters) {\n return request;\n }\n\n const filters: AXDataSourceFilterOption[] = [];\n\n // Add custom filter\n if (customFilter) {\n const cleanedFilters = AXPCleanNestedFilters([customFilter]);\n if (cleanedFilters.length > 0) {\n filters.push(this.filterOperatorMiddleware.transformFilter(cleanedFilters[0]));\n }\n }\n\n // Add parent filters\n if (parentFilters) {\n filters.push(parentFilters);\n }\n\n // Merge with existing filter\n if (request.filter) {\n request.filter = {\n logic: 'and',\n filters: [...[request.filter], ...filters],\n };\n } else {\n request.filter = {\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: filters,\n };\n }\n\n return request;\n }\n\n //#endregion\n}\n","import { Signal } from '@angular/core';\n\n/**\n * Base interface for lookup widget look components\n * All look components should implement this interface to ensure consistency\n */\nexport abstract class LookupWidgetLookBase {\n abstract refresh(): void;\n abstract focus(): void;\n abstract clear(): void;\n}\n\n\n","import { AXDataSource, AXDataSourceFilterOption, AXDataSourceSortOption, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXSearchBoxComponent } from '@acorex/components/search-box';\nimport { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPMultiLanguageString, AXPMultiLanguageStringResolverService } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n linkedSignal,\n output,\n Signal,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { get } from 'lodash-es';\nimport { LookupWidgetLookBase } from './lookup-widget-look-base.interface';\n\n@Component({\n selector: 'axp-lookup-widget-select',\n template: `\n @if (dataSource()) {\n <div class=\"ax-flex ax-items-center ax-gap-1 ax-w-full\">\n <ax-select-box\n #selectBox\n class=\"ax-flex-1 ax-min-w-0\"\n [placeholder]=\"('@general:widgets.lookup.placeholder' | translate | async)!\"\n [dataSource]=\"dataSource()!\"\n [ngModel]=\"selectedItemsValue()\"\n [textField]=\"displayFieldValue()\"\n [valueField]=\"valueFieldValue()\"\n [disabled]=\"disabledValue()\"\n [multiple]=\"multipleValue()\"\n (onValueChanged)=\"handleValueChanged($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button ></ax-clear-button>\n }\n <ax-search-box\n [placeholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async)!\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n @for (validation of validationRulesValue(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-select-box>\n \n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n AXFormModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXValidationModule,\n AXSelectBoxModule,\n AXSearchBoxComponent,\n ],\n providers: [\n {\n provide: LookupWidgetLookBase,\n useExisting: AXPLookupWidgetSelectComponent,\n }\n ],\n})\nexport class AXPLookupWidgetSelectComponent extends LookupWidgetLookBase {\n private readonly mlsResolver = inject(AXPMultiLanguageStringResolverService);\n\n //#region ---- Inputs ----\n\n entityDef = input.required<Signal<AXPEntity | null>>();\n customFilter = input.required<Signal<AXDataSourceFilterOption | null>>();\n selectedItems = input.required<Signal<any[]>>();\n displayField = input.required<Signal<string>>();\n valueField = input.required<Signal<string>>();\n disabled = input.required<Signal<boolean | string>>();\n multiple = input.required<Signal<boolean>>();\n validationRules = input.required<Signal<any[]>>();\n hasClearButton = input<boolean>(false);\n allowCreate = input<'none' | 'full' | 'quick'>('none');\n\n //#endregion\n\n //#region ---- Outputs ----\n\n valueChanged = output<any[] | null>();\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected selectBox = viewChild<AXSelectBoxComponent>('selectBox');\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n // Unwrap input signals\n protected selectedItemsValue = linkedSignal(() => this.selectedItems()());\n protected displayFieldValue = computed(() => this.displayField()());\n protected valueFieldValue = computed(() => this.valueField()());\n protected disabledValue = computed(() => this.disabled()());\n protected multipleValue = computed(() => this.multiple()());\n protected validationRulesValue = computed(() => this.validationRules()());\n\n /**\n * Get default sort order from entity's first list view\n */\n protected defaultSorts = computed<AXDataSourceSortOption[]>(() => {\n const entity = this.entityDef()();\n if (!entity) return [];\n\n // Get the first view from the list views (usually the \"all\" view)\n const firstView = entity.interfaces?.master?.list?.views?.[0];\n if (!firstView?.sorts || firstView.sorts.length === 0) {\n return [];\n }\n\n // Convert AXPQuerySort[] (with 'name') to AXDataSourceSortOption[] (with 'field')\n return firstView.sorts.map((sort) => ({\n field: sort.name,\n dir: sort.dir,\n }));\n });\n\n /**\n * Create data source from entity definition\n */\n dataSource = computed<AXDataSource | null>(() => {\n const entity = this.entityDef()();\n if (!entity) return null;\n\n const defaultSorts = this.defaultSorts();\n\n return new AXDataSource({\n byKey: async (key: any) => {\n const func = entity.queries?.byKey?.execute as Function;\n if (!func) {\n return null;\n }\n const row = await func(key);\n return this.applyResolvedDisplayField(row, this.displayField()());\n },\n load: async (e: any) => {\n const func = entity.queries?.list?.execute as Function;\n if (!func || typeof func !== 'function') {\n throw new Error(`Entity ${entity.name} does not have a list query`);\n }\n this.mergeFilter(e, this.customFilter()());\n\n // Apply default sort order if no sort is already specified\n if (defaultSorts.length > 0 && (!e.sort || e.sort.length === 0)) {\n e.sort = defaultSorts;\n }\n\n const result = await func(e);\n const field = this.displayField()();\n if (result?.items?.length) {\n return {\n ...result,\n items: result.items.map((item: any) => this.applyResolvedDisplayField(item, field)),\n };\n }\n return result;\n },\n pageSize: 10,\n key: 'id',\n });\n });\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private applyResolvedDisplayField(item: any, field: string): any {\n if (item == null) {\n return item;\n }\n const raw = get(item, field);\n if (raw != null && typeof raw === 'object' && !Array.isArray(raw)) {\n return { ...item, [field]: this.mlsResolver.resolve(raw as AXPMultiLanguageString) };\n }\n return item;\n }\n\n /**\n * Merge custom filter into data source query\n */\n private mergeFilter(request: any, filter: AXDataSourceFilterOption | null | undefined): void {\n if (!filter) {\n return;\n }\n if (request.filter) {\n request.filter = {\n logic: 'and',\n filters: [...[request.filter], ...(filter.filters ?? [])],\n };\n } else {\n request.filter = filter;\n }\n }\n\n //#endregion\n\n //#region ---- Focus Management ----\n\n private shouldFocus = signal(false);\n\n #focusEffect = effect(() => {\n const shouldFocus = this.shouldFocus();\n if (!shouldFocus) {\n return;\n }\n\n const selectBox = this.selectBox();\n if (selectBox) {\n try {\n selectBox.focus();\n this.shouldFocus.set(false);\n } catch (error) {\n // Error focusing select box\n }\n }\n });\n\n focus(): void {\n this.shouldFocus.set(true);\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleValueChanged(e: AXValueChangedEvent): void {\n if (e.isUserInteraction) {\n const items = (e.component as AXSelectBoxComponent).selectedItems;\n this.valueChanged.emit(items);\n }\n }\n\n //#endregion\n\n\n clear(): void {\n this.valueChanged.emit(null);\n }\n\n refresh(): void {\n this.clear();\n this.dataSource()?.refresh();\n }\n\n\n}\n\n","import { AXDataSourceFilterOption, AXFocusEvent, AXHtmlEvent, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPMultiLanguageString, AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n Signal,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { get } from 'lodash-es';\nimport { AXPEntityDataSelectorService } from '../entity-data-selector.service';\nimport { LookupWidgetLookBase } from './lookup-widget-look-base.interface';\n\n@Component({\n selector: 'axp-lookup-widget-tagbox',\n template: `\n <ax-tag-box\n #tagBoxComponent\n [tagTemplate]=\"tagTemplate\"\n [ngModel]=\"selectedItemsValue()\"\n [textField]=\"displayFieldValue()\"\n [valueField]=\"valueFieldValue()\"\n (onValueChanged)=\"handleValueChanged($event)\"\n [placeholder]=\"selectedItemsValue().length ? '' : ('@general:widgets.lookup.placeholder' | translate | async)!\"\n [addOnEnter]=\"false\"\n [addOnComma]=\"false\"\n [disabled]=\"disabledValue()\"\n (onKeyDown)=\"handleKeyDown($event)\"\n (onKeyUp)=\"handleKeyUp($event)\"\n (onBlur)=\"handleBlur($event)\"\n >\n @for (validation of validationRulesValue(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (selectedItemsValue().length > 1 || hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLoadingValue() || disabledValue()\"\n (onClick)=\"handleOpenSelector($event)\"\n >\n @if (isLoadingValue()) {\n <ax-loading></ax-loading>\n } @else {\n <ax-icon icon=\"far fa-search\"> </ax-icon>\n }\n </ax-button>\n </ax-suffix>\n </ax-tag-box>\n <ng-template #tagTemplate let-item let-index=\"index\">\n <div class=\"ax-inline-flex ax-items-center ax-gap-1.5 ax-rounded-md ax-px-3 ax-py-1 ax-text-sm ax-surface\">\n <span>{{ getDisplayRaw(item) | axpResolveMultiLanguageString }}</span>\n <button type=\"button\" (click)=\"tagBoxComponent.removeItem(index)\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXValidationModule,\n AXFormModule,\n AXTagBoxModule,\n AXTranslationModule,\n AXPResolveMultiLanguageStringPipe,\n ],\n providers: [\n {\n provide: LookupWidgetLookBase,\n useExisting: AXPLookupWidgetTagboxComponent,\n },\n ],\n})\nexport class AXPLookupWidgetTagboxComponent extends LookupWidgetLookBase {\n //#region ---- Services & Dependencies ----\n\n protected readonly formatService = inject(AXFormatService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly entityDataSelectorService = inject(AXPEntityDataSelectorService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n selectedItems = input.required<Signal<any[]>>();\n displayField = input.required<Signal<string>>();\n valueField = input.required<Signal<string>>();\n displayFormat = input<Signal<string | undefined>>();\n disabled = input.required<Signal<boolean | string>>();\n multiple = input.required<Signal<boolean>>();\n isLoading = input.required<Signal<boolean>>();\n validationRules = input.required<Signal<any[]>>();\n hasClearButton = input<boolean>(false);\n allowCreate = input<'none' | 'full' | 'quick'>('none');\n\n // Entity and configuration data (for showSelector and searchByValue)\n entityDef = input.required<Signal<AXPEntity | null>>();\n customFilter = input.required<Signal<AXDataSourceFilterOption | null>>();\n columns = input.required<Signal<string[]>>();\n parentFilters = input<AXDataSourceFilterOption | null>(null);\n\n // Business logic callbacks\n onSetLoading = input.required<(loading: boolean) => void>();\n\n //#endregion\n\n //#region ---- Outputs ----\n\n valueChanged = output<any[]>();\n\n //#endregion\n\n //#region ---- Internal State ----\n\n protected searchTerm = signal<string>('');\n isOpen = signal(false);\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected tagBox = viewChild<AXTagBoxComponent>('tagBoxComponent');\n\n //#endregion\n\n //#region ---- Focus Management ----\n\n private shouldFocus = signal(false);\n\n #focusEffect = effect(() => {\n const shouldFocus = this.shouldFocus();\n if (!shouldFocus) {\n return;\n }\n\n const tagBox = this.tagBox();\n if (tagBox) {\n try {\n tagBox.focus();\n this.shouldFocus.set(false);\n } catch (error) {\n // Error focusing tag box\n }\n }\n });\n\n focus(): void {\n this.shouldFocus.set(true);\n }\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected tagBoxComponent = computed(() => this.tagBox());\n\n // Unwrap input signals\n protected selectedItemsValue = computed(() => this.selectedItems()());\n protected displayFieldValue = computed(() => this.displayField()());\n protected valueFieldValue = computed(() => this.valueField()());\n protected displayFormatValue = computed(() => this.displayFormat()?.());\n protected disabledValue = computed(() => this.disabled()());\n protected multipleValue = computed(() => this.multiple()());\n protected isLoadingValue = computed(() => this.isLoading()());\n protected validationRulesValue = computed(() => this.validationRules()());\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleKeyDown(e: AXHtmlEvent): void {\n const keyEvent = e.nativeEvent as KeyboardEvent;\n if (keyEvent.code === 'Enter' || keyEvent.code === 'NumpadEnter') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n }\n }\n\n protected handleValueChanged(e: AXValueChangedEvent): void {\n if (e.isUserInteraction) {\n this.valueChanged.emit(e.value);\n }\n }\n\n protected async handleKeyUp(e: AXHtmlEvent): Promise<void> {\n const keyEvent = e.nativeEvent as KeyboardEvent;\n const searchValue = this.getInputValue();\n this.searchTerm.set(searchValue);\n\n if ((keyEvent.code == 'Enter' || keyEvent.code == 'NumpadEnter') && searchValue) {\n const onSetLoading = this.onSetLoading();\n const multiple = this.multiple()();\n const currentItems = this.selectedItems()();\n\n onSetLoading(true);\n const result = await this.searchByValue(searchValue);\n if (result?.total === 1 && result?.items?.length === 1) {\n const singleItem = result.items[0];\n const valueField = this.valueField()();\n const newId = get(singleItem, valueField);\n\n if (multiple) {\n const exists = currentItems.some((item) => get(item, valueField) === newId);\n const newItems = exists ? currentItems : [...currentItems, singleItem];\n this.valueChanged.emit(newItems);\n } else {\n this.valueChanged.emit([singleItem]);\n }\n this.clear();\n } else {\n await this.showSelector(searchValue);\n }\n onSetLoading(false);\n }\n if (keyEvent.code == 'ArrowDown') {\n await this.showSelector(searchValue);\n }\n }\n\n protected handleBlur(e: AXFocusEvent): void {\n setTimeout(() => {\n if (!this.isOpen()) {\n this.clear();\n }\n }, 100);\n }\n\n protected async handleOpenSelector(_e?: unknown): Promise<void> {\n const searchTerm = this.searchTerm();\n this.isOpen.set(true);\n await this.showSelector(searchTerm);\n // isOpen will be set to false by showSelector in finally block\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n protected getDisplayRaw(item: any): string | AXPMultiLanguageString {\n if (!item) {\n return '';\n }\n\n const template = this.displayFormatValue();\n if (template) {\n const formatted = this.formatService.format(template, 'string', item);\n if (formatted) {\n return formatted;\n }\n }\n\n const raw = get(item, this.displayFieldValue());\n if (raw == null) {\n return '';\n }\n if (typeof raw === 'string' || typeof raw === 'number' || typeof raw === 'boolean') {\n return String(raw);\n }\n if (typeof raw === 'object' && !Array.isArray(raw)) {\n return raw as AXPMultiLanguageString;\n }\n return String(raw);\n }\n\n /**\n * Get current input value from tag box\n */\n getInputValue(): string {\n return this.tagBox()?.inputValue() ?? '';\n }\n\n /**\n * Set isOpen state (called by parent after selector closes)\n */\n setIsOpen(value: boolean): void {\n this.isOpen.set(value);\n }\n\n //#endregion\n\n //#region ---- Business Logic Methods ----\n\n /**\n * Search for items by value\n */\n protected async searchByValue(value: string): Promise<any> {\n const entity = this.entityDef()();\n if (!entity) return null;\n\n const searchFields = entity.properties.filter((p) => p.options?.filter?.inline?.enabled);\n\n const inlineFilters: AXDataSourceFilterOption = {\n field: null as any,\n logic: 'or',\n operator: null as any,\n filters: [],\n };\n\n if (value && searchFields.length > 0) {\n searchFields.forEach((p) => {\n inlineFilters.filters?.push({\n field: p.name,\n operator: { type: 'contains' },\n value,\n });\n });\n }\n\n const func = entity.queries?.list?.execute as Function;\n if (!func || typeof func !== 'function') {\n throw new Error(`Entity ${entity.name} does not have a list query`);\n }\n return await func({ filter: inlineFilters, take: 10 });\n }\n\n /**\n * Show entity data selector popup\n */\n protected async showSelector(initialSearchTerm?: string): Promise<void> {\n this.isOpen.set(true);\n\n const searchValue = initialSearchTerm?.trim() ?? '';\n const searchTerm = searchValue.length > 0 ? searchValue : undefined;\n\n const entity = this.entityDef()();\n if (!entity) return;\n\n // Extract current selected item IDs to pre-select them in the data selector\n const selectedItemIds = this.selectedItems()()\n .map((item) => get(item, this.valueField()()))\n .filter((id) => id != null);\n\n try {\n const result = await this.entityDataSelectorService.open({\n entity,\n title: `${this.translateService.translateSync(entity.formats.plural ?? '')}`,\n allowMultiple: this.multiple()(),\n filters: this.customFilter()(),\n parentFilters: this.parentFilters(),\n columns: this.columns()(),\n allowCreate: this.allowCreate(),\n initialSearchTerm: searchTerm,\n selectedItemIds: selectedItemIds.length > 0 ? selectedItemIds : undefined,\n });\n\n if (result && 'items' in result) {\n this.valueChanged.emit(result.items);\n }\n } catch (error) {\n console.error('Error opening entity data selector:', error);\n } finally {\n this.isOpen.set(false);\n this.focus();\n }\n }\n\n //#endregion\n\n clear(): void {\n this.tagBox()?.inputValue.set('');\n this.searchTerm.set('');\n }\n\n refresh(): void {\n this.clear();\n }\n}\n","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPEntity, AXPQueryFilter } from '@acorex/platform/common';\nimport {\n AXPMultiLanguageString,\n AXPMultiLanguageStringResolverService,\n extractValue,\n setSmart,\n} from '@acorex/platform/core';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Injector,\n computed,\n effect,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { castArray, get, isEmpty, isEqual, isNil, set } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPEntityService } from '../../entity.service';\nimport { AXPEntityDataSelectorService } from './entity-data-selector.service';\nimport { LookupWidgetLookBase } from './looks/lookup-widget-look-base.interface';\nimport { AXPLookupWidgetSelectComponent } from './looks/lookup-widget-select.component';\nimport { AXPLookupWidgetTagboxComponent } from './looks/lookup-widget-tagbox.component';\nimport { AXPLookupWidgetLookType } from './lookup-widget.types';\n\n@Component({\n selector: 'axp-lookup-widget-edit',\n template: `\n @if (entityDef()) {\n <div class=\"ax-flex ax-items-center ax-gap-1 ax-w-full\">\n @switch (look()) {\n @case ('select') {\n <axp-lookup-widget-select\n class=\"ax-flex-1 ax-min-w-0\"\n [entityDef]=\"entityDef\"\n [customFilter]=\"customFilter\"\n [selectedItems]=\"selectedItems\"\n [displayField]=\"displayField\"\n [valueField]=\"valueField\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n [validationRules]=\"validationRules\"\n [hasClearButton]=\"hasClearButton()\"\n [allowCreate]=\"allowCreate()\"\n (valueChanged)=\"handleComponentValueChanged($event)\"\n />\n }\n @default {\n <axp-lookup-widget-tagbox\n class=\"ax-flex-1 ax-min-w-0\"\n [selectedItems]=\"selectedItems\"\n [displayField]=\"displayField\"\n [valueField]=\"valueField\"\n [displayFormat]=\"displayFormat\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n [isLoading]=\"isLoading\"\n [validationRules]=\"validationRules\"\n [hasClearButton]=\"hasClearButton()\"\n [allowCreate]=\"allowCreate()\"\n [entityDef]=\"entityDef\"\n [customFilter]=\"customFilter\"\n [columns]=\"columns\"\n [parentFilters]=\"filter\"\n [onSetLoading]=\"setLoading.bind(this)\"\n (valueChanged)=\"handleComponentValueChanged($event)\"\n />\n }\n }\n @if (allowCreate() === 'quick' || allowCreate() === 'full') {\n <div class=\"ax-sm\">\n <ax-button\n color=\"primary\"\n look=\"twotone\"\n [disabled]=\"disabled() || isLoading()\"\n (onClick)=\"handleCreateClick($event)\"\n [title]=\"'@general:actions.create.title' | translate | async\"\n >\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPLookupWidgetSelectComponent,\n AXPLookupWidgetTagboxComponent,\n ],\n})\nexport class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent<any> {\n //#region ---- Services & Dependencies ----\n\n protected readonly injector = inject(Injector);\n protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n protected readonly entityService = inject(AXPEntityService);\n protected readonly entityDataSelectorService = inject(AXPEntityDataSelectorService);\n private readonly mlsResolver = inject(AXPMultiLanguageStringResolverService);\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected componentLook = viewChild(LookupWidgetLookBase);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected expose = computed<string | undefined | any[]>(() => this.options()['expose'] as string);\n protected entity = computed<string>(() => this.options()['entity'] as string);\n protected disabled = computed<string | boolean>(() =>\n this.filterMode() ? false : (this.options()['disabled'] as string | boolean),\n );\n protected columns = computed<string[]>(() => (this.options()['columns'] as string[]) ?? []);\n protected textField = computed<string>(() => (this.options()['textField'] as string) ?? '');\n protected hasClearButton = computed<boolean>(\n () => (!this.filterMode() && (this.options()['hasClearButton'] as boolean)) ?? false,\n );\n protected customFilter = computed<AXDataSourceFilterOption>(\n () => this.options()['filter'] as AXDataSourceFilterOption,\n );\n protected filterMode = computed<boolean>(() => this.options()['filterMode'] as boolean);\n\n protected multiple = computed(() => (this.options()['multiple'] ?? false) as boolean);\n protected look = computed<AXPLookupWidgetLookType>(\n () => (this.options()['look'] as AXPLookupWidgetLookType) ?? 'lookup',\n );\n\n protected defaultTextField = computed<string>(() => {\n const list = ['title', 'name', 'code', 'description'];\n\n const textField = list.find((c) => this.entityDef()?.properties.find((p) => p.name == c)) ?? 'title';\n return textField;\n });\n\n protected displayField = computed<string>(() => {\n if (this.textField()) {\n return this.textField();\n }\n return this.defaultTextField();\n });\n\n protected allowCreate = computed<'none' | 'full' | 'quick'>(\n () => (this.options()['allowCreate'] as 'none' | 'full' | 'quick') ?? 'none',\n );\n\n protected valueField = computed<string>(() => this.entityDef()?.properties.find((c) => c.name == 'id')?.name ?? 'id');\n\n protected displayFormat = computed<string | undefined>(() => {\n const template = this.options()['displayFormat'] as string | undefined;\n return template ? template.replace(/\\{/g, '{{').replace(/\\}/g, '}}') : undefined;\n });\n\n //#endregion\n\n protected conditions?: AXPQueryFilter[];\n\n protected filter: AXDataSourceFilterOption | null;\n\n protected entityDef = signal<AXPEntity | null>(null);\n\n protected selectedItems = signal<any[]>([]);\n protected initialItems = signal<boolean>(false);\n protected initialized = signal<boolean>(false);\n protected previousValue = signal<any>(undefined);\n\n protected isLoading = signal(false);\n\n #efEntity = effect(async () => {\n const [module, entity] = this.entity().split('.');\n this.entityDef.set(await this.entityResolver.resolve(module, entity));\n });\n\n private hasValue = (value: any) => (Array.isArray(value) && !isEmpty(value)) || !isNil(value);\n\n #efValue = effect(() => {\n const currentValue = this.getValue();\n const prevValue = this.previousValue();\n const isInitialized = this.initialized();\n\n // Check if value has actually changed\n const valueChanged = !isEqual(currentValue, prevValue);\n\n // Determine if we should update:\n // 1. First initialization with a value\n // 2. Value becomes empty after initialization\n // 3. Value changes after initialization (handles discard scenario)\n const shouldUpdate =\n (!isInitialized && this.hasValue(currentValue)) ||\n (isInitialized && !this.hasValue(currentValue)) ||\n (isInitialized && valueChanged);\n\n if (shouldUpdate) {\n this.initialized.set(true);\n this.previousValue.set(currentValue);\n if (!isNil(currentValue)) {\n this.findByValue();\n } else {\n this.clear();\n }\n }\n });\n\n private async findByValue() {\n this.isLoading.set(true);\n const rawValue = this.getValue();\n // When multiple is true, ensure we always work with arrays\n const values = this.multiple()\n ? castArray(this.filterMode() ? rawValue.value : rawValue)\n : [rawValue].filter((v) => v != null);\n\n if (!values.length) {\n this.setItems([]);\n\n this.isLoading.set(false);\n return;\n }\n\n try {\n // Use entityService which handles entity resolution lazily and has fallback to CRUD service\n const entityKey = this.entity();\n const entityDataAccessor = this.entityService.withEntity(entityKey).data();\n\n if (this.multiple()) {\n const items = await Promise.all(\n values\n .map((value) => extractValue(value, this.valueField()))\n .filter((id) => id != null)\n .map((id) => entityDataAccessor.byKey(id)),\n );\n // Filter out null/undefined results\n const validItems = items.filter((item) => item != null);\n this.setItems(validItems);\n } else {\n const id = extractValue(this.filterMode() ? values[0].value : values[0], this.valueField());\n if (id != null) {\n const item = await entityDataAccessor.byKey(id);\n this.setItems(item != null ? [item] : []);\n } else {\n this.setItems([]);\n }\n }\n } catch (error) {\n console.error('[LookupWidget] findByValue() error:', error);\n this.setItems([]);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n //#region ---- Event Handlers from Dumb Components ----\n\n protected handleComponentValueChanged(items: any[] | null): void {\n this.setItems(items ?? []);\n }\n\n protected async handleCreateClick(_e: AXClickEvent): Promise<void> {\n const entity = this.entityDef();\n if (!entity || !entity.commands?.create?.execute) return;\n\n const mode = this.allowCreate();\n if (mode !== 'full' && mode !== 'quick') return;\n\n await this.executeCreate(mode);\n }\n\n private async executeCreate(mode: 'full' | 'quick'): Promise<void> {\n const entity = this.entityDef();\n if (!entity || !entity.commands?.create?.execute) return;\n\n this.isLoading.set(true);\n try {\n const createdItem = await this.entityDataSelectorService.executeEntityCreate(entity, mode);\n if (createdItem) {\n const currentItems = this.selectedItems();\n const valueField = this.valueField();\n const newId = get(createdItem, valueField);\n\n if (this.multiple()) {\n const exists = currentItems.some((item: any) => get(item, valueField) === newId);\n const newItems = exists ? currentItems : [...currentItems, createdItem];\n this.setItems(newItems);\n } else {\n this.setItems([createdItem]);\n }\n }\n } catch (error) {\n console.error('[LookupWidget] Create failed:', error);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- Business Logic Methods (Passed to Dumb Components) ----\n\n protected setLoading = (loading: boolean) => {\n this.isLoading.set(loading);\n };\n\n protected setItems = (items: any[]) => {\n // Ensure items is always an array\n items = castArray(items);\n\n // Filter out null/undefined items\n items = items.filter((item) => item != null);\n\n // Normalize phones/emails from repeater nested structure to { value: string }\n items = items.map((item) => this.entityDataSelectorService.normalizeItemContactArrays(item));\n\n const displayField = this.displayField();\n items = items.map((item) => {\n const raw = get(item, displayField);\n if (raw != null && typeof raw === 'object' && !Array.isArray(raw)) {\n return { ...item, [displayField]: this.mlsResolver.resolve(raw as AXPMultiLanguageString) };\n }\n return item;\n });\n\n this.selectedItems.set(items);\n //\n const keys = items.map((item) => get(item, this.valueField()));\n const text = items.map((item) => this.mlsResolver.resolve(get(item, displayField) as AXPMultiLanguageString));\n //\n // extract data from valueField and set context by expose path\n if (this.expose()) {\n this.expoesItems();\n }\n const newValue = this.singleOrMultiple(keys);\n if (this.filterMode()) {\n this.setValue({\n value: newValue,\n displayText: text,\n operation: {\n type: this.multiple() ? 'in' : 'equal',\n },\n });\n } else {\n this.setValue(newValue);\n }\n };\n\n /**\n * Update expose data for empty state\n */\n private expoesItems(): void {\n const exposeValue = castArray(this.expose());\n const itemToExpose: any = {};\n const items = this.selectedItems();\n const isEmpty = !items || items.length === 0;\n\n // If items are empty, group expose configs by parent path and set parent to null\n if (isEmpty) {\n const parentPaths = new Set<string>();\n\n exposeValue.forEach((i) => {\n if (typeof i === 'string') {\n // For string expose, the path itself is the target\n const pathParts = i.split('.');\n if (pathParts.length > 1) {\n // Extract parent path (everything except the last part)\n const parentPath = pathParts.slice(0, -1).join('.');\n parentPaths.add(parentPath);\n } else {\n // Single level path, set directly to null\n setSmart(itemToExpose, i, null);\n }\n } else {\n // For object expose, extract parent path from target\n const pathParts = i.target.split('.');\n if (pathParts.length > 1) {\n // Extract parent path (everything except the last part)\n const parentPath = pathParts.slice(0, -1).join('.');\n parentPaths.add(parentPath);\n } else {\n // Single level path, set directly to null\n setSmart(itemToExpose, i.target, null);\n }\n }\n });\n\n // Set all parent paths to null\n parentPaths.forEach((parentPath) => {\n setSmart(itemToExpose, parentPath, null);\n });\n } else {\n // Normal processing when items exist\n exposeValue.forEach((i) => {\n if (typeof i == 'string') {\n const values = items.map((item) => set({}, i as string, get(item, i)));\n setSmart(itemToExpose, i, this.singleOrMultiple(values));\n } else {\n // extract data from item by source path and set context by target path\n const values = this.multiple()\n ? items.map((item) => set({}, i.source, get(item, i.source)))\n : items.map((item) => get(item, i.source));\n setSmart(itemToExpose, i.target, this.singleOrMultiple(values));\n }\n });\n }\n\n setTimeout(() => {\n this.contextService.patch(itemToExpose, true);\n });\n }\n\n private singleOrMultiple(values: any[]): any | any[] {\n return this.multiple() ? values : values[0];\n }\n\n //#region ---- Component Methods ----\n\n public refresh() {\n this.componentLook()?.refresh();\n }\n\n public clear() {\n this.componentLook()?.clear();\n }\n\n public focus(): void {\n this.componentLook()?.focus();\n }\n\n //#endregion\n}\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPColumnWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, inject, signal, viewChild } from '@angular/core';\nimport { castArray, get, isNil } from 'lodash-es';\nimport { AXPEntityDetailPopoverService } from '../../components';\n\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPMultiLanguageString, AXPMultiLanguageStringResolverService, AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\n\n@Component({\n templateUrl: './lookup-widget-column.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule, AXButtonModule, AXPopoverModule],\n inputs: ['rawValue', 'rowData'],\n})\nexport class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent<any> {\n\n //#region ---- Dependencies ----\n\n private readonly entityDetailPopoverService = inject(AXPEntityDetailPopoverService);\n private readonly mlResolver = inject(AXPMultiLanguageStringResolverService);\n private readonly formatService = inject(AXFormatService);\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected moreButton = viewChild<ElementRef>('moreButton');\n protected morePopover = viewChild<AXPopoverComponent>('morePopover');\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected host = inject(ElementRef);\n protected valueField: string = this.options['valueField'] ?? 'id';\n protected textField: string = this.options['textField'] ?? 'title';\n protected entity: string = this.options['entity'] ?? 'title';\n protected columnName: string = this.options['columnName'] ?? 'title';\n protected maxVisible: number = this.options['maxVisible'] ?? 2;\n protected displayFormat = computed<string | undefined>(() => {\n const template = this.options['displayFormat'] as string | undefined;\n return template ? template.replace(/\\{/g, '{{').replace(/\\}/g, '}}') : undefined;\n });\n\n protected displayField = computed<string>(() => {\n return this.textField ?? 'title';\n });\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected isMorePopoverOpen = signal(false);\n protected selectedItemIndex = signal<number>(-1);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected displayItems = computed(() =>\n isNil(this.rawValue)\n ? []\n : castArray(this.rawValue).map((item: any) => this.extractItem(item)).filter((c) => c != null),\n );\n\n protected allItems = computed(() => this.displayItems());\n\n protected visibleItems = computed(() => {\n const items = this.allItems();\n return items.slice(0, this.maxVisible);\n });\n\n protected hasMoreItems = computed(() => {\n return this.allItems().length > this.maxVisible;\n });\n\n protected remainingItemsCount = computed(() => {\n return this.allItems().length - this.maxVisible;\n });\n\n //#endregion\n\n\n\n\n //#region ---- Public Methods ----\n\n protected showMoreItems(): void {\n this.entityDetailPopoverService.hide();\n this.openMorePopover();\n }\n\n protected onMorePopoverOpenChange(event: any): void {\n this.isMorePopoverOpen.set(event);\n }\n\n protected async showItemDetail(item: any, index: number): Promise<void> {\n if (this.options['disableDetailPopover']) {\n return;\n }\n\n const columnData = this.rowData[this.columnName];\n const id = Array.isArray(columnData) ? columnData[index] : columnData;\n\n this.selectedItemIndex.set(index);\n this.closeMorePopover();\n\n // Show entity detail popover using the service\n await this.entityDetailPopoverService.show(this.host, {\n entity: this.entity,\n id: id,\n textField: this.textField,\n valueField: this.valueField,\n item\n });\n }\n\n\n\n protected handleItemClick(index: number): void {\n if (this.options['disableDetailPopover']) {\n return;\n }\n const items = this.allItems();\n if (index < items.length) {\n const item = items[index];\n this.showItemDetail(item, index);\n }\n }\n\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private openMorePopover(): void {\n if (this.morePopover() && this.moreButton()) {\n this.morePopover()!.target = this.moreButton()!.nativeElement;\n this.morePopover()!.open();\n this.isMorePopoverOpen.set(true);\n }\n }\n\n private closeMorePopover(): void {\n if (this.morePopover()) {\n this.morePopover()!.close();\n this.isMorePopoverOpen.set(false);\n }\n }\n\n private extractItem(item: any): any {\n if (isNil(item)) {\n return null;\n }\n if (typeof item === 'object') {\n return item;\n }\n return {\n [this.valueField]: item,\n [this.textField]: item,\n };\n }\n\n protected getDisplayRaw(item: any): string {\n if (isNil(item)) {\n return '';\n }\n const resolved = this.mlResolver.resolve(item as AXPMultiLanguageString);\n const template = this.displayFormat();\n if (template) {\n const formatted = this.formatService.format(template, 'string', resolved);\n }\n return resolved ?? '';\n }\n\n\n\n\n\n\n\n //#endregion\n}\n","<div class=\"ax-flex ax-gap-1 ax-items-center\">\n <!-- Visible lookup chips (first N items) -->\n @for (item of visibleItems(); track $index) {\n @let label = getDisplayRaw(item);\n <span [class.ax-cursor-pointer]=\"!options['disableDetailPopover']\"\n [class.hover:ax-text-primary]=\"!options['disableDetailPopover']\"\n [class.hover:ax-underline]=\"!options['disableDetailPopover']\" (click)=\"handleItemClick($index)\">\n {{ label }}\n </span>\n <!-- Separator between chips -->\n @if ($index < visibleItems().length - 1) { <span class=\"ax-text-muted\">•</span>\n }\n }\n <!-- No items -->\n @empty {\n <span class=\"ax-text-muted\">---</span>\n }\n\n <!-- Overflow: open popover with full list -->\n @if (hasMoreItems()) {\n <span\n class=\"ax-absolute ax-flex ax-items-center ax-end-0 ax-px-1 ax-cursor-pointer ax-h-full hover:ax-primary-lighter\"\n (click)=\"showMoreItems()\" #moreButton>\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n</div>\n\n<!-- Full list when user expands overflow -->\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[280px]\">\n <!-- Popover header -->\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold\">All {{ allItems().length }} Items</h3>\n </div>\n <!-- All items (scrollable) -->\n <div class=\"ax-max-h-64 ax-flex ax-flex-col ax-gap-3\">\n @for (item of allItems(); track $index) {\n @let label = getDisplayRaw(item);\n <span [class.ax-cursor-pointer]=\"!options['disableDetailPopover']\"\n [class.hover:ax-text-primary]=\"!options['disableDetailPopover']\"\n [class.hover:ax-underline]=\"!options['disableDetailPopover']\" (click)=\"showItemDetail(item, $index)\">\n {{ label }}\n </span>\n }\n </div>\n </div>\n</ax-popover>","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_ALLOW_CLEAR_PROPERTY,\n AXP_ALLOW_MULTIPLE_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n AXP_DATA_PROPERTY_GROUP,\n AXP_DISABLED_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\nexport const AXPLookupWidget: AXPWidgetConfig = {\n name: 'lookup-editor',\n title: 'Lookup',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n defaultFilterWidgetName: 'lookup-filter',\n type: 'editor',\n icon: 'fa-light fa-list-radio',\n properties: [\n AXP_DISABLED_PROPERTY,\n AXP_ALLOW_CLEAR_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'expose',\n title: 'Expose',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'expose',\n path: 'options.expose',\n type: AXPWidgetsCatalog.select,\n },\n },\n visible: true,\n },\n {\n name: 'entity',\n title: 'Entity',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'entity',\n path: 'options.entity',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n AXP_ALLOW_MULTIPLE_PROPERTY,\n {\n name: 'displayFormat',\n title: 'Display Format',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'displayFormat',\n path: 'options.displayFormat',\n type: AXPWidgetsCatalog.template,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./lookup-widget-view.component').then((c) => c.AXPLookupWidgetViewComponent),\n },\n edit: {\n component: () => import('./lookup-widget-edit.component').then((c) => c.AXPLookupWidgetEditComponent),\n },\n column: {\n component: () => import('./lookup-widget-column.component').then((c) => c.AXPLookupWidgetColumnComponent),\n },\n designer: {\n component: () => import('./lookup-widget-edit.component').then((c) => c.AXPLookupWidgetEditComponent),\n },\n },\n};\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\n/**\n * Unified reference format for all sources\n */\nexport interface AXPMultiSourceRef {\n /** Source identifier (e.g., 'site-location', 'inline-address', 'employee-user') */\n sourceKey: string;\n\n /** Entity ID if entity source (optional for inline sources) */\n refId?: string;\n\n /** Always present - used for display */\n displayName: string;\n\n /** Full data (for inline sources or denormalized entity data) */\n data?: any;\n\n /** Additional metadata */\n meta?: Record<string, unknown>;\n}\n\n/**\n * Stored value type\n * - Single: AXPMultiSourceRef\n * - Multiple: AXPMultiSourceRef[]\n */\nexport type AXPMultiSourceValue = AXPMultiSourceRef | AXPMultiSourceRef[];\n\n/**\n * Source type\n */\nexport enum AXPMultiSourceType {\n Entity = 'entity',\n Inline = 'inline',\n}\n\n/**\n * Single source item definition\n */\nexport interface AXPMultiSourceItem {\n /** Unique identifier for this source */\n key: string;\n\n /** Display information */\n title: string;\n icon?: string;\n badge?: string;\n description?: string;\n\n /** Source type */\n type: AXPMultiSourceType;\n\n /** For entity sources: entity name (e.g., 'LocationManagement.Location') */\n entity?: string;\n\n /** For inline sources: command key to execute for inline creation (e.g., 'Module.Entity:CreateInline') */\n inlineCreateCommand?: string;\n\n /** Optional: Filter/constraints for this source */\n filters?: AXDataSourceFilterOption;\n\n /** Optional: Custom search fields */\n searchFields?: string[];\n\n /** Display format template for results */\n displayFormat?: string;\n\n /** Value transformation (how to store this source) */\n valueTransform?: (item: any) => AXPMultiSourceRef;\n}\n\n/**\n * Complete source configuration (from provider)\n */\nexport interface AXPMultiSourceDefinition {\n /** Provider name */\n name: string;\n\n /** Display title */\n title: string;\n\n /** Sources array */\n sources: AXPMultiSourceItem[];\n\n /** Default search strategy */\n searchStrategy: 'unified' | 'tabs' | 'grouped';\n\n /** Default display format */\n defaultDisplayFormat?: string;\n\n /** Default multiple selection */\n defaultMultiple?: boolean;\n}\n\n/**\n * Widget options\n */\nexport interface AXPMultiSourceSelectorWidgetOptions {\n /** Provider name (required) */\n providerName: string;\n\n /** Override multiple selection (optional, uses provider default if not specified) */\n multiple?: boolean;\n\n /** Override display format (optional, uses provider default if not specified) */\n displayFormat?: string;\n\n /** Additional filters to apply to all sources */\n filters?: AXDataSourceFilterOption;\n\n /** Custom placeholder */\n placeholder?: string;\n\n /** Allow clear */\n allowClear?: boolean;\n}\n\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPMultiSourceDefinition } from './multi-source-selector-widget.types';\n\n/**\n * Injection token for multi-source definition providers\n */\nexport const AXP_MULTI_SOURCE_DEFINITION_PROVIDER = new InjectionToken<\n AXPMultiSourceDefinitionProvider[]\n>('AXP_MULTI_SOURCE_DEFINITION_PROVIDER');\n\n/**\n * Provider context for building definitions\n */\nexport class AXPMultiSourceDefinitionProviderContext {\n private definitions: Map<string, AXPMultiSourceDefinition> = new Map();\n\n addDefinition(definition: AXPMultiSourceDefinition): void {\n this.definitions.set(definition.name, definition);\n }\n\n getDefinitions(): AXPMultiSourceDefinition[] {\n return Array.from(this.definitions.values());\n }\n\n findDefinition(name: string): AXPMultiSourceDefinition | undefined {\n return this.definitions.get(name);\n }\n}\n\n/**\n * Provider interface\n */\nexport interface AXPMultiSourceDefinitionProvider {\n provide(context: AXPMultiSourceDefinitionProviderContext): Promise<void> | void;\n}\n\n/**\n * Service for managing multi-source definitions\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMultiSourceDefinitionProviderService {\n //#region ---- Services & Dependencies ----\n\n private readonly providers = inject(AXP_MULTI_SOURCE_DEFINITION_PROVIDER, { optional: true });\n\n //#endregion\n\n //#region ---- Properties ----\n\n private cache: Map<string, AXPMultiSourceDefinition> | null = null;\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n\n const context = new AXPMultiSourceDefinitionProviderContext();\n\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n await provider.provide(context);\n }\n }\n\n this.cache = new Map(context.getDefinitions().map((def) => [def.name, def]));\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Get definition by name\n */\n public async getDefinition(name: string): Promise<AXPMultiSourceDefinition> {\n await this.load();\n const definition = this.cache?.get(name);\n if (!definition) {\n throw new Error(`Multi-source definition '${name}' not found`);\n }\n return definition;\n }\n\n /**\n * Reload definitions (clear cache)\n */\n public async reload(): Promise<void> {\n this.cache = null;\n await this.load();\n }\n\n //#endregion\n}\n\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_ALLOW_CLEAR_PROPERTY,\n AXP_ALLOW_MULTIPLE_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n AXP_DATA_PROPERTY_GROUP,\n AXP_DISABLED_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\nexport const AXPMultiSourceSelectorWidget: AXPWidgetConfig = {\n name: 'multi-source-selector-editor',\n title: 'Multi-Source Selector',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n type: 'editor',\n icon: 'fa-light fa-layer-group',\n properties: [\n AXP_DISABLED_PROPERTY,\n AXP_ALLOW_CLEAR_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'providerName',\n title: 'Provider Name',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'providerName',\n path: 'options.providerName',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter provider name (e.g., party-selector)',\n },\n },\n },\n visible: true,\n },\n AXP_ALLOW_MULTIPLE_PROPERTY,\n {\n name: 'displayFormat',\n title: 'Display Format',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'displayFormat',\n path: 'options.displayFormat',\n type: AXPWidgetsCatalog.template,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () =>\n import('./multi-source-selector-widget-view.component').then(\n (c) => c.AXPMultiSourceSelectorWidgetViewComponent,\n ),\n },\n edit: {\n component: () =>\n import('./multi-source-selector-widget-edit.component').then(\n (c) => c.AXPMultiSourceSelectorWidgetEditComponent,\n ),\n },\n column: {\n component: () =>\n import('./multi-source-selector-widget-column.component').then(\n (c) => c.AXPMultiSourceSelectorWidgetColumnComponent,\n ),\n },\n designer: {\n component: () =>\n import('./multi-source-selector-widget-edit.component').then(\n (c) => c.AXPMultiSourceSelectorWidgetEditComponent,\n ),\n },\n },\n};\n\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPMultiSourceDefinition, AXPMultiSourceItem } from './multi-source-selector-widget.types';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\n/**\n * Search result item with source information\n */\nexport interface AXPMultiSourceSearchResultItem {\n source: AXPMultiSourceItem;\n item: any;\n}\n\n/**\n * Search result\n */\nexport interface AXPMultiSourceSearchResult {\n items: AXPMultiSourceSearchResultItem[];\n total: number;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPMultiSourceFederatedSearchService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Search across all enabled sources\n */\n async search(\n definition: AXPMultiSourceDefinition,\n searchTerm: string,\n filters?: AXDataSourceFilterOption,\n ): Promise<AXPMultiSourceSearchResult> {\n const enabledSources = definition.sources.filter((source) => {\n // Filter out disabled sources if needed\n return true;\n });\n\n const searchPromises = enabledSources.map((source) =>\n this.searchSource(source, searchTerm, filters),\n );\n\n const results = await Promise.all(searchPromises);\n\n // Combine all results\n const allItems: AXPMultiSourceSearchResultItem[] = [];\n let total = 0;\n\n results.forEach((result, index) => {\n const source = enabledSources[index];\n result.items.forEach((item) => {\n allItems.push({\n source,\n item,\n });\n });\n total += result.total;\n });\n\n return {\n items: allItems,\n total,\n };\n }\n\n /**\n * Search single source\n */\n async searchSource(\n source: AXPMultiSourceItem,\n searchTerm: string,\n filters?: AXDataSourceFilterOption,\n ): Promise<{ items: any[]; total: number }> {\n if (source.type === 'inline') {\n // Inline sources don't support search\n return {\n items: [],\n total: 0,\n };\n }\n\n if (!source.entity) {\n return {\n items: [],\n total: 0,\n };\n }\n\n try {\n const entity = await this.resolveEntity(source.entity);\n if (!entity) {\n return {\n items: [],\n total: 0,\n };\n }\n\n return await this.searchEntity(entity, source, searchTerm, filters);\n } catch (error) {\n console.error(`[MultiSourceFederatedSearch] Error searching source ${source.key}:`, error);\n return {\n items: [],\n total: 0,\n };\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Resolve entity from entity name string (e.g., 'LocationManagement.Location')\n */\n private async resolveEntity(entityName: string): Promise<AXPEntity | null> {\n try {\n const [module, entity] = entityName.split('.');\n return await this.entityResolver.resolve(module, entity);\n } catch (error) {\n console.error(`[MultiSourceFederatedSearch] Error resolving entity ${entityName}:`, error);\n return null;\n }\n }\n\n /**\n * Search entity using entity queries\n */\n private async searchEntity(\n entity: AXPEntity,\n source: AXPMultiSourceItem,\n searchTerm: string,\n filters?: AXDataSourceFilterOption,\n ): Promise<{ items: any[]; total: number }> {\n const listQuery = entity.queries?.list?.execute;\n if (!listQuery || typeof listQuery !== 'function') {\n return {\n items: [],\n total: 0,\n };\n }\n\n // Build search filters\n const searchFilters = this.buildSearchFilters(entity, source, searchTerm);\n\n // Merge with source filters and additional filters\n const allFilters = this.mergeFilters(source.filters, filters, searchFilters);\n\n // Execute query\n try {\n const result = await listQuery({\n filter: allFilters,\n take: 50, // Limit results per source\n skip: 0,\n });\n\n return {\n items: result.items || [],\n total: result.total || 0,\n };\n } catch (error) {\n console.error(`[MultiSourceFederatedSearch] Error executing query for ${source.key}:`, error);\n return {\n items: [],\n total: 0,\n };\n }\n }\n\n /**\n * Build search filters from search term\n */\n private buildSearchFilters(\n entity: AXPEntity,\n source: AXPMultiSourceItem,\n searchTerm: string,\n ): AXDataSourceFilterOption | null {\n if (!searchTerm || searchTerm.trim().length === 0) {\n return null;\n }\n\n const normalizedTerm = searchTerm.trim();\n\n // Use custom search fields if provided, otherwise use entity's searchable fields\n const searchFields = source.searchFields || this.getDefaultSearchFields(entity);\n\n if (searchFields.length === 0) {\n return null;\n }\n\n // Create OR filter for search fields\n const searchFieldFilters = searchFields.map((field) => ({\n field,\n value: normalizedTerm,\n operator: { type: 'contains' as const },\n }));\n\n if (searchFieldFilters.length === 1) {\n return searchFieldFilters[0];\n }\n\n return {\n field: null as any,\n logic: 'or',\n operator: null as any,\n filters: searchFieldFilters,\n };\n }\n\n /**\n * Get default searchable fields from entity\n */\n private getDefaultSearchFields(entity: AXPEntity): string[] {\n return (\n entity.properties\n ?.filter((p) => p.options?.filter?.inline?.enabled)\n .map((p) => p.name) || []\n );\n }\n\n /**\n * Merge multiple filters\n */\n private mergeFilters(\n ...filters: (AXDataSourceFilterOption | null | undefined)[]\n ): AXDataSourceFilterOption | null {\n const validFilters = filters.filter(\n (f): f is AXDataSourceFilterOption => f !== null && f !== undefined,\n );\n\n if (validFilters.length === 0) {\n return null;\n }\n\n if (validFilters.length === 1) {\n return validFilters[0];\n }\n\n return {\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: validFilters,\n };\n }\n\n //#endregion\n}\n\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { Injectable, inject } from '@angular/core';\nimport { signal } from '@angular/core';\nimport {\n AXPMultiSourceDefinition,\n AXPMultiSourceRef,\n AXPMultiSourceValue,\n} from './multi-source-selector-widget.types';\nimport { AXPMultiSourceDefinitionProviderService } from './multi-source-definition.provider';\n\n/**\n * Selector open configuration\n */\nexport interface AXPMultiSourceSelectorOpenConfig {\n definition: AXPMultiSourceDefinition;\n multiple: boolean;\n selectedValues?: AXPMultiSourceValue;\n filters?: AXDataSourceFilterOption;\n title?: string;\n}\n\n/**\n * Selector result\n */\nexport interface AXPMultiSourceSelectorResult {\n items: AXPMultiSourceRef[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPMultiSourceSelectorService {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly definitionService = inject(AXPMultiSourceDefinitionProviderService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Open selector popup by provider name\n */\n async openByProviderName(\n providerName: string,\n config: {\n multiple: boolean;\n selectedValues?: AXPMultiSourceValue;\n filters?: AXDataSourceFilterOption;\n title?: string;\n },\n ): Promise<AXPMultiSourceSelectorResult | null> {\n const definition = await this.definitionService.getDefinition(providerName);\n return this.open({\n definition,\n ...config,\n });\n }\n\n /**\n * Open selector popup\n */\n async open(config: AXPMultiSourceSelectorOpenConfig): Promise<AXPMultiSourceSelectorResult | null> {\n const component = await import('./multi-source-selector.component').then((c) => c.AXPMultiSourceSelectorComponent);\n\n const result = await this.popupService.open(component, {\n title: config.title || config.definition.title,\n size: 'lg',\n data: {\n config: signal(config),\n },\n });\n\n return result?.data || null;\n }\n\n //#endregion\n}\n\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core';\nimport {\n AXPMultiSourceDefinition,\n AXPMultiSourceItem,\n AXPMultiSourceRef,\n AXPMultiSourceType,\n} from './multi-source-selector-widget.types';\nimport { AXPMultiSourceSelectorOpenConfig } from './multi-source-selector.service';\nimport { AXPEntityDataSelectorService } from '../lookup-widget/entity-data-selector.service';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXTranslationService } from '@acorex/core/translation';\n\n/**\n * Multi-source selector popup component\n */\n@Component({\n selector: 'axp-multi-source-selector',\n template: `\n <div class=\"ax-flex ax-flex-col ax-h-full ax-overflow-hidden\">\n @if (definition().searchStrategy === 'tabs') {\n <div class=\"ax-flex ax-flex-col ax-flex-1 ax-overflow-hidden\">\n <ax-tabs [look]=\"'with-line'\" class=\"ax-px-4 ax-pt-4\">\n @for (source of definition().sources; track source.key) {\n <ax-tab-item\n [text]=\"(source.title | translate | async) || source.title\"\n [key]=\"source.key\"\n [active]=\"activeTabKey() === source.key\"\n (onClick)=\"handleTabClick(source)\"\n >\n @if (source.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"source.icon\"></ax-icon>\n </ax-prefix>\n }\n </ax-tab-item>\n }\n </ax-tabs>\n\n <div class=\"ax-flex-1 ax-p-4 ax-overflow-auto\">\n @if (activeSource()) {\n @if (activeSource()!.type === AXPMultiSourceType.Entity) {\n <div class=\"ax-text-center ax-py-8\">\n <ax-button\n color=\"primary\"\n [text]=\"('@general:actions.select.title' | translate | async) || 'Select'\"\n (onClick)=\"handleSelectFromSource(activeSource()!)\"\n ></ax-button>\n </div>\n } @else {\n <div class=\"ax-text-center ax-py-8 ax-text-muted\">\n Inline creation - Implementation pending\n </div>\n }\n }\n </div>\n </div>\n } @else {\n <div class=\"ax-p-4\">\n <div class=\"ax-text-muted\">\n Unified search strategy - Implementation in progress\n </div>\n <div class=\"ax-mt-4\">\n <p>Definition: {{ definition().title }}</p>\n <p>Multiple: {{ config().multiple }}</p>\n <p>Sources: {{ definition().sources.length }}</p>\n </div>\n </div>\n }\n </div>\n\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"('@general:actions.cancel.title' | translate | async) || 'Cancel'\"\n (onClick)=\"handleCancel()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"('@general:actions.select.title' | translate | async) || 'Select'\"\n [disabled]=\"selectedItems().length === 0\"\n (onClick)=\"handleConfirm()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXButtonModule, AXTabsModule, AXDecoratorModule, AXTranslationModule],\n})\nexport class AXPMultiSourceSelectorComponent extends AXBasePageComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly entityDataSelectorService = inject(AXPEntityDataSelectorService);\n private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected config = signal<AXPMultiSourceSelectorOpenConfig>({\n definition: {} as AXPMultiSourceDefinition,\n multiple: false,\n });\n\n protected definition = computed<AXPMultiSourceDefinition>(() => {\n return this.config().definition;\n });\n\n protected activeTabKey = signal<string | null>(null);\n protected activeSource = computed<AXPMultiSourceItem | null>(() => {\n const key = this.activeTabKey();\n if (!key) return null;\n return this.definition().sources.find((s) => s.key === key) || null;\n });\n\n protected selectedItems = signal<AXPMultiSourceRef[]>([]);\n\n protected readonly AXPMultiSourceType = AXPMultiSourceType;\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n protected override ngOnInit(): void {\n super.ngOnInit();\n\n // Set initial active tab to first source\n effect(() => {\n const def = this.definition();\n if (def.sources.length > 0 && !this.activeTabKey()) {\n this.activeTabKey.set(def.sources[0].key);\n }\n });\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleTabClick(source: AXPMultiSourceItem): void {\n this.activeTabKey.set(source.key);\n }\n\n protected async handleSelectFromSource(source: AXPMultiSourceItem): Promise<void> {\n if (source.type !== AXPMultiSourceType.Entity || !source.entity) {\n return;\n }\n\n try {\n // Resolve entity\n const [module, entityName] = source.entity.split('.');\n const entity = await this.entityResolver.resolve(module, entityName);\n\n if (!entity) {\n console.error(`[MultiSourceSelector] Entity ${source.entity} not found`);\n return;\n }\n\n // Translate title\n const title = await this.translationService.translateAsync(source.title);\n\n // Open entity selector\n const result = await this.entityDataSelectorService.open({\n entity,\n title,\n allowMultiple: this.config().multiple,\n filters: source.filters,\n searchFields: source.searchFields,\n });\n\n if (result?.items && result.items.length > 0) {\n // Transform items to AXPMultiSourceRef\n const refs: AXPMultiSourceRef[] = result.items.map((item) => {\n if (source.valueTransform) {\n return source.valueTransform(item);\n }\n // Default transform\n return {\n sourceKey: source.key,\n refId: item.id,\n displayName: item.title || item.name || item.code || String(item.id),\n data: item,\n };\n });\n\n // Update selected items\n if (this.config().multiple) {\n // Merge with existing selection\n const current = this.selectedItems();\n this.selectedItems.set([...current, ...refs]);\n } else {\n // Replace selection\n this.selectedItems.set(refs);\n }\n }\n } catch (error) {\n console.error('[MultiSourceSelector] Error opening entity selector:', error);\n }\n }\n\n protected handleCancel(): void {\n this.close();\n }\n\n protected handleConfirm(): void {\n this.close({\n items: this.selectedItems(),\n });\n }\n\n //#endregion\n}\n","import {\n AXClickEvent,\n AXFocusEvent,\n AXHtmlEvent,\n AXValueChangedEvent,\n} from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { castArray, get, isEmpty, isNil } from 'lodash-es';\nimport {\n AXPMultiSourceDefinition,\n AXPMultiSourceRef,\n AXPMultiSourceValue,\n} from './multi-source-selector-widget.types';\nimport { AXPMultiSourceDefinitionProviderService } from './multi-source-definition.provider';\nimport { AXPMultiSourceSelectorService } from './multi-source-selector.service';\n\n@Component({\n selector: 'axp-multi-source-selector-widget-edit',\n template: `\n @if (definition()) {\n <ax-tag-box\n #tagBoxComponent\n [tagTemplate]=\"tagTemplate\"\n [ngModel]=\"selectedItems()\"\n [textField]=\"'displayName'\"\n [valueField]=\"'id'\"\n (onValueChanged)=\"handleValueChange($event)\"\n [placeholder]=\"selectedItems().length ? '' : placeholderText()\"\n [addOnEnter]=\"false\"\n [addOnComma]=\"false\"\n [disabled]=\"disabled()\"\n (onKeyUp)=\"handleKeyUp($event)\"\n (onBlur)=\"handleOnBlur($event)\"\n >\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (selectedItems().length > 0 && allowClear()) {\n <ax-clear-button (click)=\"handleClearClick()\"></ax-clear-button>\n }\n\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLoading() || disabled()\"\n (onClick)=\"handleOnClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n } @else {\n <ax-icon icon=\"far fa-search\"> </ax-icon>\n }\n </ax-button>\n </ax-suffix>\n </ax-tag-box>\n <ng-template #tagTemplate let-item let-index=\"index\">\n <div class=\"ax-inline-flex ax-items-center ax-gap-1.5 ax-rounded-md ax-px-3 ax-py-1 ax-text-sm ax-surface\">\n <span>{{ getTagLabel(item) }}</span>\n <button type=\"button\" (click)=\"tagBoxComponent.removeItem(index)\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n </ng-template>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXValidationModule,\n AXFormModule,\n AXTagBoxModule,\n AXTranslationModule\n],\n})\nexport class AXPMultiSourceSelectorWidgetEditComponent extends AXPValueWidgetComponent<any> {\n //#region ---- Services & Dependencies ----\n\n protected readonly popupService = inject(AXPopupService);\n protected readonly definitionService = inject(AXPMultiSourceDefinitionProviderService);\n protected readonly selectorService = inject(AXPMultiSourceSelectorService);\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected tagBox = viewChild<AXTagBoxComponent>('tagBoxComponent');\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected providerName = computed<string>(() => (this.options()['providerName'] as string) ?? '');\n protected disabled = computed<boolean>(() => (this.options()['disabled'] as boolean) ?? false);\n protected multiple = computed<boolean>(() => {\n const def = this.definition();\n const optionMultiple = this.options()['multiple'] as boolean | undefined;\n return optionMultiple ?? def?.defaultMultiple ?? false;\n });\n protected allowClear = computed<boolean>(() => (this.options()['allowClear'] as boolean) ?? false);\n\n protected placeholderText = computed<string>(() => {\n const custom = this.options()['placeholder'] as string | undefined;\n if (custom) {\n return custom;\n }\n const def = this.definition();\n return def?.title || 'Select...';\n });\n\n protected searchTerm = signal<string | null>(null);\n protected selectedItems = signal<AXPMultiSourceRef[]>([]);\n protected isLoading = signal(false);\n protected isOpen = signal(false);\n\n protected definition = signal<AXPMultiSourceDefinition | null>(null);\n\n //#endregion\n\n //#endregion\n\n //#region ---- Effects ----\n\n private efProvider = effect(async () => {\n const providerName = this.providerName();\n if (!providerName) {\n this.definition.set(null);\n return;\n }\n\n try {\n const def = await this.definitionService.getDefinition(providerName);\n this.definition.set(def);\n } catch (error) {\n console.error(`[MultiSourceSelectorEdit] Error loading definition '${providerName}':`, error);\n this.definition.set(null);\n }\n });\n\n private efValue = effect(() => {\n const value = this.getValue();\n if (value) {\n this.findByValue();\n } else {\n this.clear();\n }\n });\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleOnClick(e: AXClickEvent) {\n this.showSelector();\n }\n\n protected handleValueChange(e: AXValueChangedEvent) {\n if (e.isUserInteraction) {\n if (isNil(e.value) || isEmpty(e.value)) {\n this.clear();\n } else {\n this.setValue(this.singleOrMultiple(e.value));\n }\n }\n }\n\n protected handleSearchInputChange(e: AXValueChangedEvent) {\n if (e.isUserInteraction) {\n this.searchTerm.set(e.value ?? '');\n }\n }\n\n protected handleOnBlur(e: AXFocusEvent) {\n setTimeout(() => {\n if (!this.isOpen()) {\n this.clearInput();\n }\n }, 100);\n }\n\n protected async handleKeyUp(e: AXHtmlEvent) {\n const keyEvent = e.nativeEvent as KeyboardEvent;\n const value = this.tagBox()?.inputValue()!;\n this.searchTerm.set(value);\n if ((keyEvent.code == 'Enter' || keyEvent.code == 'NumpadEnter') && value) {\n // For now, just open selector\n this.showSelector();\n }\n if (keyEvent.code == 'ArrowDown') {\n this.showSelector();\n }\n }\n\n protected handleClearClick() {\n this.clear();\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async findByValue() {\n this.isLoading.set(true);\n const rawValue = this.getValue();\n const values = this.multiple() ? castArray(rawValue) : [rawValue].filter((v) => v != null);\n\n if (values.length === 0) {\n this.setItems([]);\n this.isLoading.set(false);\n return;\n }\n\n // Convert values to AXPMultiSourceRef[] if needed\n const refs = values.map((v) => this.normalizeToRef(v));\n this.setItems(refs);\n this.isLoading.set(false);\n }\n\n private normalizeToRef(value: any): AXPMultiSourceRef {\n // If already AXPMultiSourceRef format\n if (value && value.sourceKey && value.displayName) {\n return value as AXPMultiSourceRef;\n }\n\n // If object with id, create ref\n if (typeof value === 'object' && value.id) {\n return {\n sourceKey: value.sourceKey || 'unknown',\n refId: value.id,\n displayName: value.displayName || value.title || value.name || String(value.id),\n data: value,\n };\n }\n\n // If primitive, create simple ref\n return {\n sourceKey: 'unknown',\n refId: String(value),\n displayName: String(value),\n };\n }\n\n private async showSelector() {\n this.isOpen.set(true);\n\n const def = this.definition();\n if (!def) {\n console.error('[MultiSourceSelectorEdit] Definition not loaded');\n this.isOpen.set(false);\n return;\n }\n\n const inlineSearchValue = (this.searchTerm() ?? '').trim();\n const initialSearchTerm = inlineSearchValue.length > 0 ? inlineSearchValue : undefined;\n\n // Extract current selected item IDs\n const selectedValues = this.selectedItems().length > 0 ? this.selectedItems() : undefined;\n\n try {\n const result = await this.selectorService.openByProviderName(this.providerName(), {\n multiple: this.multiple(),\n selectedValues,\n title: def.title,\n });\n\n if (result && 'items' in result) {\n const hadInitialSelection = selectedValues && selectedValues.length > 0;\n\n if (hadInitialSelection) {\n // Replace the selection\n this.setItems(result.items, false);\n } else {\n // Merge behavior\n const shouldMerge = this.multiple() && this.selectedItems().length > 0;\n this.setItems(result.items, shouldMerge);\n }\n }\n } catch (error) {\n console.error('[MultiSourceSelectorEdit] Error opening selector:', error);\n } finally {\n this.isOpen.set(false);\n this.tagBox()?.focus();\n }\n }\n\n private setItems(items: AXPMultiSourceRef[], mergeWithExisting: boolean = false) {\n items = castArray(items);\n items = items.filter((item) => item != null);\n\n if (items.length == 0) {\n if (!mergeWithExisting) {\n this.selectedItems.set([]);\n }\n return;\n }\n\n // If merging and multiple is enabled, combine with existing items\n if (mergeWithExisting && this.multiple()) {\n const existingItems = this.selectedItems();\n const existingKeys = new Set(\n existingItems.map((item) => `${item.sourceKey}:${item.refId || item.displayName}`),\n );\n const newItems = items.filter((item) => {\n const key = `${item.sourceKey}:${item.refId || item.displayName}`;\n return !existingKeys.has(key);\n });\n items = [...existingItems, ...newItems];\n }\n\n this.clearInput();\n this.selectedItems.set(items);\n\n // Convert to value format\n const value: AXPMultiSourceValue = this.multiple() ? items : items[0];\n this.setValue(value);\n }\n\n public refresh() {\n this.clear();\n // TODO: Refresh data source if needed\n }\n\n public clear() {\n this.setValue(null);\n this.clearInput();\n this.selectedItems.set([]);\n }\n\n private clearInput() {\n this.tagBox()?.inputValue.set('');\n this.searchTerm.set('');\n }\n\n protected getTagLabel(item: AXPMultiSourceRef): string {\n return item.displayName || String(item.refId || item.sourceKey);\n }\n\n private singleOrMultiple(values: any[]): any | any[] {\n return this.multiple() ? values : values[0];\n }\n\n //#endregion\n}\n\n","import { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { castArray, get, isNil } from 'lodash-es';\nimport { AXPMultiSourceRef } from './multi-source-selector-widget.types';\nimport { AXPMultiSourceDefinitionProviderService } from './multi-source-definition.provider';\nimport { AXPMultiSourceDefinition } from './multi-source-selector-widget.types';\n\n@Component({\n selector: 'axp-multi-source-selector-widget-view',\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else {\n @if (displayItems().length > 1) {\n @for (item of displayItems(); track $index) {\n <ax-badge class=\"ax-p-0.5 {{ badgeClass() }}\" [text]=\"item.text\"></ax-badge>\n }\n } @else if (displayItems().length == 1) {\n <ax-badge class=\"ax-p-0.5 {{ badgeClass() }}\" [text]=\"displayItems()[0].text\"></ax-badge>\n } @else {\n <span class=\"ax-text-muted\">---</span>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXLoadingModule, AXBadgeModule],\n})\nexport class AXPMultiSourceSelectorWidgetViewComponent extends AXPValueWidgetComponent<any> {\n //#region ---- Services & Dependencies ----\n\n protected readonly formatService = inject(AXFormatService);\n protected readonly definitionService = inject(AXPMultiSourceDefinitionProviderService);\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected providerName = computed<string>(() => (this.options()['providerName'] as string) ?? '');\n protected multiple = computed<boolean>(() => (this.options()['multiple'] as boolean) ?? false);\n protected badgeClass = computed<string>(() => (this.options()['badgeClass'] as string) ?? 'ax-accent1');\n protected displayFormat = computed<string | undefined>(() => {\n const template = this.options()['displayFormat'] as string | undefined;\n return template ? template.replace(/\\{/g, '{{').replace(/\\}/g, '}}') : undefined;\n });\n\n protected loading = signal(false);\n private definition = signal<AXPMultiSourceDefinition | null>(null);\n\n protected displayItems = signal<Array<{ id: string; text: string }>>([]);\n\n //#endregion\n\n //#region ---- Effects ----\n\n private efProvider = effect(async () => {\n const providerName = this.providerName();\n if (!providerName) {\n this.definition.set(null);\n return;\n }\n\n try {\n const def = await this.definitionService.getDefinition(providerName);\n this.definition.set(def);\n } catch (error) {\n console.error(`[MultiSourceSelectorView] Error loading definition '${providerName}':`, error);\n this.definition.set(null);\n }\n });\n\n private efDisplay = effect(async () => {\n const value = this.getValue();\n const def = this.definition();\n\n if (isNil(value) || !def) {\n this.displayItems.set([]);\n return;\n }\n\n const refs = this.multiple() ? castArray(value) : [value];\n const items = await Promise.all(refs.map((ref) => this.extractDisplayItem(ref, def)));\n\n this.displayItems.set(items.filter((item): item is { id: string; text: string } => item !== null));\n });\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async extractDisplayItem(ref: any, definition: AXPMultiSourceDefinition): Promise<{ id: string; text: string } | null> {\n if (!ref) {\n return null;\n }\n\n // If ref is already AXPMultiSourceRef format\n if (ref.sourceKey && ref.displayName) {\n return {\n id: ref.refId || ref.sourceKey,\n text: ref.displayName,\n };\n }\n\n // If ref is object with id, try to find source and get display name\n if (typeof ref === 'object' && ref.id) {\n // Try to find source by key if present\n const sourceKey = ref.sourceKey;\n if (sourceKey) {\n const source = definition.sources.find((s) => s.key === sourceKey);\n if (source) {\n const displayText = this.getDisplayText(ref, source);\n return {\n id: ref.id,\n text: displayText,\n };\n }\n }\n\n // Fallback: use displayName or title or id\n const displayText = ref.displayName || ref.title || ref.id || String(ref);\n return {\n id: ref.id,\n text: displayText,\n };\n }\n\n // If ref is primitive (string/number), return as is\n return {\n id: String(ref),\n text: String(ref),\n };\n }\n\n private getDisplayText(item: any, source: any): string {\n if (!item) {\n return '';\n }\n\n const template = source.displayFormat || this.displayFormat();\n if (template) {\n const formatted = this.formatService.format(template, 'string', item);\n if (formatted) {\n return formatted;\n }\n }\n\n // Fallback to common display fields\n return get(item, 'displayName') || get(item, 'title') || get(item, 'name') || String(item.id || item);\n }\n\n //#endregion\n}\n\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPColumnWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { castArray, get, isNil } from 'lodash-es';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPMultiSourceRef } from './multi-source-selector-widget.types';\nimport { AXPMultiSourceDefinitionProviderService } from './multi-source-definition.provider';\nimport { AXPMultiSourceDefinition } from './multi-source-selector-widget.types';\n\n@Component({\n selector: 'axp-multi-source-selector-widget-column',\n template: `\n @if (displayItems().length > 0) {\n <div class=\"ax-flex ax-flex-wrap ax-gap-1\">\n @for (item of visibleItems(); track item.id) {\n <ax-badge class=\"ax-p-0.5 ax-accent1\" [text]=\"item.text\"></ax-badge>\n }\n @if (hasMoreItems()) {\n <ax-badge class=\"ax-p-0.5 ax-accent2\" [text]=\"'+' + remainingItemsCount()\"></ax-badge>\n }\n </div>\n } @else {\n <span class=\"ax-text-muted\">---</span>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule],\n inputs: ['rawValue', 'rowData'],\n})\nexport class AXPMultiSourceSelectorWidgetColumnComponent extends AXPColumnWidgetComponent<any> {\n //#region ---- Services & Dependencies ----\n\n private readonly formatService = inject(AXFormatService);\n private readonly definitionService = inject(AXPMultiSourceDefinitionProviderService);\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected providerName: string = (this.options['providerName'] as string) ?? '';\n protected columnName: string = (this.options['columnName'] as string) ?? '';\n protected maxVisible: number = (this.options['maxVisible'] as number) ?? 2;\n protected displayFormat = computed<string | undefined>(() => {\n const template = this.options['displayFormat'] as string | undefined;\n return template ? template.replace(/\\{/g, '{{').replace(/\\}/g, '}}') : undefined;\n });\n\n private definition = signal<AXPMultiSourceDefinition | null>(null);\n\n //#endregion\n\n //#region ---- Constructor ----\n\n constructor() {\n super();\n void this.loadDefinition();\n }\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected displayItems = computed(() => {\n if (isNil(this.rawValue)) {\n return [];\n }\n\n const refs = castArray(this.rawValue);\n return refs\n .map((ref) => this.extractDisplayItem(ref))\n .filter((item): item is { id: string; text: string } => item !== null);\n });\n\n protected allItems = computed(() => this.displayItems());\n\n protected visibleItems = computed(() => {\n const items = this.allItems();\n return items.slice(0, this.maxVisible);\n });\n\n protected hasMoreItems = computed(() => {\n return this.allItems().length > this.maxVisible;\n });\n\n protected remainingItemsCount = computed(() => {\n return this.allItems().length - this.maxVisible;\n });\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async loadDefinition(): Promise<void> {\n if (!this.providerName) {\n return;\n }\n\n try {\n const def = await this.definitionService.getDefinition(this.providerName);\n this.definition.set(def);\n } catch (error) {\n console.error(`[MultiSourceSelectorColumn] Error loading definition '${this.providerName}':`, error);\n }\n }\n\n private extractDisplayItem(ref: any): { id: string; text: string } | null {\n if (!ref) {\n return null;\n }\n\n const def = this.definition();\n\n // If ref is already AXPMultiSourceRef format\n if (ref.sourceKey && ref.displayName) {\n return {\n id: ref.refId || ref.sourceKey,\n text: ref.displayName,\n };\n }\n\n // If ref is object with id\n if (typeof ref === 'object' && ref.id) {\n const sourceKey = ref.sourceKey;\n if (sourceKey && def) {\n const source = def.sources.find((s) => s.key === sourceKey);\n if (source) {\n const displayText = this.getDisplayText(ref, source);\n return {\n id: ref.id,\n text: displayText,\n };\n }\n }\n\n // Fallback\n const displayText = ref.displayName || ref.title || ref.id || String(ref);\n return {\n id: ref.id,\n text: displayText,\n };\n }\n\n // If ref is primitive\n return {\n id: String(ref),\n text: String(ref),\n };\n }\n\n private getDisplayText(item: any, source: any): string {\n if (!item) {\n return '';\n }\n\n const template = source.displayFormat || this.displayFormat();\n if (template) {\n const formatted = this.formatService.format(template, 'string', item);\n if (formatted) {\n return formatted;\n }\n }\n\n // Fallback to common display fields\n return get(item, 'displayName') || get(item, 'title') || get(item, 'name') || String(item.id || item);\n }\n\n //#endregion\n}\n\n","//#region ---- Imports ----\n\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\n//#endregion\n\n@Component({\n selector: 'axp-selector-structure-widget-column',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"ax-inline-flex ax-items-center ax-gap-2 ax-text-sm\" [title]=\"cellText()\">\n @if (previewIcon()) {\n <i [class]=\"previewIcon()\" aria-hidden=\"true\"></i>\n }\n <span>{{ cellText() }}</span>\n </span>\n `,\n})\nexport class AXPSelectorStructureWidgetColumnComponent extends AXPValueWidgetComponent {\n //#region ---- Computed ----\n\n protected identityField = computed(() => (this.options() as { identityField?: string })['identityField'] ?? 'name');\n protected textField = computed(() => (this.options() as { textField?: string })['textField'] ?? 'title');\n protected valueField = computed(() => (this.options() as { valueField?: string })['valueField'] ?? 'name');\n\n protected previewIcon = computed(() => (this.options() as { previewIcon?: string })['previewIcon']?.trim() ?? '');\n\n protected cellText = computed(() => {\n const rows = (this.getValue() as Record<string, unknown>[]) ?? [];\n if (!rows.length) {\n return '—';\n }\n const tf = this.textField();\n const idf = this.identityField();\n const vf = this.valueField();\n const parts = rows\n .filter((r) => {\n const key = r[vf] ?? r[idf];\n return key != null && key !== '';\n })\n .map((r) => (typeof r[tf] === 'string' && (r[tf] as string).length ? String(r[tf]) : String(r[idf] ?? '')));\n return parts.length ? parts.join(', ') : '—';\n });\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport {\n AXDataSource,\n AXDataSourceFilterOption,\n AXDataSourceQuery,\n AXDataSourceSortOption,\n AXValueChangedEvent,\n} from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCollapseModule } from '@acorex/components/collapse';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPContextChangeEvent, extractValue } from '@acorex/platform/core';\nimport {\n AXPValueWidgetComponent,\n AXPWidgetCoreModule,\n AXPWidgetNode,\n} from '@acorex/platform/layout/widget-core';\n\n\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, untracked } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport type { AXPSelectorStructureFieldDef } from './selector-structure-widget.config';\n\n/** Internal key for stable row tracking before a selector value is committed (persisted with the row). */\nconst SELECTOR_STRUCTURE_ROW_UID = '__rowUid';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-selector-structure-widget-edit',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n AXSelectBoxModule,\n AXFormModule,\n AXCollapseModule,\n AXLabelModule,\n AXPWidgetCoreModule,\n AXTextBoxModule,\n AXButtonModule,\n AXDecoratorModule\n],\n template: `\n @if (!disabled()) {\n @if (useCompactLayout()) {\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n @for (row of rows(); track trackRow(row); let idx = $index) {\n <ax-collapse-group look=\"fill\">\n <ax-collapse\n [caption]=\"rowCaption(row)\"\n [showHeader]=\"true\"\n [icon]=\"previewIcon()\"\n >\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-pt-1\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-start\">\n <ax-select-box\n class=\"ax-flex-1\"\n [dataSource]=\"compactRowDataSources()[idx]\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [multiple]=\"false\"\n [disabled]=\"isRowSelectLocked(row)\"\n [placeholder]=\"compactSelectPlaceholder()\"\n [ngModel]=\"compactRowSelectedItems()[idx]\"\n (onValueChanged)=\"handleCompactSelectChange(idx, $event)\"\n >\n </ax-select-box>\n @if (isRowSelectLocked(row)) {\n <ax-button\n color=\"neutral\"\n look=\"blank\"\n [title]=\"clearRowTitle()\"\n type=\"button\"\n (onClick)=\"clearCompactRow(idx)\"\n >\n <i class=\"far fa-times\"></i>\n </ax-button>\n }\n <ax-button\n color=\"danger\"\n look=\"blank\"\n [title]=\"removeRowTitle()\"\n type=\"button\"\n (onClick)=\"removeCompactRow(idx)\"\n >\n <i class=\"far fa-trash\"></i>\n </ax-button>\n </div>\n @if (structureMode() === 'schema') {\n <axp-widgets-container\n [context]=\"row\"\n (onContextChanged)=\"handleSchemaContextChange(trackRow(row), $event)\"\n >\n @if (identityDisplay() === 'readonly' && identityNode(); as idNode) {\n <ax-form-field>\n <ax-label>{{ identityLabel() }}</ax-label>\n <ng-container axp-widget-renderer [node]=\"idNode\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n @for (f of structureFieldNodes(); track f.name) {\n <ax-form-field>\n <ax-label>{{ f.title }}</ax-label>\n <ng-container axp-widget-renderer [node]=\"f.node\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n </axp-widgets-container>\n } @else {\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <span class=\"ax-font-semibold ax-text-sm\">{{ freeformHeading() }}</span>\n @for (entry of freeformEntries(row); track entry.index) {\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-start\">\n <ax-text-box\n class=\"ax-flex-1\"\n [placeholder]=\"keyPlaceholder()\"\n [ngModel]=\"entry.key\"\n (ngModelChange)=\"onFreeformKeyInput(row, entry, $event)\"\n ></ax-text-box>\n <ax-text-box\n class=\"ax-flex-1\"\n [placeholder]=\"valuePlaceholder()\"\n [ngModel]=\"entry.value\"\n (ngModelChange)=\"patchFreeformValue(row, entry.key, $event)\"\n ></ax-text-box>\n <ax-button\n color=\"danger\"\n look=\"blank\"\n [title]=\"removePairTitle()\"\n type=\"button\"\n (onClick)=\"removeFreeformKey(row, entry.key)\"\n >\n <i class=\"far fa-trash\"></i>\n </ax-button>\n </div>\n }\n <div>\n <ax-button [text]=\"addPairLabel()\" color=\"primary\" look=\"twotone\" type=\"button\" (onClick)=\"addFreeformPair(row)\">\n <i class=\"far fa-plus ax-me-1\"></i>\n </ax-button>\n </div>\n </div>\n }\n </div>\n </ax-collapse>\n </ax-collapse-group>\n }\n <div class=\"ax-flex ax-justify-end\">\n <ax-button [text]=\"addCompactItemLabel()\" color=\"primary\" look=\"twotone\" type=\"button\" (onClick)=\"addCompactRow()\">\n <i class=\"far fa-plus ax-me-1\"></i>\n </ax-button>\n </div>\n </div>\n } @else {\n @if (selectorMode() === 'select') {\n <ax-select-box\n [dataSource]=\"contextSelectDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [multiple]=\"multiple()\"\n [ngModel]=\"selectedSourceItems()\"\n (onValueChanged)=\"handleSelectValueChange($event)\"\n >\n </ax-select-box>\n } @else if (selectorMode() === 'lookup' && lookupDataSource()) {\n <ax-select-box\n [dataSource]=\"lookupDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"lookupTextField()\"\n [multiple]=\"multiple()\"\n [ngModel]=\"lookupSelectedItems()\"\n (onValueChanged)=\"handleLookupValueChange($event)\"\n >\n @if (lookupHasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n </ax-select-box>\n }\n\n <div class=\"ax-py-3\"></div>\n\n @if (rows().length > 0) {\n <ax-collapse-group look=\"fill\">\n @for (row of rows(); track trackRow(row)) {\n <ax-collapse [caption]=\"rowCaption(row)\">\n <div class=\"ax-flex ax-flex-col ax-gap-4\">\n @if (structureMode() === 'schema') {\n <axp-widgets-container\n [context]=\"row\"\n (onContextChanged)=\"handleSchemaContextChange(trackRow(row), $event)\"\n >\n @if (identityDisplay() === 'readonly' && identityNode(); as idNode) {\n <ax-form-field>\n <ax-label>{{ identityLabel() }}</ax-label>\n <ng-container axp-widget-renderer [node]=\"idNode\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n @for (f of structureFieldNodes(); track f.name) {\n <ax-form-field>\n <ax-label>{{ f.title }}</ax-label>\n <ng-container axp-widget-renderer [node]=\"f.node\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n </axp-widgets-container>\n } @else {\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <span class=\"ax-font-semibold ax-text-sm\">{{ freeformHeading() }}</span>\n @for (entry of freeformEntries(row); track entry.index) {\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-start\">\n <ax-text-box\n class=\"ax-flex-1\"\n [placeholder]=\"keyPlaceholder()\"\n [ngModel]=\"entry.key\"\n (ngModelChange)=\"onFreeformKeyInput(row, entry, $event)\"\n ></ax-text-box>\n <ax-text-box\n class=\"ax-flex-1\"\n [placeholder]=\"valuePlaceholder()\"\n [ngModel]=\"entry.value\"\n (ngModelChange)=\"patchFreeformValue(row, entry.key, $event)\"\n ></ax-text-box>\n <ax-button\n color=\"danger\"\n look=\"blank\"\n [title]=\"removePairTitle()\"\n type=\"button\"\n (onClick)=\"removeFreeformKey(row, entry.key)\"\n >\n <i class=\"far fa-trash\"></i>\n </ax-button>\n </div>\n }\n <div>\n <ax-button [text]=\"addPairLabel()\" color=\"primary\" look=\"twotone\" type=\"button\" (onClick)=\"addFreeformPair(row)\">\n <i class=\"far fa-plus ax-me-1\"></i>\n </ax-button>\n </div>\n </div>\n }\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n }\n }\n } @else {\n <span class=\"ax-text-muted\">{{ disabledHint() }}</span>\n }\n `,\n})\nexport class AXPSelectorStructureWidgetEditComponent extends AXPValueWidgetComponent {\n //#region ---- Services & dependencies ----\n\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n\n //#endregion\n\n //#region ---- Options ----\n\n protected selectorMode = computed(() => ((this.options() as { selectorMode?: string })['selectorMode'] as 'select' | 'lookup') ?? 'select');\n protected structureMode = computed(() => ((this.options() as { structureMode?: string })['structureMode'] as 'schema' | 'freeform') ?? 'schema');\n protected contextSiblingPath = computed(() => (this.options() as { contextSiblingPath?: string })['contextSiblingPath'] ?? '');\n protected identityField = computed(() => (this.options() as { identityField?: string })['identityField'] ?? 'name');\n protected identityDisplay = computed(() => ((this.options() as { identityDisplay?: string })['identityDisplay'] as 'readonly' | 'hidden') ?? 'readonly');\n protected valueField = computed(() => (this.options() as { valueField?: string })['valueField'] ?? 'name');\n protected textField = computed(() => (this.options() as { textField?: string })['textField'] ?? 'title');\n protected multiple = computed(() => ((this.options() as { multiple?: boolean })['multiple'] ?? true) as boolean);\n protected freeformPath = computed(() => (this.options() as { freeformPath?: string })['freeformPath'] ?? 'options');\n protected lookupEntityKey = computed(() => (this.options() as { entity?: string })['entity'] as string | undefined);\n protected lookupHasClearButton = computed(\n () => ((this.options() as { hasClearButton?: boolean })['hasClearButton'] ?? false) as boolean,\n );\n protected lookupCustomFilter = computed(\n () => (this.options() as { filter?: AXDataSourceFilterOption })['filter'] as AXDataSourceFilterOption | undefined,\n );\n\n protected disabled = computed(() => {\n const raw = (this.options() as { disabled?: boolean | string })['disabled'];\n return raw === true || raw === 'true';\n });\n\n protected presentationMode = computed(() => {\n const raw = (this.options() as { presentation?: unknown })['presentation'];\n const v = extractValue(raw, 'id') as string | null;\n return v === 'compactPanel' ? 'compactPanel' : 'standard';\n });\n\n /** Compact panel (address-style) applies only to sibling select mode; lookup falls back to standard layout. */\n protected useCompactLayout = computed(() => this.presentationMode() === 'compactPanel' && this.selectorMode() === 'select');\n\n protected previewIcon = computed(() => (this.options() as { previewIcon?: string })['previewIcon']?.trim() ?? '');\n\n protected placeholder = computed(() => (this.options() as { placeholder?: string })['placeholder'] ?? '');\n\n protected compactSelectPlaceholder = computed(() => {\n const p = this.placeholder();\n return p.length ? p : 'Choose';\n });\n\n protected addCompactItemLabel = computed(() => (this.options() as { addCompactItemLabel?: string })['addCompactItemLabel'] ?? 'Add item');\n\n protected clearRowTitle = computed(() => (this.options() as { clearRowTitle?: string })['clearRowTitle'] ?? 'Clear selection');\n\n protected removeRowTitle = computed(() => (this.options() as { removeRowTitle?: string })['removeRowTitle'] ?? 'Remove row');\n\n //#endregion\n\n //#region ---- Context / select ----\n\n protected resolvedSiblingPath(): string {\n const s = this.contextSiblingPath();\n if (!s) {\n return '';\n }\n const parent = this.parentPath();\n return parent ? `${parent}.${s}` : s;\n }\n\n /**\n * Items shown in the selector: sibling context array when path is set, otherwise optional static `dataSource` array.\n */\n protected contextItems = computed(() => {\n const path = this.resolvedSiblingPath();\n if (path) {\n const v = this.contextService.getValue(path);\n return Array.isArray(v) ? (v as unknown[]) : [];\n }\n const raw = (this.options() as { dataSource?: unknown })['dataSource'];\n if (Array.isArray(raw)) {\n return raw as unknown[];\n }\n return [] as unknown[];\n });\n\n protected contextSelectDataSource = computed(\n () =>\n new AXDataSource({\n load: async () => {\n const items = this.contextItems();\n return { items, total: items.length };\n },\n pageSize: 500,\n key: this.valueField(),\n }),\n );\n\n protected selectedSourceItems = signal<unknown[]>([]);\n\n protected compactRowDataSources = computed(() => {\n this.contextItems();\n const rows = this.rows();\n const n = rows.length;\n const vf = this.valueField();\n const out: AXDataSource[] = [];\n for (let i = 0; i < n; i++) {\n const index = i;\n out.push(\n new AXDataSource({\n load: async () => {\n const items = this.exclusiveItemsForRow(index);\n return { items, total: items.length };\n },\n pageSize: 500,\n key: vf,\n }),\n );\n }\n return out;\n });\n\n protected compactRowSelectedItems = computed(() => {\n const rows = this.rows();\n const vf = this.valueField();\n const tf = this.textField();\n const idf = this.identityField();\n const all = this.contextItems();\n return rows.map((row) => {\n if (this.isDraftRow(row)) {\n return [];\n }\n const key = row[vf] ?? row[idf];\n const found = all.find((i) => (i as Record<string, unknown>)[vf] === key);\n if (found) {\n return [found];\n }\n return [{ [vf]: key, [tf]: row[tf] ?? String(key) }] as unknown[];\n });\n });\n\n //#endregion\n\n //#region ---- Lookup ----\n\n protected lookupEntityDef = signal<AXPEntity | null>(null);\n\n protected defaultLookupSorts = computed<AXDataSourceSortOption[]>(() => {\n const entity = this.lookupEntityDef();\n if (!entity?.interfaces) {\n return [];\n }\n const master = (entity.interfaces as Record<string, unknown>)['master'] as Record<string, unknown> | undefined;\n const list = master?.['list'] as Record<string, unknown> | undefined;\n const views = list?.['views'] as unknown[] | undefined;\n const firstView = views?.[0] as { sorts?: { name: string; dir?: string }[] } | undefined;\n if (!firstView?.sorts?.length) {\n return [];\n }\n return firstView.sorts.map((sort) => ({\n field: sort.name,\n dir: (sort.dir === 'desc' ? 'desc' : 'asc') as 'asc' | 'desc',\n }));\n });\n\n protected lookupDataSource = computed<AXDataSource | null>(() => {\n const entity = this.lookupEntityDef();\n if (!entity) {\n return null;\n }\n const defaultSorts = this.defaultLookupSorts();\n return new AXDataSource({\n load: (e: AXDataSourceQuery) => {\n const func = entity.queries?.list?.execute as ((req: unknown) => Promise<{ items: unknown[]; total: number }>) | undefined;\n if (!func || typeof func !== 'function') {\n return Promise.resolve({ items: [], total: 0 });\n }\n this.mergeListFilter(e as unknown as Record<string, unknown>, this.lookupCustomFilter());\n const query = e as unknown as Record<string, unknown>;\n if (defaultSorts.length > 0 && (!(query['sort'] as unknown[])?.length)) {\n query['sort'] = defaultSorts;\n }\n return func(e);\n },\n pageSize: 10,\n key: this.valueField(),\n });\n });\n\n protected lookupTextField = computed(() => {\n const explicit = (this.options() as { textField?: string })['textField'];\n if (explicit) {\n return explicit;\n }\n const entity = this.lookupEntityDef();\n const props = entity?.properties as { name: string }[] | undefined;\n const list = ['title', 'name', 'code', 'description'];\n return list.find((c) => props?.some((p) => p.name === c)) ?? 'title';\n });\n\n protected lookupSelectedItems = signal<unknown[]>([]);\n\n //#endregion\n\n //#region ---- Rows & schema ----\n\n protected rows = computed(() => (this.getValue() as Record<string, unknown>[]) ?? []);\n\n protected structureFields = computed(\n () => ((this.options() as { structureFields?: AXPSelectorStructureFieldDef[] })['structureFields'] ?? []) as AXPSelectorStructureFieldDef[],\n );\n\n protected structureFieldNodes = computed(() =>\n this.structureFields().map((f) => ({\n name: f.name,\n title: f.title,\n node: {\n type: f.widgetType,\n path: f.name,\n name: f.name,\n options: f.options ?? {},\n } as AXPWidgetNode,\n })),\n );\n\n protected identityLabel = computed(() => (this.options() as { identityLabel?: string })['identityLabel'] ?? 'Key');\n\n protected identityNode = computed((): AXPWidgetNode | null => {\n if (this.identityDisplay() !== 'readonly') {\n return null;\n }\n const idf = this.identityField();\n return {\n type: 'text-editor',\n path: idf,\n name: idf,\n options: { readonly: true },\n };\n });\n\n //#endregion\n\n //#region ---- i18n fallbacks (plain EN; can swap for translate pipe later) ----\n\n protected freeformHeading = computed(() => (this.options() as { freeformHeading?: string })['freeformHeading'] ?? 'Options');\n protected keyPlaceholder = computed(() => (this.options() as { keyPlaceholder?: string })['keyPlaceholder'] ?? 'Key');\n protected valuePlaceholder = computed(() => (this.options() as { valuePlaceholder?: string })['valuePlaceholder'] ?? 'Value');\n protected addPairLabel = computed(() => (this.options() as { addPairLabel?: string })['addPairLabel'] ?? 'Add pair');\n protected removePairTitle = computed(() => (this.options() as { removePairTitle?: string })['removePairTitle'] ?? 'Remove');\n protected disabledHint = computed(() => (this.options() as { disabledHint?: string })['disabledHint'] ?? '—');\n\n //#endregion\n\n //#region ---- Lifecycle & effects ----\n\n #resolveLookup = effect(async () => {\n if (this.selectorMode() !== 'lookup') {\n this.lookupEntityDef.set(null);\n return;\n }\n const key = this.lookupEntityKey();\n if (!key) {\n this.lookupEntityDef.set(null);\n return;\n }\n const parts = key.split('.');\n const moduleName = parts[0] ?? '';\n const entityName = parts.slice(1).join('.');\n try {\n const def = await this.entityRegistry.resolve(moduleName, entityName);\n this.lookupEntityDef.set(def);\n } catch {\n this.lookupEntityDef.set(null);\n }\n });\n\n #syncSelect = effect(() => {\n if (this.useCompactLayout()) {\n return;\n }\n if (this.selectorMode() !== 'select') {\n return;\n }\n const rows = this.rows();\n const idf = this.identityField();\n const vf = this.valueField();\n const keys = new Set(rows.map((r) => r[idf] as string | number));\n const items = this.contextItems().filter((item) => keys.has((item as Record<string, unknown>)[vf] as string | number));\n untracked(() => this.selectedSourceItems.set(items));\n });\n\n #syncLookup = effect(() => {\n if (this.useCompactLayout()) {\n return;\n }\n if (this.selectorMode() !== 'lookup') {\n return;\n }\n const rows = this.rows();\n const vf = this.valueField();\n const tf = this.lookupTextField();\n const synthetic = rows.map((r) => {\n const base = { ...r } as Record<string, unknown>;\n base[tf] = base[tf] ?? r[vf] ?? '';\n return base;\n });\n untracked(() => this.lookupSelectedItems.set(synthetic));\n });\n\n //#endregion\n\n //#region ---- Row helpers ----\n\n protected trackRow(row: Record<string, unknown>): unknown {\n const idf = this.identityField();\n const k = row[idf];\n if (k != null && k !== '') {\n return k;\n }\n const uid = row[SELECTOR_STRUCTURE_ROW_UID];\n if (typeof uid === 'string' && uid.length) {\n return uid;\n }\n return null;\n }\n\n protected rowCaption(row: Record<string, unknown>): string {\n if (this.isDraftRow(row)) {\n const p = this.placeholder();\n return p.length ? p : 'Choose';\n }\n const tf = this.textField();\n const idf = this.identityField();\n const t = row[tf];\n if (typeof t === 'string' && t.length) {\n return t;\n }\n return String(row[idf] ?? '');\n }\n\n protected isDraftRow(row: Record<string, unknown>): boolean {\n const vf = this.valueField();\n const idf = this.identityField();\n const key = row[vf] ?? row[idf];\n return key == null || key === '';\n }\n\n protected isRowSelectLocked(row: Record<string, unknown>): boolean {\n return !this.isDraftRow(row);\n }\n\n /**\n * Items available for row `index`: all source items minus keys already chosen on other committed rows;\n * always includes the current row's selected item so the select can display it.\n */\n protected exclusiveItemsForRow(index: number): unknown[] {\n const all = this.contextItems();\n const vf = this.valueField();\n const idf = this.identityField();\n const rows = this.rows();\n const otherKeys = new Set<string | number>();\n for (let j = 0; j < rows.length; j++) {\n if (j === index) {\n continue;\n }\n const r = rows[j];\n if (this.isDraftRow(r)) {\n continue;\n }\n const k = r[vf] ?? r[idf];\n if (k != null && k !== '') {\n otherKeys.add(k as string | number);\n }\n }\n const row = rows[index];\n const currentKey = row?.[vf] ?? row?.[idf];\n return all.filter((item) => {\n const itemKey = (item as Record<string, unknown>)[vf];\n if (currentKey != null && currentKey !== '' && itemKey === currentKey) {\n return true;\n }\n return !otherKeys.has(itemKey as string | number);\n });\n }\n\n //#endregion\n\n //#region ---- Compact panel handlers ----\n\n private newRowUid(): string {\n return globalThis.crypto?.randomUUID?.() ?? `row-${Date.now()}-${Math.random()}`;\n }\n\n protected handleCompactSelectChange(index: number, e: AXValueChangedEvent): void {\n if (!e.isUserInteraction) {\n return;\n }\n const items = ((e.component as AXSelectBoxComponent).selectedItems ?? []) as unknown[];\n const item = items[0];\n this.applyCompactRowFromItem(index, item ?? undefined);\n }\n\n protected applyCompactRowFromItem(index: number, rawItem: unknown | undefined): void {\n const idf = this.identityField();\n const vf = this.valueField();\n const tf = this.textField();\n const fp = this.freeformPath();\n const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n const prev = rows[index] ?? {};\n if (rawItem == null) {\n rows[index] = {\n [SELECTOR_STRUCTURE_ROW_UID]: (prev[SELECTOR_STRUCTURE_ROW_UID] as string) ?? this.newRowUid(),\n ...(this.structureMode() === 'freeform' ? { [fp]: {} } : {}),\n };\n this.setValue(rows);\n return;\n }\n const item = rawItem as Record<string, unknown>;\n const key = item[vf];\n const old = prev;\n const row: Record<string, unknown> = {\n ...old,\n [idf]: key,\n [tf]: item[tf] ?? old[tf] ?? key,\n };\n delete row[SELECTOR_STRUCTURE_ROW_UID];\n if (this.structureMode() === 'freeform') {\n const path = fp ?? 'options';\n row[path] = old[path] && typeof old[path] === 'object' ? { ...(old[path] as object) } : {};\n }\n rows[index] = row;\n this.setValue(rows);\n }\n\n protected clearCompactRow(index: number): void {\n const fp = this.freeformPath();\n const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n rows[index] = {\n [SELECTOR_STRUCTURE_ROW_UID]: this.newRowUid(),\n ...(this.structureMode() === 'freeform' ? { [fp]: {} } : {}),\n };\n this.setValue(rows);\n }\n\n protected removeCompactRow(index: number): void {\n const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n rows.splice(index, 1);\n this.setValue(rows);\n }\n\n protected addCompactRow(): void {\n const fp = this.freeformPath();\n const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n const draft: Record<string, unknown> = {\n [SELECTOR_STRUCTURE_ROW_UID]: this.newRowUid(),\n };\n if (this.structureMode() === 'freeform') {\n draft[fp] = {};\n }\n rows.push(draft);\n this.setValue(rows);\n }\n\n //#endregion\n\n //#region ---- Select handlers ----\n\n protected handleSelectValueChange(e: AXValueChangedEvent): void {\n if (!e.isUserInteraction) {\n return;\n }\n const items = ((e.component as AXSelectBoxComponent).selectedItems ?? []) as unknown[];\n this.applyRowsFromSourceItems(items);\n }\n\n protected handleLookupValueChange(e: AXValueChangedEvent): void {\n if (!e.isUserInteraction) {\n return;\n }\n const items = ((e.component as AXSelectBoxComponent).selectedItems ?? []) as unknown[];\n this.applyRowsFromSourceItems(items);\n }\n\n protected applyRowsFromSourceItems(items: unknown[]): void {\n const idf = this.identityField();\n const vf = this.valueField();\n const tf = this.textField();\n const fp = this.freeformPath();\n const prev = (this.getValue() as Record<string, unknown>[]) ?? [];\n const prevMap = new Map(prev.map((r) => [r[idf], r] as const));\n const next: Record<string, unknown>[] = [];\n for (const raw of items) {\n const item = raw as Record<string, unknown>;\n const key = item[vf];\n const old = prevMap.get(key) ?? {};\n const row: Record<string, unknown> = {\n ...old,\n [idf]: key,\n [tf]: item[tf] ?? old[tf] ?? key,\n };\n if (this.structureMode() === 'freeform') {\n const path = fp ?? 'options';\n row[path] = old[path] && typeof old[path] === 'object' ? { ...(old[path] as object) } : {};\n }\n next.push(row);\n }\n this.setValue(next);\n }\n\n //#endregion\n\n //#region ---- Schema ----\n\n protected handleSchemaContextChange(rowKey: unknown, e: AXPContextChangeEvent): void {\n const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n const idf = this.identityField();\n let idx = rows.findIndex((r) => r[idf] === rowKey);\n if (idx < 0 && rowKey != null) {\n idx = rows.findIndex((r) => r[SELECTOR_STRUCTURE_ROW_UID] === rowKey);\n }\n if (idx < 0) {\n return;\n }\n rows[idx] = { ...rows[idx], ...e.data };\n this.setValue(rows);\n }\n\n //#endregion\n\n //#region ---- Freeform ----\n\n protected freeformEntries(row: Record<string, unknown>): { key: string; value: string; index: number }[] {\n const fp = this.freeformPath();\n const raw = row[fp];\n if (!raw || typeof raw !== 'object') {\n return [];\n }\n const o = raw as Record<string, unknown>;\n return Object.keys(o).map((key, index) => ({\n key,\n value: this.serializeFreeformValue(o[key]),\n index,\n }));\n }\n\n private serializeFreeformValue(value: unknown): string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'object') {\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n }\n return String(value);\n }\n\n protected onFreeformKeyInput(row: Record<string, unknown>, entry: { key: string; value: string; index: number }, nextKey: string): void {\n if (nextKey === entry.key) {\n return;\n }\n this.renameFreeformKey(row, entry.key, nextKey);\n }\n\n protected patchFreeformValue(row: Record<string, unknown>, key: string, raw: string): void {\n const parsed = this.tryParseFreeformString(raw);\n this.patchFreeformMap(row, (o) => {\n o[key] = parsed;\n });\n }\n\n protected removeFreeformKey(row: Record<string, unknown>, key: string): void {\n this.patchFreeformMap(row, (o) => {\n delete o[key];\n });\n }\n\n protected addFreeformPair(row: Record<string, unknown>): void {\n this.patchFreeformMap(row, (o) => {\n let n = 1;\n while (`key${n}` in o) {\n n++;\n }\n o[`key${n}`] = '';\n });\n }\n\n private renameFreeformKey(row: Record<string, unknown>, oldKey: string, newKey: string): void {\n if (!newKey || oldKey === newKey) {\n return;\n }\n this.patchFreeformMap(row, (o) => {\n const v = o[oldKey];\n delete o[oldKey];\n o[newKey] = v ?? '';\n });\n }\n\n private patchFreeformMap(row: Record<string, unknown>, fn: (draft: Record<string, unknown>) => void): void {\n const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n const idf = this.identityField();\n const idx = rows.findIndex((r) => r[idf] === row[idf]);\n if (idx < 0) {\n return;\n }\n const fp = this.freeformPath();\n const nextRow = { ...rows[idx] };\n const nextMap = { ...((nextRow[fp] as Record<string, unknown>) ?? {}) };\n fn(nextMap);\n nextRow[fp] = nextMap;\n rows[idx] = nextRow;\n this.setValue(rows);\n }\n\n private tryParseFreeformString(raw: string): unknown {\n const t = raw.trim();\n if (!t.length) {\n return '';\n }\n if ((t.startsWith('{') && t.endsWith('}')) || (t.startsWith('[') && t.endsWith(']'))) {\n try {\n return JSON.parse(t) as unknown;\n } catch {\n return raw;\n }\n }\n return raw;\n }\n\n //#endregion\n\n //#region ---- Lookup filter merge (mirror lookup select) ----\n\n private mergeListFilter(request: Record<string, unknown>, filter: AXDataSourceFilterOption | null | undefined): void {\n if (!filter) {\n return;\n }\n if (request['filter']) {\n request['filter'] = {\n logic: 'and',\n filters: [request['filter'], ...(filter.filters ?? [])],\n };\n } else {\n request['filter'] = filter;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\n//#endregion\n\n@Component({\n selector: 'axp-selector-structure-widget-view',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (summaries().length) {\n <span class=\"ax-inline-flex ax-items-center ax-gap-2 ax-text-sm ax-text-muted\">\n @if (previewIcon()) {\n <i [class]=\"previewIcon()\" aria-hidden=\"true\"></i>\n }\n <span>{{ summaries().join(', ') }}</span>\n </span>\n } @else {\n <span class=\"ax-inline-flex ax-items-center ax-gap-2 ax-text-sm ax-text-muted\">\n @if (previewIcon()) {\n <i [class]=\"previewIcon()\" aria-hidden=\"true\"></i>\n }\n <span>—</span>\n </span>\n }\n `,\n})\nexport class AXPSelectorStructureWidgetViewComponent extends AXPValueWidgetComponent {\n //#region ---- Computed ----\n\n protected identityField = computed(() => (this.options() as { identityField?: string })['identityField'] ?? 'name');\n protected textField = computed(() => (this.options() as { textField?: string })['textField'] ?? 'title');\n protected valueField = computed(() => (this.options() as { valueField?: string })['valueField'] ?? 'name');\n\n protected previewIcon = computed(() => (this.options() as { previewIcon?: string })['previewIcon']?.trim() ?? '');\n\n protected summaries = computed(() => {\n const rows = (this.getValue() as Record<string, unknown>[]) ?? [];\n const tf = this.textField();\n const idf = this.identityField();\n const vf = this.valueField();\n return rows\n .filter((r) => {\n const key = r[vf] ?? r[idf];\n return key != null && key !== '';\n })\n .map((r) => (typeof r[tf] === 'string' && (r[tf] as string).length ? String(r[tf]) : String(r[idf] ?? '')));\n });\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport {\n AXPWidgetConfig,\n AXPWidgetGroupEnum,\n AXPWidgetsCatalog,\n createSelectProperty,\n createStringProperty,\n} from '@acorex/platform/layout/widget-core';\nimport {\n AXP_BEHAVIOR_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_DISABLED_PROPERTY,\n AXP_NAME_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPSelectorStructureSelectorMode = 'select' | 'lookup';\n\nexport type AXPSelectorStructureStructureMode = 'schema' | 'freeform';\n\nexport type AXPSelectorStructureIdentityDisplay = 'readonly' | 'hidden';\n\n/** UI layout: standard = global multi-select + collapse rows; compactPanel = per-row select (address-style). */\nexport type AXPSelectorStructurePresentationMode = 'standard' | 'compactPanel';\n\nexport interface AXPSelectorStructureFieldDef {\n name: string;\n title: string;\n widgetType: string;\n options?: Record<string, unknown>;\n}\n\n//#endregion\n\n//#region ---- Widget config ----\n\nexport const AXPSelectorStructureWidget: AXPWidgetConfig = {\n name: 'selector-structure',\n title: 'Selector + structure',\n description: 'Select items (list or lookup), then edit structured fields or free-form key/value pairs per row.',\n icon: 'fa-light fa-list-tree',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n type: 'editor',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n AXP_DISABLED_PROPERTY,\n {\n name: 'selectorMode',\n title: 'Selector mode',\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'selectorMode',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'select', title: 'Select' },\n { value: 'lookup', title: 'Lookup' },\n ],\n valueField: 'value',\n textField: 'title',\n },\n },\n },\n visible: true,\n },\n {\n name: 'structureMode',\n title: 'Structure mode',\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'structureMode',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'schema', title: 'Schema' },\n { value: 'freeform', title: 'Free-form map' },\n ],\n valueField: 'value',\n textField: 'title',\n },\n },\n },\n visible: true,\n },\n createSelectProperty({\n name: 'presentation',\n title: 'Presentation',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n path: 'options.presentation',\n defaultValue: { id: 'standard', title: 'Standard' },\n dataSource: [\n { id: 'standard', title: 'Standard' },\n { id: 'compactPanel', title: 'Compact panel' },\n ],\n }),\n createStringProperty({\n name: 'previewIcon',\n title: 'Preview icon',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n path: 'options.previewIcon',\n defaultValue: '',\n }),\n createStringProperty({\n name: 'placeholder',\n title: 'Placeholder',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n path: 'options.placeholder',\n defaultValue: '',\n }),\n ],\n components: {\n view: {\n component: () =>\n import('./selector-structure-widget-view.component').then((c) => c.AXPSelectorStructureWidgetViewComponent),\n },\n edit: {\n component: () =>\n import('./selector-structure-widget-edit.component').then((c) => c.AXPSelectorStructureWidgetEditComponent),\n },\n column: {\n component: () =>\n import('./selector-structure-widget-column.component').then((c) => c.AXPSelectorStructureWidgetColumnComponent),\n },\n designer: {\n component: () =>\n import('./selector-structure-widget-edit.component').then((c) => c.AXPSelectorStructureWidgetEditComponent),\n },\n },\n};\n\n//#endregion\n\n//#region ---- Options interfaces ----\n\nexport interface AXPSelectorStructureWidgetDesignerOptions {\n selectorMode?: AXPSelectorStructureSelectorMode;\n structureMode?: AXPSelectorStructureStructureMode;\n presentation?: AXPSelectorStructurePresentationMode;\n previewIcon?: string;\n placeholder?: string;\n contextSiblingPath?: string;\n identityField?: string;\n identityDisplay?: AXPSelectorStructureIdentityDisplay;\n valueField?: string;\n textField?: string;\n dataSource?: unknown;\n multiple?: boolean;\n lookup?: {\n entity?: string;\n look?: 'select' | 'lookup';\n filter?: unknown;\n hasClearButton?: boolean;\n };\n structureFields?: AXPSelectorStructureFieldDef[];\n freeformPath?: string;\n}\n\nexport interface AXPSelectorStructureWidgetViewOptions extends AXPSelectorStructureWidgetDesignerOptions {}\n\nexport interface AXPSelectorStructureWidgetEditOptions extends AXPSelectorStructureWidgetDesignerOptions {}\n\nexport interface AXPSelectorStructureWidgetColumnOptions {\n identityField?: string;\n textField?: string;\n previewIcon?: string;\n}\n\nexport interface AXPSelectorStructureWidgetPrintOptions {}\n\nexport interface AXPSelectorStructureWidgetOptions {\n designer: AXPSelectorStructureWidgetDesignerOptions;\n view: AXPSelectorStructureWidgetViewOptions;\n edit: AXPSelectorStructureWidgetEditOptions;\n print: AXPSelectorStructureWidgetPrintOptions;\n column: AXPSelectorStructureWidgetColumnOptions;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPWidgetDefinitionProvider,\n AXPWidgetGroupEnum,\n AXP_WIDGETS_EDITOR_CATEGORY,\n extendedWidget,\n} from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPEntityCategoryWidget } from './widgets/entity-category-widget';\nimport { AXPEntityDefinitionProviderWidget } from './widgets/entity-definition-provider-widget';\nimport { AXPEntityListWidget } from './widgets/entity-list';\nimport { AXPLookupWidget } from './widgets/lookup-widget';\nimport { AXPMultiSourceSelectorWidget } from './widgets/multi-source-selector-widget';\nimport { AXPSelectorStructureWidget } from './widgets/selector-structure-widget';\n\n//#endregion\n\n//#region ---- Entity Widgets Provider ----\n\nconst ENTITY_WIDGETS = [\n AXPLookupWidget,\n AXPSelectorStructureWidget,\n AXPEntityListWidget,\n AXPEntityCategoryWidget,\n AXPMultiSourceSelectorWidget,\n AXPEntityDefinitionProviderWidget,\n];\n\nconst ENTITY_EXTENDED_WIDGETS: extendedWidget[] = [\n {\n parentName: AXPLookupWidget.name,\n widget: {\n name: 'lookup-filter' as any,\n title: 'Lookup Filter',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.EntityWidget],\n type: 'filter',\n components: {},\n options: {\n look: 'select',\n filterMode: true,\n },\n },\n },\n];\n\n/**\n * Provider for entity-related widgets (Lookup, SelectorStructure, EntityList, EntityCategory, MultiSourceSelector).\n */\n@Injectable()\nexport class AXPEntityWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return ENTITY_WIDGETS;\n }\n\n getExtendedWidgets() {\n return ENTITY_EXTENDED_WIDGETS;\n }\n}\n\n//#endregion\n","import { AXPBadge, AXPPageStatus } from '@acorex/platform/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\nexport interface DetailsViewPageStatusInput {\n readonly isReadonly?: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPDetailsViewBadgeStatusService {\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly translateService = inject(AXTranslationService);\n\n async getPageBadge(\n entityName: string,\n _context: unknown,\n isDirty: boolean,\n ): Promise<AXPBadge | null> {\n if (!isDirty) {\n return null;\n }\n return {\n title: await this.translateService.translateAsync(\n '@general:terms.interface.save-status.not-saved.title',\n ),\n color: 'warning',\n description: await this.translateService.translateAsync(\n '@general:terms.interface.save-status.not-saved.description',\n ),\n };\n }\n\n async getPageStatus(\n entityName: string,\n context: Record<string, unknown>,\n currentPage: DetailsViewPageStatusInput | null,\n ): Promise<AXPPageStatus | null> {\n if (!entityName) {\n return null;\n }\n\n const [moduleName, entityNamePart] = entityName.split('.');\n if (!moduleName || !entityNamePart) {\n return null;\n }\n\n try {\n const entityDefinition = await this.entityRegistry.resolve(moduleName, entityNamePart);\n if (!entityDefinition) {\n return null;\n }\n\n const statusPlugin = entityDefinition.plugins?.find(\n (p: { name?: string }) => p.name === 'status',\n );\n if (!statusPlugin?.options) {\n return null;\n }\n\n const statusOptions = statusPlugin.options as {\n field?: string;\n definition?: string;\n };\n const statusField = statusOptions.field ?? 'statusId';\n const statusDefinitionKey = statusOptions.definition;\n\n let definitionKey: string | undefined =\n typeof statusDefinitionKey === 'string' ? statusDefinitionKey : undefined;\n\n if (!definitionKey) {\n const statusProperty = entityDefinition.properties?.find(\n (p: { name?: string }) => p.name === statusField,\n );\n const widgetOptions = statusProperty?.schema?.interface?.options as\n | { definitionKey?: string }\n | undefined;\n if (widgetOptions?.definitionKey) {\n definitionKey = widgetOptions.definitionKey;\n }\n }\n\n if (!definitionKey) {\n return null;\n }\n\n const statusValue = context?.[statusField];\n if (statusValue == null) {\n return null;\n }\n\n const value =\n typeof statusValue === 'string' ? statusValue : (statusValue as { name?: string })?.name ?? statusValue;\n\n return {\n definitionKey,\n value: String(value),\n dataPath: statusField,\n readonly: currentPage?.isReadonly ?? false,\n };\n } catch (error) {\n console.warn('Failed to get page status:', error);\n return null;\n }\n }\n}\n","import { AXPContextData, AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewAdapter } from '@acorex/platform/layout/views';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPDetailsViewBadgeStatusService } from './details-view-badge-status.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPLayoutAdapterBuilder {\n private readonly badgeStatusService = inject(AXPDetailsViewBadgeStatusService);\n private adapter: Partial<AXPLayoutDetailsViewAdapter> = {};\n private entity: any;\n private rootContext: any;\n private rootTitle: string | undefined;\n private dependencies: any;\n\n setEntity(entity: any, rootContext: any): this {\n this.entity = entity;\n this.rootContext = rootContext;\n return this;\n }\n\n setDependencies(dependencies: any): this {\n this.dependencies = dependencies;\n return this;\n }\n\n setMainPage(mainPage: any): this {\n this.adapter.pages = [mainPage];\n return this;\n }\n\n setRelatedPages(relatedPages: any[]): this {\n this.adapter.pages = [...(this.adapter.pages || []), ...relatedPages];\n return this;\n }\n\n setPages(pages: any[]): this {\n this.adapter.pages = pages;\n return this;\n }\n\n setExitUrl(params: { moduleName: string; entityName: string; applicationName: string }): this {\n this.adapter.exitUrl = `/${params.applicationName}/m/${params.moduleName}/e/${params.entityName}/list`;\n return this;\n }\n\n /**\n * Sets the evaluated root title (e.g. \"Robert Wilson\") used when displaying the adapter title on mobile.\n * Without this, the raw template expression would be shown when showPages is true.\n */\n setRootTitle(rootTitle: string): this {\n this.rootTitle = rootTitle;\n return this;\n }\n\n build(): AXPLayoutDetailsViewAdapter {\n const title =\n this.rootTitle ?? this.entity?.interfaces?.master?.single?.title ?? this.entity?.formats?.individual ?? '';\n const name = `${this.entity?.module}.${this.entity?.name}`;\n return {\n name,\n title,\n label: this.entity?.formats.plural,\n actions: [],\n breadcrumbs: this.createBreadcrumbs(),\n execute: this.createExecuteFunction(),\n load: this.createLoadFunction(),\n pages: this.adapter.pages || [],\n exitUrl: this.adapter.exitUrl,\n //getPageBadge: (context, isDirty) => this.badgeStatusService.getPageBadge(name, context, isDirty),\n getPageStatus: (context, currentPage) => this.badgeStatusService.getPageStatus(name, context, currentPage),\n };\n }\n\n private createBreadcrumbs() {\n const session = this.dependencies.session;\n const moduleName = this.entity?.module;\n const entityName = this.entity?.name;\n\n return [\n {\n title: this.entity?.formats.plural ?? '',\n command: {\n name: 'navigate',\n options: {\n path: `/${session.application?.name}/m/${moduleName}/e/${entityName}/list`,\n },\n },\n },\n {\n title: this.rootTitle ?? this.entity?.interfaces?.master?.single?.title ?? '',\n command: {\n name: 'navigate',\n options: {\n path: `/${session.application?.name}/m/${moduleName}/e/${entityName}/${this.rootContext.id}/view`,\n },\n },\n },\n ];\n }\n\n private createExecuteFunction(): (\n command: AXPExecuteCommand,\n context: AXPContextData,\n ) => Promise<AXPExecuteCommandResult> {\n return (command: any, context: any) => {\n return Promise.resolve({ success: true });\n };\n }\n\n private createLoadFunction(): () => Promise<AXPExecuteCommandResult> {\n return async () => {\n return {\n success: true,\n data: this.rootContext,\n };\n };\n }\n}\n","import {\n AXPEntity,\n AXPEntityAction,\n AXPEntityCommandScope,\n AXPFilterOperatorMiddlewareService,\n AXPRelatedEntity,\n} from '@acorex/platform/common';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { get } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../../entity-registery.service';\n\nexport interface AXPRelatedEntityConverter {\n convert(relatedEntity: AXPRelatedEntity, context: any): Promise<any>;\n}\n\nexport interface AXPRelatedEntityConverterContext {\n entityResolver: AXPEntityDefinitionRegistryService;\n expressionEvaluator?: AXPExpressionEvaluatorService;\n context?: any;\n rootTitle?: string;\n workflowService?: any;\n commandService?: any;\n filterOperatorMiddleware: AXPFilterOperatorMiddlewareService;\n [key: string]: any;\n}\n\nexport abstract class AXPBaseRelatedEntityConverter implements AXPRelatedEntityConverter {\n abstract convert(relatedEntity: AXPRelatedEntity, context: AXPRelatedEntityConverterContext): Promise<any>;\n\n protected async getEntityDefinition(\n relatedEntity: AXPRelatedEntity,\n entityResolver: AXPEntityDefinitionRegistryService,\n ) {\n const [moduleName, entityName] = relatedEntity.entity.split('.');\n const entityDef = await entityResolver.resolve(moduleName, entityName);\n\n if (!entityDef) {\n throw new Error(`Entity ${relatedEntity.entity} not found`);\n }\n\n return { entityDef, moduleName, entityName };\n }\n\n protected createExpressionEvaluator(context: any, expressionEvaluator: AXPExpressionEvaluatorService) {\n return async (actionData: { [key: string]: string }) => {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(context, path),\n },\n };\n return await expressionEvaluator.evaluate(actionData, scope);\n };\n }\n\n /**\n * Evaluates related-entity action expressions against the parent (root) context.\n * Individual-scope actions are left unchanged so row-level expressions are evaluated later in the list/table layer.\n */\n protected async evaluateRelatedEntityActionsForRootContext(\n actions: AXPEntityAction[] | undefined,\n context: AXPRelatedEntityConverterContext,\n ): Promise<AXPEntityAction[]> {\n const list = actions ?? [];\n const evaluator = context.expressionEvaluator;\n if (!evaluator) {\n return list;\n }\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(context.context, path),\n },\n };\n return Promise.all(\n list.map(async (action) => {\n if (action.scope === AXPEntityCommandScope.Individual) {\n return action;\n }\n return (await evaluator.evaluate(action, scope)) as AXPEntityAction;\n }),\n );\n }\n\n protected async createFilters(relatedEntity: AXPRelatedEntity, evaluateExpressions: (data: any) => Promise<any>) {\n return (\n relatedEntity.conditions?.map(async (c) => {\n const value = await evaluateExpressions(c.value);\n return {\n field: c.name,\n operator: c.operator,\n value: value,\n };\n }) ?? []\n );\n }\n\n protected createEntityHelpers(entityDef: AXPEntity) {\n const groups = entityDef?.groups ?? [];\n const singleInterface = entityDef?.interfaces?.master?.single;\n\n return {\n getGroupById: (id: string) => groups.find((s: any) => s.id === id),\n getPropertyByGroupId: (groupId: string) => entityDef?.properties.filter((p: any) => p.groupId === groupId) ?? [],\n getPropertyLayout: (name: string) => singleInterface?.properties?.find((p: any) => p.name === name)?.layout,\n singleInterface,\n groups,\n };\n }\n\n protected async createGridLayoutStructure(\n singleInterface: any,\n helpers: ReturnType<typeof this.createEntityHelpers>,\n evaluateExpressions?: (data: any) => Promise<any>,\n includeProperties?: string[],\n ) {\n return await this.createGridLayoutStructureInternal(\n singleInterface,\n helpers,\n evaluateExpressions,\n includeProperties,\n );\n }\n\n //#region ---- Visible Evaluation Helpers ----\n\n private async getVisiblePropertiesByGroupId(\n sectionId: string,\n helpers: ReturnType<typeof this.createEntityHelpers>,\n evaluateExpressions?: (data: any) => Promise<any>,\n includeProperties?: string[],\n ) {\n let properties = helpers.getPropertyByGroupId(sectionId) ?? [];\n\n // Filter by includeProperties if provided\n if (includeProperties && includeProperties.length > 0) {\n const includeSet = new Set(includeProperties);\n properties = properties.filter((p: any) => includeSet.has(p.name));\n }\n\n const evaluated = await Promise.all(\n properties.map(async (property: any) => {\n let visible = property?.schema?.visible;\n\n if (typeof visible === 'string' && evaluateExpressions) {\n try {\n const result = await evaluateExpressions({ visible });\n visible = result.visible;\n } catch {\n visible = true;\n }\n }\n\n return { property, visible: visible ?? true };\n }),\n );\n\n return evaluated.filter((x) => x.visible !== false).map((x) => x.property);\n }\n\n private async createPropertyGrid(\n sectionId: string,\n helpers: ReturnType<typeof this.createEntityHelpers>,\n evaluateExpressions?: (data: any) => Promise<any>,\n includeProperties?: string[],\n ) {\n const visibleProperties = await this.getVisiblePropertiesByGroupId(\n sectionId,\n helpers,\n evaluateExpressions,\n includeProperties,\n );\n\n return {\n type: 'grid-layout',\n mode: 'edit',\n options: {\n grid: {\n default: {\n columns: 'repeat(12, 1fr)',\n rows: 'repeat(1, 1fr)',\n gap: '20px',\n },\n },\n },\n children: visibleProperties.map((p: any) => {\n const layout = helpers.getPropertyLayout(p.name);\n return {\n type: 'grid-item-layout',\n name: p.name,\n options: {\n colSpan: layout?.positions?.lg?.colSpan ?? 12,\n colStart: layout?.positions?.lg?.colStart,\n colEnd: layout?.positions?.lg?.colEnd,\n },\n children: [\n {\n type: 'form-field',\n options: {\n label: p.title,\n showLabel: layout?.label?.visible ?? true,\n },\n children: [\n {\n type: p.schema.interface?.type ?? '',\n path: p.name,\n name: p.name,\n defaultValue: p.schema.defaultValue,\n children: p.schema.interface?.children,\n options: p.schema.interface?.options,\n triggers: p.schema.interface?.triggers,\n valueTransforms: p.schema.interface?.valueTransforms,\n },\n ],\n },\n ],\n };\n }),\n };\n }\n\n private async createGridLayoutStructureInternal(\n singleInterface: any,\n helpers: ReturnType<typeof this.createEntityHelpers>,\n evaluateExpressions?: (data: any) => Promise<any>,\n includeProperties?: string[],\n ) {\n // Filter out empty sections (sections with no visible properties)\n const sectionsWithProperties = await Promise.all(\n (singleInterface?.sections ?? []).map(async (s: any) => {\n const visibleProperties = await this.getVisiblePropertiesByGroupId(\n s.id,\n helpers,\n evaluateExpressions,\n includeProperties,\n );\n return { section: s, hasProperties: visibleProperties.length > 0 };\n }),\n );\n\n const validSections = sectionsWithProperties.filter((item) => item.hasProperties).map((item) => item.section);\n\n return {\n type: 'grid-layout',\n options: {\n grid: {\n default: {\n columns: 'repeat(12, 1fr)',\n rows: 'repeat(1, 1fr)',\n gap: '20px',\n },\n },\n },\n children: await Promise.all(\n validSections.map(async (s: any) => ({\n type: 'grid-item-layout',\n name: s.id,\n options: {\n colSpan: s.layout?.positions?.lg?.colSpan ?? 12,\n colStart: s.layout?.positions?.lg?.colStart,\n colEnd: s.layout?.positions?.lg?.colEnd,\n },\n children: [\n {\n type: 'fieldset-layout',\n options: {\n title: helpers.getGroupById(s.id)?.title ?? '',\n collapsible: true,\n },\n children: [await this.createPropertyGrid(s.id, helpers, evaluateExpressions, includeProperties)],\n },\n ],\n })),\n ),\n };\n }\n\n //#endregion\n}\n","import { AXPEntityPage } from '@acorex/platform/common';\nimport { AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPPageComponentRegistryService } from '@acorex/platform/layout/components';\nimport {\n AXPLayoutDetailsViewAction,\n AXPLayoutDetailsViewPage,\n AXPPageComponentInstanceRegistryService,\n AXPPageLayoutBaseComponent,\n} from '@acorex/platform/layout/views';\nimport { inject, Injectable, Injector, Type } from '@angular/core';\n\n//#region ---- Page Component Converter ----\n\n/**\n * Converts AXPEntityPage to AXPLayoutDetailsViewPage for component-based pages\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPPageComponentConverter {\n private pageComponentRegistry = inject(AXPPageComponentRegistryService);\n private injector = inject(Injector);\n private instanceRegistry = inject(AXPPageComponentInstanceRegistryService);\n\n async convert(\n entityPage: AXPEntityPage,\n rootContext: Record<string, any>,\n rootTitle: string,\n ): Promise<AXPLayoutDetailsViewPage> {\n // Verify component exists in registry\n const loader = await this.pageComponentRegistry.find(entityPage.componentKey);\n if (!loader) {\n throw new Error(`Component with key \"${entityPage.componentKey}\" not found in registry`);\n }\n\n // Load component type\n const ComponentType = await loader();\n\n const { actions, hasExecute } = await this.getComponentActionsAndExecute(ComponentType);\n\n const pageConfig = typeof entityPage.field === 'string' ? { field: entityPage.field } : undefined;\n const options = entityPage.options;\n const componentKey = entityPage.componentKey;\n\n return {\n id: componentKey,\n title: rootTitle,\n label: entityPage.title ?? componentKey,\n description: entityPage.description,\n icon: entityPage.icon,\n content: [{ type: 'component', componentKey, pageConfig, options }],\n actions,\n getActions: () => this.getActionsFromInstance(componentKey, actions),\n ...(hasExecute && {\n execute: (command: AXPExecuteCommand, context: Record<string, unknown>): Promise<AXPExecuteCommandResult> =>\n this.delegateExecute(componentKey, command, context),\n }),\n isReadonly: false,\n };\n }\n\n /**\n * Get actions from the registered component instance (reactive).\n * Falls back to static actions if instance is not yet registered.\n */\n private async getActionsFromInstance(\n componentKey: string,\n fallbackActions: AXPLayoutDetailsViewAction[],\n ): Promise<AXPLayoutDetailsViewAction[]> {\n const instance = this.instanceRegistry.get(componentKey);\n if (!instance) {\n return fallbackActions;\n }\n\n const actions: AXPLayoutDetailsViewAction[] = [];\n\n const [primaryActions, secondaryActions] = await Promise.all([\n instance.getPrimaryMenuItems(),\n instance.getSecondaryMenuItems(),\n ]);\n\n for (const action of primaryActions) {\n actions.push({\n ...action,\n priority: 'primary',\n zone: (action as { zone?: 'header' | 'footer' }).zone ?? 'header',\n } as AXPLayoutDetailsViewAction);\n }\n\n for (const action of secondaryActions) {\n actions.push({\n ...action,\n priority: 'secondary',\n zone: (action as { zone?: 'header' | 'footer' }).zone ?? 'header',\n } as AXPLayoutDetailsViewAction);\n }\n\n return actions;\n }\n\n private async delegateExecute(\n componentKey: string,\n command: AXPExecuteCommand,\n context: Record<string, unknown>,\n ): Promise<AXPExecuteCommandResult> {\n const instance = this.instanceRegistry.get(componentKey);\n const result = await instance?.execute?.(command);\n if (result !== undefined && typeof result === 'object' && result !== null && 'success' in result) {\n return result as AXPExecuteCommandResult;\n }\n return { success: true };\n }\n\n /**\n * Get actions and whether component has custom execute from component if it extends AXPPageLayoutBaseComponent\n */\n private async getComponentActionsAndExecute(ComponentType: Type<unknown>): Promise<{\n actions: AXPLayoutDetailsViewAction[];\n hasExecute: boolean;\n }> {\n const empty = { actions: [] as AXPLayoutDetailsViewAction[], hasExecute: false };\n try {\n let currentType: unknown = ComponentType;\n let extendsBase = false;\n\n while (currentType) {\n if (currentType === AXPPageLayoutBaseComponent) {\n extendsBase = true;\n break;\n }\n currentType = Object.getPrototypeOf(currentType);\n if (\n !currentType ||\n currentType === Object ||\n currentType === Function ||\n !(currentType as { prototype?: unknown }).prototype\n ) {\n break;\n }\n }\n\n if (!extendsBase) {\n return empty;\n }\n\n const tempInjector = Injector.create({\n providers: [{ provide: ComponentType, useClass: ComponentType as Type<unknown> }],\n parent: this.injector,\n });\n const componentInstance = tempInjector.get(ComponentType) as AXPPageLayoutBaseComponent;\n\n const hasExecute =\n typeof componentInstance.execute === 'function' &&\n componentInstance.execute !== AXPPageLayoutBaseComponent.prototype.execute;\n\n const [primaryActions, secondaryActions] = await Promise.all([\n componentInstance.getPrimaryMenuItems(),\n componentInstance.getSecondaryMenuItems(),\n ]);\n\n const actions: AXPLayoutDetailsViewAction[] = [];\n\n for (const action of primaryActions) {\n actions.push({\n ...action,\n priority: 'primary',\n zone: (action as { zone?: 'header' | 'footer' }).zone ?? 'header',\n } as AXPLayoutDetailsViewAction);\n }\n\n for (const action of secondaryActions) {\n actions.push({\n ...action,\n priority: 'secondary',\n zone: (action as { zone?: 'header' | 'footer' }).zone ?? 'header',\n } as AXPLayoutDetailsViewAction);\n }\n\n return { actions, hasExecute };\n } catch (error) {\n console.warn(`Failed to get actions from component:`, error);\n return empty;\n }\n }\n}\n\n//#endregion\n","import { AXPEntityCommandScope, AXPRelatedEntity, getEntityInfo } from '@acorex/platform/common';\nimport {\n AXPContextData,\n AXPExecuteCommand,\n AXPExecuteCommandResult,\n AXPExpressionEvaluatorScope,\n} from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewPage } from '@acorex/platform/layout/views';\nimport { get } from 'lodash-es';\nimport { AXPEntityCommandTriggerViewModel } from '../../../entity.viewmodel';\nimport { AXPRelatedEntityConverterFactory } from '../related-entity-converter-factory.service';\nimport { AXPBaseRelatedEntityConverter, AXPRelatedEntityConverterContext } from './base-related-entity-converter';\n\nexport class AXPPageDetailsConverter extends AXPBaseRelatedEntityConverter {\n async convert(\n relatedEntity: AXPRelatedEntity,\n context: AXPRelatedEntityConverterContext,\n ): Promise<AXPLayoutDetailsViewPage> {\n const { entityDef } = await this.getEntityDefinition(relatedEntity, context.entityResolver);\n const baseHelpers = this.createEntityHelpers(entityDef);\n\n // Get update interface to determine editable properties\n const updateInterface = entityDef?.interfaces?.master?.update;\n const editablePropertyNames = new Set(updateInterface?.properties?.map((p: any) => p.name) ?? []);\n\n // Check if page should be readonly (no editable properties or all editable properties are readonly)\n const isPageReadonly =\n editablePropertyNames.size === 0 ||\n (editablePropertyNames.size > 0 &&\n [...editablePropertyNames].every((propName) => {\n const prop = entityDef?.properties?.find((p) => p.name === propName);\n return prop?.schema?.readonly === true;\n }));\n\n // If referenced strategy with mapping and detail type, exclude mapped properties from UI\n const p = relatedEntity?.persistence || {};\n const strategy = p.strategy || 'embedded';\n const mappedTargets: string[] = Object.keys(p.map || {}).map((k) => (k || '').split('.')[0]);\n const helpers = {\n ...baseHelpers,\n getPropertyByGroupId: (groupId: string) => {\n const props = baseHelpers.getPropertyByGroupId(groupId) ?? [];\n if (strategy !== 'referenced' || mappedTargets.length === 0) return props;\n return props.filter((prop: any) => !mappedTargets.includes(prop?.name));\n },\n } as typeof baseHelpers;\n\n const evaluateExpressions = async (actionData: any) => {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(context.context, path);\n },\n },\n };\n return await context.expressionEvaluator!.evaluate(actionData, scope);\n };\n\n // Build related tabs for the related entity page (mirrors main-entity tab building)\n const tabDetailEntities = entityDef?.relatedEntities?.filter(\n (re: any) => !re.hidden && re.layout?.type === 'tab-detail',\n );\n const tabListEntities = entityDef?.relatedEntities?.filter(\n (re: any) => !re.hidden && (!re.layout?.type || re.layout?.type === 'tab-list'),\n );\n\n const factory = new AXPRelatedEntityConverterFactory();\n const tabDetailTabs = await this.buildTabDetails(factory, tabDetailEntities ?? [], context);\n const tabListTabs = await this.buildTabLists(factory, tabListEntities ?? [], context);\n\n // Build actions from single interface\n const actions = this.buildActions(entityDef, helpers.singleInterface);\n\n return {\n id: entityDef?.name ?? '',\n title: `${context.rootTitle}`,\n label: relatedEntity.title ?? '@general:terms.common.overview',\n icon: relatedEntity.icon || entityDef.icon,\n isReadonly: isPageReadonly,\n settings: this.createPageSettings(),\n load: this.createLoadFunction(entityDef, relatedEntity, evaluateExpressions),\n execute: this.createExecuteFunction(entityDef, actions, evaluateExpressions, context),\n actions: await this.buildEvaluatedActions(actions, evaluateExpressions),\n // tabs: [...tabDetailTabs, ...tabListTabs],\n content: [await this.createGridLayoutStructure(helpers.singleInterface, helpers, evaluateExpressions, relatedEntity.properties)],\n };\n }\n\n //#region ---- Utility Methods ----\n\n private buildActions(entityDef: any, singleInterface: any): AXPEntityCommandTriggerViewModel[] {\n const actions = singleInterface?.actions ?? [];\n return actions.map((action: any) => new AXPEntityCommandTriggerViewModel(entityDef, action));\n }\n\n private async buildEvaluatedActions(\n actions: AXPEntityCommandTriggerViewModel[],\n evaluateExpressions: ((data: any) => Promise<any>) | null,\n ): Promise<any[]> {\n const evaluatedActions = [];\n\n for (const action of actions) {\n // Evaluate disabled condition\n let disabled = action.disabled;\n if (disabled && typeof disabled === 'string' && evaluateExpressions) {\n try {\n const result = await evaluateExpressions({ disabled: disabled });\n disabled = result.disabled;\n } catch {\n disabled = false;\n }\n }\n // Evaluate hidden condition\n let hidden = action.hidden;\n if (hidden && typeof hidden === 'string' && evaluateExpressions) {\n try {\n const result = await evaluateExpressions({ hidden: hidden });\n hidden = result.hidden;\n } catch {\n hidden = false;\n }\n }\n\n // Skip if hidden\n if (hidden) continue;\n\n // Evaluate options\n let options = action.options;\n if (options && evaluateExpressions) {\n try {\n options = await evaluateExpressions(options);\n } catch {\n // Keep original options if evaluation fails\n }\n }\n\n evaluatedActions.push({\n name: action.name,\n title: action.title,\n icon: action.icon,\n color: action.color,\n disabled: disabled || false,\n zone: 'header',\n priority: action.priority,\n scope: action.scope === AXPEntityCommandScope.Individual ? AXPEntityCommandScope.TypeLevel : action.scope,\n command: {\n name: action.name,\n options: options,\n metadata: action.metadata,\n },\n });\n }\n return evaluatedActions;\n }\n\n private createPageSettings() {\n return {\n commands: {\n reject: {\n title: '@general:actions.discard.title',\n icon: 'fa-light fa-rotate-left',\n color: 'default',\n visible: '{{context.isDirty()}}',\n command: { name: 'discard' },\n },\n accept: {\n title: '@general:actions.save.title',\n icon: 'fa-light fa-floppy-disk',\n color: 'primary',\n visible: '{{context.isDirty()}}',\n command: { name: 'update-entity' },\n },\n },\n };\n }\n\n private createLoadFunction(entityDef: any, relatedEntity: AXPRelatedEntity, evaluateExpressions: any) {\n return async (context: any) => {\n const fn = entityDef?.queries.byKey?.execute as Function;\n const conditionValues = relatedEntity.conditions?.map((c) => c.value) ?? [];\n const evaluatedConditionValues = await Promise.all(conditionValues.map((c) => evaluateExpressions(c)));\n\n const id = evaluatedConditionValues[0];\n const result = await fn(id);\n\n return { success: true, data: result };\n };\n }\n\n private createExecuteFunction(\n entityDef: any,\n actions: AXPEntityCommandTriggerViewModel[],\n evaluateExpressions: ((data: any) => Promise<any>) | null,\n converterContext: AXPRelatedEntityConverterContext,\n ): (e: AXPExecuteCommand, context: AXPContextData) => Promise<AXPExecuteCommandResult> {\n return async (e: AXPExecuteCommand, context: AXPContextData): Promise<AXPExecuteCommandResult> => {\n try {\n if (e.name === 'update-entity') {\n const fn = entityDef?.commands?.update?.execute as Function;\n const result = await fn(context);\n return {\n success: true,\n data: result,\n };\n } else {\n // Find action in single interface actions\n const action = actions.find((a) => a.name === e.name);\n if (action && converterContext.workflowService) {\n // Evaluate action options with current context\n let evaluatedOptions = action.options;\n if (evaluateExpressions && action.options) {\n try {\n evaluatedOptions = await evaluateExpressions(action.options);\n } catch {\n // Keep original options if evaluation fails\n }\n }\n\n const commandName = e.name.split('&')[0];\n if (converterContext.workflowService.exists(commandName)) {\n await converterContext.workflowService.execute(commandName, {\n entity: getEntityInfo(entityDef).source,\n data: context,\n entityInfo: {\n name: entityDef.name,\n module: entityDef.module,\n title: entityDef.title,\n parentKey: entityDef.parentKey,\n source: `${entityDef.module}.${entityDef.name}`,\n },\n options: evaluatedOptions,\n metadata: action.metadata,\n });\n return {\n success: true,\n };\n }\n if (converterContext.commandService?.exists(commandName)) {\n // check options for evaluation\n await converterContext.commandService.execute(commandName, e.options);\n }\n }\n return {\n success: false,\n message: {\n code: 'invalid_command',\n text: 'Invalid command',\n },\n };\n }\n } catch (error) {\n return {\n success: false,\n message: {\n text: error as string,\n },\n };\n }\n };\n }\n\n //#endregion\n\n //#region ---- Tab Builders ----\n\n /**\n * Builds tab-detail items for a related entity page using the shared converters.\n */\n private async buildTabDetails(\n factory: AXPRelatedEntityConverterFactory,\n tabDetailEntities: AXPRelatedEntity[],\n ctx: AXPRelatedEntityConverterContext,\n ): Promise<any[]> {\n if (!ctx?.entityResolver || !tabDetailEntities?.length) {\n return [];\n }\n\n const tabs = [] as any[];\n for (const re of tabDetailEntities) {\n const converter = factory.createTabDetailsConverter();\n tabs.push(\n await converter.convert(re, {\n entityResolver: ctx.entityResolver,\n }),\n );\n }\n return tabs;\n }\n\n /**\n * Builds tab-list items for a related entity page using the shared converters with context-aware filters/actions.\n */\n private async buildTabLists(\n factory: AXPRelatedEntityConverterFactory,\n tabListEntities: AXPRelatedEntity[],\n ctx: AXPRelatedEntityConverterContext,\n ): Promise<any[]> {\n if (!ctx?.entityResolver || !tabListEntities?.length) {\n return [];\n }\n\n const tabs = [] as any[];\n for (const re of tabListEntities) {\n const converter = factory.createTabListConverter();\n tabs.push(\n await converter.convert(re, {\n entityResolver: ctx.entityResolver,\n expressionEvaluator: ctx.expressionEvaluator,\n context: ctx.context,\n }),\n );\n }\n return tabs;\n }\n\n //#endregion\n}\n","import { AXPEntityAction, AXPEntityCommandScope, AXPRelatedEntity, getEntityInfo } from '@acorex/platform/common';\nimport {\n AXPContextData,\n AXPExecuteCommand,\n AXPExecuteCommandResult,\n AXPExpressionEvaluatorScope,\n} from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewPage } from '@acorex/platform/layout/views';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { get } from 'lodash-es';\nimport { AXPEntityCommandTriggerViewModel } from '../../../entity.viewmodel';\nimport { AXPBaseRelatedEntityConverter, AXPRelatedEntityConverterContext } from './base-related-entity-converter';\nimport { resolveRelatedEntityColumns } from './related-entity-include-columns';\n\nexport class AXPPageListConverter extends AXPBaseRelatedEntityConverter {\n async convert(\n relatedEntity: AXPRelatedEntity,\n context: AXPRelatedEntityConverterContext,\n ): Promise<AXPLayoutDetailsViewPage> {\n const { entityDef } = await this.getEntityDefinition(relatedEntity, context.entityResolver);\n\n const evaluateExpressions = async (actionData: { [key: string]: string } | { [key: string]: any }[]) => {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(context.context, path);\n },\n },\n };\n return await context.expressionEvaluator!.evaluate(actionData, scope);\n };\n\n const actions = await this.evaluateRelatedEntityActionsForRootContext(relatedEntity?.actions, context);\n\n const columnScope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(context.context, path);\n },\n },\n };\n const { includeColumns, relatedTableColumns } = await resolveRelatedEntityColumns(\n relatedEntity.columns,\n context.expressionEvaluator!,\n columnScope,\n );\n\n const filters = await Promise.all(\n relatedEntity.conditions?.map(async (c) => {\n const value = await evaluateExpressions(c.value);\n return {\n field: c.name,\n operator: c.operator,\n value: value,\n hidden: true,\n };\n }) ?? [],\n );\n\n return {\n id: entityDef?.name ?? '',\n title: `${context.rootTitle}`,\n label: relatedEntity.title!,\n icon: relatedEntity.icon || entityDef.icon,\n actions: this.mergeActions(entityDef, actions)\n ?.filter((a) => a.priority === 'primary' && !a.isChild)\n ?.map((a) => {\n return {\n ...a,\n zone: 'header',\n visible: !a.hidden,\n hidden: a.hidden,\n priority: 'primary',\n name: a.name,\n title: a.title,\n scope: a.scope,\n icon: a.icon,\n color: a.color,\n disabled: a.disabled,\n command: {\n name: a.name,\n options: a.options,\n metadata: a.metadata,\n },\n items: a.items?.map((sub) => ({\n name: sub.name,\n title: sub.title,\n icon: sub.icon,\n color: sub.color,\n disabled: sub.disabled,\n command: {\n name: sub.name,\n options: sub.options,\n metadata: sub.metadata,\n },\n })),\n };\n }),\n execute: async (command: AXPExecuteCommand, executeContext: AXPContextData): Promise<AXPExecuteCommandResult> => {\n try {\n const commandName = command.name.split('&')[0];\n const mergedActions = this.mergeActions(entityDef, actions);\n\n const flattenActions = (list: AXPEntityCommandTriggerViewModel[]): AXPEntityCommandTriggerViewModel[] => {\n const result: AXPEntityCommandTriggerViewModel[] = [];\n for (const a of list) {\n result.push(a);\n if (a.items?.length) result.push(...flattenActions(a.items));\n }\n return result;\n };\n const flatActions = flattenActions(mergedActions);\n const action = flatActions.find((a) => {\n return a.name === command.name || a.name === commandName || a.name.split('&')[0] === commandName;\n });\n\n if (!action) {\n console.warn(`Action ${commandName} not found in entity definition`);\n return {\n success: false,\n message: {\n code: 'ACTION_NOT_FOUND',\n text: `Action ${commandName} not found`,\n },\n };\n }\n\n // Evaluate action options with current root context for lazy evaluation\n // This ensures actions use the latest context data when executed\n let evaluatedOptions = action.options;\n if (\n action.scope !== AXPEntityCommandScope.Individual &&\n action.options &&\n context.context &&\n context.expressionEvaluator\n ) {\n try {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(context.context, path);\n },\n },\n };\n evaluatedOptions = await context.expressionEvaluator.evaluate(action.options, scope);\n } catch {\n evaluatedOptions = action.options;\n }\n }\n\n const actionData =\n action.scope == AXPEntityCommandScope.Selected\n ? executeContext\n : evaluatedOptions?.['process']?.data || null;\n\n //TODO: This is a temporary solution to exclude properties from the related entity.\n // We need to find a better way to handle this.\n const excludeForCreateOrUpdate =\n (commandName === 'Entity:Create' || commandName === 'Entity:Update') &&\n relatedEntity.excludeProperties?.length;\n const mergedOptions = excludeForCreateOrUpdate\n ? { ...evaluatedOptions, excludeProperties: relatedEntity.excludeProperties }\n : evaluatedOptions;\n\n if (context.commandService.exists(commandName)) {\n // check options for evaluation\n await context.commandService.execute(commandName, {\n __context__: {\n entity: getEntityInfo(entityDef).source,\n entityInfo: {\n name: entityDef.name,\n module: entityDef.module,\n title: entityDef.title,\n parentKey: entityDef.parentKey,\n source: `${entityDef.module}.${entityDef.name}`,\n },\n data: actionData,\n options: mergedOptions,\n metadata: action.metadata,\n },\n options: mergedOptions,\n metadata: action.metadata,\n });\n } else {\n await context.workflowService.execute(commandName, {\n entity: getEntityInfo(entityDef).source,\n entityInfo: {\n name: entityDef.name,\n module: entityDef.module,\n title: entityDef.title,\n parentKey: entityDef.parentKey,\n source: `${entityDef.module}.${entityDef.name}`,\n },\n data: actionData,\n options: mergedOptions,\n metadata: action.metadata,\n });\n }\n\n return { success: true };\n } catch (error) {\n console.error('Error executing command:', error);\n return {\n success: false,\n message: {\n code: 'EXECUTION_ERROR',\n text: error instanceof Error ? error.message : 'Unknown error occurred',\n },\n };\n }\n },\n\n content: [\n {\n type: AXPWidgetsCatalog.entityList,\n name: 'page-list',\n defaultValue: {\n toolbar: {\n filters: await Promise.all(filters),\n },\n },\n options: {\n entity: relatedEntity.entity,\n showEntityActions: false,\n actions: actions,\n includeColumns,\n relatedTableColumns,\n customFilterDefinitions: relatedEntity.customFilterDefinitions,\n },\n },\n ],\n };\n }\n\n private mergeActions(entityDef: any, relatedEntityActions: AXPEntityAction[]): AXPEntityCommandTriggerViewModel[] {\n const originalList = entityDef?.interfaces?.master?.list?.actions ?? [];\n const relatedEntityActionList = relatedEntityActions ?? [];\n\n // Create a map to track which actions from relatedEntityActionList have been used\n const usedOverrideActions = new Set<string>();\n\n // Start with original actions, applying overrides where they exist\n const mergedActions = originalList.map((originalAction: any) => {\n const originalCommandName =\n typeof originalAction.command === 'string' ? originalAction.command : originalAction.command.name;\n\n const overrideAction = relatedEntityActionList.find((action) => {\n const actionCommandName = typeof action.command === 'string' ? action.command : action.command.name;\n return actionCommandName === originalCommandName && action.name === originalAction.name;\n });\n\n if (overrideAction) {\n // Mark this override action as used\n const overrideKey = `${typeof overrideAction.command === 'string' ? overrideAction.command : overrideAction.command.name}_${overrideAction.name}`;\n usedOverrideActions.add(overrideKey);\n return new AXPEntityCommandTriggerViewModel(entityDef, overrideAction);\n }\n\n return new AXPEntityCommandTriggerViewModel(entityDef, originalAction);\n });\n\n // Add any remaining actions from relatedEntityActionList that weren't used as overrides\n const additionalActions = relatedEntityActionList\n .filter((action) => {\n const actionKey = `${typeof action.command === 'string' ? action.command : action.command.name}_${action.name}`;\n return !usedOverrideActions.has(actionKey);\n })\n .map((action) => new AXPEntityCommandTriggerViewModel(entityDef, action));\n\n return [...additionalActions, ...mergedActions];\n }\n}\n","import { AXPRelatedEntity } from '@acorex/platform/common';\nimport { AXPLayoutDetailsViewTabItem } from '@acorex/platform/layout/views';\nimport { AXPBaseRelatedEntityConverter, AXPRelatedEntityConverterContext } from './base-related-entity-converter';\n\nexport class AXPTabDetailsConverter extends AXPBaseRelatedEntityConverter {\n async convert(\n relatedEntity: AXPRelatedEntity,\n context: AXPRelatedEntityConverterContext,\n ): Promise<AXPLayoutDetailsViewTabItem> {\n const { entityDef } = await this.getEntityDefinition(relatedEntity, context.entityResolver);\n const baseHelpers = this.createEntityHelpers(entityDef);\n\n // If referenced strategy with mapping and detail type, exclude mapped properties from UI\n const p = relatedEntity?.persistence || {};\n const strategy = p.strategy || 'embedded';\n const mappedTargets: string[] = Object.keys(p.map || {}).map((k) => (k || '').split('.')[0]);\n const helpers = {\n ...baseHelpers,\n getPropertyByGroupId: (groupId: string) => {\n const props = baseHelpers.getPropertyByGroupId(groupId) ?? [];\n if (strategy !== 'referenced' || mappedTargets.length === 0) return props;\n return props.filter((prop: any) => !mappedTargets.includes(prop?.name));\n },\n } as typeof baseHelpers;\n\n return {\n id: entityDef?.name ?? '',\n title: relatedEntity.title ?? entityDef?.title ?? '',\n icon: relatedEntity.icon || entityDef.icon,\n content: [\n await this.createGridLayoutStructure(helpers.singleInterface, helpers, undefined, relatedEntity.properties),\n ],\n };\n }\n}\n","import { AXPRelatedEntity } from '@acorex/platform/common';\nimport { AXPExpressionEvaluatorScope } from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewTabItem } from '@acorex/platform/layout/views';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { get } from 'lodash-es';\nimport { AXPBaseRelatedEntityConverter, AXPRelatedEntityConverterContext } from './base-related-entity-converter';\nimport { resolveRelatedEntityColumns } from './related-entity-include-columns';\n\nexport class AXPTabListConverter extends AXPBaseRelatedEntityConverter {\n async convert(\n relatedEntity: AXPRelatedEntity,\n context: AXPRelatedEntityConverterContext,\n ): Promise<AXPLayoutDetailsViewTabItem> {\n const { entityDef } = await this.getEntityDefinition(relatedEntity, context.entityResolver);\n const evaluateExpressions = async (actionData: any) => {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(context.context, path);\n },\n },\n };\n return await context.expressionEvaluator!.evaluate(actionData, scope);\n };\n // console.log({ relatedEntity });\n\n const filters = await Promise.all(\n relatedEntity.conditions?.map(async (c) => {\n const value = await evaluateExpressions(c.value);\n return {\n field: c.name,\n operator: c.operator,\n value: value,\n hidden: true,\n };\n }) ?? [],\n );\n const actions = await this.evaluateRelatedEntityActionsForRootContext(relatedEntity.actions, context);\n\n const columnScope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return get(context.context, path);\n },\n },\n };\n const { includeColumns, relatedTableColumns } = await resolveRelatedEntityColumns(\n relatedEntity.columns,\n context.expressionEvaluator!,\n columnScope,\n );\n\n return {\n id: entityDef?.name ?? '',\n title: relatedEntity.title ?? entityDef?.title ?? '',\n icon: relatedEntity.icon || entityDef.icon,\n content: [\n {\n type: AXPWidgetsCatalog.entityList,\n name: `${relatedEntity.entity}-tab-list`,\n defaultValue: {\n toolbar: {\n filters: filters,\n },\n },\n options: {\n entity: relatedEntity.entity,\n showEntityActions: true,\n showToolbar: false,\n actions: actions,\n maxHeight: '300px',\n includeColumns,\n relatedTableColumns,\n customFilterDefinitions: relatedEntity.customFilterDefinitions,\n },\n },\n ],\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n AXPPageDetailsConverter,\n AXPPageListConverter,\n AXPRelatedEntityConverter,\n AXPTabDetailsConverter,\n AXPTabListConverter,\n} from './related-entity-converters';\n\nexport type ConverterType = 'page-detail' | 'page-list' | 'tab-detail' | 'tab-list';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPRelatedEntityConverterFactory {\n createConverter(type: ConverterType): AXPRelatedEntityConverter {\n switch (type) {\n case 'page-detail':\n return new AXPPageDetailsConverter();\n case 'page-list':\n return new AXPPageListConverter();\n case 'tab-detail':\n return new AXPTabDetailsConverter();\n case 'tab-list':\n return new AXPTabListConverter();\n default:\n throw new Error(`Unsupported converter type: ${type}`);\n }\n }\n\n createPageDetailsConverter(): AXPRelatedEntityConverter {\n return this.createConverter('page-detail');\n }\n\n createPageListConverter(): AXPRelatedEntityConverter {\n return this.createConverter('page-list');\n }\n\n createTabDetailsConverter(): AXPRelatedEntityConverter {\n return this.createConverter('tab-detail');\n }\n\n createTabListConverter(): AXPRelatedEntityConverter {\n return this.createConverter('tab-list');\n }\n}\n","import {\n AXPEntity,\n AXPEntityCommandScope,\n AXPEntityProperty,\n AXPFilterOperatorMiddlewareService,\n AXPRelatedEntity,\n getEntityInfo,\n} from '@acorex/platform/common';\nimport {\n AXPContextData,\n AXPExecuteCommand,\n AXPExecuteCommandResult,\n AXPExpressionEvaluatorScope,\n} from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewPage } from '@acorex/platform/layout/views';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { get, merge } from 'lodash-es';\nimport { AXPEntityCommandTriggerViewModel } from '../../entity.viewmodel';\nimport { AXPRelatedEntityConverterFactory } from './related-entity-converter-factory.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPMainEntityContentBuilder {\n private workflowService = inject(AXPWorkflowService);\n private commandService = inject(AXPCommandService);\n private filterOperatorMiddleware = inject(AXPFilterOperatorMiddlewareService);\n\n constructor(private relatedEntityConverterFactory: AXPRelatedEntityConverterFactory) { }\n\n async build(\n entity: AXPEntity,\n rootContext: any,\n dependencies?: any,\n rootTitle?: string,\n ): Promise<AXPLayoutDetailsViewPage> {\n const groups = entity?.groups ?? [];\n const singleInterface = entity?.interfaces?.master?.single;\n const updateInterface = entity?.interfaces?.master?.update;\n\n // Get list of visible property names from single interface\n const visiblePropertyNames = new Set(singleInterface?.properties?.map((p: any) => p.name) ?? []);\n\n // Get list of editable property names from update interface\n const editablePropertyNames = new Set(updateInterface?.properties?.map((p: any) => p.name) ?? []);\n\n // Accumulate groups from main and merge-detail related entities for validation/title lookup\n const allGroups: any[] = [...groups];\n\n // Create expression evaluator for actions\n const evaluateExpressions = dependencies?.expressionEvaluator\n ? this.createExpressionEvaluator(rootContext, dependencies.expressionEvaluator)\n : null;\n\n // Prepare merge-details structures (sections and properties per section)\n let evaluatedRelatedEntities = [...(entity?.relatedEntities ?? [])];\n\n if (evaluatedRelatedEntities && evaluateExpressions) {\n // Only evaluate the 'hidden' property for each related entity\n evaluatedRelatedEntities = await Promise.all(\n (entity.relatedEntities ?? []).map(async (re: AXPRelatedEntity) => {\n let hidden = re.hidden;\n if (hidden && typeof hidden === 'string') {\n try {\n const result = await evaluateExpressions({ hidden });\n hidden = result.hidden;\n } catch {\n // Keep original hidden if evaluation fails\n }\n }\n return { ...re, hidden };\n }),\n );\n }\n\n const mergeDetailEntities = evaluatedRelatedEntities?.filter(\n (re: any) => !re.hidden && re.layout?.type === 'merge-detail',\n );\n\n type SectionPropsMap = Record<string, AXPEntityProperty[]>;\n const mainPropsByGroup: SectionPropsMap = (entity?.properties ?? []).reduce((acc: SectionPropsMap, p: any) => {\n if (!acc[p.groupId]) acc[p.groupId] = [];\n acc[p.groupId].push(p);\n return acc;\n }, {} as SectionPropsMap);\n\n // Will hold merged properties per group (section)\n const mergedPropsByGroup: SectionPropsMap = { ...mainPropsByGroup };\n\n // Collect sections from main interface (validated later) and related ones for ordering\n const mainSections = singleInterface?.sections ?? [];\n // Track extra sections with entity-level ordering context\n const beforeExtraSections: Array<{ section: any; entityOrder: number }> = [];\n const middleExtraSections: Array<{ section: any }> = [];\n const afterExtraSections: Array<{ section: any; entityOrder: number }> = [];\n const beforeExtraIds = new Set<string>();\n const middleExtraIds = new Set<string>();\n const afterExtraIds = new Set<string>();\n\n // Effective order overrides for main sections when merged with BEFORE related entities\n let beforeOverrideSectionOrders: Record<string, number> = {};\n\n // Collect tab-list tabs from merge-detail related entities to merge with main tabs\n const nestedTabListTabs: any[] = [];\n\n // Helper to append related-only sections into before/after buckets\n const queueRelatedSection = (\n section: any,\n position: 'before' | 'middle' | 'after' | undefined,\n entityOrder: number,\n ) => {\n if (!section) return;\n if (position === 'before') {\n if (!beforeExtraIds.has(section.id)) {\n beforeExtraIds.add(section.id);\n beforeExtraSections.push({ section, entityOrder });\n }\n } else if (position === 'middle') {\n if (!middleExtraIds.has(section.id)) {\n middleExtraIds.add(section.id);\n middleExtraSections.push({ section });\n }\n } else {\n if (!afterExtraIds.has(section.id)) {\n afterExtraIds.add(section.id);\n afterExtraSections.push({ section, entityOrder });\n }\n }\n };\n\n // Resolve and merge merge-detail entities\n // Sort related entities by position group then by layout.order\n if (mergeDetailEntities?.length && dependencies?.entityResolver) {\n const beforeEntities = (mergeDetailEntities || [])\n .filter((re: any) => (re.layout?.position ?? 'middle') === 'before')\n .sort(\n (a: any, b: any) =>\n (a.layout?.order ?? Number.MAX_SAFE_INTEGER) - (b.layout?.order ?? Number.MAX_SAFE_INTEGER),\n );\n const middleEntities = (mergeDetailEntities || []).filter(\n (re: any) => (re.layout?.position ?? 'middle') === 'middle',\n );\n const afterEntities = (mergeDetailEntities || [])\n .filter((re: any) => (re.layout?.position ?? 'middle') === 'after')\n .sort(\n (a: any, b: any) =>\n (a.layout?.order ?? Number.MAX_SAFE_INTEGER) - (b.layout?.order ?? Number.MAX_SAFE_INTEGER),\n );\n\n const processRelated = async (relatedEntity: any) => {\n try {\n const [moduleName, entityName] = relatedEntity.entity.split('.');\n const entityDef = await dependencies.entityResolver.resolve(moduleName, entityName);\n if (!entityDef) {\n return;\n }\n\n const relSingle = entityDef?.interfaces?.master?.single;\n const relUpdate = entityDef?.interfaces?.master?.update;\n const relGroups = entityDef?.groups ?? [];\n // Merge related groups into allGroups (avoid duplicates by id)\n for (const rg of relGroups) {\n if (!allGroups.some((g: any) => g.id === rg.id)) {\n allGroups.push(rg);\n }\n }\n\n // Collect nested tab-list related entities from this merge-detail entity and convert to tabs\n try {\n const nestedTabListEntities = entityDef?.relatedEntities?.filter(\n (re: any) => !re.hidden && (!re.layout?.type || re.layout?.type === 'tab-list'),\n );\n if (nestedTabListEntities?.length) {\n const converter = this.relatedEntityConverterFactory.createTabListConverter();\n const nestedDataPath = relatedEntity?.persistence?.dataPath || entityName;\n const nestedContext = get(rootContext, nestedDataPath) ?? rootContext;\n for (const nre of nestedTabListEntities) {\n try {\n const tab = await converter.convert(nre, {\n entityResolver: dependencies.entityResolver,\n expressionEvaluator: dependencies.expressionEvaluator,\n // Evaluate conditions relative to the merge-detail entity's dataPath\n context: nestedContext,\n });\n nestedTabListTabs.push(tab);\n } catch (err) {\n console.error('error: ', err);\n }\n }\n }\n } catch { }\n\n // Build related props map per group with metadata: __dataPath and __layout\n // If referenced strategy with mapping, exclude mapped target property names from UI props\n const p = relatedEntity?.persistence || {};\n const strategy = p.strategy || 'embedded';\n const mappedTargets: string[] = Object.keys(p.map || {}).map((k) => (k || '').split('.')[0]);\n // Filter by properties if provided (for detail types)\n const includeProperties =\n relatedEntity?.properties && relatedEntity.properties.length > 0\n ? new Set(relatedEntity.properties)\n : undefined;\n const excludeProperties =\n relatedEntity?.excludeProperties && relatedEntity.excludeProperties.length > 0\n ? new Set(relatedEntity.excludeProperties)\n : undefined;\n const relPropsByGroup: SectionPropsMap = (entityDef?.properties ?? []).reduce(\n (acc: SectionPropsMap, p: any) => {\n // Filter by excludeProperties if provided\n if (excludeProperties && excludeProperties.has(p.name)) {\n return acc; // skip excluded properties\n }\n // Filter by includeProperties if provided (for detail types)\n if (\n includeProperties &&\n (relatedEntity?.layout?.type === 'merge-detail' ||\n relatedEntity?.layout?.type === 'page-detail' ||\n relatedEntity?.layout?.type === 'tab-detail') &&\n !includeProperties.has(p.name)\n ) {\n return acc; // skip properties not in includeProperties\n }\n if (\n strategy === 'referenced' &&\n (relatedEntity?.layout?.type === 'merge-detail' ||\n relatedEntity?.layout?.type === 'page-detail' ||\n relatedEntity?.layout?.type === 'tab-detail') &&\n mappedTargets.includes(p.name)\n ) {\n return acc; // skip mapped properties\n }\n if (!acc[p.groupId]) acc[p.groupId] = [];\n // Clone shallow to not mutate original definitions\n const propClone = { ...p } as AXPEntityProperty & { __dataPath?: string; __layout?: any };\n const dataPath = relatedEntity?.persistence?.dataPath || entityName;\n (propClone as any).__dataPath = dataPath;\n (propClone as any).__layout = relSingle?.properties?.find((x: any) => x.name === p.name)?.layout;\n (propClone as any).__isEditable = !!relUpdate?.properties?.some((x: any) => x.name === p.name);\n // Apply generic propertyOverrides extension (e.g. for identifier defaultValue on nested paths)\n const override = (entity as any)?.extensions?.propertyOverrides?.[`${dataPath}.${p.name}`];\n if (override?.schema) {\n propClone.schema = { ...(propClone.schema ?? {}), ...override.schema };\n }\n acc[p.groupId].push(propClone as any);\n return acc;\n },\n {} as SectionPropsMap,\n );\n\n // Merge properties by section id\n const position: 'before' | 'middle' | 'after' = relatedEntity.layout?.position ?? 'middle';\n const entityOrder: number = relatedEntity.layout?.order ?? Number.MAX_SAFE_INTEGER;\n const relSections = (relSingle?.sections ?? []).filter((s: any) => relGroups.some((g: any) => g.id === s.id));\n\n for (const rs of relSections) {\n const sectionId = rs.id;\n const mainHasSection = !!mainSections?.some((s: any) => s.id === sectionId);\n const relProps = relPropsByGroup[sectionId] ?? [];\n\n if (mainHasSection) {\n const current = mergedPropsByGroup[sectionId] ?? [];\n mergedPropsByGroup[sectionId] =\n position === 'before' ? [...relProps, ...current] : [...current, ...relProps];\n\n // Capture override order for main section when position is 'before'\n if (position === 'before') {\n const order = rs?.order ?? 0;\n const prev = beforeOverrideSectionOrders[sectionId] ?? Number.MAX_SAFE_INTEGER;\n beforeOverrideSectionOrders[sectionId] = Math.min(prev, order);\n }\n } else {\n // Section isn't in main; queue section for rendering and set its props\n if (!mergedPropsByGroup[sectionId]) {\n mergedPropsByGroup[sectionId] = [];\n }\n mergedPropsByGroup[sectionId] =\n position === 'before'\n ? [...(relProps ?? []), ...(mergedPropsByGroup[sectionId] ?? [])]\n : [...(mergedPropsByGroup[sectionId] ?? []), ...(relProps ?? [])];\n queueRelatedSection(rs, position, entityOrder);\n }\n }\n } catch {\n // Silently ignore failures to resolve or merge\n }\n };\n\n // Process BEFORE entities first (sorted), then AFTER entities\n for (const re of beforeEntities) {\n await processRelated(re);\n }\n for (const re of middleEntities) {\n await processRelated(re);\n }\n for (const re of afterEntities) {\n await processRelated(re);\n }\n }\n\n const getGroupById = (id: string) => {\n return groups.find((s: any) => s.id === id);\n };\n\n const filterValidSections = (sections: any[]) => {\n return (\n sections?.filter((section: any) => {\n return allGroups.some((group: any) => group.id === section.id);\n }) ?? []\n );\n };\n\n // Utility: sort related-only sections by entity order then section order\n const sortRelatedSections = (sections: Array<{ section: any; entityOrder: number }>) =>\n [...(sections ?? [])]\n .filter((e) => !!e?.section)\n .sort((a, b) => {\n const ae = a.entityOrder ?? Number.MAX_SAFE_INTEGER;\n const be = b.entityOrder ?? Number.MAX_SAFE_INTEGER;\n if (ae !== be) return ae - be;\n const ao = a.section?.order ?? 0;\n const bo = b.section?.order ?? 0;\n return ao - bo;\n })\n .map((e) => e.section);\n\n // Determine effective order for main sections: if any BEFORE related merged that section, use its order; otherwise keep main order\n const computeEffectiveMainOrder = (s: any) => {\n const defaultOrder = s?.order ?? 0;\n const beforeOverride = beforeOverrideSectionOrders?.[s?.id ?? ''];\n return beforeOverride != null ? beforeOverride : defaultOrder;\n };\n\n // Build combined section list:\n // 1) related-before (entity-sorted)\n // 2) middle block: main sections + related-middle-only sections sorted by their section.order (with effective order for main)\n // 3) related-after (entity-sorted)\n const beforeSections = sortRelatedSections(beforeExtraSections);\n const mainSectionsList = [...filterValidSections(mainSections)];\n const middleOnlySections = middleExtraSections.map((e) => e.section);\n\n const middleBlock = [...mainSectionsList, ...middleOnlySections].sort((a: any, b: any) => {\n const ao = computeEffectiveMainOrder(a);\n const bo = computeEffectiveMainOrder(b);\n return ao - bo;\n });\n\n const afterSections = sortRelatedSections(afterExtraSections);\n\n const combinedSections = [...beforeSections, ...middleBlock, ...afterSections];\n\n // Check if page should be readonly (no editable properties or all editable properties are readonly)\n const isPageReadonly =\n editablePropertyNames.size === 0 ||\n (editablePropertyNames.size > 0 &&\n [...editablePropertyNames].every((propName) => {\n const prop = entity?.properties?.find((p) => p.name === propName);\n return prop?.schema?.readonly === true;\n }));\n\n // Debug: Log final sorted sections for verification\n try {\n const beforeEntityOrderMap = new Map(\n beforeExtraSections.map((e) => [e.section?.id, e.entityOrder ?? Number.MAX_SAFE_INTEGER]),\n );\n const afterEntityOrderMap = new Map(\n afterExtraSections.map((e) => [e.section?.id, e.entityOrder ?? Number.MAX_SAFE_INTEGER]),\n );\n\n const debugSections = [\n ...beforeSections.map((s: any) => ({\n bucket: 'before',\n id: s?.id,\n sectionOrder: s?.order ?? 0,\n entityOrder: beforeEntityOrderMap.get(s?.id) ?? Number.MAX_SAFE_INTEGER,\n })),\n ...middleBlock.map((s: any) => ({\n bucket: 'middle',\n id: s?.id,\n sectionOrder: s?.order ?? 0,\n effectiveOrder: computeEffectiveMainOrder(s),\n })),\n ...afterSections.map((s: any) => ({\n bucket: 'after',\n id: s?.id,\n sectionOrder: s?.order ?? 0,\n entityOrder: afterEntityOrderMap.get(s?.id) ?? Number.MAX_SAFE_INTEGER,\n })),\n ];\n // eslint-disable-next-line no-console\n //console.debug('[AXP] merge-details sorted sections', debugSections);\n } catch { }\n\n const getVisiblePropertyByGroupId = async (groupId: string) => {\n return (mergedPropsByGroup[groupId] ?? []) as Array<AXPEntityProperty & { __dataPath?: string; __layout?: any }>;\n };\n const getPropertyLayout = (name: string, prop?: any) => {\n // Prefer per-property layout (for merged related props), fallback to main entity layout\n return prop?.__layout ?? singleInterface?.properties?.find((p: any) => p.name === name)?.layout;\n };\n\n // Get related entities for tabs\n const tabDetailEntities = evaluatedRelatedEntities?.filter(\n (re: any) => !re.hidden && re.layout?.type === 'tab-detail',\n );\n const tabListEntities = evaluatedRelatedEntities?.filter(\n (re: any) => !re.hidden && (!re.layout?.type || re.layout?.type === 'tab-list'),\n );\n\n // Build related tabs if dependencies are provided\n const tabDetailTabs = await this.buildTabDetails(tabDetailEntities ?? [], dependencies);\n const tabListTabs = await this.buildTabLists(tabListEntities ?? [], rootContext, dependencies);\n\n // Build actions from single interface\n const actions = this.buildActions(entity, singleInterface);\n\n //console.log({ rootContext, dependencies });\n\n return {\n id: entity?.name ?? '',\n // title: singleInterface?.title ?? entity?.formats.individual ?? '',\n title: rootTitle ?? entity?.formats.individual,\n label: entity?.formats.displayName ?? '@general:terms.common.overview',\n icon: entity?.icon,\n actions: await this.buildEvaluatedActions(actions, evaluateExpressions),\n isPrimary: true,\n isReadonly: isPageReadonly,\n settings: {\n commands: {\n reject: {\n title: '@general:actions.discard.title',\n icon: 'fa-light fa-rotate-left',\n color: 'default',\n visible: '{{context.isDirty()}}',\n command: {\n name: 'discard',\n },\n },\n accept: {\n title: '@general:actions.save.title',\n icon: 'fa-light fa-floppy-disk',\n color: 'primary',\n visible: '{{context.isDirty()}}',\n command: {\n name: 'update-entity',\n },\n },\n },\n },\n load: async (params?: { forceRefresh?: boolean }) => {\n if (params?.forceRefresh) {\n return {\n success: true,\n data: await dependencies.reloadRootContext(),\n };\n }\n return {\n success: true,\n data: rootContext,\n };\n },\n execute: async (e: AXPExecuteCommand, context: AXPContextData): Promise<AXPExecuteCommandResult> => {\n try {\n if (e.name == 'update-entity') {\n const fn = entity?.commands?.update?.execute as Function;\n const result = await fn(context);\n return {\n success: true,\n data: result,\n };\n } else {\n // Find action in single interface actions\n const action = actions.find((a) => a.name === e.name);\n if (action && dependencies?.workflowService) {\n // Evaluate action options with current context\n let evaluatedOptions = action.options;\n if (evaluateExpressions && action.options) {\n try {\n evaluatedOptions = await evaluateExpressions(action.options);\n } catch {\n // Keep original options if evaluation fails\n }\n }\n\n const commandName = e.name.split('&')[0];\n if (this.workflowService.exists(commandName)) {\n await this.workflowService.execute(commandName, {\n entity: getEntityInfo(entity).source,\n data: context,\n entityInfo: {\n name: entity.name,\n module: entity.module,\n title: entity.title,\n parentKey: entity.parentKey,\n source: `${entity.module}.${entity.name}`,\n },\n options: evaluatedOptions,\n metadata: action.metadata,\n });\n return {\n success: true,\n };\n }\n if (this.commandService.exists(commandName)) {\n // check options for evaluation\n await this.commandService.execute(commandName, e.options);\n }\n }\n return {\n success: false,\n message: {\n code: 'invalid_command',\n text: 'Invalid command',\n },\n };\n }\n } catch (error) {\n return {\n success: false,\n message: {\n text: error as string,\n },\n };\n }\n },\n tabs: [...tabDetailTabs, ...tabListTabs, ...nestedTabListTabs],\n\n content: [\n {\n type: 'grid-layout',\n mode: 'edit',\n options: {\n grid: {\n default: {\n columns: 12,\n rows: 1,\n gap: '20px',\n },\n },\n },\n children: await Promise.all(\n (\n await Promise.all(\n (combinedSections as any[]).map(async (s: any) => {\n const properties = await getVisiblePropertyByGroupId(s.id);\n const visibleProperties = properties.filter((p: any) => {\n const isFromRelated = (p as any).__dataPath != null;\n const visibleInMain = visiblePropertyNames.has(p.name);\n const visibleInRelated = isFromRelated ? !!(p as any).__layout : false;\n return visibleInMain || visibleInRelated;\n });\n return { section: s, hasProperties: visibleProperties.length > 0, visibleProperties };\n }),\n )\n )\n .filter((item) => item.hasProperties)\n .map(({ section: s, visibleProperties }) => ({\n type: 'grid-item-layout',\n name: s.id,\n options: {\n colSpan: s.layout?.positions?.lg?.colSpan ?? 12,\n colStart: s.layout?.positions?.lg?.colStart ?? 1,\n colEnd: s.layout?.positions?.lg?.colEnd ?? 13,\n },\n children: [\n {\n type: 'fieldset-layout',\n options: {\n title: allGroups.find((g: any) => g.id === s.id)?.title ?? '',\n icon: allGroups.find((g: any) => g.id === s.id)?.icon ?? '',\n collapsible: true,\n isOpen: !s.collapsed,\n look: 'card',\n },\n children: [\n {\n type: 'grid-layout',\n options: {\n grid: {\n default: {\n columns: 12,\n rows: 1,\n gap: '20px',\n },\n },\n },\n children: visibleProperties.map((p: any) => {\n const layout = getPropertyLayout(p.name, p);\n const prefixed = (p as any).__dataPath ? `${(p as any).__dataPath}.${p.name}` : p.name;\n\n // Check if property is editable (exists in update interface)\n const isEditable =\n (p as any).__isEditable != null\n ? (p as any).__isEditable\n : editablePropertyNames.has(p.name);\n\n // Check if property has its own disabled option\n const hasOwnDisabled = p.schema.interface?.options?.disabled !== undefined;\n return {\n type: 'form-field',\n options: {\n label: p.title,\n showLabel: layout?.label?.visible ?? true,\n colSpan: layout?.positions?.lg?.colSpan,\n colStart: layout?.positions?.lg?.colStart,\n colEnd: layout?.positions?.lg?.colEnd,\n rowSpan: layout?.positions?.lg?.rowSpan,\n rowStart: layout?.positions?.lg?.rowStart,\n rowEnd: layout?.positions?.lg?.rowEnd,\n visible: p.schema.visible,\n },\n children: [\n {\n type: p.schema.interface?.type ?? '',\n path: prefixed,\n name: prefixed,\n defaultValue: p.schema.defaultValue,\n children: p.schema.interface?.children,\n triggers: p.schema.interface?.triggers,\n valueTransforms: p.schema.interface?.valueTransforms,\n options: merge(\n {},\n p.schema.interface?.options,\n {\n validations: p.validations?.map((c: any) => ({\n rule: c.rule,\n message: c.message,\n options: c.options,\n })),\n // Attach dataPath for merged properties to be available in widgets/options if needed\n dataPath: (p as any).__dataPath,\n },\n // Only set disabled if property doesn't have its own disabled option\n hasOwnDisabled ? {} : { disabled: !isEditable },\n ),\n },\n ],\n };\n }),\n },\n ],\n },\n ],\n })),\n ),\n },\n ],\n };\n }\n\n private buildActions(entity: AXPEntity, singleInterface: any): AXPEntityCommandTriggerViewModel[] {\n const actions = singleInterface?.actions ?? [];\n return actions.map((action: any) => new AXPEntityCommandTriggerViewModel(entity, action));\n }\n\n private createExpressionEvaluator(context: any, expressionEvaluator: any) {\n return async (actionData: any) => {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n const value = get(context, path);\n return value;\n },\n },\n };\n return await expressionEvaluator.evaluate(actionData, scope);\n };\n }\n\n private async buildEvaluatedActions(\n actions: AXPEntityCommandTriggerViewModel[],\n evaluateExpressions: ((data: any) => Promise<any>) | null,\n ): Promise<any[]> {\n const evaluatedActions = [];\n\n for (const action of actions) {\n // Evaluate disabled condition\n let disabled = action.disabled;\n if (disabled && typeof disabled === 'string' && evaluateExpressions) {\n try {\n const result = await evaluateExpressions({ disabled: disabled });\n disabled = result.disabled;\n } catch {\n disabled = false;\n }\n }\n // Evaluate hidden condition\n let hidden = action.hidden;\n if (hidden && typeof hidden === 'string' && evaluateExpressions) {\n try {\n const result = await evaluateExpressions({ hidden: hidden });\n hidden = result.hidden;\n } catch {\n hidden = false;\n }\n }\n\n // Skip if hidden\n if (hidden) continue;\n\n // Evaluate options\n let options = action.options;\n if (options && evaluateExpressions) {\n try {\n options = await evaluateExpressions(options);\n } catch {\n // Keep original options if evaluation fails\n }\n }\n\n evaluatedActions.push({\n name: action.name,\n title: action.title,\n icon: action.icon,\n color: action.color,\n disabled: disabled || false,\n zone: 'header',\n priority: action.priority,\n scope: action.scope === AXPEntityCommandScope.Individual ? AXPEntityCommandScope.TypeLevel : action.scope,\n command: {\n name: action.name,\n options: options,\n metadata: action.metadata,\n },\n });\n }\n return evaluatedActions;\n }\n\n private async buildTabDetails(tabDetailEntities: AXPRelatedEntity[], dependencies?: any): Promise<any[]> {\n if (!dependencies?.entityResolver || !tabDetailEntities?.length) {\n return [];\n }\n\n const tabs = [];\n for (const relatedEntity of tabDetailEntities) {\n const converter = this.relatedEntityConverterFactory.createTabDetailsConverter();\n tabs.push(\n await converter.convert(relatedEntity, {\n entityResolver: dependencies.entityResolver,\n }),\n );\n }\n return tabs;\n }\n\n private async buildTabLists(\n tabListEntities: AXPRelatedEntity[],\n rootContext: any,\n dependencies?: any,\n ): Promise<any[]> {\n if (!dependencies?.entityResolver || !tabListEntities?.length) {\n return [];\n }\n\n const tabs = [];\n for (const relatedEntity of tabListEntities) {\n const converter = this.relatedEntityConverterFactory.createTabListConverter();\n tabs.push(\n await converter.convert(relatedEntity, {\n entityResolver: dependencies.entityResolver,\n expressionEvaluator: dependencies.expressionEvaluator,\n context: rootContext,\n filterOperatorMiddleware: this.filterOperatorMiddleware,\n }),\n );\n }\n return tabs;\n }\n}\n","import { AXPEntity, AXPFilterOperatorMiddlewareService, AXPRelatedEntity } from '@acorex/platform/common';\nimport { AXPExpressionEvaluatorScope } from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewAdapter, AXPLayoutDetailsViewPage } from '@acorex/platform/layout/views';\nimport { Injectable, inject } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPLayoutAdapterBuilder } from './layout-adapter-builder.service';\nimport { AXPMainEntityContentBuilder } from './main-entity-content-builder.service';\nimport { AXPRelatedEntityConverterFactory } from './related-entity-converter-factory.service';\nimport { AXPPageComponentConverter } from './related-entity-converters/page-component-converter';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPLayoutAdapterFactory {\n private pageComponentConverter = inject(AXPPageComponentConverter);\n\n constructor(\n private relatedEntityConverterFactory: AXPRelatedEntityConverterFactory,\n private mainEntityContentBuilder: AXPMainEntityContentBuilder,\n private layoutAdapterBuilder: AXPLayoutAdapterBuilder,\n private filterOperatorMiddleware: AXPFilterOperatorMiddlewareService,\n ) {}\n\n async createDetailsViewAdapter(\n entityResolver: AXPEntityDefinitionRegistryService,\n moduleName: string,\n entityName: string,\n id: string,\n dependencies: any, // Services like expressionEvaluator, session, etc.\n ): Promise<AXPLayoutDetailsViewAdapter> {\n const entity = await entityResolver.resolve(moduleName, entityName);\n if (!entity) {\n throw new Error(`Entity ${moduleName}.${entityName} not found`);\n }\n\n const rootContext = await this.loadRootContext(entity, id);\n\n // Evaluate hidden expressions for related entities once, reuse across building and composing\n const evaluatedRelatedEntities = await this.evaluateRelatedEntitiesHidden(\n entity?.relatedEntities ?? [],\n rootContext,\n dependencies,\n );\n\n // Build main and related pages using evaluated related entities\n const entityWithEvaluatedRelated = { ...entity, relatedEntities: evaluatedRelatedEntities };\n const mainPage = await this.buildMainPage(entityWithEvaluatedRelated, rootContext, id, dependencies);\n const relatedPages = await this.buildRelatedPages(entityWithEvaluatedRelated, rootContext, dependencies);\n\n // Compose ordered pages around the primary page\n const orderedPages = this.composePagesWithPositions(mainPage, relatedPages, entityWithEvaluatedRelated);\n\n const applicationName = dependencies.session.application?.name ?? 'default';\n const rootTitle = await this.getRootTitle(entity, rootContext, dependencies);\n\n return this.layoutAdapterBuilder\n .setEntity(entity, rootContext)\n .setDependencies(dependencies)\n .setPages(orderedPages)\n .setRootTitle(rootTitle)\n .setExitUrl({ moduleName, entityName, applicationName })\n .build();\n }\n\n private async loadRootContext(entity: any, id: string): Promise<any> {\n const fn = entity?.queries.byKey?.execute as Function;\n return await fn(id);\n }\n\n private async buildMainPage(entity: any, rootContext: any, id: string, dependencies?: any): Promise<any> {\n return this.mainEntityContentBuilder.build(\n entity,\n rootContext,\n { ...dependencies, reloadRootContext: () => this.loadRootContext(entity, id) },\n await this.getRootTitle(entity, rootContext, dependencies),\n );\n }\n\n /**\n * Evaluates the 'hidden' expression for each related entity using the expression evaluator.\n * Returns a new array of related entities with the evaluated hidden values.\n */\n private async evaluateRelatedEntitiesHidden(\n relatedEntities: AXPRelatedEntity[],\n rootContext: any,\n dependencies: any,\n ): Promise<AXPRelatedEntity[]> {\n if (!relatedEntities?.length || !dependencies?.expressionEvaluator) {\n return relatedEntities ?? [];\n }\n\n return Promise.all(\n relatedEntities.map(async (re: AXPRelatedEntity) => {\n let hidden = re.hidden;\n if (hidden && typeof hidden === 'string') {\n try {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(rootContext, path),\n },\n };\n const result = await dependencies.expressionEvaluator.evaluate({ hidden }, scope);\n hidden = result.hidden;\n } catch {\n // Keep original hidden value if evaluation fails\n }\n }\n return { ...re, hidden };\n }),\n );\n }\n\n private async buildRelatedPages(entity: any, rootContext: any, dependencies: any): Promise<any[]> {\n const pages = [];\n\n const rootTitle = await this.getRootTitle(entity, rootContext, dependencies);\n\n // Evaluate hidden expressions before filtering related entities\n const evaluatedRelatedEntities = await this.evaluateRelatedEntitiesHidden(\n entity?.relatedEntities ?? [],\n rootContext,\n dependencies,\n );\n\n // Page Details\n const pageDetailEntities = evaluatedRelatedEntities.filter(\n (re: any) => !re.hidden && re.layout?.type === 'page-detail',\n );\n for (const relatedEntity of pageDetailEntities || []) {\n const converter = this.relatedEntityConverterFactory.createPageDetailsConverter();\n pages.push(\n await converter.convert(relatedEntity, {\n ...dependencies,\n context: rootContext,\n rootTitle: rootTitle,\n }),\n );\n }\n\n // Include nested page-related entities from merge-detail related entities\n const mergeDetailEntities = evaluatedRelatedEntities.filter(\n (re: any) => !re.hidden && re.layout?.type === 'merge-detail',\n );\n for (const mergeRelated of mergeDetailEntities || []) {\n try {\n const [moduleName, childEntityName] = (mergeRelated.entity || '').split('.');\n const childEntity = await dependencies.entityResolver.resolve(moduleName, childEntityName);\n if (!childEntity) {\n continue;\n }\n\n const nestedDataPath = mergeRelated?.persistence?.dataPath || childEntityName;\n const nestedContext = get(rootContext, nestedDataPath) ?? rootContext;\n\n // Evaluate hidden expressions for nested related entities\n const evaluatedNestedEntities = await this.evaluateRelatedEntitiesHidden(\n childEntity?.relatedEntities ?? [],\n nestedContext,\n dependencies,\n );\n\n const nestedPageDetailEntities = evaluatedNestedEntities.filter(\n (re: any) => !re.hidden && re.layout?.type === 'page-detail',\n );\n for (const nestedRelated of nestedPageDetailEntities || []) {\n const converter = this.relatedEntityConverterFactory.createPageDetailsConverter();\n pages.push(\n await converter.convert(nestedRelated, {\n ...dependencies,\n context: nestedContext,\n rootTitle: rootTitle,\n }),\n );\n }\n\n const nestedPageListEntities = evaluatedNestedEntities.filter(\n (re: any) => !re.hidden && re.layout?.type === 'page-list',\n );\n for (const nestedRelated of nestedPageListEntities || []) {\n const converter = this.relatedEntityConverterFactory.createPageListConverter();\n pages.push(\n await converter.convert(nestedRelated, {\n ...dependencies,\n context: nestedContext,\n rootTitle: rootTitle,\n }),\n );\n }\n } catch {\n // Silently ignore failures\n }\n }\n\n // Component-based pages from entity.pages\n const componentPages = entity?.pages?.filter((p: any) => !p.hidden) ?? [];\n if (componentPages.length > 0) {\n for (const entityPage of componentPages) {\n try {\n const page = await this.pageComponentConverter.convert(entityPage, rootContext, rootTitle);\n // page.actions is now populated from component if it extends AXPPageLayoutBaseComponent\n pages.push(page);\n } catch (error) {\n console.error(`Failed to convert page component \"${entityPage.componentKey}\":`, error);\n }\n }\n }\n\n // Page Lists\n const pageListEntities = entity?.relatedEntities?.filter(\n (re: any) => !re.hidden && re.layout?.type === 'page-list',\n );\n for (const relatedEntity of pageListEntities || []) {\n const converter = this.relatedEntityConverterFactory.createPageListConverter();\n pages.push(\n await converter.convert(relatedEntity, {\n ...dependencies,\n context: rootContext,\n rootTitle: rootTitle,\n filterOperatorMiddleware: this.filterOperatorMiddleware,\n }),\n );\n }\n\n return pages;\n }\n\n private composePagesWithPositions(\n mainPage: AXPLayoutDetailsViewPage,\n relatedPages: AXPLayoutDetailsViewPage[],\n entity: AXPEntity,\n ): any[] {\n // Only consider related entities with layout types page-detail or page-list\n const pageEntities = (entity?.relatedEntities || []).filter(\n (re: any) => !re.hidden && (re.layout?.type === 'page-detail' || re.layout?.type === 'page-list'),\n );\n\n // Build a map from entity name to its layout config (order/position)\n const layoutConfigByEntity: Record<\n string,\n { order?: number; position?: 'before' | 'after' | 'middle' } | undefined\n > = {};\n for (const re of pageEntities) {\n const [, entityName] = (re.entity || '').split('.');\n const key = entityName || re.entity;\n layoutConfigByEntity[key] = { order: re.layout?.order, position: re.layout?.position };\n }\n\n // Nested pages from merge-detail (e.g. PartyContact from Party) have no layout config.\n // Assign order 1 so they appear before component pages (e.g. Documents with order 100).\n for (const page of relatedPages) {\n if (page.id && layoutConfigByEntity[page.id] === undefined) {\n layoutConfigByEntity[page.id] = { order: 1, position: 'after' };\n }\n }\n\n // Also include component-based pages from entity.pages\n const componentPages = (entity?.pages || []).filter((p: any) => !p.hidden) ?? [];\n for (const page of componentPages) {\n const key = page.componentKey; // This is the page id in the converted page\n layoutConfigByEntity[key] = {\n order: page.layout?.order,\n position: page.layout?.position ?? 'after',\n };\n }\n\n // Split related pages into before/after buckets based on their relatedEntity layout\n const before: any[] = [];\n const after: any[] = [];\n\n for (const page of relatedPages) {\n const conf = layoutConfigByEntity[page.id];\n const position = conf?.position ?? 'after';\n if (position === 'before') {\n before.push(page);\n } else {\n after.push(page);\n }\n }\n\n // Sort by order within each bucket (undefined orders go last)\n const sortByOrder = (a: any, b: any) => {\n const ao = layoutConfigByEntity[a.id]?.order ?? Number.POSITIVE_INFINITY;\n const bo = layoutConfigByEntity[b.id]?.order ?? Number.POSITIVE_INFINITY;\n return ao - bo;\n };\n before.sort(sortByOrder);\n after.sort(sortByOrder);\n\n // Ensure the main page is primary\n mainPage.isPrimary = true;\n\n // Compose final pages: before -> main -> after\n return [...before, mainPage, ...after];\n }\n\n private async getRootTitle(entity: AXPEntity, rootContext: any, dependencies: any): Promise<string> {\n const titleTemplate = entity.interfaces?.master?.single?.title;\n if (!titleTemplate || typeof titleTemplate !== 'string') {\n return entity?.formats?.individual ?? '';\n }\n const scope = {\n ...rootContext,\n context: {\n eval: (path: string) => get(rootContext, path),\n },\n };\n const title = await dependencies.expressionEvaluator.evaluate(titleTemplate, scope);\n return typeof title === 'string' ? title : (entity?.formats?.individual ?? '');\n }\n}\n","import { AXFormatService } from '@acorex/core/format';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewAdapter } from '@acorex/platform/layout/views';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { AXPLayoutAdapterFactory } from './services/entity-details/layout-adapter-factory.service';\n\nexport const AXPLayoutDetailsViewRouteResolver: ResolveFn<Promise<AXPLayoutDetailsViewAdapter>> = async (\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n entityResolver: AXPEntityDefinitionRegistryService = inject(AXPEntityDefinitionRegistryService),\n expressionEvaluator = inject(AXPExpressionEvaluatorService),\n session: AXPSessionService = inject(AXPSessionService),\n formatService: AXFormatService = inject(AXFormatService),\n workflowService: AXPWorkflowService = inject(AXPWorkflowService),\n commandService: AXPCommandService = inject(AXPCommandService),\n layoutAdapterFactory: AXPLayoutAdapterFactory = inject(AXPLayoutAdapterFactory),\n): Promise<AXPLayoutDetailsViewAdapter> => {\n const moduleName = route.parent?.paramMap.get('module') as string;\n const entityName = route.paramMap.get('entity') as string;\n const id = route.paramMap.get('id') as string;\n\n const dependencies = {\n entityResolver,\n expressionEvaluator,\n session,\n formatService,\n workflowService,\n commandService,\n };\n\n return await layoutAdapterFactory.createDetailsViewAdapter(entityResolver, moduleName, entityName, id, dependencies);\n};\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, UrlTree } from '@angular/router';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPEntityPreloadFilterGuard implements CanActivate {\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly router = inject(Router);\n\n async canActivate(route: ActivatedRouteSnapshot): Promise<boolean | UrlTree> {\n const moduleName = route.paramMap.get('module');\n const entityName = route.paramMap.get('entity');\n\n if (!moduleName || !entityName) {\n return true;\n }\n\n // Check if filters are already applied (coming from preload page)\n const hasFiltersParam = route.queryParamMap.has('filters');\n if (hasFiltersParam) {\n // User has already filled filters, allow access to list\n return true;\n }\n\n try {\n const entity = await this.entityRegistry.resolve(moduleName, entityName);\n\n // Check if any property has preload filter enabled\n const hasPreloadFilter = entity.properties?.some(\n (property) => property.options?.filter?.preload?.enabled === true,\n );\n\n if (hasPreloadFilter) {\n // Build the target URL from route segments\n const segments = route.pathFromRoot\n .map((r) => r.url.map((segment) => segment.path))\n .reduce((acc, val) => acc.concat(val), []);\n\n // Replace 'list' with 'filters' in segments\n const filterSegments = segments.map((s) => (s === 'list' ? 'filters' : s));\n const filterUrl = '/' + filterSegments.filter((s) => s).join('/');\n\n return this.router.parseUrl(filterUrl);\n }\n\n // Allow access to list\n return true;\n } catch (error) {\n console.error('[AXPEntityPreloadFilterGuard] Failed to resolve entity:', error);\n // On error, allow access to list (fail-safe)\n return true;\n }\n }\n}\n","import { inject } from '@angular/core';\nimport { AXPRefreshEvent } from '@acorex/platform/common';\nimport { AXPWorkflowEventService } from '@acorex/platform/workflow';\nimport { AXPEntityEventDispatcherService } from '../entity-events/entity-event-dispatcher.service';\nimport { AXPEntityStorageMiddleware } from '../storage-middleware/storage-middleware.types';\n\nexport const eventDispatchMiddleware: AXPEntityStorageMiddleware = {\n target: { ops: ['create', 'update', 'delete'], order: 90 },\n execute: async (ctx, next) => {\n const dispatcher = inject(AXPEntityEventDispatcherService);\n const workflowEventService = inject(AXPWorkflowEventService);\n\n await next();\n\n if (ctx.op === 'create') {\n const createdData = ctx.result ? { ...(ctx.data as any), id: ctx.result } : ctx.data;\n await dispatcher.dispatchInserted(ctx.entityName, { refType: ctx.entityName, data: createdData });\n // Dispatch workflow refresh event to trigger entity list refresh\n workflowEventService.dispatch(\n AXPRefreshEvent({\n entity: ctx.entityName,\n }),\n );\n } else if (ctx.op === 'update') {\n await dispatcher.dispatchUpdated(ctx.entityName, {\n refType: ctx.entityName,\n data: ctx.result,\n changes: ctx.locals.get('changes'),\n });\n // Dispatch workflow refresh event to trigger entity list refresh\n workflowEventService.dispatch(\n AXPRefreshEvent({\n entity: ctx.entityName,\n }),\n );\n } else if (ctx.op === 'delete') {\n // For delete, prefer previous entity if available\n await dispatcher.dispatchDeleted(ctx.entityName, { refType: ctx.entityName, data: ctx.result ?? ctx.previous });\n // Dispatch workflow refresh event to trigger entity list refresh\n workflowEventService.dispatch(\n AXPRefreshEvent({\n entity: ctx.entityName,\n }),\n );\n }\n },\n};\n\n\n","import { AXPEntityModifier, AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\nimport { AXPColumnWidthService, IColumnWithWidth } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\n\n//#region ---- Column Width Middleware ----\n\n/**\n * Entity modifier that applies column widths using the column width service\n * Uses the generic column width resolution system from core library\n * Note: inject() works here because modifiers are executed via runInInjectionContext()\n */\nexport const columnWidthMiddleware: AXPEntityModifier = (context) => {\n const columnWidthService = inject(AXPColumnWidthService);\n const columns = context.columns.list();\n\n if (!columns) {\n return;\n }\n\n columns.forEach((column) => {\n // Convert entity column to IColumnWithWidth interface\n const columnWithWidth: IColumnWithWidth = {\n name: column.name,\n options: column.options,\n showAs: column.showAs,\n };\n\n // Apply width if resolved\n const resolvedWidth = columnWidthService.resolveWidth(columnWithWidth);\n if (resolvedWidth) {\n context.columns.find(column.name).update((col) => ({\n ...col,\n options: {\n ...col.options,\n width: resolvedWidth,\n },\n }));\n }\n });\n};\n\n//#endregion\n\n//#region ---- Provider Registration ----\n\n/**\n * Default provider that applies column width middleware to all entities\n */\nexport const columnWidthMiddlewareProvider: AXPEntityModifierProvider = {\n entityName: '*', // Apply to all entities\n modifier: columnWidthMiddleware,\n};\n\n//#endregion","import { AXPEntityModifier, AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\n\n//#region ---- Default Column Order ----\n\n/**\n * Default order for common list view columns.\n * Lower numbers appear first. Columns not in this map get order 500 (middle).\n * Use high numbers (990+) for columns that should appear at the end.\n */\nexport const DEFAULT_COLUMN_ORDER: Record<string, number> = {\n // Identifier columns first\n code: 1,\n employeeCode: 1,\n\n // Common display columns\n title: 3,\n name: 4,\n 'person.firstName': 5,\n 'person.lastName': 6,\n 'person.fullName': 5,\n 'person.phones': 7,\n 'person.emails': 8,\n 'party.code': 2,\n 'party.title': 3,\n 'party.phones': 7,\n 'party.emails': 8,\n\n // Middle columns\n description: 10,\n jobDefinitionId: 19,\n employmentTypeId: 20,\n hireDate: 21,\n createdAt: 90,\n updatedAt: 91,\n\n // Last columns: Documents/attachments, Categories before Status\n imageId: 990,\n //\n categoryIds: 700,\n categories: 700,\n //\n attachments: 800,\n //\n statusId: 995,\n isArchived: 999,\n isDisabled: 999,\n};\n\n//#endregion\n\n//#region ---- Column Ordering Middleware ----\n\n/**\n * Entity modifier that sorts list view columns by default order.\n * Similar to layout-ordering for sections/properties, but for list columns.\n */\nexport const columnOrderingMiddleware: AXPEntityModifier = (context) => {\n const columns = context.columns.list();\n\n if (!columns || columns.length === 0) {\n return;\n }\n\n const defaultOrder = 500;\n\n columns.sort((a: { name: string }, b: { name: string }) => {\n const orderA = DEFAULT_COLUMN_ORDER[a.name] ?? defaultOrder;\n const orderB = DEFAULT_COLUMN_ORDER[b.name] ?? defaultOrder;\n return orderA - orderB;\n });\n};\n\n//#endregion\n\n//#region ---- Provider Registration ----\n\n/**\n * Factory to create a column ordering middleware with custom order config\n */\nexport const createColumnOrderingMiddlewareProvider = (\n columnOrder: Record<string, number> = {},\n entityName: string | RegExp = '*',\n): AXPEntityModifierProvider => ({\n entityName,\n modifier: (context) => {\n const columns = context.columns.list();\n if (!columns || columns.length === 0) return;\n\n const mergedOrder = { ...DEFAULT_COLUMN_ORDER, ...columnOrder };\n const defaultOrder = 500;\n\n columns.sort((a: { name: string }, b: { name: string }) => {\n const orderA = mergedOrder[a.name] ?? defaultOrder;\n const orderB = mergedOrder[b.name] ?? defaultOrder;\n return orderA - orderB;\n });\n },\n});\n\n/**\n * Default provider that applies column ordering to all entities\n */\nexport const columnOrderingMiddlewareProvider: AXPEntityModifierProvider = {\n entityName: '*',\n modifier: columnOrderingMiddleware,\n};\n\n//#endregion\n","import { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { inject, Injectable, signal } from '@angular/core';\n\nconst DEFAULT_APPLY_ORDERING = true;\n\n/**\n * Provides synchronous access to the ApplyLayoutOrdering setting.\n * Used by layout ordering middleware to avoid async in the modifier and prevent startup deadlocks.\n * Value is updated on onLoaded/onChanged; first read can trigger a one-time background get (no await).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPLayoutOrderingConfigService {\n private readonly settingsService = inject(AXPSettingsService);\n\n private readonly _applyOrdering = signal<boolean>(DEFAULT_APPLY_ORDERING);\n private syncScheduled = false;\n\n constructor() {\n this.settingsService.onLoaded.subscribe(() => this.syncFromSettings());\n this.settingsService.onChanged.subscribe(() => this.syncFromSettings());\n }\n\n getApplyOrdering(): boolean {\n if (!this.syncScheduled) {\n this.syncScheduled = true;\n this.settingsService\n .get<boolean>(AXPCommonSettings.ApplyLayoutOrdering)\n .then((value) => this._applyOrdering.set(value ?? DEFAULT_APPLY_ORDERING))\n .catch(() => this._applyOrdering.set(DEFAULT_APPLY_ORDERING));\n }\n return this._applyOrdering();\n }\n\n private async syncFromSettings(): Promise<void> {\n try {\n const value = await this.settingsService.get<boolean>(AXPCommonSettings.ApplyLayoutOrdering);\n this._applyOrdering.set(value ?? DEFAULT_APPLY_ORDERING);\n } catch {\n this._applyOrdering.set(DEFAULT_APPLY_ORDERING);\n }\n }\n}\n","import { inject } from '@angular/core';\nimport { AXPEntityModifier, AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\nimport { AXPLayoutOrderingConfigService } from './layout-ordering-config.service';\n\n//#region ---- Layout Ordering Middleware ----\n\n/**\n * Configuration for section ordering\n */\nexport interface SectionOrderConfig {\n /**\n * Default order for common sections\n * Lower numbers appear first\n */\n sections: Record<string, number>;\n\n /**\n * Default order for properties within sections\n * Key format: 'sectionId.propertyName' or just 'propertyName' for any section\n */\n properties: Record<string, number>;\n}\n\n/**\n * Default order for common sections\n */\nexport const DEFAULT_SECTION_ORDER: Record<string, number> = {\n 'basic-info': -100,\n classification: 20,\n appearance: 90,\n advanced: 110,\n metadata: 120,\n settings: 200,\n};\n\n/**\n * Default order for common properties\n * Format: 'sectionId.propertyName' for section-specific or 'propertyName' for any section\n */\nexport const DEFAULT_PROPERTY_ORDER: Record<string, number> = {\n // Basic Info section\n 'basic-info.code': -10,\n 'basic-info.title': -9,\n 'basic-info.name': -8,\n 'basic-info.description': -7,\n 'basic-info.note': -6,\n 'basic-info.notes': -5,\n\n // Classification section\n 'classification.categoryIds': 1,\n 'classification.tags': 2,\n 'classification.type': 3,\n\n // Appearance section\n 'appearance.icon': 1,\n 'appearance.color': 2,\n 'appearance.avatar': 3,\n\n // Settings section\n 'settings.isDefault': 90,\n 'settings.isPrimary': 91,\n 'settings.isDisabled': 95,\n 'settings.isArchived': 96,\n\n // Generic fallbacks (apply to any section if not specified above)\n code: 1,\n title: 2,\n name: 3,\n icon: 5,\n color: 6,\n avatar: 7,\n description: 10,\n categoryIds: 15,\n tags: 16,\n isDefault: 90,\n isPrimary: 91,\n isDisabled: 95,\n isArchived: 96,\n};\n\n/**\n * Get the property order for a given section and property name\n */\nconst getPropertyOrder = (\n sectionId: string | undefined,\n propertyName: string,\n orderConfig: Record<string, number>,\n): number | undefined => {\n // Try section-specific order first\n if (sectionId) {\n const sectionSpecific = orderConfig[`${sectionId}.${propertyName}`];\n if (sectionSpecific !== undefined) {\n return sectionSpecific;\n }\n }\n\n // Fall back to generic property order\n return orderConfig[propertyName];\n};\n\n/**\n * Factory to create a layout ordering middleware\n */\nexport const layoutOrderingMiddlewareFactory = (config: SectionOrderConfig): AXPEntityModifier => {\n return (context) => {\n const configService = inject(AXPLayoutOrderingConfigService);\n if (!configService.getApplyOrdering()) {\n return;\n }\n\n const { sections: sectionOrder, properties: propertyOrder } = config;\n\n //#region ---- Order Sections ----\n\n const orderSections = (layout: any) => {\n if (!layout || !layout.sections) {\n return;\n }\n\n layout.sections.forEach((section: any) => {\n const defaultOrder = sectionOrder[section.id];\n if (defaultOrder !== undefined) {\n // Always apply the default order if configured (force override)\n section.order = defaultOrder;\n } else {\n // console.log(`[Layout Ordering Middleware] No default order for section \"${section.id}\"`);\n }\n });\n\n // Sort sections by order\n layout.sections.sort((a: any, b: any) => {\n const orderA = a.order ?? 999;\n const orderB = b.order ?? 999;\n return orderA - orderB;\n });\n };\n\n //#endregion\n\n //#region ---- Order Properties Within Sections ----\n\n const orderProperties = (layout: any) => {\n if (!layout || !layout.properties) {\n return;\n }\n\n layout.properties.forEach((prop: any) => {\n const groupId = context.properties.find(prop.name).get()?.groupId;\n const defaultOrder = getPropertyOrder(groupId, prop.name, propertyOrder);\n\n if (defaultOrder !== undefined) {\n // Ensure layout.positions exists\n if (!prop.layout) {\n prop.layout = {};\n }\n if (!prop.layout.positions) {\n prop.layout.positions = {};\n }\n if (!prop.layout.positions.lg) {\n prop.layout.positions.lg = {};\n }\n\n // Set order if not already defined\n if (prop.layout.positions.lg.order === undefined) {\n prop.layout.positions.lg.order = defaultOrder;\n }\n }\n });\n\n // Sort properties by order\n layout.properties.sort((a: any, b: any) => {\n const orderA = a.layout?.positions?.lg?.order ?? 999;\n const orderB = b.layout?.positions?.lg?.order ?? 999;\n return orderA - orderB;\n });\n };\n\n //#endregion\n\n //#region ---- Apply to All Layouts ----\n\n // Apply to create layout\n context.interfaces.master.create.update((create) => {\n if (create) {\n orderSections(create);\n orderProperties(create);\n }\n return create ?? { sections: [], properties: [] };\n });\n\n // Apply to modify layout\n context.interfaces.master.modify.update((modify) => {\n if (modify) {\n orderSections(modify);\n orderProperties(modify);\n }\n return modify ?? { sections: [], properties: [] };\n });\n\n // Apply to single layout\n context.interfaces.master.single.update((single) => {\n if (single) {\n orderSections(single);\n orderProperties(single);\n }\n return single ?? { title: context.entity.title, sections: [], properties: [] };\n });\n\n //#endregion\n };\n};\n\n//#endregion\n\n//#region ---- Provider Registration ----\n\n/**\n * Helper to create a provider for the layout ordering middleware\n * By default it applies to all entities using the '*' pattern\n */\nexport const createLayoutOrderingMiddlewareProvider = (\n config: Partial<SectionOrderConfig> = {},\n entityName: string | RegExp = '*',\n): AXPEntityModifierProvider => {\n return {\n entityName,\n modifier: layoutOrderingMiddlewareFactory({\n sections: { ...DEFAULT_SECTION_ORDER, ...config.sections },\n properties: { ...DEFAULT_PROPERTY_ORDER, ...config.properties },\n }),\n };\n};\n\n/**\n * Default provider registered with the default configuration\n */\nexport const layoutOrderingMiddlewareProvider: AXPEntityModifierProvider = createLayoutOrderingMiddlewareProvider();\n\n//#endregion\n","import { AXPModuleManifestRegistry } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { AXPEntityModifier, AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\n\n//#region ---- Search Result Description Middleware ----\n\n/**\n * Fallback: converts PascalCase to kebab-case (e.g. PersonCore → person-core).\n */\nfunction moduleNameToI18nScope(moduleName: string): string {\n return moduleName.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');\n}\n\n/**\n * Ensures all entities have a searchResult.description.\n * Uses @{i18nScope}:module.title when missing (guaranteed to exist in i18n).\n */\nexport const searchResultDescriptionMiddleware: AXPEntityModifier = (context) => {\n const manifestRegistry = inject(AXPModuleManifestRegistry);\n const formats = context.formats.get();\n const searchResult = formats?.searchResult;\n\n if (searchResult?.description) {\n return;\n }\n\n const manifest = manifestRegistry.get(context.module.get());\n const i18nScope = manifest?.i18n ?? moduleNameToI18nScope(context.module.get());\n const fallbackKey = `@${i18nScope}:module.title`;\n\n context.formats.update((f) => ({\n ...f,\n searchResult: {\n ...(f?.searchResult ?? {}),\n title: f?.searchResult?.title ?? '{{ title }}',\n description: fallbackKey,\n },\n }));\n};\n\n//#endregion\n\n//#region ---- Provider Registration ----\n\nexport const searchResultDescriptionMiddlewareProvider: AXPEntityModifierProvider = {\n entityName: '*',\n modifier: searchResultDescriptionMiddleware,\n};\n\n//#endregion\n","import { inject } from '@angular/core';\nimport {\n AXPDefaultMultiLanguageConfigService,\n type AXEntityPropertyWidget,\n withDefaultMultiLanguageOnWidgetNodeTree,\n} from '@acorex/platform/common';\nimport type { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPEntityModifier, AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\n\n//#region ---- Middleware ----\n\n/**\n * When enabled in regional settings ({@link AXPRegionalSetting.MultiLanguageSupport}), walks each\n * property's `schema.interface` widget tree and sets `options.multiLanguage` on matching text-like\n * editors (including nested GridLayout leaves such as `pre.content` / `post.summaryContent`), unless\n * the node already specifies `multiLanguage` (including explicit false to opt out).\n */\nexport const defaultMultiLanguageMiddleware: AXPEntityModifier = (context) => {\n const config = inject(AXPDefaultMultiLanguageConfigService);\n const applyDefault = config.getApplyDefaultMultiLanguage();\n if (!applyDefault) {\n return;\n }\n\n for (const prop of context.properties.list()) {\n context.properties.find(prop.name).update((p) => {\n const iface = p.schema?.interface as AXPWidgetNode | undefined;\n if (!iface) {\n return p;\n }\n const nextIface = withDefaultMultiLanguageOnWidgetNodeTree(iface, true);\n if (nextIface === iface) {\n return p;\n }\n return {\n ...p,\n schema: {\n ...p.schema,\n interface: (nextIface ?? iface) as Partial<AXEntityPropertyWidget>,\n },\n };\n });\n }\n};\n\n//#endregion\n\n//#region ---- Provider ----\n\nexport const defaultMultiLanguageMiddlewareProvider: AXPEntityModifierProvider = {\n entityName: '*',\n modifier: defaultMultiLanguageMiddleware,\n};\n\n//#endregion\n","import { AXPEntityQueryType } from '@acorex/platform/common';\nimport { AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\nimport { AXMEntityCrudServiceImpl } from '../entity-storage-service';\n\n/**\n * Factory to create a column width middleware using provided config map.\n * Sets width for columns defined in the map if not already defined on the column.\n */\nexport const AXPCrudModifier: AXPEntityModifierProvider = {\n entityName: '*',\n modifier: (ctx) => {\n const dataService = new AXMEntityCrudServiceImpl<any, any>(ctx.module.get() + '.' + ctx.name.get());\n\n ctx.commands.update((command) => {\n if (!command) {\n command = {};\n }\n if (!command?.create) {\n command.create = {\n execute: async (data: any) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n };\n }\n if (!command?.delete) {\n command.delete = {\n execute: async (id: any) => {\n return await dataService.deleteOne(id);\n },\n };\n }\n if (!command?.update) {\n command.update = {\n execute: async (data: any) => {\n return await dataService.updateOne(data.id, data);\n },\n };\n }\n return command;\n });\n\n ctx.queries.update((queries) => {\n if (!queries) {\n queries = {};\n }\n if (!queries?.byKey) {\n queries.byKey = {\n execute: async (id: any) => {\n const data = await dataService.getOne(id);\n // debugger;\n return data\n },\n type: AXPEntityQueryType.Single,\n };\n }\n if (!queries?.list) {\n queries.list = {\n execute: async (e: any) => {\n return await dataService.query(e);\n },\n type: AXPEntityQueryType.List,\n };\n }\n return queries;\n });\n },\n};\n\n//#endregion\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '@acorex/platform/common';\n\nexport class AXPEntityCommandSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('command', 'Commands', 'command', 'fa-solid fa-command', 1, {\n format: {\n id: '{{id}}',\n },\n actions: [\n {\n name: 'open-entity',\n type: 'view',\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '@acorex/platform/common';\nimport { AXPModuleManifestRegistry } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\n\n/** Fallback: converts PascalCase module name to kebab-case (e.g. PersonCore → person-core). */\nfunction moduleNameToI18nScope(moduleName: string): string {\n return moduleName.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');\n}\n\nexport class AXPEntitySearchDefinitionProvider implements AXPSearchDefinitionProvider {\n private readonly entityRegister = inject(AXPEntityDefinitionRegistryService);\n private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n await this.manifestRegistry.initialize();\n\n this.entityRegister.getAll().forEach((entity) => {\n const manifest = this.manifestRegistry.get(entity.module);\n const i18nScope = manifest?.i18n ?? moduleNameToI18nScope(entity.module);\n context.addDefinition(\n `Module.${entity.module}.${entity.name}`,\n `@${i18nScope}:module.title`,\n `Module.${entity.module}`,\n entity.icon ?? 'fa-solid fa-objects-column',\n 4,\n {\n actions: [\n {\n name: 'open-entity',\n type: 'view',\n priority: 'primary',\n },\n ],\n format: {\n title: entity.formats.searchResult?.title,\n description: (entity.formats.searchResult?.description) ?? `${entity.module} / ${entity.title}`,\n id: '{{data.id}}',\n },\n }\n );\n });\n }\n}\n","import { AXPEntityOp, AXPMiddlewareErrorResponse, AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/core';\nimport {\n AXPEntityCreateDto,\n AXPEntityDetailDto,\n AXPEntityListItemDto,\n AXPEntityUpdateDto,\n} from '../entity.types';\n\nexport interface AXPEntityStorageContext<\n TKey = any,\n TDetailDto extends AXPEntityDetailDto<TKey> = any,\n TListItemDto extends AXPEntityListItemDto<TKey> = any,\n TCreateDto extends AXPEntityCreateDto = any,\n TUpdateDto extends AXPEntityUpdateDto<TKey> = any,\n> {\n op: AXPEntityOp;\n entityName: string;\n id?: TKey;\n data?: TCreateDto | Omit<Partial<TUpdateDto>, 'id'>;\n request?: AXPQueryRequest;\n previous?: TDetailDto;\n result?: any;\n locals: Map<string, unknown>;\n backend: {\n getOne: (entityName: string, id: TKey) => Promise<TDetailDto>;\n insertOne: (entityName: string, entity: TCreateDto) => Promise<TKey>;\n query: (entityName: string, request: AXPQueryRequest) => Promise<AXPPagedListResult<TListItemDto>>;\n updateOne: (entityName: string, id: TKey, data: Partial<TUpdateDto>) => Promise<void>;\n };\n}\n\nexport interface AXPEntityStorageMiddleware<\n TKey = any,\n TDetailDto extends AXPEntityDetailDto<TKey> = any,\n TListItemDto extends AXPEntityListItemDto<TKey> = any,\n TCreateDto extends AXPEntityCreateDto = any,\n TUpdateDto extends AXPEntityUpdateDto<TKey> = any,\n> {\n target?: {\n ops?: AXPEntityOp[];\n entity?: string | RegExp;\n predicate?: (\n ctx: AXPEntityStorageContext<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>,\n ) => boolean;\n order?: number;\n };\n execute: (\n ctx: AXPEntityStorageContext<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>,\n next: () => Promise<void>,\n ) => Promise<void>;\n}\n\n\n/**\n * Error type that can be thrown by middlewares to abort the chain with a structured payload.\n */\nexport class AXPMiddlewareAbortError extends Error {\n constructor(\n override readonly message: string,\n public readonly options: { code?: string; status?: number; details?: any } = {},\n ) {\n super(message);\n this.name = 'AXPMiddlewareAbortError';\n }\n toResponse(): AXPMiddlewareErrorResponse {\n return {\n success: false,\n error: {\n code: this.options.code,\n message: this.message,\n status: this.options.status,\n details: this.options.details,\n },\n };\n }\n}\n\n/** Type guard for AXPMiddlewareAbortError */\nexport function isAXPMiddlewareAbortError(error: unknown): error is AXPMiddlewareAbortError {\n return error instanceof AXPMiddlewareAbortError;\n}\n\n//#endregion\n\n\n","import { InjectionToken } from '@angular/core';\nimport { AXPEntityStorageService } from '../entity-storage-service';\nimport { AXPEntityStorageMiddleware } from './storage-middleware.types';\n\nexport const AXP_ENTITY_STORAGE_BACKEND = new InjectionToken<AXPEntityStorageService<any, any>>(\n 'AXP_ENTITY_STORAGE_BACKEND',\n);\n\nexport const AXP_ENTITY_STORAGE_MIDDLEWARE = new InjectionToken<AXPEntityStorageMiddleware<any, any, any, any, any>[]>(\n 'AXP_ENTITY_STORAGE_MIDDLEWARE',\n);\n\n\n","import { AXPEntityOp, AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/core';\nimport { EnvironmentInjector, Injectable, inject, runInInjectionContext } from '@angular/core';\nimport { AXPEntityStorageService } from '../entity-storage-service';\nimport { AXPEntityCreateDto, AXPEntityDetailDto, AXPEntityListItemDto, AXPEntityUpdateDto } from '../entity.types';\nimport { AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE } from './storage-middleware.tokens';\nimport { AXPEntityStorageContext, AXPEntityStorageMiddleware } from './storage-middleware.types';\n\n/** In-flight request deduplication - parallel identical read requests share one execution */\nfunction getDedupKey(op: 'getOne' | 'getAll' | 'query', entityName: string, init?: Partial<AXPEntityStorageContext>): string {\n if (op === 'getOne' && init?.id !== undefined) {\n return `getOne:${entityName}:${String(init.id)}`;\n }\n if (op === 'getAll') {\n return `getAll:${entityName}`;\n }\n if (op === 'query' && init?.request) {\n const r = init.request;\n return `query:${entityName}:${r.skip ?? 0}:${r.take ?? 0}:${JSON.stringify(r.filter ?? null)}:${JSON.stringify(r.sort ?? null)}:${JSON.stringify(r.params ?? null)}`;\n }\n return '';\n}\n\n@Injectable()\nexport class AXPMiddlewareEntityStorageService<\n TKey = any,\n TDetailDto extends AXPEntityDetailDto<TKey> = any,\n TListItemDto extends AXPEntityListItemDto<TKey> = any,\n TCreateDto extends AXPEntityCreateDto = any,\n TUpdateDto extends AXPEntityUpdateDto<TKey> = any,\n> extends AXPEntityStorageService<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto> {\n private readonly backend = inject(AXP_ENTITY_STORAGE_BACKEND);\n private readonly allMiddlewares = (inject(AXP_ENTITY_STORAGE_MIDDLEWARE, { optional: true }) || []).slice();\n private readonly injector = inject(EnvironmentInjector);\n\n /** In-flight read requests - identical parallel requests share one execution */\n private readonly inFlight = new Map<string, Promise<unknown>>();\n\n get dbName(): string {\n return this.backend.dbName;\n }\n\n private filterMiddlewares(ctx: AXPEntityStorageContext): AXPEntityStorageMiddleware[] {\n return this.allMiddlewares\n .filter((mw) => {\n const t = mw.target;\n if (!t) return true;\n if (t.ops && !t.ops.includes(ctx.op)) return false;\n if (t.entity) {\n if (typeof t.entity === 'string' && t.entity !== ctx.entityName) return false;\n if (t.entity instanceof RegExp && !t.entity.test(ctx.entityName)) return false;\n }\n if (t.predicate && !t.predicate(ctx)) return false;\n return true;\n })\n .sort((a, b) => (a.target?.order ?? 0) - (b.target?.order ?? 0));\n }\n\n private compose(mws: AXPEntityStorageMiddleware[], leaf: () => Promise<void>, ctx: AXPEntityStorageContext) {\n return mws\n .slice()\n .reverse()\n .reduce((next, mw) => {\n return async () => runInInjectionContext(this.injector, () => mw.execute(ctx, next));\n }, leaf);\n }\n\n private async run(ctx: AXPEntityStorageContext, delegate: () => Promise<any>) {\n const chain = this.compose(\n this.filterMiddlewares(ctx),\n async () => {\n ctx.result = await delegate();\n },\n ctx,\n );\n await chain();\n return ctx.result;\n }\n\n private createCtx(\n op: AXPEntityOp,\n entityName: string,\n init?: Partial<AXPEntityStorageContext>,\n ): AXPEntityStorageContext {\n return {\n op,\n entityName,\n locals: new Map<string, unknown>(),\n backend: {\n getOne: (name: string, id: any) => this.backend.getOne(name, id),\n insertOne: (name: string, e: any) => this.backend.insertOne(name, e),\n query: (name: string, request: AXPQueryRequest) => this.backend.query(name, request),\n updateOne: (name: string, id: any, data: any) => this.backend.updateOne(name, id, data),\n },\n ...init,\n } as AXPEntityStorageContext;\n }\n\n async initial(\n entityName: string,\n collection: TCreateDto[],\n options?: { mergeType?: 'merge' | 'replace'; uniqueKeys?: string[] },\n ): Promise<TCreateDto[]> {\n const ctx = this.createCtx('initial', entityName, { data: collection });\n return this.run(ctx, () => this.backend.initial(ctx.entityName, ctx.data as TCreateDto[], options));\n }\n\n async getOne(entityName: string, id: TKey): Promise<TDetailDto> {\n const key = getDedupKey('getOne', entityName, { id });\n if (key) {\n const existing = this.inFlight.get(key);\n if (existing) {\n return existing as Promise<TDetailDto>;\n }\n const promise = this.runWithDedup(key, () => {\n const ctx = this.createCtx('getOne', entityName, { id });\n return this.run(ctx, () => this.backend.getOne(ctx.entityName, id));\n });\n this.inFlight.set(key, promise as Promise<unknown>);\n return promise as Promise<TDetailDto>;\n }\n const ctx = this.createCtx('getOne', entityName, { id });\n return this.run(ctx, () => this.backend.getOne(ctx.entityName, id));\n }\n\n async updateOne(entityName: string, id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto> {\n const ctx = this.createCtx('update', entityName, { id, data: keyValues });\n return this.run(ctx, () => this.backend.updateOne(ctx.entityName, id, ctx.data as Omit<Partial<TUpdateDto>, 'id'>));\n }\n\n async deleteOne(entityName: string, id: TKey): Promise<void> {\n const ctx = this.createCtx('delete', entityName, { id });\n return this.run(ctx, () => this.backend.deleteOne(ctx.entityName, id));\n }\n\n async insertOne(entityName: string, entity: TCreateDto): Promise<TKey> {\n const ctx = this.createCtx('create', entityName, { data: entity });\n return this.run(ctx, () => this.backend.insertOne(ctx.entityName, ctx.data as TCreateDto));\n }\n\n async getAll(entityName: string): Promise<TListItemDto[]> {\n const key = getDedupKey('getAll', entityName);\n if (key) {\n const existing = this.inFlight.get(key);\n if (existing) {\n return existing as Promise<TListItemDto[]>;\n }\n const promise = this.runWithDedup(key, () => {\n const ctx = this.createCtx('getAll', entityName);\n return this.run(ctx, () => this.backend.getAll(ctx.entityName));\n });\n this.inFlight.set(key, promise);\n return promise as Promise<TListItemDto[]>;\n }\n const ctx = this.createCtx('getAll', entityName);\n return this.run(ctx, () => this.backend.getAll(ctx.entityName));\n }\n\n async query(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>> {\n const key = getDedupKey('query', entityName, { request });\n if (key) {\n const existing = this.inFlight.get(key);\n if (existing) {\n return existing as Promise<AXPPagedListResult<TListItemDto>>;\n }\n const promise = this.runWithDedup(key, () => {\n const ctx = this.createCtx('query', entityName, { request });\n return this.run(ctx, () => this.backend.query(ctx.entityName, request));\n });\n this.inFlight.set(key, promise);\n return promise as Promise<AXPPagedListResult<TListItemDto>>;\n }\n const ctx = this.createCtx('query', entityName, { request });\n return this.run(ctx, () => this.backend.query(ctx.entityName, request));\n }\n\n private async runWithDedup<T>(key: string, fn: () => Promise<T>): Promise<T> {\n try {\n return await fn();\n } finally {\n this.inFlight.delete(key);\n }\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPRefreshEvent } from '@acorex/platform/common';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityCreateViewModelFactory } from '../entity-master-create.viewmodel';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXP_ENTITY_CONFIG_TOKEN } from '../entity.config';\n\nexport const AXPEntityCreateEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('[Entity] Created!');\n\n@Injectable()\nexport class AXPEntityCreatePopupAction extends AXPWorkflowAction {\n private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n private popupService = inject(AXPopupService);\n private platform = inject(AXPlatform);\n private factory = inject(AXPEntityCreateViewModelFactory);\n private config = inject(AXP_ENTITY_CONFIG_TOKEN);\n private translateService = inject(AXTranslationService);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const [module, entity] = context.getVariable<string>('entity').split('.');\n const data = context.getVariable<any>('data');\n const options = context.getVariable<any>('options');\n\n const process = options?.['process'];\n const decoration = options?.['decoration'];\n const layout = options?.['layout'];\n\n const headerTitle = decoration?.header?.title;\n\n const size = layout?.size;\n\n const entityRef = await this.entityRegistery.resolve(module, entity);\n const com = await this.config.viewers.master.create();\n\n if (entityRef.parentKey) {\n context.setVariable('parentKey', entityRef.parentKey);\n }\n\n const result = await this.popupService.open(com, {\n title: headerTitle\n ? headerTitle\n : `${await this.translateService.translateAsync('@general:actions.create.title')} ${await this.translateService.translateAsync(\n entityRef.formats.individual,\n )}`,\n size: this.platform.is('Mobile') || this.platform.is('SM') ? 'full' : size ? size : 'md',\n data: {\n vm: await this.factory.create(module, entity, data, options),\n entity,\n },\n });\n context.setOutput('result', false);\n if (result.data?.save) {\n context.setOutput('result', true);\n const prevData = context.getVariable('data');\n const prevMeta = context.getVariable('meta');\n\n context.setVariable('data', { ...prevData, ...result.data.item });\n if (entityRef.parentKey && result.data.item[entityRef.parentKey]) {\n context.setVariable('meta', { ...prevMeta, refreshTargetId: result.data.item[entityRef.parentKey] });\n }\n }\n }\n}\n@Injectable() //avoid DEPRECATED: DI is instantiating a token \"AXPEntityCreateSubmittedAction\" that inherits its @Injectable decorator but does not provide one itself. This will become an error in a future version of Angular. Please add @Injectable() to the \"AXPEntityCreateSubmittedAction\" class.\nexport class AXPEntityCreateSubmittedAction extends AXPWorkflowAction {\n async execute(context: AXPWorkflowContext): Promise<void> {\n this.dispatch(\n AXPEntityCreateEvent({ entity: context.getVariable<string>('entity'), meta: context.getVariable('meta') }),\n );\n this.dispatch(\n AXPRefreshEvent({ entity: context.getVariable<string>('entity'), meta: context.getVariable('meta') }),\n );\n }\n}\n\nexport const AXPCreateEntityWorkflow: AXPWorkflow = {\n startStepId: 'show-popup',\n steps: {\n 'show-popup': {\n action: 'AXPEntityCreatePopupAction',\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"result\") == true' }],\n nextStepId: 'show-toast',\n },\n ],\n },\n 'show-toast': {\n action: 'AXPToastAction',\n input: {\n color: 'success',\n title: 'workflow.entity-created',\n content: 'workflow.entity-created-body',\n },\n nextSteps: [\n {\n conditions: [],\n nextStepId: 'dispatch-event',\n },\n ],\n },\n 'dispatch-event': {\n action: 'AXPEntityCreateSubmittedAction',\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: 'context.getVariable(\"options\")?.process?.redirect != false' }],\n nextStepId: 'show-entity',\n },\n ],\n },\n 'show-entity': {\n action: 'AXPShowDetailViewAction',\n },\n },\n};\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPEntityMasterUpdateViewModelFactory } from '../entity-master-update.viewmodel';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXP_ENTITY_CONFIG_TOKEN } from '../entity.config';\n\n@Injectable()\nexport class AXPQuickEntityModifyPopupAction extends AXPWorkflowAction {\n private popupService = inject(AXPopupService);\n private platform = inject(AXPlatform);\n private translateService = inject(AXTranslationService);\n private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n private config = inject(AXP_ENTITY_CONFIG_TOKEN);\n private factory = inject(AXPEntityMasterUpdateViewModelFactory);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const [moduleName, entityName] = context.getVariable<string>('entity').split('.');\n const data = context.getVariable('data');\n const entityRef = await this.entityRegistery.resolve(moduleName, entityName);\n const { parentKey } = entityRef;\n\n console.log(data);\n\n const { id } = data;\n const { interfaces, title } = entityRef;\n const properties = interfaces?.master?.update?.properties?.map((p) => p.name) || [];\n\n const vm = await this.factory.create(moduleName, entityName, id, properties);\n\n const options = context.getVariable<any>('options');\n const decoration = options?.['decoration'];\n const headerTitle = decoration?.header?.title;\n\n const layout = options?.['layout'];\n const size = layout?.size;\n\n if (parentKey) {\n context.setVariable('parentKey', parentKey);\n }\n\n console.log(`${this.translateService.translateSync('entity.modify')}`);\n\n const com = await this.config.viewers.master.modify();\n const popup = await this.popupService.open(com, {\n title: headerTitle\n ? headerTitle\n : `${this.translateService.translateSync('@general:actions.modify.title')} ${this.translateService.translateSync(\n entityRef.formats.individual,\n )}`,\n size: this.platform.is('Mobile') || this.platform.is('SM') ? 'full' : size ? size : 'md',\n data: {\n vm,\n properties,\n entity: entityRef,\n },\n });\n context.setOutput('result', false);\n if (popup.data?.result == true) {\n context.setOutput('result', true);\n context.setVariable('data', cloneDeep(popup.data.context));\n }\n }\n}\n\nexport const AXPQuickModifyEntityWorkflow: AXPWorkflow = {\n startStepId: 'modifyPopup',\n steps: {\n modifyPopup: {\n id: 'modifyPopup',\n action: 'AXPQuickEntityModifyPopupAction',\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"result\") == true' }],\n nextStepId: 'successToast',\n },\n ],\n },\n successToast: {\n id: 'successToast',\n action: 'AXPToastAction',\n input: {\n color: 'success',\n title: '@general:workflow.entity-modified-title',\n content: '@general:workflow.entity-modified-body',\n },\n nextSteps: [\n {\n conditions: [],\n nextStepId: 'modifyConfirmed',\n },\n ],\n },\n modifyConfirmed: {\n id: 'modifyConfirmed',\n action: 'AXPEntityModifyConfirmedAction',\n },\n },\n};\n\n@Injectable()\nexport class AXPEntityApplyUpdatesAction extends AXPWorkflowAction {\n private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n try {\n const [moduleName, entityName] = context.getVariable<string>('entity').split('.');\n const data = context.getVariable('data');\n const entityRef = await this.entityRegistery.resolve(moduleName, entityName);\n const exec = entityRef.commands?.update?.execute as Function;\n const result = await exec(data);\n context.setVariable('data', result);\n context.setOutput('result', true);\n } catch (error) {\n context.setOutput('result', false);\n context.setOutput('error', error);\n }\n }\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPWorkflowNavigateAction } from '@acorex/platform/common';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable()\nexport class AXPShowDetailViewAction extends AXPWorkflowAction {\n private navigation = inject(AXPWorkflowNavigateAction);\n private sessionService = inject(AXPSessionService);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const [module, entity] = context.getVariable('entity').split('.');\n const { id } = context.getVariable('data');\n const newPayload = {\n commands: `/${this.sessionService.application?.name}/m/${module}/e/${entity}/${id}/view`,\n };\n context.setVariable('payload', newPayload);\n this.navigation.execute(context);\n }\n}\n\nexport const AXPShowDetailsViewWorkflow: AXPWorkflow = {\n startStepId: 'showDetailView',\n steps: {\n showDetailView: {\n action: 'AXPShowDetailViewAction',\n },\n },\n};\n","import { inject, Injectable } from '@angular/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { AXPFileListItem } from '@acorex/platform/core';\nimport { AXPFileUploaderWidgetService } from '@acorex/platform/layout/widgets';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { cloneDeep } from 'lodash-es';\n\n@Injectable()\nexport class AXPShowFileUploaderPopupAction extends AXPWorkflowAction {\n private fileUploaderWidgetService = inject(AXPFileUploaderWidgetService);\n private entityRegistryService = inject(AXPEntityDefinitionRegistryService);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n\n // *********** get options ***********\n const key = context.getVariable<string>('options.key');\n const rawReadonly =\n context.getVariable<boolean | string | undefined>('options.readonly') ??\n context.getVariable<boolean | string | undefined>('options.readOnly');\n const isReadonly = rawReadonly === true || rawReadonly === 'true';\n const multiple = context.getVariable<boolean>('options.multiple');\n const accept = context.getVariable<string>('options.accept');\n const maxFileSize = context.getVariable<number>('options.maxFileSize');\n const files = context.getVariable<AXPFileListItem[]|string[]>('options.files');\n const fileEditable = context.getVariable<boolean>('options.fileEditable');\n const enableTitleDescription = context.getVariable<boolean>('options.enableTitleDescription');\n const showEditDialogAfterSelect = context.getVariable<boolean>('options.showEditDialogAfterSelect');\n\n //check is correct file\n const correctFiles = files.filter((item) => item != undefined) as AXPFileListItem[]|string[];\n \n \n // *********** show file list ***********\n const res = await this.fileUploaderWidgetService.showFileList({\n files: correctFiles,\n readonly: isReadonly,\n multiple: multiple,\n accept: accept,\n fileEditable: fileEditable,\n enableTitleDescription: enableTitleDescription ?? false,\n showEditDialogAfterSelect: showEditDialogAfterSelect ?? false,\n // maxFileSize: maxFileSize,\n });\n // Handle case when result is undefined or empty array\n if (!res) {\n context.setOutput('result', false);\n return;\n }\n\n // *********** save files to entity ***********\n const [module, entity] = context.getVariable<string>('entity').split('.');\n const entityDefinition = await this.entityRegistryService.resolve(module, entity);\n\n if (entityDefinition) {\n const updateExec = entityDefinition.commands?.update?.execute as Function;\n\n const entityData = await updateExec({\n id: context.getVariable<string>('options.id'),\n [key]: res,\n });\n context.setOutput('result', true);\n // Merge full file list (name, title, description) from popup into returned data so\n // workflow output includes title/description when enableTitleDescription is used\n const dataWithFiles = { ...entityData, [key]: res };\n context.setVariable('data', cloneDeep(dataWithFiles));\n }\n }\n}\n\nexport const AXPShowFileUploaderPopupWorkflow: AXPWorkflow = {\n startStepId: 'show-popup',\n steps: {\n 'show-popup': {\n action: 'AXPShowFileUploaderPopupAction',\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"result\") == true' }],\n nextStepId: 'successToast',\n },\n ],\n },\n successToast: {\n id: 'successToast',\n action: 'AXPToastAction',\n input: {\n color: 'success',\n title: '@general:workflow.entity-modified-title',\n content: '@general:workflow.entity-modified-body',\n },\n nextSteps: [\n {\n conditions: [],\n nextStepId: 'modifyConfirmed',\n },\n ],\n },\n modifyConfirmed: {\n id: 'modifyConfirmed',\n action: 'AXPEntityModifyConfirmedAction',\n },\n },\n};\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPWorkflowNavigateAction } from '@acorex/platform/common';\nimport { AXPWorkflow, AXPWorkflowAction } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\n\n\n@Injectable()\nexport class AXPShowListViewAction extends AXPWorkflowAction {\n private navigation = inject(AXPWorkflowNavigateAction);\n private sessionService = inject(AXPSessionService);\n async execute(context?: any): Promise<void> {\n const [moduleName, entityName] = context.getVariable('entity').split(\".\");\n const newPayload = {\n commands: `/${this.sessionService.application?.name}/m/${moduleName}/e/${entityName}/list`,\n };\n context.setVariable('payload', newPayload);\n this.navigation.execute(context);\n }\n}\n\nexport const AXPShowListViewWorkflow: AXPWorkflow = {\n startStepId: 'showListView',\n steps: {\n showListView: {\n id: 'showListView',\n action: 'AXPShowListViewAction',\n },\n },\n};\n","import { AXPAuthGuard, AXPPermissionDefinitionsDataSourceDefinition } from '@acorex/platform/auth';\nimport {\n AXPMenuItemsDataSourceDefinition,\n AXPToastAction,\n AXPWorkflowNavigateAction,\n AXP_SEARCH_DEFINITION_PROVIDER,\n} from '@acorex/platform/common';\nimport {\n AXPModuleManifestsDataSourceDefinition,\n AXP_COLUMN_WIDTH_PROVIDER,\n AXP_DATASOURCE_DEFINITION_PROVIDER,\n defaultColumnWidthProvider,\n} from '@acorex/platform/core';\nimport { LayoutBuilderModule } from '@acorex/platform/layout/builder';\nimport { AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';\nimport { AXPEntityWidgetsProvider } from './widget-definition.provider';\n\nimport { provideCommandSetups, provideQuerySetups } from '@acorex/platform/runtime';\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { NgModule, inject } from '@angular/core';\nimport { ROUTES, RouterModule, Routes } from '@angular/router';\nimport { AXPEntitiesListDataSourceDefinition } from './entities-list.datasource';\nimport { AXPLayoutDetailsViewRouteResolver } from './entity-details-view-route.resolver';\nimport { AXPEntityListViewModelResolver } from './entity-master-list.viewmodel';\nimport { AXP_ENTITY_MODIFIER } from './entity-middleware';\nimport { AXPEntityPreloadFiltersViewModelResolver } from './entity-preload-filters.viewmodel';\nimport { AXPEntityStorageService } from './entity-storage-service';\nimport { AXP_ENTITY_CONFIG_TOKEN } from './entity.config';\nimport { AXPEntityPreloadFilterGuard } from './guards/entity-preload-filter.guard';\nimport { columnWidthMiddlewareProvider, layoutOrderingMiddlewareProvider } from './middlewares';\nimport { columnOrderingMiddlewareProvider } from './middlewares/column-ordering.middleware';\nimport { AXPCrudModifier } from './middlewares/crud.middleware';\nimport { searchResultDescriptionMiddlewareProvider } from './middlewares/search-result-description.middleware';\nimport { defaultMultiLanguageMiddlewareProvider } from './middlewares/default-multi-language.middleware';\nimport { AXPEntityCommandSearchDefinitionProvider } from './search-definition-command.provider';\nimport { AXPEntitySearchDefinitionProvider } from './search-definition.provider';\nimport { AXPMiddlewareEntityStorageService } from './storage-middleware';\nimport {\n AXPCreateEntityWorkflow,\n AXPEntityCreatePopupAction,\n AXPEntityCreateSubmittedAction,\n} from './workflows/create-entity.workflow';\nimport { AXPDeleteEntityWorkflow, AXPEntityPerformDeleteAction } from './workflows/delete-entity.workflow';\nimport {\n AXPEntityApplyUpdatesAction,\n AXPQuickEntityModifyPopupAction,\n AXPQuickModifyEntityWorkflow,\n} from './workflows/modify-entity.workflow';\nimport {\n AXPEntityModifyConfirmedAction,\n AXPEntityModifySectionPopupAction,\n AXPModifyEntitySectionWorkflow,\n} from './workflows/modify-section.workflow';\nimport { AXPShowDetailViewAction, AXPShowDetailsViewWorkflow } from './workflows/show-details.workflow';\nimport {\n AXPShowFileUploaderPopupAction,\n AXPShowFileUploaderPopupWorkflow,\n} from './workflows/show-file-uploader-popup.workflow';\nimport { AXPShowListViewAction, AXPShowListViewWorkflow } from './workflows/show-list.workflow';\n\nfunction routesFacory() {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n let routes: Routes = [];\n routes = [\n {\n path: ':app/m',\n loadComponent: () => {\n return config.viewers.root();\n },\n canActivate: [AXPAuthGuard],\n children: [\n {\n path: ':module',\n children: [\n {\n path: 'e/:entity/filters',\n loadComponent: () =>\n import('./components/entity-preload-filters-container.component').then(\n (m) => m.AXPEntityPreloadFiltersContainerComponent,\n ),\n resolve: {\n vm: AXPEntityPreloadFiltersViewModelResolver,\n },\n data: { reuse: false },\n },\n {\n path: 'e/:entity/list',\n loadComponent: () => {\n return config.viewers.master.list();\n },\n resolve: {\n vm: AXPEntityListViewModelResolver,\n },\n canActivate: [AXPEntityPreloadFilterGuard],\n data: { reuse: 'queryParamsChange' },\n },\n // {\n // path: 'e/:entity/:id/view',\n // resolve: { vm: AXPEntityDetailViewModelResolver },\n // loadComponent: () => {\n // return config.viewers.master.single();\n // },\n // data: { reuse: false },\n // },\n {\n path: 'e/:entity/:id/view',\n resolve: { adapter: AXPLayoutDetailsViewRouteResolver },\n loadComponent: () => {\n return config.viewers.master.details();\n },\n runGuardsAndResolvers: (from, to) => {\n const entityChanged =\n from.params['module'] !== to.params['module'] || from.params['entity'] !== to.params['entity'];\n const idChanged = from.params['id'] !== to.params['id'];\n const refreshChanged = from.queryParams['_ts'] !== to.queryParams['_ts'];\n return entityChanged || idChanged || refreshChanged;\n },\n data: { reuse: false },\n },\n {\n path: 'e/:entity/:id',\n redirectTo: 'e/:entity/:id/view',\n pathMatch: 'full',\n },\n {\n path: 'e/:entity',\n redirectTo: ':entity/list',\n pathMatch: 'full',\n },\n ],\n },\n ],\n },\n ];\n return routes;\n}\n\n@NgModule({\n imports: [\n RouterModule,\n AXPWorkflowModule.forChild({\n actions: {\n AXPEntityCreatePopupAction,\n AXPEntityPerformDeleteAction,\n AXPWorkflowNavigateAction,\n 'entity-perform-delete': AXPEntityPerformDeleteAction,\n AXPEntityModifySectionPopupAction,\n AXPQuickEntityModifyPopupAction,\n AXPEntityModifyConfirmedAction,\n AXPToastAction,\n AXPShowDetailViewAction,\n AXPEntityCreateSubmittedAction,\n AXPShowListViewAction,\n 'entity-apply-updates': AXPEntityApplyUpdatesAction,\n AXPShowFileUploaderPopupAction,\n },\n workflows: {\n 'create-entity': AXPCreateEntityWorkflow,\n 'delete-entity': AXPDeleteEntityWorkflow,\n 'modify-entity-section': AXPModifyEntitySectionWorkflow,\n 'quick-modify-entity': AXPQuickModifyEntityWorkflow,\n 'open-entity': AXPShowDetailsViewWorkflow,\n 'show-list-view': AXPShowListViewWorkflow,\n 'show-file-uploader-popup': AXPShowFileUploaderPopupWorkflow,\n },\n functions: {},\n }),\n AXPWidgetCoreModule,\n LayoutBuilderModule,\n ],\n exports: [],\n declarations: [],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPEntityWidgetsProvider, multi: true },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXPEntitySearchDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXPEntityCommandSearchDefinitionProvider,\n multi: true,\n },\n // Bind the middleware wrapper as the public storage service\n { provide: AXPEntityStorageService, useClass: AXPMiddlewareEntityStorageService },\n {\n provide: AXP_ENTITY_MODIFIER,\n useValue: columnWidthMiddlewareProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_MODIFIER,\n useValue: columnOrderingMiddlewareProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_MODIFIER,\n useValue: AXPCrudModifier,\n multi: true,\n },\n // Register default column width provider\n {\n provide: AXP_COLUMN_WIDTH_PROVIDER,\n useValue: defaultColumnWidthProvider,\n multi: true,\n },\n // Entities list data source (all entity names from registry)\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXPEntitiesListDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXPMenuItemsDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXPModuleManifestsDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXPPermissionDefinitionsDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_ENTITY_MODIFIER,\n useValue: layoutOrderingMiddlewareProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_MODIFIER,\n useValue: searchResultDescriptionMiddlewareProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_MODIFIER,\n useValue: defaultMultiLanguageMiddlewareProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: 'Entity:OpenDetails',\n command: () => import('./commands/open-entity-details.command').then((c) => c.AXPOpenEntityDetailsCommand),\n },\n {\n key: 'Entity:Create',\n command: () => import('./commands/create-entity.command').then((c) => c.AXPCreateEntityCommand),\n },\n {\n key: 'Entity:Update',\n command: () => import('./commands/update-entity.command').then((c) => c.AXPUpdateEntityCommand),\n },\n {\n key: 'Entity:View',\n command: () => import('./commands/view-entity-details.command').then((c) => c.AXPViewEntityDetailsCommand),\n },\n ]),\n provideQuerySetups([\n {\n key: 'Entity:GetDetails',\n loader: () => import('./queries/get-entity-details.query').then((c) => c.AXPGetEntityDetailsQuery),\n },\n ]),\n ],\n})\nexport class AXPEntityModule {\n // constructor(appInitService: AXPAppStartUpService, injector: Injector) {\n // const service = injector.get(AXPEntityDefinitionRegistryService);\n // appInitService.registerTask({\n // name: 'layout-theme',\n // statusText: 'Preload entities ...',\n // priority: 4, // Run after module providers (priority 3) are loaded\n // run: async () => {\n // // Wait a bit to ensure module providers are fully registered\n // await new Promise(resolve => setTimeout(resolve, 100));\n // // load in background\n // await service.preload();\n // },\n // });\n // }\n}\n","import {\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXP_ENTITY_CRUD_SETUP } from '@acorex/platform/domain';\nimport { AXPCommandRegistry, AXPQueryRegistry } from '@acorex/platform/runtime';\nimport { AXPEntityService } from './entity.service';\n\n/**\n * Registers entity CRUD commands and queries for the given entity keys.\n * Use in app/module providers; consumes AXPEntityService from this package.\n */\nexport function provideEntity(entityKeys: string[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_ENTITY_CRUD_SETUP,\n multi: true,\n useFactory: () => {\n const commandRegistry = inject(AXPCommandRegistry);\n const queryRegistry = inject(AXPQueryRegistry);\n const entityService = inject(AXPEntityService);\n\n for (const entityKey of entityKeys) {\n const dataAccessor = entityService.withEntity(entityKey).data<any, any>();\n\n commandRegistry.register(`${entityKey}:Create`, async () => ({\n execute: async (input): Promise<AXPExecuteCommandResult<any>> => {\n try {\n const id = await dataAccessor.create(input);\n const entity = await dataAccessor.byKey(id);\n if (!entity) {\n throw new Error('Entity not found after creation');\n }\n return { success: true, data: entity };\n } catch (error) {\n return {\n success: false,\n message: {\n text: error instanceof Error ? error.message : 'Failed to create entity',\n },\n };\n }\n },\n }));\n\n commandRegistry.register(`${entityKey}:Update`, async () => ({\n execute: async ({ id, ...rest }): Promise<AXPExecuteCommandResult<any>> => {\n try {\n const updated = await dataAccessor.update(id, rest);\n return { success: true, data: updated };\n } catch (error) {\n return {\n success: false,\n message: {\n text: error instanceof Error ? error.message : 'Failed to update entity',\n },\n };\n }\n },\n }));\n\n commandRegistry.register(`${entityKey}:Delete`, async () => ({\n execute: async (id): Promise<AXPExecuteCommandResult<void>> => {\n try {\n await dataAccessor.delete(id);\n return { success: true };\n } catch (error) {\n return {\n success: false,\n message: {\n text: error instanceof Error ? error.message : 'Failed to delete entity',\n },\n };\n }\n },\n }));\n\n queryRegistry.register(`${entityKey}:GetById`, async () => ({\n fetch: (id) => dataAccessor.byKey(id),\n }));\n\n queryRegistry.register(`${entityKey}:GetList`, async () => ({\n fetch: (request) => dataAccessor.query(request),\n }));\n\n queryRegistry.register(`${entityKey}:GetRoots`, async () => ({\n fetch: async () => {\n return await dataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: { type: 'isEmpty' },\n value: true,\n },\n });\n },\n }));\n\n queryRegistry.register(`${entityKey}:GetChildren`, async () => ({\n fetch: async (request: { parentId: any; parentKey?: string }) => {\n const parentKey = request.parentKey ?? 'parentId';\n return await dataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n field: parentKey,\n operator: { type: 'equal' },\n value: request.parentId,\n },\n });\n },\n }));\n\n queryRegistry.register(`${entityKey}:GetByCategory`, async () => ({\n fetch: async (request: { categoryId: any; categoryKey?: string }) => {\n const categoryKey = request.categoryKey ?? 'categoryIds';\n return await dataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n field: categoryKey,\n operator: { type: 'contains' },\n value: request.categoryId,\n },\n });\n },\n }));\n }\n return true;\n },\n },\n ]);\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPQuery } from '@acorex/platform/runtime';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXMEntityCrudServiceImpl } from '../entity-storage-service';\nimport { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';\n\n//#region ---- Types ----\n\nexport interface AXPGetEntityDetailsQueryInput {\n entity: string; // Format: \"ModuleName.EntityName\"\n id: string;\n}\n\nexport interface AXPGetEntityDetailsQueryResult {\n success: boolean;\n entityDefinition?: AXPEntity;\n entityData?: any;\n error?: string;\n}\n\n//#endregion\n\n//#region ---- Get Entity Details Query ----\n\n/**\n * Generic query to get entity details including entity definition and entity data\n * Can be used by any entity to retrieve its definition and data by ID\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPGetEntityDetailsQuery implements AXPQuery<AXPGetEntityDetailsQueryInput, AXPGetEntityDetailsQueryResult> {\n\n\n\n //#region ---- Services & Dependencies ----\n\n private readonly entityDefinitionRegistry = inject(AXPEntityDefinitionRegistryService);\n\n private readonly injector = inject(Injector);\n\n\n //#region ---- Query Execution ----\n\n /**\n * Execute the query to fetch entity definition and data\n * @param input - Query input containing entity and ID information\n */\n async fetch(input: AXPGetEntityDetailsQueryInput): Promise<AXPGetEntityDetailsQueryResult> {\n const { entity, id } = input;\n\n try {\n if (!entity) {\n throw new Error('Entity name is required for fetching entity details');\n }\n\n if (!id) {\n throw new Error('Entity ID is required for fetching entity details');\n }\n\n const [module, entityName] = entity.split('.');\n\n if (!module || !entityName) {\n throw new Error('Entity must be in format \"ModuleName.EntityName\"');\n }\n\n // Get entity definition\n const entityDefinition = await this.entityDefinitionRegistry.resolve(module, entityName);\n\n // Get entity data using the entity's CRUD service\n const entityData = await this.getEntityData(entity, id);\n\n return {\n success: true,\n entityDefinition,\n entityData\n };\n\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Get entity data using the entity's CRUD service\n * @param entity - Full entity path (ModuleName.EntityName)\n * @param id - Entity ID\n * @returns Promise resolving to entity data\n */\n private async getEntityData(entity: string, id: string): Promise<any> {\n const dataService = runInInjectionContext(this.injector, () => new AXMEntityCrudServiceImpl<any, any>(entity));\n\n try {\n // Fetch the entity data\n return await dataService.getOne(id);\n } catch (error) {\n throw new Error(`Failed to fetch entity data: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPEntityAction, AXPEntityCommandScope, AXPQueryFilter } from '@acorex/platform/common';\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\n// #region Master\n\nexport function entityMasterCreateAction(): AXPEntityAction {\n return {\n title: '@general:actions.create.title',\n command: {\n name: 'Entity:Create',\n },\n priority: 'primary',\n type: AXPSystemActionType.Create,\n scope: AXPEntityCommandScope.TypeLevel,\n };\n}\n\nexport function entityMasterEditAction(): AXPEntityAction {\n return {\n title: '@general:actions.edit.title',\n command: 'Entity:Update',\n priority: 'secondary',\n type: AXPSystemActionType.Update,\n scope: AXPEntityCommandScope.Individual,\n default: true,\n };\n}\n\nexport function entityMasterBulkDeleteAction(): AXPEntityAction {\n return {\n title: '@general:actions.delete-items.title',\n command: 'delete-entity',\n priority: 'primary',\n type: AXPSystemActionType.Delete,\n scope: AXPEntityCommandScope.Selected,\n order: 100,\n };\n}\n\nexport function entityMasterViewAction(): AXPEntityAction {\n return {\n title: '@general:actions.view.title',\n command: 'open-entity',\n priority: 'secondary',\n type: AXPSystemActionType.View,\n scope: AXPEntityCommandScope.Individual,\n default: true,\n };\n}\n\nexport function entityMasterDeleteAction(): AXPEntityAction {\n return {\n title: '@general:actions.delete.title',\n command: 'delete-entity',\n priority: 'secondary',\n type: AXPSystemActionType.Delete,\n scope: AXPEntityCommandScope.Individual,\n order: 100,\n };\n}\n\nexport function entityMasterCrudActions(options?: {\n create?: boolean;\n delete?: boolean;\n view?: boolean;\n edit?: boolean;\n}): AXPEntityAction[] {\n const opts = {\n create: true,\n delete: true,\n view: true,\n edit: false,\n ...options,\n };\n const actions: AXPEntityAction[] = [];\n\n if (opts.create) {\n actions.push(entityMasterCreateAction());\n }\n if (opts.delete) {\n actions.push(entityMasterBulkDeleteAction());\n actions.push(entityMasterDeleteAction());\n }\n if (opts.view) {\n actions.push(entityMasterViewAction());\n }\n\n if (opts.edit) {\n actions.push(entityMasterEditAction());\n }\n\n return actions;\n}\n\nexport function entityMasterRecordActions(): AXPEntityAction[] {\n return [entityMasterDeleteAction()];\n}\n\n// #endregion\n\n// #region Details\n\nexport function entityDetailsCreateActions(parentId: string): AXPEntityAction {\n return {\n title: '@general:actions.create.title',\n command: {\n name: 'Entity:Create',\n options: {\n process: {\n redirect: false,\n canCreateNewOne: true,\n data: {\n [parentId]: '{{context.eval(\"id\")}}',\n },\n },\n },\n },\n priority: 'primary',\n type: AXPSystemActionType.Create,\n scope: AXPEntityCommandScope.TypeLevel,\n };\n}\n\nexport function entityDetailsSimpleCondition(fk: string): AXPQueryFilter {\n return {\n name: fk,\n operator: { type: 'equal' },\n value: '{{context.eval(\"id\")}}',\n };\n}\n\nexport function entityDetailsReferenceCondition(type: string): AXPQueryFilter[] {\n return [\n {\n name: 'reference.id',\n operator: { type: 'equal' },\n value: '{{context.eval(\"id\")}}',\n },\n {\n name: 'reference.type',\n operator: { type: 'equal' },\n value: type,\n },\n ];\n}\n\nexport function entityDetailsEditAction(): AXPEntityAction {\n return {\n title: '@general:actions.edit.title',\n // command: 'quick-modify-entity',\n command: 'Entity:Update',\n priority: 'secondary',\n type: AXPSystemActionType.Update,\n default: true,\n scope: AXPEntityCommandScope.Individual,\n };\n}\n\nexport function entityDetailsNewEditAction(): AXPEntityAction {\n return {\n title: 'New Edit',\n command: {\n name: 'Entity:Update',\n },\n priority: 'secondary',\n type: AXPSystemActionType.Update,\n default: true,\n scope: AXPEntityCommandScope.Individual,\n };\n}\n\nexport function entityOverrideDetailsViewAction(): AXPEntityAction {\n return {\n title: '@general:actions.view.title',\n command: 'open-entity',\n priority: 'secondary',\n hidden: true,\n type: AXPSystemActionType.View,\n scope: AXPEntityCommandScope.Individual,\n };\n}\nexport function entityDetailsCrudActions(\n parentId: string,\n options?: {\n create?: boolean;\n delete?: boolean;\n view?: boolean;\n edit?: boolean;\n },\n): AXPEntityAction[] {\n const opts = {\n create: true,\n delete: true,\n view: true,\n edit: true,\n ...options,\n };\n const actions: AXPEntityAction[] = [];\n if (opts.create) {\n actions.push(entityDetailsCreateActions(parentId));\n }\n if (opts.edit) {\n actions.push(entityDetailsEditAction());\n }\n if (opts.view) {\n actions.push(entityOverrideDetailsViewAction());\n }\n return actions;\n}\n\nexport function entityDetailsReferenceCreateActions(type: string): AXPEntityAction[] {\n return [\n {\n title: '@general:actions.create.title',\n command: {\n name: 'Entity:Create',\n options: {\n process: {\n redirect: false,\n canCreateNewOne: true,\n data: {\n reference: {\n id: '{{context.eval(\"id\")}}',\n type: type,\n },\n },\n },\n },\n },\n priority: 'primary',\n type: AXPSystemActionType.Create,\n scope: AXPEntityCommandScope.TypeLevel,\n },\n entityDetailsEditAction(),\n entityOverrideDetailsViewAction(),\n ];\n}\n\n// #endregion\n\n//TODO: Move to core as a shared utility\n//#region ---- Entity Diff Utilities ----\n\nimport { isEqual, transform } from 'lodash';\n\nexport type AXPEntityChangeSet = {\n [key: string]: { oldValue: any; newValue: any; added?: any[]; removed?: any[] };\n};\n\n/**\n * Computes a diff between two plain objects with array-aware semantics.\n * - For arrays of objects with an id field, computes added/removed by id.\n * - For arrays of primitives or objects without id, uses deep equality.\n * - For scalars/objects, reports oldValue/newValue when changed.\n */\nexport function detectEntityChanges(oldObj: any, newObj: any): AXPEntityChangeSet {\n return transform(\n newObj,\n (result: AXPEntityChangeSet, value: any, key: string) => {\n if (!isEqual(value, (oldObj as any)[key])) {\n const oldValue = (oldObj as any)[key];\n\n if (Array.isArray(value) || Array.isArray(oldValue)) {\n const oldArray = Array.isArray(oldValue) ? oldValue : [];\n const newArray = Array.isArray(value) ? value : [];\n\n const hasId =\n newArray.length > 0 && typeof newArray[0] === 'object' && newArray[0] !== null && 'id' in newArray[0];\n\n if (hasId) {\n const added = newArray.filter((item) => !oldArray.some((oldItem: any) => oldItem.id === item.id));\n const removed = oldArray.filter((item: any) => !newArray.some((newItem: any) => newItem.id === item.id));\n result[key] = { oldValue, newValue: value, added, removed };\n } else {\n const added = newArray.filter((item) => !oldArray.some((oldItem: any) => isEqual(item, oldItem)));\n const removed = oldArray.filter((item: any) => !newArray.some((newItem: any) => isEqual(item, newItem)));\n result[key] = { oldValue, newValue: value, added, removed };\n }\n } else {\n result[key] = { oldValue, newValue: value };\n }\n }\n },\n {} as AXPEntityChangeSet,\n );\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["LOOKUP_WIDGET_TYPE","i2","i3","i5","i6","i7","i1","i4","mapEntityColumnToWidgetColumnHelper","i9","i1.AXPRelatedEntityConverterFactory","i2.AXPMainEntityContentBuilder","i3.AXPLayoutAdapterBuilder","moduleNameToI18nScope","isEqual"],"mappings":"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"}