@acorex-platform/module-assessment-management-client 0.0.58 → 0.0.59

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 (56) hide show
  1. package/fesm2022/{acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs → acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs} +63 -63
  2. package/fesm2022/{acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs.map → acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs.map} +1 -1
  3. package/fesm2022/{acorex-platform-module-assessment-management-client-assessment-voice.commands-DGYCwZ7v.mjs → acorex-platform-module-assessment-management-client-assessment-voice.commands-6Hw6NQgS.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-assessment-management-client-assessment-voice.commands-DGYCwZ7v.mjs.map → acorex-platform-module-assessment-management-client-assessment-voice.commands-6Hw6NQgS.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-assessment-management-client-fill-assessment-session.command-DY_9qPYh.mjs → acorex-platform-module-assessment-management-client-fill-assessment-session.command-BOzXBvS2.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-assessment-management-client-fill-assessment-session.command-DY_9qPYh.mjs.map → acorex-platform-module-assessment-management-client-fill-assessment-session.command-BOzXBvS2.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-CeLpGSGc.mjs → acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-BU6YLe8q.mjs} +2 -2
  8. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-CeLpGSGc.mjs.map → acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-BU6YLe8q.mjs.map} +1 -1
  9. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer.service-DoO7ZQmw.mjs → acorex-platform-module-assessment-management-client-form-template-viewer.service-CZre8wPB.mjs} +3 -3
  10. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer.service-DoO7ZQmw.mjs.map → acorex-platform-module-assessment-management-client-form-template-viewer.service-CZre8wPB.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-assessment-management-client-index-er5gI6QK.mjs → acorex-platform-module-assessment-management-client-index-BmODQqQ4.mjs} +2 -2
  12. package/fesm2022/{acorex-platform-module-assessment-management-client-index-er5gI6QK.mjs.map → acorex-platform-module-assessment-management-client-index-BmODQqQ4.mjs.map} +1 -1
  13. package/fesm2022/{acorex-platform-module-assessment-management-client-open-form-template.command-Cz23Vkyv.mjs → acorex-platform-module-assessment-management-client-open-form-template.command-C9BMiyDb.mjs} +3 -3
  14. package/fesm2022/{acorex-platform-module-assessment-management-client-open-form-template.command-Cz23Vkyv.mjs.map → acorex-platform-module-assessment-management-client-open-form-template.command-C9BMiyDb.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-form-template.command-DDQOvVpt.mjs → acorex-platform-module-assessment-management-client-preview-form-template.command-L5NxVqdE.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-form-template.command-DDQOvVpt.mjs.map → acorex-platform-module-assessment-management-client-preview-form-template.command-L5NxVqdE.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-question.command-D4YlqMUf.mjs → acorex-platform-module-assessment-management-client-preview-question.command-7GuqlVX4.mjs} +2 -2
  18. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-question.command-D4YlqMUf.mjs.map → acorex-platform-module-assessment-management-client-preview-question.command-7GuqlVX4.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-questionnaire.command-BYh-3EP9.mjs → acorex-platform-module-assessment-management-client-preview-questionnaire.command-ChtB6q9D.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-questionnaire.command-BYh-3EP9.mjs.map → acorex-platform-module-assessment-management-client-preview-questionnaire.command-ChtB6q9D.mjs.map} +1 -1
  21. package/fesm2022/{acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-DARYq7ZJ.mjs → acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Iwdbc86Q.mjs} +2 -2
  22. package/fesm2022/{acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-DARYq7ZJ.mjs.map → acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Iwdbc86Q.mjs.map} +1 -1
  23. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-DIktPLmP.mjs → acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-Q6Wu81xW.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-DIktPLmP.mjs.map → acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-Q6Wu81xW.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-BAoqjZ7K.mjs → acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-CaKML07K.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-BAoqjZ7K.mjs.map → acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-CaKML07K.mjs.map} +1 -1
  27. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-O-d2f3fv.mjs → acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-xDX86cTn.mjs} +2 -2
  28. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-O-d2f3fv.mjs.map → acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-xDX86cTn.mjs.map} +1 -1
  29. package/fesm2022/{acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-D0Rkeywu.mjs → acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-CiMERtrE.mjs} +2 -2
  30. package/fesm2022/{acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-D0Rkeywu.mjs.map → acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-CiMERtrE.mjs.map} +1 -1
  31. package/fesm2022/{acorex-platform-module-assessment-management-client-review-assessment-session.command-CHeyD-AC.mjs → acorex-platform-module-assessment-management-client-review-assessment-session.command-CfqUtmMt.mjs} +2 -2
  32. package/fesm2022/{acorex-platform-module-assessment-management-client-review-assessment-session.command-CHeyD-AC.mjs.map → acorex-platform-module-assessment-management-client-review-assessment-session.command-CfqUtmMt.mjs.map} +1 -1
  33. package/fesm2022/{acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-DlpkbJCZ.mjs → acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-BZxwRr8J.mjs} +3 -3
  34. package/fesm2022/{acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-DlpkbJCZ.mjs.map → acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-BZxwRr8J.mjs.map} +1 -1
  35. package/fesm2022/{acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-t67ngnrD.mjs → acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-hrtJQmvG.mjs} +2 -2
  36. package/fesm2022/{acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-t67ngnrD.mjs.map → acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-hrtJQmvG.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-DHgNcZ60.mjs → acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs} +2 -2
  38. package/fesm2022/{acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-DHgNcZ60.mjs.map → acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs.map} +1 -1
  39. package/fesm2022/{acorex-platform-module-assessment-management-client-template-widget-edit.component-3DZovs7s.mjs → acorex-platform-module-assessment-management-client-template-widget-edit.component-BhW_Wn7N.mjs} +2 -2
  40. package/fesm2022/{acorex-platform-module-assessment-management-client-template-widget-edit.component-3DZovs7s.mjs.map → acorex-platform-module-assessment-management-client-template-widget-edit.component-BhW_Wn7N.mjs.map} +1 -1
  41. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-DRFfLOCE.mjs → acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-Dkaw3T8R.mjs} +2 -2
  42. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-DRFfLOCE.mjs.map → acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-Dkaw3T8R.mjs.map} +1 -1
  43. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-grid.component-DENxbikr.mjs → acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs} +3 -3
  44. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-grid.component-DENxbikr.mjs.map → acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs.map} +1 -1
  45. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-Bcvp2Dx5.mjs → acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-CFu_CQ91.mjs} +3 -3
  46. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-Bcvp2Dx5.mjs.map → acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-CFu_CQ91.mjs.map} +1 -1
  47. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-CrvzEcSh.mjs → acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs} +3 -3
  48. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-CrvzEcSh.mjs.map → acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs.map} +1 -1
  49. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-sSky9nAq.mjs → acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs} +3 -3
  50. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-sSky9nAq.mjs.map → acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs.map} +1 -1
  51. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs → acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs} +2 -2
  52. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs.map → acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs.map} +1 -1
  53. package/fesm2022/{acorex-platform-module-assessment-management-client-view-session-answers.command-CxZirYRJ.mjs → acorex-platform-module-assessment-management-client-view-session-answers.command-YoUUyJ4j.mjs} +2 -2
  54. package/fesm2022/{acorex-platform-module-assessment-management-client-view-session-answers.command-CxZirYRJ.mjs.map → acorex-platform-module-assessment-management-client-view-session-answers.command-YoUUyJ4j.mjs.map} +1 -1
  55. package/fesm2022/acorex-platform-module-assessment-management-client.mjs +1 -1
  56. package/package.json +3 -3
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { s as AXMHeadlessQuestionnaireSessionService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
3
+ import { s as AXMHeadlessQuestionnaireSessionService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.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-DGYCwZ7v.mjs.map
134
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-assessment-voice.commands-6Hw6NQgS.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-assessment-voice.commands-DGYCwZ7v.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-6Hw6NQgS.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 { h as AXMQuestionnaireViewerService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
9
+ import { h as AXMQuestionnaireViewerService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
10
10
  import { RootConfig, toPrintSettings, toDisplaySettings, normalizeCompletionMode, toPrePostConfig } from '@acorex-platform/module-assessment-management-client/contracts';
11
11
 
12
12
  //#endregion
@@ -274,4 +274,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
274
274
  }] });
275
275
 
276
276
  export { FillAssessmentSessionCommand };
