@acorex-platform/module-assessment-management-client 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs +10593 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-assessment-case-status.provider-i48XDX-I.mjs +83 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-assessment-case-status.provider-i48XDX-I.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-assessment-session-answers-view.util-42ZcOY2C.mjs +124 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-assessment-session-answers-view.util-42ZcOY2C.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-assessment-session-status.provider-Bk9hHj5V.mjs +97 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-assessment-session-status.provider-Bk9hHj5V.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-assessment-voice.commands-CduVfWQ-.mjs +134 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-assessment-voice.commands-CduVfWQ-.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts.mjs +1171 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-fill-assessment-session.command-VF80DWQf.mjs +270 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-fill-assessment-session.command-VF80DWQf.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-list-question-difficulty-options.query-h3xT-MNd.mjs +59 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-list-question-difficulty-options.query-h3xT-MNd.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-preview-question.command-C1ODQxDn.mjs +123 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-preview-question.command-C1ODQxDn.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-preview-questionnaire.command-DBm7ve4w.mjs +165 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-preview-questionnaire.command-DBm7ve4w.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-preview-session-pdf.command-BsiJU6ep.mjs +178 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-preview-session-pdf.command-BsiJU6ep.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Bbl-efrl.mjs +489 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Bbl-efrl.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-Djcfg0dv.mjs +609 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-Djcfg0dv.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-review-assessment-session.command-CZ96KQ-l.mjs +228 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-review-assessment-session.command-CZ96KQ-l.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-view-session-answers.command-CCzJoJ4p.mjs +280 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-view-session-answers.command-CCzJoJ4p.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client.mjs +2 -0
- package/fesm2022/acorex-platform-module-assessment-management-client.mjs.map +1 -0
- package/package.json +28 -0
- package/types/acorex-platform-module-assessment-management-client-contracts.d.ts +752 -0
- package/types/acorex-platform-module-assessment-management-client.d.ts +1279 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { AXPStatusProvider, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';
|
|
2
|
+
|
|
3
|
+
//#region ---- Imports ----
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region ---- Assessment Case Status Provider ----
|
|
6
|
+
/**
|
|
7
|
+
* Assessment case status provider defining lifecycle states: Draft, Active, In Progress, Closed, Cancelled.
|
|
8
|
+
* Used by the status plugin to manage assessment case status transitions and metadata.
|
|
9
|
+
*/
|
|
10
|
+
class AXMAssessmentCaseStatusProvider extends AXPStatusProvider {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.key = 'assessment-management.status.case';
|
|
14
|
+
this.defaultStatus = AXPSystemStatusType.Draft;
|
|
15
|
+
this.statuses = [
|
|
16
|
+
systemStatusToDefinition(AXPSystemStatusType.Draft, {
|
|
17
|
+
title: '@assessment-management:cases.states.draft',
|
|
18
|
+
generateView: true,
|
|
19
|
+
}),
|
|
20
|
+
systemStatusToDefinition(AXPSystemStatusType.Active, {
|
|
21
|
+
title: '@assessment-management:cases.states.active',
|
|
22
|
+
generateView: true,
|
|
23
|
+
}),
|
|
24
|
+
systemStatusToDefinition(AXPSystemStatusType.InProgress, {
|
|
25
|
+
title: '@assessment-management:cases.states.in-progress',
|
|
26
|
+
generateView: true,
|
|
27
|
+
}),
|
|
28
|
+
systemStatusToDefinition(AXPSystemStatusType.Closed, {
|
|
29
|
+
title: '@assessment-management:cases.states.closed',
|
|
30
|
+
generateView: true,
|
|
31
|
+
}),
|
|
32
|
+
systemStatusToDefinition(AXPSystemStatusType.Cancelled, {
|
|
33
|
+
title: '@assessment-management:cases.states.cancelled',
|
|
34
|
+
generateView: true,
|
|
35
|
+
}),
|
|
36
|
+
];
|
|
37
|
+
this.transitions = [
|
|
38
|
+
{
|
|
39
|
+
from: AXPSystemStatusType.Draft,
|
|
40
|
+
to: AXPSystemStatusType.Active,
|
|
41
|
+
title: '@assessment-management:cases.transitions.activate',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
from: AXPSystemStatusType.Active,
|
|
45
|
+
to: AXPSystemStatusType.InProgress,
|
|
46
|
+
title: '@assessment-management:cases.transitions.start',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
from: AXPSystemStatusType.InProgress,
|
|
50
|
+
to: AXPSystemStatusType.Closed,
|
|
51
|
+
title: '@assessment-management:cases.transitions.close',
|
|
52
|
+
requiresApproval: true,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
from: AXPSystemStatusType.Active,
|
|
56
|
+
to: AXPSystemStatusType.Closed,
|
|
57
|
+
title: '@assessment-management:cases.transitions.close',
|
|
58
|
+
requiresApproval: true,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
from: AXPSystemStatusType.Active,
|
|
62
|
+
to: AXPSystemStatusType.Cancelled,
|
|
63
|
+
title: '@assessment-management:cases.transitions.cancel',
|
|
64
|
+
requiresApproval: true,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
from: AXPSystemStatusType.InProgress,
|
|
68
|
+
to: AXPSystemStatusType.Cancelled,
|
|
69
|
+
title: '@assessment-management:cases.transitions.cancel',
|
|
70
|
+
requiresApproval: true,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
from: AXPSystemStatusType.Closed,
|
|
74
|
+
to: AXPSystemStatusType.Active,
|
|
75
|
+
title: '@assessment-management:cases.transitions.reopen',
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
|
|
82
|
+
export { AXMAssessmentCaseStatusProvider };
|
|
83
|
+
//# sourceMappingURL=acorex-platform-module-assessment-management-client-assessment-case-status.provider-i48XDX-I.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-assessment-management-client-assessment-case-status.provider-i48XDX-I.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/assessment-case-status.provider.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Assessment Case Status Provider ----\n\n/**\n * Assessment case status provider defining lifecycle states: Draft, Active, In Progress, Closed, Cancelled.\n * Used by the status plugin to manage assessment case status transitions and metadata.\n */\nexport class AXMAssessmentCaseStatusProvider extends AXPStatusProvider {\n readonly key = 'assessment-management.status.case';\n\n readonly defaultStatus = AXPSystemStatusType.Draft;\n\n readonly statuses = [\n systemStatusToDefinition(AXPSystemStatusType.Draft, {\n title: '@assessment-management:cases.states.draft',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Active, {\n title: '@assessment-management:cases.states.active',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.InProgress, {\n title: '@assessment-management:cases.states.in-progress',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Closed, {\n title: '@assessment-management:cases.states.closed',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Cancelled, {\n title: '@assessment-management:cases.states.cancelled',\n generateView: true,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXPSystemStatusType.Draft,\n to: AXPSystemStatusType.Active,\n title: '@assessment-management:cases.transitions.activate',\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.InProgress,\n title: '@assessment-management:cases.transitions.start',\n },\n {\n from: AXPSystemStatusType.InProgress,\n to: AXPSystemStatusType.Closed,\n title: '@assessment-management:cases.transitions.close',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Closed,\n title: '@assessment-management:cases.transitions.close',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Cancelled,\n title: '@assessment-management:cases.transitions.cancel',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.InProgress,\n to: AXPSystemStatusType.Cancelled,\n title: '@assessment-management:cases.transitions.cancel',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.Closed,\n to: AXPSystemStatusType.Active,\n title: '@assessment-management:cases.transitions.reopen',\n },\n ];\n}\n\n//#endregion\n\n"],"names":[],"mappings":";;AAAA;AAIA;AAEA;AAEA;;;AAGG;AACG,MAAO,+BAAgC,SAAQ,iBAAiB,CAAA;AAAtE,IAAA,WAAA,GAAA;;QACa,IAAA,CAAA,GAAG,GAAG,mCAAmC;AAEzC,QAAA,IAAA,CAAA,aAAa,GAAG,mBAAmB,CAAC,KAAK;AAEzC,QAAA,IAAA,CAAA,QAAQ,GAAG;AAChB,YAAA,wBAAwB,CAAC,mBAAmB,CAAC,KAAK,EAAE;AAChD,gBAAA,KAAK,EAAE,2CAA2C;AAClD,gBAAA,YAAY,EAAE,IAAI;aACrB,CAAC;AACF,YAAA,wBAAwB,CAAC,mBAAmB,CAAC,MAAM,EAAE;AACjD,gBAAA,KAAK,EAAE,4CAA4C;AACnD,gBAAA,YAAY,EAAE,IAAI;aACrB,CAAC;AACF,YAAA,wBAAwB,CAAC,mBAAmB,CAAC,UAAU,EAAE;AACrD,gBAAA,KAAK,EAAE,iDAAiD;AACxD,gBAAA,YAAY,EAAE,IAAI;aACrB,CAAC;AACF,YAAA,wBAAwB,CAAC,mBAAmB,CAAC,MAAM,EAAE;AACjD,gBAAA,KAAK,EAAE,4CAA4C;AACnD,gBAAA,YAAY,EAAE,IAAI;aACrB,CAAC;AACF,YAAA,wBAAwB,CAAC,mBAAmB,CAAC,SAAS,EAAE;AACpD,gBAAA,KAAK,EAAE,+CAA+C;AACtD,gBAAA,YAAY,EAAE,IAAI;aACrB,CAAC;SACL;AAEQ,QAAA,IAAA,CAAA,WAAW,GAA0B;AAC1C,YAAA;gBACI,IAAI,EAAE,mBAAmB,CAAC,KAAK;gBAC/B,EAAE,EAAE,mBAAmB,CAAC,MAAM;AAC9B,gBAAA,KAAK,EAAE,mDAAmD;AAC7D,aAAA;AACD,YAAA;gBACI,IAAI,EAAE,mBAAmB,CAAC,MAAM;gBAChC,EAAE,EAAE,mBAAmB,CAAC,UAAU;AAClC,gBAAA,KAAK,EAAE,gDAAgD;AAC1D,aAAA;AACD,YAAA;gBACI,IAAI,EAAE,mBAAmB,CAAC,UAAU;gBACpC,EAAE,EAAE,mBAAmB,CAAC,MAAM;AAC9B,gBAAA,KAAK,EAAE,gDAAgD;AACvD,gBAAA,gBAAgB,EAAE,IAAI;AACzB,aAAA;AACD,YAAA;gBACI,IAAI,EAAE,mBAAmB,CAAC,MAAM;gBAChC,EAAE,EAAE,mBAAmB,CAAC,MAAM;AAC9B,gBAAA,KAAK,EAAE,gDAAgD;AACvD,gBAAA,gBAAgB,EAAE,IAAI;AACzB,aAAA;AACD,YAAA;gBACI,IAAI,EAAE,mBAAmB,CAAC,MAAM;gBAChC,EAAE,EAAE,mBAAmB,CAAC,SAAS;AACjC,gBAAA,KAAK,EAAE,iDAAiD;AACxD,gBAAA,gBAAgB,EAAE,IAAI;AACzB,aAAA;AACD,YAAA;gBACI,IAAI,EAAE,mBAAmB,CAAC,UAAU;gBACpC,EAAE,EAAE,mBAAmB,CAAC,SAAS;AACjC,gBAAA,KAAK,EAAE,iDAAiD;AACxD,gBAAA,gBAAgB,EAAE,IAAI;AACzB,aAAA;AACD,YAAA;gBACI,IAAI,EAAE,mBAAmB,CAAC,MAAM;gBAChC,EAAE,EAAE,mBAAmB,CAAC,MAAM;AAC9B,gBAAA,KAAK,EAAE,iDAAiD;AAC3D,aAAA;SACJ;IACL;AAAC;AAED;;;;"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { defaultTo, get, isEmpty } from 'lodash';
|
|
2
|
+
import { RootConfig, toPrintSettings, toDisplaySettings } from '@acorex-platform/module-assessment-management-client/contracts';
|
|
3
|
+
|
|
4
|
+
//#region ---- Imports ----
|
|
5
|
+
//#endregion
|
|
6
|
+
//#region ---- Viewer ----
|
|
7
|
+
/**
|
|
8
|
+
* Returns pre-built outcome results when the session has a non-empty stored outcomes snapshot.
|
|
9
|
+
*/
|
|
10
|
+
async function resolveStoredOutcomeResults(questionnaireViewerService, session, questionnaireId) {
|
|
11
|
+
const storedOutcomes = defaultTo(get(session, 'outcomes'), {});
|
|
12
|
+
if (isEmpty(storedOutcomes)) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const snapshot = await questionnaireViewerService.buildOutcomeResultsFromStoredValues(storedOutcomes, {
|
|
16
|
+
questionnaireId,
|
|
17
|
+
});
|
|
18
|
+
const hasOutcomeSections = (snapshot.outcomeSections?.length ?? 0) > 0;
|
|
19
|
+
const hasOutcomeValues = !isEmpty(snapshot.outcomes);
|
|
20
|
+
if (!hasOutcomeSections && !hasOutcomeValues) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return snapshot;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Opens a readonly questionnaire viewer dialog for the given assessment session.
|
|
27
|
+
*/
|
|
28
|
+
async function openAssessmentSessionAnswersView(deps, session, assessmentCase, options = {}) {
|
|
29
|
+
const initialStep = options.initialStep ?? 'answers';
|
|
30
|
+
const questionnaireId = assessmentCase.questionnaireId;
|
|
31
|
+
if (!questionnaireId) {
|
|
32
|
+
throw new Error('Assessment case is missing questionnaireId');
|
|
33
|
+
}
|
|
34
|
+
const questionnaire = await deps.entityService
|
|
35
|
+
.withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)
|
|
36
|
+
.data()
|
|
37
|
+
.byKey(questionnaireId);
|
|
38
|
+
if (!questionnaire) {
|
|
39
|
+
throw new Error(`Questionnaire with ID ${questionnaireId} not found`);
|
|
40
|
+
}
|
|
41
|
+
const sections = get(questionnaire, 'questions.sections');
|
|
42
|
+
if (isEmpty(sections)) {
|
|
43
|
+
throw new Error('Questionnaire has no questions to display');
|
|
44
|
+
}
|
|
45
|
+
const viewTitleKey = initialStep === 'results'
|
|
46
|
+
? '@assessment-management:sessions.actions.view-outcomes.title'
|
|
47
|
+
: '@assessment-management:sessions.actions.view-answers.title';
|
|
48
|
+
const viewTitleBase = (await deps.translationService.translateAsync(viewTitleKey)) ||
|
|
49
|
+
(initialStep === 'results' ? 'View outcome results' : 'View Answers');
|
|
50
|
+
const responderName = defaultTo(get(session, 'responder.displayName'), get(session, 'responderId'));
|
|
51
|
+
const viewTitle = !isEmpty(responderName) ? `${viewTitleBase}: ${responderName}` : viewTitleBase;
|
|
52
|
+
const questions = get(questionnaire, 'questions');
|
|
53
|
+
const structure = {
|
|
54
|
+
sections: defaultTo(get(questions, 'sections'), []),
|
|
55
|
+
displaySettings: toDisplaySettings(questionnaire) ?? undefined,
|
|
56
|
+
printSettings: toPrintSettings(questionnaire) ?? undefined,
|
|
57
|
+
};
|
|
58
|
+
const storedOutcomeResults = await resolveStoredOutcomeResults(deps.questionnaireViewerService, session, questionnaireId);
|
|
59
|
+
if (initialStep === 'results' && !storedOutcomeResults) {
|
|
60
|
+
throw new Error('Assessment session has no displayable outcome results');
|
|
61
|
+
}
|
|
62
|
+
await deps.questionnaireViewerService.open({
|
|
63
|
+
title: viewTitle,
|
|
64
|
+
structure,
|
|
65
|
+
config: {
|
|
66
|
+
readonly: true,
|
|
67
|
+
initialFlowStep: initialStep === 'results' ? 'results' : 'questions',
|
|
68
|
+
},
|
|
69
|
+
initialAnswers: defaultTo(get(session, 'answers'), {}),
|
|
70
|
+
questionnaireId,
|
|
71
|
+
storedOutcomeResults,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Opens a readonly answers viewer with Sign off / Reject for workflow manager review.
|
|
76
|
+
*/
|
|
77
|
+
async function openAssessmentSessionAnswersReviewDecision(deps, session, assessmentCase, options = {}) {
|
|
78
|
+
const questionnaireId = assessmentCase.questionnaireId;
|
|
79
|
+
if (!questionnaireId) {
|
|
80
|
+
throw new Error('Assessment case is missing questionnaireId');
|
|
81
|
+
}
|
|
82
|
+
const questionnaire = await deps.entityService
|
|
83
|
+
.withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)
|
|
84
|
+
.data()
|
|
85
|
+
.byKey(questionnaireId);
|
|
86
|
+
if (!questionnaire) {
|
|
87
|
+
throw new Error(`Questionnaire with ID ${questionnaireId} not found`);
|
|
88
|
+
}
|
|
89
|
+
const sections = get(questionnaire, 'questions.sections');
|
|
90
|
+
if (isEmpty(sections)) {
|
|
91
|
+
throw new Error('Questionnaire has no questions to display');
|
|
92
|
+
}
|
|
93
|
+
const reviewTitleKey = '@assessment-management:sessions.actions.review-answers.title';
|
|
94
|
+
const reviewTitleBase = (await deps.translationService.translateAsync(reviewTitleKey)) || 'Review answers';
|
|
95
|
+
const responderName = defaultTo(get(session, 'responder.displayName'), get(session, 'responderId'));
|
|
96
|
+
const viewTitle = options.title?.trim() ||
|
|
97
|
+
(!isEmpty(responderName) ? `${reviewTitleBase}: ${responderName}` : reviewTitleBase);
|
|
98
|
+
const questions = get(questionnaire, 'questions');
|
|
99
|
+
const structure = {
|
|
100
|
+
sections: defaultTo(get(questions, 'sections'), []),
|
|
101
|
+
displaySettings: toDisplaySettings(questionnaire) ?? undefined,
|
|
102
|
+
printSettings: toPrintSettings(questionnaire) ?? undefined,
|
|
103
|
+
};
|
|
104
|
+
const storedOutcomeResults = await resolveStoredOutcomeResults(deps.questionnaireViewerService, session, questionnaireId);
|
|
105
|
+
return deps.questionnaireViewerService.open({
|
|
106
|
+
title: viewTitle,
|
|
107
|
+
structure,
|
|
108
|
+
config: {
|
|
109
|
+
readonly: true,
|
|
110
|
+
reviewDecisionMode: true,
|
|
111
|
+
initialFlowStep: 'questions',
|
|
112
|
+
viewMode: toDisplaySettings(questionnaire)?.viewMode,
|
|
113
|
+
showProgressBar: toDisplaySettings(questionnaire)?.showProgressBar,
|
|
114
|
+
showQuestionNumbers: toDisplaySettings(questionnaire)?.showQuestionNumbers,
|
|
115
|
+
},
|
|
116
|
+
initialAnswers: defaultTo(get(session, 'answers'), {}),
|
|
117
|
+
questionnaireId,
|
|
118
|
+
storedOutcomeResults,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
//#endregion
|
|
122
|
+
|
|
123
|
+
export { openAssessmentSessionAnswersReviewDecision as a, openAssessmentSessionAnswersView as o };
|
|
124
|
+
//# sourceMappingURL=acorex-platform-module-assessment-management-client-assessment-session-answers-view.util-42ZcOY2C.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-assessment-management-client-assessment-session-answers-view.util-42ZcOY2C.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-viewer/utils/assessment-session-answers-view.util.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { defaultTo, get, isEmpty } from 'lodash';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '@acorex-platform/module-assessment-management-client/contracts';\nimport type { AXMAssessmentManagementAssessmentSessionEntityModel } from '@acorex-platform/module-assessment-management-client/contracts';\nimport {\n type AXMAssessmentManagementQuestionnaireEntityModel,\n toDisplaySettings,\n toPrintSettings,\n} from '@acorex-platform/module-assessment-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-assessment-management-client/contracts';\nimport {\n AXMQuestionnaireViewerService,\n type AXMQuestionnaireViewerServiceResult,\n} from '../questionnaire-viewer.service';\nimport type { SummaryPlaceholderValues } from './pre-post-content.utils';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface OpenAssessmentSessionAnswersViewDeps {\n entityService: AXPEntityService;\n questionnaireViewerService: AXMQuestionnaireViewerService;\n translationService: AXTranslationService;\n}\n\n/** Readonly session viewer entry step (default: questionnaire answers). */\nexport type OpenAssessmentSessionAnswersInitialStep = 'answers' | 'results';\n\nexport interface OpenAssessmentSessionAnswersViewOptions {\n initialStep?: OpenAssessmentSessionAnswersInitialStep;\n}\n\n//#endregion\n\n//#region ---- Viewer ----\n\n/**\n * Returns pre-built outcome results when the session has a non-empty stored outcomes snapshot.\n */\nasync function resolveStoredOutcomeResults(\n questionnaireViewerService: AXMQuestionnaireViewerService,\n session: AXMAssessmentManagementAssessmentSessionEntityModel,\n questionnaireId: string,\n): Promise<SummaryPlaceholderValues | null> {\n const storedOutcomes = defaultTo(get(session, 'outcomes') as Record<string, unknown> | undefined, {});\n if (isEmpty(storedOutcomes)) {\n return null;\n }\n\n const snapshot = await questionnaireViewerService.buildOutcomeResultsFromStoredValues(storedOutcomes, {\n questionnaireId,\n });\n\n const hasOutcomeSections = (snapshot.outcomeSections?.length ?? 0) > 0;\n const hasOutcomeValues = !isEmpty(snapshot.outcomes);\n if (!hasOutcomeSections && !hasOutcomeValues) {\n return null;\n }\n\n return snapshot;\n}\n\n/**\n * Opens a readonly questionnaire viewer dialog for the given assessment session.\n */\nexport async function openAssessmentSessionAnswersView(\n deps: OpenAssessmentSessionAnswersViewDeps,\n session: AXMAssessmentManagementAssessmentSessionEntityModel,\n assessmentCase: AXMAssessmentManagementAssessmentCaseEntityModel,\n options: OpenAssessmentSessionAnswersViewOptions = {},\n): Promise<void> {\n const initialStep = options.initialStep ?? 'answers';\n const questionnaireId = assessmentCase.questionnaireId;\n if (!questionnaireId) {\n throw new Error('Assessment case is missing questionnaireId');\n }\n\n const questionnaire = await deps.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(questionnaireId);\n\n if (!questionnaire) {\n throw new Error(`Questionnaire with ID ${questionnaireId} not found`);\n }\n\n const sections = get(questionnaire, 'questions.sections');\n if (isEmpty(sections)) {\n throw new Error('Questionnaire has no questions to display');\n }\n\n const viewTitleKey =\n initialStep === 'results'\n ? '@assessment-management:sessions.actions.view-outcomes.title'\n : '@assessment-management:sessions.actions.view-answers.title';\n const viewTitleBase =\n (await deps.translationService.translateAsync(viewTitleKey)) ||\n (initialStep === 'results' ? 'View outcome results' : 'View Answers');\n const responderName = defaultTo(get(session, 'responder.displayName'), get(session, 'responderId'));\n const viewTitle = !isEmpty(responderName) ? `${viewTitleBase}: ${responderName}` : viewTitleBase;\n\n const questions = get(questionnaire, 'questions');\n const structure = {\n sections: defaultTo(get(questions, 'sections'), []),\n displaySettings: toDisplaySettings(questionnaire) ?? undefined,\n printSettings: toPrintSettings(questionnaire) ?? undefined,\n };\n\n const storedOutcomeResults = await resolveStoredOutcomeResults(\n deps.questionnaireViewerService,\n session,\n questionnaireId,\n );\n\n if (initialStep === 'results' && !storedOutcomeResults) {\n throw new Error('Assessment session has no displayable outcome results');\n }\n\n await deps.questionnaireViewerService.open({\n title: viewTitle,\n structure,\n config: {\n readonly: true,\n initialFlowStep: initialStep === 'results' ? 'results' : 'questions',\n },\n initialAnswers: defaultTo(get(session, 'answers'), {}),\n questionnaireId,\n storedOutcomeResults,\n });\n}\n\n/**\n * Opens a readonly answers viewer with Sign off / Reject for workflow manager review.\n */\nexport async function openAssessmentSessionAnswersReviewDecision(\n deps: OpenAssessmentSessionAnswersViewDeps,\n session: AXMAssessmentManagementAssessmentSessionEntityModel,\n assessmentCase: AXMAssessmentManagementAssessmentCaseEntityModel,\n options: { title?: string } = {},\n): Promise<AXMQuestionnaireViewerServiceResult | null> {\n const questionnaireId = assessmentCase.questionnaireId;\n if (!questionnaireId) {\n throw new Error('Assessment case is missing questionnaireId');\n }\n\n const questionnaire = await deps.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(questionnaireId);\n\n if (!questionnaire) {\n throw new Error(`Questionnaire with ID ${questionnaireId} not found`);\n }\n\n const sections = get(questionnaire, 'questions.sections');\n if (isEmpty(sections)) {\n throw new Error('Questionnaire has no questions to display');\n }\n\n const reviewTitleKey = '@assessment-management:sessions.actions.review-answers.title';\n const reviewTitleBase =\n (await deps.translationService.translateAsync(reviewTitleKey)) || 'Review answers';\n const responderName = defaultTo(get(session, 'responder.displayName'), get(session, 'responderId'));\n const viewTitle =\n options.title?.trim() ||\n (!isEmpty(responderName) ? `${reviewTitleBase}: ${responderName}` : reviewTitleBase);\n\n const questions = get(questionnaire, 'questions');\n const structure = {\n sections: defaultTo(get(questions, 'sections'), []),\n displaySettings: toDisplaySettings(questionnaire) ?? undefined,\n printSettings: toPrintSettings(questionnaire) ?? undefined,\n };\n\n const storedOutcomeResults = await resolveStoredOutcomeResults(\n deps.questionnaireViewerService,\n session,\n questionnaireId,\n );\n\n return deps.questionnaireViewerService.open({\n title: viewTitle,\n structure,\n config: {\n readonly: true,\n reviewDecisionMode: true,\n initialFlowStep: 'questions',\n viewMode: toDisplaySettings(questionnaire)?.viewMode,\n showProgressBar: toDisplaySettings(questionnaire)?.showProgressBar,\n showQuestionNumbers: toDisplaySettings(questionnaire)?.showQuestionNumbers,\n },\n initialAnswers: defaultTo(get(session, 'answers'), {}),\n questionnaireId,\n storedOutcomeResults,\n });\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { AXPStatusProvider, systemStatusToDefinition, AXPSystemStatusType } from '@acorex-platform/framework-shared/core';
|
|
2
|
+
|
|
3
|
+
//#region ---- Imports ----
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region ---- Assessment Session Status Provider ----
|
|
6
|
+
/**
|
|
7
|
+
* Assessment session status provider defining lifecycle states: Not Started, In Progress, Submitted, Under Review, Approved, Rejected, Completed.
|
|
8
|
+
* Used by the status plugin to manage assessment session status transitions and metadata.
|
|
9
|
+
*/
|
|
10
|
+
class AXMAssessmentSessionStatusProvider extends AXPStatusProvider {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.key = 'assessment-management.status.session';
|
|
14
|
+
this.defaultStatus = 'not-started';
|
|
15
|
+
this.statuses = [
|
|
16
|
+
{
|
|
17
|
+
name: 'not-started',
|
|
18
|
+
title: '@assessment-management:sessions.states.not-started',
|
|
19
|
+
color: 'secondary',
|
|
20
|
+
icon: 'fa-light fa-circle',
|
|
21
|
+
isInitial: true,
|
|
22
|
+
generateView: true,
|
|
23
|
+
},
|
|
24
|
+
systemStatusToDefinition(AXPSystemStatusType.InProgress, {
|
|
25
|
+
title: '@assessment-management:sessions.states.in-progress',
|
|
26
|
+
generateView: true,
|
|
27
|
+
}),
|
|
28
|
+
{
|
|
29
|
+
name: 'submitted',
|
|
30
|
+
title: '@assessment-management:sessions.states.submitted',
|
|
31
|
+
color: 'warning',
|
|
32
|
+
icon: 'fa-light fa-paper-plane',
|
|
33
|
+
generateView: true,
|
|
34
|
+
},
|
|
35
|
+
systemStatusToDefinition(AXPSystemStatusType.InReview, {
|
|
36
|
+
title: '@assessment-management:sessions.states.under-review',
|
|
37
|
+
generateView: true,
|
|
38
|
+
}),
|
|
39
|
+
systemStatusToDefinition(AXPSystemStatusType.Approved, {
|
|
40
|
+
title: '@assessment-management:sessions.states.approved',
|
|
41
|
+
generateView: true,
|
|
42
|
+
}),
|
|
43
|
+
systemStatusToDefinition(AXPSystemStatusType.Rejected, {
|
|
44
|
+
title: '@assessment-management:sessions.states.rejected',
|
|
45
|
+
generateView: true,
|
|
46
|
+
}),
|
|
47
|
+
systemStatusToDefinition(AXPSystemStatusType.Completed, {
|
|
48
|
+
title: '@assessment-management:sessions.states.completed',
|
|
49
|
+
generateView: true,
|
|
50
|
+
}),
|
|
51
|
+
];
|
|
52
|
+
this.transitions = [
|
|
53
|
+
{
|
|
54
|
+
from: 'not-started',
|
|
55
|
+
to: AXPSystemStatusType.InProgress,
|
|
56
|
+
title: '@assessment-management:sessions.transitions.start',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
from: AXPSystemStatusType.InProgress,
|
|
60
|
+
to: 'submitted',
|
|
61
|
+
title: '@assessment-management:sessions.transitions.submit',
|
|
62
|
+
requiresApproval: true,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
from: 'submitted',
|
|
66
|
+
to: AXPSystemStatusType.InReview,
|
|
67
|
+
title: '@assessment-management:sessions.transitions.review',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
from: AXPSystemStatusType.InReview,
|
|
71
|
+
to: AXPSystemStatusType.Approved,
|
|
72
|
+
title: '@assessment-management:sessions.transitions.approve',
|
|
73
|
+
requiresApproval: true,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
from: AXPSystemStatusType.InReview,
|
|
77
|
+
to: AXPSystemStatusType.Rejected,
|
|
78
|
+
title: '@assessment-management:sessions.transitions.reject',
|
|
79
|
+
requiresApproval: true,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
from: AXPSystemStatusType.Approved,
|
|
83
|
+
to: AXPSystemStatusType.Completed,
|
|
84
|
+
title: '@assessment-management:sessions.transitions.complete',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
from: 'submitted',
|
|
88
|
+
to: AXPSystemStatusType.InProgress,
|
|
89
|
+
title: '@assessment-management:sessions.transitions.reopen',
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
|
|
96
|
+
export { AXMAssessmentSessionStatusProvider };
|
|
97
|
+
//# sourceMappingURL=acorex-platform-module-assessment-management-client-assessment-session-status.provider-Bk9hHj5V.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-assessment-management-client-assessment-session-status.provider-Bk9hHj5V.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/assessment-session-status.provider.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Assessment Session Status Provider ----\n\n/**\n * Assessment session status provider defining lifecycle states: Not Started, In Progress, Submitted, Under Review, Approved, Rejected, Completed.\n * Used by the status plugin to manage assessment session status transitions and metadata.\n */\nexport class AXMAssessmentSessionStatusProvider extends AXPStatusProvider {\n readonly key = 'assessment-management.status.session';\n\n readonly defaultStatus = 'not-started';\n\n readonly statuses = [\n {\n name: 'not-started',\n title: '@assessment-management:sessions.states.not-started',\n color: 'secondary',\n icon: 'fa-light fa-circle',\n isInitial: true,\n generateView: true,\n },\n systemStatusToDefinition(AXPSystemStatusType.InProgress, {\n title: '@assessment-management:sessions.states.in-progress',\n generateView: true,\n }),\n {\n name: 'submitted',\n title: '@assessment-management:sessions.states.submitted',\n color: 'warning',\n icon: 'fa-light fa-paper-plane',\n generateView: true,\n },\n systemStatusToDefinition(AXPSystemStatusType.InReview, {\n title: '@assessment-management:sessions.states.under-review',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Approved, {\n title: '@assessment-management:sessions.states.approved',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Rejected, {\n title: '@assessment-management:sessions.states.rejected',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Completed, {\n title: '@assessment-management:sessions.states.completed',\n generateView: true,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: 'not-started',\n to: AXPSystemStatusType.InProgress,\n title: '@assessment-management:sessions.transitions.start',\n },\n {\n from: AXPSystemStatusType.InProgress,\n to: 'submitted',\n title: '@assessment-management:sessions.transitions.submit',\n requiresApproval: true,\n },\n {\n from: 'submitted',\n to: AXPSystemStatusType.InReview,\n title: '@assessment-management:sessions.transitions.review',\n },\n {\n from: AXPSystemStatusType.InReview,\n to: AXPSystemStatusType.Approved,\n title: '@assessment-management:sessions.transitions.approve',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.InReview,\n to: AXPSystemStatusType.Rejected,\n title: '@assessment-management:sessions.transitions.reject',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.Approved,\n to: AXPSystemStatusType.Completed,\n title: '@assessment-management:sessions.transitions.complete',\n },\n {\n from: 'submitted',\n to: AXPSystemStatusType.InProgress,\n title: '@assessment-management:sessions.transitions.reopen',\n },\n ];\n}\n\n//#endregion\n\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import { h as AXMHeadlessQuestionnaireSessionService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs';
|
|
4
|
+
|
|
5
|
+
//#endregion
|
|
6
|
+
//#region ----- Find case -----
|
|
7
|
+
class AXMFindCaseForVoiceFillCommand {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.sessions = inject(AXMHeadlessQuestionnaireSessionService);
|
|
10
|
+
}
|
|
11
|
+
async execute(input) {
|
|
12
|
+
const items = await this.sessions.findCases(input?.query);
|
|
13
|
+
return { success: true, kind: 'object', data: { items } };
|
|
14
|
+
}
|
|
15
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMFindCaseForVoiceFillCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
16
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMFindCaseForVoiceFillCommand }); }
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMFindCaseForVoiceFillCommand, decorators: [{
|
|
19
|
+
type: Injectable
|
|
20
|
+
}] });
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region ----- Start -----
|
|
23
|
+
class AXMStartHeadlessQuestionnaireCommand {
|
|
24
|
+
constructor() {
|
|
25
|
+
this.sessions = inject(AXMHeadlessQuestionnaireSessionService);
|
|
26
|
+
}
|
|
27
|
+
async execute(input) {
|
|
28
|
+
const data = await this.sessions.startSession(input ?? {});
|
|
29
|
+
return { success: true, kind: 'object', data };
|
|
30
|
+
}
|
|
31
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMStartHeadlessQuestionnaireCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
32
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMStartHeadlessQuestionnaireCommand }); }
|
|
33
|
+
}
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMStartHeadlessQuestionnaireCommand, decorators: [{
|
|
35
|
+
type: Injectable
|
|
36
|
+
}] });
|
|
37
|
+
//#endregion
|
|
38
|
+
//#region ----- Next -----
|
|
39
|
+
class AXMNextQuestionnaireQuestionCommand {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.sessions = inject(AXMHeadlessQuestionnaireSessionService);
|
|
42
|
+
}
|
|
43
|
+
async execute(input) {
|
|
44
|
+
if (!input?.sessionId?.trim()) {
|
|
45
|
+
return { success: false, message: { text: 'sessionId is required.' } };
|
|
46
|
+
}
|
|
47
|
+
const data = await this.sessions.nextPrompt(input.sessionId.trim());
|
|
48
|
+
return { success: true, kind: 'object', data };
|
|
49
|
+
}
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMNextQuestionnaireQuestionCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
51
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMNextQuestionnaireQuestionCommand }); }
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMNextQuestionnaireQuestionCommand, decorators: [{
|
|
54
|
+
type: Injectable
|
|
55
|
+
}] });
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region ----- Apply -----
|
|
58
|
+
class AXMApplyQuestionnaireAnswerCommand {
|
|
59
|
+
constructor() {
|
|
60
|
+
this.sessions = inject(AXMHeadlessQuestionnaireSessionService);
|
|
61
|
+
}
|
|
62
|
+
async execute(input) {
|
|
63
|
+
if (!input?.sessionId?.trim()) {
|
|
64
|
+
return { success: false, message: { text: 'sessionId is required.' } };
|
|
65
|
+
}
|
|
66
|
+
const data = await this.sessions.applyInput(input.sessionId.trim(), input);
|
|
67
|
+
return { success: true, kind: 'object', data };
|
|
68
|
+
}
|
|
69
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplyQuestionnaireAnswerCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
70
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplyQuestionnaireAnswerCommand }); }
|
|
71
|
+
}
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMApplyQuestionnaireAnswerCommand, decorators: [{
|
|
73
|
+
type: Injectable
|
|
74
|
+
}] });
|
|
75
|
+
//#endregion
|
|
76
|
+
//#region ----- Save -----
|
|
77
|
+
class AXMSaveQuestionnaireDraftCommand {
|
|
78
|
+
constructor() {
|
|
79
|
+
this.sessions = inject(AXMHeadlessQuestionnaireSessionService);
|
|
80
|
+
}
|
|
81
|
+
async execute(input) {
|
|
82
|
+
if (!input?.sessionId?.trim()) {
|
|
83
|
+
return { success: false, message: { text: 'sessionId is required.' } };
|
|
84
|
+
}
|
|
85
|
+
const data = await this.sessions.saveDraft(input.sessionId.trim());
|
|
86
|
+
return { success: true, kind: 'object', data };
|
|
87
|
+
}
|
|
88
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSaveQuestionnaireDraftCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
89
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSaveQuestionnaireDraftCommand }); }
|
|
90
|
+
}
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSaveQuestionnaireDraftCommand, decorators: [{
|
|
92
|
+
type: Injectable
|
|
93
|
+
}] });
|
|
94
|
+
//#endregion
|
|
95
|
+
//#region ----- Submit -----
|
|
96
|
+
class AXMSubmitQuestionnaireCommand {
|
|
97
|
+
constructor() {
|
|
98
|
+
this.sessions = inject(AXMHeadlessQuestionnaireSessionService);
|
|
99
|
+
}
|
|
100
|
+
async execute(input) {
|
|
101
|
+
if (!input?.sessionId?.trim()) {
|
|
102
|
+
return { success: false, message: { text: 'sessionId is required.' } };
|
|
103
|
+
}
|
|
104
|
+
const data = await this.sessions.submit(input.sessionId.trim());
|
|
105
|
+
return { success: true, kind: 'object', data };
|
|
106
|
+
}
|
|
107
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSubmitQuestionnaireCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
108
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSubmitQuestionnaireCommand }); }
|
|
109
|
+
}
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSubmitQuestionnaireCommand, decorators: [{
|
|
111
|
+
type: Injectable
|
|
112
|
+
}] });
|
|
113
|
+
//#endregion
|
|
114
|
+
//#region ----- Cancel -----
|
|
115
|
+
class AXMCancelQuestionnaireCommand {
|
|
116
|
+
constructor() {
|
|
117
|
+
this.sessions = inject(AXMHeadlessQuestionnaireSessionService);
|
|
118
|
+
}
|
|
119
|
+
async execute(input) {
|
|
120
|
+
if (!input?.sessionId?.trim()) {
|
|
121
|
+
return { success: false, message: { text: 'sessionId is required.' } };
|
|
122
|
+
}
|
|
123
|
+
await this.sessions.cancel(input.sessionId.trim());
|
|
124
|
+
return { success: true, kind: 'object', data: { sessionId: input.sessionId.trim() } };
|
|
125
|
+
}
|
|
126
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMCancelQuestionnaireCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
127
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMCancelQuestionnaireCommand }); }
|
|
128
|
+
}
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMCancelQuestionnaireCommand, decorators: [{
|
|
130
|
+
type: Injectable
|
|
131
|
+
}] });
|
|
132
|
+
|
|
133
|
+
export { AXMApplyQuestionnaireAnswerCommand, AXMCancelQuestionnaireCommand, AXMFindCaseForVoiceFillCommand, AXMNextQuestionnaireQuestionCommand, AXMSaveQuestionnaireDraftCommand, AXMStartHeadlessQuestionnaireCommand, AXMSubmitQuestionnaireCommand };
|
|
134
|
+
//# sourceMappingURL=acorex-platform-module-assessment-management-client-assessment-voice.commands-CduVfWQ-.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-assessment-management-client-assessment-voice.commands-CduVfWQ-.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-viewer/voice/commands/assessment-voice.commands.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMHeadlessQuestionnaireSessionService } from '../headless-questionnaire-session.service';\n\n//#endregion\n\n//#region ----- Find case -----\n\n@Injectable()\nexport class AXMFindCaseForVoiceFillCommand implements AXPCommand<{ query?: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { query?: string }): AXPCommandExecuteResultPromise<unknown> {\n const items = await this.sessions.findCases(input?.query);\n return { success: true, kind: 'object', data: { items } };\n }\n}\n\n//#endregion\n\n//#region ----- Start -----\n\n@Injectable()\nexport class AXMStartHeadlessQuestionnaireCommand\n implements AXPCommand<{ caseId?: string; sessionId?: string; text?: string }, unknown>\n{\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: {\n caseId?: string;\n sessionId?: string;\n text?: string;\n }): AXPCommandExecuteResultPromise<unknown> {\n const data = await this.sessions.startSession(input ?? {});\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Next -----\n\n@Injectable()\nexport class AXMNextQuestionnaireQuestionCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.nextPrompt(input.sessionId.trim());\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Apply -----\n\n@Injectable()\nexport class AXMApplyQuestionnaireAnswerCommand\n implements AXPCommand<{ sessionId: string; answerKey?: string; text?: string; value?: unknown; comment?: string }, unknown>\n{\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: {\n sessionId: string;\n answerKey?: string;\n text?: string;\n value?: unknown;\n comment?: string;\n }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.applyInput(input.sessionId.trim(), input);\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Save -----\n\n@Injectable()\nexport class AXMSaveQuestionnaireDraftCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.saveDraft(input.sessionId.trim());\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Submit -----\n\n@Injectable()\nexport class AXMSubmitQuestionnaireCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n const data = await this.sessions.submit(input.sessionId.trim());\n return { success: true, kind: 'object', data };\n }\n}\n\n//#endregion\n\n//#region ----- Cancel -----\n\n@Injectable()\nexport class AXMCancelQuestionnaireCommand implements AXPCommand<{ sessionId: string }, unknown> {\n private readonly sessions = inject(AXMHeadlessQuestionnaireSessionService);\n\n async execute(input: { sessionId: string }): AXPCommandExecuteResultPromise<unknown> {\n if (!input?.sessionId?.trim()) {\n return { success: false, message: { text: 'sessionId is required.' } };\n }\n await this.sessions.cancel(input.sessionId.trim());\n return { success: true, kind: 'object', data: { sessionId: input.sessionId.trim() } };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|