@acorex/modules 21.0.0-next.57 → 21.0.0-next.63

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 (171) hide show
  1. package/assessment-management/README.md +4 -4
  2. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-DcPnI9fZ.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-DlhSQ0cB.mjs} +3657 -422
  3. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-DlhSQ0cB.mjs.map +1 -0
  4. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-D880d_qz.mjs → acorex-modules-assessment-management-assessment-case.entity-B6C2PRZw.mjs} +93 -82
  5. package/fesm2022/acorex-modules-assessment-management-assessment-case.entity-B6C2PRZw.mjs.map +1 -0
  6. package/fesm2022/acorex-modules-assessment-management-assessment-session-answers-view.util-BRdwcIvw.mjs +47 -0
  7. package/fesm2022/acorex-modules-assessment-management-assessment-session-answers-view.util-BRdwcIvw.mjs.map +1 -0
  8. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DvbocIN1.mjs → acorex-modules-assessment-management-assessment-session.entity-DquzZNaQ.mjs} +22 -42
  9. package/fesm2022/acorex-modules-assessment-management-assessment-session.entity-DquzZNaQ.mjs.map +1 -0
  10. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-BMJ54EPO.mjs → acorex-modules-assessment-management-fill-assessment-session.command-CRE8SxzC.mjs} +32 -7
  11. package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-CRE8SxzC.mjs.map +1 -0
  12. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-CO8NfjEb.mjs → acorex-modules-assessment-management-preview-question.command-Ce7yOnJY.mjs} +2 -2
  13. package/fesm2022/acorex-modules-assessment-management-preview-question.command-Ce7yOnJY.mjs.map +1 -0
  14. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-DSzbtU0e.mjs → acorex-modules-assessment-management-preview-questionnaire.command-S-8MDeB7.mjs} +2 -2
  15. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-DSzbtU0e.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-S-8MDeB7.mjs.map} +1 -1
  16. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DbvxAUgb.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-wdHMGBxi.mjs} +2 -2
  17. package/fesm2022/acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-wdHMGBxi.mjs.map +1 -0
  18. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DBfQhSKR.mjs → acorex-modules-assessment-management-question-bank-item.entity-1Pm9O0kv.mjs} +2 -2
  19. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DBfQhSKR.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-1Pm9O0kv.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-CH_cJlSf.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-Dwx0y7WY.mjs} +36 -65
  21. package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-Dwx0y7WY.mjs.map +1 -0
  22. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CrryBMC2.mjs → acorex-modules-assessment-management-questionnaire.entity-BI_jc4C6.mjs} +12 -36
  23. package/fesm2022/acorex-modules-assessment-management-questionnaire.entity-BI_jc4C6.mjs.map +1 -0
  24. package/fesm2022/acorex-modules-assessment-management-view-case-last-session-answers.command-Ds-QGMPy.mjs +157 -0
  25. package/fesm2022/acorex-modules-assessment-management-view-case-last-session-answers.command-Ds-QGMPy.mjs.map +1 -0
  26. package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-COTVoRRG.mjs +172 -0
  27. package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-COTVoRRG.mjs.map +1 -0
  28. package/fesm2022/acorex-modules-assessment-management-view-session-outcomes.command-2buH7ydV.mjs +239 -0
  29. package/fesm2022/acorex-modules-assessment-management-view-session-outcomes.command-2buH7ydV.mjs.map +1 -0
  30. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  31. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-wfCSNwXC.mjs → acorex-modules-auth-acorex-modules-auth-D4IBi_VD.mjs} +39 -30
  32. package/fesm2022/acorex-modules-auth-acorex-modules-auth-D4IBi_VD.mjs.map +1 -0
  33. package/fesm2022/{acorex-modules-auth-app-chooser.component-BY281-Cl.mjs → acorex-modules-auth-app-chooser.component-BEktaBWD.mjs} +2 -2
  34. package/fesm2022/{acorex-modules-auth-app-chooser.component-BY281-Cl.mjs.map → acorex-modules-auth-app-chooser.component-BEktaBWD.mjs.map} +1 -1
  35. package/fesm2022/{acorex-modules-auth-login.module-CjgYlyOv.mjs → acorex-modules-auth-login.module-aAwHzXPj.mjs} +4 -4
  36. package/fesm2022/{acorex-modules-auth-login.module-CjgYlyOv.mjs.map → acorex-modules-auth-login.module-aAwHzXPj.mjs.map} +1 -1
  37. package/fesm2022/{acorex-modules-auth-master.layout-Clx8QDYW.mjs → acorex-modules-auth-master.layout-BapDYFZ_.mjs} +2 -2
  38. package/fesm2022/{acorex-modules-auth-master.layout-Clx8QDYW.mjs.map → acorex-modules-auth-master.layout-BapDYFZ_.mjs.map} +1 -1
  39. package/fesm2022/{acorex-modules-auth-oauth-callback.component-CGnGAPJ2.mjs → acorex-modules-auth-oauth-callback.component-Cyu2vqyK.mjs} +2 -2
  40. package/fesm2022/{acorex-modules-auth-oauth-callback.component-CGnGAPJ2.mjs.map → acorex-modules-auth-oauth-callback.component-Cyu2vqyK.mjs.map} +1 -1
  41. package/fesm2022/{acorex-modules-auth-password.component-8eEX0lRP.mjs → acorex-modules-auth-password.component-DB-ac0Rn.mjs} +2 -2
  42. package/fesm2022/{acorex-modules-auth-password.component-8eEX0lRP.mjs.map → acorex-modules-auth-password.component-DB-ac0Rn.mjs.map} +1 -1
  43. package/fesm2022/{acorex-modules-auth-password.component-CUxwThnN.mjs → acorex-modules-auth-password.component-cPmwNpuq.mjs} +2 -2
  44. package/fesm2022/{acorex-modules-auth-password.component-CUxwThnN.mjs.map → acorex-modules-auth-password.component-cPmwNpuq.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-auth-routes-CYLKJm9g.mjs → acorex-modules-auth-routes-r72zIRTa.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-auth-routes-CYLKJm9g.mjs.map → acorex-modules-auth-routes-r72zIRTa.mjs.map} +1 -1
  47. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DDK1KW-8.mjs → acorex-modules-auth-tenant-chooser.component-AQA2o6Ty.mjs} +2 -2
  48. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DDK1KW-8.mjs.map → acorex-modules-auth-tenant-chooser.component-AQA2o6Ty.mjs.map} +1 -1
  49. package/fesm2022/{acorex-modules-auth-two-factor.module-Iw2U7Cy5.mjs → acorex-modules-auth-two-factor.module-Dx0CC5ic.mjs} +2 -2
  50. package/fesm2022/{acorex-modules-auth-two-factor.module-Iw2U7Cy5.mjs.map → acorex-modules-auth-two-factor.module-Dx0CC5ic.mjs.map} +1 -1
  51. package/fesm2022/{acorex-modules-auth-user-sessions.component-sKDANprs.mjs → acorex-modules-auth-user-sessions.component-3Wr7DUDQ.mjs} +2 -2
  52. package/fesm2022/{acorex-modules-auth-user-sessions.component-sKDANprs.mjs.map → acorex-modules-auth-user-sessions.component-3Wr7DUDQ.mjs.map} +1 -1
  53. package/fesm2022/acorex-modules-auth.mjs +1 -1
  54. package/fesm2022/acorex-modules-common.mjs +8 -3
  55. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  56. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-DlteA_jC.mjs → acorex-modules-conversation-acorex-modules-conversation-DkdNLMKa.mjs} +8 -7
  57. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-DkdNLMKa.mjs.map +1 -0
  58. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BAgBuxlz.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-VKPbkRqI.mjs} +2 -2
  59. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BAgBuxlz.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-VKPbkRqI.mjs.map} +1 -1
  60. package/fesm2022/{acorex-modules-conversation-comments-page.component-BrwP9l7M.mjs → acorex-modules-conversation-comments-page.component-ehUCjoFD.mjs} +2 -2
  61. package/fesm2022/{acorex-modules-conversation-comments-page.component-BrwP9l7M.mjs.map → acorex-modules-conversation-comments-page.component-ehUCjoFD.mjs.map} +1 -1
  62. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-BzKawEoN.mjs → acorex-modules-conversation-send-assist-chat-message.command-ZNcVi54N.mjs} +2 -2
  63. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-BzKawEoN.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-ZNcVi54N.mjs.map} +1 -1
  64. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-BUOGUMl0.mjs → acorex-modules-conversation-start-assist-chat.command-CX6lm1lG.mjs} +2 -2
  65. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-BUOGUMl0.mjs.map → acorex-modules-conversation-start-assist-chat.command-CX6lm1lG.mjs.map} +1 -1
  66. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  67. package/fesm2022/acorex-modules-customer-management.mjs +2 -0
  68. package/fesm2022/acorex-modules-customer-management.mjs.map +1 -1
  69. package/fesm2022/acorex-modules-data-management.mjs +6 -5
  70. package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
  71. package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-Bfjo-ENr.mjs → acorex-modules-help-desk-acorex-modules-help-desk-DVlO9JZw.mjs} +3 -2
  72. package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-DVlO9JZw.mjs.map +1 -0
  73. package/fesm2022/{acorex-modules-help-desk-capture-screen.component-CsACFkPq.mjs → acorex-modules-help-desk-capture-screen.component-rNPehEf8.mjs} +2 -2
  74. package/fesm2022/{acorex-modules-help-desk-capture-screen.component-CsACFkPq.mjs.map → acorex-modules-help-desk-capture-screen.component-rNPehEf8.mjs.map} +1 -1
  75. package/fesm2022/acorex-modules-help-desk.mjs +1 -1
  76. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-XhV2JQXs.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BWezAea1.mjs} +131 -112
  77. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-BWezAea1.mjs.map +1 -0
  78. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-Cre30Kp7.mjs → acorex-modules-human-capital-management-approve-leave-request.command-Bh_Bbq5-.mjs} +2 -2
  79. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-Cre30Kp7.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-Bh_Bbq5-.mjs.map} +1 -1
  80. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-NYgddiaD.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-BpDdDG9i.mjs} +2 -2
  81. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-NYgddiaD.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-BpDdDG9i.mjs.map} +1 -1
  82. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DPh-KQgN.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-CjtKaKFw.mjs} +2 -2
  83. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DPh-KQgN.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-CjtKaKFw.mjs.map} +1 -1
  84. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-znCbbQUd.mjs → acorex-modules-human-capital-management-employee.entity-Cx_oY2aK.mjs} +8 -8
  85. package/fesm2022/acorex-modules-human-capital-management-employee.entity-Cx_oY2aK.mjs.map +1 -0
  86. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-DUNB3zAB.mjs → acorex-modules-human-capital-management-employment-type.entity-B20Taa5x.mjs} +2 -2
  87. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-DUNB3zAB.mjs.map → acorex-modules-human-capital-management-employment-type.entity-B20Taa5x.mjs.map} +1 -1
  88. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-JyFrrCGE.mjs → acorex-modules-human-capital-management-leave-request.entity-BO8QXpZE.mjs} +2 -2
  89. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-JyFrrCGE.mjs.map → acorex-modules-human-capital-management-leave-request.entity-BO8QXpZE.mjs.map} +1 -1
  90. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-B61MiEPu.mjs → acorex-modules-human-capital-management-leave-type.entity-CQwSWqSh.mjs} +2 -2
  91. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-B61MiEPu.mjs.map → acorex-modules-human-capital-management-leave-type.entity-CQwSWqSh.mjs.map} +1 -1
  92. package/fesm2022/{acorex-modules-human-capital-management-lifecycle-process-type.entity-DJqo2kTG.mjs → acorex-modules-human-capital-management-lifecycle-event-type.entity-BPWJrvbN.mjs} +13 -13
  93. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event-type.entity-BPWJrvbN.mjs.map +1 -0
  94. package/fesm2022/{acorex-modules-human-capital-management-employee-lifecycle-process.entity-LX68KORg.mjs → acorex-modules-human-capital-management-lifecycle-event.entity-ZZuPu9KQ.mjs} +45 -56
  95. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event.entity-ZZuPu9KQ.mjs.map +1 -0
  96. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-CKCC6bKg.mjs → acorex-modules-human-capital-management-position-assignment.entity-BN1y0qhi.mjs} +2 -2
  97. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-CKCC6bKg.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-BN1y0qhi.mjs.map} +1 -1
  98. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-Blv08UQZ.mjs → acorex-modules-human-capital-management-reject-leave-request.command-LczqOHP-.mjs} +2 -2
  99. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-Blv08UQZ.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-LczqOHP-.mjs.map} +1 -1
  100. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-lgEAbxYH.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-Dm8YacDI.mjs} +2 -2
  101. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-lgEAbxYH.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-Dm8YacDI.mjs.map} +1 -1
  102. package/fesm2022/acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DPwuyFz2.mjs +237 -0
  103. package/fesm2022/acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DPwuyFz2.mjs.map +1 -0
  104. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  105. package/fesm2022/{acorex-modules-learning-management-enrollment.entity-B53AQq_9.mjs → acorex-modules-learning-management-enrollment.entity-CdJafrUh.mjs} +4 -22
  106. package/fesm2022/acorex-modules-learning-management-enrollment.entity-CdJafrUh.mjs.map +1 -0
  107. package/fesm2022/acorex-modules-learning-management.mjs +1 -1
  108. package/fesm2022/acorex-modules-learning-management.mjs.map +1 -1
  109. package/fesm2022/acorex-modules-location-management.mjs +1 -0
  110. package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
  111. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-5DJoQkx2.mjs → acorex-modules-platform-management-acorex-modules-platform-management-Cbf1rlEK.mjs} +4 -4
  112. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-5DJoQkx2.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-Cbf1rlEK.mjs.map} +1 -1
  113. package/fesm2022/{acorex-modules-platform-management-menu-list.component-C3WBYbOt.mjs → acorex-modules-platform-management-menu-list.component-DIf_-oaM.mjs} +2 -2
  114. package/fesm2022/{acorex-modules-platform-management-menu-list.component-C3WBYbOt.mjs.map → acorex-modules-platform-management-menu-list.component-DIf_-oaM.mjs.map} +1 -1
  115. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  116. package/fesm2022/acorex-modules-security-management.mjs +3 -0
  117. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  118. package/fesm2022/acorex-modules-supplier-management.mjs +1 -0
  119. package/fesm2022/acorex-modules-supplier-management.mjs.map +1 -1
  120. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-CrybKNgo.mjs → acorex-modules-task-management-acorex-modules-task-management--mdNdYIs.mjs} +32 -2
  121. package/fesm2022/acorex-modules-task-management-acorex-modules-task-management--mdNdYIs.mjs.map +1 -0
  122. package/fesm2022/{acorex-modules-task-management-task-board.page-B2xxXscG.mjs → acorex-modules-task-management-task-board.page-BIZ1qH7m.mjs} +33 -3
  123. package/fesm2022/acorex-modules-task-management-task-board.page-BIZ1qH7m.mjs.map +1 -0
  124. package/fesm2022/acorex-modules-task-management.mjs +1 -1
  125. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-OLbCD-7P.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-B4DLmioy.mjs} +3 -3
  126. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-OLbCD-7P.mjs.map → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-B4DLmioy.mjs.map} +1 -1
  127. package/fesm2022/{acorex-modules-workflow-management-index-RRzkvrNM.mjs → acorex-modules-workflow-management-index-BhVZ1Bcw.mjs} +3 -3
  128. package/fesm2022/{acorex-modules-workflow-management-index-RRzkvrNM.mjs.map → acorex-modules-workflow-management-index-BhVZ1Bcw.mjs.map} +1 -1
  129. package/fesm2022/{acorex-modules-workflow-management-index-Eh5DDK-V.mjs → acorex-modules-workflow-management-index-DC_9M9dk.mjs} +3 -3
  130. package/fesm2022/{acorex-modules-workflow-management-index-Eh5DDK-V.mjs.map → acorex-modules-workflow-management-index-DC_9M9dk.mjs.map} +1 -1
  131. package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-B_V3uMSI.mjs → acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs} +2 -2
  132. package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-B_V3uMSI.mjs.map → acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs.map} +1 -1
  133. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DjYDwHWU.mjs +255 -0
  134. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DjYDwHWU.mjs.map +1 -0
  135. package/fesm2022/acorex-modules-workflow-management.mjs +1819 -745
  136. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  137. package/package.json +2 -2
  138. package/types/acorex-modules-assessment-management.d.ts +387 -278
  139. package/types/acorex-modules-common.d.ts +2 -0
  140. package/types/acorex-modules-human-capital-management.d.ts +31 -30
  141. package/types/acorex-modules-learning-management.d.ts +0 -1
  142. package/types/acorex-modules-task-management.d.ts +41 -2
  143. package/types/acorex-modules-workflow-management.d.ts +280 -34
  144. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-DcPnI9fZ.mjs.map +0 -1
  145. package/fesm2022/acorex-modules-assessment-management-assessment-case.entity-D880d_qz.mjs.map +0 -1
  146. package/fesm2022/acorex-modules-assessment-management-assessment-session.entity-DvbocIN1.mjs.map +0 -1
  147. package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-BMJ54EPO.mjs.map +0 -1
  148. package/fesm2022/acorex-modules-assessment-management-index-XdJCIYG3.mjs +0 -1509
  149. package/fesm2022/acorex-modules-assessment-management-index-XdJCIYG3.mjs.map +0 -1
  150. package/fesm2022/acorex-modules-assessment-management-preview-question.command-CO8NfjEb.mjs.map +0 -1
  151. package/fesm2022/acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DbvxAUgb.mjs.map +0 -1
  152. package/fesm2022/acorex-modules-assessment-management-questionnaire-calculation.entity-CL9s20qR.mjs +0 -236
  153. package/fesm2022/acorex-modules-assessment-management-questionnaire-calculation.entity-CL9s20qR.mjs.map +0 -1
  154. package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-CH_cJlSf.mjs.map +0 -1
  155. package/fesm2022/acorex-modules-assessment-management-questionnaire.entity-CrryBMC2.mjs.map +0 -1
  156. package/fesm2022/acorex-modules-assessment-management-save-questionnaire-questions.command-Dq5VComh.mjs +0 -61
  157. package/fesm2022/acorex-modules-assessment-management-save-questionnaire-questions.command-Dq5VComh.mjs.map +0 -1
  158. package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-DpppXekm.mjs +0 -112
  159. package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-DpppXekm.mjs.map +0 -1
  160. package/fesm2022/acorex-modules-auth-acorex-modules-auth-wfCSNwXC.mjs.map +0 -1
  161. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-DlteA_jC.mjs.map +0 -1
  162. package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-Bfjo-ENr.mjs.map +0 -1
  163. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-XhV2JQXs.mjs.map +0 -1
  164. package/fesm2022/acorex-modules-human-capital-management-employee-lifecycle-process.entity-LX68KORg.mjs.map +0 -1
  165. package/fesm2022/acorex-modules-human-capital-management-employee.entity-znCbbQUd.mjs.map +0 -1
  166. package/fesm2022/acorex-modules-human-capital-management-lifecycle-process-type.entity-DJqo2kTG.mjs.map +0 -1
  167. package/fesm2022/acorex-modules-learning-management-enrollment.entity-B53AQq_9.mjs.map +0 -1
  168. package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-CrybKNgo.mjs.map +0 -1
  169. package/fesm2022/acorex-modules-task-management-task-board.page-B2xxXscG.mjs.map +0 -1
  170. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DMszilef.mjs +0 -356
  171. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DMszilef.mjs.map +0 -1