277
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-fill-assessment-session.command-DY_9qPYh.mjs.map
277
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-fill-assessment-session.command-BOzXBvS2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-fill-assessment-session.command-DY_9qPYh.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: {\n text: await this.translationService.translateAsync(\n '@assessment-management:commands.fill-assessment-session.errors.case-not-found',\n { params: { caseId: input.caseId } },\n ),\n },\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: {\n text: await this.translationService.translateAsync(\n '@assessment-management:commands.fill-assessment-session.errors.questionnaire-not-found',\n { params: { questionnaireId: assessmentCase.questionnaireId } },\n ),\n },\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: '@assessment-management:commands.fill-assessment-session.errors.no-questions' },\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: '@assessment-management:commands.fill-assessment-session.errors.no-responder' },\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 fallback = await this.translationService.translateAsync(\n '@general:messages.generic.error.description',\n );\n const message = error instanceof Error ? error.message : fallback;\n console.error('Error filling assessment session:', error);\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync(\n '@assessment-management:commands.fill-assessment-session.errors.failed',\n { params: { message } },\n ),\n },\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-BOzXBvS2.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: {\n text: await this.translationService.translateAsync(\n '@assessment-management:commands.fill-assessment-session.errors.case-not-found',\n { params: { caseId: input.caseId } },\n ),\n },\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: {\n text: await this.translationService.translateAsync(\n '@assessment-management:commands.fill-assessment-session.errors.questionnaire-not-found',\n { params: { questionnaireId: assessmentCase.questionnaireId } },\n ),\n },\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: '@assessment-management:commands.fill-assessment-session.errors.no-questions' },\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: '@assessment-management:commands.fill-assessment-session.errors.no-responder' },\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 fallback = await this.translationService.translateAsync(\n '@general:messages.generic.error.description',\n );\n const message = error instanceof Error ? error.message : fallback;\n console.error('Error filling assessment session:', error);\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync(\n '@assessment-management:commands.fill-assessment-session.errors.failed',\n { params: { message } },\n ),\n },\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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"}
@@ -15,7 +15,7 @@ import * as i3 from '@angular/common';
15
15
  import { CommonModule } from '@angular/common';
16
16
  import * as i0 from '@angular/core';
17
17
  import { inject, viewChild, signal, computed, effect, Input, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
18
- import { h as AXMQuestionnaireViewerService, B as resolveSummaryPlaceholders, o as AXMPreQuestionnaireContentComponent, q as AXMPostQuestionnaireContentComponent } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
18
+ import { h as AXMQuestionnaireViewerService, B as resolveSummaryPlaceholders, o as AXMPreQuestionnaireContentComponent, q as AXMPostQuestionnaireContentComponent } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
19
19
 
20
20
  //#region ----- Imports -----
21
21
  const EMPTY_OUTCOME_STRUCTURE = { sections: [] };
@@ -235,4 +235,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
235
235
  }] } });
236
236
 
237
237
  export { AXMFormTemplateViewerPopupComponent };
