@acorex-platform/module-assessment-management-client 0.0.28 → 0.0.32

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 (21) hide show
  1. package/fesm2022/{acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs → acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-YfOwCCLz.mjs} +37 -36
  2. package/fesm2022/acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-YfOwCCLz.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-assessment-management-client-assessment-voice.commands-CduVfWQ-.mjs → acorex-platform-module-assessment-management-client-assessment-voice.commands-CZjFuIsF.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-assessment-management-client-assessment-voice.commands-CduVfWQ-.mjs.map → acorex-platform-module-assessment-management-client-assessment-voice.commands-CZjFuIsF.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-assessment-management-client-fill-assessment-session.command-VF80DWQf.mjs → acorex-platform-module-assessment-management-client-fill-assessment-session.command-DUo0Jy0W.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-assessment-management-client-fill-assessment-session.command-VF80DWQf.mjs.map → acorex-platform-module-assessment-management-client-fill-assessment-session.command-DUo0Jy0W.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-question.command-C1ODQxDn.mjs → acorex-platform-module-assessment-management-client-preview-question.command-BR3YNIEg.mjs} +2 -2
  8. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-question.command-C1ODQxDn.mjs.map → acorex-platform-module-assessment-management-client-preview-question.command-BR3YNIEg.mjs.map} +1 -1
  9. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-questionnaire.command-DBm7ve4w.mjs → acorex-platform-module-assessment-management-client-preview-questionnaire.command-D9Y57_r2.mjs} +2 -2
  10. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-questionnaire.command-DBm7ve4w.mjs.map → acorex-platform-module-assessment-management-client-preview-questionnaire.command-D9Y57_r2.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Bbl-efrl.mjs → acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-BqIo3Zhp.mjs} +2 -2
  12. package/fesm2022/{acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Bbl-efrl.mjs.map → acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-BqIo3Zhp.mjs.map} +1 -1
  13. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-Djcfg0dv.mjs → acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-EEBL0x9K.mjs} +2 -2
  14. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-Djcfg0dv.mjs.map → acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-EEBL0x9K.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-assessment-management-client-review-assessment-session.command-CZ96KQ-l.mjs → acorex-platform-module-assessment-management-client-review-assessment-session.command-Bobavgnt.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-module-assessment-management-client-review-assessment-session.command-CZ96KQ-l.mjs.map → acorex-platform-module-assessment-management-client-review-assessment-session.command-Bobavgnt.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-assessment-management-client-view-session-answers.command-CCzJoJ4p.mjs → acorex-platform-module-assessment-management-client-view-session-answers.command-DPfg8ioy.mjs} +2 -2
  18. package/fesm2022/{acorex-platform-module-assessment-management-client-view-session-answers.command-CCzJoJ4p.mjs.map → acorex-platform-module-assessment-management-client-view-session-answers.command-DPfg8ioy.mjs.map} +1 -1
  19. package/fesm2022/acorex-platform-module-assessment-management-client.mjs +1 -1
  20. package/package.json +2 -2
  21. package/fesm2022/acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { h as AXMHeadlessQuestionnaireSessionService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs';
3
+ import { h as AXMHeadlessQuestionnaireSessionService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-YfOwCCLz.mjs';
4
4
 
5
5
  //#endregion
6
6
  //#region ----- Find case -----
@@ -131,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
131
131
  }] });
132
132
 
133
133
  export { AXMApplyQuestionnaireAnswerCommand, AXMCancelQuestionnaireCommand, AXMFindCaseForVoiceFillCommand, AXMNextQuestionnaireQuestionCommand, AXMSaveQuestionnaireDraftCommand, AXMStartHeadlessQuestionnaireCommand, AXMSubmitQuestionnaireCommand };
134
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-assessment-voice.commands-CduVfWQ-.mjs.map
134
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-assessment-voice.commands-CZjFuIsF.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-assessment-voice.commands-CduVfWQ-.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-viewer/voice/commands/assessment-voice.commands.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMHeadlessQuestionnaireSessionService } from '../headless-questionnaire-session.service';\n\n//#endregion\n\n//#region ----- Find case -----\n\n@Injectable()\nexport class AXMFindCaseForVoiceFillCommand implements AXPCommand<{ query?: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { query?: string }): AXPCommandExecuteResultPromise<unknown> {\n const items = await this.sessions.findCases(input?.query);\n return { success: true, kind: 'object', data: { items } };\n }\n}\n\n//#endregion\n\n//#region ----- Start -----\n\n@Injectable()\nexport class AXMStartHeadlessQuestionnaireCommand\n implements AXPCommand<{ caseId?: string; sessionId?: string; text?: string }, unknown>\n{\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: {\n caseId?: string;\n sessionId?: string;\n text?: string;\n }): AXPCommandExecuteResultPromise<unknown> {\n const data = await this.sessions.startSession(input ?? {});\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Next -----\n\n@Injectable()\nexport class AXMNextQuestionnaireQuestionCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.nextPrompt(input.sessionId.trim());\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Apply -----\n\n@Injectable()\nexport class AXMApplyQuestionnaireAnswerCommand\n implements AXPCommand<{ sessionId: string; answerKey?: string; text?: string; value?: unknown; comment?: string }, unknown>\n{\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: {\n sessionId: string;\n answerKey?: string;\n text?: string;\n value?: unknown;\n comment?: string;\n }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.applyInput(input.sessionId.trim(), input);\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Save -----\n\n@Injectable()\nexport class AXMSaveQuestionnaireDraftCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.saveDraft(input.sessionId.trim());\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Submit -----\n\n@Injectable()\nexport class AXMSubmitQuestionnaireCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.submit(input.sessionId.trim());\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Cancel -----\n\n@Injectable()\nexport class AXMCancelQuestionnaireCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n await this.sessions.cancel(input.sessionId.trim());\n return { success: true, kind: 'object', data: { sessionId: input.sessionId.trim() } };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-assessment-voice.commands-CZjFuIsF.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-viewer/voice/commands/assessment-voice.commands.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMHeadlessQuestionnaireSessionService } from '../headless-questionnaire-session.service';\n\n//#endregion\n\n//#region ----- Find case -----\n\n@Injectable()\nexport class AXMFindCaseForVoiceFillCommand implements AXPCommand<{ query?: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { query?: string }): AXPCommandExecuteResultPromise<unknown> {\n const items = await this.sessions.findCases(input?.query);\n return { success: true, kind: 'object', data: { items } };\n }\n}\n\n//#endregion\n\n//#region ----- Start -----\n\n@Injectable()\nexport class AXMStartHeadlessQuestionnaireCommand\n implements AXPCommand<{ caseId?: string; sessionId?: string; text?: string }, unknown>\n{\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: {\n caseId?: string;\n sessionId?: string;\n text?: string;\n }): AXPCommandExecuteResultPromise<unknown> {\n const data = await this.sessions.startSession(input ?? {});\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Next -----\n\n@Injectable()\nexport class AXMNextQuestionnaireQuestionCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.nextPrompt(input.sessionId.trim());\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Apply -----\n\n@Injectable()\nexport class AXMApplyQuestionnaireAnswerCommand\n implements AXPCommand<{ sessionId: string; answerKey?: string; text?: string; value?: unknown; comment?: string }, unknown>\n{\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: {\n sessionId: string;\n answerKey?: string;\n text?: string;\n value?: unknown;\n comment?: string;\n }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.applyInput(input.sessionId.trim(), input);\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Save -----\n\n@Injectable()\nexport class AXMSaveQuestionnaireDraftCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.saveDraft(input.sessionId.trim());\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Submit -----\n\n@Injectable()\nexport class AXMSubmitQuestionnaireCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.submit(input.sessionId.trim());\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Cancel -----\n\n@Injectable()\nexport class AXMCancelQuestionnaireCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n await this.sessions.cancel(input.sessionId.trim());\n return { success: true, kind: 'object', data: { sessionId: input.sessionId.trim() } };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { inject, Injectable } from '@angular/core';
6
6
  import { get, first, defaultTo, isString } from 'lodash';
