@acorex/platform 19.3.8 → 19.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth/lib/permission/permission-definition.builder.d.ts +2 -2
- package/auth/lib/permission/permission.types.d.ts +1 -1
- package/common/index.d.ts +0 -1
- package/common/lib/layout/index.d.ts +0 -2
- package/common/lib/layout/menu/badge-helper.d.ts +2 -2
- package/core/index.d.ts +8 -1
- package/core/lib/context/context-store.service.d.ts +37 -0
- package/core/lib/directives/content-checker.directive.d.ts +10 -0
- package/core/lib/directives/index.d.ts +1 -0
- package/core/lib/expression-evaluator/expression-evaluator-scope-provider.service.d.ts +23 -0
- package/core/lib/expression-evaluator/expression-evaluator.service.d.ts +2 -0
- package/core/lib/expression-evaluator/index.d.ts +1 -0
- package/core/lib/types/interactive.types.d.ts +1 -0
- package/domain/README.md +3 -0
- package/domain/index.d.ts +2 -0
- package/domain/lib/domain.module.d.ts +8 -0
- package/domain/lib/provide-entity-crud-commands.d.ts +4 -0
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/acorex-platform-common.mjs +2 -202
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +312 -127
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +71 -0
- package/fesm2022/acorex-platform-domain.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-builder.mjs +5 -1
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +665 -3
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +61 -16
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +442 -3
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +448 -0
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-details-view.component-w1GLOu_c.mjs → acorex-platform-themes-default-details-view.component-DXwO-Euo.mjs} +7 -8
- package/fesm2022/acorex-platform-themes-default-details-view.component-DXwO-Euo.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-pLcvobi-.mjs +112 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-pLcvobi-.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-C8rL7vLD.mjs → acorex-platform-themes-default-entity-master-list-view.component-CIFq0eeQ.mjs} +15 -14
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CIFq0eeQ.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-qu3j-fxn.mjs → acorex-platform-themes-default-entity-master-single-view.component-Dbf3kR4Z.mjs} +34 -13
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Dbf3kR4Z.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +54 -291
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared.mjs +10 -417
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-i8FcuktZ.mjs → acorex-platform-widgets-button-widget-designer.component-Y6Ip7pnQ.mjs} +4 -4
- package/fesm2022/acorex-platform-widgets-button-widget-designer.component-Y6Ip7pnQ.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-BQcHI7vG.mjs → acorex-platform-widgets-checkbox-widget-column.component-Bq8dCQJb.mjs} +3 -3
- package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-Bq8dCQJb.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-rich-text-popup.component-BZkftryb.mjs → acorex-platform-widgets-rich-text-popup.component-CtZlLmEp.mjs} +3 -3
- package/fesm2022/acorex-platform-widgets-rich-text-popup.component-CtZlLmEp.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-DZD9AEmz.mjs → acorex-platform-widgets-tabular-data-edit-popup.component-Dg0d9DbZ.mjs} +5 -5
- package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-DZD9AEmz.mjs.map → acorex-platform-widgets-tabular-data-edit-popup.component-Dg0d9DbZ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-widgets-tabular-data-view-popup.component-CQT2kgt3.mjs → acorex-platform-widgets-tabular-data-view-popup.component-CB1YeddQ.mjs} +4 -4
- package/fesm2022/acorex-platform-widgets-tabular-data-view-popup.component-CB1YeddQ.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets.mjs +511 -94
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +103 -6
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/layout/builder/lib/builder/widget-base.component.d.ts +1 -0
- package/layout/builder/lib/builder/widget-map.d.ts +1 -0
- package/layout/components/index.d.ts +3 -0
- package/{common/lib/layout/task-badge → layout/components/lib/badge}/index.d.ts +1 -0
- package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/index.d.ts +1 -0
- package/layout/components/lib/blocks/layout-blocks.component.d.ts +8 -0
- package/layout/components/lib/blocks/layout-container.component.d.ts +13 -0
- package/layout/components/lib/component-slot/component-slot.directive.d.ts +46 -0
- package/layout/components/lib/component-slot/component-slot.types.d.ts +23 -0
- package/{common/lib/layout → layout/components/lib}/component-slot/index.d.ts +0 -1
- package/layout/entity/lib/entity-master-list.viewmodel.d.ts +4 -4
- package/layout/entity/lib/widgets/lookup-widget/lookup-widget-column.component.d.ts +1 -1
- package/layout/entity/lib/workflows/modify-entity.workflow.d.ts +6 -0
- package/layout/views/index.d.ts +2 -1
- package/layout/views/lib/layouts/index.d.ts +2 -0
- package/layout/views/lib/layouts/page/index.d.ts +3 -0
- package/{themes/default/lib/layouts/base/base-page.component.d.ts → layout/views/lib/layouts/page/page-layout-base.component.d.ts} +6 -4
- package/{themes/default/lib/layouts/base/base-page.types.d.ts → layout/views/lib/layouts/page/page-layout.base.d.ts} +1 -1
- package/{themes/default/lib/layouts/base/page-layout → layout/views/lib/layouts/page}/page-layout.component.d.ts +4 -2
- package/layout/views/lib/layouts/popup/index.d.ts +3 -0
- package/layout/views/lib/layouts/popup/popup-layout-base.component.d.ts +98 -0
- package/layout/views/lib/layouts/popup/popup-layout.base.d.ts +14 -0
- package/layout/views/lib/layouts/popup/popup-layout.component.d.ts +76 -0
- package/layout/views/lib/{details-view → views/details-view}/details-view.adapter.d.ts +1 -1
- package/layout/views/lib/views/index.d.ts +1 -0
- package/package.json +15 -7
- package/runtime/README.md +3 -0
- package/runtime/index.d.ts +17 -0
- package/runtime/lib/commands/command.extension.token.d.ts +7 -0
- package/runtime/lib/commands/command.interface.d.ts +3 -0
- package/runtime/lib/commands/command.middleware.d.ts +2 -0
- package/runtime/lib/commands/command.registry.d.ts +16 -0
- package/runtime/lib/commands/provide-command-middleware.d.ts +9 -0
- package/runtime/lib/commands/provide-command-setups.d.ts +9 -0
- package/runtime/lib/policy/policy-middleware-provider.d.ts +9 -0
- package/runtime/lib/policy/policy.directive.d.ts +9 -0
- package/runtime/lib/policy/policy.extension.token.d.ts +7 -0
- package/runtime/lib/policy/policy.interface.d.ts +17 -0
- package/runtime/lib/policy/policy.middleware.d.ts +3 -0
- package/runtime/lib/policy/policy.registry.d.ts +19 -0
- package/runtime/lib/policy/policy.service.d.ts +8 -0
- package/runtime/lib/policy/policy.types.d.ts +7 -0
- package/runtime/lib/queries/provide-query-middleware.d.ts +9 -0
- package/runtime/lib/queries/provide-query-setups.d.ts +9 -0
- package/runtime/lib/queries/query.extension.token.d.ts +7 -0
- package/runtime/lib/queries/query.interface.d.ts +3 -0
- package/runtime/lib/queries/query.middleware.d.ts +2 -0
- package/runtime/lib/queries/query.registry.d.ts +15 -0
- package/runtime/lib/runtime.module.d.ts +12 -0
- package/themes/default/index.d.ts +0 -1
- package/themes/default/lib/layouts/details-view/details-view.component.d.ts +2 -2
- package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.d.ts +2 -2
- package/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.d.ts +29 -2
- package/themes/default/lib/layouts/root-layout/components/horizontal-menu/horizontal-menu.component.d.ts +2 -1
- package/themes/default/lib/layouts/root-layout/components/side-menu/side-menu.component.d.ts +2 -1
- package/themes/default/lib/layouts/root-layout/root-layout.component.d.ts +1 -0
- package/themes/shared/index.d.ts +1 -3
- package/themes/shared/lib/shared.module.d.ts +1 -1
- package/themes/shared/lib/{components/slots → slots}/theme-slot.component.d.ts +9 -9
- package/widgets/lib/widgets/advance/avatar/avatar-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/advance/cron-job/cron-job-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-column.component.d.ts +6 -0
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-edit.component.d.ts +30 -0
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-filter.component.d.ts +6 -0
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-print.component.d.ts +6 -0
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-view.component.d.ts +31 -0
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget.config.d.ts +7 -0
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget.service.d.ts +12 -0
- package/widgets/lib/widgets/advance/file-uploader/index.d.ts +7 -0
- package/widgets/lib/widgets/editors/checkbox/checkbox-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/color/color-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/contact/contact-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/email/email-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/large-text/large-text-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/link/link-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/meta-data/meta-data-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/number/number-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/number-unit/number-unit-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/password/password-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/phone/phone-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/rich-text/rich-text-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/select/select-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/selection-list/selection-list-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/tabular-data/tabular-data-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/text/text-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/time-duration/time-duration-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/toggle/toggle-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/index.d.ts +1 -0
- package/workflow/lib/slots/workflow-action-bar/workflow-action-bar.component.d.ts +36 -0
- package/workflow/lib/workflow-evaluator-scope.provider.d.ts +4 -0
- package/workflow/lib/workflow.module.d.ts +2 -1
- package/common/lib/layout/beardcrumb.type.d.ts +0 -6
- package/common/lib/layout/component-slot/component-slot-loader.service.d.ts +0 -11
- package/common/lib/layout/component-slot/component-slot.directive.d.ts +0 -12
- package/common/lib/layout/component-slot/component-slot.types.d.ts +0 -15
- package/core/lib/index.d.ts +0 -7
- package/fesm2022/acorex-platform-themes-default-details-view.component-w1GLOu_c.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-BWsMbHQS.mjs +0 -112
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-BWsMbHQS.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-C8rL7vLD.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-qu3j-fxn.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-button-widget-designer.component-i8FcuktZ.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-BQcHI7vG.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-rich-text-popup.component-BZkftryb.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-tabular-data-view-popup.component-CQT2kgt3.mjs.map +0 -1
- package/themes/default/lib/layouts/base/index.d.ts +0 -3
- package/themes/default/lib/layouts/base/page-layout/index.d.ts +0 -1
- package/themes/shared/lib/components/layout-elements/layout-blocks.component.d.ts +0 -8
- /package/{themes/shared/lib/components → layout/components/lib}/badge/badge.directive.d.ts +0 -0
- /package/{common/lib/layout/task-badge → layout/components/lib/badge}/task-badge.service.d.ts +0 -0
- /package/{common/lib/layout/task-badge → layout/components/lib/badge}/task-badge.type.d.ts +0 -0
- /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-actions.component.d.ts +0 -0
- /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-footer.component.d.ts +0 -0
- /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-header.component.d.ts +0 -0
- /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-list.component.d.ts +0 -0
- /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-section.component.d.ts +0 -0
- /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-side.component.d.ts +0 -0
- /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-tool-bar.component.d.ts +0 -0
- /package/{common/lib/layout → layout/components/lib}/component-slot/component-slot-registery.service.d.ts +0 -0
- /package/{common/lib/layout → layout/components/lib}/component-slot/component-slot.module.d.ts +0 -0
- /package/layout/views/lib/{details-view → views/details-view}/details-view-route.resolver.d.ts +0 -0
- /package/layout/views/lib/{details-view → views/details-view}/details-view.viewmodel.d.ts +0 -0
- /package/layout/views/lib/{details-view → views/details-view}/index.d.ts +0 -0
- /package/layout/views/lib/{details-view → views/details-view}/sample.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-layout-views.mjs","sources":["../../../../libs/platform/layout/views/src/lib/details-view/sample.ts","../../../../libs/platform/layout/views/src/lib/details-view/details-view-route.resolver.ts","../../../../libs/platform/layout/views/src/lib/details-view/details-view.viewmodel.ts","../../../../libs/platform/layout/views/src/acorex-platform-layout-views.ts"],"sourcesContent":["import { AXPWidgetNode } from '@acorex/platform/layout/builder';\n\nconst blockContent1 = [\n {\n type: 'fieldset-layout',\n options: {\n title: 'Full Name',\n icon: 'fa-light fa-pen',\n variant: 'card',\n collapsible: true,\n },\n children: [\n {\n type: 'block-layout',\n options: {\n flex: {\n direction: 'column',\n align: 'center',\n justify: 'space-between',\n gap: '1rem',\n },\n },\n children: [\n {\n type: 'form-field',\n options: {\n label: 'First Name',\n },\n children: [\n {\n type: 'text-editor',\n path: 'firstName',\n },\n ],\n },\n {\n type: 'form-field',\n options: {\n label: 'Last Name',\n },\n children: [\n {\n type: 'text-editor',\n path: 'lastName',\n options: {\n disabled: `{{ !context.eval('firstName') }}`,\n },\n },\n ],\n },\n {\n type: 'form-field',\n options: {\n label: 'Full Name',\n },\n children: [\n {\n type: 'text-editor',\n //defaultValue: `{{ context.eval('firstName') + context.eval('lastName') }}`,\n path: 'fullName',\n options: {\n placeholder: `{{ context.eval('firstName') + ' ' + context.eval('lastName') }}`,\n },\n },\n ],\n },\n {\n type: 'form-field',\n options: {\n label: 'Enable',\n },\n children: [\n {\n type: 'toggle-editor',\n path: 'enable',\n options: {\n disabled: `{{ context.eval('firstName')=='aaa' }}`,\n },\n },\n ],\n },\n ],\n },\n ],\n },\n];\n\nconst blockContent2 = [\n {\n type: 'block-layout',\n options: {\n flex: {\n direction: 'column',\n align: 'center',\n justify: 'space-between',\n gap: '1rem',\n },\n },\n children: [\n {\n type: 'form-field',\n options: {\n label: 'Email',\n },\n children: [\n {\n type: 'text-editor',\n path: 'email',\n },\n ],\n },\n {\n type: 'form-field',\n options: {\n label: 'Phone',\n },\n children: [\n {\n type: 'text-editor',\n path: 'phone',\n },\n ],\n },\n ],\n },\n];\n\nexport const AXPLayoutDetailsViewSample: AXPWidgetNode[] = [\n {\n type: 'block-layout',\n options: {\n flex: {\n direction: 'column',\n align: 'center',\n justify: 'space-between',\n gap: '1rem',\n },\n },\n children: [\n {\n type: 'tabset-layout',\n options: {\n title: 'Tab 1',\n description: 'Tab 1 Description',\n icon: 'icon',\n location: 'start',\n },\n children: [\n {\n type: 'tabset-item',\n options: {\n title: 'Tab 1',\n },\n children: blockContent1,\n },\n {\n type: 'tabset-item',\n options: {\n title: 'Tab 2',\n },\n children: blockContent2,\n },\n ],\n },\n ],\n },\n];\n","import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';\nimport { AXPLayoutDetailsViewAdapter } from './details-view.adapter';\nimport { AXPLayoutDetailsViewSample } from './sample';\n\nexport const AXPLayoutDetailsViewRouteResolver: ResolveFn<Promise<AXPLayoutDetailsViewAdapter>> = (\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n): Promise<AXPLayoutDetailsViewAdapter> => {\n const moduleName = route.parent?.paramMap.get('module') as string;\n const entityName = route.parent?.paramMap.get('entity') as string;\n const id = route.paramMap.get('id') as string;\n //\n const adapter: AXPLayoutDetailsViewAdapter = {\n title: `${moduleName} ${entityName} / {{ context.eval(\"firstName\") }}`,\n description: 'Description ({{ context.eval(\"firstName\") }})',\n icon: 'icon',\n content: AXPLayoutDetailsViewSample,\n load: () =>\n Promise.resolve({\n success: true,\n result: { items: [{ firstName: 'John', lastName: 'Doe', email: 'john.doe@example.com', phone: '1234567890' }] },\n }),\n save: () => Promise.resolve({ success: true }),\n execute: () => Promise.resolve({ success: true }),\n };\n //\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(adapter);\n }, 200);\n });\n};\n","import { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService, cleanDeep, getSmart } from '@acorex/platform/core';\nimport { AXPPageStatus } from '@acorex/platform/layout/builder';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { cloneDeep, isEqual } from 'lodash-es';\nimport { AXPLayoutDetailsViewAdapter } from './details-view.adapter';\n\nexport const AXPLayoutDetailsViewViewModel = signalStore(\n withState(() => {\n const state = {\n adapter: null as AXPLayoutDetailsViewAdapter | null,\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n scope: null as AXPExpressionEvaluatorScope | null,\n status: AXPPageStatus.Processing,\n };\n return state;\n }),\n withComputed((store) => ({\n icon: computed(() => store.adapter()?.icon ?? null),\n content: computed(() => store.adapter()?.content ?? []),\n //\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isSaving: computed(() => store.status() == AXPPageStatus.Submitting),\n isDirty: computed(() => !isEqual(store.context(), store.previousContext())),\n isLoaded: computed(() => store.adapter() != null),\n })),\n withMethods((store, evaluatorService = inject(AXPExpressionEvaluatorService)) => ({\n // Load Adapter\n async load(adapter: AXPLayoutDetailsViewAdapter) {\n patchState(store, { adapter });\n //\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return getSmart(store.context(), path);\n },\n },\n };\n patchState(store, { scope });\n //\n patchState(store, {\n status: AXPPageStatus.Processing,\n });\n const loadResult = await adapter.load({});\n const context = loadResult.result?.items?.[0] ?? {};\n patchState(store, {\n previousContext: cloneDeep(context),\n context: cloneDeep(context),\n status: AXPPageStatus.Rendered,\n });\n },\n // Set Context\n updateContext(context: any) {\n patchState(store, {\n context: cleanDeep(context),\n });\n },\n async title() {\n const raw = store.adapter()?.title;\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n async description() {\n const raw = store.adapter()?.description;\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n // Process Actions\n async primaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'primary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n // Secondary Actions\n async secondaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'secondary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n //\n async discard() {\n patchState(store, {\n context: cloneDeep(store.previousContext()),\n });\n },\n async save() {\n const result = await store.adapter()?.save?.(store.context());\n if (result?.success) {\n patchState(store, {\n previousContext: cloneDeep(store.context()),\n });\n }\n },\n }))\n);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-layout-views.mjs","sources":["../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/sample.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view-route.resolver.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.viewmodel.ts","../../../../libs/platform/layout/views/src/acorex-platform-layout-views.ts"],"sourcesContent":["import { AXPActionMenuItem, AXPBackButton, AXPBreadcrumbItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPageLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n\n abstract hasTitleActions: Signal<boolean>;\n\n abstract hasPrimaryActions: Signal<boolean>;\n\n abstract hasSecondaryActions: Signal<boolean>;\n\n abstract hasActions: Signal<boolean>;\n\n abstract breadcrumbs: Signal<AXPBreadcrumbItem[]>;\n\n abstract title: Signal<string>;\n\n abstract hasTitle: Signal<boolean>;\n\n abstract hasDescription: Signal<boolean>;\n\n abstract description: Signal<string>;\n\n abstract hasBreadcrumbs: Signal<boolean>;\n\n abstract hasBackButton: Signal<boolean>;\n\n abstract backButton: Signal<AXPBackButton>;\n\n abstract onBackButtonClick: () => void | Promise<void>;\n\n abstract startSideToggle: () => void | Promise<void>;\n\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent, AXCommonModule } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXPComponentSlotModule } from '@acorex/platform/layout/components';\nimport { AXPStickyDirective } from '@acorex/platform/common';\n//\nimport { AXDrawerContainerDirective, AXDrawerDirectiveModule, AXDrawerItemDirective } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport {\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n AXPThemeLayoutHeaderComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPageLayoutBase } from './page-layout.base';\nimport { AXPCommandRegistry } from '@acorex/platform/runtime';\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPComponentSlotModule,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutHeaderComponent,\n AXPStickyDirective,\n AXPThemeLayoutContainerComponent\n ],\n templateUrl: './page-layout.component.html',\n styleUrls: ['./page-layout.component.scss'],\n selector: 'axp-page-layout',\n encapsulation: ViewEncapsulation.None,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [AXDrawerContainerDirective],\n providers: [],\n})\nexport class AXPPageLayoutComponent {\n protected page = inject<AXPPageLayoutBase>(AXPPageLayoutBase, { optional: true });\n\n protected layoutService = inject(AXPLayoutThemeService);\n\n protected startSideDrawer = viewChild<AXDrawerItemDirective>('startSideDrawer');\n\n protected workflow = inject(AXPWorkflowService);\n protected commandRegistry = inject(AXPCommandRegistry);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.page?.title();\n this.page?.description();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-page-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.execute(item.command);\n }\n }\n\n toggleStartSide() {\n this.startSideDrawer()?.toggle();\n }\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n\n protected async execute(command: AXPExecuteCommand) {\n const reserved = ['navigate'];\n if (reserved.includes(command.name)) {\n await this.workflow.execute(command.name, { options: command.options });\n return;\n }\n if (this.commandRegistry.exists(command.name)) {\n await this.commandRegistry.execute(command.name, command.options ?? {});\n } else {\n await this.page?.execute(command);\n }\n }\n\n protected handleOnBackdropClick(event: MouseEvent) {\n event.stopPropagation();\n this.startSideDrawer()?.hide();\n }\n}\n","<div\n [mode]=\"layoutService.isSmall() ? 'overlay' : 'push'\"\n transition=\"0.25\"\n axDrawerItem\n [backDrop]=\"true\"\n (onBackdropClick)=\"handleBackdropClick($event)\"\n #startSideDrawer=\"axDrawerItem\"\n [backdropClass]=\"'ax-bg-darkest/75'\"\n [initialState]=\"layoutService.isSmall() ? 'hide' : 'show'\"\n drawerLocation=\"left\"\n class=\"ax-z-50 ax-h-full\"\n>\n <ng-content select=\"axp-layout-start-side\"></ng-content>\n</div>\n<axp-layout-container id=\"axp-page-layout\" #container>\n <axp-layout-header\n *translate=\"let t\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'axp-is-sticky'\"\n [stickyOffset]=\"50\"\n [stickyParent]=\"container.hostElement\"\n >\n @if (page?.hasBackButton() && layoutService.isSmall()) {\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm ax-w-fit ax-ms-1\"\n color=\"secondary\"\n (click)=\"page?.onBackButtonClick()\"\n [text]=\"page?.backButton()?.title\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-chevron-left rtl:ax-rotate-180\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n <!-------- Begin Title Bar -------->\n <axp-layout-title-bar>\n <!-------- Begin Title -------->\n <div class=\"ax-flex ax-flex-col ax-transition\">\n <!-- Breadcrumbs -->\n @if (page?.hasBreadcrumbs() && !layoutService.isSmall()) {\n <ax-breadcrumbs class=\"ax-mb-1\">\n @for (item of page?.breadcrumbs(); track $index) {\n <ax-breadcrumbs-item [active]=\"$last\" (click)=\"execute(item.command!)\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n {{ t(item.title) | async }}\n </ax-breadcrumbs-item>\n }\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward\"></i>\n </ng-template>\n </ax-breadcrumbs>\n }\n <div class=\"__title-container\">\n <!-- Title -->\n @if (page?.hasTitle()) {\n <axp-layout-title> {{ t(page?.title()) | async }}</axp-layout-title>\n }\n <!-- Title Actions -->\n @if (page?.hasTitleActions()) {\n <ax-button [look]=\"'blank'\" class=\"ax-sm -ax-mx-2\">\n <ax-prefix>\n <i class=\"fa-solid fa-caret-down fa-fw\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of page?.titleActions(); track $index) {\n <ng-container>\n <ax-button-item\n [text]=\"(t(sub.title) | async)!\"\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 </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n <!-- Description -->\n @if (page?.hasDescription()) {\n <axp-layout-description> {{ t(page?.description()) | async }}</axp-layout-description>\n }\n </div>\n <!-------- Finish Title -------->\n <!--------------------------------------------------------------->\n <!-------- Page Actions -------->\n\n <axp-layout-actions class=\"ax-shrink-0\">\n <axp-component-slot name=\"page-header-actions\"></axp-component-slot>\n <!--Primary Actions -->\n @if (page?.hasPrimaryActions()) {\n <!-- items -->\n @for (item of page?.primaryMenuItems(); track $index) {\n <ng-container *ngIf=\"item.visible != false\">\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n [iconOnly]=\"layoutService.isSmall()\"\n [disabled]=\"item.disabled\"\n [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"item.color\"\n (onClick)=\"handleActionClick(item)\"\n >\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n @if (item?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of item?.items; track $index) {\n <ng-container *ngIf=\"sub.visible != false\">\n <ax-button-item\n [text]=\"(t(sub.title) | async)!\"\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 </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n </ng-container>\n }\n }\n <!-- Secondary Actions -->\n @if (page?.hasSecondaryActions()) {\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n [iconOnly]=\"layoutService.isSmall()\"\n [text]=\"t('actions') | async\"\n [look]=\"layoutService.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 page?.secondaryMenuItems(); track $index) {\n <ng-container *ngIf=\"item.visible != false\">\n <ax-button-item\n [text]=\"(t(item.title) | async)!\"\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 </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </axp-layout-actions>\n <!-- Finish Page Actions -->\n </axp-layout-title-bar>\n <!----- Finish Title Bar ----->\n <!--------------------------------------------------------------->\n <!-- Begin Navbar -->\n @if (!sticky.isSticky) {}\n <ng-content select=\"axp-page-toolbar\"></ng-content>\n <!-- Finish Navbar -->\n </axp-layout-header>\n <ng-content select=\"axp-page-content\"></ng-content>\n\n <axp-page-footer-container\n [ngStyle]=\"{ display: tt.isEmpty() && prefixSlot.isEmpty() && suffixSlot.isEmpty() ? 'none' : 'block' }\"\n >\n <axp-layout-container #tt>\n <ng-content select=\"axp-page-footer\"></ng-content>\n </axp-layout-container>\n <axp-page-footer>\n <axp-layout-prefix>\n <axp-component-slot name=\"page-footer-start\" #prefixSlot=\"slot\"></axp-component-slot>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <axp-component-slot name=\"page-footer-end\" #suffixSlot=\"slot\"></axp-component-slot>\n </axp-layout-suffix>\n </axp-page-footer>\n </axp-page-footer-container>\n</axp-layout-container>\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport { AXPActionMenuItem, AXPBackButton, AXPBreadcrumbItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { isEmpty, isNil } from 'lodash-es';\nimport { AXPPageLayoutComponent } from './page-layout.component';\nimport { AXPPolicyEngineService } from '@acorex/platform/runtime';\n@Component({\n standalone: true,\n template: '',\n})\nexport abstract class AXPPageLayoutBaseComponent {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n protected readonly policyService = inject(AXPPolicyEngineService);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n async ngOnInit() {\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n protected title = signal<string>('');\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPageTitle());\n });\n\n protected getPageTitle(): string | Promise<string> {\n return '';\n }\n\n private hasTitle = computed(() => this.title() !== '');\n\n //#endregion\n\n //#region ---------------- Description ----------------\n\n private description = signal<string | null>(null);\n\n private hasDescription = computed(() => !isNil(this.description()) && !isEmpty(this.description()));\n\n #descriptionEffect = effect(async () => {\n this.updateTrigger();\n this.description.set(await this.getPageDescription());\n });\n\n protected getPageDescription(): string | null | Promise<string | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Breadcrumbs ----------------\n\n private defaultBreadCrumbs: AXPBreadcrumbItem[] = [\n {\n title: 't(\"home\")',\n icon: 'fa-solid fa-home ax-text-xs ax-me-1',\n command: {\n name: 'navigate',\n options: {\n path: this.homePageService.getCurrent().path,\n },\n },\n },\n ];\n\n private breadcrumbs = signal<AXPBreadcrumbItem[]>(this.defaultBreadCrumbs);\n\n #breadcrumbsEffect = effect(async () => {\n this.updateTrigger();\n const breadCrumbs = await this.getPageBreadcrumbs();\n this.breadcrumbs.set([...this.defaultBreadCrumbs, ...breadCrumbs]);\n });\n\n private hasBreadcrumbs = computed(() => this.breadcrumbs().length > 1);\n\n protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]> {\n return [];\n }\n\n //#endregion\n\n //#region ---------------- Layout ----------------\n\n\n protected layout = viewChild(AXPPageLayoutComponent);\n\n //TODO: Remove this after migration to the new layout\n protected toggleEndSide() {\n //this.layout()?.toggleStartSide()\n }\n\n //TODO: Remove this after migration to the new layout\n protected toggleStartSide() {\n this.layout()?.toggleStartSide()\n }\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasPrimaryActions = computed(() => this.primaryMenuItems().filter(item => item.visible != false).length > 0);\n\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getPrimaryMenuItems();\n // await Promise.all(items\n // .filter(item => item.policy)\n // .map(async (item) => {\n // await this.optionsService.apply({\n // id: item.name ?? '',\n // sender: item,\n // policies: item.policy ? [item.policy] : undefined\n // });\n // }));\n // await this.optionsService.apply({\n // id: 'page-primary-actions',\n // sender: items,\n // });\n this.primaryMenuItems.set(items);\n });\n\n protected getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasSecondaryActions = computed(() => this.secondaryMenuItems().filter(item => item.visible != false).length > 0);\n\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getSecondaryMenuItems();\n this.secondaryMenuItems.set(items);\n });\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n protected getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public backButton = signal<AXPBackButton | null>(null);\n\n public hasBackButton = computed(() => this.backButton() !== null);\n\n protected getBackButton(): (AXPBackButton | null) | Promise<AXPBackButton | null> {\n return null;\n }\n\n #backButtonEffect = effect(async () => {\n this.updateTrigger();\n this.backButton.set(await this.getBackButton());\n });\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n public startSideToggle(): void | Promise<void> {\n this.layout();\n }\n\n public onBackButtonClick(): void | Promise<void> { }\n\n //#endregion\n}\n","import { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPopupLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n abstract hasTitleActions: Signal<boolean>;\n abstract hasPrimaryActions: Signal<boolean>;\n abstract hasSecondaryActions: Signal<boolean>;\n abstract hasActions: Signal<boolean>;\n abstract title: Signal<string>;\n abstract hasTitle: Signal<boolean>;\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n} ","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent, AXCommonModule } from \"@acorex/cdk/common\";\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\n//\nimport { AXDrawerDirectiveModule } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPopupLayoutBase } from './popup-layout.base';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n ],\n templateUrl: './popup-layout.component.html',\n styleUrls: ['./popup-layout.component.scss'],\n selector: 'axp-popup-layout',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPPopupLayoutComponent {\n protected popup = inject<AXPPopupLayoutBase>(AXPPopupLayoutBase);\n protected layoutService = inject(AXPLayoutThemeService);\n protected workflow = inject(AXPWorkflowService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.popup?.title();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-popup-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.popup?.execute(item.command);\n }\n }\n\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.popup?.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n} ","<axp-layout-container id=\"axp-popup-layout\" #container>\n <ng-content select=\"axp-page-content\"></ng-content>\n <axp-page-footer *translate=\"let t\">\n <ax-prefix> </ax-prefix>\n @if(popup.hasPrimaryActions()) {\n <ax-suffix>\n @for(item of popup.primaryMenuItems(); track $index) {\n <ax-button\n [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"item.color\"\n (onClick)=\"handleActionClick(item)\"\n >\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-suffix>\n }\n </axp-page-footer>\n</axp-layout-container>\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { AXPPopupLayoutComponent } from './popup-layout.component';\nimport { AXBasePageComponent } from '@acorex/components/page';\n\n@Component({\n standalone: true,\n template: '',\n})\nexport abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n override async ngOnInit() {\n super.ngOnInit();\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<string>('');\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPopupTitle());\n });\n\n protected getPopupTitle(): string | Promise<string> {\n return '';\n }\n\n public hasTitle = computed(() => this.title() !== '');\n\n //#endregion\n\n\n\n //#region ---------------- Layout ----------------\n\n // Placeholder for popup layout reference if needed\n protected layout = viewChild(AXPPopupLayoutComponent);\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasPrimaryActions = computed(() => this.primaryMenuItems().length > 0);\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.primaryMenuItems.set(await this.getPrimaryMenuItems());\n });\n protected getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasSecondaryActions = computed(() => this.secondaryMenuItems().length > 0);\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.secondaryMenuItems.set(await this.getSecondaryMenuItems());\n });\n protected getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n //#endregion\n} ","import { AXPWidgetNode } from '@acorex/platform/layout/builder';\n\nconst blockContent1 = [\n {\n type: 'fieldset-layout',\n options: {\n title: 'Full Name',\n icon: 'fa-light fa-pen',\n variant: 'card',\n collapsible: true,\n },\n children: [\n {\n type: 'block-layout',\n options: {\n flex: {\n direction: 'column',\n align: 'center',\n justify: 'space-between',\n gap: '1rem',\n },\n },\n children: [\n {\n type: 'form-field',\n options: {\n label: 'First Name',\n },\n children: [\n {\n type: 'text-editor',\n path: 'firstName',\n },\n ],\n },\n {\n type: 'form-field',\n options: {\n label: 'Last Name',\n },\n children: [\n {\n type: 'text-editor',\n path: 'lastName',\n options: {\n disabled: `{{ !context.eval('firstName') }}`,\n },\n },\n ],\n },\n {\n type: 'form-field',\n options: {\n label: 'Full Name',\n },\n children: [\n {\n type: 'text-editor',\n //defaultValue: `{{ context.eval('firstName') + context.eval('lastName') }}`,\n path: 'fullName',\n options: {\n placeholder: `{{ context.eval('firstName') + ' ' + context.eval('lastName') }}`,\n },\n },\n ],\n },\n {\n type: 'form-field',\n options: {\n label: 'Enable',\n },\n children: [\n {\n type: 'toggle-editor',\n path: 'enable',\n options: {\n disabled: `{{ context.eval('firstName')=='aaa' }}`,\n },\n },\n ],\n },\n ],\n },\n ],\n },\n];\n\nconst blockContent2 = [\n {\n type: 'block-layout',\n options: {\n flex: {\n direction: 'column',\n align: 'center',\n justify: 'space-between',\n gap: '1rem',\n },\n },\n children: [\n {\n type: 'form-field',\n options: {\n label: 'Email',\n },\n children: [\n {\n type: 'text-editor',\n path: 'email',\n },\n ],\n },\n {\n type: 'form-field',\n options: {\n label: 'Phone',\n },\n children: [\n {\n type: 'text-editor',\n path: 'phone',\n },\n ],\n },\n ],\n },\n];\n\nexport const AXPLayoutDetailsViewSample: AXPWidgetNode[] = [\n {\n type: 'block-layout',\n options: {\n flex: {\n direction: 'column',\n align: 'center',\n justify: 'space-between',\n gap: '1rem',\n },\n },\n children: [\n {\n type: 'tabset-layout',\n options: {\n title: 'Tab 1',\n description: 'Tab 1 Description',\n icon: 'icon',\n location: 'start',\n },\n children: [\n {\n type: 'tabset-item',\n options: {\n title: 'Tab 1',\n },\n children: blockContent1,\n },\n {\n type: 'tabset-item',\n options: {\n title: 'Tab 2',\n },\n children: blockContent2,\n },\n ],\n },\n ],\n },\n];\n","import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';\nimport { AXPLayoutDetailsViewAdapter } from './details-view.adapter';\nimport { AXPLayoutDetailsViewSample } from './sample';\n\nexport const AXPLayoutDetailsViewRouteResolver: ResolveFn<Promise<AXPLayoutDetailsViewAdapter>> = (\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n): Promise<AXPLayoutDetailsViewAdapter> => {\n const moduleName = route.parent?.paramMap.get('module') as string;\n const entityName = route.parent?.paramMap.get('entity') as string;\n const id = route.paramMap.get('id') as string;\n //\n const adapter: AXPLayoutDetailsViewAdapter = {\n title: `${moduleName} ${entityName} / {{ context.eval(\"firstName\") }}`,\n description: 'Description ({{ context.eval(\"firstName\") }})',\n icon: 'icon',\n content: AXPLayoutDetailsViewSample,\n load: () =>\n Promise.resolve({\n success: true,\n result: { items: [{ firstName: 'John', lastName: 'Doe', email: 'john.doe@example.com', phone: '1234567890' }] },\n }),\n save: () => Promise.resolve({ success: true }),\n execute: () => Promise.resolve({ success: true }),\n };\n //\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(adapter);\n }, 200);\n });\n};\n","import { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService, cleanDeep, getSmart } from '@acorex/platform/core';\nimport { AXPPageStatus } from '@acorex/platform/layout/builder';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { cloneDeep, isEqual } from 'lodash-es';\nimport { AXPLayoutDetailsViewAdapter } from './details-view.adapter';\n\nexport const AXPLayoutDetailsViewViewModel = signalStore(\n withState(() => {\n const state = {\n adapter: null as AXPLayoutDetailsViewAdapter | null,\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n scope: null as AXPExpressionEvaluatorScope | null,\n status: AXPPageStatus.Processing,\n };\n return state;\n }),\n withComputed((store) => ({\n icon: computed(() => store.adapter()?.icon ?? null),\n content: computed(() => store.adapter()?.content ?? []),\n //\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isSaving: computed(() => store.status() == AXPPageStatus.Submitting),\n isDirty: computed(() => !isEqual(store.context(), store.previousContext())),\n isLoaded: computed(() => store.adapter() != null),\n })),\n withMethods((store, evaluatorService = inject(AXPExpressionEvaluatorService)) => ({\n // Load Adapter\n async load(adapter: AXPLayoutDetailsViewAdapter) {\n patchState(store, { adapter });\n //\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return getSmart(store.context(), path);\n },\n },\n };\n patchState(store, { scope });\n //\n patchState(store, {\n status: AXPPageStatus.Processing,\n });\n const loadResult = await adapter.load({});\n const context = loadResult.result?.items?.[0] ?? {};\n patchState(store, {\n previousContext: cloneDeep(context),\n context: cloneDeep(context),\n status: AXPPageStatus.Rendered,\n });\n },\n // Set Context\n updateContext(context: any) {\n patchState(store, {\n context: cleanDeep(context),\n });\n },\n async title() {\n const raw = store.adapter()?.title;\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n async description() {\n const raw = store.adapter()?.description;\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n // Process Actions\n async primaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'primary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n // Secondary Actions\n async secondaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'secondary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n //\n async discard() {\n patchState(store, {\n context: cloneDeep(store.previousContext()),\n });\n },\n async save() {\n const result = await store.adapter()?.save?.(store.context());\n if (result?.success) {\n patchState(store, {\n previousContext: cloneDeep(store.context()),\n });\n }\n },\n }))\n);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4"],"mappings":"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"}
|
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, EnvironmentInjector, runInInjectionContext, Injectable, makeEnvironmentProviders, input, ElementRef, effect, Directive, isDevMode, NgModule } from '@angular/core';
|
|
3
|
+
import { castArray } from 'lodash-es';
|
|
4
|
+
|
|
5
|
+
function composeCommandMiddlewares(middlewares) {
|
|
6
|
+
return (handler) => {
|
|
7
|
+
let composed = handler;
|
|
8
|
+
for (let i = middlewares.length - 1; i >= 0; i--) {
|
|
9
|
+
const mw = middlewares[i];
|
|
10
|
+
const next = composed;
|
|
11
|
+
composed = (input) => mw(input, next);
|
|
12
|
+
}
|
|
13
|
+
return composed;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// plugins/command.extension.token.ts
|
|
18
|
+
const AXP_COMMAND_EXTENSION = new InjectionToken('AXP_COMMAND_EXTENSION');
|
|
19
|
+
|
|
20
|
+
class AXPCommandRegistry {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.registry = new Map();
|
|
23
|
+
this.middlewares = [];
|
|
24
|
+
this.injector = inject(EnvironmentInjector);
|
|
25
|
+
this.extensions = inject(AXP_COMMAND_EXTENSION, { optional: true });
|
|
26
|
+
}
|
|
27
|
+
register(key, loader) {
|
|
28
|
+
this.registry.set(key, loader);
|
|
29
|
+
}
|
|
30
|
+
use(mw) {
|
|
31
|
+
this.middlewares.push(mw);
|
|
32
|
+
}
|
|
33
|
+
exists(key) {
|
|
34
|
+
return this.registry.has(key);
|
|
35
|
+
}
|
|
36
|
+
getPluginMiddlewares(key) {
|
|
37
|
+
return this.extensions
|
|
38
|
+
?.filter(ext => ext.target instanceof RegExp ? ext.target.test(key) : ext.target === key)
|
|
39
|
+
.map(ext => ext.middleware) ?? [];
|
|
40
|
+
}
|
|
41
|
+
async execute(key, input) {
|
|
42
|
+
const loader = this.registry.get(key);
|
|
43
|
+
if (!loader) {
|
|
44
|
+
throw new Error(`${key} not implemented`);
|
|
45
|
+
}
|
|
46
|
+
const command = await loader();
|
|
47
|
+
const handler = (i) => command.execute(i);
|
|
48
|
+
const pluginMws = this.getPluginMiddlewares(key);
|
|
49
|
+
const wrappedMws = [...this.middlewares, ...pluginMws].map(mw => {
|
|
50
|
+
return (input, next) => runInInjectionContext(this.injector, () => mw(input, next));
|
|
51
|
+
});
|
|
52
|
+
const composed = composeCommandMiddlewares(wrappedMws)(handler);
|
|
53
|
+
return composed(input);
|
|
54
|
+
}
|
|
55
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPCommandRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
56
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPCommandRegistry, providedIn: 'root' }); }
|
|
57
|
+
}
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPCommandRegistry, decorators: [{
|
|
59
|
+
type: Injectable,
|
|
60
|
+
args: [{ providedIn: 'root' }]
|
|
61
|
+
}] });
|
|
62
|
+
|
|
63
|
+
const AXP_COMMAND_SETUP = new InjectionToken('AXP_COMMAND_SETUP');
|
|
64
|
+
function provideCommandSetups(entries) {
|
|
65
|
+
return makeEnvironmentProviders([
|
|
66
|
+
{
|
|
67
|
+
provide: AXP_COMMAND_SETUP,
|
|
68
|
+
useFactory: () => {
|
|
69
|
+
const registry = inject(AXPCommandRegistry);
|
|
70
|
+
const injector = inject(EnvironmentInjector);
|
|
71
|
+
for (const entry of entries) {
|
|
72
|
+
registry.register(entry.key, async () => {
|
|
73
|
+
const CommandType = await entry.command();
|
|
74
|
+
return injector.get(CommandType);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
]);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const AXP_COMMAND_MIDDLEWARE_SETUP = new InjectionToken('AXP_COMMAND_MIDDLEWARE_SETUP');
|
|
84
|
+
function provideCommandMiddleware(entries) {
|
|
85
|
+
const global = [];
|
|
86
|
+
const extensions = [];
|
|
87
|
+
for (const entry of entries) {
|
|
88
|
+
if (typeof entry === 'function') {
|
|
89
|
+
global.push(entry);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
extensions.push(entry);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return makeEnvironmentProviders([
|
|
96
|
+
// Plugin middleware entries
|
|
97
|
+
...extensions.map(ext => ({
|
|
98
|
+
provide: AXP_COMMAND_EXTENSION,
|
|
99
|
+
useValue: ext,
|
|
100
|
+
multi: true
|
|
101
|
+
})),
|
|
102
|
+
// Global middleware setup (triggered via this token)
|
|
103
|
+
{
|
|
104
|
+
provide: AXP_COMMAND_MIDDLEWARE_SETUP,
|
|
105
|
+
useFactory: () => {
|
|
106
|
+
const registry = inject(AXPCommandRegistry);
|
|
107
|
+
for (const mw of global) {
|
|
108
|
+
registry.use(mw);
|
|
109
|
+
}
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
]);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function composeQueryMiddlewares(middlewares) {
|
|
117
|
+
return (handler) => {
|
|
118
|
+
let composed = handler;
|
|
119
|
+
for (let i = middlewares.length - 1; i >= 0; i--) {
|
|
120
|
+
const mw = middlewares[i];
|
|
121
|
+
const next = composed;
|
|
122
|
+
composed = (input) => mw(input, next);
|
|
123
|
+
}
|
|
124
|
+
return composed;
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// plugins/query.extension.token.ts
|
|
129
|
+
const AXP_QUERY_EXTENSION = new InjectionToken('AXP_QUERY_EXTENSION');
|
|
130
|
+
|
|
131
|
+
// queries/query.registry.ts
|
|
132
|
+
class AXPQueryRegistry {
|
|
133
|
+
constructor() {
|
|
134
|
+
this.registry = new Map();
|
|
135
|
+
this.middlewares = [];
|
|
136
|
+
this.extensions = inject(AXP_QUERY_EXTENSION, { optional: true });
|
|
137
|
+
this.injector = inject(EnvironmentInjector);
|
|
138
|
+
}
|
|
139
|
+
register(key, loader) {
|
|
140
|
+
this.registry.set(key, loader);
|
|
141
|
+
}
|
|
142
|
+
use(mw) {
|
|
143
|
+
this.middlewares.push(mw);
|
|
144
|
+
}
|
|
145
|
+
getPluginMiddlewares(key) {
|
|
146
|
+
return this.extensions
|
|
147
|
+
?.filter(ext => ext.target instanceof RegExp ? ext.target.test(key) : ext.target === key)
|
|
148
|
+
.map(ext => ext.middleware) ?? [];
|
|
149
|
+
}
|
|
150
|
+
async execute(key, input) {
|
|
151
|
+
const loader = this.registry.get(key);
|
|
152
|
+
if (!loader)
|
|
153
|
+
return null;
|
|
154
|
+
const query = await loader();
|
|
155
|
+
const handler = (i) => query.execute(i);
|
|
156
|
+
const pluginMws = this.getPluginMiddlewares(key);
|
|
157
|
+
const wrappedMws = [...this.middlewares, ...pluginMws].map(mw => {
|
|
158
|
+
return (input, next) => runInInjectionContext(this.injector, () => mw(input, next));
|
|
159
|
+
});
|
|
160
|
+
const composed = composeQueryMiddlewares(wrappedMws)(handler);
|
|
161
|
+
return composed(input);
|
|
162
|
+
}
|
|
163
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPQueryRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
164
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPQueryRegistry, providedIn: 'root' }); }
|
|
165
|
+
}
|
|
166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPQueryRegistry, decorators: [{
|
|
167
|
+
type: Injectable,
|
|
168
|
+
args: [{ providedIn: 'root' }]
|
|
169
|
+
}] });
|
|
170
|
+
|
|
171
|
+
function composePolicyEngineMiddlewares(middlewares) {
|
|
172
|
+
return (handler) => {
|
|
173
|
+
let composed = handler;
|
|
174
|
+
for (let i = middlewares.length - 1; i >= 0; i--) {
|
|
175
|
+
const mw = middlewares[i];
|
|
176
|
+
const next = composed;
|
|
177
|
+
composed = (context) => mw(context, next);
|
|
178
|
+
}
|
|
179
|
+
return composed;
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
class AXPPolicyEngineContext {
|
|
184
|
+
constructor(options) {
|
|
185
|
+
this._visible = true;
|
|
186
|
+
this._enabled = true;
|
|
187
|
+
this._id = options.id;
|
|
188
|
+
this._sender = options.sender;
|
|
189
|
+
}
|
|
190
|
+
get sender() {
|
|
191
|
+
return this._sender;
|
|
192
|
+
}
|
|
193
|
+
get id() {
|
|
194
|
+
return this._id;
|
|
195
|
+
}
|
|
196
|
+
get visible() {
|
|
197
|
+
return this._visible;
|
|
198
|
+
}
|
|
199
|
+
get enabled() {
|
|
200
|
+
return this._enabled;
|
|
201
|
+
}
|
|
202
|
+
setVisible(visible) {
|
|
203
|
+
this._visible = visible;
|
|
204
|
+
return this;
|
|
205
|
+
}
|
|
206
|
+
setEnabled(enabled) {
|
|
207
|
+
this._enabled = enabled;
|
|
208
|
+
return this;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// plugins/command.extension.token.ts
|
|
213
|
+
const AXP_POLICY_EXTENSION = new InjectionToken('AXP_POLICY_EXTENSION');
|
|
214
|
+
|
|
215
|
+
class AXPPolicyEngineRegistry {
|
|
216
|
+
constructor() {
|
|
217
|
+
this.registry = new Map();
|
|
218
|
+
this.middlewares = [];
|
|
219
|
+
this.extensions = inject(AXP_POLICY_EXTENSION, { optional: true });
|
|
220
|
+
this.injector = inject(EnvironmentInjector);
|
|
221
|
+
}
|
|
222
|
+
use(mw) {
|
|
223
|
+
this.middlewares.push(mw);
|
|
224
|
+
}
|
|
225
|
+
exists(key) {
|
|
226
|
+
return this.registry.has(key);
|
|
227
|
+
}
|
|
228
|
+
getPolicies() {
|
|
229
|
+
return Array.from(this.registry.keys());
|
|
230
|
+
}
|
|
231
|
+
register(key, loader) {
|
|
232
|
+
this.registry.set(key, loader);
|
|
233
|
+
}
|
|
234
|
+
getPluginMiddlewares(key) {
|
|
235
|
+
return this.extensions
|
|
236
|
+
?.filter(ext => ext.key === key)
|
|
237
|
+
.map(ext => ext.middleware) ?? [];
|
|
238
|
+
}
|
|
239
|
+
async execute(policy, instance) {
|
|
240
|
+
const loader = this.registry.get(policy);
|
|
241
|
+
if (!loader) {
|
|
242
|
+
throw new Error(`${policy} not implemented`);
|
|
243
|
+
}
|
|
244
|
+
const context = new AXPPolicyEngineContext(instance);
|
|
245
|
+
const applier = await loader();
|
|
246
|
+
const handler = (i) => applier.apply(i);
|
|
247
|
+
const pluginMws = this.getPluginMiddlewares(policy);
|
|
248
|
+
const wrappedMws = [...this.middlewares, ...pluginMws].map(mw => {
|
|
249
|
+
return (input, next) => runInInjectionContext(this.injector, () => mw(input, next));
|
|
250
|
+
});
|
|
251
|
+
const composed = composePolicyEngineMiddlewares(wrappedMws)(handler);
|
|
252
|
+
await composed(context);
|
|
253
|
+
return context;
|
|
254
|
+
}
|
|
255
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPolicyEngineRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
256
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPolicyEngineRegistry, providedIn: 'root' }); }
|
|
257
|
+
}
|
|
258
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPolicyEngineRegistry, decorators: [{
|
|
259
|
+
type: Injectable,
|
|
260
|
+
args: [{ providedIn: 'root' }]
|
|
261
|
+
}] });
|
|
262
|
+
|
|
263
|
+
const AXP_POLICY_ENGINE_MIDDLEWARE_SETUP = new InjectionToken('AXP_POLICY_ENGINE_MIDDLEWARE_SETUP');
|
|
264
|
+
function providePolicySetups(entries) {
|
|
265
|
+
return makeEnvironmentProviders([
|
|
266
|
+
{
|
|
267
|
+
provide: AXP_POLICY_ENGINE_MIDDLEWARE_SETUP,
|
|
268
|
+
useFactory: () => {
|
|
269
|
+
const registry = inject(AXPPolicyEngineRegistry);
|
|
270
|
+
const injector = inject(EnvironmentInjector);
|
|
271
|
+
for (const entry of entries) {
|
|
272
|
+
registry.register(entry.key, async () => {
|
|
273
|
+
const PolicyType = await entry.policy();
|
|
274
|
+
return injector.get(PolicyType);
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
]);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
class AXPPolicyEngineService {
|
|
284
|
+
constructor() {
|
|
285
|
+
this.registry = inject(AXPPolicyEngineRegistry);
|
|
286
|
+
}
|
|
287
|
+
async apply(options) {
|
|
288
|
+
const allPolicies = this.registry.getPolicies().filter(p => (options.policies?.length ?? 0) == 0 || options.policies?.includes(p));
|
|
289
|
+
await Promise.all(allPolicies.map(async (policy) => {
|
|
290
|
+
const context = await this.registry.execute(policy, options);
|
|
291
|
+
return context;
|
|
292
|
+
}));
|
|
293
|
+
//
|
|
294
|
+
// if (instance instanceof HTMLElement) {
|
|
295
|
+
// if (context.visible === false) {
|
|
296
|
+
// instance.style.display = 'none';
|
|
297
|
+
// } else {
|
|
298
|
+
// instance.style.display = '';
|
|
299
|
+
// }
|
|
300
|
+
// }
|
|
301
|
+
// //
|
|
302
|
+
// if (instance instanceof MXBaseComponent) {
|
|
303
|
+
// if (context.visible === false) {
|
|
304
|
+
// instance.getHostElement().style.display = 'none';
|
|
305
|
+
// } else {
|
|
306
|
+
// instance.getHostElement().style.display = '';
|
|
307
|
+
// }
|
|
308
|
+
// }
|
|
309
|
+
// // Handle disabled state for interactive components
|
|
310
|
+
// if (instance instanceof MXInteractiveComponent) {
|
|
311
|
+
// if (context.enabled === false) {
|
|
312
|
+
// instance.disabled = true;
|
|
313
|
+
// } else {
|
|
314
|
+
// instance.disabled = false;
|
|
315
|
+
// }
|
|
316
|
+
// }
|
|
317
|
+
// // TODO: Handle object properties
|
|
318
|
+
// if (instance instanceof Object) {
|
|
319
|
+
// if (context.visible === false) {
|
|
320
|
+
// set(instance, 'visible', false);
|
|
321
|
+
// }
|
|
322
|
+
// if (context.enabled === false) {
|
|
323
|
+
// set(instance, 'disabled', true);
|
|
324
|
+
// }
|
|
325
|
+
// }
|
|
326
|
+
}
|
|
327
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPolicyEngineService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
328
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPolicyEngineService, providedIn: 'root' }); }
|
|
329
|
+
}
|
|
330
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPolicyEngineService, decorators: [{
|
|
331
|
+
type: Injectable,
|
|
332
|
+
args: [{
|
|
333
|
+
providedIn: 'root'
|
|
334
|
+
}]
|
|
335
|
+
}] });
|
|
336
|
+
|
|
337
|
+
class AXPPolicyEngineDirective {
|
|
338
|
+
constructor() {
|
|
339
|
+
this.policy = input.required({ alias: 'axp-apply-policy' });
|
|
340
|
+
this.service = inject(AXPPolicyEngineService);
|
|
341
|
+
this.elementRef = inject((ElementRef));
|
|
342
|
+
this.#eff = effect(async () => {
|
|
343
|
+
const policy = this.policy();
|
|
344
|
+
if (!policy) {
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
await this.service.apply({
|
|
348
|
+
id: this.elementRef.nativeElement.id,
|
|
349
|
+
policies: castArray(policy),
|
|
350
|
+
sender: this.elementRef.nativeElement
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
#eff;
|
|
355
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPolicyEngineDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
356
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.10", type: AXPPolicyEngineDirective, isStandalone: true, selector: "[axp-apply-policy]", inputs: { policy: { classPropertyName: "policy", publicName: "axp-apply-policy", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
|
|
357
|
+
}
|
|
358
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPolicyEngineDirective, decorators: [{
|
|
359
|
+
type: Directive,
|
|
360
|
+
args: [{
|
|
361
|
+
selector: '[axp-apply-policy]',
|
|
362
|
+
standalone: true
|
|
363
|
+
}]
|
|
364
|
+
}] });
|
|
365
|
+
|
|
366
|
+
const AXP_QUERY_SETUP = new InjectionToken('AXP_QUERY_SETUP');
|
|
367
|
+
function provideQuerySetups(entries) {
|
|
368
|
+
return makeEnvironmentProviders([
|
|
369
|
+
{
|
|
370
|
+
provide: AXP_QUERY_SETUP,
|
|
371
|
+
useFactory: () => {
|
|
372
|
+
const registry = inject(AXPQueryRegistry);
|
|
373
|
+
for (const [key, loader] of entries) {
|
|
374
|
+
registry.register(key, async () => {
|
|
375
|
+
const result = await loader();
|
|
376
|
+
return result;
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
]);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
const AXP_QUERY_MIDDLEWARE_SETUP = new InjectionToken('AXP_QUERY_MIDDLEWARE_SETUP');
|
|
386
|
+
function provideQueryMiddleware(entries) {
|
|
387
|
+
const global = [];
|
|
388
|
+
const extensions = [];
|
|
389
|
+
for (const entry of entries) {
|
|
390
|
+
if (typeof entry === 'function') {
|
|
391
|
+
global.push(entry);
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
extensions.push(entry);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return makeEnvironmentProviders([
|
|
398
|
+
// Plugin middleware entries
|
|
399
|
+
...extensions.map(ext => ({
|
|
400
|
+
provide: AXP_QUERY_EXTENSION,
|
|
401
|
+
useValue: ext,
|
|
402
|
+
multi: true
|
|
403
|
+
})),
|
|
404
|
+
// Global middleware setup (triggered via this token)
|
|
405
|
+
{
|
|
406
|
+
provide: AXP_QUERY_MIDDLEWARE_SETUP,
|
|
407
|
+
useFactory: () => {
|
|
408
|
+
const registry = inject(AXPQueryRegistry);
|
|
409
|
+
for (const mw of global) {
|
|
410
|
+
registry.use(mw);
|
|
411
|
+
}
|
|
412
|
+
return true;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
]);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
class AXPRuntimeModule {
|
|
419
|
+
constructor() {
|
|
420
|
+
this._commandSetup = inject(AXP_COMMAND_SETUP, { optional: true });
|
|
421
|
+
this._commandMiddlewareSetup = inject(AXP_COMMAND_MIDDLEWARE_SETUP, { optional: true });
|
|
422
|
+
this._querySetup = inject(AXP_QUERY_SETUP, { optional: true });
|
|
423
|
+
this._queryMiddlewareSetup = inject(AXP_QUERY_MIDDLEWARE_SETUP, { optional: true });
|
|
424
|
+
this._policyEngineSetup = inject(AXP_POLICY_ENGINE_MIDDLEWARE_SETUP, { optional: true });
|
|
425
|
+
if (isDevMode()) {
|
|
426
|
+
console.log('[AXPRuntimeModule] Command Setup:', this._commandSetup);
|
|
427
|
+
console.log('[AXPRuntimeModule] Command Middleware Setup:', this._commandMiddlewareSetup);
|
|
428
|
+
console.log('[AXPRuntimeModule] Query Setup:', this._querySetup);
|
|
429
|
+
console.log('[AXPRuntimeModule] Query Middleware Setup:', this._queryMiddlewareSetup);
|
|
430
|
+
console.log('[AXPRuntimeModule] Policy Engine Setup:', this._policyEngineSetup);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPRuntimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
434
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.10", ngImport: i0, type: AXPRuntimeModule }); }
|
|
435
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPRuntimeModule }); }
|
|
436
|
+
}
|
|
437
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPRuntimeModule, decorators: [{
|
|
438
|
+
type: NgModule
|
|
439
|
+
}], ctorParameters: () => [] });
|
|
440
|
+
|
|
441
|
+
// Commands
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Generated bundle index. Do not edit.
|
|
445
|
+
*/
|
|
446
|
+
|
|
447
|
+
export { AXPCommandRegistry, AXPPolicyEngineContext, AXPPolicyEngineDirective, AXPPolicyEngineRegistry, AXPPolicyEngineService, AXPQueryRegistry, AXPRuntimeModule, AXP_COMMAND_EXTENSION, AXP_COMMAND_MIDDLEWARE_SETUP, AXP_COMMAND_SETUP, AXP_POLICY_ENGINE_MIDDLEWARE_SETUP, AXP_QUERY_EXTENSION, composeCommandMiddlewares, composePolicyEngineMiddlewares, composeQueryMiddlewares, provideCommandMiddleware, provideCommandSetups, providePolicySetups };
|
|
448
|
+
//# sourceMappingURL=acorex-platform-runtime.mjs.map
|