238
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-CeLpGSGc.mjs.map
238
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-BU6YLe8q.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-CeLpGSGc.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/viewer/pages/form-template-viewer-popup/form-template-viewer-popup.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/form-template/viewer/pages/form-template-viewer-popup/form-template-viewer-popup.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { DomSanitizer, type SafeHtml } from '@angular/platform-browser';\nimport {\n AXP_LOCAL_DATA_SOURCE_STORE,\n AXPWidgetCoreModule,\n createReadonlyLocalDataSourceStore,\n readLocalDataSourcesFromNode,\n} from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPContextChangeEvent, AXPWidgetsCatalog, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport type {\n PrePostConfig,\n QuestionnaireBuilderValue,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n Input,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXMPreQuestionnaireContentComponent } from '../../../../questionnaire-viewer/components/pre-questionnaire-content';\nimport { AXMPostQuestionnaireContentComponent } from '../../../../questionnaire-viewer/components/post-questionnaire-content';\nimport { AXMQuestionnaireViewerService } from '../../../../questionnaire-viewer/questionnaire-viewer.service';\nimport {\n resolveSummaryPlaceholders,\n type SummaryPlaceholderValues,\n} from '../../../../questionnaire-viewer/utils/pre-post-content.utils';\nimport type { AXMFormTemplateViewerConfig, AXMFormTemplateViewerResult } from '../../form-template-viewer.types';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype FormFlowStep = 'pre' | 'form' | 'review' | 'results' | 'summary';\n\nconst EMPTY_OUTCOME_STRUCTURE: QuestionnaireBuilderValue = { sections: [] };\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-form-template-viewer-popup',\n templateUrl: './form-template-viewer-popup.component.html',\n styleUrl: './form-template-viewer-popup.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXButtonModule,\n AXDecoratorModule,\n AXFormModule,\n AXPWidgetCoreModule,\n AXMPreQuestionnaireContentComponent,\n AXMPostQuestionnaireContentComponent,\n ],\n providers: [\n {\n provide: AXP_LOCAL_DATA_SOURCE_STORE,\n useFactory: (host: AXMFormTemplateViewerPopupComponent) =>\n createReadonlyLocalDataSourceStore(() => host.sources()),\n deps: [AXMFormTemplateViewerPopupComponent],\n },\n ],\n})\nexport class AXMFormTemplateViewerPopupComponent extends AXBasePageComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly translationService = inject(AXTranslationService);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly formRef = viewChild<AXFormComponent>('form');\n\n //#endregion\n\n //#region ----- Inputs -----\n\n @Input() set config(value: AXMFormTemplateViewerConfig | undefined) {\n this._config.set(value);\n }\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly _config = signal<AXMFormTemplateViewerConfig | undefined>(undefined);\n protected readonly flowStep = signal<FormFlowStep>('form');\n protected readonly submitResult = signal<SummaryPlaceholderValues | null>(null);\n protected readonly isSubmitting = signal(false);\n protected readonly document = signal({ type: AXPWidgetsCatalog.document } as AXPWidgetNode);\n protected readonly currentPageIndex = signal(0);\n private readonly initialFlowApplied = signal(false);\n private readonly templateLoaded = signal(false);\n\n protected context: Record<string, unknown> = {};\n\n readonly sources = computed(() => readLocalDataSourcesFromNode(this.document()));\n\n protected readonly currentPage = computed(\n () => this.document().children?.[this.currentPageIndex()] ?? ({ type: AXPWidgetsCatalog.pageLayout } as AXPWidgetNode),\n );\n\n protected readonly prePostConfig = computed((): PrePostConfig | null => this._config()?.prePostConfig ?? null);\n\n protected readonly widgetMode = computed(() =>\n this._config()?.readOnly || this.flowStep() === 'review' ? 'view' : 'edit',\n );\n\n protected readonly showReviewButton = computed(\n () => this.flowStep() === 'form' && !this._config()?.readOnly && this.prePostConfig()?.post?.reviewEnabled === true,\n );\n\n protected readonly showSubmitButton = computed(\n () => this.flowStep() === 'form' && !this._config()?.readOnly && !this.showReviewButton(),\n );\n\n protected readonly isPreviewMode = computed(() => this._config()?.previewMode === true);\n\n protected readonly submitActionLabel = computed(() =>\n this.isPreviewMode()\n ? '@form-template-management:templates.viewer.preview.finish.title'\n : '@general:actions.submit.title',\n );\n\n /** Summary rich text with outcome placeholders. Empty author content stays blank. */\n protected readonly summaryHtml = computed((): SafeHtml | '' => {\n const content = this.prePostConfig()?.post?.summaryContent;\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n let resolved = resolveMultiLanguageString(content, locale);\n const values = this.submitResult();\n if (resolved && values) {\n resolved = resolveSummaryPlaceholders(resolved, values);\n }\n return resolved ? this.sanitizer.bypassSecurityTrustHtml(resolved) : '';\n });\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const cfg = this._config();\n if (!cfg) {\n return;\n }\n if (!this.templateLoaded()) {\n this.loadTemplate(cfg);\n this.templateLoaded.set(true);\n }\n if (!this.initialFlowApplied()) {\n this.flowStep.set(cfg.prePostConfig?.pre?.enabled === true ? 'pre' : 'form');\n this.initialFlowApplied.set(true);\n }\n });\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected handleContextChanged(event: AXPContextChangeEvent): void {\n this.context = event.data ?? {};\n }\n\n protected handleCancel(): void {\n this.finish(true);\n }\n\n protected handleStart(): void {\n this.flowStep.set('form');\n }\n\n protected handleEdit(): void {\n this.flowStep.set('form');\n }\n\n protected async handleReviewClick(): Promise<void> {\n if (!(await this.validateForm())) {\n return;\n }\n this.flowStep.set('review');\n }\n\n protected async handleSubmitClick(): Promise<void> {\n if (this.flowStep() === 'form' && !(await this.validateForm())) {\n return;\n }\n await this.advanceAfterSubmit();\n }\n\n protected handleResultsNext(): void {\n if (this.prePostConfig()?.post?.summaryEnabled) {\n this.flowStep.set('summary');\n return;\n }\n this.finish(false);\n }\n\n protected handleDone(): void {\n this.finish(false);\n }\n\n //#endregion\n\n //#region ----- Template Loading -----\n\n private loadTemplate(config: AXMFormTemplateViewerConfig): void {\n let templateData: AXPWidgetNode;\n if (typeof config.template === 'string') {\n try {\n templateData = JSON.parse(config.template) as AXPWidgetNode;\n } catch (error) {\n console.error('Failed to parse form template JSON:', error);\n return;\n }\n } else {\n templateData = config.template;\n }\n this.document.set(templateData);\n if (config.context) {\n this.context = { ...config.context };\n }\n }\n\n //#endregion\n\n //#region ----- Submit Flow -----\n\n private async validateForm(): Promise<boolean> {\n const form = this.formRef();\n if (!form) {\n return false;\n }\n const formResult = await form.validate();\n return formResult.result === true;\n }\n\n private async advanceAfterSubmit(): Promise<void> {\n if (this.isSubmitting()) {\n return;\n }\n this.isSubmitting.set(true);\n try {\n const rules = this._config()?.outcomeRules ?? [];\n const post = this.prePostConfig()?.post;\n let placeholders: SummaryPlaceholderValues | null = null;\n if (rules.length > 0) {\n placeholders = await this.questionnaireViewerService.buildSummaryPlaceholderValues(\n EMPTY_OUTCOME_STRUCTURE,\n this.context,\n { outcomeRules: rules },\n );\n }\n this.submitResult.set(placeholders);\n if (post?.showOutcomeResults) {\n this.flowStep.set('results');\n return;\n }\n if (post?.summaryEnabled) {\n this.flowStep.set('summary');\n return;\n }\n this.finish(false);\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n private finish(cancelled: boolean): void {\n const result: AXMFormTemplateViewerResult = {\n context: this.context,\n cancelled,\n metadata: this._config()?.metadata,\n };\n this.close(result);\n }\n\n //#endregion\n}\n\n//#endregion\n","<div\n class=\"__content-area flex flex-1 min-h-0 flex-col\"\n [class.overflow-hidden]=\"flowStep() === 'form' || flowStep() === 'review'\"\n [class.overflow-y-auto]=\"flowStep() !== 'form' && flowStep() !== 'review'\"\n>\n <!-- ----- Welcome content before the form ----- -->\n @if (flowStep() === 'pre') {\n <axm-pre-questionnaire-content [content]=\"prePostConfig()?.pre?.content\"></axm-pre-questionnaire-content>\n }\n <!-- ----- Outcome results after submit ----- -->\n @else if (flowStep() === 'results') {\n <axm-post-questionnaire-content mode=\"results\" [placeholderValues]=\"submitResult()\"></axm-post-questionnaire-content>\n }\n <!-- ----- Summary content after submit ----- -->\n @else if (flowStep() === 'summary') {\n <div class=\"flex flex-col items-center justify-center p-8 min-h-[200px] text-on-surface\">\n <div class=\"max-w-2xl w-full prose text-on-surface\" [innerHTML]=\"summaryHtml()\"></div>\n </div>\n }\n <!-- ----- Form body, including readonly review ----- -->\n @else {\n <!-- ----- Review heading while the filled form is shown read-only ----- -->\n @if (flowStep() === 'review') {\n <div class=\"p-4 border-b border-surface\">\n <h2 class=\"text-lg font-semibold text-on-surface\">\n {{ '@form-template-management:templates.viewer.flow.review-title' | translate | async }}\n </h2>\n </div>\n }\n <div class=\"flex flex-1 min-h-0 flex-col overflow-y-auto overflow-x-hidden p-4\">\n <ax-form #form>\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"handleContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"currentPage()\" [mode]=\"widgetMode()\"></ng-container>\n </axp-widgets-container>\n </ax-form>\n </div>\n }\n</div>\n\n<ax-footer class=\"__popup-footer flex-shrink-0 border-t px-4 py-3\">\n <ax-suffix>\n <!-- ----- Welcome step ----- -->\n @if (flowStep() === 'pre') {\n <ax-button\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"handleCancel()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:templates.viewer.flow.start' | translate | async\"\n (onClick)=\"handleStart()\"\n ></ax-button>\n }\n <!-- ----- Fill step ----- -->\n @else if (flowStep() === 'form') {\n <ax-button\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"handleCancel()\"\n ></ax-button>\n <!-- ----- Review before submit when post review is enabled ----- -->\n @if (showReviewButton()) {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:templates.viewer.flow.review' | translate | async\"\n [disabled]=\"isSubmitting()\"\n (onClick)=\"handleReviewClick()\"\n ></ax-button>\n }\n <!-- ----- Submit when review is off ----- -->\n @else if (showSubmitButton()) {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"submitActionLabel() | translate | async\"\n [disabled]=\"isSubmitting()\"\n (onClick)=\"handleSubmitClick()\"\n ></ax-button>\n }\n }\n <!-- ----- Review step ----- -->\n @else if (flowStep() === 'review') {\n <ax-button\n look=\"outline\"\n [text]=\"'@form-template-management:templates.viewer.flow.edit' | translate | async\"\n (onClick)=\"handleEdit()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"submitActionLabel() | translate | async\"\n [disabled]=\"isSubmitting()\"\n (onClick)=\"handleSubmitClick()\"\n ></ax-button>\n }\n <!-- ----- Outcome results step ----- -->\n @else if (flowStep() === 'results') {\n <!-- ----- Continue to the summary when it is enabled ----- -->\n @if (prePostConfig()?.post?.summaryEnabled) {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.next.title' | translate | async\"\n (onClick)=\"handleResultsNext()\"\n ></ax-button>\n }\n <!-- ----- Close when there is no summary step ----- -->\n @else {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:templates.viewer.flow.done' | translate | async\"\n (onClick)=\"handleDone()\"\n ></ax-button>\n }\n }\n <!-- ----- Summary step ----- -->\n @else if (flowStep() === 'summary') {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:templates.viewer.flow.done' | translate | async\"\n (onClick)=\"handleDone()\"\n ></ax-button>\n }\n </ax-suffix>\n</ax-footer>\n"],"names":["i3","i4","i5","i6"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-BU6YLe8q.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/viewer/pages/form-template-viewer-popup/form-template-viewer-popup.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/form-template/viewer/pages/form-template-viewer-popup/form-template-viewer-popup.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { DomSanitizer, type SafeHtml } from '@angular/platform-browser';\nimport {\n AXP_LOCAL_DATA_SOURCE_STORE,\n AXPWidgetCoreModule,\n createReadonlyLocalDataSourceStore,\n readLocalDataSourcesFromNode,\n} from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPContextChangeEvent, AXPWidgetsCatalog, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport type {\n PrePostConfig,\n QuestionnaireBuilderValue,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n Input,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXMPreQuestionnaireContentComponent } from '../../../../questionnaire-viewer/components/pre-questionnaire-content';\nimport { AXMPostQuestionnaireContentComponent } from '../../../../questionnaire-viewer/components/post-questionnaire-content';\nimport { AXMQuestionnaireViewerService } from '../../../../questionnaire-viewer/questionnaire-viewer.service';\nimport {\n resolveSummaryPlaceholders,\n type SummaryPlaceholderValues,\n} from '../../../../questionnaire-viewer/utils/pre-post-content.utils';\nimport type { AXMFormTemplateViewerConfig, AXMFormTemplateViewerResult } from '../../form-template-viewer.types';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype FormFlowStep = 'pre' | 'form' | 'review' | 'results' | 'summary';\n\nconst EMPTY_OUTCOME_STRUCTURE: QuestionnaireBuilderValue = { sections: [] };\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-form-template-viewer-popup',\n templateUrl: './form-template-viewer-popup.component.html',\n styleUrl: './form-template-viewer-popup.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXButtonModule,\n AXDecoratorModule,\n AXFormModule,\n AXPWidgetCoreModule,\n AXMPreQuestionnaireContentComponent,\n AXMPostQuestionnaireContentComponent,\n ],\n providers: [\n {\n provide: AXP_LOCAL_DATA_SOURCE_STORE,\n useFactory: (host: AXMFormTemplateViewerPopupComponent) =>\n createReadonlyLocalDataSourceStore(() => host.sources()),\n deps: [AXMFormTemplateViewerPopupComponent],\n },\n ],\n})\nexport class AXMFormTemplateViewerPopupComponent extends AXBasePageComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly translationService = inject(AXTranslationService);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly formRef = viewChild<AXFormComponent>('form');\n\n //#endregion\n\n //#region ----- Inputs -----\n\n @Input() set config(value: AXMFormTemplateViewerConfig | undefined) {\n this._config.set(value);\n }\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly _config = signal<AXMFormTemplateViewerConfig | undefined>(undefined);\n protected readonly flowStep = signal<FormFlowStep>('form');\n protected readonly submitResult = signal<SummaryPlaceholderValues | null>(null);\n protected readonly isSubmitting = signal(false);\n protected readonly document = signal({ type: AXPWidgetsCatalog.document } as AXPWidgetNode);\n protected readonly currentPageIndex = signal(0);\n private readonly initialFlowApplied = signal(false);\n private readonly templateLoaded = signal(false);\n\n protected context: Record<string, unknown> = {};\n\n readonly sources = computed(() => readLocalDataSourcesFromNode(this.document()));\n\n protected readonly currentPage = computed(\n () => this.document().children?.[this.currentPageIndex()] ?? ({ type: AXPWidgetsCatalog.pageLayout } as AXPWidgetNode),\n );\n\n protected readonly prePostConfig = computed((): PrePostConfig | null => this._config()?.prePostConfig ?? null);\n\n protected readonly widgetMode = computed(() =>\n this._config()?.readOnly || this.flowStep() === 'review' ? 'view' : 'edit',\n );\n\n protected readonly showReviewButton = computed(\n () => this.flowStep() === 'form' && !this._config()?.readOnly && this.prePostConfig()?.post?.reviewEnabled === true,\n );\n\n protected readonly showSubmitButton = computed(\n () => this.flowStep() === 'form' && !this._config()?.readOnly && !this.showReviewButton(),\n );\n\n protected readonly isPreviewMode = computed(() => this._config()?.previewMode === true);\n\n protected readonly submitActionLabel = computed(() =>\n this.isPreviewMode()\n ? '@form-template-management:templates.viewer.preview.finish.title'\n : '@general:actions.submit.title',\n );\n\n /** Summary rich text with outcome placeholders. Empty author content stays blank. */\n protected readonly summaryHtml = computed((): SafeHtml | '' => {\n const content = this.prePostConfig()?.post?.summaryContent;\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n let resolved = resolveMultiLanguageString(content, locale);\n const values = this.submitResult();\n if (resolved && values) {\n resolved = resolveSummaryPlaceholders(resolved, values);\n }\n return resolved ? this.sanitizer.bypassSecurityTrustHtml(resolved) : '';\n });\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const cfg = this._config();\n if (!cfg) {\n return;\n }\n if (!this.templateLoaded()) {\n this.loadTemplate(cfg);\n this.templateLoaded.set(true);\n }\n if (!this.initialFlowApplied()) {\n this.flowStep.set(cfg.prePostConfig?.pre?.enabled === true ? 'pre' : 'form');\n this.initialFlowApplied.set(true);\n }\n });\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected handleContextChanged(event: AXPContextChangeEvent): void {\n this.context = event.data ?? {};\n }\n\n protected handleCancel(): void {\n this.finish(true);\n }\n\n protected handleStart(): void {\n this.flowStep.set('form');\n }\n\n protected handleEdit(): void {\n this.flowStep.set('form');\n }\n\n protected async handleReviewClick(): Promise<void> {\n if (!(await this.validateForm())) {\n return;\n }\n this.flowStep.set('review');\n }\n\n protected async handleSubmitClick(): Promise<void> {\n if (this.flowStep() === 'form' && !(await this.validateForm())) {\n return;\n }\n await this.advanceAfterSubmit();\n }\n\n protected handleResultsNext(): void {\n if (this.prePostConfig()?.post?.summaryEnabled) {\n this.flowStep.set('summary');\n return;\n }\n this.finish(false);\n }\n\n protected handleDone(): void {\n this.finish(false);\n }\n\n //#endregion\n\n //#region ----- Template Loading -----\n\n private loadTemplate(config: AXMFormTemplateViewerConfig): void {\n let templateData: AXPWidgetNode;\n if (typeof config.template === 'string') {\n try {\n templateData = JSON.parse(config.template) as AXPWidgetNode;\n } catch (error) {\n console.error('Failed to parse form template JSON:', error);\n return;\n }\n } else {\n templateData = config.template;\n }\n this.document.set(templateData);\n if (config.context) {\n this.context = { ...config.context };\n }\n }\n\n //#endregion\n\n //#region ----- Submit Flow -----\n\n private async validateForm(): Promise<boolean> {\n const form = this.formRef();\n if (!form) {\n return false;\n }\n const formResult = await form.validate();\n return formResult.result === true;\n }\n\n private async advanceAfterSubmit(): Promise<void> {\n if (this.isSubmitting()) {\n return;\n }\n this.isSubmitting.set(true);\n try {\n const rules = this._config()?.outcomeRules ?? [];\n const post = this.prePostConfig()?.post;\n let placeholders: SummaryPlaceholderValues | null = null;\n if (rules.length > 0) {\n placeholders = await this.questionnaireViewerService.buildSummaryPlaceholderValues(\n EMPTY_OUTCOME_STRUCTURE,\n this.context,\n { outcomeRules: rules },\n );\n }\n this.submitResult.set(placeholders);\n if (post?.showOutcomeResults) {\n this.flowStep.set('results');\n return;\n }\n if (post?.summaryEnabled) {\n this.flowStep.set('summary');\n return;\n }\n this.finish(false);\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n private finish(cancelled: boolean): void {\n const result: AXMFormTemplateViewerResult = {\n context: this.context,\n cancelled,\n metadata: this._config()?.metadata,\n };\n this.close(result);\n }\n\n //#endregion\n}\n\n//#endregion\n","<div\n class=\"__content-area flex flex-1 min-h-0 flex-col\"\n [class.overflow-hidden]=\"flowStep() === 'form' || flowStep() === 'review'\"\n [class.overflow-y-auto]=\"flowStep() !== 'form' && flowStep() !== 'review'\"\n>\n <!-- ----- Welcome content before the form ----- -->\n @if (flowStep() === 'pre') {\n <axm-pre-questionnaire-content [content]=\"prePostConfig()?.pre?.content\"></axm-pre-questionnaire-content>\n }\n <!-- ----- Outcome results after submit ----- -->\n @else if (flowStep() === 'results') {\n <axm-post-questionnaire-content mode=\"results\" [placeholderValues]=\"submitResult()\"></axm-post-questionnaire-content>\n }\n <!-- ----- Summary content after submit ----- -->\n @else if (flowStep() === 'summary') {\n <div class=\"flex flex-col items-center justify-center p-8 min-h-[200px] text-on-surface\">\n <div class=\"max-w-2xl w-full prose text-on-surface\" [innerHTML]=\"summaryHtml()\"></div>\n </div>\n }\n <!-- ----- Form body, including readonly review ----- -->\n @else {\n <!-- ----- Review heading while the filled form is shown read-only ----- -->\n @if (flowStep() === 'review') {\n <div class=\"p-4 border-b border-surface\">\n <h2 class=\"text-lg font-semibold text-on-surface\">\n {{ '@form-template-management:templates.viewer.flow.review-title' | translate | async }}\n </h2>\n </div>\n }\n <div class=\"flex flex-1 min-h-0 flex-col overflow-y-auto overflow-x-hidden p-4\">\n <ax-form #form>\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"handleContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"currentPage()\" [mode]=\"widgetMode()\"></ng-container>\n </axp-widgets-container>\n </ax-form>\n </div>\n }\n</div>\n\n<ax-footer class=\"__popup-footer flex-shrink-0 border-t px-4 py-3\">\n <ax-suffix>\n <!-- ----- Welcome step ----- -->\n @if (flowStep() === 'pre') {\n <ax-button\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"handleCancel()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:templates.viewer.flow.start' | translate | async\"\n (onClick)=\"handleStart()\"\n ></ax-button>\n }\n <!-- ----- Fill step ----- -->\n @else if (flowStep() === 'form') {\n <ax-button\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"handleCancel()\"\n ></ax-button>\n <!-- ----- Review before submit when post review is enabled ----- -->\n @if (showReviewButton()) {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:templates.viewer.flow.review' | translate | async\"\n [disabled]=\"isSubmitting()\"\n (onClick)=\"handleReviewClick()\"\n ></ax-button>\n }\n <!-- ----- Submit when review is off ----- -->\n @else if (showSubmitButton()) {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"submitActionLabel() | translate | async\"\n [disabled]=\"isSubmitting()\"\n (onClick)=\"handleSubmitClick()\"\n ></ax-button>\n }\n }\n <!-- ----- Review step ----- -->\n @else if (flowStep() === 'review') {\n <ax-button\n look=\"outline\"\n [text]=\"'@form-template-management:templates.viewer.flow.edit' | translate | async\"\n (onClick)=\"handleEdit()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"submitActionLabel() | translate | async\"\n [disabled]=\"isSubmitting()\"\n (onClick)=\"handleSubmitClick()\"\n ></ax-button>\n }\n <!-- ----- Outcome results step ----- -->\n @else if (flowStep() === 'results') {\n <!-- ----- Continue to the summary when it is enabled ----- -->\n @if (prePostConfig()?.post?.summaryEnabled) {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.next.title' | translate | async\"\n (onClick)=\"handleResultsNext()\"\n ></ax-button>\n }\n <!-- ----- Close when there is no summary step ----- -->\n @else {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:templates.viewer.flow.done' | translate | async\"\n (onClick)=\"handleDone()\"\n ></ax-button>\n }\n }\n <!-- ----- Summary step ----- -->\n @else if (flowStep() === 'summary') {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:templates.viewer.flow.done' | translate | async\"\n (onClick)=\"handleDone()\"\n ></ax-button>\n }\n </ax-suffix>\n</ax-footer>\n"],"names":["i3","i4","i5","i6"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';
6
6
  import { RootConfig, toPrePostConfig, flattenQuestionnaireOutcomeItems } from '@acorex-platform/module-assessment-management-client/contracts';
