catchup-library-web 2.0.6 → 2.0.8
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/dist/index.d.mts +22 -22
- package/dist/index.d.ts +22 -22
- package/dist/index.js +286 -472
- package/dist/index.mjs +286 -472
- package/package.json +1 -1
- package/src/components/activities/ActivityPreviewByAnswerData.tsx +118 -121
- package/src/components/activities/ActivityPreviewByData.tsx +10 -10
- package/src/components/activities/DropdownActivityContent.tsx +9 -35
- package/src/components/activities/FillInTheBlanksActivityContent.tsx +9 -34
- package/src/components/activities/GroupingActivityContent.tsx +4 -8
- package/src/components/activities/MCMAActivityContent.tsx +8 -8
- package/src/components/activities/MCSAActivityContent.tsx +8 -8
- package/src/components/activities/MatchingActivityContent.tsx +4 -8
- package/src/components/activities/OpenEndedActivityContent.tsx +4 -8
- package/src/components/activities/OrderingActivityContent.tsx +4 -8
- package/src/components/activities/TrueFalseActivityContent.tsx +4 -12
- package/src/components/activities/material-contents/DropdownActivityMaterialContent.tsx +9 -19
- package/src/components/activities/material-contents/FillInTheBlanksActivityMaterialContent.tsx +9 -24
- package/src/components/activities/material-contents/GroupingActivityMaterialContent.tsx +7 -18
- package/src/components/activities/material-contents/MCMAActivityMaterialContent.tsx +2 -10
- package/src/components/activities/material-contents/MCSAActivityMaterialContent.tsx +2 -10
- package/src/components/activities/material-contents/MatchingActivityMaterialContent.tsx +7 -17
- package/src/components/activities/material-contents/OpenEndedActivityMaterialContent.tsx +2 -21
- package/src/components/activities/material-contents/OrderingActivityMaterialContent.tsx +4 -16
- package/src/components/activities/material-contents/TrueFalseActivityMaterialContent.tsx +4 -27
- package/src/properties/ActivityProperties.ts +21 -20
- package/src/utilization/CatchtivityUtilization.ts +49 -84
- package/src/utilization/ManagementUtilization.ts +1 -1
|
@@ -10,7 +10,7 @@ import DividerLine from "../dividers/DividerLine";
|
|
|
10
10
|
import VerticalDividerLine from "../dividers/VerticalDividerLine";
|
|
11
11
|
|
|
12
12
|
const MCSAActivityContent = ({
|
|
13
|
-
|
|
13
|
+
answerMap,
|
|
14
14
|
data,
|
|
15
15
|
canAnswerQuestion,
|
|
16
16
|
changeAnswer,
|
|
@@ -21,14 +21,14 @@ const MCSAActivityContent = ({
|
|
|
21
21
|
const MCSABodyMap = parseBodyMapFromData(data, "MCSA");
|
|
22
22
|
const MCSAMaterialMap = parseMaterialMapFromData(data, "MCSA");
|
|
23
23
|
|
|
24
|
-
const handleMCSAAnswerOnChange = (
|
|
24
|
+
const handleMCSAAnswerOnChange = (
|
|
25
|
+
answerMap: any,
|
|
26
|
+
key: any,
|
|
27
|
+
value: string
|
|
28
|
+
) => {
|
|
25
29
|
if (isPreview) return;
|
|
26
|
-
let foundIndex = answer.data.findIndex(
|
|
27
|
-
(answerData: any) => answerData.type === "MCSA"
|
|
28
|
-
);
|
|
29
|
-
const answerMap = answer.data[foundIndex].answerMap;
|
|
30
30
|
answerMap[key] = value;
|
|
31
|
-
changeAnswer(
|
|
31
|
+
changeAnswer(answerMap);
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
return (
|
|
@@ -45,7 +45,7 @@ const MCSAActivityContent = ({
|
|
|
45
45
|
<div className={`${isFullScreen ? "w-full" : "w-full md:flex-1"}`}>
|
|
46
46
|
<MCSAActivityMaterialContent
|
|
47
47
|
uniqueValue={JSON.stringify(data.contentMap)}
|
|
48
|
-
|
|
48
|
+
answerMap={answerMap}
|
|
49
49
|
materialMap={MCSAMaterialMap}
|
|
50
50
|
contentMap={contentMap}
|
|
51
51
|
checkCanAnswerQuestion={canAnswerQuestion}
|
|
@@ -9,7 +9,7 @@ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
|
|
|
9
9
|
import MatchingActivityMaterialContent from "./material-contents/MatchingActivityMaterialContent";
|
|
10
10
|
|
|
11
11
|
const MatchingActivityContent = ({
|
|
12
|
-
|
|
12
|
+
answerMap,
|
|
13
13
|
data,
|
|
14
14
|
canAnswerQuestion,
|
|
15
15
|
changeAnswer,
|
|
@@ -21,17 +21,13 @@ const MatchingActivityContent = ({
|
|
|
21
21
|
const matchingMaterialMap = parseMaterialMapFromData(data, "MATCHING");
|
|
22
22
|
|
|
23
23
|
const handleMatchingAnswerOnChange = (
|
|
24
|
-
|
|
24
|
+
answerMap: any,
|
|
25
25
|
key: any,
|
|
26
26
|
value: string | null
|
|
27
27
|
) => {
|
|
28
28
|
if (isPreview) return;
|
|
29
|
-
let foundIndex = answer.data.findIndex(
|
|
30
|
-
(answerData: any) => answerData.type === "MATCHING"
|
|
31
|
-
);
|
|
32
|
-
const answerMap = answer.data[foundIndex].answerMap;
|
|
33
29
|
answerMap[key] = value;
|
|
34
|
-
changeAnswer(
|
|
30
|
+
changeAnswer(answerMap);
|
|
35
31
|
};
|
|
36
32
|
|
|
37
33
|
return (
|
|
@@ -43,7 +39,7 @@ const MatchingActivityContent = ({
|
|
|
43
39
|
<DividerLine />
|
|
44
40
|
<MatchingActivityMaterialContent
|
|
45
41
|
uniqueValue={JSON.stringify(data.contentMap)}
|
|
46
|
-
|
|
42
|
+
answerMap={answerMap}
|
|
47
43
|
materialMap={matchingMaterialMap}
|
|
48
44
|
contentMap={contentMap}
|
|
49
45
|
checkCanAnswerQuestion={canAnswerQuestion}
|
|
@@ -9,7 +9,7 @@ import DividerLine from "../dividers/DividerLine";
|
|
|
9
9
|
import VerticalDividerLine from "../dividers/VerticalDividerLine";
|
|
10
10
|
|
|
11
11
|
const OpenEndedActivityContent = ({
|
|
12
|
-
|
|
12
|
+
answerMap,
|
|
13
13
|
data,
|
|
14
14
|
changeAnswer,
|
|
15
15
|
canAnswerQuestion,
|
|
@@ -20,14 +20,10 @@ const OpenEndedActivityContent = ({
|
|
|
20
20
|
const contentMap = parseContentMapFromData(data);
|
|
21
21
|
const openEndedBodyMap = parseBodyMapFromData(data, "OPEN_ENDED");
|
|
22
22
|
|
|
23
|
-
const handleOpenEndedAnswerOnChange = (
|
|
23
|
+
const handleOpenEndedAnswerOnChange = (answerMap: any, value: string) => {
|
|
24
24
|
if (isPreview) return;
|
|
25
|
-
let foundIndex = answer.data.findIndex(
|
|
26
|
-
(answerData: any) => answerData.type === "OPEN_ENDED"
|
|
27
|
-
);
|
|
28
|
-
const answerMap = answer.data[foundIndex].answerMap;
|
|
29
25
|
answerMap["ANSWER"] = value;
|
|
30
|
-
changeAnswer(
|
|
26
|
+
changeAnswer(answerMap);
|
|
31
27
|
};
|
|
32
28
|
|
|
33
29
|
return (
|
|
@@ -59,7 +55,7 @@ const OpenEndedActivityContent = ({
|
|
|
59
55
|
</div>
|
|
60
56
|
<div className={`${isFullScreen ? "w-full" : "w-full md:flex-1"}`}>
|
|
61
57
|
<OpenEndedActivityMaterialContent
|
|
62
|
-
|
|
58
|
+
answerMap={answerMap}
|
|
63
59
|
contentMap={contentMap}
|
|
64
60
|
checkCanAnswerQuestion={canAnswerQuestion}
|
|
65
61
|
onChange={handleOpenEndedAnswerOnChange}
|
|
@@ -9,7 +9,7 @@ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
|
|
|
9
9
|
import OrderingActivityMaterialContent from "./material-contents/OrderingActivityMaterialContent";
|
|
10
10
|
|
|
11
11
|
const OrderingActivityContent = ({
|
|
12
|
-
|
|
12
|
+
answerMap,
|
|
13
13
|
data,
|
|
14
14
|
canAnswerQuestion,
|
|
15
15
|
changeAnswer,
|
|
@@ -22,19 +22,15 @@ const OrderingActivityContent = ({
|
|
|
22
22
|
const orderingMaterialMap = parseMaterialMapFromData(data, "ORDERING");
|
|
23
23
|
|
|
24
24
|
const handleOrderingAnswerOnChange = (
|
|
25
|
-
|
|
25
|
+
answerMap: any,
|
|
26
26
|
primaryKey: any,
|
|
27
27
|
secondaryKey: any
|
|
28
28
|
) => {
|
|
29
29
|
if (isPreview) return;
|
|
30
|
-
let foundIndex = answer.data.findIndex(
|
|
31
|
-
(answerData: any) => answerData.type === "ORDERING"
|
|
32
|
-
);
|
|
33
|
-
const answerMap = answer.data[foundIndex].answerMap;
|
|
34
30
|
const prevValue = answerMap[primaryKey];
|
|
35
31
|
answerMap[primaryKey] = answerMap[secondaryKey];
|
|
36
32
|
answerMap[secondaryKey] = prevValue;
|
|
37
|
-
changeAnswer(
|
|
33
|
+
changeAnswer(answerMap);
|
|
38
34
|
};
|
|
39
35
|
|
|
40
36
|
return (
|
|
@@ -46,7 +42,7 @@ const OrderingActivityContent = ({
|
|
|
46
42
|
<DividerLine />
|
|
47
43
|
<OrderingActivityMaterialContent
|
|
48
44
|
uniqueValue={JSON.stringify(data.contentMap)}
|
|
49
|
-
|
|
45
|
+
answerMap={answerMap}
|
|
50
46
|
materialMap={orderingMaterialMap}
|
|
51
47
|
contentMap={contentMap}
|
|
52
48
|
checkCanAnswerQuestion={canAnswerQuestion}
|
|
@@ -10,7 +10,7 @@ import DividerLine from "../dividers/DividerLine";
|
|
|
10
10
|
import VerticalDividerLine from "../dividers/VerticalDividerLine";
|
|
11
11
|
|
|
12
12
|
const TrueFalseActivityContent = ({
|
|
13
|
-
|
|
13
|
+
answerMap,
|
|
14
14
|
data,
|
|
15
15
|
canAnswerQuestion,
|
|
16
16
|
changeAnswer,
|
|
@@ -22,20 +22,12 @@ const TrueFalseActivityContent = ({
|
|
|
22
22
|
const trueFalseBodyMap = parseBodyMapFromData(data, "TRUE_FALSE");
|
|
23
23
|
const trueFalseMaterialMap = parseMaterialMapFromData(data, "TRUE_FALSE");
|
|
24
24
|
|
|
25
|
-
const retrieveCurrentAnswerMap = () => {
|
|
26
|
-
let foundIndex = answer.data.findIndex(
|
|
27
|
-
(answerData: any) => answerData.type === "TRUE_FALSE"
|
|
28
|
-
);
|
|
29
|
-
return answer.data[foundIndex].answerMap;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
25
|
const handleTrueFalseAnswerOnChange = (
|
|
33
|
-
|
|
26
|
+
answerMap: any,
|
|
34
27
|
key: any,
|
|
35
28
|
value: string
|
|
36
29
|
) => {
|
|
37
30
|
if (isPreview) return;
|
|
38
|
-
const answerMap = retrieveCurrentAnswerMap();
|
|
39
31
|
if (key === "TRUE") {
|
|
40
32
|
const foundFalseIndex = answerMap.falseList.findIndex(
|
|
41
33
|
(item: string) => item === value
|
|
@@ -63,7 +55,7 @@ const TrueFalseActivityContent = ({
|
|
|
63
55
|
answerMap.falseList.push(value);
|
|
64
56
|
}
|
|
65
57
|
}
|
|
66
|
-
changeAnswer(
|
|
58
|
+
changeAnswer(answerMap);
|
|
67
59
|
};
|
|
68
60
|
|
|
69
61
|
return (
|
|
@@ -84,7 +76,7 @@ const TrueFalseActivityContent = ({
|
|
|
84
76
|
<div className={`${isFullScreen ? "w-full" : "w-full md:flex-1"}`}>
|
|
85
77
|
<TrueFalseActivityMaterialContent
|
|
86
78
|
uniqueValue={JSON.stringify(data.contentMap)}
|
|
87
|
-
|
|
79
|
+
answerMap={answerMap}
|
|
88
80
|
materialMap={trueFalseMaterialMap}
|
|
89
81
|
contentMap={contentMap}
|
|
90
82
|
checkCanAnswerQuestion={canAnswerQuestion}
|
|
@@ -13,7 +13,7 @@ import ShowMaterialMediaByContentType from "./ShowMaterialMediaByContentType";
|
|
|
13
13
|
|
|
14
14
|
const DropdownActivityMaterialContent = ({
|
|
15
15
|
uniqueValue,
|
|
16
|
-
|
|
16
|
+
answerMap,
|
|
17
17
|
materialMap,
|
|
18
18
|
contentMap,
|
|
19
19
|
checkCanAnswerQuestion,
|
|
@@ -25,15 +25,10 @@ const DropdownActivityMaterialContent = ({
|
|
|
25
25
|
|
|
26
26
|
useEffect(() => {
|
|
27
27
|
if (!showCorrectAnswer) return;
|
|
28
|
-
|
|
29
|
-
(answerData: any) => answerData.type === "DROPDOWN"
|
|
30
|
-
);
|
|
31
|
-
if (foundAnswer.answerMap.length === 0) return;
|
|
32
|
-
if (Object.keys(materialMap).length === 0) return;
|
|
33
|
-
foundAnswer.answerMap = Object.keys(materialMap).map(
|
|
28
|
+
answerMap = Object.keys(materialMap).map(
|
|
34
29
|
(materialMapKey, index) => Object.keys(materialMap[materialMapKey])[0]
|
|
35
30
|
);
|
|
36
|
-
onChange(
|
|
31
|
+
onChange(answerMap, 0, Object.keys(materialMap[0])[0]);
|
|
37
32
|
setUpdated(true);
|
|
38
33
|
}, [showCorrectAnswer]);
|
|
39
34
|
|
|
@@ -42,13 +37,6 @@ const DropdownActivityMaterialContent = ({
|
|
|
42
37
|
setUpdated(false);
|
|
43
38
|
}, [updated]);
|
|
44
39
|
|
|
45
|
-
const retrieveAnswerMap = () => {
|
|
46
|
-
const foundIndex = answer.data.findIndex(
|
|
47
|
-
(answerData: any) => answerData.type === "DROPDOWN"
|
|
48
|
-
);
|
|
49
|
-
return answer.data[foundIndex].answerMap;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
40
|
const checkAnswerState = (correctAnswer: string, learnerAnswer: string) => {
|
|
53
41
|
if (!isPreview) return null;
|
|
54
42
|
if (correctAnswer === learnerAnswer) {
|
|
@@ -57,8 +45,6 @@ const DropdownActivityMaterialContent = ({
|
|
|
57
45
|
return "INCORRECT";
|
|
58
46
|
};
|
|
59
47
|
|
|
60
|
-
const answerMap = retrieveAnswerMap();
|
|
61
|
-
|
|
62
48
|
return (
|
|
63
49
|
<div className="flex flex-row flex-wrap items-center">
|
|
64
50
|
<div className="hidden md:block">
|
|
@@ -125,7 +111,11 @@ const DropdownActivityMaterialContent = ({
|
|
|
125
111
|
value: materialOption,
|
|
126
112
|
}))}
|
|
127
113
|
onChange={(e) => {
|
|
128
|
-
onChange(
|
|
114
|
+
onChange(
|
|
115
|
+
answerMap,
|
|
116
|
+
materialKey,
|
|
117
|
+
e.target.value
|
|
118
|
+
);
|
|
129
119
|
}}
|
|
130
120
|
/>
|
|
131
121
|
</div>
|
|
@@ -165,7 +155,7 @@ const DropdownActivityMaterialContent = ({
|
|
|
165
155
|
),
|
|
166
156
|
onClick: (e: any) => {
|
|
167
157
|
onChange(
|
|
168
|
-
|
|
158
|
+
answerMap,
|
|
169
159
|
materialKey,
|
|
170
160
|
e.target.currentSrc
|
|
171
161
|
);
|
package/src/components/activities/material-contents/FillInTheBlanksActivityMaterialContent.tsx
CHANGED
|
@@ -11,7 +11,7 @@ import { constructInputWithSpecialExpressionList } from "../../../utilization/Ca
|
|
|
11
11
|
|
|
12
12
|
const FillInTheBlanksActivityMaterialContent = ({
|
|
13
13
|
uniqueValue,
|
|
14
|
-
|
|
14
|
+
answerMap,
|
|
15
15
|
optionList,
|
|
16
16
|
materialMap,
|
|
17
17
|
contentMap,
|
|
@@ -43,24 +43,11 @@ const FillInTheBlanksActivityMaterialContent = ({
|
|
|
43
43
|
|
|
44
44
|
useEffect(() => {
|
|
45
45
|
if (!showCorrectAnswer) return;
|
|
46
|
-
|
|
47
|
-
(answerData: any) => answerData.type === "FILL_IN_THE_BLANKS"
|
|
48
|
-
);
|
|
49
|
-
if (!foundAnswer || foundAnswer.answerMap.length === 0) return;
|
|
50
|
-
if (Object.keys(materialMap).length === 0) return;
|
|
51
|
-
foundAnswer.answerMap = Object.keys(materialMap).map(
|
|
46
|
+
answerMap = Object.keys(materialMap).map(
|
|
52
47
|
(materialMapKey) => JSON.parse(materialMap[materialMapKey])[0]
|
|
53
48
|
);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}, [showCorrectAnswer, answer, materialMap, onChange]);
|
|
57
|
-
|
|
58
|
-
const retrieveAnswerMap = (): Record<string, any> => {
|
|
59
|
-
const foundIndex = answer.data.findIndex(
|
|
60
|
-
(answerData: any) => answerData.type === "FILL_IN_THE_BLANKS"
|
|
61
|
-
);
|
|
62
|
-
return answer.data[foundIndex].answerMap;
|
|
63
|
-
};
|
|
49
|
+
onChange(answerMap, 0, JSON.parse(materialMap[0])[0]);
|
|
50
|
+
}, [showCorrectAnswer]);
|
|
64
51
|
|
|
65
52
|
const checkAnswerState = (
|
|
66
53
|
correctAnswerList: any[],
|
|
@@ -113,7 +100,7 @@ const FillInTheBlanksActivityMaterialContent = ({
|
|
|
113
100
|
|
|
114
101
|
const handleMouseUp = (): void => {
|
|
115
102
|
if (dropTargetIndex !== null && draggedOption !== null) {
|
|
116
|
-
onChange(
|
|
103
|
+
onChange(answerMap, dropTargetIndex, draggedOption);
|
|
117
104
|
}
|
|
118
105
|
setDraggedOption(null);
|
|
119
106
|
setDropTargetIndex(null);
|
|
@@ -156,7 +143,7 @@ const FillInTheBlanksActivityMaterialContent = ({
|
|
|
156
143
|
|
|
157
144
|
const handleTouchEnd = (): void => {
|
|
158
145
|
if (dropTargetIndex !== null && draggedOption !== null) {
|
|
159
|
-
onChange(
|
|
146
|
+
onChange(answerMap, dropTargetIndex, draggedOption);
|
|
160
147
|
}
|
|
161
148
|
setDraggedOption(null);
|
|
162
149
|
setDropTargetIndex(null);
|
|
@@ -172,13 +159,11 @@ const FillInTheBlanksActivityMaterialContent = ({
|
|
|
172
159
|
|
|
173
160
|
const handleDropZoneClick = (index: string): void => {
|
|
174
161
|
if (selectedOption !== null) {
|
|
175
|
-
onChange(
|
|
162
|
+
onChange(answerMap, index, selectedOption);
|
|
176
163
|
setSelectedOption(null);
|
|
177
164
|
}
|
|
178
165
|
};
|
|
179
166
|
|
|
180
|
-
const answerMap = retrieveAnswerMap();
|
|
181
|
-
|
|
182
167
|
return (
|
|
183
168
|
<div
|
|
184
169
|
className="flex flex-row flex-wrap items-center"
|
|
@@ -352,7 +337,7 @@ const FillInTheBlanksActivityMaterialContent = ({
|
|
|
352
337
|
onClick={(e) => {
|
|
353
338
|
if (answerMap[materialKey]) {
|
|
354
339
|
e.stopPropagation();
|
|
355
|
-
onChange(
|
|
340
|
+
onChange(answerMap, materialKey, "");
|
|
356
341
|
}
|
|
357
342
|
}}
|
|
358
343
|
>
|
|
@@ -404,7 +389,7 @@ const FillInTheBlanksActivityMaterialContent = ({
|
|
|
404
389
|
className="flex-1 cursor-pointer"
|
|
405
390
|
onClick={(e) => {
|
|
406
391
|
e.stopPropagation();
|
|
407
|
-
onChange(
|
|
392
|
+
onChange(answerMap, materialKey, "");
|
|
408
393
|
}}
|
|
409
394
|
>
|
|
410
395
|
<ShowMaterialMediaByContentType
|
|
@@ -7,7 +7,7 @@ import { IGroupingActivityMaterialProps } from "../../../properties/ActivityProp
|
|
|
7
7
|
|
|
8
8
|
const GroupingActivityMaterialContent = ({
|
|
9
9
|
uniqueValue,
|
|
10
|
-
|
|
10
|
+
answerMap,
|
|
11
11
|
materialMap,
|
|
12
12
|
contentMap,
|
|
13
13
|
checkCanAnswerQuestion,
|
|
@@ -59,10 +59,8 @@ const GroupingActivityMaterialContent = ({
|
|
|
59
59
|
|
|
60
60
|
useEffect(() => {
|
|
61
61
|
if (!showCorrectAnswer) return;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
).answerMap = materialMap;
|
|
65
|
-
}, [showCorrectAnswer, answer, materialMap]);
|
|
62
|
+
answerMap = materialMap;
|
|
63
|
+
}, [showCorrectAnswer, answerMap, materialMap]);
|
|
66
64
|
|
|
67
65
|
useEffect(() => {
|
|
68
66
|
if (!dropTargetKey || !dropZoneRefs.current[dropTargetKey]) return;
|
|
@@ -130,14 +128,6 @@ const GroupingActivityMaterialContent = ({
|
|
|
130
128
|
requestAnimationFrame(animate);
|
|
131
129
|
}, [dropTargetKey]);
|
|
132
130
|
|
|
133
|
-
const retrieveAnswerMap = () => {
|
|
134
|
-
const foundIndex = answer.data.findIndex(
|
|
135
|
-
(answerData: any) => answerData.type === "GROUPING"
|
|
136
|
-
);
|
|
137
|
-
const answerMap = answer.data[foundIndex].answerMap;
|
|
138
|
-
return answerMap;
|
|
139
|
-
};
|
|
140
|
-
|
|
141
131
|
const retrieveFilteredMaterialList = (answerMap: any) => {
|
|
142
132
|
const selectedValueList: any = [];
|
|
143
133
|
Object.keys(answerMap).forEach((key) => {
|
|
@@ -196,7 +186,7 @@ const GroupingActivityMaterialContent = ({
|
|
|
196
186
|
|
|
197
187
|
const handleMouseUp = (): void => {
|
|
198
188
|
if (dropTargetKey !== null && draggedValue !== null) {
|
|
199
|
-
onChange(
|
|
189
|
+
onChange(answerMap, dropTargetKey, draggedValue, null);
|
|
200
190
|
}
|
|
201
191
|
setDraggedValue(null);
|
|
202
192
|
setDropTargetKey(null);
|
|
@@ -240,7 +230,7 @@ const GroupingActivityMaterialContent = ({
|
|
|
240
230
|
|
|
241
231
|
const handleTouchEnd = (): void => {
|
|
242
232
|
if (dropTargetKey !== null && draggedValue !== null) {
|
|
243
|
-
onChange(
|
|
233
|
+
onChange(answerMap, dropTargetKey, draggedValue, null);
|
|
244
234
|
}
|
|
245
235
|
setDraggedValue(null);
|
|
246
236
|
setDropTargetKey(null);
|
|
@@ -257,12 +247,11 @@ const GroupingActivityMaterialContent = ({
|
|
|
257
247
|
|
|
258
248
|
const handleDropZoneClick = (answerMapKey: string): void => {
|
|
259
249
|
if (selectedValue !== null) {
|
|
260
|
-
onChange(
|
|
250
|
+
onChange(answerMap, answerMapKey, selectedValue, null);
|
|
261
251
|
setSelectedValue(null);
|
|
262
252
|
}
|
|
263
253
|
};
|
|
264
254
|
|
|
265
|
-
const answerMap = retrieveAnswerMap();
|
|
266
255
|
const filteredMaterialList = retrieveFilteredMaterialList(answerMap);
|
|
267
256
|
|
|
268
257
|
return (
|
|
@@ -518,7 +507,7 @@ const GroupingActivityMaterialContent = ({
|
|
|
518
507
|
e.stopPropagation();
|
|
519
508
|
if (checkCanAnswerQuestion()) {
|
|
520
509
|
onChange(
|
|
521
|
-
|
|
510
|
+
answerMap,
|
|
522
511
|
answerMapKey,
|
|
523
512
|
null,
|
|
524
513
|
answerMapIndex
|
|
@@ -8,20 +8,13 @@ import DividerLine from "../../dividers/DividerLine";
|
|
|
8
8
|
|
|
9
9
|
const MCMAActivityMaterialContent = ({
|
|
10
10
|
uniqueValue,
|
|
11
|
-
|
|
11
|
+
answerMap,
|
|
12
12
|
materialMap,
|
|
13
13
|
contentMap,
|
|
14
14
|
checkCanAnswerQuestion,
|
|
15
15
|
onChange,
|
|
16
16
|
isPreview,
|
|
17
17
|
}: IMCMAActivityMaterialProps) => {
|
|
18
|
-
const retrieveAnswerMap = () => {
|
|
19
|
-
const foundIndex = answer.data.findIndex(
|
|
20
|
-
(answerData: any) => answerData.type === "MCMA"
|
|
21
|
-
);
|
|
22
|
-
return answer.data[foundIndex].answerMap;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
18
|
const retrieveCorrectAnswerList = () => {
|
|
26
19
|
return JSON.parse(Object.keys(materialMap)[0]);
|
|
27
20
|
};
|
|
@@ -42,7 +35,6 @@ const MCMAActivityMaterialContent = ({
|
|
|
42
35
|
return "INCORRECT";
|
|
43
36
|
};
|
|
44
37
|
|
|
45
|
-
const answerMap = retrieveAnswerMap();
|
|
46
38
|
const correctAnswerList = retrieveCorrectAnswerList();
|
|
47
39
|
|
|
48
40
|
return Object.keys(materialMap).map((materialKey, index) => {
|
|
@@ -84,7 +76,7 @@ const MCMAActivityMaterialContent = ({
|
|
|
84
76
|
: ""
|
|
85
77
|
}`}
|
|
86
78
|
onClick={() => {
|
|
87
|
-
onChange(
|
|
79
|
+
onChange(answerMap, materialKey, materialSubKey);
|
|
88
80
|
}}
|
|
89
81
|
>
|
|
90
82
|
<BaseImage
|
|
@@ -8,20 +8,13 @@ import DividerLine from "../../dividers/DividerLine";
|
|
|
8
8
|
|
|
9
9
|
const MCSAActivityMaterialContent = ({
|
|
10
10
|
uniqueValue,
|
|
11
|
-
|
|
11
|
+
answerMap,
|
|
12
12
|
materialMap,
|
|
13
13
|
contentMap,
|
|
14
14
|
checkCanAnswerQuestion,
|
|
15
15
|
onChange,
|
|
16
16
|
isPreview,
|
|
17
17
|
}: IMCSAActivityMaterialProps) => {
|
|
18
|
-
const retrieveAnswerMap = () => {
|
|
19
|
-
const foundIndex = answer.data.findIndex(
|
|
20
|
-
(answerData: any) => answerData.type === "MCSA"
|
|
21
|
-
);
|
|
22
|
-
return answer.data[foundIndex].answerMap;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
18
|
const retrieveCorrectAnswer = () => {
|
|
26
19
|
return Object.keys(materialMap)[0];
|
|
27
20
|
};
|
|
@@ -39,7 +32,6 @@ const MCSAActivityMaterialContent = ({
|
|
|
39
32
|
return "INCORRECT";
|
|
40
33
|
};
|
|
41
34
|
|
|
42
|
-
const answerMap = retrieveAnswerMap();
|
|
43
35
|
const correctAnswer = retrieveCorrectAnswer();
|
|
44
36
|
|
|
45
37
|
return Object.keys(materialMap).map((materialKey, index) => {
|
|
@@ -83,7 +75,7 @@ const MCSAActivityMaterialContent = ({
|
|
|
83
75
|
: ""
|
|
84
76
|
}`}
|
|
85
77
|
onClick={() => {
|
|
86
|
-
onChange(
|
|
78
|
+
onChange(answerMap, materialKey, materialSubKey);
|
|
87
79
|
}}
|
|
88
80
|
>
|
|
89
81
|
<BaseImage
|
|
@@ -7,7 +7,7 @@ import DividerLine from "../../dividers/DividerLine";
|
|
|
7
7
|
|
|
8
8
|
const MatchingActivityMaterialContent = ({
|
|
9
9
|
uniqueValue,
|
|
10
|
-
|
|
10
|
+
answerMap,
|
|
11
11
|
materialMap,
|
|
12
12
|
contentMap,
|
|
13
13
|
checkCanAnswerQuestion,
|
|
@@ -57,10 +57,8 @@ const MatchingActivityMaterialContent = ({
|
|
|
57
57
|
|
|
58
58
|
useEffect(() => {
|
|
59
59
|
if (!showCorrectAnswer) return;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
).answerMap = materialMap;
|
|
63
|
-
}, [showCorrectAnswer, answer, materialMap]);
|
|
60
|
+
answerMap = materialMap;
|
|
61
|
+
}, [showCorrectAnswer]);
|
|
64
62
|
|
|
65
63
|
useEffect(() => {
|
|
66
64
|
if (!dropTargetKey || !dropZoneRefs.current[dropTargetKey]) return;
|
|
@@ -128,13 +126,6 @@ const MatchingActivityMaterialContent = ({
|
|
|
128
126
|
requestAnimationFrame(animate);
|
|
129
127
|
}, [dropTargetKey]);
|
|
130
128
|
|
|
131
|
-
const retrieveAnswerMap = () => {
|
|
132
|
-
const foundIndex = answer.data.findIndex(
|
|
133
|
-
(answerData: any) => answerData.type === "MATCHING"
|
|
134
|
-
);
|
|
135
|
-
return answer.data[foundIndex].answerMap;
|
|
136
|
-
};
|
|
137
|
-
|
|
138
129
|
const retrieveFilteredMaterialList = (answerMap: any) => {
|
|
139
130
|
const selectedValueList: any = [];
|
|
140
131
|
Object.keys(answerMap).forEach((key) => {
|
|
@@ -188,7 +179,7 @@ const MatchingActivityMaterialContent = ({
|
|
|
188
179
|
|
|
189
180
|
const handleMouseUp = (): void => {
|
|
190
181
|
if (dropTargetKey !== null && draggedValue !== null) {
|
|
191
|
-
onChange(
|
|
182
|
+
onChange(answerMap, dropTargetKey, draggedValue);
|
|
192
183
|
}
|
|
193
184
|
setDraggedValue(null);
|
|
194
185
|
setDropTargetKey(null);
|
|
@@ -232,7 +223,7 @@ const MatchingActivityMaterialContent = ({
|
|
|
232
223
|
|
|
233
224
|
const handleTouchEnd = (): void => {
|
|
234
225
|
if (dropTargetKey !== null && draggedValue !== null) {
|
|
235
|
-
onChange(
|
|
226
|
+
onChange(answerMap, dropTargetKey, draggedValue);
|
|
236
227
|
}
|
|
237
228
|
setDraggedValue(null);
|
|
238
229
|
setDropTargetKey(null);
|
|
@@ -249,12 +240,11 @@ const MatchingActivityMaterialContent = ({
|
|
|
249
240
|
|
|
250
241
|
const handleDropZoneClick = (answerMapKey: string): void => {
|
|
251
242
|
if (selectedValue !== null) {
|
|
252
|
-
onChange(
|
|
243
|
+
onChange(answerMap, answerMapKey, selectedValue);
|
|
253
244
|
setSelectedValue(null);
|
|
254
245
|
}
|
|
255
246
|
};
|
|
256
247
|
|
|
257
|
-
const answerMap = retrieveAnswerMap();
|
|
258
248
|
const filteredMaterialList = retrieveFilteredMaterialList(answerMap);
|
|
259
249
|
|
|
260
250
|
return (
|
|
@@ -513,7 +503,7 @@ const MatchingActivityMaterialContent = ({
|
|
|
513
503
|
onClick={(e) => {
|
|
514
504
|
e.stopPropagation();
|
|
515
505
|
if (checkCanAnswerQuestion() && answerMap[answerMapKey]) {
|
|
516
|
-
onChange(
|
|
506
|
+
onChange(answerMap, answerMapKey, null);
|
|
517
507
|
setSelectedValue(null);
|
|
518
508
|
}
|
|
519
509
|
}}
|
|
@@ -7,28 +7,11 @@ import BaseImage from "../../images/BaseImage";
|
|
|
7
7
|
import BasePDF from "../../pdfs/BasePDF";
|
|
8
8
|
|
|
9
9
|
const OpenEndedActivityMaterialContent = ({
|
|
10
|
-
|
|
10
|
+
answerMap,
|
|
11
11
|
contentMap,
|
|
12
12
|
checkCanAnswerQuestion,
|
|
13
13
|
onChange,
|
|
14
14
|
}: IOpenEndedActivityMaterialProps) => {
|
|
15
|
-
const retrieveAnswer = () => {
|
|
16
|
-
if (!answer)
|
|
17
|
-
return {
|
|
18
|
-
answerMap: {
|
|
19
|
-
ANSWER: "",
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
return answer.data.find(
|
|
23
|
-
(answerData: any) => answerData.type === "OPEN_ENDED"
|
|
24
|
-
);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const retrieveAnswerMap = () => {
|
|
28
|
-
const { answerMap } = retrieveAnswer();
|
|
29
|
-
return answerMap;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
15
|
const RenderTextContent = (answerMap: any) => {
|
|
33
16
|
const answerMapAnswer = answerMap["ANSWER"];
|
|
34
17
|
let documentType: string = "TEXT";
|
|
@@ -71,7 +54,7 @@ const OpenEndedActivityMaterialContent = ({
|
|
|
71
54
|
useMinHeight={true}
|
|
72
55
|
onChange={(e) => {
|
|
73
56
|
if (checkCanAnswerQuestion()) {
|
|
74
|
-
onChange(
|
|
57
|
+
onChange(answerMap, e.target.value);
|
|
75
58
|
}
|
|
76
59
|
}}
|
|
77
60
|
/>
|
|
@@ -117,8 +100,6 @@ const OpenEndedActivityMaterialContent = ({
|
|
|
117
100
|
);
|
|
118
101
|
};
|
|
119
102
|
|
|
120
|
-
const answerMap = retrieveAnswerMap();
|
|
121
|
-
|
|
122
103
|
return (
|
|
123
104
|
<>
|
|
124
105
|
<div className="">
|