@acorex/modules 21.0.0-next.31 → 21.0.0-next.33

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 (65) hide show
  1. package/fesm2022/{acorex-modules-ai-management-acorex-modules-ai-management-B6lnG21F.mjs → acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs} +10 -11
  2. package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs.map +1 -0
  3. package/fesm2022/{acorex-modules-ai-management-agent.entity-C2APPc7g.mjs → acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs} +2 -2
  4. package/fesm2022/{acorex-modules-ai-management-agent.entity-C2APPc7g.mjs.map → acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs.map} +1 -1
  5. package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D_54-MqC.mjs → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D_54-MqC.mjs.map → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-pG9y9bqO.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs} +6 -4
  8. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs.map +1 -0
  9. package/fesm2022/{acorex-modules-ai-management-assist.entity-D7sIFWTx.mjs → acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-ai-management-assist.entity-D7sIFWTx.mjs.map → acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-ai-management-index-DoOTRMvM.mjs → acorex-modules-ai-management-index-KX3TVRXr.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-ai-management-index-DoOTRMvM.mjs.map → acorex-modules-ai-management-index-KX3TVRXr.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-ai-management-model.entity-xhfG1tFZ.mjs → acorex-modules-ai-management-model.entity-BeuDUahR.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-ai-management-model.entity-xhfG1tFZ.mjs.map → acorex-modules-ai-management-model.entity-BeuDUahR.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-Bot8Ctq1.mjs → acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-Bot8Ctq1.mjs.map → acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs.map} +1 -1
  17. package/fesm2022/acorex-modules-ai-management.mjs +1 -1
  18. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs} +25 -25
  19. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BwwarDP0.mjs → acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs} +2 -2
  21. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BwwarDP0.mjs.map → acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQNn4Ryb.mjs → acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs} +2 -2
  23. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQNn4Ryb.mjs.map → acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-AptlLpWh.mjs → acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-AptlLpWh.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-assessment-management-index-BBzx9W5u.mjs → acorex-modules-assessment-management-index-B2SncZAW.mjs} +6 -6
  27. package/fesm2022/acorex-modules-assessment-management-index-B2SncZAW.mjs.map +1 -0
  28. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-BMoPn_op.mjs → acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs} +2 -2
  29. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-BMoPn_op.mjs.map → acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs.map} +1 -1
  30. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BI7JJIbZ.mjs → acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs} +2 -2
  31. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BI7JJIbZ.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BfWuSVG9.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BfWuSVG9.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CcDAcPJJ.mjs → acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CcDAcPJJ.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-DC7xwETF.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-DC7xwETF.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs.map} +1 -1
  38. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-DF7F-quh.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs} +2 -2
  39. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-DF7F-quh.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-zybar1sK.mjs → acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs} +3 -3
  41. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-zybar1sK.mjs.map → acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-DqJ-_k-4.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-DqJ-_k-4.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-IHxXETJQ.mjs → acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs} +2 -2
  45. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-IHxXETJQ.mjs.map → acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs.map} +1 -1
  46. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  47. package/fesm2022/acorex-modules-dashboard-management.mjs +4337 -3486
  48. package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
  49. package/fesm2022/acorex-modules-data-management.mjs +3 -2
  50. package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
  51. package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs +784 -0
  52. package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs.map +1 -0
  53. package/fesm2022/acorex-modules-organization-management.mjs +3 -9
  54. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  55. package/fesm2022/acorex-modules-workflow-management.mjs +488 -105
  56. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  57. package/package.json +2 -2
  58. package/types/acorex-modules-dashboard-management.d.ts +395 -216
  59. package/types/acorex-modules-organization-management.d.ts +3 -12
  60. package/types/acorex-modules-workflow-management.d.ts +27 -0
  61. package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-B6lnG21F.mjs.map +0 -1
  62. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-pG9y9bqO.mjs.map +0 -1
  63. package/fesm2022/acorex-modules-assessment-management-index-BBzx9W5u.mjs.map +0 -1
  64. package/fesm2022/acorex-modules-organization-management-org-chart.page-E0hy7dXg.mjs +0 -638
  65. package/fesm2022/acorex-modules-organization-management-org-chart.page-E0hy7dXg.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-modules-assessment-management-index-B2SncZAW.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/pages/questionnaire-questions-page/QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questionnaire-question-edit.property-tabs.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questionnaire-builder.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questionnaire-builder.component.html","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/pages/questionnaire-questions-page/questionnaire-questions-page.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/pages/questionnaire-questions-page/questionnaire-questions-page-component.provider.ts"],"sourcesContent":["/** Component key for the questionnaire Questions page tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY = 'questionnaire-questions-page';\n","//#region ---- Imports ----\n\nimport type { AXPPropertyViewerTab } from '@acorex/platform/layout/components';\nimport {\n AXPWidgetsCatalog,\n createBooleanProperty,\n type AXPWidgetProperty,\n type AXPWidgetPropertyGroup,\n} from '@acorex/platform/layout/widget-core';\n\nimport type { AXMAssessmentQuestionHintConfig } from '../../entities/question-bank-item/question-hint.types';\n\n//#endregion\n\n//#region ---- Groups ----\n\nconst GROUP_IDENTITY: AXPWidgetPropertyGroup = {\n name: 'identity',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.groups.identity.title',\n order: 0,\n};\n\nconst GROUP_VALIDATION: AXPWidgetPropertyGroup = {\n name: 'validation',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.groups.validation.title',\n order: 1,\n};\n\nconst GROUP_VISIBILITY: AXPWidgetPropertyGroup = {\n name: 'visibility',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.groups.visibility.title',\n order: 2,\n};\n\nconst GROUP_HINT: AXPWidgetPropertyGroup = {\n name: 'hint',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.groups.hint.title',\n order: 3,\n};\n\nconst GROUP_COMMENT: AXPWidgetPropertyGroup = {\n name: 'comment',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.groups.comment.title',\n order: 4,\n};\n\n//#endregion\n\n//#region ---- Shared options ----\n\nconst HINT_MODE_OPTIONS = [\n {\n id: 'off',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.off',\n },\n {\n id: 'info',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.info',\n },\n {\n id: 'warning',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.warning',\n },\n {\n id: 'danger',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.danger',\n },\n {\n id: 'success',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.success',\n },\n {\n id: 'neutral',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.neutral',\n },\n] as const;\n\n//#endregion\n\n//#region ---- Properties by group ----\n\nconst IDENTITY_PROPS: AXPWidgetProperty[] = [\n {\n name: 'name',\n title: '@general:terms.common.name',\n group: GROUP_IDENTITY,\n order: 10,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'name',\n path: 'name',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: '@general:terms.common.name',\n },\n },\n },\n visible: true,\n },\n {\n name: 'tags',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.tags.title',\n group: GROUP_IDENTITY,\n order: 20,\n schema: {\n dataType: 'array',\n defaultValue: [],\n interface: {\n name: 'tags',\n path: 'tags',\n type: 'tag-editor',\n options: {\n placeholder:\n '@assessment-management:questionnaires.components.questionnaire-builder.fields.tags.placeholder',\n allowDuplicate: false,\n },\n },\n },\n visible: true,\n },\n];\n\nconst VALIDATION_PROPS: AXPWidgetProperty[] = [\n {\n ...createBooleanProperty({\n name: 'isRequired',\n path: 'isRequired',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.is-required.title',\n group: GROUP_VALIDATION,\n defaultValue: false,\n }),\n order: 10,\n },\n];\n\nconst VISIBILITY_PROPS: AXPWidgetProperty[] = [\n {\n ...createBooleanProperty({\n name: 'isVisible',\n path: 'isVisible',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.visible.title',\n group: GROUP_VISIBILITY,\n defaultValue: true,\n }),\n order: 10,\n },\n];\n\nconst HINT_PROPS: AXPWidgetProperty[] = [\n {\n name: 'hintMode',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.title',\n group: GROUP_HINT,\n order: 10,\n schema: {\n dataType: 'string',\n defaultValue: { id: 'off', title: HINT_MODE_OPTIONS[0].title },\n interface: {\n name: 'hintMode',\n path: 'hint.mode',\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: [...HINT_MODE_OPTIONS],\n },\n },\n },\n visible: true,\n },\n {\n name: 'hintContent',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint.title',\n group: GROUP_HINT,\n order: 20,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'hintContent',\n path: 'hint.content',\n type: AXPWidgetsCatalog.richText,\n options: {},\n },\n },\n visible: \"{{ context.eval('hint.mode') && (context.eval('hint.mode').id || context.eval('hint.mode')) != 'off' }}\",\n },\n];\n\nconst COMMENT_PROPS: AXPWidgetProperty[] = [\n {\n ...createBooleanProperty({\n name: 'commentEnabled',\n path: 'comment.enabled',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.comment-enabled.title',\n group: GROUP_COMMENT,\n defaultValue: false,\n }),\n order: 10,\n },\n {\n ...createBooleanProperty({\n name: 'commentRequired',\n path: 'comment.required',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.comment-required.title',\n group: GROUP_COMMENT,\n defaultValue: false,\n visible: \"{{ context.eval('comment.enabled') === true }}\",\n }),\n order: 20,\n },\n];\n\n//#endregion\n\n//#region ---- Hint form context helper ----\n\n/**\n * Builds initial `hint` object for the question property viewer from the effective (merged) hint config.\n */\nexport function createQuestionHintFormContext(hint: AXMAssessmentQuestionHintConfig): {\n content: string;\n mode: { id: string; title: string };\n} {\n let content = '';\n if (hint.mode !== 'off') {\n const hc = hint.content;\n if (typeof hc === 'string') {\n content = hc;\n } else if (hc && typeof hc === 'object') {\n content = Object.values(hc as Record<string, string>)[0] ?? '';\n }\n }\n const modeId = hint.mode;\n const opt = HINT_MODE_OPTIONS.find((o) => o.id === modeId) ?? HINT_MODE_OPTIONS[0];\n return {\n content,\n mode: { id: opt.id, title: opt.title },\n };\n}\n\n//#endregion\n\n//#region ---- Tab definition ----\n\n/**\n * Property viewer tabs for editing a single questionnaire question row (metadata).\n */\nexport const QUESTIONNAIRE_QUESTION_EDIT_TABS: AXPPropertyViewerTab[] = [\n {\n name: 'general',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.tabs.general.title',\n groups: [\n {\n name: GROUP_IDENTITY.name,\n title: GROUP_IDENTITY.title,\n isCollapsed: false,\n props: IDENTITY_PROPS,\n },\n {\n name: GROUP_VALIDATION.name,\n title: GROUP_VALIDATION.title,\n isCollapsed: false,\n props: VALIDATION_PROPS,\n },\n {\n name: GROUP_VISIBILITY.name,\n title: GROUP_VISIBILITY.title,\n isCollapsed: false,\n props: VISIBILITY_PROPS,\n },\n {\n name: GROUP_HINT.name,\n title: GROUP_HINT.title,\n isCollapsed: false,\n props: HINT_PROPS,\n },\n {\n name: GROUP_COMMENT.name,\n title: GROUP_COMMENT.title,\n isCollapsed: false,\n props: COMMENT_PROPS,\n },\n ],\n },\n];\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXToastService } from '@acorex/components/toast';\nimport {\n AXPStandardSectionItemsBuilderComponent,\n type AXPBuilderBadge,\n type AXPStandardSectionItemsBuilderConfig,\n type AXPBuilderItem,\n type AXPBuilderItemViewModel,\n type AXPBuilderSection,\n type AXPBuilderValue,\n} from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXPEntity, AXPEntityProperty, AXPEntityTableColumn } from '@acorex/platform/common';\nimport {\n resolveMultiLanguageString,\n type AXPExpression,\n type AXPCategoryEntity,\n type AXPMultiLanguageString,\n} from '@acorex/platform/core';\nimport {\n AXPCategoryTreeDataSource,\n AXPDataSelectorService,\n type AXPPropertyViewerResult,\n AXPPropertyViewerService,\n} from '@acorex/platform/layout/components';\nimport { AXPEntityDefinitionRegistryService, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, untracked, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RootConfig } from '../../const';\nimport type { AXMAssessmentManagementQuestionBankItemEntityModel } from '../../entities/question-bank-item/question-bank-item.types';\nimport {\n diffQuestionCommentOverride,\n mergeQuestionCommentConfig,\n normalizeQuestionCommentConfig,\n type AXMAssessmentQuestionCommentConfig,\n} from '../../entities/question-bank-item/question-comment.types';\nimport {\n diffQuestionHintOverride,\n mergeQuestionHintForViewer,\n normalizeQuestionHintConfig,\n normalizeQuestionHintFromEntityRow,\n normalizeQuestionHintMode,\n parseQuestionHintPartialFromRecord,\n type AXMAssessmentQuestionHintConfig,\n type AXMAssessmentQuestionHintPartial,\n} from '../../entities/question-bank-item/question-hint.types';\nimport { stripHtmlToPlain } from '../questionnaire-viewer/utils/pre-post-content.utils';\nimport {\n QuestionnaireBuilderItem,\n QuestionnaireBuilderSection,\n QuestionnaireBuilderState,\n QuestionnaireBuilderValue,\n QuestionnaireDisplaySettings,\n allocateNextQuestionItemName,\n collectQuestionnaireItemNames,\n convertStateToValue,\n convertValueToState,\n createDefaultSection,\n getQuestionnaireItemRequiredBadgeMode,\n getQuestionnaireItemVisibilityBadgeMode,\n} from './questionnaire-builder.types';\nimport { AXFullScreenDirective } from '@acorex/cdk/full-screen';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer/questionnaire-viewer.service';\nimport type { PrePostConfig } from '../../entities/questionnaire/questionnaire.types';\nimport {\n createQuestionHintFormContext,\n QUESTIONNAIRE_QUESTION_EDIT_TABS,\n} from './questionnaire-question-edit.property-tabs';\n\n//#endregion\n\n//#region ---- Edit question dialog ----\n\ninterface QuestionnaireQuestionHintForm {\n content?: AXPMultiLanguageString;\n mode?: AXMAssessmentQuestionHintConfig['mode'] | string | { id?: string };\n}\n\ninterface QuestionnaireEditQuestionFormContext {\n /** Technical question name (maps to {@link QuestionnaireBuilderItem.name}). */\n name?: string;\n tags?: unknown;\n isRequired?: boolean | string;\n /** Default true when omitted (always visible). */\n isVisible?: boolean | AXPExpression;\n hint?: QuestionnaireQuestionHintForm;\n /** Effective comment policy (merged bank default + item overrides) for editing. */\n comment?: { enabled: boolean; required: boolean };\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Reusable Questionnaire Builder Component\n * Can be used both in dialog and inline contexts\n */\n@Component({\n selector: 'axm-questionnaire-builder',\n templateUrl: './questionnaire-builder.component.html',\n styleUrl: './questionnaire-builder.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownModule,\n AXFormModule,\n AXSwitchModule,\n AXLabelModule,\n AXTranslationModule,\n AXPStandardSectionItemsBuilderComponent,\n AXFullScreenDirective,\n ],\n})\nexport class AXMQuestionnaireBuilderComponent {\n //#region ---- Services & Dependencies ----\n\n protected dataSelectorService = inject(AXPDataSelectorService);\n private readonly entityService = inject(AXPEntityService);\n protected entityResolver = inject(AXPEntityDefinitionRegistryService);\n protected translationService = inject(AXTranslationService);\n protected propertyViewerService = inject(AXPPropertyViewerService);\n protected questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n protected toastService = inject(AXToastService);\n protected widgetRegistry = inject(AXPWidgetRegistryService);\n private readonly commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- Question bank entity data ----\n\n private questionBankData() {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionBankItem.name)\n .data<string, AXMAssessmentManagementQuestionBankItemEntityModel>();\n }\n\n private questionBankCategoryData() {\n return this.entityService\n .withEntity(RootConfig.module.name, `${RootConfig.entities.questionBankItem.name}Category`)\n .data<string, AXPCategoryEntity<string>>();\n }\n\n //#endregion\n\n //#region ---- Inputs & Outputs ----\n\n /**\n * Initial value (QuestionnaireBuilderValue)\n */\n value = input<QuestionnaireBuilderValue | null>(null);\n\n /**\n * Readonly mode\n */\n readonly = input<boolean>(false);\n\n /**\n * Pre/post config for preview (welcome, review, summary).\n * When provided, passed to the preview dialog.\n */\n prePostConfig = input<PrePostConfig | null>(null);\n\n /**\n * When false, the header (Add Section, Settings, Preview, Full Screen) is hidden.\n * Use when actions are provided by the host (e.g. page primary header actions).\n */\n showHeader = input<boolean>(true);\n\n /**\n * Display settings (view mode, progress bar, timer, etc.) when provided by the host (e.g. entity form).\n * Used for preview. When not provided, falls back to state/value or defaults.\n */\n displaySettingsInput = input<QuestionnaireDisplaySettings | null>(null);\n\n /**\n * Persisted questionnaire id (e.g. from entity form) — enables questionnaire calculations in preview.\n */\n questionnaireEntityId = input<string | undefined>(undefined);\n\n /**\n * Value change event\n */\n valueChange = output<QuestionnaireBuilderValue>();\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n // Designer state management - always start with at least one default section\n protected builderState = signal<QuestionnaireBuilderState>({\n sections: [createDefaultSection()],\n });\n\n // Selected item tracking\n protected selectedItemName = signal<string | null>(null);\n protected selectedSectionName = signal<string | null>(null);\n\n // Fullscreen directive reference\n protected readonly fullscreenDirective = viewChild<AXFullScreenDirective>('fullscreen');\n\n protected readonly standardRef = viewChild(AXPStandardSectionItemsBuilderComponent);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n // Track last emitted value to prevent circular updates\n let lastEmittedValue: QuestionnaireBuilderValue | null = null;\n\n // Sync value input to state (only when value changes externally)\n effect(() => {\n const val = this.value();\n if (val !== null && val !== undefined) {\n const currentState = untracked(() => this.builderState());\n const currentValue = convertStateToValue(currentState);\n\n const valStr = JSON.stringify(val);\n const currentStr = JSON.stringify(currentValue);\n const lastEmittedStr = lastEmittedValue ? JSON.stringify(lastEmittedValue) : null;\n\n if (valStr !== currentStr && valStr !== lastEmittedStr) {\n const newState = convertValueToState(val);\n untracked(() => {\n this.builderState.set(newState);\n this.loadQuestionDetailsForState(newState);\n });\n }\n } else if (val === null || val === undefined) {\n // If value is null/undefined, ensure we have at least one default section\n const currentState = untracked(() => this.builderState());\n if (currentState.sections.length === 0) {\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n untracked(() => {\n this.builderState.set({ sections: [defaultSection] });\n });\n }\n }\n });\n\n // Sync state changes to output\n effect(() => {\n const state = this.builderState();\n const currentValue = this.value();\n const value = convertStateToValue(state, currentValue || undefined);\n\n untracked(() => {\n lastEmittedValue = value;\n this.valueChange.emit(value);\n });\n });\n }\n\n /**\n * Load question details for all items in the state\n */\n private async loadQuestionDetailsForState(state: QuestionnaireBuilderState): Promise<void> {\n const questionIds = new Set<string>();\n\n // Collect all question bank item IDs\n state.sections.forEach((section) => {\n section.items.forEach((item) => {\n if (item.questionBankItemId && !item.question) {\n questionIds.add(item.questionBankItemId);\n }\n });\n });\n\n if (questionIds.size === 0) return;\n\n // Load all questions in parallel\n const questionPromises = Array.from(questionIds).map((id) =>\n this.questionBankData().byKey(id).catch(() => null),\n );\n const questions = await Promise.all(questionPromises);\n\n // Create a map of question ID to question data\n const questionMap = new Map<string, any>();\n questions.forEach((q) => {\n if (q) {\n questionMap.set(q.id, q);\n }\n });\n\n // Update state with question details\n this.builderState.update((currentState) => ({\n ...currentState,\n sections: currentState.sections.map((section) => ({\n ...section,\n items: section.items.map((item) => {\n if (item.question) return item; // Already has question data\n\n const questionData = questionMap.get(item.questionBankItemId);\n if (questionData) {\n return {\n ...item,\n question: {\n id: questionData.id,\n title: questionData.title,\n question: questionData.question,\n note: questionData.note,\n difficulty: questionData.difficulty,\n interface: questionData.interface,\n },\n };\n }\n\n return item;\n }),\n })),\n }));\n }\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n\n /** Value for {@link AXPStandardSectionItemsBuilderComponent} (sections only; drag/reorder handled there). */\n protected builderValue = computed<AXPBuilderValue>(() => ({\n sections: this.builderState().sections.map(\n (s) =>\n ({\n id: s.name,\n name: s.name,\n order: s.order,\n title: s.title,\n description: s.description,\n tags: s.tags,\n isVisible: s.isVisible,\n items: s.items.map(\n (it) =>\n ({\n id: it.name,\n name: it.name,\n order: it.order,\n questionBankItemId: it.questionBankItemId,\n isRequired: it.isRequired,\n isVisible: it.isVisible,\n interfaceOverride: it.interfaceOverride,\n hint: it.hint,\n comment: it.comment,\n tags: it.tags,\n question: it.question,\n isNewlyAdded: it.isNewlyAdded,\n }) as AXPBuilderItem,\n ),\n }) as AXPBuilderSection,\n ),\n }));\n\n protected isPreviewDisabled = computed(\n () =>\n this.builderState().sections.length === 0 ||\n this.builderState().sections.every((s) => s.items.length === 0),\n );\n\n protected readonly standardConfig = computed<AXPStandardSectionItemsBuilderConfig>(() => ({\n showSectionTechnicalName: true,\n minSectionCount: 1,\n texts: {\n addSection: '@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title',\n addItem:\n '@assessment-management:questionnaires.components.questionnaire-builder.actions.add-question.title',\n emptySectionsTitle:\n '@assessment-management:questionnaires.components.questionnaire-builder.empty-states.no-sections.title',\n emptySectionsDescription:\n '@assessment-management:questionnaires.components.questionnaire-builder.empty-states.no-sections.description',\n emptyItemsTitle:\n '@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.title',\n emptyItemsDescription:\n '@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.description',\n defaultSectionBadge:\n '@assessment-management:questionnaires.components.questionnaire-builder.default-section-badge',\n },\n mapItemToView: (item, section) => this.mapQuestionnaireItemToView(item, section),\n promptAddItems: (sid, v) => this.questionnairePromptAddItems(sid, v),\n promptEditItem: (item, sid, v) => this.questionnairePromptEditItem(item, sid, v),\n }));\n\n private mapQuestionnaireItemToView(item: AXPBuilderItem, _section: AXPBuilderSection): AXPBuilderItemViewModel {\n const q = item as unknown as QuestionnaireBuilderItem;\n const title = this.itemQuestionHeading(q);\n const note = this.itemQuestionNotePreview(q);\n const badges: AXPBuilderBadge[] = [];\n const req = q.isRequired;\n const rawReq = typeof req === 'boolean' || typeof req === 'string' ? req : undefined;\n const requiredMode = getQuestionnaireItemRequiredBadgeMode(rawReq);\n if (requiredMode === 'required') {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.required',\n variant: 'danger',\n });\n } else if (requiredMode === 'conditional') {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.conditional-required',\n variant: 'warning',\n });\n } else {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.optional',\n variant: 'success',\n });\n }\n\n const rawVis = q.isVisible;\n const visibilityMode = getQuestionnaireItemVisibilityBadgeMode(\n typeof rawVis === 'boolean' || typeof rawVis === 'string' ? rawVis : undefined,\n );\n if (visibilityMode === 'hidden') {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.visibility-hidden',\n variant: 'danger',\n });\n } else if (visibilityMode === 'conditional') {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.visibility-conditional',\n variant: 'warning',\n });\n } else {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.visibility-visible',\n variant: 'success',\n });\n }\n\n return {\n icon: this.getQuestionWidgetIcon(q),\n title,\n name: q.name,\n description: note || undefined,\n badges,\n };\n }\n\n /**\n * Standard section-items builder emits here. Uses direct `builderState.update` so the `valueChange`\n * effect runs in the same turn and hosts (e.g. questions page) can mark dirty.\n */\n protected onBuilderValueChange(next: AXPBuilderValue): void {\n this.builderState.update((state) => {\n const updatedState: QuestionnaireBuilderState = {\n ...state,\n sections: this.mergeSectionsFromStandardBuilder(\n next.sections as unknown as QuestionnaireBuilderSection[],\n state.sections,\n ),\n };\n if (updatedState.sections.length === 0) {\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n return { ...updatedState, sections: [defaultSection] };\n }\n return updatedState;\n });\n }\n\n private mergeSectionsFromStandardBuilder(\n incoming: QuestionnaireBuilderSection[],\n previous: QuestionnaireBuilderSection[],\n ): QuestionnaireBuilderSection[] {\n const prevByName = new Map(previous.map((s) => [s.name, s]));\n return incoming.map((sec) => {\n const axSec = sec as unknown as AXPBuilderSection;\n const incomingName = String(axSec['name'] ?? axSec['id'] ?? '').trim();\n const prevSec = prevByName.get(incomingName);\n if (!prevSec) {\n return this.normalizeIncomingSection(sec);\n }\n const prevItemByName = new Map(prevSec.items.map((i) => [i.name, i]));\n const merged = this.normalizeIncomingSection(sec);\n return {\n ...merged,\n isNewlyAdded: prevSec.isNewlyAdded ?? merged.isNewlyAdded,\n items: merged.items.map((it) => {\n const prev = prevItemByName.get(it.name);\n if (!prev) {\n return it;\n }\n return {\n ...prev,\n ...it,\n question: it.question ?? prev.question,\n };\n }),\n };\n });\n }\n\n /** Map platform section rows (id + name) into domain sections (name only). */\n private normalizeIncomingSection(sec: QuestionnaireBuilderSection): QuestionnaireBuilderSection {\n const ax = sec as unknown as AXPBuilderSection;\n const name = String(ax['name'] ?? ax['id'] ?? '').trim() || `section-${Date.now()}`;\n return {\n name,\n title: sec.title,\n description: sec.description,\n order: sec.order,\n tags: sec.tags,\n isVisible: sec.isVisible,\n isNewlyAdded: sec.isNewlyAdded,\n items: sec.items.map((it) => this.normalizeIncomingItem(it as unknown as AXPBuilderItem)),\n };\n }\n\n private normalizeIncomingItem(it: AXPBuilderItem): QuestionnaireBuilderItem {\n const name = String(it['name'] ?? it['id'] ?? '').trim() || `item-${Date.now()}`;\n const qbi = (it as unknown as QuestionnaireBuilderItem).questionBankItemId;\n return {\n name,\n questionBankItemId: qbi,\n order: it.order,\n isRequired: (it as unknown as QuestionnaireBuilderItem).isRequired,\n isVisible: (it as unknown as QuestionnaireBuilderItem).isVisible,\n interfaceOverride: (it as unknown as QuestionnaireBuilderItem).interfaceOverride,\n hint: (it as unknown as QuestionnaireBuilderItem).hint,\n comment: (it as unknown as QuestionnaireBuilderItem).comment,\n tags: (it as unknown as QuestionnaireBuilderItem).tags,\n question: (it as unknown as QuestionnaireBuilderItem).question,\n isNewlyAdded: (it as unknown as QuestionnaireBuilderItem).isNewlyAdded,\n };\n }\n\n /** Edit dialog context: default visible; normalize legacy string booleans; expressions pass through (property viewer handles binding). */\n private questionEditFormIsVisible(raw: boolean | string | undefined): boolean | string {\n if (raw === undefined || raw === null) {\n return true;\n }\n if (typeof raw === 'boolean') {\n return raw;\n }\n if (raw.trim() === '') {\n return true;\n }\n const t = raw.trim().toLowerCase();\n if (t === 'true' || t === '1') {\n return true;\n }\n if (t === 'false' || t === '0') {\n return false;\n }\n return raw.trim();\n }\n\n private questionEditFormIsRequired(item: Pick<QuestionnaireBuilderItem, 'isRequired'>): boolean | string {\n const r = item.isRequired;\n if (typeof r === 'string') {\n const t = r.trim();\n if (!t) {\n return false;\n }\n const tl = t.toLowerCase();\n if (tl === 'true' || tl === '1') {\n return true;\n }\n if (tl === 'false' || tl === '0') {\n return false;\n }\n return t;\n }\n return r ?? false;\n }\n\n /** Persist from property viewer: omit when default visible; `false` when hidden; trimmed non-empty string = expression. */\n private persistQuestionIsVisibleFromForm(value: unknown): boolean | string | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value === 'boolean') {\n return value ? undefined : false;\n }\n if (typeof value === 'string') {\n const t = value.trim();\n return t || undefined;\n }\n return undefined;\n }\n\n private persistQuestionIsRequiredFromForm(value: unknown): boolean | string {\n if (value === undefined || value === null) {\n return false;\n }\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const t = value.trim();\n if (!t) {\n return false;\n }\n return t;\n }\n return false;\n }\n\n private async questionnairePromptEditItem(\n item: AXPBuilderItem,\n sectionId: string,\n _value: AXPBuilderValue,\n ): Promise<AXPBuilderItem | null> {\n const qItem = item as unknown as QuestionnaireBuilderItem;\n const validationFailed = async (\n titleKey: string,\n descKey: string,\n fallTitle: string,\n fallDesc: string,\n ): Promise<never> => {\n const title = (await this.translationService.translateAsync(titleKey)) || fallTitle;\n const content = (await this.translationService.translateAsync(descKey)) || fallDesc;\n this.toastService.show({ color: 'warning', title, content });\n throw new Error('QuestionnaireEditQuestionValidation');\n };\n\n try {\n const bankRow = qItem.questionBankItemId\n ? await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionBankItem.name)\n .data<string, AXMAssessmentManagementQuestionBankItemEntityModel>()\n .byKey(qItem.questionBankItemId)\n .catch(() => null)\n : null;\n const bankComment = normalizeQuestionCommentConfig(bankRow?.comment);\n const mergedCommentForForm = mergeQuestionCommentConfig(bankComment, qItem.comment);\n const bankHint = normalizeQuestionHintFromEntityRow(bankRow ?? {});\n const mergedHintForForm = mergeQuestionHintForViewer(\n bankHint,\n parseQuestionHintPartialFromRecord(qItem as unknown as Record<string, unknown>),\n );\n\n const result = await this.propertyViewerService\n .create()\n .dialog((d) => {\n d.setTitle(\n '@assessment-management:questionnaires.components.questionnaire-builder.actions.edit-question.title',\n )\n .setSize('md')\n .setCloseButton(true)\n .setMode('advanced')\n .setTabs(QUESTIONNAIRE_QUESTION_EDIT_TABS)\n .setContext({\n name: qItem.name,\n tags: qItem.tags ?? [],\n isRequired: this.questionEditFormIsRequired(qItem),\n isVisible: this.questionEditFormIsVisible(qItem.isVisible),\n hint: createQuestionHintFormContext(mergedHintForForm),\n comment: mergedCommentForForm,\n })\n .onAction(async (ref) => {\n const context = ref.context() as QuestionnaireEditQuestionFormContext;\n const rawId = String(context.name ?? '').trim();\n if (!rawId) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-required.title',\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-required.description',\n 'Question ID required',\n 'Enter a unique question ID.',\n );\n }\n if (!this.isValidQuestionnaireItemName(rawId)) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-invalid.title',\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-invalid.description',\n 'Invalid question ID',\n 'Use letters, numbers, underscores, and hyphens (1–128 characters).',\n );\n }\n const isDuplicate = this.builderState().sections.some((s) =>\n s.items.some(\n (i) => (s.name !== sectionId || i.name !== qItem.name) && i.name === rawId,\n ),\n );\n if (isDuplicate) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-duplicate.title',\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-duplicate.description',\n 'Duplicate question ID',\n 'Another question already uses this ID.',\n );\n }\n });\n })\n .show();\n\n if (!result) {\n return null;\n }\n\n const formData = (result as AXPPropertyViewerResult).values as QuestionnaireEditQuestionFormContext;\n const rawIdOut = String(formData.name ?? '').trim();\n const tags = this.normalizeTagsFromForm(formData.tags);\n const hintPersist = this.persistQuestionHintFromForm(bankHint, formData.hint);\n const commentPersist = this.persistQuestionCommentFromForm(bankComment, formData.comment);\n const nextItem = {\n ...qItem,\n name: rawIdOut,\n id: rawIdOut,\n tags,\n isRequired: this.persistQuestionIsRequiredFromForm(formData.isRequired),\n isVisible: this.persistQuestionIsVisibleFromForm(formData.isVisible),\n } as QuestionnaireBuilderItem & AXPBuilderItem;\n if (hintPersist != null) {\n nextItem.hint = hintPersist;\n } else {\n delete nextItem.hint;\n }\n if (commentPersist != null) {\n nextItem.comment = commentPersist;\n } else {\n delete nextItem.comment;\n }\n return nextItem as AXPBuilderItem;\n } catch (error) {\n if (error instanceof Error && error.message === 'QuestionnaireEditQuestionValidation') {\n return null;\n }\n console.error('Error editing question:', error);\n return null;\n }\n }\n\n /**\n * Get current display settings from state or default\n */\n protected displaySettings = computed<QuestionnaireDisplaySettings>(() => {\n const fromInput = this.displaySettingsInput();\n if (fromInput != null) {\n return fromInput;\n }\n const state = this.builderState();\n if (state.displaySettings) {\n return state.displaySettings;\n }\n const currentValue = convertStateToValue(state, this.value() || undefined);\n return currentValue.displaySettings || {\n viewMode: 'single-page' as const,\n showProgressBar: true,\n showTimer: false,\n showQuestionNumbers: true,\n };\n });\n\n\n //#endregion\n\n //#region ---- Section Management ----\n\n /** Toolbar / page command: delegates to {@link AXPStandardSectionItemsBuilderComponent#addSection}. */\n async addSection(): Promise<void> {\n await this.standardRef()?.addSection();\n }\n\n //#endregion\n\n //#region ---- Item Management ----\n\n private async questionnairePromptAddItems(\n sectionId: string,\n value: AXPBuilderValue,\n ): Promise<AXPBuilderItem[] | null> {\n const all = value.sections as unknown as QuestionnaireBuilderSection[];\n const section = all.find((x) => x.name === sectionId);\n if (!section) return null;\n return (await this.selectQuestionsFromQuestionBankForSection(section, all)) as AXPBuilderItem[] | null;\n }\n\n /**\n * Open question bank selector and return new items (standard builder appends them).\n */\n private async selectQuestionsFromQuestionBankForSection(\n section: QuestionnaireBuilderSection,\n allSections: QuestionnaireBuilderSection[],\n ): Promise<QuestionnaireBuilderItem[] | null> {\n try {\n const dataSource = new AXDataSource({\n key: 'id',\n pageSize: 20,\n load: async (e) => {\n const questions = await this.questionBankData().query(e);\n return {\n items: questions.items,\n total: questions.total,\n };\n },\n });\n\n // Create category tree data source for filtering\n const categoryTreeDataSource: AXPCategoryTreeDataSource = {\n loadRootNodes: async () => {\n const result = await this.questionBankCategoryData().query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: { type: 'isEmpty' },\n value: true,\n },\n });\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.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n loadChildNodes: async (parentId: string) => {\n const result = await this.questionBankCategoryData().query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: { type: 'equal' },\n value: parentId,\n },\n });\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.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n searchNodes: async (searchValue: string) => {\n const result = await this.questionBankCategoryData().query({\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 });\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.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n };\n\n const entity: AXPEntity | null = await this.entityResolver.resolve(\n RootConfig.module.name,\n RootConfig.entities.questionBankItem.name,\n );\n if (!entity) {\n throw new Error('Entity not found: ' + RootConfig.entities.questionBankItem.name);\n }\n\n const columns =\n entity.columns\n ?.filter((column: AXPEntityTableColumn) =>\n entity!.properties.some((property: AXPEntityProperty) => property.name === column.name),\n )\n .map((column: AXPEntityTableColumn) => {\n const property = entity!.properties.find((prop: AXPEntityProperty) => prop.name === column.name);\n return {\n name: column.name,\n title: property?.title ?? '',\n visible: column.options?.visible !== false,\n widget: {\n type: column.showAs?.type ?? property?.schema?.interface?.type ?? 'text-editor',\n options: column.showAs?.options ?? property?.schema?.interface?.options ?? {},\n },\n };\n }) || [];\n\n // Translate titles\n const selectQuestionsTitle = await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-builder.select-questions'\n ) || 'Select Questions from Question Bank';\n\n const categoriesTitle = await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-builder.categories'\n ) || 'Categories';\n\n const titleLabel = await this.translationService.translateAsync('@general:terms.common.title') || 'Title';\n const noteLabel =\n (await this.translationService.translateAsync(\n '@assessment-management:question-bank.entities.question-bank-item.fields.note.title',\n )) || 'Note';\n\n // Open data selector with category filter\n const result = await this.dataSelectorService.openWithCategoryFilter(\n {\n title: selectQuestionsTitle,\n dataSource: dataSource,\n columns: columns,\n selectionMode: 'multiple',\n searchFields: [\n { name: 'title', title: titleLabel },\n { name: 'note', title: noteLabel },\n ],\n allowCreate: 'full',\n onCreate: (mode) => this.createQuestionBankItem(entity, mode),\n },\n {\n title: categoriesTitle,\n dataSource: categoryTreeDataSource,\n filterField: 'categoryIds',\n filterOperator: 'contains',\n width: '350px',\n },\n );\n\n if (result?.items && result.items.length > 0) {\n const questionPromises = result.items.map((item: any) =>\n this.questionBankData().byKey(item.id).catch(() => null),\n );\n const questions = await Promise.all(questionPromises);\n\n const used = collectQuestionnaireItemNames(allSections);\n const baseOrder = section.items.length;\n const newItems: QuestionnaireBuilderItem[] = result.items.map((item: any, index: number) => {\n const fullQuestion = questions[index];\n const qName = allocateNextQuestionItemName(used);\n used.add(qName);\n return {\n name: qName,\n questionBankItemId: item.id,\n order: baseOrder + index,\n isRequired: false,\n isVisible: undefined,\n isNewlyAdded: true,\n question: fullQuestion\n ? {\n id: fullQuestion.id,\n title: fullQuestion.title,\n question: fullQuestion.question,\n note: fullQuestion.note,\n difficulty: fullQuestion.difficulty,\n }\n : {\n id: item.id,\n title: item.title || 'Question',\n question: item.question,\n note: item.note,\n difficulty: item.difficulty,\n },\n };\n });\n return newItems;\n }\n return null;\n } catch (error) {\n console.error('Error loading questions:', error);\n return null;\n }\n }\n\n /**\n * Create a new question bank item via Entity:Create and return it for selection in the data selector.\n */\n private async createQuestionBankItem(\n entity: AXPEntity,\n _mode: 'full' | 'quick',\n ): Promise<Record<string, unknown> | null> {\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 item as Record<string, unknown>;\n }\n return null;\n }\n\n /**\n * Maps nested `hint` from the question property viewer to persisted questionnaire item `hint` partial (diff from bank).\n */\n private persistQuestionHintFromForm(\n bank: AXMAssessmentQuestionHintConfig,\n hint: QuestionnaireEditQuestionFormContext['hint'],\n ): AXMAssessmentQuestionHintPartial | undefined {\n if (!hint) {\n return undefined;\n }\n const modeRaw =\n hint.mode == null\n ? undefined\n : typeof hint.mode === 'string'\n ? hint.mode\n : (hint.mode as { id?: string }).id;\n const mode = normalizeQuestionHintMode(modeRaw) ?? 'off';\n const c = hint.content;\n let content: AXPMultiLanguageString | undefined;\n if (c == null) {\n content = undefined;\n } else if (typeof c === 'string') {\n const t = c.trim();\n content = t || undefined;\n } else if (typeof c === 'object') {\n content = c as AXPMultiLanguageString;\n }\n const edited = normalizeQuestionHintConfig({ mode, content });\n return diffQuestionHintOverride(bank, edited);\n }\n\n /**\n * Persists questionnaire item `comment` override: only fields that differ from the question bank default.\n */\n private persistQuestionCommentFromForm(\n bank: AXMAssessmentQuestionCommentConfig,\n form: QuestionnaireEditQuestionFormContext['comment'],\n ): Partial<AXMAssessmentQuestionCommentConfig> | undefined {\n if (!form) {\n return undefined;\n }\n const edited = normalizeQuestionCommentConfig(form);\n return diffQuestionCommentOverride(bank, edited);\n }\n\n /**\n * Normalize tag-editor output to trimmed unique strings (supports string[] or { title }[] from tag service).\n */\n private normalizeTagsFromForm(raw: unknown): string[] | undefined {\n if (raw == null || !Array.isArray(raw)) return undefined;\n const seen = new Set<string>();\n const out: string[] = [];\n for (const entry of raw) {\n let t = '';\n if (typeof entry === 'string') t = entry.trim();\n else if (entry && typeof entry === 'object' && 'title' in entry) {\n t = String((entry as { title: string }).title).trim();\n }\n if (!t) continue;\n const key = t.toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(t);\n }\n return out.length ? out : undefined;\n }\n\n /** Allowed characters for questionnaire item technical name (UUID-safe). */\n private isValidQuestionnaireItemName(name: string): boolean {\n return name.length >= 1 && name.length <= 128 && /^[a-zA-Z0-9_-]+$/.test(name);\n }\n\n /**\n * Plain heading for builder cards: prefer rich `question`, else admin list `title`.\n */\n protected itemQuestionHeading(item: QuestionnaireBuilderItem): string {\n const q = item.question;\n if (!q) {\n return 'Question';\n }\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n const raw = q.question;\n if (raw != null && raw !== '') {\n const html = typeof raw === 'string' ? raw : resolveMultiLanguageString(raw as Record<string, string>, locale);\n const plain = stripHtmlToPlain(html);\n if (plain.trim()) {\n return plain;\n }\n }\n const titleResolved = resolveMultiLanguageString(q.title, locale);\n return titleResolved.trim() || 'Question';\n }\n\n /** Plain preview line for optional note under the heading. */\n protected itemQuestionNotePreview(item: QuestionnaireBuilderItem): string {\n const raw = item.question?.note;\n if (raw == null || raw === '') {\n return '';\n }\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n const html = typeof raw === 'string' ? raw : resolveMultiLanguageString(raw as Record<string, string>, locale);\n return stripHtmlToPlain(html);\n }\n\n /**\n * Resolve icon based on widget type, with safe fallback.\n */\n protected getQuestionWidgetIcon(item: QuestionnaireBuilderItem): string {\n const fallbackIcon = 'fa-light fa-question-circle';\n const widgetType = item.interfaceOverride?.type ?? item.question?.interface?.type;\n\n if (!widgetType) {\n return fallbackIcon;\n }\n\n try {\n return this.widgetRegistry.resolve(widgetType).icon ?? fallbackIcon;\n } catch {\n return fallbackIcon;\n }\n }\n\n //#endregion\n\n //#region ---- Preview ----\n\n /**\n * Open preview dialog with questionnaire viewer\n */\n async handlePreview(): Promise<void> {\n if (this.isPreviewDisabled()) {\n return;\n }\n\n try {\n const currentValue = convertStateToValue(this.builderState(), this.value() || undefined);\n // Always use the current displaySettings from the computed property to ensure preview uses latest settings\n currentValue.displaySettings = this.displaySettings();\n const previewTitle = await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title'\n ) || 'Preview';\n\n const result = await this.questionnaireViewerService.open({\n title: previewTitle,\n structure: currentValue,\n prePostConfig: this.prePostConfig() ?? undefined,\n questionnaireId: this.questionnaireEntityId(),\n });\n\n // Handle result if needed (answers, submitted status)\n if (result) {\n console.log('Questionnaire preview result:', result);\n }\n } catch (error) {\n console.error('Error opening preview:', error);\n }\n }\n\n /**\n * Toggle fullscreen mode using the directive\n */\n async handleFullscreen(): Promise<void> {\n const fullscreen = this.fullscreenDirective();\n if (fullscreen) {\n await fullscreen.toggle();\n }\n }\n\n //#endregion\n\n //#endregion\n}\n\n//#endregion\n\n","<div class=\"axm-questionnaire-builder\" axFullscreen #fullscreen=\"axFullscreen\">\n @if (showHeader()) {\n <div class=\"__header\">\n <div class=\"__header-left\"></div>\n <div class=\"__header-right\">\n @if (!readonly()) {\n <ax-button class=\"ax-sm\" [text]=\"\n ('@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title'\n | translate\n | async) || 'Add Section'\n \" [color]=\"'primary'\" (onClick)=\"addSection()\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-layer-group\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-button class=\"ax-sm\" [title]=\"\n ('@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title'\n | translate\n | async) || 'Preview'\n \" [disabled]=\"isPreviewDisabled()\" (onClick)=\"handlePreview()\">\n <ax-icon icon=\"fa-light fa-eye\"></ax-icon>\n </ax-button>\n }\n <ax-button class=\"ax-sm\" [title]=\"\n ('@assessment-management:questionnaires.components.questionnaire-builder.actions.fullscreen.title'\n | translate\n | async) || 'Full Screen'\n \" (onClick)=\"handleFullscreen()\">\n <ax-icon icon=\"fa-light fa-expand\"></ax-icon>\n </ax-button>\n </div>\n </div>\n }\n\n <axp-standard-section-items-builder #standardRef class=\"ax-block ax-min-h-[200px]\" [value]=\"builderValue()\"\n [config]=\"standardConfig()\" [readonly]=\"readonly()\" (valueChange)=\"onBuilderValueChange($event)\" />\n</div>","import {\n AXPActionMenuItem,\n AXPBroadcastEventService,\n AXPExecuteCommand,\n AXPExecuteCommandResult,\n} from '@acorex/platform/core';\nimport { AXPEntityEventsKeys } from '@acorex/platform/layout/entity';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n} from '@acorex/platform/layout/views';\nimport type { AXPLayoutDetailsViewAction } from '@acorex/platform/layout/views';\nimport { AXPCommandService } from '@acorex/platform/runtime';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { RootConfig } from '../../../../const';\nimport type { PrePostConfig } from '../../../../entities/questionnaire/questionnaire.types';\nimport { toDisplaySettings, toPrePostConfig } from '../../../../entities/questionnaire/questionnaire.types';\nimport type { QuestionnaireBuilderValue } from '../../questionnaire-builder.types';\nimport { AXMQuestionnaireBuilderComponent } from '../../questionnaire-builder.component';\nimport {\n QUESTIONNAIRE_QUESTIONS_SAVE_COMMAND,\n SaveQuestionnaireQuestionsInput,\n} from './save-questionnaire-questions.command';\nimport { cloneDeep, isEqual, isNil } from 'lodash-es';\n\n/** Local command handled in execute(); reverts questions to rootContext (no AXPCommand). */\nconst QUESTIONNAIRE_QUESTIONS_DISCARD_COMMAND = 'Questionnaire:Questions:Discard';\nconst QUESTIONNAIRE_QUESTIONS_ADD_SECTION_COMMAND = 'Questionnaire:Questions:AddSection';\nconst QUESTIONNAIRE_QUESTIONS_PREVIEW_COMMAND = 'Questionnaire:Questions:Preview';\n\n//#region ---- Questionnaire Questions Page Component ----\n\n/**\n * Page component that renders the questions property using axm-questionnaire-builder.\n * Extends AXPPageLayoutBaseComponent to provide a Save button that persists questions via Questionnaire:Questions:Save.\n * Receives rootContext (entity data).\n */\n@Component({\n selector: 'axm-questionnaire-questions-page',\n standalone: true,\n imports: [AXMQuestionnaireBuilderComponent],\n template: `\n <axm-questionnaire-builder\n #builderRef\n [value]=\"questionsValue()\"\n [prePostConfig]=\"prePostConfig()\"\n [displaySettingsInput]=\"entityDisplaySettings()\"\n [questionnaireEntityId]=\"questionnaireEntityId()\"\n [showHeader]=\"false\"\n (valueChange)=\"onQuestionsChange($event)\">\n </axm-questionnaire-builder>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMQuestionnaireQuestionsPageComponent,\n },\n ],\n})\nexport class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Inputs ----\n\n rootContext = input<Record<string, unknown>>();\n /** Optional page config (e.g. field, layout) set by the page-component-renderer. */\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private commandService = inject(AXPCommandService);\n private eventService = inject(AXPBroadcastEventService);\n private hostPageLayout = inject(AXPPageLayoutBase, { optional: true, skipSelf: true });\n\n //#endregion\n\n //#region ---- View References ----\n\n builderRef = viewChild<AXMQuestionnaireBuilderComponent>('builderRef');\n\n //#endregion\n\n //#region ---- State Signals ----\n\n /** Latest context (includes edited questions). Used for Save when rootContext is not updated by the parent. */\n private localContext = signal<Record<string, unknown> | null>(null);\n\n /** When true, the next valueChange from the builder is ignored (avoids undoing discard due to stale emit). */\n private ignoreNextValueChange = signal(false);\n\n /** Stable pre/post config so we don't pass a new object every CD (avoids infinite loop). */\n private prePostConfigStable = signal<PrePostConfig | null>(null);\n /** Baseline snapshot of questions for dirty checks. */\n private baselineQuestions = signal<QuestionnaireBuilderValue | null | undefined>(null);\n /**\n * When true, the next builder emission should realign the baseline to the builder's canonical shape.\n * Root/API `questions` often differs from the normalized object emitted by the builder (defaults, ordering, derived fields), which would otherwise keep `isDirty` true on load and after discard/save.\n */\n private questionsBaselinePendingReconcile = signal(false);\n protected isDirty = signal(false);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n let previousRootId: unknown = undefined;\n effect(\n () => {\n const ctx = this.rootContext();\n const currentId = ctx != null && typeof ctx === 'object' ? ctx['id'] : undefined;\n if (currentId !== previousRootId) {\n previousRootId = currentId;\n this.localContext.set(null);\n const rootQuestions = ctx?.['questions'] as QuestionnaireBuilderValue | null | undefined;\n this.baselineQuestions.set(this.cloneQuestions(rootQuestions));\n this.isDirty.set(false);\n this.questionsBaselinePendingReconcile.set(true);\n }\n }\n );\n let lastPrePostKey = '';\n effect(\n () => {\n const ctx = this.rootContext();\n const next = toPrePostConfig(ctx ?? undefined);\n const key = next ? JSON.stringify(next) : '';\n if (key !== lastPrePostKey) {\n lastPrePostKey = key;\n this.prePostConfigStable.set(next);\n }\n }\n );\n }\n\n //#endregion\n\n //#region ---- Computed State ----\n\n /** Current context: prefer local updates so edits are preserved. */\n private context = computed(() => {\n const local = this.localContext();\n if (local != null) return local;\n return this.rootContext() ?? {};\n });\n\n /** Questions value passed to the builder (from context). */\n questionsValue = computed<QuestionnaireBuilderValue | null>(() => {\n const ctx = this.context();\n const q = ctx['questions'];\n return (q != null && typeof q === 'object' ? q : null) as QuestionnaireBuilderValue | null;\n });\n\n /** Pre/post config for preview; stable reference to avoid infinite change detection. */\n prePostConfig = computed(() => this.prePostConfigStable());\n\n /** Display settings from entity (for builder preview). */\n entityDisplaySettings = computed(() => toDisplaySettings((this.rootContext() ?? undefined) as Parameters<typeof toDisplaySettings>[0]) ?? null);\n\n /** Questionnaire entity id for preview calculation evaluation. */\n questionnaireEntityId = computed((): string | undefined => {\n const id = this.rootContext()?.['id'];\n return typeof id === 'string' && id.length > 0 ? id : undefined;\n });\n\n //#endregion\n\n //#region ---- Page Actions ----\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const addSectionTitle =\n (await this.translateService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title'\n )) || 'Add Section';\n const previewTitle =\n (await this.translateService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title'\n )) || 'Preview';\n const discardTitle =\n (await this.translateService.translateAsync('@general:actions.discard.title')) || 'Discard';\n const saveTitle =\n (await this.translateService.translateAsync('@general:actions.save.title')) || 'Save';\n\n const addSectionAction: AXPLayoutDetailsViewAction = {\n title: addSectionTitle,\n icon: 'fa-light fa-layer-group',\n zone: 'header',\n priority: 'primary',\n color: 'primary',\n command: {\n name: QUESTIONNAIRE_QUESTIONS_ADD_SECTION_COMMAND,\n options: {},\n },\n };\n const previewAction: AXPLayoutDetailsViewAction = {\n title: previewTitle,\n icon: 'fa-light fa-eye',\n zone: 'header',\n priority: 'primary',\n color: 'default',\n command: {\n name: QUESTIONNAIRE_QUESTIONS_PREVIEW_COMMAND,\n options: {},\n },\n };\n const discardAction: AXPLayoutDetailsViewAction = {\n title: discardTitle,\n icon: 'fa-light fa-rotate-left',\n zone: 'footer',\n priority: 'secondary',\n color: 'default',\n visible: this.isDirty(),\n command: {\n name: QUESTIONNAIRE_QUESTIONS_DISCARD_COMMAND,\n options: {},\n },\n };\n const saveAction: AXPLayoutDetailsViewAction = {\n title: saveTitle,\n icon: 'fa-light fa-floppy-disk',\n zone: 'footer',\n priority: 'primary',\n color: 'primary',\n visible: this.isDirty(),\n command: {\n name: QUESTIONNAIRE_QUESTIONS_SAVE_COMMAND,\n options: {},\n },\n };\n return [addSectionAction, previewAction, discardAction, saveAction];\n }\n\n //#endregion\n\n //#region ---- Command Handling ----\n\n override execute(command: AXPExecuteCommand): void | Promise<void> {\n if (command.name === QUESTIONNAIRE_QUESTIONS_DISCARD_COMMAND) {\n this.ignoreNextValueChange.set(true);\n this.localContext.set(null);\n this.isDirty.set(false);\n this.questionsBaselinePendingReconcile.set(true);\n this.recompute();\n return;\n }\n if (command.name === QUESTIONNAIRE_QUESTIONS_ADD_SECTION_COMMAND) {\n void this.builderRef()?.addSection();\n return;\n }\n if (command.name === QUESTIONNAIRE_QUESTIONS_PREVIEW_COMMAND) {\n this.builderRef()?.handlePreview();\n return;\n }\n if (command.name !== QUESTIONNAIRE_QUESTIONS_SAVE_COMMAND) {\n return;\n }\n\n // Return result for delegateExecute; cast needed to satisfy base signature\n return this.handleSaveExecute() as unknown as Promise<void>;\n }\n\n private async handleSaveExecute(): Promise<AXPExecuteCommandResult> {\n const ctx = this.localContext() ?? this.rootContext() ?? {};\n const id = typeof ctx['id'] === 'string' ? ctx['id'] : undefined;\n const questions = ctx['questions'] as QuestionnaireBuilderValue | undefined;\n\n if (!id) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n const input: SaveQuestionnaireQuestionsInput = {\n id,\n questions: questions ?? { sections: [] },\n };\n\n const result = await this.commandService.execute<SaveQuestionnaireQuestionsInput, unknown>(\n QUESTIONNAIRE_QUESTIONS_SAVE_COMMAND,\n input\n );\n\n const execResult = (result ?? { success: false }) as AXPExecuteCommandResult;\n\n if (execResult.success) {\n const savedQuestions = questions ?? { sections: [] };\n this.baselineQuestions.set(this.cloneQuestions(savedQuestions));\n this.localContext.set(null);\n this.isDirty.set(false);\n this.questionsBaselinePendingReconcile.set(true);\n this.recompute();\n this.eventService.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, {\n name: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`,\n });\n // Success toast is shown by details-view when execute() returns success\n }\n\n return execResult;\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n /** Updates local context when the builder emits a new questions value. Skip if unchanged to avoid CD loop. */\n onQuestionsChange(value: QuestionnaireBuilderValue): void {\n if (this.ignoreNextValueChange()) {\n this.ignoreNextValueChange.set(false);\n return;\n }\n const current = this.questionsValue();\n if (this.areQuestionsEqual(current ?? undefined, value ?? undefined)) {\n if (this.questionsBaselinePendingReconcile()) {\n const aligned = current ?? value;\n this.baselineQuestions.set(this.cloneQuestions(aligned ?? undefined));\n this.questionsBaselinePendingReconcile.set(false);\n this.isDirty.set(false);\n }\n return;\n }\n const base = this.localContext() ?? this.rootContext() ?? {};\n\n if (this.questionsBaselinePendingReconcile() && this.localContext() == null) {\n this.baselineQuestions.set(this.cloneQuestions(value));\n this.isDirty.set(false);\n this.questionsBaselinePendingReconcile.set(false);\n this.localContext.set({ ...base, questions: value });\n this.recompute();\n return;\n }\n\n this.localContext.set({ ...base, questions: value });\n const baseline = this.baselineQuestions();\n const dirty = !this.areQuestionsEqual(baseline, value);\n this.isDirty.set(dirty);\n this.recompute();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n\n private areQuestionsEqual(a: QuestionnaireBuilderValue | null | undefined, b: QuestionnaireBuilderValue | null | undefined): boolean {\n return isEqual(a, b);\n }\n\n private cloneQuestions(\n value: QuestionnaireBuilderValue | null | undefined,\n ): QuestionnaireBuilderValue | null | undefined {\n if (isNil(value)) return value;\n return cloneDeep(value);\n }\n\n protected override recompute(): void {\n super.recompute();\n const maybeLayout = this.hostPageLayout as unknown as { recompute?: () => void };\n maybeLayout.recompute?.();\n }\n\n //#endregion\n}\n\n//#endregion\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex/platform/layout/components';\nimport { Injectable } from '@angular/core';\nimport { QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY } from './QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY';\n\n//#region ---- Questionnaire Questions Page Component Provider ----\n\n@Injectable()\nexport class AXMQuestionnaireQuestionsPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./questionnaire-questions-page.component').then(\n (m) => m.AXMQuestionnaireQuestionsPageComponent\n ),\n },\n ];\n }\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { AXTranslationService } from '@acorex/core/translation';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