7
7
  import * as i0 from '@angular/core';
8
8
  import { inject, Injectable } from '@angular/core';
9
- import { g as formatQuestionnairePreviewDialogTitle } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
9
+ import { g as formatQuestionnairePreviewDialogTitle } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
10
10
 
11
11
  //#region ----- Imports -----
12
12
  //#endregion
@@ -68,7 +68,7 @@ class AXMFormTemplateViewerService {
68
68
  previewMode: input.previewMode === true,
69
69
  };
70
70
  const result = await this.dialogOpener.openPopup({
71
- load: () => import('./acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-CeLpGSGc.mjs').then((module) => module.AXMFormTemplateViewerPopupComponent),
71
+ load: () => import('./acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-BU6YLe8q.mjs').then((module) => module.AXMFormTemplateViewerPopupComponent),
72
72
  data: { id: input.id ?? '', previewMode: input.previewMode === true, readOnly: input.readOnly === true },
73
73
  show: (component) => this.popupService.open(component, {
74
74
  title: popupTitle,
@@ -94,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
94
94
  }] });
95
95
 
96
96
  export { AXMFormTemplateViewerService as A };
97
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-form-template-viewer.service-DoO7ZQmw.mjs.map
97
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-form-template-viewer.service-CZre8wPB.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-form-template-viewer.service-DoO7ZQmw.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/viewer/form-template-viewer.service.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDialogOpener } from '@acorex-platform/framework-client/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPWidgetsCatalog, type AXPMetaData } from '@acorex-platform/framework-shared/core';\nimport {\n flattenQuestionnaireOutcomeItems,\n RootConfig,\n toPrePostConfig,\n type AXMFormTemplateDetailDto,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { formatQuestionnairePreviewDialogTitle } from '../../questionnaire-viewer/utils/questionnaire-preview-title.util';\nimport type {\n AXMFormTemplateViewerConfig,\n AXMFormTemplateViewerOpenStatus,\n AXMFormTemplateViewerResult,\n} from './form-template-viewer.types';\n\n//#endregion\n\n//#region ----- Service -----\n\n/**\n * Opens a form template in the same pre → form → review → results → summary flow as questionnaires.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMFormTemplateViewerService {\n //#region ----- Services & Dependencies -----\n\n private readonly popupService = inject(AXPopupService);\n private readonly dialogOpener = inject(AXPDialogOpener);\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly deviceService = inject(AXPDeviceService);\n\n //#endregion\n\n //#region ----- Public Methods -----\n\n async open(input: {\n id?: string;\n template?: string;\n title?: string;\n metadata?: AXPMetaData;\n readOnly?: boolean;\n previewMode?: boolean;\n context?: Record<string, unknown>;\n }): Promise<AXMFormTemplateViewerResult | AXMFormTemplateViewerOpenStatus> {\n let templateData = input.template;\n let title: string | undefined;\n let prePostConfig = null as AXMFormTemplateViewerConfig['prePostConfig'];\n let outcomeRules: AXMFormTemplateViewerConfig['outcomeRules'] = [];\n\n if (input.id) {\n const item = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.template.name)\n .data<string, AXMFormTemplateDetailDto>()\n .byKey(input.id);\n if (!item) {\n return 'not-found';\n }\n templateData = item.template ?? '';\n title = item.title?.trim() || undefined;\n prePostConfig = toPrePostConfig({ pre: item.pre, post: item.post });\n outcomeRules = flattenQuestionnaireOutcomeItems(item.outcomes);\n }\n\n if (!templateData) {\n if (!input.id) {\n return 'missing';\n }\n templateData = JSON.stringify({\n type: AXPWidgetsCatalog.document,\n children: [{ type: AXPWidgetsCatalog.pageLayout }],\n });\n }\n\n const fallbackTitle =\n (await this.translationService.translateAsync('@form-template-management:templates.viewer.title')) || 'Form';\n const displayTitle = input.title?.trim() || title;\n const popupTitle = input.previewMode\n ? formatQuestionnairePreviewDialogTitle(\n (await this.translationService.translateAsync(\n '@form-template-management:templates.entities.template.actions.preview.title',\n )) || 'Preview',\n displayTitle,\n )\n : displayTitle || fallbackTitle;\n\n const config: AXMFormTemplateViewerConfig = {\n template: templateData,\n title,\n prePostConfig,\n outcomeRules,\n context: input.context ?? {},\n metadata: input.metadata,\n readOnly: input.readOnly === true,\n previewMode: input.previewMode === true,\n };\n\n const result = await this.dialogOpener.openPopup({\n load: () =>\n import('./pages/form-template-viewer-popup/form-template-viewer-popup.component').then(\n (module) => module.AXMFormTemplateViewerPopupComponent,\n ),\n data: { id: input.id ?? '', previewMode: input.previewMode === true, readOnly: input.readOnly === true },\n show: (component) =>\n this.popupService.open(component, {\n title: popupTitle,\n size: this.deviceService.isSmall() ? 'full' : 'lg',\n closeButton: false,\n closeOnBackdropClick: false,\n draggable: false,\n data: { config },\n }),\n });\n\n return (\n (result?.data as AXMFormTemplateViewerResult | undefined) ?? {\n context: input.context ?? {},\n cancelled: true,\n metadata: input.metadata,\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-form-template-viewer.service-CZre8wPB.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/viewer/form-template-viewer.service.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDialogOpener } from '@acorex-platform/framework-client/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPWidgetsCatalog, type AXPMetaData } from '@acorex-platform/framework-shared/core';\nimport {\n flattenQuestionnaireOutcomeItems,\n RootConfig,\n toPrePostConfig,\n type AXMFormTemplateDetailDto,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { formatQuestionnairePreviewDialogTitle } from '../../questionnaire-viewer/utils/questionnaire-preview-title.util';\nimport type {\n AXMFormTemplateViewerConfig,\n AXMFormTemplateViewerOpenStatus,\n AXMFormTemplateViewerResult,\n} from './form-template-viewer.types';\n\n//#endregion\n\n//#region ----- Service -----\n\n/**\n * Opens a form template in the same pre → form → review → results → summary flow as questionnaires.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMFormTemplateViewerService {\n //#region ----- Services & Dependencies -----\n\n private readonly popupService = inject(AXPopupService);\n private readonly dialogOpener = inject(AXPDialogOpener);\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly deviceService = inject(AXPDeviceService);\n\n //#endregion\n\n //#region ----- Public Methods -----\n\n async open(input: {\n id?: string;\n template?: string;\n title?: string;\n metadata?: AXPMetaData;\n readOnly?: boolean;\n previewMode?: boolean;\n context?: Record<string, unknown>;\n }): Promise<AXMFormTemplateViewerResult | AXMFormTemplateViewerOpenStatus> {\n let templateData = input.template;\n let title: string | undefined;\n let prePostConfig = null as AXMFormTemplateViewerConfig['prePostConfig'];\n let outcomeRules: AXMFormTemplateViewerConfig['outcomeRules'] = [];\n\n if (input.id) {\n const item = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.template.name)\n .data<string, AXMFormTemplateDetailDto>()\n .byKey(input.id);\n if (!item) {\n return 'not-found';\n }\n templateData = item.template ?? '';\n title = item.title?.trim() || undefined;\n prePostConfig = toPrePostConfig({ pre: item.pre, post: item.post });\n outcomeRules = flattenQuestionnaireOutcomeItems(item.outcomes);\n }\n\n if (!templateData) {\n if (!input.id) {\n return 'missing';\n }\n templateData = JSON.stringify({\n type: AXPWidgetsCatalog.document,\n children: [{ type: AXPWidgetsCatalog.pageLayout }],\n });\n }\n\n const fallbackTitle =\n (await this.translationService.translateAsync('@form-template-management:templates.viewer.title')) || 'Form';\n const displayTitle = input.title?.trim() || title;\n const popupTitle = input.previewMode\n ? formatQuestionnairePreviewDialogTitle(\n (await this.translationService.translateAsync(\n '@form-template-management:templates.entities.template.actions.preview.title',\n )) || 'Preview',\n displayTitle,\n )\n : displayTitle || fallbackTitle;\n\n const config: AXMFormTemplateViewerConfig = {\n template: templateData,\n title,\n prePostConfig,\n outcomeRules,\n context: input.context ?? {},\n metadata: input.metadata,\n readOnly: input.readOnly === true,\n previewMode: input.previewMode === true,\n };\n\n const result = await this.dialogOpener.openPopup({\n load: () =>\n import('./pages/form-template-viewer-popup/form-template-viewer-popup.component').then(\n (module) => module.AXMFormTemplateViewerPopupComponent,\n ),\n data: { id: input.id ?? '', previewMode: input.previewMode === true, readOnly: input.readOnly === true },\n show: (component) =>\n this.popupService.open(component, {\n title: popupTitle,\n size: this.deviceService.isSmall() ? 'full' : 'lg',\n closeButton: false,\n closeOnBackdropClick: false,\n draggable: false,\n data: { config },\n }),\n });\n\n return (\n (result?.data as AXMFormTemplateViewerResult | undefined) ?? {\n context: input.context ?? {},\n cancelled: true,\n metadata: input.metadata,\n }\n );\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;;;;;AAAA;AAsBA;AAEA;AAEA;;AAEG;MAEU,4BAA4B,CAAA;AADzC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AACtC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AA8F1D,IAAA;;;IAxFC,MAAM,IAAI,CAAC,KAQV,EAAA;AACC,QAAA,IAAI,YAAY,GAAG,KAAK,CAAC,QAAQ;AACjC,QAAA,IAAI,KAAyB;QAC7B,IAAI,aAAa,GAAG,IAAoD;QACxE,IAAI,YAAY,GAAgD,EAAE;AAElE,QAAA,IAAI,KAAK,CAAC,EAAE,EAAE;AACZ,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;AACrB,iBAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;AACpE,iBAAA,IAAI;AACJ,iBAAA,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAO,WAAW;YACpB;AACA,YAAA,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE;YAClC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS;AACvC,YAAA,aAAa,GAAG,eAAe,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AACnE,YAAA,YAAY,GAAG,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChE;QAEA,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;AACb,gBAAA,OAAO,SAAS;YAClB;AACA,YAAA,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC5B,IAAI,EAAE,iBAAiB,CAAC,QAAQ;gBAChC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,UAAU,EAAE,CAAC;AACnD,aAAA,CAAC;QACJ;AAEA,QAAA,MAAM,aAAa,GACjB,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,kDAAkD,CAAC,KAAK,MAAM;QAC9G,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK;AACjD,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC;AACvB,cAAE,qCAAqC,CACnC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAC3C,6EAA6E,CAC9E,KAAK,SAAS,EACf,YAAY;AAEhB,cAAE,YAAY,IAAI,aAAa;AAEjC,QAAA,MAAM,MAAM,GAAgC;AAC1C,YAAA,QAAQ,EAAE,YAAY;YACtB,KAAK;YACL,aAAa;YACb,YAAY;AACZ,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACxB,YAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI;AACjC,YAAA,WAAW,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI;SACxC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AAC/C,YAAA,IAAI,EAAE,MACJ,OAAO,yGAAyE,CAAC,CAAC,IAAI,CACpF,CAAC,MAAM,KAAK,MAAM,CAAC,mCAAmC,CACvD;YACH,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE;AACxG,YAAA,IAAI,EAAE,CAAC,SAAS,KACd,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE;AAChC,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI;AAClD,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,oBAAoB,EAAE,KAAK;AAC3B,gBAAA,SAAS,EAAE,KAAK;gBAChB,IAAI,EAAE,EAAE,MAAM,EAAE;aACjB,CAAC;AACL,SAAA,CAAC;AAEF,QAAA,QACG,MAAM,EAAE,IAAgD,IAAI;AAC3D,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;AAC5B,YAAA,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACzB,SAAA;IAEL;8GAlGW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cADf,MAAM,EAAA,CAAA,CAAA;;2FACnB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -2,7 +2,7 @@ import { AXP_FORM_DESIGNER_SURFACE_PROFILE, AXPLayoutDesignerComponent } from '@
2
2
  import { AXPPageLayoutBaseComponent, AXPPageLayoutBase } from '@acorex-platform/framework-client/layout/views';
3
3
  import * as i0 from '@angular/core';
4
4
  import { input, computed, ChangeDetectionStrategy, Component, Injectable } from '@angular/core';
5
- import { r as resolvePersistedEntityId, F as FORM_TEMPLATE_PAGE_COMPONENT_KEY } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
5
+ import { r as resolvePersistedEntityId, F as FORM_TEMPLATE_PAGE_COMPONENT_KEY } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
6
6
 
7
7
  //#region ----- Component -----
8
8
  /**
@@ -65,4 +65,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
65
65
  }] });
66
66
 
67
67
  export { AXMFormTemplatePageComponent, AXMFormTemplatePageComponentProvider };
68
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-index-er5gI6QK.mjs.map
68
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-index-BmODQqQ4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-index-er5gI6QK.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/content-display/form-template/form-template-page/form-template-page.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/content-display/form-template/form-template-page/form-template-page.component.html","../../../../libs/modules/assessment-management/client/src/lib/features/content-display/form-template/form-template-page/form-template-page-component.provider.ts"],"sourcesContent":["import { AXP_FORM_DESIGNER_SURFACE_PROFILE, AXPLayoutDesignerComponent } from '@acorex-platform/framework-client/layout/designer';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { resolvePersistedEntityId } from '../../../questionnaire-builder/resolve-persisted-entity-id.util';\n\n//#region ----- Component -----\n\n/**\n * Side-menu page that hosts the form layout designer.\n * Used when the form-template plugin display includes `page`.\n */\n@Component({\n selector: 'axm-form-template-page',\n standalone: true,\n imports: [AXPLayoutDesignerComponent],\n templateUrl: './form-template-page.component.html',\n styleUrl: './form-template-page.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMFormTemplatePageComponent,\n },\n ],\n host: {\n '[class.axp-page-layout-base]': 'true',\n },\n})\nexport class AXMFormTemplatePageComponent extends AXPPageLayoutBaseComponent {\n //#region ----- Inputs -----\n\n rootContext = input<Record<string, unknown>>({});\n\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly formSurfaceProfile = AXP_FORM_DESIGNER_SURFACE_PROFILE;\n\n protected readonly templateId = computed(() => resolvePersistedEntityId(this.rootContext()) ?? null);\n\n //#endregion\n}\n\n//#endregion\n","@if (templateId(); as id) {\n <!-- ----- Layout designer for the saved form template ----- -->\n <axp-layout-designer [id]=\"id\" [profile]=\"formSurfaceProfile\"></axp-layout-designer>\n}\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex-platform/framework-client/layout/components';\nimport { Injectable } from '@angular/core';\nimport { FORM_TEMPLATE_PAGE_COMPONENT_KEY } from '../../content-display.constants';\n\n@Injectable()\nexport class AXMFormTemplatePageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: FORM_TEMPLATE_PAGE_COMPONENT_KEY,\n loader: () => import('./form-template-page.component').then((module) => module.AXMFormTemplatePageComponent),\n },\n ];\n }\n}\n"],"names":[],"mappings":";;;;;;AAKA;AAEA;;;AAGG;AAkBG,MAAO,4BAA6B,SAAQ,0BAA0B,CAAA;AAjB5E,IAAA,WAAA,GAAA;;;QAoBE,IAAA,CAAA,WAAW,GAAG,KAAK,CAA0B,EAAE;wFAAC;AAEhD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAA2B;;;QAM1B,IAAA,CAAA,kBAAkB,GAAG,iCAAiC;AAEtD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI;uFAAC;AAGrG,IAAA;8GAhBY,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,SAAA,EAV5B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,4BAA4B;AAC1C,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBH,kMAIA,0KDUY,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAczB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAjBxC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP,CAAC,0BAA0B,CAAC,EAAA,eAAA,EAGpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,4BAA8B;AAC1C,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,8BAA8B,EAAE,MAAM;AACvC,qBAAA,EAAA,QAAA,EAAA,kMAAA,EAAA,MAAA,EAAA,CAAA,kHAAA,CAAA,EAAA;;;;;;;;MElBU,oCAAoC,CAAA;AAC/C,IAAA,MAAM,UAAU,GAAA;QACd,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,gCAAgC;AACrC,gBAAA,MAAM,EAAE,MAAM,0EAAwC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,4BAA4B,CAAC;AAC7G,aAAA;SACF;IACH;8GARW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApC,oCAAoC,EAAA,CAAA,CAAA;;2FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD;;;"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-index-BmODQqQ4.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/content-display/form-template/form-template-page/form-template-page.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/content-display/form-template/form-template-page/form-template-page.component.html","../../../../libs/modules/assessment-management/client/src/lib/features/content-display/form-template/form-template-page/form-template-page-component.provider.ts"],"sourcesContent":["import { AXP_FORM_DESIGNER_SURFACE_PROFILE, AXPLayoutDesignerComponent } from '@acorex-platform/framework-client/layout/designer';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { resolvePersistedEntityId } from '../../../questionnaire-builder/resolve-persisted-entity-id.util';\n\n//#region ----- Component -----\n\n/**\n * Side-menu page that hosts the form layout designer.\n * Used when the form-template plugin display includes `page`.\n */\n@Component({\n selector: 'axm-form-template-page',\n standalone: true,\n imports: [AXPLayoutDesignerComponent],\n templateUrl: './form-template-page.component.html',\n styleUrl: './form-template-page.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMFormTemplatePageComponent,\n },\n ],\n host: {\n '[class.axp-page-layout-base]': 'true',\n },\n})\nexport class AXMFormTemplatePageComponent extends AXPPageLayoutBaseComponent {\n //#region ----- Inputs -----\n\n rootContext = input<Record<string, unknown>>({});\n\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly formSurfaceProfile = AXP_FORM_DESIGNER_SURFACE_PROFILE;\n\n protected readonly templateId = computed(() => resolvePersistedEntityId(this.rootContext()) ?? null);\n\n //#endregion\n}\n\n//#endregion\n","@if (templateId(); as id) {\n <!-- ----- Layout designer for the saved form template ----- -->\n <axp-layout-designer [id]=\"id\" [profile]=\"formSurfaceProfile\"></axp-layout-designer>\n}\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex-platform/framework-client/layout/components';\nimport { Injectable } from '@angular/core';\nimport { FORM_TEMPLATE_PAGE_COMPONENT_KEY } from '../../content-display.constants';\n\n@Injectable()\nexport class AXMFormTemplatePageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: FORM_TEMPLATE_PAGE_COMPONENT_KEY,\n loader: () => import('./form-template-page.component').then((module) => module.AXMFormTemplatePageComponent),\n },\n ];\n }\n}\n"],"names":[],"mappings":";;;;;;AAKA;AAEA;;;AAGG;AAkBG,MAAO,4BAA6B,SAAQ,0BAA0B,CAAA;AAjB5E,IAAA,WAAA,GAAA;;;QAoBE,IAAA,CAAA,WAAW,GAAG,KAAK,CAA0B,EAAE;wFAAC;AAEhD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAA2B;;;QAM1B,IAAA,CAAA,kBAAkB,GAAG,iCAAiC;AAEtD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI;uFAAC;AAGrG,IAAA;8GAhBY,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,SAAA,EAV5B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,4BAA4B;AAC1C,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBH,kMAIA,0KDUY,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAczB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAjBxC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP,CAAC,0BAA0B,CAAC,EAAA,eAAA,EAGpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,4BAA8B;AAC1C,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,8BAA8B,EAAE,MAAM;AACvC,qBAAA,EAAA,QAAA,EAAA,kMAAA,EAAA,MAAA,EAAA,CAAA,kHAAA,CAAA,EAAA;;;;;;;;MElBU,oCAAoC,CAAA;AAC/C,IAAA,MAAM,UAAU,GAAA;QACd,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,gCAAgC;AACrC,gBAAA,MAAM,EAAE,MAAM,0EAAwC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,4BAA4B,CAAC;AAC7G,aAAA;SACF;IACH;8GARW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApC,oCAAoC,EAAA,CAAA,CAAA;;2FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD;;;"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { A as AXMFormTemplateViewerService } from './acorex-platform-module-assessment-management-client-form-template-viewer.service-DoO7ZQmw.mjs';
4
- import { A as AXPFormTemplateViewerConnector } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
3
+ import { A as AXMFormTemplateViewerService } from './acorex-platform-module-assessment-management-client-form-template-viewer.service-CZre8wPB.mjs';
4
+ import { A as AXPFormTemplateViewerConnector } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
5
5
 