@@ -0,0 +1,157 @@
1
+ import { AXTranslationService } from '@acorex/core/translation';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, Injectable } from '@angular/core';
4
+ import { AXPEntityService } from '@acorex/platform/layout/entity';
5
+ import { isString, isEmpty, toString, get, first, defaultTo } from 'lodash-es';
6
+ import { A as AXMQuestionnaireViewerService, R as RootConfig } from './acorex-modules-assessment-management-acorex-modules-assessment-management-DlhSQ0cB.mjs';
7
+ import { o as openAssessmentSessionAnswersView } from './acorex-modules-assessment-management-assessment-session-answers-view.util-BRdwcIvw.mjs';
8
+
9
+ //#endregion
10
+ //#region ---- View Case Last Session Answers Command ----
11
+ /**
12
+ * Opens a readonly view of the most recent assessment session answers for a case.
13
+ */
14
+ class ViewCaseLastSessionAnswersCommand {
15
+ constructor() {
16
+ //#region ---- Services & Dependencies ----
17
+ this.entityService = inject(AXPEntityService);
18
+ this.questionnaireViewerService = inject(AXMQuestionnaireViewerService);
19
+ this.translationService = inject(AXTranslationService);
20
+ }
21
+ //#endregion
22
+ //#region ---- Command Implementation ----
23
+ /**
24
+ * Returns a non-empty string or undefined.
25
+ */
26
+ asNonEmptyString(value) {
27
+ if (isString(value) && !isEmpty(value)) {
28
+ return value;
29
+ }
30
+ if (value != null && !isString(value)) {
31
+ const normalized = toString(value).trim();
32
+ return isEmpty(normalized) ? undefined : normalized;
33
+ }
34
+ return undefined;
35
+ }
36
+ /**
37
+ * Resolves case id from root input, action options, or list row data.
38
+ */
39
+ resolveCaseId(input) {
40
+ const candidates = [
41
+ get(input, 'caseId'),
42
+ get(input, 'options.caseId'),
43
+ get(input, '__context__.options.caseId'),
44
+ get(input, '__context__.data.id'),
45
+ ];
46
+ for (const candidate of candidates) {
47
+ const resolved = this.asNonEmptyString(candidate);
48
+ if (resolved) {
49
+ return resolved;
50
+ }
51
+ }
52
+ return null;
53
+ }
54
+ /**
55
+ * Loads case by id using query first, then byKey.
56
+ */
57
+ async loadCase(caseId) {
58
+ const caseAccessor = this.entityService
59
+ .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)
60
+ .data();
61
+ const listMatch = await caseAccessor.query({
62
+ skip: 0,
63
+ take: 1,
64
+ filter: {
65
+ field: 'id',
66
+ operator: { type: 'equal' },
67
+ value: caseId,
68
+ },
69
+ });
70
+ const fromQuery = first(listMatch.items);
71
+ if (fromQuery) {
72
+ return fromQuery;
73
+ }
74
+ return defaultTo(await caseAccessor.byKey(caseId), null);
75
+ }
76
+ /**
77
+ * Finds the latest session record for a case (by lastSavedAt, then createdAt).
78
+ */
79
+ async findLatestSession(caseId) {
80
+ const sessionAccessor = this.entityService
81
+ .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)
82
+ .data();
83
+ const listMatch = await sessionAccessor.query({
84
+ skip: 0,
85
+ take: 1,
86
+ sort: [
87
+ { field: 'lastSavedAt', dir: 'desc' },
88
+ { field: 'createdAt', dir: 'desc' },
89
+ ],
90
+ filter: {
91
+ field: 'caseId',
92
+ operator: { type: 'equal' },
93
+ value: caseId,
94
+ },
95
+ });
96
+ return first(listMatch.items) ?? null;
97
+ }
98
+ async execute(input) {
99
+ try {
100
+ const caseId = this.resolveCaseId(input);
101
+ if (!caseId) {
102
+ return {
103
+ success: false,
104
+ message: {
105
+ text: 'Assessment case ID is required',
106
+ },
107
+ };
108
+ }
109
+ const assessmentCase = await this.loadCase(caseId);
110
+ if (!assessmentCase) {
111
+ return {
112
+ success: false,
113
+ message: {
114
+ text: `Assessment case with ID ${caseId} not found`,
115
+ },
116
+ };
117
+ }
118
+ const session = await this.findLatestSession(caseId);
119
+ if (!session) {
120
+ const messageKey = '@assessment-management:cases.actions.view-last-session-answers.no-session';
121
+ const messageText = (await this.translationService.translateAsync(messageKey)) ||
122
+ 'No assessment session found for this case';
123
+ return {
124
+ success: false,
125
+ message: {
126
+ text: messageText,
127
+ },
128
+ };
129
+ }
130
+ await openAssessmentSessionAnswersView({
131
+ entityService: this.entityService,
132
+ questionnaireViewerService: this.questionnaireViewerService,
133
+ translationService: this.translationService,
134
+ }, session, assessmentCase);
135
+ return {
136
+ success: true,
137
+ };
138
+ }
139
+ catch (error) {
140
+ const message = error instanceof Error ? error.message : 'Unknown error';
141
+ return {
142
+ success: false,
143
+ message: {
144
+ text: `Error viewing last session answers: ${message}`,
145
+ },
146
+ };
147
+ }
148
+ }
149
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ViewCaseLastSessionAnswersCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
150
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ViewCaseLastSessionAnswersCommand }); }
151
+ }
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ViewCaseLastSessionAnswersCommand, decorators: [{
153
+ type: Injectable
154
+ }] });
155
+
156
+ export { ViewCaseLastSessionAnswersCommand };
157
+ //# sourceMappingURL=acorex-modules-assessment-management-view-case-last-session-answers.command-Ds-QGMPy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-modules-assessment-management-view-case-last-session-answers.command-Ds-QGMPy.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/commands/view-case-last-session-answers.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { defaultTo, first, get, isEmpty, isString, toString } from 'lodash-es';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '../../../entities/assessment-case/assessment-case.types';\nimport type { AXMAssessmentManagementAssessmentSessionEntityModel } from '../../../entities/assessment-session/assessment-session.types';\nimport { RootConfig } from '../../../const';\nimport { openAssessmentSessionAnswersView } from '../utils/assessment-session-answers-view.util';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * Input for ViewCaseLastSessionAnswers command.\n */\nexport interface ViewCaseLastSessionAnswersCommandInput {\n /** Assessment Case ID to resolve the latest session for. */\n caseId: string;\n}\n\n/** Entity list passes evaluated action options on `__context__.options` / row `data`. */\ntype ViewCaseLastSessionAnswersCommandInvocation = ViewCaseLastSessionAnswersCommandInput & {\n options?: Partial<ViewCaseLastSessionAnswersCommandInput>;\n __context__?: {\n options?: Partial<ViewCaseLastSessionAnswersCommandInput>;\n data?: Record<string, unknown>;\n };\n};\n\n//#endregion\n\n//#region ---- View Case Last Session Answers Command ----\n\n/**\n * Opens a readonly view of the most recent assessment session answers for a case.\n */\n@Injectable()\nexport class ViewCaseLastSessionAnswersCommand implements AXPCommand<ViewCaseLastSessionAnswersCommandInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n /**\n * Returns a non-empty string or undefined.\n */\n private asNonEmptyString(value: unknown): string | undefined {\n if (isString(value) && !isEmpty(value)) {\n return value;\n }\n if (value != null && !isString(value)) {\n const normalized = toString(value).trim();\n return isEmpty(normalized) ? undefined : normalized;\n }\n return undefined;\n }\n\n /**\n * Resolves case id from root input, action options, or list row data.\n */\n private resolveCaseId(input: ViewCaseLastSessionAnswersCommandInvocation): string | null {\n const candidates = [\n get(input, 'caseId'),\n get(input, 'options.caseId'),\n get(input, '__context__.options.caseId'),\n get(input, '__context__.data.id'),\n ];\n\n for (const candidate of candidates) {\n const resolved = this.asNonEmptyString(candidate);\n if (resolved) {\n return resolved;\n }\n }\n\n return null;\n }\n\n /**\n * Loads case by id using query first, then byKey.\n */\n private async loadCase(caseId: string): Promise<AXMAssessmentManagementAssessmentCaseEntityModel | null> {\n const caseAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>();\n\n const listMatch = await caseAccessor.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'id',\n operator: { type: 'equal' },\n value: caseId,\n },\n });\n\n const fromQuery = first(listMatch.items);\n if (fromQuery) {\n return fromQuery;\n }\n\n return defaultTo(await caseAccessor.byKey(caseId), null);\n }\n\n /**\n * Finds the latest session record for a case (by lastSavedAt, then createdAt).\n */\n private async findLatestSession(\n caseId: string,\n ): Promise<AXMAssessmentManagementAssessmentSessionEntityModel | null> {\n const sessionAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>();\n\n const listMatch = await sessionAccessor.query({\n skip: 0,\n take: 1,\n sort: [\n { field: 'lastSavedAt', dir: 'desc' },\n { field: 'createdAt', dir: 'desc' },\n ],\n filter: {\n field: 'caseId',\n operator: { type: 'equal' },\n value: caseId,\n },\n });\n\n return first(listMatch.items) ?? null;\n }\n\n async execute(input: ViewCaseLastSessionAnswersCommandInvocation): Promise<AXPExecuteCommandResult<void>> {\n try {\n const caseId = this.resolveCaseId(input);\n if (!caseId) {\n return {\n success: false,\n message: {\n text: 'Assessment case ID is required',\n },\n };\n }\n\n const assessmentCase = await this.loadCase(caseId);\n if (!assessmentCase) {\n return {\n success: false,\n message: {\n text: `Assessment case with ID ${caseId} not found`,\n },\n };\n }\n\n const session = await this.findLatestSession(caseId);\n if (!session) {\n const messageKey = '@assessment-management:cases.actions.view-last-session-answers.no-session';\n const messageText =\n (await this.translationService.translateAsync(messageKey)) ||\n 'No assessment session found for this case';\n return {\n success: false,\n message: {\n text: messageText,\n },\n };\n }\n\n await openAssessmentSessionAnswersView(\n {\n entityService: this.entityService,\n questionnaireViewerService: this.questionnaireViewerService,\n translationService: this.translationService,\n },\n session,\n assessmentCase,\n );\n\n return {\n success: true,\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n return {\n success: false,\n message: {\n text: `Error viewing last session answers: ${message}`,\n },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ import { AXTranslationService } from '@acorex/core/translation';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, Injectable } from '@angular/core';
4
+ import { AXPEntityService } from '@acorex/platform/layout/entity';
5
+ import { isString, isEmpty, toString, get, defaultTo, first } from 'lodash-es';
6
+ import { A as AXMQuestionnaireViewerService, R as RootConfig } from './acorex-modules-assessment-management-acorex-modules-assessment-management-DlhSQ0cB.mjs';
7
+ import { o as openAssessmentSessionAnswersView } from './acorex-modules-assessment-management-assessment-session-answers-view.util-BRdwcIvw.mjs';
8
+
9
+ //#endregion
10
+ //#region ---- View Session Answers Command ----
11
+ /**
12
+ * Command that opens a readonly view of assessment session answers in a dialog.
13
+ */
14
+ class ViewSessionAnswersCommand {
15
+ constructor() {
16
+ //#region ---- Services & Dependencies ----
17
+ this.entityService = inject(AXPEntityService);
18
+ this.questionnaireViewerService = inject(AXMQuestionnaireViewerService);
19
+ this.translationService = inject(AXTranslationService);
20
+ }
21
+ //#endregion
22
+ //#region ---- Command Implementation ----
23
+ /**
24
+ * Returns a non-empty string or undefined.
25
+ */
26
+ asNonEmptyString(value) {
27
+ if (isString(value) && !isEmpty(value)) {
28
+ return value;
29
+ }
30
+ if (value != null && !isString(value)) {
31
+ const normalized = toString(value).trim();
32
+ return isEmpty(normalized) ? undefined : normalized;
33
+ }
34
+ return undefined;
35
+ }
36
+ /**
37
+ * Resolves session id from root input, action options, or related-list row data.
38
+ */
39
+ resolveSessionId(input) {
40
+ const candidates = [
41
+ get(input, 'sessionId'),
42
+ get(input, 'options.sessionId'),
43
+ get(input, '__context__.options.sessionId'),
44
+ get(input, '__context__.data.id'),
45
+ ];
46
+ for (const candidate of candidates) {
47
+ const resolved = this.asNonEmptyString(candidate);
48
+ if (resolved) {
49
+ return resolved;
50
+ }
51
+ }
52
+ return null;
53
+ }
54
+ /**
55
+ * Loads session from related-list row data, list query, or byKey (in that order).
56
+ */
57
+ async loadSession(sessionId, input) {
58
+ const row = get(input, '__context__.data');
59
+ const rowCaseId = this.asNonEmptyString(get(row, 'caseId'));
60
+ if (row && rowCaseId) {
61
+ return {
62
+ ...row,
63
+ id: sessionId,
64
+ answers: defaultTo(get(row, 'answers'), {}),
65
+ };
66
+ }
67
+ const sessionAccessor = this.entityService
68
+ .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)
69
+ .data();
70
+ const listMatch = await sessionAccessor.query({
71
+ skip: 0,
72
+ take: 1,
73
+ filter: {
74
+ field: 'id',
75
+ operator: { type: 'equal' },
76
+ value: sessionId,
77
+ },
78
+ });
79
+ const fromQuery = first(listMatch.items);
80
+ if (fromQuery) {
81
+ return fromQuery;
82
+ }
83
+ return defaultTo(await sessionAccessor.byKey(sessionId), null);
84
+ }
85
+ /**
86
+ * Loads case by id using query first, then byKey.
87
+ */
88
+ async loadCase(caseId) {
89
+ const caseAccessor = this.entityService
90
+ .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)
91
+ .data();
92
+ const listMatch = await caseAccessor.query({
93
+ skip: 0,
94
+ take: 1,
95
+ filter: {
96
+ field: 'id',
97
+ operator: { type: 'equal' },
98
+ value: caseId,
99
+ },
100
+ });
101
+ const fromQuery = first(listMatch.items);
102
+ if (fromQuery) {
103
+ return fromQuery;
104
+ }
105
+ return defaultTo(await caseAccessor.byKey(caseId), null);
106
+ }
107
+ async execute(input) {
108
+ try {
109
+ const sessionId = this.resolveSessionId(input);
110
+ if (!sessionId) {
111
+ return {
112
+ success: false,
113
+ message: {
114
+ text: 'Assessment session ID is required',
115
+ },
116
+ };
117
+ }
118
+ const session = await this.loadSession(sessionId, input);
119
+ if (!session) {
120
+ return {
121
+ success: false,
122
+ message: {
123
+ text: `Assessment session with ID ${sessionId} not found`,
124
+ },
125
+ };
126
+ }
127
+ const caseId = this.asNonEmptyString(get(session, 'caseId'));
128
+ if (!caseId) {
129
+ return {
130
+ success: false,
131
+ message: {
132
+ text: 'Assessment session is missing caseId',
133
+ },
134
+ };
135
+ }
136
+ const assessmentCase = await this.loadCase(caseId);
137
+ if (!assessmentCase) {
138
+ return {
139
+ success: false,
140
+ message: {
141
+ text: `Assessment case with ID ${caseId} not found`,
142
+ },
143
+ };
144
+ }
145
+ await openAssessmentSessionAnswersView({
146
+ entityService: this.entityService,
147
+ questionnaireViewerService: this.questionnaireViewerService,
148
+ translationService: this.translationService,
149
+ }, session, assessmentCase);
150
+ return {
151
+ success: true,
152
+ };
153
+ }
154
+ catch (error) {
155
+ const message = error instanceof Error ? error.message : 'Unknown error';
156
+ return {
157
+ success: false,
158
+ message: {
159
+ text: `Error viewing session answers: ${message}`,
160
+ },
161
+ };
162
+ }
163
+ }
164
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ViewSessionAnswersCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
165
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ViewSessionAnswersCommand }); }
166
+ }
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ViewSessionAnswersCommand, decorators: [{
168
+ type: Injectable
169
+ }] });
170
+
171
+ export { ViewSessionAnswersCommand };
172
+ //# sourceMappingURL=acorex-modules-assessment-management-view-session-answers.command-COTVoRRG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-modules-assessment-management-view-session-answers.command-COTVoRRG.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/commands/view-session-answers.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { defaultTo, first, get, isEmpty, isString, toString } from 'lodash-es';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '../../../entities/assessment-case/assessment-case.types';\nimport type { AXMAssessmentManagementAssessmentSessionEntityModel } from '../../../entities/assessment-session/assessment-session.types';\nimport { RootConfig } from '../../../const';\nimport { openAssessmentSessionAnswersView } from '../utils/assessment-session-answers-view.util';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * Input for ViewSessionAnswers command.\n */\nexport interface ViewSessionAnswersCommandInput {\n /**\n * Assessment Session ID to view answers for.\n */\n sessionId: string;\n}\n\n/** Entity list passes evaluated action options on `__context__.options` / row `data`. */\ntype ViewSessionAnswersCommandInvocation = ViewSessionAnswersCommandInput & {\n options?: Partial<ViewSessionAnswersCommandInput>;\n __context__?: {\n options?: Partial<ViewSessionAnswersCommandInput>;\n data?: Record<string, unknown>;\n };\n};\n\n//#endregion\n\n//#region ---- View Session Answers Command ----\n\n/**\n * Command that opens a readonly view of assessment session answers in a dialog.\n */\n@Injectable()\nexport class ViewSessionAnswersCommand implements AXPCommand<ViewSessionAnswersCommandInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n /**\n * Returns a non-empty string or undefined.\n */\n private asNonEmptyString(value: unknown): string | undefined {\n if (isString(value) && !isEmpty(value)) {\n return value;\n }\n if (value != null && !isString(value)) {\n const normalized = toString(value).trim();\n return isEmpty(normalized) ? undefined : normalized;\n }\n return undefined;\n }\n\n /**\n * Resolves session id from root input, action options, or related-list row data.\n */\n private resolveSessionId(input: ViewSessionAnswersCommandInvocation): string | null {\n const candidates = [\n get(input, 'sessionId'),\n get(input, 'options.sessionId'),\n get(input, '__context__.options.sessionId'),\n get(input, '__context__.data.id'),\n ];\n\n for (const candidate of candidates) {\n const resolved = this.asNonEmptyString(candidate);\n if (resolved) {\n return resolved;\n }\n }\n\n return null;\n }\n\n /**\n * Loads session from related-list row data, list query, or byKey (in that order).\n */\n private async loadSession(\n sessionId: string,\n input: ViewSessionAnswersCommandInvocation,\n ): Promise<AXMAssessmentManagementAssessmentSessionEntityModel | null> {\n const row = get(input, '__context__.data') as Record<string, unknown> | undefined;\n const rowCaseId = this.asNonEmptyString(get(row, 'caseId'));\n\n if (row && rowCaseId) {\n return {\n ...(row as unknown as AXMAssessmentManagementAssessmentSessionEntityModel),\n id: sessionId,\n answers: defaultTo(get(row, 'answers') as Record<string, unknown> | undefined, {}),\n };\n }\n\n const sessionAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>();\n\n const listMatch = await sessionAccessor.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'id',\n operator: { type: 'equal' },\n value: sessionId,\n },\n });\n\n const fromQuery = first(listMatch.items);\n if (fromQuery) {\n return fromQuery;\n }\n\n return defaultTo(await sessionAccessor.byKey(sessionId), null);\n }\n\n /**\n * Loads case by id using query first, then byKey.\n */\n private async loadCase(caseId: string): Promise<AXMAssessmentManagementAssessmentCaseEntityModel | null> {\n const caseAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>();\n\n const listMatch = await caseAccessor.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'id',\n operator: { type: 'equal' },\n value: caseId,\n },\n });\n\n const fromQuery = first(listMatch.items);\n if (fromQuery) {\n return fromQuery;\n }\n\n return defaultTo(await caseAccessor.byKey(caseId), null);\n }\n\n async execute(input: ViewSessionAnswersCommandInvocation): Promise<AXPExecuteCommandResult<void>> {\n try {\n const sessionId = this.resolveSessionId(input);\n if (!sessionId) {\n return {\n success: false,\n message: {\n text: 'Assessment session ID is required',\n },\n };\n }\n\n const session = await this.loadSession(sessionId, input);\n if (!session) {\n return {\n success: false,\n message: {\n text: `Assessment session with ID ${sessionId} not found`,\n },\n };\n }\n\n const caseId = this.asNonEmptyString(get(session, 'caseId'));\n if (!caseId) {\n return {\n success: false,\n message: {\n text: 'Assessment session is missing caseId',\n },\n };\n }\n\n const assessmentCase = await this.loadCase(caseId);\n if (!assessmentCase) {\n return {\n success: false,\n message: {\n text: `Assessment case with ID ${caseId} not found`,\n },\n };\n }\n\n await openAssessmentSessionAnswersView(\n {\n entityService: this.entityService,\n questionnaireViewerService: this.questionnaireViewerService,\n translationService: this.translationService,\n },\n session,\n assessmentCase,\n );\n\n return {\n success: true,\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n return {\n success: false,\n message: {\n text: `Error viewing session answers: ${message}`,\n },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,239 @@
1
+ import { AXTranslationService } from '@acorex/core/translation';
2
+ import { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';
3
+ import { AXPEntityService } from '@acorex/platform/layout/entity';
4
+ import * as i0 from '@angular/core';
5
+ import { inject, Injectable } from '@angular/core';
6
+ import { defaultTo, get, isEmpty, isString, toString, first } from 'lodash-es';
7
+ import { m as mapToOutcomeResultsViewModel, A as AXMQuestionnaireViewerService, R as RootConfig } from './acorex-modules-assessment-management-acorex-modules-assessment-management-DlhSQ0cB.mjs';
8
+
9
+ //#region ---- Imports ----
10
+ //#endregion
11
+ //#region ---- Viewer ----
12
+ /**
13
+ * Opens a dialog that shows stored session outcome snapshots (no re-evaluation).
14
+ */
15
+ async function openAssessmentSessionOutcomesView(deps, session, assessmentCase) {
16
+ const questionnaireId = assessmentCase.questionnaireId;
17
+ if (!questionnaireId) {
18
+ throw new Error('Assessment case is missing questionnaireId');
19
+ }
20
+ const storedOutcomes = defaultTo(get(session, 'outcomes'), {});
21
+ if (isEmpty(storedOutcomes)) {
22
+ throw new Error('Assessment session has no stored outcome results');
23
+ }
24
+ const snapshot = await deps.questionnaireViewerService.buildOutcomeResultsFromStoredValues(storedOutcomes, {
25
+ questionnaireId,
26
+ });
27
+ const locale = deps.translationService.getActiveLang?.() ?? 'en-US';
28
+ const sectionTitle = await deps.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.flow.outcomes-section-title');
29
+ const emptyMessage = await deps.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.flow.no-outcomes');
30
+ const viewModel = {
31
+ ...mapToOutcomeResultsViewModel(snapshot, { locale }),
32
+ title: sectionTitle,
33
+ emptyMessage,
34
+ };
35
+ const viewTitleKey = '@assessment-management:sessions.actions.view-outcomes.title';
36
+ const viewTitleBase = (await deps.translationService.translateAsync(viewTitleKey)) || 'View outcome results';
37
+ const responderName = defaultTo(get(session, 'responder.displayName'), get(session, 'responderId'));
38
+ const viewTitle = !isEmpty(responderName) ? `${viewTitleBase}: ${responderName}` : viewTitleBase;
39
+ const dialogRef = await deps.layoutBuilder
40
+ .create()
41
+ .dialog((dialog) => {
42
+ dialog
43
+ .setTitle(viewTitle)
44
+ .setSize('lg')
45
+ .content((content) => {
46
+ content.customWidget('outcome-results-viewer', (widget) => {
47
+ widget.path('outcomeResults');
48
+ });
49
+ })
50
+ .setContext({
51
+ outcomeResults: viewModel,
52
+ })
53
+ .setActions((actions) => {
54
+ actions.cancel('@general:actions.close.title');
55
+ });
56
+ })
57
+ .show();
58
+ if (dialogRef.action() === 'cancel') {
59
+ dialogRef.close();
60
+ }
61
+ }
62
+ //#endregion
63
+
64
+ //#region ---- Imports ----
65
+ //#endregion
66
+ //#region ---- View Session Outcomes Command ----
67
+ /**
68
+ * Command that opens a dialog showing stored outcome snapshots for an assessment session.
69
+ */
70
+ class ViewSessionOutcomesCommand {
71
+ constructor() {
72
+ //#region ---- Services & Dependencies ----
73
+ this.entityService = inject(AXPEntityService);
74
+ this.questionnaireViewerService = inject(AXMQuestionnaireViewerService);
75
+ this.translationService = inject(AXTranslationService);
76
+ this.layoutBuilder = inject(AXPLayoutBuilderService);
77
+ }
78
+ //#endregion
79
+ //#region ---- Command Implementation ----
80
+ /**
81
+ * Returns a non-empty string or undefined.
82
+ */
83
+ asNonEmptyString(value) {
84
+ if (isString(value) && !isEmpty(value)) {
85
+ return value;
86
+ }
87
+ if (value != null && !isString(value)) {
88
+ const normalized = toString(value).trim();
89
+ return isEmpty(normalized) ? undefined : normalized;
90
+ }
91
+ return undefined;
92
+ }
93
+ /**
94
+ * Resolves session id from root input, action options, or related-list row data.
95
+ */
96
+ resolveSessionId(input) {
97
+ const candidates = [
98
+ get(input, 'sessionId'),
99
+ get(input, 'options.sessionId'),
100
+ get(input, '__context__.options.sessionId'),
101
+ get(input, '__context__.data.id'),
102
+ ];
103
+ for (const candidate of candidates) {
104
+ const resolved = this.asNonEmptyString(candidate);
105
+ if (resolved) {
106
+ return resolved;
107
+ }
108
+ }
109
+ return null;
110
+ }
111
+ /**
112
+ * Loads session from related-list row data, list query, or byKey (in that order).
113
+ */
114
+ async loadSession(sessionId, input) {
115
+ const row = get(input, '__context__.data');
116
+ const rowCaseId = this.asNonEmptyString(get(row, 'caseId'));
117
+ if (row && rowCaseId) {
118
+ return {
119
+ ...row,
120
+ id: sessionId,
121
+ outcomes: defaultTo(get(row, 'outcomes'), {}),
122
+ };
123
+ }
124
+ const sessionAccessor = this.entityService
125
+ .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)
126
+ .data();
127
+ const listMatch = await sessionAccessor.query({
128
+ skip: 0,
129
+ take: 1,
130
+ filter: {
131
+ field: 'id',
132
+ operator: { type: 'equal' },
133
+ value: sessionId,
134
+ },
135
+ });
136
+ const fromQuery = first(listMatch.items);
137
+ if (fromQuery) {
138
+ return fromQuery;
139
+ }
140
+ return defaultTo(await sessionAccessor.byKey(sessionId), null);
141
+ }
142
+ /**
143
+ * Loads case by id using query first, then byKey.
144
+ */
145
+ async loadCase(caseId) {
146
+ const caseAccessor = this.entityService
147
+ .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)
148
+ .data();
149
+ const listMatch = await caseAccessor.query({
150
+ skip: 0,
151
+ take: 1,
152
+ filter: {
153
+ field: 'id',
154
+ operator: { type: 'equal' },
155
+ value: caseId,
156
+ },
157
+ });
158
+ const fromQuery = first(listMatch.items);
159
+ if (fromQuery) {
160
+ return fromQuery;
161
+ }
162
+ return defaultTo(await caseAccessor.byKey(caseId), null);
163
+ }
164
+ async execute(input) {
165
+ try {
166
+ const sessionId = this.resolveSessionId(input);
167
+ if (!sessionId) {
168
+ return {
169
+ success: false,
170
+ message: {
171
+ text: 'Assessment session ID is required',
172
+ },
173
+ };
174
+ }
175
+ const session = await this.loadSession(sessionId, input);
176
+ if (!session) {
177
+ return {
178
+ success: false,
179
+ message: {
180
+ text: `Assessment session with ID ${sessionId} not found`,
181
+ },
182
+ };
183
+ }
184
+ const storedOutcomes = get(session, 'outcomes');
185
+ if (isEmpty(storedOutcomes)) {
186
+ return {
187
+ success: false,
188
+ message: {
189
+ text: await this.translationService.translateAsync('@assessment-management:sessions.actions.view-outcomes.empty'),
190
+ },
191
+ };
192
+ }
193
+ const caseId = this.asNonEmptyString(get(session, 'caseId'));
194
+ if (!caseId) {
195
+ return {
196
+ success: false,
197
+ message: {
198
+ text: 'Assessment session is missing caseId',
199
+ },
200
+ };
201
+ }
202
+ const assessmentCase = await this.loadCase(caseId);
203
+ if (!assessmentCase) {
204
+ return {
205
+ success: false,
206
+ message: {
207
+ text: `Assessment case with ID ${caseId} not found`,
208
+ },
209
+ };
210
+ }
211
+ await openAssessmentSessionOutcomesView({
212
+ entityService: this.entityService,
213
+ questionnaireViewerService: this.questionnaireViewerService,
214
+ translationService: this.translationService,
215
+ layoutBuilder: this.layoutBuilder,
216
+ }, session, assessmentCase);
217
+ return {
218
+ success: true,
219
+ };
220
+ }
221
+ catch (error) {
222
+ const message = error instanceof Error ? error.message : 'Unknown error';
223
+ return {
224
+ success: false,
225
+ message: {
226
+ text: `Error viewing session outcomes: ${message}`,
227
+ },
228
+ };
229
+ }
230
+ }
231
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ViewSessionOutcomesCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
232
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ViewSessionOutcomesCommand }); }
233
+ }
234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ViewSessionOutcomesCommand, decorators: [{
235
+ type: Injectable
236
+ }] });
237
+
238
+ export { ViewSessionOutcomesCommand };
239
+ //# sourceMappingURL=acorex-modules-assessment-management-view-session-outcomes.command-2buH7ydV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-modules-assessment-management-view-session-outcomes.command-2buH7ydV.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/utils/assessment-session-outcomes-view.util.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/commands/view-session-outcomes.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport type { AXPOutcomeResultsViewModel } from '@acorex/platform/layout/components';\nimport { AXPLayoutBuilderService, type IWidgetBuilder } from '@acorex/platform/layout/builder';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { defaultTo, get, isEmpty } from 'lodash-es';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '../../../entities/assessment-case/assessment-case.types';\nimport type { AXMAssessmentManagementAssessmentSessionEntityModel } from '../../../entities/assessment-session/assessment-session.types';\nimport { RootConfig } from '../../../const';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\nimport { mapToOutcomeResultsViewModel } from './outcome-results-view.mapper';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface OpenAssessmentSessionOutcomesViewDeps {\n entityService: AXPEntityService;\n questionnaireViewerService: AXMQuestionnaireViewerService;\n translationService: AXTranslationService;\n layoutBuilder: AXPLayoutBuilderService;\n}\n\n//#endregion\n\n//#region ---- Viewer ----\n\n/**\n * Opens a dialog that shows stored session outcome snapshots (no re-evaluation).\n */\nexport async function openAssessmentSessionOutcomesView(\n deps: OpenAssessmentSessionOutcomesViewDeps,\n session: AXMAssessmentManagementAssessmentSessionEntityModel,\n assessmentCase: AXMAssessmentManagementAssessmentCaseEntityModel,\n): Promise<void> {\n const questionnaireId = assessmentCase.questionnaireId;\n if (!questionnaireId) {\n throw new Error('Assessment case is missing questionnaireId');\n }\n\n const storedOutcomes = defaultTo(get(session, 'outcomes') as Record<string, unknown> | undefined, {});\n if (isEmpty(storedOutcomes)) {\n throw new Error('Assessment session has no stored outcome results');\n }\n\n const snapshot = await deps.questionnaireViewerService.buildOutcomeResultsFromStoredValues(storedOutcomes, {\n questionnaireId,\n });\n\n const locale = deps.translationService.getActiveLang?.() ?? 'en-US';\n const sectionTitle = await deps.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.flow.outcomes-section-title',\n );\n const emptyMessage = await deps.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.flow.no-outcomes',\n );\n\n const viewModel: AXPOutcomeResultsViewModel = {\n ...mapToOutcomeResultsViewModel(snapshot, { locale }),\n title: sectionTitle,\n emptyMessage,\n };\n\n const viewTitleKey = '@assessment-management:sessions.actions.view-outcomes.title';\n const viewTitleBase = (await deps.translationService.translateAsync(viewTitleKey)) || 'View outcome results';\n const responderName = defaultTo(get(session, 'responder.displayName'), get(session, 'responderId'));\n const viewTitle = !isEmpty(responderName) ? `${viewTitleBase}: ${responderName}` : viewTitleBase;\n\n const dialogRef = await deps.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(viewTitle)\n .setSize('lg')\n .content((content) => {\n content.customWidget('outcome-results-viewer', (widget: IWidgetBuilder) => {\n widget.path('outcomeResults');\n });\n })\n .setContext({\n outcomeResults: viewModel,\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.close.title');\n });\n })\n .show();\n\n if (dialogRef.action() === 'cancel') {\n dialogRef.close();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, first, get, isEmpty, isString, toString } from 'lodash-es';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '../../../entities/assessment-case/assessment-case.types';\nimport type { AXMAssessmentManagementAssessmentSessionEntityModel } from '../../../entities/assessment-session/assessment-session.types';\nimport { RootConfig } from '../../../const';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\nimport { openAssessmentSessionOutcomesView } from '../utils/assessment-session-outcomes-view.util';\n\n//#endregion\n\n//#region ---- Command Input/Output Types ----\n\n/**\n * Input for ViewSessionOutcomes command.\n */\nexport interface ViewSessionOutcomesCommandInput {\n /**\n * Assessment Session ID to view stored outcome results for.\n */\n sessionId: string;\n}\n\n/** Entity list passes evaluated action options on `__context__.options` / row `data`. */\ntype ViewSessionOutcomesCommandInvocation = ViewSessionOutcomesCommandInput & {\n options?: Partial<ViewSessionOutcomesCommandInput>;\n __context__?: {\n options?: Partial<ViewSessionOutcomesCommandInput>;\n data?: Record<string, unknown>;\n };\n};\n\n//#endregion\n\n//#region ---- View Session Outcomes Command ----\n\n/**\n * Command that opens a dialog showing stored outcome snapshots for an assessment session.\n */\n@Injectable()\nexport class ViewSessionOutcomesCommand implements AXPCommand<ViewSessionOutcomesCommandInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n private readonly translationService = inject(AXTranslationService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n /**\n * Returns a non-empty string or undefined.\n */\n private asNonEmptyString(value: unknown): string | undefined {\n if (isString(value) && !isEmpty(value)) {\n return value;\n }\n if (value != null && !isString(value)) {\n const normalized = toString(value).trim();\n return isEmpty(normalized) ? undefined : normalized;\n }\n return undefined;\n }\n\n /**\n * Resolves session id from root input, action options, or related-list row data.\n */\n private resolveSessionId(input: ViewSessionOutcomesCommandInvocation): string | null {\n const candidates = [\n get(input, 'sessionId'),\n get(input, 'options.sessionId'),\n get(input, '__context__.options.sessionId'),\n get(input, '__context__.data.id'),\n ];\n\n for (const candidate of candidates) {\n const resolved = this.asNonEmptyString(candidate);\n if (resolved) {\n return resolved;\n }\n }\n\n return null;\n }\n\n /**\n * Loads session from related-list row data, list query, or byKey (in that order).\n */\n private async loadSession(\n sessionId: string,\n input: ViewSessionOutcomesCommandInvocation,\n ): Promise<AXMAssessmentManagementAssessmentSessionEntityModel | null> {\n const row = get(input, '__context__.data') as Record<string, unknown> | undefined;\n const rowCaseId = this.asNonEmptyString(get(row, 'caseId'));\n\n if (row && rowCaseId) {\n return {\n ...(row as unknown as AXMAssessmentManagementAssessmentSessionEntityModel),\n id: sessionId,\n outcomes: defaultTo(get(row, 'outcomes') as Record<string, unknown> | undefined, {}),\n };\n }\n\n const sessionAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>();\n\n const listMatch = await sessionAccessor.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'id',\n operator: { type: 'equal' },\n value: sessionId,\n },\n });\n\n const fromQuery = first(listMatch.items);\n if (fromQuery) {\n return fromQuery;\n }\n\n return defaultTo(await sessionAccessor.byKey(sessionId), null);\n }\n\n /**\n * Loads case by id using query first, then byKey.\n */\n private async loadCase(caseId: string): Promise<AXMAssessmentManagementAssessmentCaseEntityModel | null> {\n const caseAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>();\n\n const listMatch = await caseAccessor.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'id',\n operator: { type: 'equal' },\n value: caseId,\n },\n });\n\n const fromQuery = first(listMatch.items);\n if (fromQuery) {\n return fromQuery;\n }\n\n return defaultTo(await caseAccessor.byKey(caseId), null);\n }\n\n async execute(input: ViewSessionOutcomesCommandInvocation): Promise<AXPExecuteCommandResult<void>> {\n try {\n const sessionId = this.resolveSessionId(input);\n if (!sessionId) {\n return {\n success: false,\n message: {\n text: 'Assessment session ID is required',\n },\n };\n }\n\n const session = await this.loadSession(sessionId, input);\n if (!session) {\n return {\n success: false,\n message: {\n text: `Assessment session with ID ${sessionId} not found`,\n },\n };\n }\n\n const storedOutcomes = get(session, 'outcomes') as Record<string, unknown> | undefined;\n if (isEmpty(storedOutcomes)) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync(\n '@assessment-management:sessions.actions.view-outcomes.empty',\n ),\n },\n };\n }\n\n const caseId = this.asNonEmptyString(get(session, 'caseId'));\n if (!caseId) {\n return {\n success: false,\n message: {\n text: 'Assessment session is missing caseId',\n },\n };\n }\n\n const assessmentCase = await this.loadCase(caseId);\n if (!assessmentCase) {\n return {\n success: false,\n message: {\n text: `Assessment case with ID ${caseId} not found`,\n },\n };\n }\n\n await openAssessmentSessionOutcomesView(\n {\n entityService: this.entityService,\n questionnaireViewerService: this.questionnaireViewerService,\n translationService: this.translationService,\n layoutBuilder: this.layoutBuilder,\n },\n session,\n assessmentCase,\n );\n\n return {\n success: true,\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n return {\n success: false,\n message: {\n text: `Error viewing session outcomes: ${message}`,\n },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}