5
  import { AXPEntityService } from '@acorex/platform/layout/entity';
6
- import { A as AXMQuestionnaireViewerService, R as RootConfig } from './acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs';
6
+ import { A as AXMQuestionnaireViewerService, R as RootConfig } from './acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs';
7
7
 
8
8
  //#region ---- Imports ----
9
9
  //#endregion
@@ -115,4 +115,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
115
115
  }] });
116
116
 
117
117
  export { PreviewQuestionCommand };
118
- //# sourceMappingURL=acorex-modules-assessment-management-preview-question.command-BMoPn_op.mjs.map
118
+ //# sourceMappingURL=acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-assessment-management-preview-question.command-BMoPn_op.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/commands/preview-question.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPExecuteCommandResult, resolveMultiLanguageString } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { QuestionnaireBuilderValue } from '../../questionnaire-builder/questionnaire-builder.types';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\nimport type { AXMAssessmentManagementQuestionBankItemEntityModel } from '../../../entities/question-bank-item/question-bank-item.types';\nimport { RootConfig } from '../../../const';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * Input for PreviewQuestion command.\n * Pass id to load the question bank item (title and structure come from the item).\n * Or pass pre-built structure (e.g. from builder) with optional title.\n */\nexport interface PreviewQuestionCommandInput {\n /** Question bank item id. */\n id?: string;\n /** Pre-built structure; when set, id is not required. */\n structure?: QuestionnaireBuilderValue;\n /** Dialog title when using pre-built structure. */\n title?: string;\n}\n\n//#endregion\n\n//#region ---- Preview Question Command ----\n\n/**\n * Command that opens a preview of a single question in a dialog.\n * Used from the questionnaire builder per-question primary action.\n */\n@Injectable()\nexport class PreviewQuestionCommand implements AXPCommand<PreviewQuestionCommandInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n private resolveId(input: PreviewQuestionCommandInput & { __context__?: { data?: Record<string, unknown>; options?: Record<string, unknown> } }): string | undefined {\n const record = input as Record<string, unknown>;\n const ctxData = input.__context__?.data as Record<string, unknown> | undefined;\n const ctxOptions = input.__context__?.options as Record<string, unknown> | undefined;\n const asString = (v: unknown): string | undefined =>\n typeof v === 'string' && v.length > 0 ? v : undefined;\n return asString(input.id)\n ?? asString(record['questionBankItemId'])\n ?? asString(ctxOptions?.['questionBankItemId'])\n ?? asString(ctxData?.['id'])\n ?? asString(record['id']);\n }\n\n async execute(input: PreviewQuestionCommandInput & { __context__?: { data?: Record<string, unknown>; options?: Record<string, unknown> } }): Promise<AXPExecuteCommandResult<void>> {\n try {\n const id = this.resolveId(input);\n let structure: QuestionnaireBuilderValue | undefined = input.structure;\n let title = input.title;\n\n if (id) {\n const item = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionBankItem.name)\n .data<string, AXMAssessmentManagementQuestionBankItemEntityModel>()\n .byKey(id);\n if (!item) {\n return {\n success: false,\n message: { text: 'Question not found' },\n };\n }\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n const resolvedListTitle = resolveMultiLanguageString(item.title, locale);\n structure = {\n sections: [\n {\n name: `preview-section-${item.id}`,\n title: resolvedListTitle || 'Question',\n description: undefined,\n order: 0,\n items: [\n {\n name: String(item.id),\n questionBankItemId: item.id,\n order: 0,\n isRequired: false,\n interfaceOverride: item.interface,\n } as QuestionnaireBuilderValue['sections'][0]['items'][0],\n ],\n },\n ],\n displaySettings: {\n viewMode: 'single-page',\n showProgressBar: false,\n showQuestionNumbers: false,\n },\n };\n title = resolvedListTitle || undefined;\n }\n\n if (!structure?.sections?.length) {\n return {\n success: false,\n message: { text: 'No question structure to preview' },\n };\n }\n\n const totalQuestions =\n structure.sections?.reduce((s: number, sec: { items?: unknown[] }) => s + (sec.items?.length ?? 0), 0) ?? 0;\n if (totalQuestions === 0) {\n return {\n success: false,\n message: { text: 'No question to preview' },\n };\n }\n\n const previewTitleKey =\n '@assessment-management:question-bank.entities.question-bank-item.actions.preview.title';\n const defaultTitle = (await this.translationService.translateAsync(previewTitleKey)) || 'Preview';\n const dialogTitle = title?.trim() || defaultTitle;\n\n await this.questionnaireViewerService.open({\n title: dialogTitle,\n structure,\n config: {},\n });\n\n return { success: true, message: { text: '' } };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n return {\n success: false,\n message: { text: `Error previewing question: ${message}` },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/commands/preview-question.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPExecuteCommandResult, resolveMultiLanguageString } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { QuestionnaireBuilderValue } from '../../questionnaire-builder/questionnaire-builder.types';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\nimport type { AXMAssessmentManagementQuestionBankItemEntityModel } from '../../../entities/question-bank-item/question-bank-item.types';\nimport { RootConfig } from '../../../const';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * Input for PreviewQuestion command.\n * Pass id to load the question bank item (title and structure come from the item).\n * Or pass pre-built structure (e.g. from builder) with optional title.\n */\nexport interface PreviewQuestionCommandInput {\n /** Question bank item id. */\n id?: string;\n /** Pre-built structure; when set, id is not required. */\n structure?: QuestionnaireBuilderValue;\n /** Dialog title when using pre-built structure. */\n title?: string;\n}\n\n//#endregion\n\n//#region ---- Preview Question Command ----\n\n/**\n * Command that opens a preview of a single question in a dialog.\n * Used from the questionnaire builder per-question primary action.\n */\n@Injectable()\nexport class PreviewQuestionCommand implements AXPCommand<PreviewQuestionCommandInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n private resolveId(input: PreviewQuestionCommandInput & { __context__?: { data?: Record<string, unknown>; options?: Record<string, unknown> } }): string | undefined {\n const record = input as Record<string, unknown>;\n const ctxData = input.__context__?.data as Record<string, unknown> | undefined;\n const ctxOptions = input.__context__?.options as Record<string, unknown> | undefined;\n const asString = (v: unknown): string | undefined =>\n typeof v === 'string' && v.length > 0 ? v : undefined;\n return asString(input.id)\n ?? asString(record['questionBankItemId'])\n ?? asString(ctxOptions?.['questionBankItemId'])\n ?? asString(ctxData?.['id'])\n ?? asString(record['id']);\n }\n\n async execute(input: PreviewQuestionCommandInput & { __context__?: { data?: Record<string, unknown>; options?: Record<string, unknown> } }): Promise<AXPExecuteCommandResult<void>> {\n try {\n const id = this.resolveId(input);\n let structure: QuestionnaireBuilderValue | undefined = input.structure;\n let title = input.title;\n\n if (id) {\n const item = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionBankItem.name)\n .data<string, AXMAssessmentManagementQuestionBankItemEntityModel>()\n .byKey(id);\n if (!item) {\n return {\n success: false,\n message: { text: 'Question not found' },\n };\n }\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n const resolvedListTitle = resolveMultiLanguageString(item.title, locale);\n structure = {\n sections: [\n {\n name: `preview-section-${item.id}`,\n title: resolvedListTitle || 'Question',\n description: undefined,\n order: 0,\n items: [\n {\n name: String(item.id),\n questionBankItemId: item.id,\n order: 0,\n isRequired: false,\n interfaceOverride: item.interface,\n } as QuestionnaireBuilderValue['sections'][0]['items'][0],\n ],\n },\n ],\n displaySettings: {\n viewMode: 'single-page',\n showProgressBar: false,\n showQuestionNumbers: false,\n },\n };\n title = resolvedListTitle || undefined;\n }\n\n if (!structure?.sections?.length) {\n return {\n success: false,\n message: { text: 'No question structure to preview' },\n };\n }\n\n const totalQuestions =\n structure.sections?.reduce((s: number, sec: { items?: unknown[] }) => s + (sec.items?.length ?? 0), 0) ?? 0;\n if (totalQuestions === 0) {\n return {\n success: false,\n message: { text: 'No question to preview' },\n };\n }\n\n const previewTitleKey =\n '@assessment-management:question-bank.entities.question-bank-item.actions.preview.title';\n const defaultTitle = (await this.translationService.translateAsync(previewTitleKey)) || 'Preview';\n const dialogTitle = title?.trim() || defaultTitle;\n\n await this.questionnaireViewerService.open({\n title: dialogTitle,\n structure,\n config: {},\n });\n\n return { success: true, message: { text: '' } };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n return {\n success: false,\n message: { text: `Error previewing question: ${message}` },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { AXTranslationService } from '@acorex/core/translation';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
5
  import { AXPEntityService } from '@acorex/platform/layout/entity';