6
6
  const MISSING_TEMPLATE_KEY = '@form-template-management:templates.viewer.messages.missing-template';
7
7
  const NOT_FOUND_KEY = '@form-template-management:templates.viewer.messages.not-found';
@@ -52,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
52
52
  }] });
53
53
 
54
54
  export { AXMOpenFormTemplateCommand };
55
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-open-form-template.command-Cz23Vkyv.mjs.map
55
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-open-form-template.command-C9BMiyDb.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-open-form-template.command-Cz23Vkyv.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/viewer/commands/open-form-template.command.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXPMetaData } from '@acorex-platform/framework-shared/core';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMFormTemplateViewerService } from '../form-template-viewer.service';\nimport { AXPFormTemplateViewerConnector } from '../viewer-connector.service';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMOpenFormTemplateCommandInput {\n data?: {\n id?: string;\n template?: string;\n };\n metadata?: AXPMetaData;\n}\n\nconst MISSING_TEMPLATE_KEY = '@form-template-management:templates.viewer.messages.missing-template';\nconst NOT_FOUND_KEY = '@form-template-management:templates.viewer.messages.not-found';\nconst OPEN_FAILED_KEY = '@form-template-management:templates.viewer.messages.open-failed';\n\n//#endregion\n\n//#region ----- Open form template command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMOpenFormTemplateCommand implements AXPCommand<AXMOpenFormTemplateCommandInput> {\n //#region ----- Services & Dependencies -----\n\n private readonly formViewer = inject(AXMFormTemplateViewerService);\n private readonly connector = inject(AXPFormTemplateViewerConnector);\n\n //#endregion\n\n //#region ----- Command Implementation -----\n\n async execute(input: AXMOpenFormTemplateCommandInput = {}): AXPCommandExecuteResultPromise {\n try {\n const data = input.data ?? {};\n const metadata = input.metadata;\n const { id, template } = data;\n\n if (!id && !template) {\n return { success: false, message: { text: MISSING_TEMPLATE_KEY } };\n }\n\n const result = await this.formViewer.open({ id, template, metadata });\n if (result === 'missing') {\n return { success: false, message: { text: MISSING_TEMPLATE_KEY } };\n }\n if (result === 'not-found') {\n return { success: false, message: { text: NOT_FOUND_KEY } };\n }\n if (result.cancelled) {\n return { success: false };\n }\n\n if (id) {\n await this.connector.submit(id, result.context, metadata);\n }\n\n return { success: true, kind: 'object', data: result.context };\n } catch {\n return { success: false, message: { text: OPEN_FAILED_KEY } };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;AAqBA,MAAM,oBAAoB,GAAG,sEAAsE;AACnG,MAAM,aAAa,GAAG,+DAA+D;AACrF,MAAM,eAAe,GAAG,iEAAiE;AAEzF;AAEA;MAGa,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACjD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,8BAA8B,CAAC;AAsCpE,IAAA;;;AAhCC,IAAA,MAAM,OAAO,CAAC,KAAA,GAAyC,EAAE,EAAA;AACvD,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;AAC7B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAC/B,YAAA,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI;AAE7B,YAAA,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE;AACpB,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;YACpE;AAEA,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACrE,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;YACpE;AACA,YAAA,IAAI,MAAM,KAAK,WAAW,EAAE;AAC1B,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;YAC7D;AACA,YAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B;YAEA,IAAI,EAAE,EAAE;AACN,gBAAA,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC3D;AAEA,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;QAChE;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE;QAC/D;IACF;8GAvCW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-open-form-template.command-C9BMiyDb.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/viewer/commands/open-form-template.command.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXPMetaData } from '@acorex-platform/framework-shared/core';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMFormTemplateViewerService } from '../form-template-viewer.service';\nimport { AXPFormTemplateViewerConnector } from '../viewer-connector.service';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMOpenFormTemplateCommandInput {\n data?: {\n id?: string;\n template?: string;\n };\n metadata?: AXPMetaData;\n}\n\nconst MISSING_TEMPLATE_KEY = '@form-template-management:templates.viewer.messages.missing-template';\nconst NOT_FOUND_KEY = '@form-template-management:templates.viewer.messages.not-found';\nconst OPEN_FAILED_KEY = '@form-template-management:templates.viewer.messages.open-failed';\n\n//#endregion\n\n//#region ----- Open form template command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMOpenFormTemplateCommand implements AXPCommand<AXMOpenFormTemplateCommandInput> {\n //#region ----- Services & Dependencies -----\n\n private readonly formViewer = inject(AXMFormTemplateViewerService);\n private readonly connector = inject(AXPFormTemplateViewerConnector);\n\n //#endregion\n\n //#region ----- Command Implementation -----\n\n async execute(input: AXMOpenFormTemplateCommandInput = {}): AXPCommandExecuteResultPromise {\n try {\n const data = input.data ?? {};\n const metadata = input.metadata;\n const { id, template } = data;\n\n if (!id && !template) {\n return { success: false, message: { text: MISSING_TEMPLATE_KEY } };\n }\n\n const result = await this.formViewer.open({ id, template, metadata });\n if (result === 'missing') {\n return { success: false, message: { text: MISSING_TEMPLATE_KEY } };\n }\n if (result === 'not-found') {\n return { success: false, message: { text: NOT_FOUND_KEY } };\n }\n if (result.cancelled) {\n return { success: false };\n }\n\n if (id) {\n await this.connector.submit(id, result.context, metadata);\n }\n\n return { success: true, kind: 'object', data: result.context };\n } catch {\n return { success: false, message: { text: OPEN_FAILED_KEY } };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;AAqBA,MAAM,oBAAoB,GAAG,sEAAsE;AACnG,MAAM,aAAa,GAAG,+DAA+D;AACrF,MAAM,eAAe,GAAG,iEAAiE;AAEzF;AAEA;MAGa,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACjD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,8BAA8B,CAAC;AAsCpE,IAAA;;;AAhCC,IAAA,MAAM,OAAO,CAAC,KAAA,GAAyC,EAAE,EAAA;AACvD,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;AAC7B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAC/B,YAAA,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI;AAE7B,YAAA,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE;AACpB,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;YACpE;AAEA,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACrE,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;YACpE;AACA,YAAA,IAAI,MAAM,KAAK,WAAW,EAAE;AAC1B,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;YAC7D;AACA,YAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B;YAEA,IAAI,EAAE,EAAE;AACN,gBAAA,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC3D;AAEA,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;QAChE;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE;QAC/D;IACF;8GAvCW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { A as AXMFormTemplateViewerService } from './acorex-platform-module-assessment-management-client-form-template-viewer.service-DoO7ZQmw.mjs';
3
+ import { A as AXMFormTemplateViewerService } from './acorex-platform-module-assessment-management-client-form-template-viewer.service-CZre8wPB.mjs';
4
4
 
