@cuemath/leap 3.5.47-gg10 → 3.5.47-gg11
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.
|
@@ -1,37 +1,38 @@
|
|
|
1
|
-
import { jsxs as
|
|
1
|
+
import { jsxs as ue, Fragment as le, jsx as n } from "react/jsx-runtime";
|
|
2
2
|
import { deepEqual as ae } from "../../../../../node_modules/fast-equals/dist/esm/index.js";
|
|
3
|
-
import { memo as
|
|
3
|
+
import { memo as de, useMemo as ce, useState as me, useCallback as D, useEffect as H } from "react";
|
|
4
4
|
import V from "../../../../ui/arrow-tooltip/arrow-tooltip.js";
|
|
5
5
|
import o from "../../../../ui/buttons/button/button.js";
|
|
6
|
-
import { useWorksheetStore as
|
|
7
|
-
import { isTeacherInterventionNeeded as
|
|
8
|
-
import
|
|
6
|
+
import { useWorksheetStore as pe } from "../../hooks/use-worksheet-store.js";
|
|
7
|
+
import { isTeacherInterventionNeeded as ke } from "../../worksheet-helpers.js";
|
|
8
|
+
import he from "../hooks/use-handle-check-button-click.js";
|
|
9
9
|
import Be from "../hooks/use-handle-next-button-click.js";
|
|
10
10
|
import be from "../hooks/use-handle-response-change.js";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
const
|
|
11
|
+
import fe from "../hooks/use-handle-retry-button-click.js";
|
|
12
|
+
import ye from "../hooks/use-play-validation-audio.js";
|
|
13
|
+
import Ce from "../hooks/use-handle-start-button-click.js";
|
|
14
|
+
import xe from "../hooks/use-handle-skip-button-click.js";
|
|
15
|
+
import Ae from "../hooks/use-handle-submit-quiz.js";
|
|
16
|
+
const Se = (x, B) => B.filter(
|
|
17
17
|
(r) => r.item_type === "exit-ticket" && !r.is_non_question
|
|
18
18
|
).every((r) => {
|
|
19
19
|
var s;
|
|
20
20
|
return ((s = x[r.response_id]) == null ? void 0 : s.validatedByTeacher) === !0;
|
|
21
|
-
}),
|
|
22
|
-
function(
|
|
21
|
+
}), Re = de(
|
|
22
|
+
function(B) {
|
|
23
23
|
const {
|
|
24
24
|
behavior: A,
|
|
25
25
|
question: r,
|
|
26
26
|
questions: s,
|
|
27
27
|
response: e,
|
|
28
|
-
responses:
|
|
28
|
+
responses: a,
|
|
29
29
|
learnosity: S,
|
|
30
30
|
isQuestionAppended: d,
|
|
31
|
-
inClass:
|
|
31
|
+
inClass: b,
|
|
32
32
|
isLastQuestion: c,
|
|
33
|
-
onSubmit: m
|
|
34
|
-
|
|
33
|
+
onSubmit: m,
|
|
34
|
+
worksheetCompleted: R
|
|
35
|
+
} = pe((t) => {
|
|
35
36
|
const i = t.questions[t.activeQuestionIndex];
|
|
36
37
|
return {
|
|
37
38
|
behavior: t.behavior,
|
|
@@ -43,37 +44,38 @@ const Ae = (x, b) => b.filter(
|
|
|
43
44
|
isQuestionAppended: t.appendedQuestionIds.includes(i.response_id),
|
|
44
45
|
inClass: t.inClass,
|
|
45
46
|
isLastQuestion: t.activeQuestionIndex === t.questions.length - 1,
|
|
46
|
-
onSubmit: t.onSubmit
|
|
47
|
+
onSubmit: t.onSubmit,
|
|
48
|
+
worksheetCompleted: t.worksheetCompleted
|
|
47
49
|
};
|
|
48
|
-
}), { getTimeSpentOnQuestion:
|
|
50
|
+
}), { getTimeSpentOnQuestion: X } = B, {
|
|
49
51
|
canAttempt: u,
|
|
50
|
-
checkButtonLabel:
|
|
51
|
-
retryButtonLabel:
|
|
52
|
+
checkButtonLabel: j,
|
|
53
|
+
retryButtonLabel: M,
|
|
52
54
|
teacherDiscussionEnabled: v,
|
|
53
55
|
attemptsAfterTeacherInterventionNeeded: Q
|
|
54
56
|
} = A, { response_id: T, metadata: _, is_non_question: q, item_type: f } = r, y = f === "exit-ticket", {
|
|
55
|
-
startButton:
|
|
57
|
+
startButton: F,
|
|
56
58
|
checkButton: z,
|
|
57
|
-
checkButtonDisabled:
|
|
58
|
-
retryButton:
|
|
59
|
-
retryButtonDisabled:
|
|
60
|
-
nextButton:
|
|
61
|
-
nextButtonDisabled:
|
|
62
|
-
nextButtonTooltip:
|
|
63
|
-
moveButton:
|
|
64
|
-
skipButton:
|
|
65
|
-
skipButtonLabel:
|
|
66
|
-
submitQuizButton:
|
|
67
|
-
submitAttemptButton:
|
|
68
|
-
} =
|
|
69
|
-
var
|
|
59
|
+
checkButtonDisabled: G,
|
|
60
|
+
retryButton: O,
|
|
61
|
+
retryButtonDisabled: w,
|
|
62
|
+
nextButton: P,
|
|
63
|
+
nextButtonDisabled: W,
|
|
64
|
+
nextButtonTooltip: I,
|
|
65
|
+
moveButton: J,
|
|
66
|
+
skipButton: K,
|
|
67
|
+
skipButtonLabel: U,
|
|
68
|
+
submitQuizButton: Y,
|
|
69
|
+
submitAttemptButton: Z
|
|
70
|
+
} = ce(() => {
|
|
71
|
+
var L;
|
|
70
72
|
if (q)
|
|
71
73
|
return {
|
|
72
74
|
startButton: u && !(e != null && e.responseGiven)
|
|
73
75
|
};
|
|
74
76
|
if (y) {
|
|
75
|
-
const { submittedByStudent:
|
|
76
|
-
if (!
|
|
77
|
+
const { submittedByStudent: h } = e || {};
|
|
78
|
+
if (!h)
|
|
77
79
|
return c ? {
|
|
78
80
|
submitQuizButton: !0
|
|
79
81
|
} : e != null && e.skipped || e != null && e.response ? {
|
|
@@ -82,9 +84,9 @@ const Ae = (x, b) => b.filter(
|
|
|
82
84
|
skipButton: !0,
|
|
83
85
|
skipButtonLabel: "Next"
|
|
84
86
|
};
|
|
85
|
-
if (c &&
|
|
87
|
+
if (c && Se(a, s))
|
|
86
88
|
return {
|
|
87
|
-
submitAttemptButton: !
|
|
89
|
+
submitAttemptButton: !R
|
|
88
90
|
};
|
|
89
91
|
}
|
|
90
92
|
if (!e || !e.response || !e.score)
|
|
@@ -92,28 +94,28 @@ const Ae = (x, b) => b.filter(
|
|
|
92
94
|
checkButton: u,
|
|
93
95
|
checkButtonDisabled: u
|
|
94
96
|
};
|
|
95
|
-
const { responseEdited: t, score: i, attemptsHistory: k, retryEnabled:
|
|
97
|
+
const { responseEdited: t, score: i, attemptsHistory: k, retryEnabled: re } = e;
|
|
96
98
|
if (t) {
|
|
97
|
-
const
|
|
99
|
+
const h = (L = k == null ? void 0 : k.slice(-1)[0]) == null ? void 0 : L.response;
|
|
98
100
|
return {
|
|
99
101
|
checkButton: u || e.retryEnabled,
|
|
100
|
-
checkButtonDisabled: ae(e.response,
|
|
102
|
+
checkButtonDisabled: ae(e.response, h)
|
|
101
103
|
};
|
|
102
104
|
}
|
|
103
105
|
if ((i.score ?? 0) < i.max_score)
|
|
104
|
-
return
|
|
106
|
+
return ke({
|
|
105
107
|
attemptsAfterTeacherInterventionNeeded: f === "exit-ticket" ? 1 : Q,
|
|
106
108
|
attemptsHistory: k
|
|
107
|
-
}) ?
|
|
109
|
+
}) ? b ? {
|
|
108
110
|
retryButton: !0,
|
|
109
|
-
retryButtonDisabled:
|
|
111
|
+
retryButtonDisabled: re !== !0
|
|
110
112
|
} : {
|
|
111
113
|
moveButton: !0
|
|
112
114
|
} : {
|
|
113
115
|
retryButton: u
|
|
114
116
|
};
|
|
115
117
|
if ((i.score ?? 0) === i.max_score) {
|
|
116
|
-
if (
|
|
118
|
+
if (b && v && _.acknowledgements && !(e != null && e.validatedByTeacher))
|
|
117
119
|
return {
|
|
118
120
|
nextButton: !0,
|
|
119
121
|
nextButtonDisabled: !0,
|
|
@@ -131,41 +133,41 @@ const Ae = (x, b) => b.filter(
|
|
|
131
133
|
q,
|
|
132
134
|
y,
|
|
133
135
|
c,
|
|
134
|
-
|
|
136
|
+
a,
|
|
135
137
|
s,
|
|
136
138
|
f,
|
|
137
139
|
Q,
|
|
138
|
-
|
|
140
|
+
b,
|
|
139
141
|
v,
|
|
140
142
|
_.acknowledgements
|
|
141
|
-
]),
|
|
142
|
-
getTimeSpentOnQuestion:
|
|
143
|
-
}), p = Be(), [
|
|
144
|
-
setSkipped:
|
|
145
|
-
}),
|
|
146
|
-
|
|
147
|
-
}, [
|
|
148
|
-
handleValidate:
|
|
149
|
-
}),
|
|
150
|
-
handleResponseChange:
|
|
151
|
-
}),
|
|
152
|
-
m == null || m(
|
|
153
|
-
}, [m,
|
|
143
|
+
]), N = ye(), l = be({
|
|
144
|
+
getTimeSpentOnQuestion: X
|
|
145
|
+
}), p = Be(), [g, E] = me(!1), $ = xe({
|
|
146
|
+
setSkipped: E
|
|
147
|
+
}), ee = D(() => {
|
|
148
|
+
N(), l(!0);
|
|
149
|
+
}, [l, N]), te = he({
|
|
150
|
+
handleValidate: ee
|
|
151
|
+
}), ne = fe({
|
|
152
|
+
handleResponseChange: l
|
|
153
|
+
}), ie = Ce(), oe = Ae(), se = D(() => {
|
|
154
|
+
m == null || m(a, s);
|
|
155
|
+
}, [m, a, s]), C = z || y && !(e != null && e.submittedByStudent);
|
|
154
156
|
return H(() => {
|
|
155
|
-
|
|
156
|
-
}, [p,
|
|
157
|
+
g && (E(!1), p());
|
|
158
|
+
}, [p, g]), H(() => {
|
|
157
159
|
const t = d ? S.question(T) : void 0;
|
|
158
|
-
return t && (C ? (t.on("changed",
|
|
159
|
-
t && C && (t.off("changed",
|
|
160
|
+
return t && (C ? (t.on("changed", l), t.enable()) : t.disable()), () => {
|
|
161
|
+
t && C && (t.off("changed", l), t.disable());
|
|
160
162
|
};
|
|
161
|
-
}, [
|
|
162
|
-
|
|
163
|
+
}, [l, d, S, C, T]), /* @__PURE__ */ ue(le, { children: [
|
|
164
|
+
P && /* @__PURE__ */ n(
|
|
163
165
|
V,
|
|
164
166
|
{
|
|
165
167
|
position: "top",
|
|
166
168
|
renderAs: "primary",
|
|
167
|
-
hidden: !
|
|
168
|
-
tooltipItem:
|
|
169
|
+
hidden: !I,
|
|
170
|
+
tooltipItem: I ?? "",
|
|
169
171
|
children: /* @__PURE__ */ n(
|
|
170
172
|
o,
|
|
171
173
|
{
|
|
@@ -174,22 +176,22 @@ const Ae = (x, b) => b.filter(
|
|
|
174
176
|
size: "small",
|
|
175
177
|
label: "Next",
|
|
176
178
|
onClick: p,
|
|
177
|
-
disabled:
|
|
179
|
+
disabled: W === !0
|
|
178
180
|
}
|
|
179
181
|
)
|
|
180
182
|
}
|
|
181
183
|
),
|
|
182
|
-
|
|
184
|
+
K && /* @__PURE__ */ n(
|
|
183
185
|
o,
|
|
184
186
|
{
|
|
185
187
|
widthX: 6,
|
|
186
188
|
renderAs: "primary",
|
|
187
189
|
size: "small",
|
|
188
|
-
label:
|
|
189
|
-
onClick:
|
|
190
|
+
label: U ?? "Skip",
|
|
191
|
+
onClick: $
|
|
190
192
|
}
|
|
191
193
|
),
|
|
192
|
-
|
|
194
|
+
J && /* @__PURE__ */ n(
|
|
193
195
|
o,
|
|
194
196
|
{
|
|
195
197
|
widthX: 8.5,
|
|
@@ -199,12 +201,12 @@ const Ae = (x, b) => b.filter(
|
|
|
199
201
|
onClick: p
|
|
200
202
|
}
|
|
201
203
|
),
|
|
202
|
-
|
|
204
|
+
O && /* @__PURE__ */ n(
|
|
203
205
|
V,
|
|
204
206
|
{
|
|
205
207
|
position: "top",
|
|
206
208
|
renderAs: "primary",
|
|
207
|
-
hidden: !
|
|
209
|
+
hidden: !w,
|
|
208
210
|
tooltipItem: "Tutor will help, then enable retry",
|
|
209
211
|
children: /* @__PURE__ */ n(
|
|
210
212
|
o,
|
|
@@ -212,9 +214,9 @@ const Ae = (x, b) => b.filter(
|
|
|
212
214
|
widthX: 6,
|
|
213
215
|
renderAs: "primary",
|
|
214
216
|
size: "small",
|
|
215
|
-
label:
|
|
216
|
-
disabled: !d ||
|
|
217
|
-
onClick:
|
|
217
|
+
label: M,
|
|
218
|
+
disabled: !d || w,
|
|
219
|
+
onClick: ne
|
|
218
220
|
}
|
|
219
221
|
)
|
|
220
222
|
}
|
|
@@ -224,35 +226,35 @@ const Ae = (x, b) => b.filter(
|
|
|
224
226
|
{
|
|
225
227
|
renderAs: "primary",
|
|
226
228
|
size: "small",
|
|
227
|
-
label:
|
|
228
|
-
disabled:
|
|
229
|
-
onClick:
|
|
229
|
+
label: j,
|
|
230
|
+
disabled: G === !0 || !d,
|
|
231
|
+
onClick: te
|
|
230
232
|
}
|
|
231
233
|
),
|
|
232
|
-
|
|
233
|
-
|
|
234
|
+
F && /* @__PURE__ */ n(o, { renderAs: "primary", size: "small", label: "Start", onClick: ie }),
|
|
235
|
+
Y && /* @__PURE__ */ n(
|
|
234
236
|
o,
|
|
235
237
|
{
|
|
236
238
|
renderAs: "primary",
|
|
237
239
|
size: "small",
|
|
238
240
|
label: "Submit",
|
|
239
241
|
analyticsLabel: "Submit Quiz",
|
|
240
|
-
onClick:
|
|
242
|
+
onClick: oe
|
|
241
243
|
}
|
|
242
244
|
),
|
|
243
|
-
|
|
245
|
+
Z && /* @__PURE__ */ n(
|
|
244
246
|
o,
|
|
245
247
|
{
|
|
246
248
|
renderAs: "primary",
|
|
247
249
|
size: "small",
|
|
248
250
|
label: "Submit",
|
|
249
|
-
onClick:
|
|
251
|
+
onClick: se
|
|
250
252
|
}
|
|
251
253
|
)
|
|
252
254
|
] });
|
|
253
255
|
}
|
|
254
256
|
);
|
|
255
257
|
export {
|
|
256
|
-
|
|
258
|
+
Re as default
|
|
257
259
|
};
|
|
258
260
|
//# sourceMappingURL=controller-lesson-v3_1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller-lesson-v3_1.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/student/controller-lesson-v3_1.tsx"],"sourcesContent":["import { deepEqual } from 'fast-equals';\nimport { memo, useCallback, useEffect, useMemo, useState, type FC } from 'react';\n\nimport ArrowTooltip from '../../../../ui/arrow-tooltip/arrow-tooltip';\nimport Button from '../../../../ui/buttons/button/button';\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\nimport { isTeacherInterventionNeeded } from '../../worksheet-helpers';\nimport useHandleCheckButtonClick from '../hooks/use-handle-check-button-click';\nimport useHandleNextButtonClick from '../hooks/use-handle-next-button-click';\nimport useHandleResponseChange from '../hooks/use-handle-response-change';\nimport useHandleRetryButtonClick from '../hooks/use-handle-retry-button-click';\nimport usePlayValidationAudio from '../hooks/use-play-validation-audio';\nimport type {\n IButtonTypes,\n IWorksheetQuestionsControllerProps,\n} from '../worksheet-questions-controller-types';\nimport useHandleStartButtonClick from '../hooks/use-handle-start-button-click';\nimport useHandleSkipButtonClick from '../hooks/use-handle-skip-button-click';\nimport useHandleSubmitQuiz from '../hooks/use-handle-submit-quiz';\nimport { type IWorksheetQuestion, type IWorksheetResponse } from '../../worksheet-types';\n\ninterface IAreAllExitTicketQuestionsValidated {\n (responses: Record<string, IWorksheetResponse>, questions: IWorksheetQuestion[]): boolean;\n}\n\nconst areAllExitTicketQuestionsValidated: IAreAllExitTicketQuestionsValidated = (\n responses,\n questions,\n) => {\n const exitTicketQuestions = questions.filter(\n q => q.item_type === 'exit-ticket' && !q.is_non_question,\n );\n\n return exitTicketQuestions.every(q => responses[q.response_id]?.validatedByTeacher === true);\n};\n\nconst StudentControllerLessonV3_1: FC<IWorksheetQuestionsControllerProps> = memo(\n function StudentControllerLessonV3_1(props) {\n const {\n behavior,\n question,\n questions,\n response,\n responses,\n learnosity,\n isQuestionAppended,\n inClass,\n isLastQuestion,\n onSubmit,\n } = useWorksheetStore(store => {\n const activeQuestion = store.questions[store.activeQuestionIndex]!;\n\n return {\n behavior: store.behavior,\n question: activeQuestion,\n questions: store.questions,\n response: store.responses[activeQuestion.response_id],\n responses: store.responses,\n learnosity: store.learnosity,\n isQuestionAppended: store.appendedQuestionIds.includes(activeQuestion.response_id),\n inClass: store.inClass,\n isLastQuestion: store.activeQuestionIndex === store.questions.length - 1,\n onSubmit: store.onSubmit,\n };\n });\n const { getTimeSpentOnQuestion } = props;\n const {\n canAttempt,\n checkButtonLabel,\n retryButtonLabel,\n teacherDiscussionEnabled,\n attemptsAfterTeacherInterventionNeeded,\n } = behavior;\n const { response_id, metadata, is_non_question: isNonQuestion, item_type } = question;\n const isExitTicket = item_type === 'exit-ticket';\n const {\n startButton,\n checkButton,\n checkButtonDisabled,\n retryButton,\n retryButtonDisabled,\n nextButton,\n nextButtonDisabled,\n nextButtonTooltip,\n moveButton,\n skipButton,\n skipButtonLabel,\n submitQuizButton,\n submitAttemptButton,\n } = useMemo<IButtonTypes>(() => {\n if (isNonQuestion)\n return {\n startButton: canAttempt && !response?.responseGiven,\n };\n\n if (isExitTicket) {\n const { submittedByStudent } = response || {};\n\n if (!submittedByStudent) {\n if (isLastQuestion)\n return {\n submitQuizButton: true,\n };\n\n if (response?.skipped || response?.response)\n return {\n nextButton: true,\n };\n\n return {\n skipButton: true,\n skipButtonLabel: 'Next',\n };\n }\n\n if (isLastQuestion && areAllExitTicketQuestionsValidated(responses, questions))\n return {\n submitAttemptButton: true,\n };\n }\n\n if (!response || !response.response || !response.score)\n return {\n checkButton: canAttempt,\n checkButtonDisabled: canAttempt,\n };\n\n const { responseEdited, score, attemptsHistory, retryEnabled } = response;\n\n if (responseEdited) {\n const lastAttemptResponse = attemptsHistory?.slice(-1)[0]?.response;\n\n return {\n checkButton: canAttempt || response.retryEnabled,\n checkButtonDisabled: deepEqual(response.response, lastAttemptResponse),\n };\n }\n\n if ((score.score ?? 0) < score.max_score) {\n const teacherInterventionNeeded = isTeacherInterventionNeeded({\n attemptsAfterTeacherInterventionNeeded:\n item_type === 'exit-ticket' ? 1 : attemptsAfterTeacherInterventionNeeded,\n attemptsHistory,\n });\n\n if (!teacherInterventionNeeded)\n return {\n retryButton: canAttempt,\n };\n\n if (inClass)\n return {\n retryButton: true,\n retryButtonDisabled: retryEnabled !== true,\n };\n\n return {\n moveButton: true,\n };\n }\n\n if ((score.score ?? 0) === score.max_score) {\n if (\n inClass &&\n teacherDiscussionEnabled &&\n metadata.acknowledgements &&\n !response?.validatedByTeacher\n ) {\n return {\n nextButton: true,\n nextButtonDisabled: true,\n nextButtonTooltip: 'Tutor approval is required',\n };\n }\n\n if (!isLastQuestion)\n return {\n nextButton: true,\n };\n }\n\n return {};\n }, [\n canAttempt,\n response,\n isNonQuestion,\n isExitTicket,\n isLastQuestion,\n responses,\n questions,\n item_type,\n attemptsAfterTeacherInterventionNeeded,\n inClass,\n teacherDiscussionEnabled,\n metadata.acknowledgements,\n ]);\n\n const playValidationAudio = usePlayValidationAudio();\n const handleResponseChange = useHandleResponseChange({\n getTimeSpentOnQuestion,\n });\n const handleNextButtonClick = useHandleNextButtonClick();\n const [skipped, setSkipped] = useState(false);\n const handleSkipButtonClick = useHandleSkipButtonClick({\n setSkipped,\n });\n const handleValidate = useCallback(() => {\n playValidationAudio();\n handleResponseChange(true);\n }, [handleResponseChange, playValidationAudio]);\n const handleCheckButtonClick = useHandleCheckButtonClick({\n handleValidate,\n });\n const handleRetryButtonClick = useHandleRetryButtonClick({\n handleResponseChange,\n });\n const handleStartButtonClick = useHandleStartButtonClick();\n const handleSubmitQuiz = useHandleSubmitQuiz();\n const handleSheetSubmitButtonClick = useCallback(() => {\n onSubmit?.(responses, questions);\n }, [onSubmit, responses, questions]);\n\n const questionEnabled = checkButton || (isExitTicket && !response?.submittedByStudent);\n\n useEffect(() => {\n if (skipped) {\n setSkipped(false);\n handleNextButtonClick();\n }\n }, [handleNextButtonClick, skipped]);\n\n useEffect(() => {\n const questionInstance = isQuestionAppended ? learnosity.question(response_id) : undefined;\n\n if (questionInstance) {\n if (questionEnabled) {\n questionInstance.on('changed', handleResponseChange);\n questionInstance.enable();\n } else {\n questionInstance.disable();\n }\n }\n\n return () => {\n if (questionInstance && questionEnabled) {\n questionInstance.off('changed', handleResponseChange);\n questionInstance.disable();\n }\n };\n }, [handleResponseChange, isQuestionAppended, learnosity, questionEnabled, response_id]);\n\n return (\n <>\n {nextButton && (\n <ArrowTooltip\n position=\"top\"\n renderAs=\"primary\"\n hidden={!nextButtonTooltip}\n tooltipItem={nextButtonTooltip ?? ''}\n >\n <Button\n widthX={6}\n renderAs=\"primary\"\n size=\"small\"\n label=\"Next\"\n onClick={handleNextButtonClick}\n disabled={nextButtonDisabled === true}\n />\n </ArrowTooltip>\n )}\n {skipButton && (\n <Button\n widthX={6}\n renderAs=\"primary\"\n size=\"small\"\n label={skipButtonLabel ?? 'Skip'}\n onClick={handleSkipButtonClick}\n />\n )}\n {moveButton && (\n <Button\n widthX={8.5}\n renderAs=\"primary\"\n size=\"small\"\n label=\"Move ahead\"\n onClick={handleNextButtonClick}\n />\n )}\n {retryButton && (\n <ArrowTooltip\n position=\"top\"\n renderAs=\"primary\"\n hidden={!retryButtonDisabled}\n tooltipItem=\"Tutor will help, then enable retry\"\n >\n <Button\n widthX={6}\n renderAs=\"primary\"\n size=\"small\"\n label={retryButtonLabel}\n disabled={!isQuestionAppended || retryButtonDisabled}\n onClick={handleRetryButtonClick}\n />\n </ArrowTooltip>\n )}\n {checkButton && (\n <Button\n renderAs=\"primary\"\n size=\"small\"\n label={checkButtonLabel}\n disabled={checkButtonDisabled === true || !isQuestionAppended}\n onClick={handleCheckButtonClick}\n />\n )}\n {startButton && (\n <Button renderAs=\"primary\" size=\"small\" label=\"Start\" onClick={handleStartButtonClick} />\n )}\n {submitQuizButton && (\n <Button\n renderAs=\"primary\"\n size=\"small\"\n label=\"Submit\"\n analyticsLabel=\"Submit Quiz\"\n onClick={handleSubmitQuiz}\n />\n )}\n {submitAttemptButton && (\n <Button\n renderAs=\"primary\"\n size=\"small\"\n label=\"Submit\"\n onClick={handleSheetSubmitButtonClick}\n />\n )}\n </>\n );\n },\n);\n\nexport default StudentControllerLessonV3_1;\n"],"names":["areAllExitTicketQuestionsValidated","responses","questions","q","_a","StudentControllerLessonV3_1","memo","props","behavior","question","response","learnosity","isQuestionAppended","inClass","isLastQuestion","onSubmit","useWorksheetStore","store","activeQuestion","getTimeSpentOnQuestion","canAttempt","checkButtonLabel","retryButtonLabel","teacherDiscussionEnabled","attemptsAfterTeacherInterventionNeeded","response_id","metadata","isNonQuestion","item_type","isExitTicket","startButton","checkButton","checkButtonDisabled","retryButton","retryButtonDisabled","nextButton","nextButtonDisabled","nextButtonTooltip","moveButton","skipButton","skipButtonLabel","submitQuizButton","submitAttemptButton","useMemo","submittedByStudent","responseEdited","score","attemptsHistory","retryEnabled","lastAttemptResponse","deepEqual","isTeacherInterventionNeeded","playValidationAudio","usePlayValidationAudio","handleResponseChange","useHandleResponseChange","handleNextButtonClick","useHandleNextButtonClick","skipped","setSkipped","useState","handleSkipButtonClick","useHandleSkipButtonClick","handleValidate","useCallback","handleCheckButtonClick","useHandleCheckButtonClick","handleRetryButtonClick","useHandleRetryButtonClick","handleStartButtonClick","useHandleStartButtonClick","handleSubmitQuiz","useHandleSubmitQuiz","handleSheetSubmitButtonClick","questionEnabled","useEffect","questionInstance","jsxs","Fragment","jsx","ArrowTooltip","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"controller-lesson-v3_1.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/student/controller-lesson-v3_1.tsx"],"sourcesContent":["import { deepEqual } from 'fast-equals';\nimport { memo, useCallback, useEffect, useMemo, useState, type FC } from 'react';\n\nimport ArrowTooltip from '../../../../ui/arrow-tooltip/arrow-tooltip';\nimport Button from '../../../../ui/buttons/button/button';\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\nimport { isTeacherInterventionNeeded } from '../../worksheet-helpers';\nimport useHandleCheckButtonClick from '../hooks/use-handle-check-button-click';\nimport useHandleNextButtonClick from '../hooks/use-handle-next-button-click';\nimport useHandleResponseChange from '../hooks/use-handle-response-change';\nimport useHandleRetryButtonClick from '../hooks/use-handle-retry-button-click';\nimport usePlayValidationAudio from '../hooks/use-play-validation-audio';\nimport type {\n IButtonTypes,\n IWorksheetQuestionsControllerProps,\n} from '../worksheet-questions-controller-types';\nimport useHandleStartButtonClick from '../hooks/use-handle-start-button-click';\nimport useHandleSkipButtonClick from '../hooks/use-handle-skip-button-click';\nimport useHandleSubmitQuiz from '../hooks/use-handle-submit-quiz';\nimport { type IWorksheetQuestion, type IWorksheetResponse } from '../../worksheet-types';\n\ninterface IAreAllExitTicketQuestionsValidated {\n (responses: Record<string, IWorksheetResponse>, questions: IWorksheetQuestion[]): boolean;\n}\n\nconst areAllExitTicketQuestionsValidated: IAreAllExitTicketQuestionsValidated = (\n responses,\n questions,\n) => {\n const exitTicketQuestions = questions.filter(\n q => q.item_type === 'exit-ticket' && !q.is_non_question,\n );\n\n return exitTicketQuestions.every(q => responses[q.response_id]?.validatedByTeacher === true);\n};\n\nconst StudentControllerLessonV3_1: FC<IWorksheetQuestionsControllerProps> = memo(\n function StudentControllerLessonV3_1(props) {\n const {\n behavior,\n question,\n questions,\n response,\n responses,\n learnosity,\n isQuestionAppended,\n inClass,\n isLastQuestion,\n onSubmit,\n worksheetCompleted,\n } = useWorksheetStore(store => {\n const activeQuestion = store.questions[store.activeQuestionIndex]!;\n\n return {\n behavior: store.behavior,\n question: activeQuestion,\n questions: store.questions,\n response: store.responses[activeQuestion.response_id],\n responses: store.responses,\n learnosity: store.learnosity,\n isQuestionAppended: store.appendedQuestionIds.includes(activeQuestion.response_id),\n inClass: store.inClass,\n isLastQuestion: store.activeQuestionIndex === store.questions.length - 1,\n onSubmit: store.onSubmit,\n worksheetCompleted: store.worksheetCompleted,\n };\n });\n const { getTimeSpentOnQuestion } = props;\n const {\n canAttempt,\n checkButtonLabel,\n retryButtonLabel,\n teacherDiscussionEnabled,\n attemptsAfterTeacherInterventionNeeded,\n } = behavior;\n const { response_id, metadata, is_non_question: isNonQuestion, item_type } = question;\n const isExitTicket = item_type === 'exit-ticket';\n const {\n startButton,\n checkButton,\n checkButtonDisabled,\n retryButton,\n retryButtonDisabled,\n nextButton,\n nextButtonDisabled,\n nextButtonTooltip,\n moveButton,\n skipButton,\n skipButtonLabel,\n submitQuizButton,\n submitAttemptButton,\n } = useMemo<IButtonTypes>(() => {\n if (isNonQuestion)\n return {\n startButton: canAttempt && !response?.responseGiven,\n };\n\n if (isExitTicket) {\n const { submittedByStudent } = response || {};\n\n if (!submittedByStudent) {\n if (isLastQuestion)\n return {\n submitQuizButton: true,\n };\n\n if (response?.skipped || response?.response)\n return {\n nextButton: true,\n };\n\n return {\n skipButton: true,\n skipButtonLabel: 'Next',\n };\n }\n\n if (isLastQuestion && areAllExitTicketQuestionsValidated(responses, questions)) {\n return {\n submitAttemptButton: !worksheetCompleted,\n };\n }\n }\n\n if (!response || !response.response || !response.score)\n return {\n checkButton: canAttempt,\n checkButtonDisabled: canAttempt,\n };\n\n const { responseEdited, score, attemptsHistory, retryEnabled } = response;\n\n if (responseEdited) {\n const lastAttemptResponse = attemptsHistory?.slice(-1)[0]?.response;\n\n return {\n checkButton: canAttempt || response.retryEnabled,\n checkButtonDisabled: deepEqual(response.response, lastAttemptResponse),\n };\n }\n\n if ((score.score ?? 0) < score.max_score) {\n const teacherInterventionNeeded = isTeacherInterventionNeeded({\n attemptsAfterTeacherInterventionNeeded:\n item_type === 'exit-ticket' ? 1 : attemptsAfterTeacherInterventionNeeded,\n attemptsHistory,\n });\n\n if (!teacherInterventionNeeded)\n return {\n retryButton: canAttempt,\n };\n\n if (inClass)\n return {\n retryButton: true,\n retryButtonDisabled: retryEnabled !== true,\n };\n\n return {\n moveButton: true,\n };\n }\n\n if ((score.score ?? 0) === score.max_score) {\n if (\n inClass &&\n teacherDiscussionEnabled &&\n metadata.acknowledgements &&\n !response?.validatedByTeacher\n ) {\n return {\n nextButton: true,\n nextButtonDisabled: true,\n nextButtonTooltip: 'Tutor approval is required',\n };\n }\n\n if (!isLastQuestion)\n return {\n nextButton: true,\n };\n }\n\n return {};\n }, [\n canAttempt,\n response,\n isNonQuestion,\n isExitTicket,\n isLastQuestion,\n responses,\n questions,\n item_type,\n attemptsAfterTeacherInterventionNeeded,\n inClass,\n teacherDiscussionEnabled,\n metadata.acknowledgements,\n ]);\n\n const playValidationAudio = usePlayValidationAudio();\n const handleResponseChange = useHandleResponseChange({\n getTimeSpentOnQuestion,\n });\n const handleNextButtonClick = useHandleNextButtonClick();\n const [skipped, setSkipped] = useState(false);\n const handleSkipButtonClick = useHandleSkipButtonClick({\n setSkipped,\n });\n const handleValidate = useCallback(() => {\n playValidationAudio();\n handleResponseChange(true);\n }, [handleResponseChange, playValidationAudio]);\n const handleCheckButtonClick = useHandleCheckButtonClick({\n handleValidate,\n });\n const handleRetryButtonClick = useHandleRetryButtonClick({\n handleResponseChange,\n });\n const handleStartButtonClick = useHandleStartButtonClick();\n const handleSubmitQuiz = useHandleSubmitQuiz();\n const handleSheetSubmitButtonClick = useCallback(() => {\n onSubmit?.(responses, questions);\n }, [onSubmit, responses, questions]);\n\n const questionEnabled = checkButton || (isExitTicket && !response?.submittedByStudent);\n\n useEffect(() => {\n if (skipped) {\n setSkipped(false);\n handleNextButtonClick();\n }\n }, [handleNextButtonClick, skipped]);\n\n useEffect(() => {\n const questionInstance = isQuestionAppended ? learnosity.question(response_id) : undefined;\n\n if (questionInstance) {\n if (questionEnabled) {\n questionInstance.on('changed', handleResponseChange);\n questionInstance.enable();\n } else {\n questionInstance.disable();\n }\n }\n\n return () => {\n if (questionInstance && questionEnabled) {\n questionInstance.off('changed', handleResponseChange);\n questionInstance.disable();\n }\n };\n }, [handleResponseChange, isQuestionAppended, learnosity, questionEnabled, response_id]);\n\n return (\n <>\n {nextButton && (\n <ArrowTooltip\n position=\"top\"\n renderAs=\"primary\"\n hidden={!nextButtonTooltip}\n tooltipItem={nextButtonTooltip ?? ''}\n >\n <Button\n widthX={6}\n renderAs=\"primary\"\n size=\"small\"\n label=\"Next\"\n onClick={handleNextButtonClick}\n disabled={nextButtonDisabled === true}\n />\n </ArrowTooltip>\n )}\n {skipButton && (\n <Button\n widthX={6}\n renderAs=\"primary\"\n size=\"small\"\n label={skipButtonLabel ?? 'Skip'}\n onClick={handleSkipButtonClick}\n />\n )}\n {moveButton && (\n <Button\n widthX={8.5}\n renderAs=\"primary\"\n size=\"small\"\n label=\"Move ahead\"\n onClick={handleNextButtonClick}\n />\n )}\n {retryButton && (\n <ArrowTooltip\n position=\"top\"\n renderAs=\"primary\"\n hidden={!retryButtonDisabled}\n tooltipItem=\"Tutor will help, then enable retry\"\n >\n <Button\n widthX={6}\n renderAs=\"primary\"\n size=\"small\"\n label={retryButtonLabel}\n disabled={!isQuestionAppended || retryButtonDisabled}\n onClick={handleRetryButtonClick}\n />\n </ArrowTooltip>\n )}\n {checkButton && (\n <Button\n renderAs=\"primary\"\n size=\"small\"\n label={checkButtonLabel}\n disabled={checkButtonDisabled === true || !isQuestionAppended}\n onClick={handleCheckButtonClick}\n />\n )}\n {startButton && (\n <Button renderAs=\"primary\" size=\"small\" label=\"Start\" onClick={handleStartButtonClick} />\n )}\n {submitQuizButton && (\n <Button\n renderAs=\"primary\"\n size=\"small\"\n label=\"Submit\"\n analyticsLabel=\"Submit Quiz\"\n onClick={handleSubmitQuiz}\n />\n )}\n {submitAttemptButton && (\n <Button\n renderAs=\"primary\"\n size=\"small\"\n label=\"Submit\"\n onClick={handleSheetSubmitButtonClick}\n />\n )}\n </>\n );\n },\n);\n\nexport default StudentControllerLessonV3_1;\n"],"names":["areAllExitTicketQuestionsValidated","responses","questions","q","_a","StudentControllerLessonV3_1","memo","props","behavior","question","response","learnosity","isQuestionAppended","inClass","isLastQuestion","onSubmit","worksheetCompleted","useWorksheetStore","store","activeQuestion","getTimeSpentOnQuestion","canAttempt","checkButtonLabel","retryButtonLabel","teacherDiscussionEnabled","attemptsAfterTeacherInterventionNeeded","response_id","metadata","isNonQuestion","item_type","isExitTicket","startButton","checkButton","checkButtonDisabled","retryButton","retryButtonDisabled","nextButton","nextButtonDisabled","nextButtonTooltip","moveButton","skipButton","skipButtonLabel","submitQuizButton","submitAttemptButton","useMemo","submittedByStudent","responseEdited","score","attemptsHistory","retryEnabled","lastAttemptResponse","deepEqual","isTeacherInterventionNeeded","playValidationAudio","usePlayValidationAudio","handleResponseChange","useHandleResponseChange","handleNextButtonClick","useHandleNextButtonClick","skipped","setSkipped","useState","handleSkipButtonClick","useHandleSkipButtonClick","handleValidate","useCallback","handleCheckButtonClick","useHandleCheckButtonClick","handleRetryButtonClick","useHandleRetryButtonClick","handleStartButtonClick","useHandleStartButtonClick","handleSubmitQuiz","useHandleSubmitQuiz","handleSheetSubmitButtonClick","questionEnabled","useEffect","questionInstance","jsxs","Fragment","jsx","ArrowTooltip","Button"],"mappings":"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"}
|