7
7
  import { Router } from '@angular/router';
8
8
  import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
9
- import { A as AXMQuestionnaireViewerService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs';
9
+ import { A as AXMQuestionnaireViewerService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-YfOwCCLz.mjs';
10
10
  import { RootConfig, toPrintSettings, toDisplaySettings, normalizeCompletionMode, toPrePostConfig } from '@acorex-platform/module-assessment-management-client/contracts';
11
11
 
12
12
  //#endregion
@@ -267,4 +267,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
267
267
  }] });
268
268
 
269
269
  export { FillAssessmentSessionCommand };
270
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-fill-assessment-session.command-VF80DWQf.mjs.map
270
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-fill-assessment-session.command-DUo0Jy0W.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-fill-assessment-session.command-VF80DWQf.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-viewer/commands/fill-assessment-session.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult, type AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\n\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDebugService } from '@acorex-platform/framework-client/core';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, first, get, isString } from 'lodash';\nimport { Router } from '@angular/router';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '@acorex-platform/module-assessment-management-client/contracts';\nimport type { AXMAssessmentManagementAssessmentSessionEntityModel } from '@acorex-platform/module-assessment-management-client/contracts';\nimport type { AXMAssessmentManagementQuestionnaireEntityModel } from '@acorex-platform/module-assessment-management-client/contracts';\nimport {\n normalizeCompletionMode,\n toDisplaySettings,\n toPrePostConfig,\n toPrintSettings,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport {\n RootConfig,\n type QuestionnaireCompletionMode,\n type QuestionnaireBuilderValue,\n} from '@acorex-platform/module-assessment-management-client/contracts';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * How to show the questionnaire viewer when filling an assessment session.\n */\nexport type FillAssessmentSessionShowAs = 'popup' | 'page' | 'standalone';\n\nexport type FillAssessmentSessionOutcome = 'Submitted' | 'Saved' | 'Cancelled';\n\n/**\n * Input for FillAssessmentSession command.\n */\nexport interface FillAssessmentSessionCommandInput {\n caseId: string;\n sessionId?: string;\n /** Popup viewer title; falls back to assessment case title when omitted. */\n title?: AXPMultiLanguageString;\n showAs?: FillAssessmentSessionShowAs;\n responderId?: string;\n role?: 'responder' | 'supervisor' | 'reviewer';\n /** Overrides questionnaire display.completionMode when set. */\n completionMode?: QuestionnaireCompletionMode;\n /** Question answer keys that must stay readonly (e.g. asset prefill on work-order checklists). */\n readonlyAnswerKeys?: string[];\n}\n\n//#endregion\n\n//#region ---- Fill Assessment Session Command ----\n\n/**\n * Opens questionnaire viewer for filling/editing assessment session with draft save and workflow outcomes.\n */\n@Injectable()\nexport class FillAssessmentSessionCommand implements AXPCommand<FillAssessmentSessionCommandInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly router = inject(Router);\n private readonly entityService = inject(AXPEntityService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly translationService = inject(AXTranslationService);\n private readonly debug = inject(AXPDebugService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: FillAssessmentSessionCommandInput): AXPCommandExecuteResultPromise<void> {\n try {\n const assessmentCase = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>()\n .byKey(input.caseId);\n if (!assessmentCase) {\n return {\n success: false,\n message: { text: `Assessment case with ID ${input.caseId} not found` },\n metadata: { outcome: 'Cancelled' },\n };\n }\n\n const questionnaire = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(assessmentCase.questionnaireId);\n if (!questionnaire) {\n return {\n success: false,\n message: { text: `Questionnaire with ID ${assessmentCase.questionnaireId} not found` },\n metadata: { outcome: 'Cancelled' },\n };\n }\n\n const questions = questionnaire.questions ?? { sections: [] };\n const structure: QuestionnaireBuilderValue = {\n ...questions,\n sections: questions.sections ?? [],\n displaySettings: toDisplaySettings(questionnaire) ?? undefined,\n printSettings: toPrintSettings(questionnaire) ?? undefined,\n };\n if (!structure.sections.length) {\n return {\n success: false,\n message: { text: 'Questionnaire has no questions to display' },\n metadata: { outcome: 'Cancelled' },\n };\n }\n\n const currentUser = this.sessionService.user;\n const responderId = input.responderId || currentUser?.id;\n if (!responderId) {\n return {\n success: false,\n message: { text: 'No responder ID provided and no current user found' },\n metadata: { outcome: 'Cancelled' },\n };\n }\n\n const role = input.role || 'responder';\n const displaySettings = toDisplaySettings(questionnaire);\n const completionMode: QuestionnaireCompletionMode =\n input.completionMode ?? normalizeCompletionMode(displaySettings?.completionMode);\n\n let existingSession: AXMAssessmentManagementAssessmentSessionEntityModel | null = null;\n let sessionId = input.sessionId ?? null;\n let initialAnswers: Record<string, unknown> = {};\n\n if (sessionId) {\n existingSession = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(sessionId);\n if (existingSession) {\n initialAnswers = (existingSession.answers as Record<string, unknown>) || {};\n }\n }\n\n const sessionSubmitted = existingSession?.statusId === 'submitted';\n\n const showAs = input.showAs ?? 'popup';\n const appName = this.sessionService.application?.name ?? 'demo';\n const moduleRoute = (RootConfig.module as { route?: string }).route ?? 'assessment-management';\n\n if (showAs === 'page') {\n const path = `/${appName}/${moduleRoute}/questionnaire/fill/${input.caseId}`;\n const url = sessionId ? `${path}?sessionId=${encodeURIComponent(sessionId)}` : path;\n this.router.navigateByUrl(url);\n return { success: true, kind: 'object', data: undefined, metadata: { outcome: 'Cancelled' } };\n }\n\n if (showAs === 'standalone') {\n let sessionIdToOpen = sessionId;\n if (!sessionIdToOpen) {\n const now = new Date();\n sessionIdToOpen = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .create({\n caseId: input.caseId,\n responderId,\n role,\n answers: {},\n progressPercentage: 0,\n answeredQuestionsCount: 0,\n lastSavedAt: now,\n startedAt: now,\n statusId: 'not-started',\n } as Omit<AXMAssessmentManagementAssessmentSessionEntityModel, 'id'>);\n }\n if (sessionIdToOpen) {\n this.router.navigateByUrl(`/assessment/fill/${sessionIdToOpen}`);\n }\n return { success: true, kind: 'object', data: undefined, metadata: { outcome: 'Cancelled' } };\n }\n\n const viewerTitle = await this.resolveViewerTitle(input.title, assessmentCase.title);\n\n const viewerConfig = {\n readonly: sessionSubmitted,\n completionMode,\n validationStrategy: displaySettings?.validationStrategy,\n viewMode: displaySettings?.viewMode,\n showProgressBar: displaySettings?.showProgressBar,\n timer: { showTimer: displaySettings?.showTimer ?? false },\n showQuestionNumbers: displaySettings?.showQuestionNumbers,\n readonlyAnswerKeys: input.readonlyAnswerKeys,\n };\n\n const result = await this.questionnaireViewerService.open({\n title: viewerTitle,\n structure,\n prePostConfig: toPrePostConfig(questionnaire),\n config: viewerConfig,\n initialAnswers,\n questionnaireId: questionnaire.id,\n assessmentFillContext: sessionSubmitted\n ? undefined\n : {\n caseId: input.caseId,\n sessionId: sessionId ?? null,\n responderId,\n role,\n },\n });\n\n const outcome = await this.resolveFillOutcome(input.caseId, input.sessionId ?? sessionId, result);\n this.debug.trace(\n 'assessment-management',\n 'fill-assessment-session',\n 'Resolved fill workflow outcome',\n () => ({\n caseId: input.caseId,\n sessionId: input.sessionId ?? sessionId,\n popupResult: {\n saved: result?.saved === true,\n submitted: result?.submitted === true,\n hasPayload: result != null,\n },\n outcome,\n }),\n );\n return { success: true, kind: 'object', data: undefined, metadata: { outcome },\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error('Error filling assessment session:', error);\n return {\n success: false,\n message: { text: `Error filling assessment session: ${message}` },\n metadata: { outcome: 'Cancelled' },\n };\n }\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n /**\n * Resolves popup title: explicit input, then case title, then translated default.\n */\n private async resolveViewerTitle(\n inputTitle: AXPMultiLanguageString | undefined,\n caseTitle: string | undefined,\n ): Promise<string> {\n const explicit = this.normalizeTitle(inputTitle);\n if (explicit) {\n return explicit;\n }\n\n const fromCase = this.normalizeTitle(caseTitle);\n if (fromCase) {\n return fromCase;\n }\n\n const fillTitleKey = '@assessment-management:cases.actions.fill-assessment.title';\n const fillTitleBase = await this.translationService.translateAsync(fillTitleKey);\n return fillTitleBase || 'Fill Assessment';\n }\n\n /** Resolves a multi-language or plain string title for the active locale. */\n private normalizeTitle(value: AXPMultiLanguageString | string | undefined | null | false): string {\n if (value == null || value === false) {\n return '';\n }\n if (typeof value === 'string') {\n return value.trim();\n }\n const locale = this.translationService.getActiveLang();\n return resolveMultiLanguageString(value, locale).trim();\n }\n\n /**\n * Resolves workflow outcome from popup result, falling back to persisted session status only\n * when the popup is dismissed without an explicit close payload.\n * After submit the viewer may show a summary step; closing via X without \"Done\" still leaves\n * the session submitted and must advance the workflow. Save-as-draft always sends an explicit\n * payload ({ saved: true }); inferring Submitted from the DB when a payload exists can wrongly\n * advance the workflow if flags are missing or a stale submitted session is resolved.\n */\n private async resolveFillOutcome(\n caseId: string,\n sessionId: string | null | undefined,\n result: { submitted?: boolean; saved?: boolean } | null | undefined,\n ): Promise<FillAssessmentSessionOutcome> {\n if (result?.saved) {\n return 'Saved';\n }\n if (result?.submitted) {\n return 'Submitted';\n }\n\n if (result != null) {\n return 'Cancelled';\n }\n\n const sessionSubmitted = await this.isAssessmentSessionSubmitted(caseId, sessionId);\n if (sessionSubmitted) {\n return 'Submitted';\n }\n\n return 'Cancelled';\n }\n\n private async isAssessmentSessionSubmitted(\n caseId: string,\n sessionId: string | null | undefined,\n ): Promise<boolean> {\n const resolvedSessionId = this.resolveText(sessionId) || (await this.findLatestSessionIdForCase(caseId));\n if (!resolvedSessionId) {\n return false;\n }\n\n const session = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(resolvedSessionId);\n\n return get(session, 'statusId') === 'submitted';\n }\n\n private async findLatestSessionIdForCase(caseId: string): Promise<string> {\n const page = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .query({\n skip: 0,\n take: 1,\n sort: [{ field: 'lastSavedAt', direction: 'desc' }],\n filter: {\n logic: 'and',\n filters: [{ field: 'caseId', operator: { type: 'equal' }, value: caseId }],\n },\n } as never);\n\n const session = first(defaultTo(get(page, 'items'), []));\n return this.resolveText(get(session, 'id'));\n }\n\n private resolveText(value: unknown): string {\n if (!isString(value)) {\n return '';\n }\n return value.trim();\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-fill-assessment-session.command-DUo0Jy0W.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-viewer/commands/fill-assessment-session.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult, type AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\n\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDebugService } from '@acorex-platform/framework-client/core';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, first, get, isString } from 'lodash';\nimport { Router } from '@angular/router';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '@acorex-platform/module-assessment-management-client/contracts';\nimport type { AXMAssessmentManagementAssessmentSessionEntityModel } from '@acorex-platform/module-assessment-management-client/contracts';\nimport type { AXMAssessmentManagementQuestionnaireEntityModel } from '@acorex-platform/module-assessment-management-client/contracts';\nimport {\n normalizeCompletionMode,\n toDisplaySettings,\n toPrePostConfig,\n toPrintSettings,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport {\n RootConfig,\n type QuestionnaireCompletionMode,\n type QuestionnaireBuilderValue,\n} from '@acorex-platform/module-assessment-management-client/contracts';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * How to show the questionnaire viewer when filling an assessment session.\n */\nexport type FillAssessmentSessionShowAs = 'popup' | 'page' | 'standalone';\n\nexport type FillAssessmentSessionOutcome = 'Submitted' | 'Saved' | 'Cancelled';\n\n/**\n * Input for FillAssessmentSession command.\n */\nexport interface FillAssessmentSessionCommandInput {\n caseId: string;\n sessionId?: string;\n /** Popup viewer title; falls back to assessment case title when omitted. */\n title?: AXPMultiLanguageString;\n showAs?: FillAssessmentSessionShowAs;\n responderId?: string;\n role?: 'responder' | 'supervisor' | 'reviewer';\n /** Overrides questionnaire display.completionMode when set. */\n completionMode?: QuestionnaireCompletionMode;\n /** Question answer keys that must stay readonly (e.g. asset prefill on work-order checklists). */\n readonlyAnswerKeys?: string[];\n}\n\n//#endregion\n\n//#region ---- Fill Assessment Session Command ----\n\n/**\n * Opens questionnaire viewer for filling/editing assessment session with draft save and workflow outcomes.\n */\n@Injectable()\nexport class FillAssessmentSessionCommand implements AXPCommand<FillAssessmentSessionCommandInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly router = inject(Router);\n private readonly entityService = inject(AXPEntityService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly translationService = inject(AXTranslationService);\n private readonly debug = inject(AXPDebugService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: FillAssessmentSessionCommandInput): AXPCommandExecuteResultPromise<void> {\n try {\n const assessmentCase = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>()\n .byKey(input.caseId);\n if (!assessmentCase) {\n return {\n success: false,\n message: { text: `Assessment case with ID ${input.caseId} not found` },\n metadata: { outcome: 'Cancelled' },\n };\n }\n\n const questionnaire = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(assessmentCase.questionnaireId);\n if (!questionnaire) {\n return {\n success: false,\n message: { text: `Questionnaire with ID ${assessmentCase.questionnaireId} not found` },\n metadata: { outcome: 'Cancelled' },\n };\n }\n\n const questions = questionnaire.questions ?? { sections: [] };\n const structure: QuestionnaireBuilderValue = {\n ...questions,\n sections: questions.sections ?? [],\n displaySettings: toDisplaySettings(questionnaire) ?? undefined,\n printSettings: toPrintSettings(questionnaire) ?? undefined,\n };\n if (!structure.sections.length) {\n return {\n success: false,\n message: { text: 'Questionnaire has no questions to display' },\n metadata: { outcome: 'Cancelled' },\n };\n }\n\n const currentUser = this.sessionService.user;\n const responderId = input.responderId || currentUser?.id;\n if (!responderId) {\n return {\n success: false,\n message: { text: 'No responder ID provided and no current user found' },\n metadata: { outcome: 'Cancelled' },\n };\n }\n\n const role = input.role || 'responder';\n const displaySettings = toDisplaySettings(questionnaire);\n const completionMode: QuestionnaireCompletionMode =\n input.completionMode ?? normalizeCompletionMode(displaySettings?.completionMode);\n\n let existingSession: AXMAssessmentManagementAssessmentSessionEntityModel | null = null;\n let sessionId = input.sessionId ?? null;\n let initialAnswers: Record<string, unknown> = {};\n\n if (sessionId) {\n existingSession = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(sessionId);\n if (existingSession) {\n initialAnswers = (existingSession.answers as Record<string, unknown>) || {};\n }\n }\n\n const sessionSubmitted = existingSession?.statusId === 'submitted';\n\n const showAs = input.showAs ?? 'popup';\n const appName = this.sessionService.application?.name ?? 'demo';\n const moduleRoute = (RootConfig.module as { route?: string }).route ?? 'assessment-management';\n\n if (showAs === 'page') {\n const path = `/${appName}/${moduleRoute}/questionnaire/fill/${input.caseId}`;\n const url = sessionId ? `${path}?sessionId=${encodeURIComponent(sessionId)}` : path;\n this.router.navigateByUrl(url);\n return { success: true, kind: 'object', data: undefined, metadata: { outcome: 'Cancelled' } };\n }\n\n if (showAs === 'standalone') {\n let sessionIdToOpen = sessionId;\n if (!sessionIdToOpen) {\n const now = new Date();\n sessionIdToOpen = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .create({\n caseId: input.caseId,\n responderId,\n role,\n answers: {},\n progressPercentage: 0,\n answeredQuestionsCount: 0,\n lastSavedAt: now,\n startedAt: now,\n statusId: 'not-started',\n } as Omit<AXMAssessmentManagementAssessmentSessionEntityModel, 'id'>);\n }\n if (sessionIdToOpen) {\n this.router.navigateByUrl(`/assessment/fill/${sessionIdToOpen}`);\n }\n return { success: true, kind: 'object', data: undefined, metadata: { outcome: 'Cancelled' } };\n }\n\n const viewerTitle = await this.resolveViewerTitle(input.title, assessmentCase.title);\n\n const viewerConfig = {\n readonly: sessionSubmitted,\n completionMode,\n validationStrategy: displaySettings?.validationStrategy,\n viewMode: displaySettings?.viewMode,\n showProgressBar: displaySettings?.showProgressBar,\n timer: { showTimer: displaySettings?.showTimer ?? false },\n showQuestionNumbers: displaySettings?.showQuestionNumbers,\n readonlyAnswerKeys: input.readonlyAnswerKeys,\n };\n\n const result = await this.questionnaireViewerService.open({\n title: viewerTitle,\n structure,\n prePostConfig: toPrePostConfig(questionnaire),\n config: viewerConfig,\n initialAnswers,\n questionnaireId: questionnaire.id,\n assessmentFillContext: sessionSubmitted\n ? undefined\n : {\n caseId: input.caseId,\n sessionId: sessionId ?? null,\n responderId,\n role,\n },\n });\n\n const outcome = await this.resolveFillOutcome(input.caseId, input.sessionId ?? sessionId, result);\n this.debug.trace(\n 'assessment-management',\n 'fill-assessment-session',\n 'Resolved fill workflow outcome',\n () => ({\n caseId: input.caseId,\n sessionId: input.sessionId ?? sessionId,\n popupResult: {\n saved: result?.saved === true,\n submitted: result?.submitted === true,\n hasPayload: result != null,\n },\n outcome,\n }),\n );\n return { success: true, kind: 'object', data: undefined, metadata: { outcome },\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error('Error filling assessment session:', error);\n return {\n success: false,\n message: { text: `Error filling assessment session: ${message}` },\n metadata: { outcome: 'Cancelled' },\n };\n }\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n /**\n * Resolves popup title: explicit input, then case title, then translated default.\n */\n private async resolveViewerTitle(\n inputTitle: AXPMultiLanguageString | undefined,\n caseTitle: string | undefined,\n ): Promise<string> {\n const explicit = this.normalizeTitle(inputTitle);\n if (explicit) {\n return explicit;\n }\n\n const fromCase = this.normalizeTitle(caseTitle);\n if (fromCase) {\n return fromCase;\n }\n\n const fillTitleKey = '@assessment-management:cases.actions.fill-assessment.title';\n const fillTitleBase = await this.translationService.translateAsync(fillTitleKey);\n return fillTitleBase || 'Fill Assessment';\n }\n\n /** Resolves a multi-language or plain string title for the active locale. */\n private normalizeTitle(value: AXPMultiLanguageString | string | undefined | null | false): string {\n if (value == null || value === false) {\n return '';\n }\n if (typeof value === 'string') {\n return value.trim();\n }\n const locale = this.translationService.getActiveLang();\n return resolveMultiLanguageString(value, locale).trim();\n }\n\n /**\n * Resolves workflow outcome from popup result, falling back to persisted session status only\n * when the popup is dismissed without an explicit close payload.\n * After submit the viewer may show a summary step; closing via X without \"Done\" still leaves\n * the session submitted and must advance the workflow. Save-as-draft always sends an explicit\n * payload ({ saved: true }); inferring Submitted from the DB when a payload exists can wrongly\n * advance the workflow if flags are missing or a stale submitted session is resolved.\n */\n private async resolveFillOutcome(\n caseId: string,\n sessionId: string | null | undefined,\n result: { submitted?: boolean; saved?: boolean } | null | undefined,\n ): Promise<FillAssessmentSessionOutcome> {\n if (result?.saved) {\n return 'Saved';\n }\n if (result?.submitted) {\n return 'Submitted';\n }\n\n if (result != null) {\n return 'Cancelled';\n }\n\n const sessionSubmitted = await this.isAssessmentSessionSubmitted(caseId, sessionId);\n if (sessionSubmitted) {\n return 'Submitted';\n }\n\n return 'Cancelled';\n }\n\n private async isAssessmentSessionSubmitted(\n caseId: string,\n sessionId: string | null | undefined,\n ): Promise<boolean> {\n const resolvedSessionId = this.resolveText(sessionId) || (await this.findLatestSessionIdForCase(caseId));\n if (!resolvedSessionId) {\n return false;\n }\n\n const session = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(resolvedSessionId);\n\n return get(session, 'statusId') === 'submitted';\n }\n\n private async findLatestSessionIdForCase(caseId: string): Promise<string> {\n const page = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .query({\n skip: 0,\n take: 1,\n sort: [{ field: 'lastSavedAt', direction: 'desc' }],\n filter: {\n logic: 'and',\n filters: [{ field: 'caseId', operator: { type: 'equal' }, value: caseId }],\n },\n } as never);\n\n const session = first(defaultTo(get(page, 'items'), []));\n return this.resolveText(get(session, 'id'));\n }\n\n private resolveText(value: unknown): string {\n if (!isString(value)) {\n return '';\n }\n return value.trim();\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { AXPEntityService } from '@acorex-platform/framework-client/layout/entit
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
5
  import { RootConfig } from '@acorex-platform/module-assessment-management-client/contracts';
6
- import { A as AXMQuestionnaireViewerService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs';
6
+ import { A as AXMQuestionnaireViewerService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-YfOwCCLz.mjs';
7
7
 
8
8
  //#endregion
9
9
  //#region ---- Preview Question Command ----
@@ -120,4 +120,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
120
120
  }] });