5
5
  const MISSING_TEMPLATE_KEY = '@form-template-management:templates.viewer.messages.missing-template';
6
6
  const NOT_FOUND_KEY = '@form-template-management:templates.viewer.messages.not-found';
@@ -87,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
87
87
  }] });
88
88
 
89
89
  export { AXMPreviewFormTemplateCommand };
90
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-preview-form-template.command-DDQOvVpt.mjs.map
90
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-preview-form-template.command-L5NxVqdE.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-preview-form-template.command-DDQOvVpt.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/viewer/commands/preview-form-template.command.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMFormTemplateViewerService } from '../form-template-viewer.service';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMPreviewFormTemplateCommandInput {\n templateId?: string;\n templateTitle?: string;\n}\n\ntype AXMPreviewFormTemplateCommandInvocation = AXMPreviewFormTemplateCommandInput & {\n data?: Record<string, unknown>;\n options?: Partial<AXMPreviewFormTemplateCommandInput> & Record<string, unknown>;\n};\n\nconst MISSING_TEMPLATE_KEY = '@form-template-management:templates.viewer.messages.missing-template';\nconst NOT_FOUND_KEY = '@form-template-management:templates.viewer.messages.not-found';\nconst OPEN_FAILED_KEY = '@form-template-management:templates.viewer.messages.open-failed';\n\n//#endregion\n\n//#region ----- Preview form template command -----\n\n/**\n * Opens a form template preview. Answers are not saved.\n */\n@Injectable()\nexport class AXMPreviewFormTemplateCommand implements AXPCommand<AXMPreviewFormTemplateCommandInput, void> {\n //#region ----- Services & Dependencies -----\n\n private readonly formViewer = inject(AXMFormTemplateViewerService);\n\n //#endregion\n\n //#region ----- Command Implementation -----\n\n private resolvePayload(\n input: AXMPreviewFormTemplateCommandInvocation,\n ): AXMPreviewFormTemplateCommandInput | null {\n const ctxOpts = input.options;\n const ctxData = input.data;\n\n const asNonEmptyString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.length > 0 ? value : undefined;\n\n const asDisplayTitle = (value: unknown): string | undefined => {\n const text = asNonEmptyString(value);\n if (text) {\n return text;\n }\n if (value && typeof value === 'object') {\n const record = value as Record<string, unknown>;\n const fromTitle = record['title'];\n if (typeof fromTitle === 'string' && fromTitle.trim()) {\n return fromTitle.trim();\n }\n const fromName = record['name'];\n if (typeof fromName === 'string' && fromName.trim()) {\n return fromName.trim();\n }\n }\n return undefined;\n };\n\n const templateId =\n asNonEmptyString(input.templateId) ??\n asNonEmptyString(ctxOpts?.templateId) ??\n (ctxData?.['id'] != null ? String(ctxData['id']) : undefined);\n\n if (!templateId) {\n return null;\n }\n\n const templateTitle =\n asDisplayTitle(input.templateTitle) ??\n asDisplayTitle(ctxOpts?.templateTitle) ??\n asDisplayTitle(ctxData?.['title']) ??\n asDisplayTitle(ctxData?.['name']);\n\n return { templateId, templateTitle };\n }\n\n async execute(input: AXMPreviewFormTemplateCommandInvocation): AXPCommandExecuteResultPromise<void> {\n try {\n const resolved = this.resolvePayload(input);\n if (!resolved?.templateId) {\n return { success: false, message: { text: MISSING_TEMPLATE_KEY } };\n }\n\n const result = await this.formViewer.open({\n id: resolved.templateId,\n title: resolved.templateTitle,\n previewMode: true,\n });\n\n if (result === 'missing') {\n return { success: false, message: { text: MISSING_TEMPLATE_KEY } };\n }\n if (result === 'not-found') {\n return { success: false, message: { text: NOT_FOUND_KEY } };\n }\n\n return {\n success: true,\n kind: 'object',\n data: undefined,\n metadata: { outcome: result.cancelled ? 'Cancelled' : 'Previewed', refresh: false },\n };\n } catch {\n return { success: false, message: { text: OPEN_FAILED_KEY } };\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-form-template.command-L5NxVqdE.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/viewer/commands/preview-form-template.command.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMFormTemplateViewerService } from '../form-template-viewer.service';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMPreviewFormTemplateCommandInput {\n templateId?: string;\n templateTitle?: string;\n}\n\ntype AXMPreviewFormTemplateCommandInvocation = AXMPreviewFormTemplateCommandInput & {\n data?: Record<string, unknown>;\n options?: Partial<AXMPreviewFormTemplateCommandInput> & Record<string, unknown>;\n};\n\nconst MISSING_TEMPLATE_KEY = '@form-template-management:templates.viewer.messages.missing-template';\nconst NOT_FOUND_KEY = '@form-template-management:templates.viewer.messages.not-found';\nconst OPEN_FAILED_KEY = '@form-template-management:templates.viewer.messages.open-failed';\n\n//#endregion\n\n//#region ----- Preview form template command -----\n\n/**\n * Opens a form template preview. Answers are not saved.\n */\n@Injectable()\nexport class AXMPreviewFormTemplateCommand implements AXPCommand<AXMPreviewFormTemplateCommandInput, void> {\n //#region ----- Services & Dependencies -----\n\n private readonly formViewer = inject(AXMFormTemplateViewerService);\n\n //#endregion\n\n //#region ----- Command Implementation -----\n\n private resolvePayload(\n input: AXMPreviewFormTemplateCommandInvocation,\n ): AXMPreviewFormTemplateCommandInput | null {\n const ctxOpts = input.options;\n const ctxData = input.data;\n\n const asNonEmptyString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.length > 0 ? value : undefined;\n\n const asDisplayTitle = (value: unknown): string | undefined => {\n const text = asNonEmptyString(value);\n if (text) {\n return text;\n }\n if (value && typeof value === 'object') {\n const record = value as Record<string, unknown>;\n const fromTitle = record['title'];\n if (typeof fromTitle === 'string' && fromTitle.trim()) {\n return fromTitle.trim();\n }\n const fromName = record['name'];\n if (typeof fromName === 'string' && fromName.trim()) {\n return fromName.trim();\n }\n }\n return undefined;\n };\n\n const templateId =\n asNonEmptyString(input.templateId) ??\n asNonEmptyString(ctxOpts?.templateId) ??\n (ctxData?.['id'] != null ? String(ctxData['id']) : undefined);\n\n if (!templateId) {\n return null;\n }\n\n const templateTitle =\n asDisplayTitle(input.templateTitle) ??\n asDisplayTitle(ctxOpts?.templateTitle) ??\n asDisplayTitle(ctxData?.['title']) ??\n asDisplayTitle(ctxData?.['name']);\n\n return { templateId, templateTitle };\n }\n\n async execute(input: AXMPreviewFormTemplateCommandInvocation): AXPCommandExecuteResultPromise<void> {\n try {\n const resolved = this.resolvePayload(input);\n if (!resolved?.templateId) {\n return { success: false, message: { text: MISSING_TEMPLATE_KEY } };\n }\n\n const result = await this.formViewer.open({\n id: resolved.templateId,\n title: resolved.templateTitle,\n previewMode: true,\n });\n\n if (result === 'missing') {\n return { success: false, message: { text: MISSING_TEMPLATE_KEY } };\n }\n if (result === 'not-found') {\n return { success: false, message: { text: NOT_FOUND_KEY } };\n }\n\n return {\n success: true,\n kind: 'object',\n data: undefined,\n metadata: { outcome: result.cancelled ? 'Cancelled' : 'Previewed', refresh: false },\n };\n } catch {\n return { success: false, message: { text: OPEN_FAILED_KEY } };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAqBA,MAAM,oBAAoB,GAAG,sEAAsE;AACnG,MAAM,aAAa,GAAG,+DAA+D;AACrF,MAAM,eAAe,GAAG,iEAAiE;AAEzF;AAEA;AAEA;;AAEG;MAEU,6BAA6B,CAAA;AAD1C,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAoFnE,IAAA;;;AA9ES,IAAA,cAAc,CACpB,KAA8C,EAAA;AAE9C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAC7B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI;QAE1B,MAAM,gBAAgB,GAAG,CAAC,KAAc,KACtC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS;AAEnE,QAAA,MAAM,cAAc,GAAG,CAAC,KAAc,KAAwB;AAC5D,YAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC;YACpC,IAAI,IAAI,EAAE;AACR,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBACtC,MAAM,MAAM,GAAG,KAAgC;AAC/C,gBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC;gBACjC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE;AACrD,oBAAA,OAAO,SAAS,CAAC,IAAI,EAAE;gBACzB;AACA,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC/B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE;AACnD,oBAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;gBACxB;YACF;AACA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AAED,QAAA,MAAM,UAAU,GACd,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;AAClC,YAAA,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;aACpC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;QAE/D,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,aAAa,GACjB,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC;AACnC,YAAA,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC;AACtC,YAAA,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;AAClC,YAAA,cAAc,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;AAEnC,QAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE;IACtC;IAEA,MAAM,OAAO,CAAC,KAA8C,EAAA;AAC1D,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;AACzB,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;YACpE;YAEA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACxC,EAAE,EAAE,QAAQ,CAAC,UAAU;gBACvB,KAAK,EAAE,QAAQ,CAAC,aAAa;AAC7B,gBAAA,WAAW,EAAE,IAAI;AAClB,aAAA,CAAC;AAEF,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;YACpE;AACA,YAAA,IAAI,MAAM,KAAK,WAAW,EAAE;AAC1B,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;YAC7D;YAEA,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,GAAG,WAAW,GAAG,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE;aACpF;QACH;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE;QAC/D;IACF;8GApFW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA7B,6BAA6B,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC;;;"}
@@ -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 { h as AXMQuestionnaireViewerService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
6
+ import { h as AXMQuestionnaireViewerService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
7
7
 
8
8
  //#endregion
9
9
  //#region ---- Preview Question Command ----
@@ -123,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
123
123
  }] });
124
124
 
125
125
  export { PreviewQuestionCommand };
126
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-preview-question.command-D4YlqMUf.mjs.map
126
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-preview-question.command-7GuqlVX4.mjs.map