6
- import { A as AXMQuestionnaireViewerService, R as RootConfig, q as toPrePostConfig, t as toDisplaySettings } from './acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs';
6
+ import { A as AXMQuestionnaireViewerService, R as RootConfig, q as toPrePostConfig, t as toDisplaySettings } from './acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs';
7
7
 
8
8
  //#endregion
9
9
  //#region ---- Preview Questionnaire Command ----
@@ -144,4 +144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
144
144
  }] });
145
145
 
146
146
  export { PreviewQuestionnaireCommand };
147
- //# sourceMappingURL=acorex-modules-assessment-management-preview-questionnaire.command-BI7JJIbZ.mjs.map
147
+ //# sourceMappingURL=acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-assessment-management-preview-questionnaire.command-BI7JJIbZ.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/commands/preview-questionnaire.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMQuestionnaireViewerService } from '../../../features/questionnaire-viewer/questionnaire-viewer.service';\nimport {\n type AXMAssessmentManagementQuestionnaireEntityModel,\n toDisplaySettings,\n toPrePostConfig,\n} from '../../../entities/questionnaire/questionnaire.types';\nimport { RootConfig } from '../../../const';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * Input for PreviewQuestionnaire command.\n */\nexport interface PreviewQuestionnaireCommandInput {\n /**\n * Questionnaire ID to preview.\n */\n questionnaireId: string;\n\n /**\n * Questionnaire title (for display).\n */\n questionnaireTitle?: string;\n}\n\n/** Entity list passes evaluated action options on `__context__.options` (see entity-master-list view model). */\ntype PreviewQuestionnaireCommandInvocation = PreviewQuestionnaireCommandInput & {\n __context__?: {\n options?: Partial<PreviewQuestionnaireCommandInput>;\n data?: Record<string, unknown>;\n };\n};\n\n//#endregion\n\n//#region ---- Preview Questionnaire Command ----\n\n/**\n * Command that opens a preview of a questionnaire in a dialog.\n */\n@Injectable()\nexport class PreviewQuestionnaireCommand implements AXPCommand<PreviewQuestionnaireCommandInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n /**\n * Resolves questionnaire id/title from root input or from entity action payload (`__context__.options` / row `data`).\n */\n private resolvePayload(input: PreviewQuestionnaireCommandInvocation): PreviewQuestionnaireCommandInput | null {\n const ctxOpts = input.__context__?.options;\n const ctxData = input.__context__?.data;\n\n const asNonEmptyString = (v: unknown): string | undefined =>\n typeof v === 'string' && v.length > 0 ? v : undefined;\n\n const asDisplayTitle = (v: unknown): string | undefined => {\n const s = asNonEmptyString(v);\n if (s) return s;\n if (v && typeof v === 'object') {\n const o = v as Record<string, unknown>;\n const fromTitle = o['title'];\n if (typeof fromTitle === 'string' && fromTitle.trim()) return fromTitle.trim();\n const fromName = o['name'];\n if (typeof fromName === 'string' && fromName.trim()) return fromName.trim();\n }\n return undefined;\n };\n\n const questionnaireId =\n asNonEmptyString(input.questionnaireId) ??\n asNonEmptyString(ctxOpts?.questionnaireId) ??\n (ctxData?.['id'] != null ? String(ctxData['id']) : undefined);\n\n if (!questionnaireId) {\n return null;\n }\n\n const questionnaireTitle =\n asDisplayTitle(input.questionnaireTitle) ??\n asDisplayTitle(ctxOpts?.questionnaireTitle) ??\n asDisplayTitle(ctxData?.['title']) ??\n asDisplayTitle(ctxData?.['name']);\n\n return { questionnaireId, questionnaireTitle };\n }\n\n async execute(input: PreviewQuestionnaireCommandInvocation): Promise<AXPExecuteCommandResult<void>> {\n try {\n const resolved = this.resolvePayload(input);\n if (!resolved) {\n return {\n success: false,\n message: {\n text: 'Questionnaire id is missing (could not resolve from command context).',\n },\n };\n }\n\n const { questionnaireId, questionnaireTitle } = resolved;\n\n // Get questionnaire data\n const questionnaire = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(questionnaireId);\n\n if (!questionnaire) {\n return {\n success: false,\n message: {\n text: `Questionnaire with ID ${questionnaireId} not found`,\n },\n };\n }\n\n // Check if questionnaire has questions\n if (!questionnaire.questions || !questionnaire.questions.sections || questionnaire.questions.sections.length === 0) {\n return {\n success: false,\n message: {\n text: 'Questionnaire has no questions to preview',\n },\n };\n }\n\n // Get preview title\n const previewTitleKey = '@assessment-management:questionnaires.entities.questionnaire.actions.preview.title';\n const previewTitleBase = await this.translationService.translateAsync(previewTitleKey) || 'Preview';\n const previewTitle = questionnaireTitle\n ? `${previewTitleBase}: ${questionnaireTitle}`\n : previewTitleBase;\n\n const cfg = toPrePostConfig(questionnaire);\n const questions = questionnaire.questions;\n const structure = {\n sections: questions?.sections ?? [],\n displaySettings: toDisplaySettings(questionnaire) ?? undefined,\n };\n const result = await this.questionnaireViewerService.open({\n title: previewTitle,\n structure,\n prePostConfig: cfg,\n config: {},\n questionnaireId,\n submitHandler: async (answers: Record<string, any>) => {\n const summary = await this.questionnaireViewerService.buildSummaryPlaceholderValues(structure, answers, {\n questionnaireId,\n });\n const title = await this.translationService.translateAsync('@general:messages.form.saved.success.title');\n const content = await this.translationService.translateAsync('@general:messages.form.saved.success.description');\n return summary;\n },\n });\n\n if (result && result.submitted && result.answers) {\n return {\n success: true,\n message: {\n text: `Submitted Successfully`,\n },\n };\n }\n return {\n success: false,\n };\n } catch (error: any) {\n return {\n success: false,\n message: {\n text: `Error previewing questionnaire: ${error.message || 'Unknown error'}`,\n },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/commands/preview-questionnaire.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMQuestionnaireViewerService } from '../../../features/questionnaire-viewer/questionnaire-viewer.service';\nimport {\n type AXMAssessmentManagementQuestionnaireEntityModel,\n toDisplaySettings,\n toPrePostConfig,\n} from '../../../entities/questionnaire/questionnaire.types';\nimport { RootConfig } from '../../../const';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * Input for PreviewQuestionnaire command.\n */\nexport interface PreviewQuestionnaireCommandInput {\n /**\n * Questionnaire ID to preview.\n */\n questionnaireId: string;\n\n /**\n * Questionnaire title (for display).\n */\n questionnaireTitle?: string;\n}\n\n/** Entity list passes evaluated action options on `__context__.options` (see entity-master-list view model). */\ntype PreviewQuestionnaireCommandInvocation = PreviewQuestionnaireCommandInput & {\n __context__?: {\n options?: Partial<PreviewQuestionnaireCommandInput>;\n data?: Record<string, unknown>;\n };\n};\n\n//#endregion\n\n//#region ---- Preview Questionnaire Command ----\n\n/**\n * Command that opens a preview of a questionnaire in a dialog.\n */\n@Injectable()\nexport class PreviewQuestionnaireCommand implements AXPCommand<PreviewQuestionnaireCommandInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n /**\n * Resolves questionnaire id/title from root input or from entity action payload (`__context__.options` / row `data`).\n */\n private resolvePayload(input: PreviewQuestionnaireCommandInvocation): PreviewQuestionnaireCommandInput | null {\n const ctxOpts = input.__context__?.options;\n const ctxData = input.__context__?.data;\n\n const asNonEmptyString = (v: unknown): string | undefined =>\n typeof v === 'string' && v.length > 0 ? v : undefined;\n\n const asDisplayTitle = (v: unknown): string | undefined => {\n const s = asNonEmptyString(v);\n if (s) return s;\n if (v && typeof v === 'object') {\n const o = v as Record<string, unknown>;\n const fromTitle = o['title'];\n if (typeof fromTitle === 'string' && fromTitle.trim()) return fromTitle.trim();\n const fromName = o['name'];\n if (typeof fromName === 'string' && fromName.trim()) return fromName.trim();\n }\n return undefined;\n };\n\n const questionnaireId =\n asNonEmptyString(input.questionnaireId) ??\n asNonEmptyString(ctxOpts?.questionnaireId) ??\n (ctxData?.['id'] != null ? String(ctxData['id']) : undefined);\n\n if (!questionnaireId) {\n return null;\n }\n\n const questionnaireTitle =\n asDisplayTitle(input.questionnaireTitle) ??\n asDisplayTitle(ctxOpts?.questionnaireTitle) ??\n asDisplayTitle(ctxData?.['title']) ??\n asDisplayTitle(ctxData?.['name']);\n\n return { questionnaireId, questionnaireTitle };\n }\n\n async execute(input: PreviewQuestionnaireCommandInvocation): Promise<AXPExecuteCommandResult<void>> {\n try {\n const resolved = this.resolvePayload(input);\n if (!resolved) {\n return {\n success: false,\n message: {\n text: 'Questionnaire id is missing (could not resolve from command context).',\n },\n };\n }\n\n const { questionnaireId, questionnaireTitle } = resolved;\n\n // Get questionnaire data\n const questionnaire = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(questionnaireId);\n\n if (!questionnaire) {\n return {\n success: false,\n message: {\n text: `Questionnaire with ID ${questionnaireId} not found`,\n },\n };\n }\n\n // Check if questionnaire has questions\n if (!questionnaire.questions || !questionnaire.questions.sections || questionnaire.questions.sections.length === 0) {\n return {\n success: false,\n message: {\n text: 'Questionnaire has no questions to preview',\n },\n };\n }\n\n // Get preview title\n const previewTitleKey = '@assessment-management:questionnaires.entities.questionnaire.actions.preview.title';\n const previewTitleBase = await this.translationService.translateAsync(previewTitleKey) || 'Preview';\n const previewTitle = questionnaireTitle\n ? `${previewTitleBase}: ${questionnaireTitle}`\n : previewTitleBase;\n\n const cfg = toPrePostConfig(questionnaire);\n const questions = questionnaire.questions;\n const structure = {\n sections: questions?.sections ?? [],\n displaySettings: toDisplaySettings(questionnaire) ?? undefined,\n };\n const result = await this.questionnaireViewerService.open({\n title: previewTitle,\n structure,\n prePostConfig: cfg,\n config: {},\n questionnaireId,\n submitHandler: async (answers: Record<string, any>) => {\n const summary = await this.questionnaireViewerService.buildSummaryPlaceholderValues(structure, answers, {\n questionnaireId,\n });\n const title = await this.translationService.translateAsync('@general:messages.form.saved.success.title');\n const content = await this.translationService.translateAsync('@general:messages.form.saved.success.description');\n return summary;\n },\n });\n\n if (result && result.submitted && result.answers) {\n return {\n success: true,\n message: {\n text: `Submitted Successfully`,\n },\n };\n }\n return {\n success: false,\n };\n } catch (error: any) {\n return {\n success: false,\n message: {\n text: `Error previewing questionnaire: ${error.message || 'Unknown error'}`,\n },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n\n"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import { AsyncPipe } from '@angular/common';
10
10
  import * as i0 from '@angular/core';
