catchup-library-web 2.1.6 → 2.2.1

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,268 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- import DropdownActivityContent from "./DropdownActivityContent";
3
- import FillInTheBlanksActivityContent from "./FillInTheBlanksActivityContent";
4
- import GroupingActivityContent from "./GroupingActivityContent";
5
- import MatchingActivityContent from "./MatchingActivityContent";
6
- import MCMAActivityContent from "./MCMAActivityContent";
7
- import MCSAActivityContent from "./MCSAActivityContent";
8
- import OpenEndedActivityContent from "./OpenEndedActivityContent";
9
- import OrderingActivityContent from "./OrderingActivityContent";
10
- import SelectionBox from "../boxes/SelectionBox";
11
- import TrueFalseActivityContent from "./TrueFalseActivityContent";
12
- import ActivitySolutionContent from "./solution-contents/ActivitySolutionContent";
13
- import ActivityEvaluationRubricContent from "./evaluation-rubric-contents/ActivityEvaluationRubricContent";
14
- import DividerLine from "../dividers/DividerLine";
15
- import i18n from "../../language/i18n";
16
- import {
17
- constructActivityAnswerMap,
18
- retrieveDifficultyByActivityTypeFromData,
19
- } from "../../utilization/CatchtivityUtilization";
20
- import { IActivityPreviewByAnswerDataProps } from "../../properties/ActivityProperties";
21
- import ActivityEmptyContent from "./empty-contents/ActivityEmptyContent";
22
-
23
- const ACTIVITY_TEMPLATE_LIST = [
24
- { type: "ORDERING", materialMap: "orderingMaterialMap" },
25
- { type: "DROPDOWN", materialMap: "dropdownMaterialMap" },
26
- { type: "MCSA", materialMap: "MCSAMaterialMap" },
27
- { type: "MCMA", materialMap: "MCMAMaterialMap" },
28
- { type: "MATCHING", materialMap: "matchingMaterialMap" },
29
- { type: "GROUPING", materialMap: "groupingMaterialMap" },
30
- {
31
- type: "FILL_IN_THE_BLANKS",
32
- materialMap: "fillInTheBlanksMaterialMap",
33
- },
34
- { type: "OPEN_ENDED", materialMap: "openEndedMaterialMap" },
35
- { type: "TRUE_FALSE", materialMap: "trueFalseMaterialMap" },
36
- ];
37
-
38
- const ActivityPreviewByAnswerData = ({
39
- data,
40
- answerType = null,
41
- showType = true,
42
- showDescription = true,
43
- typeList = [],
44
- showSolution = false,
45
- showEvaluationRubric = false,
46
- showDifficulty = true,
47
- isFullScreen = false,
48
- showCorrectAnswer = false,
49
- }: IActivityPreviewByAnswerDataProps) => {
50
- const [selectedType, setSelectedType] = useState<string | null>(null);
51
- const [optionList, setOptionList] = useState<any[]>([]);
52
- const [answerMapMap, setAnswerMapMap] = useState<any>({});
53
- const [activityTemplateTypeList, setActivityTemplateTypeList] = useState<
54
- any[]
55
- >([]);
56
-
57
- useEffect(() => {
58
- if (!data) return;
59
- let currentActivityTemplateMapList: any[] = JSON.parse(
60
- JSON.stringify(ACTIVITY_TEMPLATE_LIST)
61
- );
62
- if (typeList.length > 0) {
63
- currentActivityTemplateMapList = currentActivityTemplateMapList.filter(
64
- (activityTemplateMap) => typeList.includes(activityTemplateMap.type)
65
- );
66
- }
67
- const currentActivityTemplateTypeList = [];
68
- for (const activityTemplateMap of currentActivityTemplateMapList) {
69
- if (data[activityTemplateMap.materialMap]) {
70
- currentActivityTemplateTypeList.push(activityTemplateMap);
71
- }
72
- }
73
- setActivityTemplateTypeList(currentActivityTemplateMapList);
74
- }, [data, answerType, typeList]);
75
-
76
- useEffect(() => {
77
- if (activityTemplateTypeList.length === 0) return;
78
- const currentOptionList = [];
79
- for (const activityTemplateType of activityTemplateTypeList) {
80
- const currentTypeOption: any = {
81
- id: activityTemplateType.type,
82
- value: i18n.t(activityTemplateType.type),
83
- };
84
- if (showDifficulty) {
85
- currentTypeOption.subText = i18n.t(
86
- retrieveDifficultyByActivityTypeFromData(
87
- activityTemplateType.type,
88
- data
89
- )
90
- );
91
- }
92
- currentOptionList.push(currentTypeOption);
93
- }
94
- setOptionList(currentOptionList);
95
- }, [activityTemplateTypeList, showDifficulty]);
96
-
97
- useEffect(() => {
98
- if (optionList.length === 0) return;
99
- setSelectedType(optionList[0].id);
100
- }, [optionList]);
101
-
102
- useEffect(() => {
103
- if (activityTemplateTypeList.length === 0) return;
104
- const currentAnswerMapMap: any = {};
105
- for (const activityTemplateMap of activityTemplateTypeList) {
106
- if (answerType === activityTemplateMap.type) {
107
- currentAnswerMapMap[activityTemplateMap.type] = data.answerMap;
108
- } else {
109
- currentAnswerMapMap[activityTemplateMap.type] =
110
- constructActivityAnswerMap(
111
- activityTemplateMap.type,
112
- JSON.parse(JSON.stringify(data))
113
- );
114
- }
115
- }
116
- setAnswerMapMap(currentAnswerMapMap);
117
- }, [activityTemplateTypeList]);
118
-
119
- const RenderSelectedActivityContent = () => {
120
- if (!selectedType) return null;
121
-
122
- const commonProps = {
123
- answerMap: answerMapMap[selectedType],
124
- data,
125
- canAnswerQuestion: () => true,
126
- changeAnswer: () => {},
127
- isPreview: true,
128
- showCorrectAnswer,
129
- isFullScreen,
130
- };
131
-
132
- const isEmpty = answerMapMap[selectedType].isEmpty;
133
-
134
- switch (selectedType) {
135
- case "ORDERING":
136
- return data.orderingBodyMap && data.orderingMaterialMap ? (
137
- <>
138
- {isEmpty && <ActivityEmptyContent />}
139
- <OrderingActivityContent {...commonProps} />
140
- </>
141
- ) : null;
142
-
143
- case "DROPDOWN":
144
- return data.dropdownBodyMap && data.dropdownMaterialMap ? (
145
- <>
146
- {isEmpty && <ActivityEmptyContent />}
147
- <DropdownActivityContent {...commonProps} />
148
- </>
149
- ) : null;
150
-
151
- case "MCSA":
152
- return data.MCSABodyMap && data.MCSAMaterialMap ? (
153
- <>
154
- {isEmpty && <ActivityEmptyContent />}
155
- <MCSAActivityContent {...commonProps} />
156
- </>
157
- ) : null;
158
-
159
- case "MCMA":
160
- return data.MCMABodyMap && data.MCMAMaterialMap ? (
161
- <>
162
- {isEmpty && <ActivityEmptyContent />}
163
- <MCMAActivityContent {...commonProps} />
164
- </>
165
- ) : null;
166
-
167
- case "MATCHING":
168
- return data.matchingBodyMap && data.matchingMaterialMap ? (
169
- <>
170
- {isEmpty && <ActivityEmptyContent />}
171
- <MatchingActivityContent {...commonProps} />
172
- </>
173
- ) : null;
174
-
175
- case "GROUPING":
176
- return data.groupingBodyMap && data.groupingMaterialMap ? (
177
- <>
178
- {isEmpty && <ActivityEmptyContent />}
179
- <GroupingActivityContent {...commonProps} />
180
- </>
181
- ) : null;
182
-
183
- case "FILL_IN_THE_BLANKS":
184
- return data.fillInTheBlanksBodyMap &&
185
- data.fillInTheBlanksMaterialMap ? (
186
- <>
187
- {isEmpty && <ActivityEmptyContent />}
188
- <FillInTheBlanksActivityContent {...commonProps} />
189
- </>
190
- ) : null;
191
-
192
- case "OPEN_ENDED":
193
- return data.openEndedBodyMap ? (
194
- <>
195
- {isEmpty && <ActivityEmptyContent />}
196
- <OpenEndedActivityContent
197
- {...commonProps}
198
- showMaterialContent={true}
199
- />
200
- </>
201
- ) : null;
202
-
203
- case "TRUE_FALSE":
204
- return data.trueFalseBodyMap && data.trueFalseMaterialMap ? (
205
- <>
206
- {isEmpty && <ActivityEmptyContent />}
207
- <TrueFalseActivityContent {...commonProps} />
208
- </>
209
- ) : null;
210
-
211
- default:
212
- return null;
213
- }
214
- };
215
-
216
- if (!data) return null;
217
-
218
- return (
219
- <div>
220
- {showType && optionList.length > 0 ? (
221
- <>
222
- <div className="mb-4">
223
- {showDescription ? (
224
- <div className="my-2">
225
- <p className="font-semibold text-lg">
226
- {i18n.t("activity_template")}
227
- </p>
228
- </div>
229
- ) : null}
230
-
231
- <SelectionBox
232
- optionList={optionList}
233
- selectedId={selectedType}
234
- handleSelectOnClick={(itemId) => {
235
- setSelectedType(itemId);
236
- }}
237
- />
238
- </div>
239
- <DividerLine />
240
- </>
241
- ) : null}
242
-
243
- <div className="flex flex-col my-2 w-full p-5">
244
- {RenderSelectedActivityContent()}
245
- </div>
246
-
247
- {selectedType && showSolution ? (
248
- <div className="my-4">
249
- <ActivitySolutionContent
250
- activityTemplateType={selectedType}
251
- data={data}
252
- />
253
- </div>
254
- ) : null}
255
-
256
- {selectedType && showEvaluationRubric ? (
257
- <div className="my-4">
258
- <ActivityEvaluationRubricContent
259
- activityTemplateType={selectedType}
260
- data={data}
261
- />
262
- </div>
263
- ) : null}
264
- </div>
265
- );
266
- };
267
-
268
- export default ActivityPreviewByAnswerData;