catchup-library-web 1.19.0 → 1.20.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.
Files changed (35) hide show
  1. package/dist/index.d.mts +4 -5
  2. package/dist/index.d.ts +4 -5
  3. package/dist/index.js +278 -327
  4. package/dist/index.mjs +298 -347
  5. package/package.json +1 -1
  6. package/src/components/activities/ActivityPreviewByAnswerData.tsx +3 -3
  7. package/src/components/activities/ActivityPreviewByData.tsx +3 -4
  8. package/src/components/activities/DropdownActivityContent.tsx +3 -9
  9. package/src/components/activities/FillInTheBlanksActivityContent.tsx +4 -10
  10. package/src/components/activities/GroupingActivityContent.tsx +3 -3
  11. package/src/components/activities/MCMAActivityContent.tsx +3 -2
  12. package/src/components/activities/MCSAActivityContent.tsx +3 -2
  13. package/src/components/activities/MatchingActivityContent.tsx +3 -3
  14. package/src/components/activities/OpenEndedActivityContent.tsx +4 -2
  15. package/src/components/activities/OrderingActivityContent.tsx +3 -2
  16. package/src/components/activities/TrueFalseActivityContent.tsx +3 -2
  17. package/src/components/activities/{body-content → body-contents}/ShowBodyMediaByContentType.tsx +1 -1
  18. package/src/components/activities/{evaluation-rubric-content → evaluation-rubric-contents}/ActivityEvaluationRubricContent.tsx +1 -1
  19. package/src/components/activities/{material-content → material-contents}/DropdownActivityMaterialContent.tsx +3 -3
  20. package/src/components/activities/{material-content → material-contents}/FillInTheBlanksActivityMaterialContent.tsx +2 -2
  21. package/src/components/activities/material-contents/GroupingActivityMaterialContent.tsx +354 -0
  22. package/src/components/activities/{material-content → material-contents}/MCMAActivityMaterialContent.tsx +2 -2
  23. package/src/components/activities/{material-content → material-contents}/MCSAActivityMaterialContent.tsx +2 -2
  24. package/src/components/activities/material-contents/MatchingActivityMaterialContent.tsx +342 -0
  25. package/src/components/activities/{material-content → material-contents}/OrderingActivityMaterialContent.tsx +9 -7
  26. package/src/components/activities/{material-content → material-contents}/ShowMaterialMediaByContentType.tsx +6 -6
  27. package/src/components/activities/{material-content → material-contents}/TrueFalseActivityMaterialContent.tsx +1 -1
  28. package/src/components/activities/{solution-content → solution-contents}/ActivitySolutionContent.tsx +1 -1
  29. package/src/index.ts +4 -4
  30. package/src/properties/ActivityProperties.ts +1 -2
  31. package/src/components/activities/material-content/GroupingActivityMaterialContent.tsx +0 -359
  32. package/src/components/activities/material-content/MatchingActivityMaterialContent.tsx +0 -332
  33. /package/src/components/activities/{body-content → body-contents}/ActivityBodyContent.tsx +0 -0
  34. /package/src/components/activities/{empty-content → empty-contents}/ActivityEmptyContent.tsx +0 -0
  35. /package/src/components/activities/{material-content → material-contents}/OpenEndedActivityMaterialContent.tsx +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catchup-library-web",
3
- "version": "1.19.00",
3
+ "version": "1.20.01",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -9,8 +9,8 @@ import OpenEndedActivityContent from "./OpenEndedActivityContent";
9
9
  import OrderingActivityContent from "./OrderingActivityContent";
10
10
  import SelectionBox from "../boxes/SelectionBox";
11
11
  import TrueFalseActivityContent from "./TrueFalseActivityContent";
12
- import ActivitySolutionContent from "./solution-content/ActivitySolutionContent";
13
- import ActivityEvaluationRubricContent from "./evaluation-rubric-content/ActivityEvaluationRubricContent";
12
+ import ActivitySolutionContent from "./solution-contents/ActivitySolutionContent";
13
+ import ActivityEvaluationRubricContent from "./evaluation-rubric-contents/ActivityEvaluationRubricContent";
14
14
  import DividerLine from "../dividers/DividerLine";