121
121
 
122
122
  export { PreviewQuestionCommand };
123
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-preview-question.command-C1ODQxDn.mjs.map
123
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-preview-question.command-BR3YNIEg.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-preview-question.command-C1ODQxDn.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-viewer/commands/preview-question.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-assessment-management-client/contracts';\nimport type { AXMAssessmentManagementQuestionBankItemEntityModel } from '@acorex-platform/module-assessment-management-client/contracts';\nimport { QuestionnaireBuilderValue } from '@acorex-platform/module-assessment-management-client/contracts';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\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 data?: Record<string, unknown>;\n options?: Record<string, unknown>;\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): string | undefined {\n const record = input as Record<string, unknown>;\n const ctxData = input.data as Record<string, unknown> | undefined;\n const ctxOptions = input.options as Record<string, unknown> | undefined;\n const asString = (v: unknown): string | undefined => (typeof v === 'string' && v.length > 0 ? v : undefined);\n return (\n asString(input.id) ??\n asString(record['questionBankItemId']) ??\n asString(ctxOptions?.['questionBankItemId']) ??\n asString(ctxData?.['id']) ??\n asString(record['id'])\n );\n }\n\n async execute(input: PreviewQuestionCommandInput): AXPCommandExecuteResultPromise<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 = '@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: { previewMode: true },\n });\n\n return {\n success: true,\n kind: 'object',\n data: undefined,\n message: { text: '' },\n metadata: { refresh: false },\n };\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-platform-module-assessment-management-client-preview-question.command-BR3YNIEg.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-viewer/commands/preview-question.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-assessment-management-client/contracts';\nimport type { AXMAssessmentManagementQuestionBankItemEntityModel } from '@acorex-platform/module-assessment-management-client/contracts';\nimport { QuestionnaireBuilderValue } from '@acorex-platform/module-assessment-management-client/contracts';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\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 data?: Record<string, unknown>;\n options?: Record<string, unknown>;\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): string | undefined {\n const record = input as Record<string, unknown>;\n const ctxData = input.data as Record<string, unknown> | undefined;\n const ctxOptions = input.options as Record<string, unknown> | undefined;\n const asString = (v: unknown): string | undefined => (typeof v === 'string' && v.length > 0 ? v : undefined);\n return (\n asString(input.id) ??\n asString(record['questionBankItemId']) ??\n asString(ctxOptions?.['questionBankItemId']) ??\n asString(ctxData?.['id']) ??\n asString(record['id'])\n );\n }\n\n async execute(input: PreviewQuestionCommandInput): AXPCommandExecuteResultPromise<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 = '@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: { previewMode: true },\n });\n\n return {\n success: true,\n kind: 'object',\n data: undefined,\n message: { text: '' },\n metadata: { refresh: false },\n };\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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"}
@@ -2,7 +2,7 @@ import { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/t
2
2
  import * as i0 from '@angular/core';
3
3
  import { inject, Injectable } from '@angular/core';
4
4
  import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
5
- import { A as AXMQuestionnaireViewerService, g as formatQuestionnairePreviewDialogTitle } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs';
5
+ import { A as AXMQuestionnaireViewerService, g as formatQuestionnairePreviewDialogTitle } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-YfOwCCLz.mjs';
6
6
  import { RootConfig, toPrePostConfig, toDisplaySettings, toPrintSettings } from '@acorex-platform/module-assessment-management-client/contracts';
7
7
 
8
8
  //#endregion
@@ -162,4 +162,4 @@ function asEntityId(value) {
162
162
  }
163
163
 
164
164
  export { AXPPreviewQuestionnaireCommand };
165
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-preview-questionnaire.command-DBm7ve4w.mjs.map
165
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-preview-questionnaire.command-D9Y57_r2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-preview-questionnaire.command-DBm7ve4w.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-viewer/commands/preview-questionnaire.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXMQuestionnaireViewerService } from '../../../features/questionnaire-viewer/questionnaire-viewer.service';\nimport {\n type AXMAssessmentManagementQuestionnaireEntityModel,\n toDisplaySettings,\n toPrePostConfig,\n toPrintSettings,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-assessment-management-client/contracts';\nimport { formatQuestionnairePreviewDialogTitle } from '../utils/questionnaire-preview-title.util';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * Input for PreviewQuestionnaire command.\n */\nexport interface AXPPreviewQuestionnaireCommandInput {\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 `options` (see entity-master-list view model). */\ntype AXPPreviewQuestionnaireCommandInvocation = AXPPreviewQuestionnaireCommandInput & {\n data?: Record<string, unknown>;\n options?: Partial<AXPPreviewQuestionnaireCommandInput> & Record<string, unknown>;\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 AXPPreviewQuestionnaireCommand implements AXPCommand<AXPPreviewQuestionnaireCommandInput, 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\n //#endregion\n\n //#region ---- Command Implementation ----\n\n /**\n * Resolves questionnaire id/title from root input or from entity action payload (`options` / row `data`).\n */\n private resolvePayload(input: AXPPreviewQuestionnaireCommandInvocation): AXPPreviewQuestionnaireCommandInput | null {\n const ctxOpts = input.options;\n const ctxData = input.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: AXPPreviewQuestionnaireCommandInvocation): AXPCommandExecuteResultPromise<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 locale = this.translationService.getActiveLang?.() ?? 'en-US';\n const entityTitle = resolveMultiLanguageString(questionnaire.title, locale).trim();\n const displayTitle = questionnaireTitle?.trim() || entityTitle || undefined;\n const previewTitle = formatQuestionnairePreviewDialogTitle(previewTitleBase, displayTitle);\n\n const cfg = toPrePostConfig(questionnaire);\n const displaySettings = toDisplaySettings(questionnaire);\n const questions = questionnaire.questions;\n const structure = {\n sections: questions?.sections ?? [],\n displaySettings: displaySettings ?? undefined,\n printSettings: toPrintSettings(questionnaire) ?? undefined,\n };\n const result = await this.questionnaireViewerService.open({\n title: previewTitle,\n structure,\n prePostConfig: cfg,\n config: {\n previewMode: true,\n completionMode: 'submit-only',\n viewMode: displaySettings?.viewMode,\n showProgressBar: displaySettings?.showProgressBar,\n timer: { showTimer: displaySettings?.showTimer ?? false },\n showQuestionNumbers: displaySettings?.showQuestionNumbers,\n validationStrategy: displaySettings?.validationStrategy,\n },\n questionnaireId,\n printTemplateId: asEntityId(questionnaire.printTemplateId),\n submitHandler: async (answers: Record<string, any>) =>\n this.questionnaireViewerService.buildSummaryPlaceholderValues(structure, answers, {\n questionnaireId,\n }),\n });\n\n if (result?.submitted && result.answers) {\n return {\n success: true,\n kind: 'object',\n data: undefined,\n metadata: { outcome: 'Previewed', refresh: false },\n };\n }\n return {\n success: true,\n kind: 'object',\n data: undefined,\n metadata: { outcome: 'Cancelled', refresh: 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\nfunction asEntityId(value: unknown): string | undefined {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n if (value && typeof value === 'object' && 'id' in value) {\n return asEntityId((value as { id: unknown }).id);\n }\n return undefined;\n}\n\n//#endregion\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-preview-questionnaire.command-D9Y57_r2.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-viewer/commands/preview-questionnaire.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXMQuestionnaireViewerService } from '../../../features/questionnaire-viewer/questionnaire-viewer.service';\nimport {\n type AXMAssessmentManagementQuestionnaireEntityModel,\n toDisplaySettings,\n toPrePostConfig,\n toPrintSettings,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-assessment-management-client/contracts';\nimport { formatQuestionnairePreviewDialogTitle } from '../utils/questionnaire-preview-title.util';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * Input for PreviewQuestionnaire command.\n */\nexport interface AXPPreviewQuestionnaireCommandInput {\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 `options` (see entity-master-list view model). */\ntype AXPPreviewQuestionnaireCommandInvocation = AXPPreviewQuestionnaireCommandInput & {\n data?: Record<string, unknown>;\n options?: Partial<AXPPreviewQuestionnaireCommandInput> & Record<string, unknown>;\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 AXPPreviewQuestionnaireCommand implements AXPCommand<AXPPreviewQuestionnaireCommandInput, 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\n //#endregion\n\n //#region ---- Command Implementation ----\n\n /**\n * Resolves questionnaire id/title from root input or from entity action payload (`options` / row `data`).\n */\n private resolvePayload(input: AXPPreviewQuestionnaireCommandInvocation): AXPPreviewQuestionnaireCommandInput | null {\n const ctxOpts = input.options;\n const ctxData = input.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: AXPPreviewQuestionnaireCommandInvocation): AXPCommandExecuteResultPromise<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 locale = this.translationService.getActiveLang?.() ?? 'en-US';\n const entityTitle = resolveMultiLanguageString(questionnaire.title, locale).trim();\n const displayTitle = questionnaireTitle?.trim() || entityTitle || undefined;\n const previewTitle = formatQuestionnairePreviewDialogTitle(previewTitleBase, displayTitle);\n\n const cfg = toPrePostConfig(questionnaire);\n const displaySettings = toDisplaySettings(questionnaire);\n const questions = questionnaire.questions;\n const structure = {\n sections: questions?.sections ?? [],\n displaySettings: displaySettings ?? undefined,\n printSettings: toPrintSettings(questionnaire) ?? undefined,\n };\n const result = await this.questionnaireViewerService.open({\n title: previewTitle,\n structure,\n prePostConfig: cfg,\n config: {\n previewMode: true,\n completionMode: 'submit-only',\n viewMode: displaySettings?.viewMode,\n showProgressBar: displaySettings?.showProgressBar,\n timer: { showTimer: displaySettings?.showTimer ?? false },\n showQuestionNumbers: displaySettings?.showQuestionNumbers,\n validationStrategy: displaySettings?.validationStrategy,\n },\n questionnaireId,\n printTemplateId: asEntityId(questionnaire.printTemplateId),\n submitHandler: async (answers: Record<string, any>) =>\n this.questionnaireViewerService.buildSummaryPlaceholderValues(structure, answers, {\n questionnaireId,\n }),\n });\n\n if (result?.submitted && result.answers) {\n return {\n success: true,\n kind: 'object',\n data: undefined,\n metadata: { outcome: 'Previewed', refresh: false },\n };\n }\n return {\n success: true,\n kind: 'object',\n data: undefined,\n metadata: { outcome: 'Cancelled', refresh: 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\nfunction asEntityId(value: unknown): string | undefined {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n if (value && typeof value === 'object' && 'id' in value) {\n return asEntityId((value as { id: unknown }).id);\n }\n return undefined;\n}\n\n//#endregion\n\n"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ import { AsyncPipe } from '@angular/common';
12
12
  import * as i0 from '@angular/core';
13
13
  import { inject, computed, signal, model, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
14
14
  import { isEqual } from 'lodash';
15
- import { s as stripQuestionBankInterfaceMetadata, r as resolveWidgetNodeFromMetaDataDefinitionInterface } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs';
15
+ import { s as stripQuestionBankInterfaceMetadata, r as resolveWidgetNodeFromMetaDataDefinitionInterface } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-YfOwCCLz.mjs';
16
16
  import * as i2 from '@acorex/components/decorators';
17
17
  import { AXDecoratorModule } from '@acorex/components/decorators';
18
18
 
@@ -486,4 +486,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
486
486
  }], 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"] }] } });
487
487
 
488
488
  export { AXMQuestionBankInterfaceEditorWidgetEditComponent };
489
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Bbl-efrl.mjs.map
489
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-BqIo3Zhp.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Bbl-efrl.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/question-bank-interface-editor-widget/question-bank-interface-editor-widget-edit.component.ts"],"sourcesContent":["import { RootConfig as DataManagementRootConfig } from '@acorex-platform/module-data-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n//#region ---- Imports ----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXButtonModule } from '@acorex/components/button';\nimport {\n AXTranslationModule,\n AXTranslationService,\n} from '@acorex/core/translation';\nimport { AXMetaDataConfiguratorComponent } from '@acorex-platform/module-data-management-client';\nimport { type AXMMetaDataDefinitionEntityModel } from '@acorex-platform/module-data-management-client/contracts';\nimport {\n AXPMultiLanguageString,\n type AXPWidgetNode,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetFieldConfiguratorComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/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';\nimport {\n resolveWidgetNodeFromMetaDataDefinitionInterface,\n stripQuestionBankInterfaceMetadata,\n} from '../../../../entities/question-bank-item/question-bank-interface.utils';\nimport type {\n AXMQuestionBankItemInterfaceMetadata,\n AXMQuestionBankItemInterfaceValue,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction hasMetadataProvenance(\n v: AXMQuestionBankItemInterfaceValue | null | undefined,\n): boolean {\n const id = v?.metadata?.id;\n return id != null && String(id).trim() !== '';\n}\n\nfunction hasConfiguredWidget(\n v: AXMQuestionBankItemInterfaceValue | null | undefined,\n): 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=\"flex flex-col gap-1\">\n @if (isInitialized()) {\n @if (showSourceChoice()) {\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm 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=\"flex w-full gap-2\">\n <ax-button\n class=\"flex-1\"\n type=\"button\"\n look=\"twotone\"\n color=\"primary\"\n [disabled]=\"readonly()\"\n [text]=\"\n ('@assessment-management:question-bank.entities.question-bank-item.fields.interface.editor-mode-widget'\n | translate\n | async)!\n \"\n (onClick)=\"chooseWidgetSource()\"\n >\n <ax-icon icon=\"fa-solid fa-puzzle-piece\"></ax-icon>\n </ax-button>\n <ax-button\n class=\"flex-1\"\n type=\"button\"\n look=\"twotone\"\n color=\"secondary\"\n [disabled]=\"readonly()\"\n [text]=\"\n ('@assessment-management:question-bank.entities.question-bank-item.fields.interface.editor-mode-meta-data'\n | translate\n | async)!\n \"\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=\"text-sm 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=\"flex justify-end ax-sm\">\n <ax-button\n look=\"twotone\"\n color=\"danger\"\n [disabled]=\"readonly()\"\n [text]=\"\n ('@assessment-management:question-bank.entities.question-bank-item.fields.interface.switch-source'\n | translate\n | async)!\n \"\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<AXMQuestionBankItemInterfaceValue | null> {\n private readonly entityService = inject(AXPEntityService);\n //#region ---- Services ----\n\n private readonly translate = inject(AXTranslationService);\n private readonly toast = inject(AXToastService);\n private readonly metaDataDefinitionService = this.entityService\n .withEntity(\n DataManagementRootConfig.module.name,\n DataManagementRootConfig.entities.metaDataDefinition.name,\n )\n .data<any, any>();\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly = computed<boolean>(\n () => this.options()['readonly'] as boolean,\n );\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 (\n typeof fieldTitleValue === 'object' &&\n !Array.isArray(fieldTitleValue)\n ) {\n return fieldTitleValue as Record<string, string>;\n }\n const stringValue = String(fieldTitleValue).trim();\n return stringValue;\n });\n protected label = computed<string>(\n () => (this.options()['label'] as string) || 'Widget Type',\n );\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\n | AXMQuestionBankItemInterfaceValue\n | null\n | 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\n | AXMQuestionBankItemInterfaceValue\n | null\n | 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\n | AXMQuestionBankItemInterfaceValue\n | null\n | 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 () =>\n this.interfaceIsUnset() &&\n this.emptyFlowChoice() === null &&\n !this.readonly(),\n );\n\n protected showReadonlyEmpty = computed<boolean>(\n () =>\n this.interfaceIsUnset() &&\n this.emptyFlowChoice() === null &&\n 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 =\n (full &&\n typeof full === 'object' &&\n (full as AXMQuestionBankItemInterfaceValue).metadata) ||\n 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\n | AXMQuestionBankItemInterfaceValue\n | null\n | 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.byKey(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 )) ??\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\n ? titleRaw\n : String(titleRaw ?? '')) as AXPMultiLanguageString | 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(\n '[QuestionBankInterfaceEditor] metadata definition load failed',\n err,\n );\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":["DataManagementRootConfig","i3"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-BqIo3Zhp.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/question-bank-interface-editor-widget/question-bank-interface-editor-widget-edit.component.ts"],"sourcesContent":["import { RootConfig as DataManagementRootConfig } from '@acorex-platform/module-data-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n//#region ---- Imports ----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXButtonModule } from '@acorex/components/button';\nimport {\n AXTranslationModule,\n AXTranslationService,\n} from '@acorex/core/translation';\nimport { AXMetaDataConfiguratorComponent } from '@acorex-platform/module-data-management-client';\nimport { type AXMMetaDataDefinitionEntityModel } from '@acorex-platform/module-data-management-client/contracts';\nimport {\n AXPMultiLanguageString,\n type AXPWidgetNode,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetFieldConfiguratorComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/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';\nimport {\n resolveWidgetNodeFromMetaDataDefinitionInterface,\n stripQuestionBankInterfaceMetadata,\n} from '../../../../entities/question-bank-item/question-bank-interface.utils';\nimport type {\n AXMQuestionBankItemInterfaceMetadata,\n AXMQuestionBankItemInterfaceValue,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction hasMetadataProvenance(\n v: AXMQuestionBankItemInterfaceValue | null | undefined,\n): boolean {\n const id = v?.metadata?.id;\n return id != null && String(id).trim() !== '';\n}\n\nfunction hasConfiguredWidget(\n v: AXMQuestionBankItemInterfaceValue | null | undefined,\n): 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=\"flex flex-col gap-1\">\n @if (isInitialized()) {\n @if (showSourceChoice()) {\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm 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=\"flex w-full gap-2\">\n <ax-button\n class=\"flex-1\"\n type=\"button\"\n look=\"twotone\"\n color=\"primary\"\n [disabled]=\"readonly()\"\n [text]=\"\n ('@assessment-management:question-bank.entities.question-bank-item.fields.interface.editor-mode-widget'\n | translate\n | async)!\n \"\n (onClick)=\"chooseWidgetSource()\"\n >\n <ax-icon icon=\"fa-solid fa-puzzle-piece\"></ax-icon>\n </ax-button>\n <ax-button\n class=\"flex-1\"\n type=\"button\"\n look=\"twotone\"\n color=\"secondary\"\n [disabled]=\"readonly()\"\n [text]=\"\n ('@assessment-management:question-bank.entities.question-bank-item.fields.interface.editor-mode-meta-data'\n | translate\n | async)!\n \"\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=\"text-sm 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=\"flex justify-end ax-sm\">\n <ax-button\n look=\"twotone\"\n color=\"danger\"\n [disabled]=\"readonly()\"\n [text]=\"\n ('@assessment-management:question-bank.entities.question-bank-item.fields.interface.switch-source'\n | translate\n | async)!\n \"\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<AXMQuestionBankItemInterfaceValue | null> {\n private readonly entityService = inject(AXPEntityService);\n //#region ---- Services ----\n\n private readonly translate = inject(AXTranslationService);\n private readonly toast = inject(AXToastService);\n private readonly metaDataDefinitionService = this.entityService\n .withEntity(\n DataManagementRootConfig.module.name,\n DataManagementRootConfig.entities.metaDataDefinition.name,\n )\n .data<any, any>();\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly = computed<boolean>(\n () => this.options()['readonly'] as boolean,\n );\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 (\n typeof fieldTitleValue === 'object' &&\n !Array.isArray(fieldTitleValue)\n ) {\n return fieldTitleValue as Record<string, string>;\n }\n const stringValue = String(fieldTitleValue).trim();\n return stringValue;\n });\n protected label = computed<string>(\n () => (this.options()['label'] as string) || 'Widget Type',\n );\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\n | AXMQuestionBankItemInterfaceValue\n | null\n | 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\n | AXMQuestionBankItemInterfaceValue\n | null\n | 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\n | AXMQuestionBankItemInterfaceValue\n | null\n | 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 () =>\n this.interfaceIsUnset() &&\n this.emptyFlowChoice() === null &&\n !this.readonly(),\n );\n\n protected showReadonlyEmpty = computed<boolean>(\n () =>\n this.interfaceIsUnset() &&\n this.emptyFlowChoice() === null &&\n 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 =\n (full &&\n typeof full === 'object' &&\n (full as AXMQuestionBankItemInterfaceValue).metadata) ||\n 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\n | AXMQuestionBankItemInterfaceValue\n | null\n | 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.byKey(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 )) ??\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\n ? titleRaw\n : String(titleRaw ?? '')) as AXPMultiLanguageString | 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(\n '[QuestionBankInterfaceEditor] metadata definition load failed',\n err,\n );\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":["DataManagementRootConfig","i3"],"mappings":"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"}
@@ -15,7 +15,7 @@ import * as i0 from '@angular/core';
15
15
  import { inject, input, computed, signal, viewChild, effect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
16
16
  import { first } from 'lodash';
17
17
  import { RootConfig, resolvePrintSettings, AXM_ASSESSMENT_SESSION_PREVIEW_PDF_CLIENT_COMMAND_KEY } from '@acorex-platform/module-assessment-management-client/contracts';
18
- import { A as AXMQuestionnaireViewerService, a as AXMQuestionnairePrintSnapshotService, b as AXMQuestionnairePrintHostComponent, p as persistAssessmentSession, c as AXMQuestionnaireViewerComponent, d as AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent, e as AXMPreQuestionnaireContentComponent, f as AXMPostQuestionnaireContentComponent } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs';
18
+ import { A as AXMQuestionnaireViewerService, a as AXMQuestionnairePrintSnapshotService, b as AXMQuestionnairePrintHostComponent, p as persistAssessmentSession, c as AXMQuestionnaireViewerComponent, d as AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent, e as AXMPreQuestionnaireContentComponent, f as AXMPostQuestionnaireContentComponent } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-YfOwCCLz.mjs';
19
19
 
20
20
  //#region ---- Imports ----
21
21
  //#endregion
@@ -606,4 +606,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
606
606
  }], ctorParameters: () => [], propDecorators: { structure: [{ type: i0.Input, args: [{ isSignal: true, alias: "structure", required: true }] }], prePostConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "prePostConfig", required: false }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], initialAnswers: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialAnswers", required: false }] }], submitHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitHandler", required: false }] }], saveHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveHandler", required: false }] }], assessmentFillContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "assessmentFillContext", required: false }] }], questionnaireId: [{ type: i0.Input, args: [{ isSignal: true, alias: "questionnaireId", required: false }] }], printTemplateId: [{ type: i0.Input, args: [{ isSignal: true, alias: "printTemplateId", required: false }] }], outcomeRules: [{ type: i0.Input, args: [{ isSignal: true, alias: "outcomeRules", required: false }] }], storedOutcomeResults: [{ type: i0.Input, args: [{ isSignal: true, alias: "storedOutcomeResults", required: false }] }], printTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "printTitle", required: false }] }], viewer: [{ type: i0.ViewChild, args: ['viewer', { isSignal: true }] }], printHost: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXMQuestionnairePrintHostComponent), { isSignal: true }] }] } });
607
607
 
608
608
  export { AXMQuestionnaireViewerPopupComponent };
609
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-Djcfg0dv.mjs.map
609
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-EEBL0x9K.mjs.map