11
11
  import { inject, computed, signal, model, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
12
12
  import { isEqual } from 'lodash-es';
13
- import { w as stripQuestionBankInterfaceMetadata, x as resolveWidgetNodeFromMetaDataDefinitionInterface } from './acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs';
13
+ import { w as stripQuestionBankInterfaceMetadata, x as resolveWidgetNodeFromMetaDataDefinitionInterface } from './acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs';
14
14
  import * as i2 from '@acorex/components/decorators';
15
15
  import { AXDecoratorModule } from '@acorex/components/decorators';
16
16
 
@@ -427,4 +427,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
427
427
  }], propDecorators: { definitionIdModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "definitionIdModel", required: false }] }, { type: i0.Output, args: ["definitionIdModelChange"] }], widgetConfigModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "widgetConfigModel", required: false }] }, { type: i0.Output, args: ["widgetConfigModelChange"] }] } });
428
428
 
429
429
  export { AXMQuestionBankInterfaceEditorWidgetEditComponent };
430
- //# sourceMappingURL=acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BfWuSVG9.mjs.map
430
+ //# sourceMappingURL=acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BfWuSVG9.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/widgets/question-bank-interface-editor-widget/question-bank-interface-editor-widget-edit.component.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {\n AXMetaDataConfiguratorComponent,\n AXMMetaDataDefinitionService,\n type AXMMetaDataDefinitionEntityModel,\n} from '@acorex/modules/data-management';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetFieldConfiguratorComponent } from '@acorex/platform/layout/components';\nimport { AXPValueWidgetComponent, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n model,\n signal,\n untracked,\n} from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\nimport {\n resolveWidgetNodeFromMetaDataDefinitionInterface,\n stripQuestionBankInterfaceMetadata,\n} from '../../../../entities/question-bank-item/question-bank-interface.utils';\nimport type {\n AXMQuestionBankItemInterfaceMetadata,\n AXMQuestionBankItemInterfaceValue,\n} from '../../../../entities/question-bank-item/question-bank-item.types';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction hasMetadataProvenance(v: AXMQuestionBankItemInterfaceValue | null | undefined): boolean {\n const id = v?.metadata?.id;\n return id != null && String(id).trim() !== '';\n}\n\nfunction hasConfiguredWidget(v: AXMQuestionBankItemInterfaceValue | null | undefined): boolean {\n const w = stripQuestionBankInterfaceMetadata(v ?? undefined);\n const t = w?.type;\n return typeof t === 'string' && t.trim() !== '';\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-question-bank-interface-editor-widget-edit',\n template: `\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @if (isInitialized()) {\n @if (showSourceChoice()) {\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n <p class=\"ax-text-sm ax-text-neutral-700\">\n {{\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.empty-source.prompt'\n | translate\n | async\n }}\n </p>\n <div class=\"ax-flex ax-w-full ax-gap-2\">\n <ax-button\n class=\"ax-flex-1\"\n type=\"button\"\n look=\"twotone\"\n color=\"primary\"\n [disabled]=\"readonly()\"\n [text]=\"('@assessment-management:question-bank.entities.question-bank-item.fields.interface.editor-mode-widget' | translate | async)!\"\n (onClick)=\"chooseWidgetSource()\"\n >\n <ax-icon icon=\"fa-solid fa-puzzle-piece\"></ax-icon>\n </ax-button>\n <ax-button\n class=\"ax-flex-1\"\n type=\"button\"\n look=\"twotone\"\n color=\"secondary\"\n [disabled]=\"readonly()\"\n [text]=\"('@assessment-management:question-bank.entities.question-bank-item.fields.interface.editor-mode-meta-data' | translate | async)!\"\n (onClick)=\"chooseMetadataSource()\"\n >\n <ax-icon icon=\"fa-light fa-database\"></ax-icon>\n </ax-button>\n </div>\n </div>\n } @else if (showReadonlyEmpty()) {\n <p class=\"ax-text-sm ax-text-neutral-600\">\n {{\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.empty-source.readonly'\n | translate\n | async\n }}\n </p>\n } \n @if(showWidgetEditor() || showMetaDataEditor()) {\n @if (showMetaDataEditor()) {\n <axm-meta-data-configurator\n [(definitionId)]=\"definitionIdModel\"\n [fieldName]=\"fieldName()\"\n [fieldTitle]=\"fieldTitle()\"\n [label]=\"metaDataConfiguratorLabel()\"\n [readonly]=\"readonly()\"\n ></axm-meta-data-configurator>\n } @else if (showWidgetEditor()) {\n <axp-widget-field-configurator\n [(widget)]=\"widgetConfigModel\"\n [fieldName]=\"fieldName()\"\n [fieldTitle]=\"fieldTitle()\"\n [label]=\"label()\"\n [readonly]=\"readonly()\"\n ></axp-widget-field-configurator>\n }\n <div class=\"ax-flex ax-justify-end ax-xs\">\n <ax-button\n look=\"twotone\"\n color=\"danger\"\n [disabled]=\"readonly()\"\n [text]=\"('@assessment-management:question-bank.entities.question-bank-item.fields.interface.switch-source' | translate | async)!\"\n (onClick)=\"clearInterfaceConfiguration()\"\n >\n <ax-icon icon=\"fa-light fa-link-slash\"></ax-icon>\n </ax-button>\n </div>\n }\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXButtonModule,\n AXPWidgetFieldConfiguratorComponent,\n AXMetaDataConfiguratorComponent,\n AXDecoratorModule,\n AXTranslationModule,\n AsyncPipe,\n ],\n})\nexport class AXMQuestionBankInterfaceEditorWidgetEditComponent extends AXPValueWidgetComponent<\n AXMQuestionBankItemInterfaceValue | null\n> {\n //#region ---- Services ----\n\n private readonly translate = inject(AXTranslationService);\n private readonly toast = inject(AXToastService);\n private readonly metaDataDefinitionService = inject(AXMMetaDataDefinitionService);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly = computed<boolean>(() => this.options()['readonly'] as boolean);\n protected fieldName = computed<string>(() => {\n const fieldNameValue = this.options()['fieldName'];\n if (fieldNameValue !== undefined && fieldNameValue !== null) {\n const stringValue = String(fieldNameValue).trim();\n return stringValue || 'field';\n }\n return 'field';\n });\n protected fieldTitle = computed<AXPMultiLanguageString>(() => {\n const fieldTitleValue = this.options()['fieldTitle'];\n if (fieldTitleValue === undefined || fieldTitleValue === null) {\n return '';\n }\n if (typeof fieldTitleValue === 'object' && !Array.isArray(fieldTitleValue)) {\n return fieldTitleValue as Record<string, string>;\n }\n const stringValue = String(fieldTitleValue).trim();\n return stringValue;\n });\n protected label = computed<string>(() => (this.options()['label'] as string) || 'Widget Type');\n protected metaDataConfiguratorLabel = computed(\n () =>\n (this.options()['metaDataConfiguratorLabel'] as string) ||\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.meta-data-configurator-label',\n );\n\n /** No widget type and no metadata definition binding — user must pick a configuration path. */\n protected interfaceIsUnset = computed<boolean>(() => {\n const v = this.getValue() as AXMQuestionBankItemInterfaceValue | null | undefined;\n return !hasMetadataProvenance(v) && !hasConfiguredWidget(v);\n });\n\n /** Widget-only path after save, or after the user chose “Widget” on an empty interface. */\n protected showWidgetEditor = computed<boolean>(() => {\n const v = this.getValue() as AXMQuestionBankItemInterfaceValue | null | undefined;\n if (hasMetadataProvenance(v)) {\n return false;\n }\n if (hasConfiguredWidget(v)) {\n return true;\n }\n return this.emptyFlowChoice() === 'widget';\n });\n\n /** Meta-data definition path after save, or after the user chose “MetaData definition” on an empty interface. */\n protected showMetaDataEditor = computed<boolean>(() => {\n const v = this.getValue() as AXMQuestionBankItemInterfaceValue | null | undefined;\n if (hasMetadataProvenance(v)) {\n return true;\n }\n if (!this.interfaceIsUnset()) {\n return false;\n }\n return this.emptyFlowChoice() === 'metadata';\n });\n\n protected showSourceChoice = computed<boolean>(\n () => this.interfaceIsUnset() && this.emptyFlowChoice() === null && !this.readonly(),\n );\n\n protected showReadonlyEmpty = computed<boolean>(\n () => this.interfaceIsUnset() && this.emptyFlowChoice() === null && this.readonly(),\n );\n\n //#endregion\n\n //#region ---- State ----\n\n protected isInitialized = signal(false);\n /** Set only while {@link interfaceIsUnset}; cleared once the value has a widget or metadata. */\n protected emptyFlowChoice = signal<'widget' | 'metadata' | null>(null);\n protected definitionIdModel = model<string>('');\n protected widgetConfigModel = model<AXPWidgetNode>({ type: '', options: {} });\n\n //#endregion\n\n //#region ---- Empty flow ----\n\n protected chooseWidgetSource(): void {\n if (this.readonly()) {\n return;\n }\n this.emptyFlowChoice.set('widget');\n }\n\n protected chooseMetadataSource(): void {\n if (this.readonly()) {\n return;\n }\n this.emptyFlowChoice.set('metadata');\n }\n\n /** Clears both widget config and metadata provenance, then returns to source chooser. */\n protected clearInterfaceConfiguration(): void {\n if (this.readonly()) {\n return;\n }\n untracked(() => {\n this.widgetConfigModel.set({ type: '', options: {} });\n this.definitionIdModel.set('');\n this.emptyFlowChoice.set(null);\n this.setValue(null);\n });\n }\n\n //#endregion\n\n //#region ---- Sync value ↔ configurator (preserve sibling metadata) ----\n\n private syncValueToConfigurator = effect(() => {\n const value = this.getValue();\n const widgetOnly = stripQuestionBankInterfaceMetadata(value ?? undefined);\n\n if (widgetOnly && widgetOnly.type) {\n const currentModel = untracked(() => this.widgetConfigModel());\n if (!isEqual(widgetOnly, currentModel)) {\n untracked(() => {\n this.widgetConfigModel.set(widgetOnly);\n this.isInitialized.set(true);\n });\n }\n } else {\n untracked(() => {\n if (!this.isInitialized()) {\n this.isInitialized.set(true);\n }\n });\n }\n });\n\n private clearEmptyFlowWhenConfigured = effect(() => {\n if (untracked(() => this.interfaceIsUnset())) {\n return;\n }\n untracked(() => {\n if (this.emptyFlowChoice() !== null) {\n this.emptyFlowChoice.set(null);\n }\n });\n });\n\n private syncConfiguratorToValue = effect(() => {\n const modelValue = this.widgetConfigModel();\n\n if (!untracked(() => this.isInitialized())) {\n return;\n }\n\n if (!modelValue || !modelValue.type) {\n return;\n }\n\n const full = untracked(() => this.getValue());\n const metadata = (full && typeof full === 'object' && (full as AXMQuestionBankItemInterfaceValue).metadata) || undefined;\n\n const next: AXMQuestionBankItemInterfaceValue = metadata\n ? { ...modelValue, metadata }\n : (modelValue as AXMQuestionBankItemInterfaceValue);\n\n const currentFlat = untracked(() => this.getValue());\n if (!isEqual(next, currentFlat)) {\n untracked(() => {\n this.setValue(next);\n });\n }\n });\n\n private syncDefinitionIdFromValue = effect(() => {\n const value = this.getValue();\n const metaId = value?.metadata?.id;\n if (metaId != null && String(metaId) !== '') {\n const sid = String(metaId);\n if (untracked(() => this.definitionIdModel()) !== sid) {\n untracked(() => this.definitionIdModel.set(sid));\n }\n }\n });\n\n //#endregion\n\n //#region ---- Meta-data definition selection ----\n\n /** True while the meta-data configurator should be active (saved provenance or empty-flow metadata path). */\n private metadataFlowActive = computed<boolean>(() => {\n const v = this.getValue() as AXMQuestionBankItemInterfaceValue | null | undefined;\n if (hasMetadataProvenance(v)) {\n return true;\n }\n if (!this.interfaceIsUnset()) {\n return false;\n }\n return this.emptyFlowChoice() === 'metadata';\n });\n\n private applyMetadataDefinitionSelection = effect(() => {\n if (!this.metadataFlowActive()) {\n return;\n }\n if (!untracked(() => this.isInitialized())) {\n return;\n }\n const id = this.definitionIdModel();\n if (!id?.trim()) {\n return;\n }\n\n const current = untracked(() => this.getValue());\n if (current?.metadata?.id === id) {\n const stripped = stripQuestionBankInterfaceMetadata(current);\n if (stripped?.type) {\n return;\n }\n }\n\n if (this.readonly()) {\n return;\n }\n\n void this.loadAndApplyMetadataDefinition(id);\n });\n\n private async loadAndApplyMetadataDefinition(id: string): Promise<void> {\n try {\n const row = await this.metaDataDefinitionService.getOne(id);\n const resolved = await resolveWidgetNodeFromMetaDataDefinitionInterface(\n row.interface as AXMMetaDataDefinitionEntityModel['interface'],\n );\n if (!resolved?.type) {\n this.toast.danger(\n (await this.translate.translateAsync(\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.load-from-metadata-invalid',\n )) ?? 'The selected metadata definition has no valid widget interface.',\n );\n return;\n }\n\n const titleRaw = row.title;\n const metadata: AXMQuestionBankItemInterfaceMetadata = {\n id: String(row.id ?? ''),\n name: String(row.name ?? ''),\n title: (typeof titleRaw === 'object' && titleRaw !== null ? titleRaw : String(titleRaw ?? '')) as\n | AXPMultiLanguageString\n | string,\n version: 0,\n };\n\n const next: AXMQuestionBankItemInterfaceValue = {\n ...resolved,\n metadata,\n };\n\n untracked(() => {\n this.setValue(next);\n this.widgetConfigModel.set(resolved);\n });\n } catch (err) {\n console.error('[QuestionBankInterfaceEditor] metadata definition load failed', err);\n this.toast.danger(\n (await this.translate.translateAsync(\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.load-from-metadata-failed',\n )) ?? 'Could not load metadata definitions.',\n );\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":["i3"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/widgets/question-bank-interface-editor-widget/question-bank-interface-editor-widget-edit.component.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {\n AXMetaDataConfiguratorComponent,\n AXMMetaDataDefinitionService,\n type AXMMetaDataDefinitionEntityModel,\n} from '@acorex/modules/data-management';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetFieldConfiguratorComponent } from '@acorex/platform/layout/components';\nimport { AXPValueWidgetComponent, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n model,\n signal,\n untracked,\n} from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\nimport {\n resolveWidgetNodeFromMetaDataDefinitionInterface,\n stripQuestionBankInterfaceMetadata,\n} from '../../../../entities/question-bank-item/question-bank-interface.utils';\nimport type {\n AXMQuestionBankItemInterfaceMetadata,\n AXMQuestionBankItemInterfaceValue,\n} from '../../../../entities/question-bank-item/question-bank-item.types';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction hasMetadataProvenance(v: AXMQuestionBankItemInterfaceValue | null | undefined): boolean {\n const id = v?.metadata?.id;\n return id != null && String(id).trim() !== '';\n}\n\nfunction hasConfiguredWidget(v: AXMQuestionBankItemInterfaceValue | null | undefined): boolean {\n const w = stripQuestionBankInterfaceMetadata(v ?? undefined);\n const t = w?.type;\n return typeof t === 'string' && t.trim() !== '';\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-question-bank-interface-editor-widget-edit',\n template: `\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @if (isInitialized()) {\n @if (showSourceChoice()) {\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n <p class=\"ax-text-sm ax-text-neutral-700\">\n {{\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.empty-source.prompt'\n | translate\n | async\n }}\n </p>\n <div class=\"ax-flex ax-w-full ax-gap-2\">\n <ax-button\n class=\"ax-flex-1\"\n type=\"button\"\n look=\"twotone\"\n color=\"primary\"\n [disabled]=\"readonly()\"\n [text]=\"('@assessment-management:question-bank.entities.question-bank-item.fields.interface.editor-mode-widget' | translate | async)!\"\n (onClick)=\"chooseWidgetSource()\"\n >\n <ax-icon icon=\"fa-solid fa-puzzle-piece\"></ax-icon>\n </ax-button>\n <ax-button\n class=\"ax-flex-1\"\n type=\"button\"\n look=\"twotone\"\n color=\"secondary\"\n [disabled]=\"readonly()\"\n [text]=\"('@assessment-management:question-bank.entities.question-bank-item.fields.interface.editor-mode-meta-data' | translate | async)!\"\n (onClick)=\"chooseMetadataSource()\"\n >\n <ax-icon icon=\"fa-light fa-database\"></ax-icon>\n </ax-button>\n </div>\n </div>\n } @else if (showReadonlyEmpty()) {\n <p class=\"ax-text-sm ax-text-neutral-600\">\n {{\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.empty-source.readonly'\n | translate\n | async\n }}\n </p>\n } \n @if(showWidgetEditor() || showMetaDataEditor()) {\n @if (showMetaDataEditor()) {\n <axm-meta-data-configurator\n [(definitionId)]=\"definitionIdModel\"\n [fieldName]=\"fieldName()\"\n [fieldTitle]=\"fieldTitle()\"\n [label]=\"metaDataConfiguratorLabel()\"\n [readonly]=\"readonly()\"\n ></axm-meta-data-configurator>\n } @else if (showWidgetEditor()) {\n <axp-widget-field-configurator\n [(widget)]=\"widgetConfigModel\"\n [fieldName]=\"fieldName()\"\n [fieldTitle]=\"fieldTitle()\"\n [label]=\"label()\"\n [readonly]=\"readonly()\"\n ></axp-widget-field-configurator>\n }\n <div class=\"ax-flex ax-justify-end ax-xs\">\n <ax-button\n look=\"twotone\"\n color=\"danger\"\n [disabled]=\"readonly()\"\n [text]=\"('@assessment-management:question-bank.entities.question-bank-item.fields.interface.switch-source' | translate | async)!\"\n (onClick)=\"clearInterfaceConfiguration()\"\n >\n <ax-icon icon=\"fa-light fa-link-slash\"></ax-icon>\n </ax-button>\n </div>\n }\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXButtonModule,\n AXPWidgetFieldConfiguratorComponent,\n AXMetaDataConfiguratorComponent,\n AXDecoratorModule,\n AXTranslationModule,\n AsyncPipe,\n ],\n})\nexport class AXMQuestionBankInterfaceEditorWidgetEditComponent extends AXPValueWidgetComponent<\n AXMQuestionBankItemInterfaceValue | null\n> {\n //#region ---- Services ----\n\n private readonly translate = inject(AXTranslationService);\n private readonly toast = inject(AXToastService);\n private readonly metaDataDefinitionService = inject(AXMMetaDataDefinitionService);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly = computed<boolean>(() => this.options()['readonly'] as boolean);\n protected fieldName = computed<string>(() => {\n const fieldNameValue = this.options()['fieldName'];\n if (fieldNameValue !== undefined && fieldNameValue !== null) {\n const stringValue = String(fieldNameValue).trim();\n return stringValue || 'field';\n }\n return 'field';\n });\n protected fieldTitle = computed<AXPMultiLanguageString>(() => {\n const fieldTitleValue = this.options()['fieldTitle'];\n if (fieldTitleValue === undefined || fieldTitleValue === null) {\n return '';\n }\n if (typeof fieldTitleValue === 'object' && !Array.isArray(fieldTitleValue)) {\n return fieldTitleValue as Record<string, string>;\n }\n const stringValue = String(fieldTitleValue).trim();\n return stringValue;\n });\n protected label = computed<string>(() => (this.options()['label'] as string) || 'Widget Type');\n protected metaDataConfiguratorLabel = computed(\n () =>\n (this.options()['metaDataConfiguratorLabel'] as string) ||\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.meta-data-configurator-label',\n );\n\n /** No widget type and no metadata definition binding — user must pick a configuration path. */\n protected interfaceIsUnset = computed<boolean>(() => {\n const v = this.getValue() as AXMQuestionBankItemInterfaceValue | null | undefined;\n return !hasMetadataProvenance(v) && !hasConfiguredWidget(v);\n });\n\n /** Widget-only path after save, or after the user chose “Widget” on an empty interface. */\n protected showWidgetEditor = computed<boolean>(() => {\n const v = this.getValue() as AXMQuestionBankItemInterfaceValue | null | undefined;\n if (hasMetadataProvenance(v)) {\n return false;\n }\n if (hasConfiguredWidget(v)) {\n return true;\n }\n return this.emptyFlowChoice() === 'widget';\n });\n\n /** Meta-data definition path after save, or after the user chose “MetaData definition” on an empty interface. */\n protected showMetaDataEditor = computed<boolean>(() => {\n const v = this.getValue() as AXMQuestionBankItemInterfaceValue | null | undefined;\n if (hasMetadataProvenance(v)) {\n return true;\n }\n if (!this.interfaceIsUnset()) {\n return false;\n }\n return this.emptyFlowChoice() === 'metadata';\n });\n\n protected showSourceChoice = computed<boolean>(\n () => this.interfaceIsUnset() && this.emptyFlowChoice() === null && !this.readonly(),\n );\n\n protected showReadonlyEmpty = computed<boolean>(\n () => this.interfaceIsUnset() && this.emptyFlowChoice() === null && this.readonly(),\n );\n\n //#endregion\n\n //#region ---- State ----\n\n protected isInitialized = signal(false);\n /** Set only while {@link interfaceIsUnset}; cleared once the value has a widget or metadata. */\n protected emptyFlowChoice = signal<'widget' | 'metadata' | null>(null);\n protected definitionIdModel = model<string>('');\n protected widgetConfigModel = model<AXPWidgetNode>({ type: '', options: {} });\n\n //#endregion\n\n //#region ---- Empty flow ----\n\n protected chooseWidgetSource(): void {\n if (this.readonly()) {\n return;\n }\n this.emptyFlowChoice.set('widget');\n }\n\n protected chooseMetadataSource(): void {\n if (this.readonly()) {\n return;\n }\n this.emptyFlowChoice.set('metadata');\n }\n\n /** Clears both widget config and metadata provenance, then returns to source chooser. */\n protected clearInterfaceConfiguration(): void {\n if (this.readonly()) {\n return;\n }\n untracked(() => {\n this.widgetConfigModel.set({ type: '', options: {} });\n this.definitionIdModel.set('');\n this.emptyFlowChoice.set(null);\n this.setValue(null);\n });\n }\n\n //#endregion\n\n //#region ---- Sync value ↔ configurator (preserve sibling metadata) ----\n\n private syncValueToConfigurator = effect(() => {\n const value = this.getValue();\n const widgetOnly = stripQuestionBankInterfaceMetadata(value ?? undefined);\n\n if (widgetOnly && widgetOnly.type) {\n const currentModel = untracked(() => this.widgetConfigModel());\n if (!isEqual(widgetOnly, currentModel)) {\n untracked(() => {\n this.widgetConfigModel.set(widgetOnly);\n this.isInitialized.set(true);\n });\n }\n } else {\n untracked(() => {\n if (!this.isInitialized()) {\n this.isInitialized.set(true);\n }\n });\n }\n });\n\n private clearEmptyFlowWhenConfigured = effect(() => {\n if (untracked(() => this.interfaceIsUnset())) {\n return;\n }\n untracked(() => {\n if (this.emptyFlowChoice() !== null) {\n this.emptyFlowChoice.set(null);\n }\n });\n });\n\n private syncConfiguratorToValue = effect(() => {\n const modelValue = this.widgetConfigModel();\n\n if (!untracked(() => this.isInitialized())) {\n return;\n }\n\n if (!modelValue || !modelValue.type) {\n return;\n }\n\n const full = untracked(() => this.getValue());\n const metadata = (full && typeof full === 'object' && (full as AXMQuestionBankItemInterfaceValue).metadata) || undefined;\n\n const next: AXMQuestionBankItemInterfaceValue = metadata\n ? { ...modelValue, metadata }\n : (modelValue as AXMQuestionBankItemInterfaceValue);\n\n const currentFlat = untracked(() => this.getValue());\n if (!isEqual(next, currentFlat)) {\n untracked(() => {\n this.setValue(next);\n });\n }\n });\n\n private syncDefinitionIdFromValue = effect(() => {\n const value = this.getValue();\n const metaId = value?.metadata?.id;\n if (metaId != null && String(metaId) !== '') {\n const sid = String(metaId);\n if (untracked(() => this.definitionIdModel()) !== sid) {\n untracked(() => this.definitionIdModel.set(sid));\n }\n }\n });\n\n //#endregion\n\n //#region ---- Meta-data definition selection ----\n\n /** True while the meta-data configurator should be active (saved provenance or empty-flow metadata path). */\n private metadataFlowActive = computed<boolean>(() => {\n const v = this.getValue() as AXMQuestionBankItemInterfaceValue | null | undefined;\n if (hasMetadataProvenance(v)) {\n return true;\n }\n if (!this.interfaceIsUnset()) {\n return false;\n }\n return this.emptyFlowChoice() === 'metadata';\n });\n\n private applyMetadataDefinitionSelection = effect(() => {\n if (!this.metadataFlowActive()) {\n return;\n }\n if (!untracked(() => this.isInitialized())) {\n return;\n }\n const id = this.definitionIdModel();\n if (!id?.trim()) {\n return;\n }\n\n const current = untracked(() => this.getValue());\n if (current?.metadata?.id === id) {\n const stripped = stripQuestionBankInterfaceMetadata(current);\n if (stripped?.type) {\n return;\n }\n }\n\n if (this.readonly()) {\n return;\n }\n\n void this.loadAndApplyMetadataDefinition(id);\n });\n\n private async loadAndApplyMetadataDefinition(id: string): Promise<void> {\n try {\n const row = await this.metaDataDefinitionService.getOne(id);\n const resolved = await resolveWidgetNodeFromMetaDataDefinitionInterface(\n row.interface as AXMMetaDataDefinitionEntityModel['interface'],\n );\n if (!resolved?.type) {\n this.toast.danger(\n (await this.translate.translateAsync(\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.load-from-metadata-invalid',\n )) ?? 'The selected metadata definition has no valid widget interface.',\n );\n return;\n }\n\n const titleRaw = row.title;\n const metadata: AXMQuestionBankItemInterfaceMetadata = {\n id: String(row.id ?? ''),\n name: String(row.name ?? ''),\n title: (typeof titleRaw === 'object' && titleRaw !== null ? titleRaw : String(titleRaw ?? '')) as\n | AXPMultiLanguageString\n | string,\n version: 0,\n };\n\n const next: AXMQuestionBankItemInterfaceValue = {\n ...resolved,\n metadata,\n };\n\n untracked(() => {\n this.setValue(next);\n this.widgetConfigModel.set(resolved);\n });\n } catch (err) {\n console.error('[QuestionBankInterfaceEditor] metadata definition load failed', err);\n this.toast.danger(\n (await this.translate.translateAsync(\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.load-from-metadata-failed',\n )) ?? 'Could not load metadata definitions.',\n );\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":["i3"],"mappings":"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"}