15
15
  import i18n from "../../language/i18n";
16
16
  import {
@@ -18,7 +18,7 @@ import {
18
18
  retrieveDifficultyByActivityTypeFromData,
19
19
  } from "../../utilization/CatchtivityUtilization";
20
20
  import { IActivityPreviewByAnswerDataProps } from "../../properties/ActivityProperties";
21
- import ActivityEmptyContent from "./empty-content/ActivityEmptyContent";
21
+ import ActivityEmptyContent from "./empty-contents/ActivityEmptyContent";
22
22
 
23
23
  const ActivityPreviewByAnswerData = ({
24
24
  data,
@@ -14,9 +14,9 @@ import OrderingActivityContent from "./OrderingActivityContent";
14
14
  import SelectionBox from "../boxes/SelectionBox";
15
15
  import TrueFalseActivityContent from "./TrueFalseActivityContent";
16
16
  import { IActivityPreviewByDataProps } from "../../properties/ActivityProperties";
17
- import ActivitySolutionContent from "./solution-content/ActivitySolutionContent";
17
+ import ActivitySolutionContent from "./solution-contents/ActivitySolutionContent";
18
18
  import i18n from "../../language/i18n";
19
- import ActivityEvaluationRubricContent from "./evaluation-rubric-content/ActivityEvaluationRubricContent";
19
+ import ActivityEvaluationRubricContent from "./evaluation-rubric-contents/ActivityEvaluationRubricContent";
20
20
  import DividerLine from "../dividers/DividerLine";
21
21
 
22
22
  const ActivityPreviewByData = ({
@@ -176,7 +176,6 @@ const ActivityPreviewByData = ({
176
176
  data={data}
177
177
  isPreview={true}
178
178
  showCorrectAnswer={true}
179
- isFullScreen={isFullScreen}
180
179
  />
181
180
  ) : selectedType === "GROUPING" &&
182
181
  data["groupingBodyMap"] != null &&
@@ -190,7 +189,6 @@ const ActivityPreviewByData = ({
190
189
  data={data}
191
190
  isPreview={true}
192
191
  showCorrectAnswer={true}
193
- isFullScreen={isFullScreen}
194
192
  />
195
193
  ) : selectedType === "FILL_IN_THE_BLANKS" &&
196
194
  data["fillInTheBlanksBodyMap"] != null &&
@@ -214,6 +212,7 @@ const ActivityPreviewByData = ({
214
212
  changeAnswer={() => {}}
215
213
  showMaterialContent={true}
216
214
  data={data}
215
+ isPreview={true}
217
216
  isFullScreen={isFullScreen}
218
217
  />
219
218
  ) : selectedType === "TRUE_FALSE" &&
@@ -6,8 +6,8 @@ import {
6
6
  } from "../../utilization/CatchtivityUtilization";
7
7
  import DividerLine from "../dividers/DividerLine";
8
8
  import VerticalDividerLine from "../dividers/VerticalDividerLine";
9
- import ActivityBodyContent from "./body-content/ActivityBodyContent";
10
- import DropdownActivityMaterialContent from "./material-content/DropdownActivityMaterialContent";
9
+ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
10
+ import DropdownActivityMaterialContent from "./material-contents/DropdownActivityMaterialContent";
11
11
  import { useState, useEffect } from "react";
12
12
 
13
13
  const DropdownActivityContent = ({
@@ -23,12 +23,10 @@ const DropdownActivityContent = ({
23
23
  const dropdownBodyMap = parseBodyMapFromData(data, "DROPDOWN");
24
24
  const dropdownMaterialMap = parseMaterialMapFromData(data, "DROPDOWN");
25
25
 
26
- // Add state to track current answer map and force re-renders
27
26
  const [currentAnswerMap, setCurrentAnswerMap] = useState(() => {
28
27
  return retrieveCurrentAnswerMap();
29
28
  });
30
29
 
31
- // Function to retrieve answer map
32
30
  function retrieveCurrentAnswerMap() {
33
31
  let foundIndex = answer.data.findIndex(
34
32
  (answerData: any) => answerData.type === "DROPDOWN"
@@ -36,7 +34,6 @@ const DropdownActivityContent = ({
36
34
  return answer.data[foundIndex].answerMap;
37
35
  }
38
36
 
39
- // Update local state when answer prop changes
40
37
  useEffect(() => {
41
38
  setCurrentAnswerMap(retrieveCurrentAnswerMap());
42
39
  }, [answer]);
@@ -46,7 +43,7 @@ const DropdownActivityContent = ({
46
43
  key: any,
47
44
  value: string
48
45
  ) => {
49
- // Create a new answer object to ensure React detects the change
46
+ if (isPreview) return;
50
47
  const newAnswer = {
51
48
  ...answerObj,
52
49
  data: answerObj.data.map((item: any) => {
@@ -63,11 +60,8 @@ const DropdownActivityContent = ({
63
60
  }),
64
61
  };
65
62
 
66
- // Update local state immediately for instant UI update
67
63
  const newAnswerMap = { ...currentAnswerMap, [key]: value };
68
64
  setCurrentAnswerMap(newAnswerMap);
69
-
70
- // Call the parent's changeAnswer function
71
65
  changeAnswer(newAnswer);
72
66
  };
73
67
 
@@ -3,8 +3,8 @@ import {
3
3
  parseContentMapFromData,
4
4
  parseMaterialMapFromData,
5
5
  } from "../../utilization/CatchtivityUtilization";
6
- import ActivityBodyContent from "./body-content/ActivityBodyContent";
7
- import FillInTheBlanksActivityMaterialContent from "./material-content/FillInTheBlanksActivityMaterialContent";
6
+ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
7
+ import FillInTheBlanksActivityMaterialContent from "./material-contents/FillInTheBlanksActivityMaterialContent";
8
8
  import { IFillInTheBlanksActivityProps } from "../../properties/ActivityProperties";
9
9
  import DividerLine from "../dividers/DividerLine";
10
10
  import VerticalDividerLine from "../dividers/VerticalDividerLine";
@@ -32,12 +32,10 @@ const FillInTheBlanksActivityContent = ({
32
32
  ? JSON.parse(data.fillInTheBlanksIncorrectList)
33
33
  : [];
34
34
 
35
- // Add state to track current answer map and force re-renders
36
35
  const [currentAnswerMap, setCurrentAnswerMap] = useState(() => {
37
36
  return retrieveCurrentAnswerMap();
38
37
  });
39
38
 
40
- // Function to retrieve answer map
41
39
  function retrieveCurrentAnswerMap() {
42
40
  let foundIndex = answer.data.findIndex(
43
41
  (answerData: any) => answerData.type === "FILL_IN_THE_BLANKS"
@@ -45,7 +43,6 @@ const FillInTheBlanksActivityContent = ({
45
43
  return answer.data[foundIndex].answerMap;
46
44
  }
47
45
 
48
- // Update local state when answer prop changes
49
46
  useEffect(() => {
50
47
  setCurrentAnswerMap(retrieveCurrentAnswerMap());
51
48
  }, [answer]);
@@ -74,7 +71,7 @@ const FillInTheBlanksActivityContent = ({
74
71
  key: any,
75
72
  value: string | null
76
73
  ) => {
77
- // Create a new answer object to ensure React detects the change
74
+ if (isPreview) return;
78
75
  const newAnswer = {
79
76
  ...answerObj,
80
77
  data: answerObj.data.map((item: any) => {
@@ -91,11 +88,8 @@ const FillInTheBlanksActivityContent = ({
91
88
  }),
92
89
  };
93
90
 
94
- // Update local state immediately for instant UI update
95
91
  const newAnswerMap = { ...currentAnswerMap, [key]: value };
96
92
  setCurrentAnswerMap(newAnswerMap);
97
-
98
- // Call the parent's changeAnswer function
99
93
  changeAnswer(newAnswer);
100
94
  };
101
95
 
@@ -104,7 +98,7 @@ const FillInTheBlanksActivityContent = ({
104
98
  <div className={`${isFullScreen ? "w-full" : "w-full md:w-[60%]"}`}>
105
99
  <ActivityBodyContent
106
100
  bodyMap={fillInTheBlanksBodyMap}
107
- answerMap={currentAnswerMap} // Use local state instead of function call
101
+ answerMap={currentAnswerMap}
108
102
  contentMap={contentMap}
109
103
  templateType={"FILL_IN_THE_BLANKS"}
110
104
  />
@@ -5,8 +5,8 @@ import {
5
5
  parseMaterialMapFromData,
6
6
  } from "../../utilization/CatchtivityUtilization";
7
7
  import DividerLine from "../dividers/DividerLine";
8
- import ActivityBodyContent from "./body-content/ActivityBodyContent";
9
- import GroupingActivityMaterialContent from "./material-content/GroupingActivityMaterialContent";
8
+ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
9
+ import GroupingActivityMaterialContent from "./material-contents/GroupingActivityMaterialContent";
10
10
 
11
11
  const GroupingActivityContent = ({
12
12
  answer,
@@ -15,7 +15,6 @@ const GroupingActivityContent = ({
15
15
  changeAnswer,
16
16
  isPreview,
17
17
  showCorrectAnswer,
18
- isFullScreen,
19
18
  }: IGroupingActivityProps) => {
20
19
  const contentMap = parseContentMapFromData(data);
21
20
  const groupingBodyMap = parseBodyMapFromData(data, "GROUPING");
@@ -27,6 +26,7 @@ const GroupingActivityContent = ({
27
26
  value: string | null,
28
27
  index: number | null
29
28
  ) => {
29
+ if (isPreview) return;
30
30
  let foundIndex = answer.data.findIndex(
31
31
  (answerData: any) => answerData.type === "GROUPING"
32
32
  );
@@ -3,8 +3,8 @@ import {
3
3
  parseContentMapFromData,
4
4
  parseMaterialMapFromData,
5
5
  } from "../../utilization/CatchtivityUtilization";
6
- import ActivityBodyContent from "./body-content/ActivityBodyContent";
7
- import MCMAActivityMaterialContent from "./material-content/MCMAActivityMaterialContent";
6
+ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
7
+ import MCMAActivityMaterialContent from "./material-contents/MCMAActivityMaterialContent";
8
8
  import { IMCMAActivityProps } from "../../properties/ActivityProperties";
9
9
  import DividerLine from "../dividers/DividerLine";
10
10
  import VerticalDividerLine from "../dividers/VerticalDividerLine";
@@ -22,6 +22,7 @@ const MCMAActivityContent = ({
22
22
  const MCMAMaterialMap = parseMaterialMapFromData(data, "MCMA");
23
23
 
24
24
  const handleMCMAAnswerOnChange = (answer: any, key: any, value: string) => {
25
+ if (isPreview) return;
25
26
  let foundIndex = answer.data.findIndex(
26
27
  (answerData: any) => answerData.type === "MCMA"
27
28
  );
@@ -3,8 +3,8 @@ import {
3
3
  parseContentMapFromData,
4
4
  parseMaterialMapFromData,
5
5
  } from "../../utilization/CatchtivityUtilization";
6
- import ActivityBodyContent from "./body-content/ActivityBodyContent";
7
- import MCSAActivityMaterialContent from "./material-content/MCSAActivityMaterialContent";
6
+ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
7
+ import MCSAActivityMaterialContent from "./material-contents/MCSAActivityMaterialContent";
8
8
  import { IMCSAActivityProps } from "../../properties/ActivityProperties";
9
9
  import DividerLine from "../dividers/DividerLine";
10
10
  import VerticalDividerLine from "../dividers/VerticalDividerLine";
@@ -22,6 +22,7 @@ const MCSAActivityContent = ({
22
22
  const MCSAMaterialMap = parseMaterialMapFromData(data, "MCSA");
23
23
 
24
24
  const handleMCSAAnswerOnChange = (answer: any, key: any, value: string) => {
25
+ if (isPreview) return;
25
26
  let foundIndex = answer.data.findIndex(
26
27
  (answerData: any) => answerData.type === "MCSA"
27
28
  );
@@ -5,8 +5,8 @@ import {
5
5
  parseMaterialMapFromData,
6
6
  } from "../../utilization/CatchtivityUtilization";
7
7
  import DividerLine from "../dividers/DividerLine";
8
- import ActivityBodyContent from "./body-content/ActivityBodyContent";
9
- import MatchingActivityMaterialContent from "./material-content/MatchingActivityMaterialContent";
8
+ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
9
+ import MatchingActivityMaterialContent from "./material-contents/MatchingActivityMaterialContent";
10
10
 
11
11
  const MatchingActivityContent = ({
12
12
  answer,
@@ -15,7 +15,6 @@ const MatchingActivityContent = ({
15
15
  changeAnswer,
16
16
  isPreview,
17
17
  showCorrectAnswer,
18
- isFullScreen,
19
18
  }: IMatchingActivityProps) => {
20
19
  const contentMap = parseContentMapFromData(data);
21
20
  const matchingBodyMap = parseBodyMapFromData(data, "MATCHING");
@@ -26,6 +25,7 @@ const MatchingActivityContent = ({
26
25
  key: any,
27
26
  value: string | null
28
27
  ) => {
28
+ if (isPreview) return;
29
29
  let foundIndex = answer.data.findIndex(
30
30
  (answerData: any) => answerData.type === "MATCHING"
31
31
  );
@@ -2,8 +2,8 @@ import {
2
2
  parseBodyMapFromData,
3
3
  parseContentMapFromData,
4
4
  } from "../../utilization/CatchtivityUtilization";
5
- import ActivityBodyContent from "./body-content/ActivityBodyContent";
6
- import OpenEndedActivityMaterialContent from "./material-content/OpenEndedActivityMaterialContent";
5
+ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
6
+ import OpenEndedActivityMaterialContent from "./material-contents/OpenEndedActivityMaterialContent";
7
7
  import { IOpenEndedActivityProps } from "../../properties/ActivityProperties";
8
8
  import DividerLine from "../dividers/DividerLine";
9
9
  import VerticalDividerLine from "../dividers/VerticalDividerLine";
@@ -14,12 +14,14 @@ const OpenEndedActivityContent = ({
14
14
  changeAnswer,
15
15
  canAnswerQuestion,
16
16
  showMaterialContent,
17
+ isPreview,
17
18
  isFullScreen,
18
19
  }: IOpenEndedActivityProps) => {
19
20
  const contentMap = parseContentMapFromData(data);
20
21
  const openEndedBodyMap = parseBodyMapFromData(data, "OPEN_ENDED");
21
22
 
22
23
  const handleOpenEndedAnswerOnChange = (answer: any, value: string) => {
24
+ if (isPreview) return;
23
25
  let foundIndex = answer.data.findIndex(
24
26
  (answerData: any) => answerData.type === "OPEN_ENDED"
25
27
  );
@@ -5,8 +5,8 @@ import {
5
5
  parseMaterialMapFromData,
6
6
  } from "../../utilization/CatchtivityUtilization";
7
7
  import DividerLine from "../dividers/DividerLine";
8
- import ActivityBodyContent from "./body-content/ActivityBodyContent";
9
- import OrderingActivityMaterialContent from "./material-content/OrderingActivityMaterialContent";
8
+ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
9
+ import OrderingActivityMaterialContent from "./material-contents/OrderingActivityMaterialContent";
10
10
 
11
11
  const OrderingActivityContent = ({
12
12
  answer,
@@ -26,6 +26,7 @@ const OrderingActivityContent = ({
26
26
  primaryKey: any,
27
27
  secondaryKey: any
28
28
  ) => {
29
+ if (isPreview) return;
29
30
  let foundIndex = answer.data.findIndex(
30
31
  (answerData: any) => answerData.type === "ORDERING"
31
32
  );
@@ -3,8 +3,8 @@ import {
3
3
  parseContentMapFromData,
4
4
  parseMaterialMapFromData,
5
5
  } from "../../utilization/CatchtivityUtilization";
6
- import ActivityBodyContent from "./body-content/ActivityBodyContent";
7
- import TrueFalseActivityMaterialContent from "./material-content/TrueFalseActivityMaterialContent";
6
+ import ActivityBodyContent from "./body-contents/ActivityBodyContent";
7
+ import TrueFalseActivityMaterialContent from "./material-contents/TrueFalseActivityMaterialContent";
8
8
  import { ITrueFalseActivityProps } from "../../properties/ActivityProperties";
9
9
  import DividerLine from "../dividers/DividerLine";
10
10
  import VerticalDividerLine from "../dividers/VerticalDividerLine";
@@ -34,6 +34,7 @@ const TrueFalseActivityContent = ({
34
34
  key: any,
35
35
  value: string
36
36
  ) => {
37
+ if (isPreview) return;
37
38
  const answerMap = retrieveCurrentAnswerMap();
38
39
  if (key === "TRUE") {
39
40
  const foundFalseIndex = answerMap.falseList.findIndex(
@@ -44,7 +44,7 @@ const ShowBodyMediaByContentType = ({
44
44
  }`}
45
45
  >
46
46
  {inputPart.isEquation ? (
47
- <span className="text-2xl">
47
+ <span className="text-xl">
48
48
  <InlineMath math={inputPart.value} />
49
49
  </span>
50
50
  ) : (
@@ -57,7 +57,7 @@ const ActivityEvaluationRubricContent = ({
57
57
  }`}
58
58
  >
59
59
  {inputPart.isEquation ? (
60
- <span className="text-2xl">
60
+ <span className="text-xl">
61
61
  <InlineMath math={inputPart.value} />
62
62
  </span>
63
63
  ) : (
@@ -110,7 +110,7 @@ const DropdownActivityMaterialContent = ({
110
110
  }`}
111
111
  >
112
112
  {inputPart.isEquation ? (
113
- <span className="text-2xl">
113
+ <span className="text-xl">
114
114
  <InlineMath
115
115
  math={inputPart.value}
116
116
  />
@@ -134,7 +134,7 @@ const DropdownActivityMaterialContent = ({
134
134
  id={materialKey}
135
135
  answer={
136
136
  answerMap[materialKey] === "DEFAULT_OPTION" ? (
137
- <div className="w-catchup-activity-box-item border h-catchup-activity-box-item rounded-catchup-xlarge border-dashed border-catchup-blue">
137
+ <div className="w-catchup-activity-media-box-item h-catchup-activity-media-box-item border rounded-catchup-xlarge border-dashed border-catchup-blue">
138
138
  <div className="h-full flex flex-col items-center justify-center px-4 py-2">
139
139
  <span className="italic">
140
140
  {i18n.t("please_select")}
@@ -186,7 +186,7 @@ const DropdownActivityMaterialContent = ({
186
186
  } ${inputPart.isUnderline ? "underline" : ""}`}
187
187
  >
188
188
  {inputPart.isEquation ? (
189
- <span className="text-2xl">
189
+ <span className="text-xl">
190
190
  <InlineMath math={inputPart.value} />
191
191
  </span>
192
192
  ) : (
@@ -204,7 +204,7 @@ const FillInTheBlanksActivityMaterialContent = ({
204
204
  </div>
205
205
  ) : answerMap[materialKey] === "" ? (
206
206
  <div
207
- className={`w-catchup-activity-box-item border h-catchup-activity-box-item rounded-catchup-xlarge border-dashed ${
207
+ className={`w-catchup-activity-media-box-item h-catchup-activity-media-box-item border rounded-catchup-xlarge border-dashed ${
208
208
  learnerAnswerState === "CORRECT"
209
209
  ? "border-catchup-green"
210
210
  : learnerAnswerState === "INCORRECT"
@@ -245,7 +245,7 @@ const FillInTheBlanksActivityMaterialContent = ({
245
245
  } ${inputPart.isUnderline ? "underline" : ""}`}
246
246
  >
247
247
  {inputPart.isEquation ? (
248
- <span className="text-2xl">
248
+ <span className="text-xl">
249
249
  <InlineMath math={inputPart.value} />
250
250
  </span>
251
251
  ) : (