catchup-library-web 2.0.7 → 2.0.9

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 (27) hide show
  1. package/dist/index.d.mts +26 -27
  2. package/dist/index.d.ts +26 -27
  3. package/dist/index.js +287 -527
  4. package/dist/index.mjs +287 -526
  5. package/package.json +1 -1
  6. package/src/components/activities/ActivityPreviewByAnswerData.tsx +118 -121
  7. package/src/components/activities/ActivityPreviewByData.tsx +10 -10
  8. package/src/components/activities/DropdownActivityContent.tsx +9 -35
  9. package/src/components/activities/FillInTheBlanksActivityContent.tsx +9 -34
  10. package/src/components/activities/GroupingActivityContent.tsx +4 -8
  11. package/src/components/activities/MCMAActivityContent.tsx +8 -8
  12. package/src/components/activities/MCSAActivityContent.tsx +8 -8
  13. package/src/components/activities/MatchingActivityContent.tsx +4 -8
  14. package/src/components/activities/OpenEndedActivityContent.tsx +4 -8
  15. package/src/components/activities/OrderingActivityContent.tsx +4 -8
  16. package/src/components/activities/TrueFalseActivityContent.tsx +4 -12
  17. package/src/components/activities/material-contents/DropdownActivityMaterialContent.tsx +9 -19
  18. package/src/components/activities/material-contents/FillInTheBlanksActivityMaterialContent.tsx +9 -24
  19. package/src/components/activities/material-contents/GroupingActivityMaterialContent.tsx +7 -18
  20. package/src/components/activities/material-contents/MCMAActivityMaterialContent.tsx +2 -10
  21. package/src/components/activities/material-contents/MCSAActivityMaterialContent.tsx +2 -10
  22. package/src/components/activities/material-contents/MatchingActivityMaterialContent.tsx +7 -17
  23. package/src/components/activities/material-contents/OpenEndedActivityMaterialContent.tsx +2 -21
  24. package/src/components/activities/material-contents/OrderingActivityMaterialContent.tsx +4 -16
  25. package/src/components/activities/material-contents/TrueFalseActivityMaterialContent.tsx +4 -27
  26. package/src/properties/ActivityProperties.ts +21 -20
  27. package/src/utilization/CatchtivityUtilization.ts +55 -147
package/dist/index.mjs CHANGED
@@ -2127,45 +2127,29 @@ var retrieveDefaultOpenEndedMap = () => {
2127
2127
  var retrieveDefaultTrueFalseMap = () => {
2128
2128
  return { trueList: [], falseList: [] };
2129
2129
  };
2130
- var retrieveCurrentDefaultDataMap = (activityTemplate, activityData) => {
2131
- const defaultDataMap = {
2132
- activityTemplateId: activityTemplate.id,
2133
- type: activityTemplate.type
2134
- };
2135
- if (activityTemplate.type === "ORDERING") {
2136
- defaultDataMap.answerMap = retrieveDefaultOrderingDataMap(
2137
- activityData.orderingMaterialMap
2138
- );
2139
- } else if (activityTemplate.type === "DROPDOWN") {
2140
- defaultDataMap.answerMap = retrieveDefaultDropdownMap(
2141
- activityData.dropdownMaterialMap
2142
- );
2143
- } else if (activityTemplate.type === "MCSA") {
2144
- defaultDataMap.answerMap = retrieveDefaultMCSAMap(
2145
- activityData.MCSAMaterialMap
2146
- );
2147
- } else if (activityTemplate.type === "MCMA") {
2148
- defaultDataMap.answerMap = retrieveDefaultMCMAMap(
2149
- activityData.MCMAMaterialMap
2150
- );
2151
- } else if (activityTemplate.type === "MATCHING") {
2152
- defaultDataMap.answerMap = retrieveDefaultMatchingMap(
2153
- activityData.matchingMaterialMap
2154
- );
2155
- } else if (activityTemplate.type === "GROUPING") {
2156
- defaultDataMap.answerMap = retrieveDefaultGroupingMap(
2157
- activityData.groupingMaterialMap
2158
- );
2159
- } else if (activityTemplate.type === "FILL_IN_THE_BLANKS") {
2160
- defaultDataMap.answerMap = retrieveDefaultFillInTheBlanksMap(
2130
+ var retrieveCurrentDefaultDataMap = (activityTemplateType, activityData) => {
2131
+ if (activityTemplateType === "ORDERING") {
2132
+ return retrieveDefaultOrderingDataMap(activityData.orderingMaterialMap);
2133
+ } else if (activityTemplateType === "DROPDOWN") {
2134
+ return retrieveDefaultDropdownMap(activityData.dropdownMaterialMap);
2135
+ } else if (activityTemplateType === "MCSA") {
2136
+ return retrieveDefaultMCSAMap(activityData.MCSAMaterialMap);
2137
+ } else if (activityTemplateType === "MCMA") {
2138
+ return retrieveDefaultMCMAMap(activityData.MCMAMaterialMap);
2139
+ } else if (activityTemplateType === "MATCHING") {
2140
+ return retrieveDefaultMatchingMap(activityData.matchingMaterialMap);
2141
+ } else if (activityTemplateType === "GROUPING") {
2142
+ return retrieveDefaultGroupingMap(activityData.groupingMaterialMap);
2143
+ } else if (activityTemplateType === "FILL_IN_THE_BLANKS") {
2144
+ return retrieveDefaultFillInTheBlanksMap(
2161
2145
  activityData.fillInTheBlanksMaterialMap
2162
2146
  );
2163
- } else if (activityTemplate.type === "OPEN_ENDED") {
2164
- defaultDataMap.answerMap = retrieveDefaultOpenEndedMap();
2165
- } else if (activityTemplate.type === "TRUE_FALSE") {
2166
- defaultDataMap.answerMap = retrieveDefaultTrueFalseMap();
2147
+ } else if (activityTemplateType === "OPEN_ENDED") {
2148
+ return retrieveDefaultOpenEndedMap();
2149
+ } else if (activityTemplateType === "TRUE_FALSE") {
2150
+ return retrieveDefaultTrueFalseMap();
2167
2151
  }
2168
- return defaultDataMap;
2152
+ return {};
2169
2153
  };
2170
2154
  var constructActivityAnswerMap = (activityTemplate, activityData) => {
2171
2155
  if (activityTemplate.type === "ORDERING") {
@@ -2197,63 +2181,11 @@ var constructActivityAnswerMap = (activityTemplate, activityData) => {
2197
2181
  } else if (activityTemplate.type === "TRUE_FALSE") {
2198
2182
  activityData.trueFalseMaterialMap = { trueList: [], falseList: [] };
2199
2183
  }
2200
- return retrieveCurrentDefaultDataMap(activityTemplate, activityData);
2184
+ return retrieveCurrentDefaultDataMap(activityTemplate.type, activityData);
2201
2185
  };
2202
2186
  var ignoreMathematicalExpression = (inputText) => {
2203
2187
  return inputText.replaceAll("{", "").replaceAll("}", "").replaceAll("_", "").replaceAll("^", "").replaceAll("\\frac", "").replaceAll("\\text", "").replaceAll("\\sqrt", "");
2204
2188
  };
2205
- var checkIfAnswerIsEmpty = (answer) => {
2206
- const { data } = answer;
2207
- if (data && data.length > 0) {
2208
- const foundAnswer = data[0];
2209
- const { type, answerMap } = foundAnswer;
2210
- if (type === "ORDERING") {
2211
- return false;
2212
- } else if (type === "DROPDOWN") {
2213
- for (const key of Object.keys(answerMap)) {
2214
- if (answerMap[key] !== "DEFAULT_OPTION") {
2215
- return false;
2216
- }
2217
- }
2218
- } else if (type === "MCSA") {
2219
- const key = Object.keys(answerMap)[0];
2220
- if (answerMap[key] !== "ANSWER_KEY") {
2221
- return false;
2222
- }
2223
- } else if (type === "MCMA") {
2224
- const key = Object.keys(answerMap)[0];
2225
- if (answerMap[key].length !== 0) {
2226
- return false;
2227
- }
2228
- } else if (type === "MATCHING") {
2229
- for (const key of Object.keys(answerMap)) {
2230
- if (answerMap[key]) {
2231
- return false;
2232
- }
2233
- }
2234
- } else if (type === "GROUPING") {
2235
- for (const key of Object.keys(answerMap)) {
2236
- if (answerMap[key].length !== 0) {
2237
- return false;
2238
- }
2239
- }
2240
- } else if (type === "FILL_IN_THE_BLANKS") {
2241
- for (const key of Object.keys(answerMap)) {
2242
- if (answerMap[key]) {
2243
- return false;
2244
- }
2245
- }
2246
- } else if (type === "OPEN_ENDED") {
2247
- const key = Object.keys(answerMap)[0];
2248
- if (answerMap[key]) {
2249
- return false;
2250
- }
2251
- } else if (type === "TRUE_FALSE") {
2252
- return answerMap.trueList.length === 0 && answerMap.falseList.length === 0;
2253
- }
2254
- }
2255
- return true;
2256
- };
2257
2189
  var constructActivityAnswerStateList = (answerList, activityList) => {
2258
2190
  const stateList = [];
2259
2191
  activityList.forEach((activity, index) => {
@@ -2267,7 +2199,7 @@ var constructActivityAnswerStateList = (answerList, activityList) => {
2267
2199
  };
2268
2200
  var retrieveActivityAnswerFromAnswerList = (answerList, activity) => {
2269
2201
  return answerList.find(
2270
- (answer) => parseFloat(answer.activityDTO.id) === parseFloat(activity.id)
2202
+ (answer) => parseFloat(answer.activityId) === parseFloat(activity.id)
2271
2203
  );
2272
2204
  };
2273
2205
  var checkActivityAnswerState = (answerList, activity) => {
@@ -2449,7 +2381,7 @@ var retrieveClockTimeLeft = (type, value, durationType, durationInMinutes, activ
2449
2381
  var retrieveEachTimeSpentInSeconds = (activityProgressList, activity) => {
2450
2382
  if (!activityProgressList || !activity) return 0;
2451
2383
  const foundActivityProgress = activityProgressList.find(
2452
- (activityProgress) => parseFloat(activityProgress.activityDTO.id) === parseFloat(activity.id)
2384
+ (activityProgress) => parseFloat(activityProgress.activityId) === parseFloat(activity.id)
2453
2385
  );
2454
2386
  if (foundActivityProgress) {
2455
2387
  return foundActivityProgress.timeSpent / 1e3;
@@ -2819,82 +2751,63 @@ var constructActivityData = (activityTemplateType, contentMap, bodyMap, material
2819
2751
  return constructedData;
2820
2752
  };
2821
2753
  var constructAnswerBasedOnData = (data) => {
2822
- const answer = { data: [] };
2823
2754
  if (Object.keys(data).find((dataKey) => dataKey === "orderingMaterialMap")) {
2824
- answer.data.push(
2825
- constructActivityAnswerMap(
2826
- { type: "ORDERING" },
2827
- JSON.parse(JSON.stringify(data))
2828
- )
2755
+ return constructActivityAnswerMap(
2756
+ { type: "ORDERING" },
2757
+ JSON.parse(JSON.stringify(data))
2829
2758
  );
2830
2759
  }
2831
2760
  if (Object.keys(data).find((dataKey) => dataKey === "dropdownMaterialMap")) {
2832
- answer.data.push(
2833
- constructActivityAnswerMap(
2834
- { type: "DROPDOWN" },
2835
- JSON.parse(JSON.stringify(data))
2836
- )
2761
+ return constructActivityAnswerMap(
2762
+ { type: "DROPDOWN" },
2763
+ JSON.parse(JSON.stringify(data))
2837
2764
  );
2838
2765
  }
2839
2766
  if (Object.keys(data).find((dataKey) => dataKey === "MCSAMaterialMap")) {
2840
- answer.data.push(
2841
- constructActivityAnswerMap(
2842
- { type: "MCSA" },
2843
- JSON.parse(JSON.stringify(data))
2844
- )
2767
+ return constructActivityAnswerMap(
2768
+ { type: "MCSA" },
2769
+ JSON.parse(JSON.stringify(data))
2845
2770
  );
2846
2771
  }
2847
2772
  if (Object.keys(data).find((dataKey) => dataKey === "MCMAMaterialMap")) {
2848
- answer.data.push(
2849
- constructActivityAnswerMap(
2850
- { type: "MCMA" },
2851
- JSON.parse(JSON.stringify(data))
2852
- )
2773
+ return constructActivityAnswerMap(
2774
+ { type: "MCMA" },
2775
+ JSON.parse(JSON.stringify(data))
2853
2776
  );
2854
2777
  }
2855
2778
  if (Object.keys(data).find((dataKey) => dataKey === "matchingMaterialMap")) {
2856
- answer.data.push(
2857
- constructActivityAnswerMap(
2858
- { type: "MATCHING" },
2859
- JSON.parse(JSON.stringify(data))
2860
- )
2779
+ return constructActivityAnswerMap(
2780
+ { type: "MATCHING" },
2781
+ JSON.parse(JSON.stringify(data))
2861
2782
  );
2862
2783
  }
2863
2784
  if (Object.keys(data).find((dataKey) => dataKey === "groupingMaterialMap")) {
2864
- answer.data.push(
2865
- constructActivityAnswerMap(
2866
- { type: "GROUPING" },
2867
- JSON.parse(JSON.stringify(data))
2868
- )
2785
+ return constructActivityAnswerMap(
2786
+ { type: "GROUPING" },
2787
+ JSON.parse(JSON.stringify(data))
2869
2788
  );
2870
2789
  }
2871
2790
  if (Object.keys(data).find(
2872
2791
  (dataKey) => dataKey === "fillInTheBlanksMaterialMap"
2873
2792
  )) {
2874
- answer.data.push(
2875
- constructActivityAnswerMap(
2876
- { type: "FILL_IN_THE_BLANKS" },
2877
- JSON.parse(JSON.stringify(data))
2878
- )
2793
+ return constructActivityAnswerMap(
2794
+ { type: "FILL_IN_THE_BLANKS" },
2795
+ JSON.parse(JSON.stringify(data))
2879
2796
  );
2880
2797
  }
2881
2798
  if (Object.keys(data).find((dataKey) => dataKey === "openEndedMaterialMap")) {
2882
- answer.data.push(
2883
- constructActivityAnswerMap(
2884
- { type: "OPEN_ENDED" },
2885
- JSON.parse(JSON.stringify(data))
2886
- )
2799
+ return constructActivityAnswerMap(
2800
+ { type: "OPEN_ENDED" },
2801
+ JSON.parse(JSON.stringify(data))
2887
2802
  );
2888
2803
  }
2889
2804
  if (Object.keys(data).find((dataKey) => dataKey === "trueFalseMaterialMap")) {
2890
- answer.data.push(
2891
- constructActivityAnswerMap(
2892
- { type: "TRUE_FALSE" },
2893
- JSON.parse(JSON.stringify(data))
2894
- )
2805
+ return constructActivityAnswerMap(
2806
+ { type: "TRUE_FALSE" },
2807
+ JSON.parse(JSON.stringify(data))
2895
2808
  );
2896
2809
  }
2897
- return answer;
2810
+ return {};
2898
2811
  };
2899
2812
  var constructActivityItemListBodyOnly = (bodyMap) => {
2900
2813
  const itemList = [];
@@ -4445,7 +4358,7 @@ var ShowMaterialMediaByContentType_default = ShowMaterialMediaByContentType;
4445
4358
  import { jsx as jsx25, jsxs as jsxs15 } from "react/jsx-runtime";
4446
4359
  var DropdownActivityMaterialContent = ({
4447
4360
  uniqueValue,
4448
- answer,
4361
+ answerMap,
4449
4362
  materialMap,
4450
4363
  contentMap,
4451
4364
  checkCanAnswerQuestion,
@@ -4456,27 +4369,16 @@ var DropdownActivityMaterialContent = ({
4456
4369
  const [updated, setUpdated] = useState15(false);
4457
4370
  useEffect6(() => {
4458
4371
  if (!showCorrectAnswer) return;
4459
- const foundAnswer = answer.data.find(
4460
- (answerData) => answerData.type === "DROPDOWN"
4461
- );
4462
- if (foundAnswer.answerMap.length === 0) return;
4463
- if (Object.keys(materialMap).length === 0) return;
4464
- foundAnswer.answerMap = Object.keys(materialMap).map(
4372
+ answerMap = Object.keys(materialMap).map(
4465
4373
  (materialMapKey, index) => Object.keys(materialMap[materialMapKey])[0]
4466
4374
  );
4467
- onChange(answer, 0, Object.keys(materialMap[0])[0]);
4375
+ onChange(answerMap, 0, Object.keys(materialMap[0])[0]);
4468
4376
  setUpdated(true);
4469
4377
  }, [showCorrectAnswer]);
4470
4378
  useEffect6(() => {
4471
4379
  if (!updated) return;
4472
4380
  setUpdated(false);
4473
4381
  }, [updated]);
4474
- const retrieveAnswerMap = () => {
4475
- const foundIndex = answer.data.findIndex(
4476
- (answerData) => answerData.type === "DROPDOWN"
4477
- );
4478
- return answer.data[foundIndex].answerMap;
4479
- };
4480
4382
  const checkAnswerState = (correctAnswer, learnerAnswer) => {
4481
4383
  if (!isPreview) return null;
4482
4384
  if (correctAnswer === learnerAnswer) {
@@ -4484,7 +4386,6 @@ var DropdownActivityMaterialContent = ({
4484
4386
  }
4485
4387
  return "INCORRECT";
4486
4388
  };
4487
- const answerMap = retrieveAnswerMap();
4488
4389
  return /* @__PURE__ */ jsxs15("div", { className: "flex flex-row flex-wrap items-center", children: [
4489
4390
  /* @__PURE__ */ jsx25("div", { className: "hidden md:block", children: /* @__PURE__ */ jsx25("span", { className: "font-semibold text-xl opacity-60", children: i18n_default.t("please_select_dropdown_text") }) }),
4490
4391
  /* @__PURE__ */ jsx25("div", { className: "hidden md:contents", children: /* @__PURE__ */ jsx25(DividerLine_default, {}) }),
@@ -4526,7 +4427,11 @@ var DropdownActivityMaterialContent = ({
4526
4427
  value: materialOption
4527
4428
  })),
4528
4429
  onChange: (e) => {
4529
- onChange(answer, materialKey, e.target.value);
4430
+ onChange(
4431
+ answerMap,
4432
+ materialKey,
4433
+ e.target.value
4434
+ );
4530
4435
  }
4531
4436
  }
4532
4437
  ) }) : /* @__PURE__ */ jsx25(
@@ -4556,7 +4461,7 @@ var DropdownActivityMaterialContent = ({
4556
4461
  ) }, index2),
4557
4462
  onClick: (e) => {
4558
4463
  onChange(
4559
- answer,
4464
+ answerMap,
4560
4465
  materialKey,
4561
4466
  e.target.currentSrc
4562
4467
  );
@@ -4600,7 +4505,7 @@ var DropdownActivityMaterialContent_default = DropdownActivityMaterialContent;
4600
4505
  import { useState as useState16, useEffect as useEffect7 } from "react";
4601
4506
  import { jsx as jsx26, jsxs as jsxs16 } from "react/jsx-runtime";
4602
4507
  var DropdownActivityContent = ({
4603
- answer,
4508
+ answerMap,
4604
4509
  data,
4605
4510
  canAnswerQuestion,
4606
4511
  changeAnswer,
@@ -4611,35 +4516,15 @@ var DropdownActivityContent = ({
4611
4516
  const contentMap = parseContentMapFromData(data);
4612
4517
  const dropdownBodyMap = parseBodyMapFromData(data, "DROPDOWN");
4613
4518
  const dropdownMaterialMap = parseMaterialMapFromData(data, "DROPDOWN");
4614
- const [currentAnswerMap, setCurrentAnswerMap] = useState16(() => {
4615
- return retrieveCurrentAnswerMap();
4616
- });
4617
- function retrieveCurrentAnswerMap() {
4618
- let foundIndex = answer.data.findIndex(
4619
- (answerData) => answerData.type === "DROPDOWN"
4620
- );
4621
- return answer.data[foundIndex].answerMap;
4622
- }
4519
+ const [currentAnswerMap, setCurrentAnswerMap] = useState16(answerMap);
4623
4520
  useEffect7(() => {
4624
- setCurrentAnswerMap(retrieveCurrentAnswerMap());
4625
- }, [answer]);
4626
- const handleDropdownAnswerOnChange = (answerObj, key, value) => {
4521
+ setCurrentAnswerMap(answerMap);
4522
+ }, [answerMap]);
4523
+ const handleDropdownAnswerOnChange = (answerMap2, key, value) => {
4627
4524
  if (isPreview) return;
4628
- const newAnswer = __spreadProps(__spreadValues({}, answerObj), {
4629
- data: answerObj.data.map((item) => {
4630
- if (item.type === "DROPDOWN") {
4631
- return __spreadProps(__spreadValues({}, item), {
4632
- answerMap: __spreadProps(__spreadValues({}, item.answerMap), {
4633
- [key]: value
4634
- })
4635
- });
4636
- }
4637
- return item;
4638
- })
4639
- });
4640
- const newAnswerMap = __spreadProps(__spreadValues({}, currentAnswerMap), { [key]: value });
4641
- setCurrentAnswerMap(newAnswerMap);
4642
- changeAnswer(newAnswer);
4525
+ answerMap2 = __spreadProps(__spreadValues({}, currentAnswerMap), { [key]: value });
4526
+ setCurrentAnswerMap(answerMap2);
4527
+ changeAnswer(answerMap2);
4643
4528
  };
4644
4529
  return /* @__PURE__ */ jsxs16("div", { className: "flex flex-row flex-wrap", children: [
4645
4530
  /* @__PURE__ */ jsx26("div", { className: `${isFullScreen ? "w-full" : "w-full md:w-[60%]"}`, children: /* @__PURE__ */ jsx26(
@@ -4657,7 +4542,7 @@ var DropdownActivityContent = ({
4657
4542
  DropdownActivityMaterialContent_default,
4658
4543
  {
4659
4544
  uniqueValue: JSON.stringify(data.contentMap),
4660
- answer,
4545
+ answerMap,
4661
4546
  materialMap: dropdownMaterialMap,
4662
4547
  contentMap,
4663
4548
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -4702,7 +4587,7 @@ var InputWithSpecialExpression_default = InputWithSpecialExpression;
4702
4587
  import { jsx as jsx28, jsxs as jsxs17 } from "react/jsx-runtime";
4703
4588
  var FillInTheBlanksActivityMaterialContent = ({
4704
4589
  uniqueValue,
4705
- answer,
4590
+ answerMap,
4706
4591
  optionList,
4707
4592
  materialMap,
4708
4593
  contentMap,
@@ -4732,22 +4617,11 @@ var FillInTheBlanksActivityMaterialContent = ({
4732
4617
  }, [optionList]);
4733
4618
  useEffect8(() => {
4734
4619
  if (!showCorrectAnswer) return;
4735
- const foundAnswer = answer.data.find(
4736
- (answerData) => answerData.type === "FILL_IN_THE_BLANKS"
4737
- );
4738
- if (!foundAnswer || foundAnswer.answerMap.length === 0) return;
4739
- if (Object.keys(materialMap).length === 0) return;
4740
- foundAnswer.answerMap = Object.keys(materialMap).map(
4620
+ answerMap = Object.keys(materialMap).map(
4741
4621
  (materialMapKey) => JSON.parse(materialMap[materialMapKey])[0]
4742
4622
  );
4743
- onChange(answer, 0, JSON.parse(materialMap[0])[0]);
4744
- }, [showCorrectAnswer, answer, materialMap, onChange]);
4745
- const retrieveAnswerMap = () => {
4746
- const foundIndex = answer.data.findIndex(
4747
- (answerData) => answerData.type === "FILL_IN_THE_BLANKS"
4748
- );
4749
- return answer.data[foundIndex].answerMap;
4750
- };
4623
+ onChange(answerMap, 0, JSON.parse(materialMap[0])[0]);
4624
+ }, [showCorrectAnswer]);
4751
4625
  const checkAnswerState = (correctAnswerList, learnerAnswer) => {
4752
4626
  if (!isPreview) return null;
4753
4627
  const foundIndex = correctAnswerList.findIndex(
@@ -4781,7 +4655,7 @@ var FillInTheBlanksActivityMaterialContent = ({
4781
4655
  };
4782
4656
  const handleMouseUp = () => {
4783
4657
  if (dropTargetIndex !== null && draggedOption !== null) {
4784
- onChange(answer, dropTargetIndex, draggedOption);
4658
+ onChange(answerMap, dropTargetIndex, draggedOption);
4785
4659
  }
4786
4660
  setDraggedOption(null);
4787
4661
  setDropTargetIndex(null);
@@ -4812,7 +4686,7 @@ var FillInTheBlanksActivityMaterialContent = ({
4812
4686
  };
4813
4687
  const handleTouchEnd = () => {
4814
4688
  if (dropTargetIndex !== null && draggedOption !== null) {
4815
- onChange(answer, dropTargetIndex, draggedOption);
4689
+ onChange(answerMap, dropTargetIndex, draggedOption);
4816
4690
  }
4817
4691
  setDraggedOption(null);
4818
4692
  setDropTargetIndex(null);
@@ -4825,11 +4699,10 @@ var FillInTheBlanksActivityMaterialContent = ({
4825
4699
  };
4826
4700
  const handleDropZoneClick = (index) => {
4827
4701
  if (selectedOption !== null) {
4828
- onChange(answer, index, selectedOption);
4702
+ onChange(answerMap, index, selectedOption);
4829
4703
  setSelectedOption(null);
4830
4704
  }
4831
4705
  };
4832
- const answerMap = retrieveAnswerMap();
4833
4706
  return /* @__PURE__ */ jsxs17(
4834
4707
  "div",
4835
4708
  {
@@ -4968,7 +4841,7 @@ var FillInTheBlanksActivityMaterialContent = ({
4968
4841
  onClick: (e) => {
4969
4842
  if (answerMap[materialKey]) {
4970
4843
  e.stopPropagation();
4971
- onChange(answer, materialKey, "");
4844
+ onChange(answerMap, materialKey, "");
4972
4845
  }
4973
4846
  },
4974
4847
  children: answerMap[materialKey] ? /* @__PURE__ */ jsx28(
@@ -5007,7 +4880,7 @@ var FillInTheBlanksActivityMaterialContent = ({
5007
4880
  className: "flex-1 cursor-pointer",
5008
4881
  onClick: (e) => {
5009
4882
  e.stopPropagation();
5010
- onChange(answer, materialKey, "");
4883
+ onChange(answerMap, materialKey, "");
5011
4884
  },
5012
4885
  children: /* @__PURE__ */ jsx28(
5013
4886
  ShowMaterialMediaByContentType_default,
@@ -5043,7 +4916,7 @@ var FillInTheBlanksActivityMaterialContent_default = FillInTheBlanksActivityMate
5043
4916
  import { useState as useState18, useEffect as useEffect9 } from "react";
5044
4917
  import { jsx as jsx29, jsxs as jsxs18 } from "react/jsx-runtime";
5045
4918
  var FillInTheBlanksActivityContent = ({
5046
- answer,
4919
+ answerMap,
5047
4920
  data,
5048
4921
  canAnswerQuestion,
5049
4922
  changeAnswer,
@@ -5061,18 +4934,10 @@ var FillInTheBlanksActivityContent = ({
5061
4934
  "FILL_IN_THE_BLANKS"
5062
4935
  );
5063
4936
  const fillInTheBlanksIncorrectList = data.fillInTheBlanksIncorrectList ? JSON.parse(data.fillInTheBlanksIncorrectList) : [];
5064
- const [currentAnswerMap, setCurrentAnswerMap] = useState18(() => {
5065
- return retrieveCurrentAnswerMap();
5066
- });
5067
- function retrieveCurrentAnswerMap() {
5068
- let foundIndex = answer.data.findIndex(
5069
- (answerData) => answerData.type === "FILL_IN_THE_BLANKS"
5070
- );
5071
- return answer.data[foundIndex].answerMap;
5072
- }
4937
+ const [currentAnswerMap, setCurrentAnswerMap] = useState18(answerMap);
5073
4938
  useEffect9(() => {
5074
- setCurrentAnswerMap(retrieveCurrentAnswerMap());
5075
- }, [answer]);
4939
+ setCurrentAnswerMap(answerMap);
4940
+ }, [answerMap]);
5076
4941
  const constructAnswerOptionList = () => {
5077
4942
  const optionList = [];
5078
4943
  Object.keys(fillInTheBlanksMaterialMap).forEach((key) => {
@@ -5091,23 +4956,11 @@ var FillInTheBlanksActivityContent = ({
5091
4956
  });
5092
4957
  return optionList;
5093
4958
  };
5094
- const handleFillInTheBlanksAnswerOnChange = (answerObj, key, value) => {
4959
+ const handleFillInTheBlanksAnswerOnChange = (answerMap2, key, value) => {
5095
4960
  if (isPreview) return;
5096
- const newAnswer = __spreadProps(__spreadValues({}, answerObj), {
5097
- data: answerObj.data.map((item) => {
5098
- if (item.type === "FILL_IN_THE_BLANKS") {
5099
- return __spreadProps(__spreadValues({}, item), {
5100
- answerMap: __spreadProps(__spreadValues({}, item.answerMap), {
5101
- [key]: value
5102
- })
5103
- });
5104
- }
5105
- return item;
5106
- })
5107
- });
5108
- const newAnswerMap = __spreadProps(__spreadValues({}, currentAnswerMap), { [key]: value });
5109
- setCurrentAnswerMap(newAnswerMap);
5110
- changeAnswer(newAnswer);
4961
+ answerMap2 = __spreadProps(__spreadValues({}, currentAnswerMap), { [key]: value });
4962
+ setCurrentAnswerMap(answerMap2);
4963
+ changeAnswer(answerMap2);
5111
4964
  };
5112
4965
  return /* @__PURE__ */ jsxs18("div", { className: "flex flex-row flex-wrap", children: [
5113
4966
  /* @__PURE__ */ jsx29("div", { className: `${isFullScreen ? "w-full" : "w-full md:w-[60%]"}`, children: /* @__PURE__ */ jsx29(
@@ -5125,7 +4978,7 @@ var FillInTheBlanksActivityContent = ({
5125
4978
  FillInTheBlanksActivityMaterialContent_default,
5126
4979
  {
5127
4980
  uniqueValue: JSON.stringify(data.contentMap),
5128
- answer,
4981
+ answerMap,
5129
4982
  optionList: constructAnswerOptionList(),
5130
4983
  materialMap: fillInTheBlanksMaterialMap,
5131
4984
  contentMap,
@@ -5145,7 +4998,7 @@ import { InlineMath as InlineMath5 } from "react-katex";
5145
4998
  import { Fragment as Fragment3, jsx as jsx30, jsxs as jsxs19 } from "react/jsx-runtime";
5146
4999
  var GroupingActivityMaterialContent = ({
5147
5000
  uniqueValue,
5148
- answer,
5001
+ answerMap,
5149
5002
  materialMap,
5150
5003
  contentMap,
5151
5004
  checkCanAnswerQuestion,
@@ -5195,10 +5048,8 @@ var GroupingActivityMaterialContent = ({
5195
5048
  }, [materialMap, isShuffled]);
5196
5049
  useEffect10(() => {
5197
5050
  if (!showCorrectAnswer) return;
5198
- answer.data.find(
5199
- (answerData) => answerData.type === "GROUPING"
5200
- ).answerMap = materialMap;
5201
- }, [showCorrectAnswer, answer, materialMap]);
5051
+ answerMap = materialMap;
5052
+ }, [showCorrectAnswer, answerMap, materialMap]);
5202
5053
  useEffect10(() => {
5203
5054
  if (!dropTargetKey || !dropZoneRefs.current[dropTargetKey]) return;
5204
5055
  const dropZoneElement = dropZoneRefs.current[dropTargetKey];
@@ -5243,13 +5094,6 @@ var GroupingActivityMaterialContent = ({
5243
5094
  };
5244
5095
  requestAnimationFrame(animate);
5245
5096
  }, [dropTargetKey]);
5246
- const retrieveAnswerMap = () => {
5247
- const foundIndex = answer.data.findIndex(
5248
- (answerData) => answerData.type === "GROUPING"
5249
- );
5250
- const answerMap2 = answer.data[foundIndex].answerMap;
5251
- return answerMap2;
5252
- };
5253
5097
  const retrieveFilteredMaterialList = (answerMap2) => {
5254
5098
  const selectedValueList = [];
5255
5099
  Object.keys(answerMap2).forEach((key) => {
@@ -5294,7 +5138,7 @@ var GroupingActivityMaterialContent = ({
5294
5138
  };
5295
5139
  const handleMouseUp = () => {
5296
5140
  if (dropTargetKey !== null && draggedValue !== null) {
5297
- onChange(answer, dropTargetKey, draggedValue, null);
5141
+ onChange(answerMap, dropTargetKey, draggedValue, null);
5298
5142
  }
5299
5143
  setDraggedValue(null);
5300
5144
  setDropTargetKey(null);
@@ -5326,7 +5170,7 @@ var GroupingActivityMaterialContent = ({
5326
5170
  };
5327
5171
  const handleTouchEnd = () => {
5328
5172
  if (dropTargetKey !== null && draggedValue !== null) {
5329
- onChange(answer, dropTargetKey, draggedValue, null);
5173
+ onChange(answerMap, dropTargetKey, draggedValue, null);
5330
5174
  }
5331
5175
  setDraggedValue(null);
5332
5176
  setDropTargetKey(null);
@@ -5340,11 +5184,10 @@ var GroupingActivityMaterialContent = ({
5340
5184
  };
5341
5185
  const handleDropZoneClick = (answerMapKey) => {
5342
5186
  if (selectedValue !== null) {
5343
- onChange(answer, answerMapKey, selectedValue, null);
5187
+ onChange(answerMap, answerMapKey, selectedValue, null);
5344
5188
  setSelectedValue(null);
5345
5189
  }
5346
5190
  };
5347
- const answerMap = retrieveAnswerMap();
5348
5191
  const filteredMaterialList = retrieveFilteredMaterialList(answerMap);
5349
5192
  return /* @__PURE__ */ jsxs19("div", { onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, children: [
5350
5193
  draggedValue && mousePosition.x > 0 && /* @__PURE__ */ jsx30(
@@ -5492,7 +5335,7 @@ var GroupingActivityMaterialContent = ({
5492
5335
  e.stopPropagation();
5493
5336
  if (checkCanAnswerQuestion()) {
5494
5337
  onChange(
5495
- answer,
5338
+ answerMap,
5496
5339
  answerMapKey,
5497
5340
  null,
5498
5341
  answerMapIndex
@@ -5539,7 +5382,7 @@ var GroupingActivityMaterialContent_default = GroupingActivityMaterialContent;
5539
5382
  // src/components/activities/GroupingActivityContent.tsx
5540
5383
  import { Fragment as Fragment4, jsx as jsx31, jsxs as jsxs20 } from "react/jsx-runtime";
5541
5384
  var GroupingActivityContent = ({
5542
- answer,
5385
+ answerMap,
5543
5386
  data,
5544
5387
  canAnswerQuestion,
5545
5388
  changeAnswer,
@@ -5549,18 +5392,14 @@ var GroupingActivityContent = ({
5549
5392
  const contentMap = parseContentMapFromData(data);
5550
5393
  const groupingBodyMap = parseBodyMapFromData(data, "GROUPING");
5551
5394
  const groupingMaterialMap = parseMaterialMapFromData(data, "GROUPING");
5552
- const handleGroupingAnswerOnChange = (answer2, key, value, index) => {
5395
+ const handleGroupingAnswerOnChange = (answerMap2, key, value, index) => {
5553
5396
  if (isPreview) return;
5554
- let foundIndex = answer2.data.findIndex(
5555
- (answerData) => answerData.type === "GROUPING"
5556
- );
5557
- const answerMap = answer2.data[foundIndex].answerMap;
5558
5397
  if (value) {
5559
- answerMap[key].push(value);
5398
+ answerMap2[key].push(value);
5560
5399
  } else {
5561
- answerMap[key].splice(index, 1);
5400
+ answerMap2[key].splice(index, 1);
5562
5401
  }
5563
- changeAnswer(answer2);
5402
+ changeAnswer(answerMap2);
5564
5403
  };
5565
5404
  return /* @__PURE__ */ jsxs20(Fragment4, { children: [
5566
5405
  /* @__PURE__ */ jsx31(
@@ -5575,7 +5414,7 @@ var GroupingActivityContent = ({
5575
5414
  GroupingActivityMaterialContent_default,
5576
5415
  {
5577
5416
  uniqueValue: JSON.stringify(data.contentMap),
5578
- answer,
5417
+ answerMap,
5579
5418
  materialMap: groupingMaterialMap,
5580
5419
  contentMap,
5581
5420
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -5594,7 +5433,7 @@ import { InlineMath as InlineMath6 } from "react-katex";
5594
5433
  import { Fragment as Fragment5, jsx as jsx32, jsxs as jsxs21 } from "react/jsx-runtime";
5595
5434
  var MatchingActivityMaterialContent = ({
5596
5435
  uniqueValue,
5597
- answer,
5436
+ answerMap,
5598
5437
  materialMap,
5599
5438
  contentMap,
5600
5439
  checkCanAnswerQuestion,
@@ -5642,10 +5481,8 @@ var MatchingActivityMaterialContent = ({
5642
5481
  }, [materialMap, isShuffled]);
5643
5482
  useEffect11(() => {
5644
5483
  if (!showCorrectAnswer) return;
5645
- answer.data.find(
5646
- (answerData) => answerData.type === "MATCHING"
5647
- ).answerMap = materialMap;
5648
- }, [showCorrectAnswer, answer, materialMap]);
5484
+ answerMap = materialMap;
5485
+ }, [showCorrectAnswer]);
5649
5486
  useEffect11(() => {
5650
5487
  if (!dropTargetKey || !dropZoneRefs.current[dropTargetKey]) return;
5651
5488
  const dropZoneElement = dropZoneRefs.current[dropTargetKey];
@@ -5690,12 +5527,6 @@ var MatchingActivityMaterialContent = ({
5690
5527
  };
5691
5528
  requestAnimationFrame(animate);
5692
5529
  }, [dropTargetKey]);
5693
- const retrieveAnswerMap = () => {
5694
- const foundIndex = answer.data.findIndex(
5695
- (answerData) => answerData.type === "MATCHING"
5696
- );
5697
- return answer.data[foundIndex].answerMap;
5698
- };
5699
5530
  const retrieveFilteredMaterialList = (answerMap2) => {
5700
5531
  const selectedValueList = [];
5701
5532
  Object.keys(answerMap2).forEach((key) => {
@@ -5734,7 +5565,7 @@ var MatchingActivityMaterialContent = ({
5734
5565
  };
5735
5566
  const handleMouseUp = () => {
5736
5567
  if (dropTargetKey !== null && draggedValue !== null) {
5737
- onChange(answer, dropTargetKey, draggedValue);
5568
+ onChange(answerMap, dropTargetKey, draggedValue);
5738
5569
  }
5739
5570
  setDraggedValue(null);
5740
5571
  setDropTargetKey(null);
@@ -5766,7 +5597,7 @@ var MatchingActivityMaterialContent = ({
5766
5597
  };
5767
5598
  const handleTouchEnd = () => {
5768
5599
  if (dropTargetKey !== null && draggedValue !== null) {
5769
- onChange(answer, dropTargetKey, draggedValue);
5600
+ onChange(answerMap, dropTargetKey, draggedValue);
5770
5601
  }
5771
5602
  setDraggedValue(null);
5772
5603
  setDropTargetKey(null);
@@ -5780,11 +5611,10 @@ var MatchingActivityMaterialContent = ({
5780
5611
  };
5781
5612
  const handleDropZoneClick = (answerMapKey) => {
5782
5613
  if (selectedValue !== null) {
5783
- onChange(answer, answerMapKey, selectedValue);
5614
+ onChange(answerMap, answerMapKey, selectedValue);
5784
5615
  setSelectedValue(null);
5785
5616
  }
5786
5617
  };
5787
- const answerMap = retrieveAnswerMap();
5788
5618
  const filteredMaterialList = retrieveFilteredMaterialList(answerMap);
5789
5619
  return /* @__PURE__ */ jsxs21("div", { onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, children: [
5790
5620
  draggedValue && mousePosition.x > 0 && /* @__PURE__ */ jsx32(
@@ -5931,7 +5761,7 @@ var MatchingActivityMaterialContent = ({
5931
5761
  onClick: (e) => {
5932
5762
  e.stopPropagation();
5933
5763
  if (checkCanAnswerQuestion() && answerMap[answerMapKey]) {
5934
- onChange(answer, answerMapKey, null);
5764
+ onChange(answerMap, answerMapKey, null);
5935
5765
  setSelectedValue(null);
5936
5766
  }
5937
5767
  },
@@ -5966,7 +5796,7 @@ var MatchingActivityMaterialContent_default = MatchingActivityMaterialContent;
5966
5796
  // src/components/activities/MatchingActivityContent.tsx
5967
5797
  import { Fragment as Fragment6, jsx as jsx33, jsxs as jsxs22 } from "react/jsx-runtime";
5968
5798
  var MatchingActivityContent = ({
5969
- answer,
5799
+ answerMap,
5970
5800
  data,
5971
5801
  canAnswerQuestion,
5972
5802
  changeAnswer,
@@ -5976,14 +5806,10 @@ var MatchingActivityContent = ({
5976
5806
  const contentMap = parseContentMapFromData(data);
5977
5807
  const matchingBodyMap = parseBodyMapFromData(data, "MATCHING");
5978
5808
  const matchingMaterialMap = parseMaterialMapFromData(data, "MATCHING");
5979
- const handleMatchingAnswerOnChange = (answer2, key, value) => {
5809
+ const handleMatchingAnswerOnChange = (answerMap2, key, value) => {
5980
5810
  if (isPreview) return;
5981
- let foundIndex = answer2.data.findIndex(
5982
- (answerData) => answerData.type === "MATCHING"
5983
- );
5984
- const answerMap = answer2.data[foundIndex].answerMap;
5985
- answerMap[key] = value;
5986
- changeAnswer(answer2);
5811
+ answerMap2[key] = value;
5812
+ changeAnswer(answerMap2);
5987
5813
  };
5988
5814
  return /* @__PURE__ */ jsxs22(Fragment6, { children: [
5989
5815
  /* @__PURE__ */ jsx33(
@@ -5998,7 +5824,7 @@ var MatchingActivityContent = ({
5998
5824
  MatchingActivityMaterialContent_default,
5999
5825
  {
6000
5826
  uniqueValue: JSON.stringify(data.contentMap),
6001
- answer,
5827
+ answerMap,
6002
5828
  materialMap: matchingMaterialMap,
6003
5829
  contentMap,
6004
5830
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -6016,19 +5842,13 @@ import { InlineMath as InlineMath7 } from "react-katex";
6016
5842
  import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
6017
5843
  var MCMAActivityMaterialContent = ({
6018
5844
  uniqueValue,
6019
- answer,
5845
+ answerMap,
6020
5846
  materialMap,
6021
5847
  contentMap,
6022
5848
  checkCanAnswerQuestion,
6023
5849
  onChange,
6024
5850
  isPreview
6025
5851
  }) => {
6026
- const retrieveAnswerMap = () => {
6027
- const foundIndex = answer.data.findIndex(
6028
- (answerData) => answerData.type === "MCMA"
6029
- );
6030
- return answer.data[foundIndex].answerMap;
6031
- };
6032
5852
  const retrieveCorrectAnswerList = () => {
6033
5853
  return JSON.parse(Object.keys(materialMap)[0]);
6034
5854
  };
@@ -6043,7 +5863,6 @@ var MCMAActivityMaterialContent = ({
6043
5863
  }
6044
5864
  return "INCORRECT";
6045
5865
  };
6046
- const answerMap = retrieveAnswerMap();
6047
5866
  const correctAnswerList = retrieveCorrectAnswerList();
6048
5867
  return Object.keys(materialMap).map((materialKey, index) => {
6049
5868
  return /* @__PURE__ */ jsx34("div", { className: "flex flex-row items-center my-1", children: /* @__PURE__ */ jsxs23("div", { className: "flex-1 flex flex-col justify-center border-catchup-lighter-gray rounded-catchup-xlarge px-5 md:px-0", children: [
@@ -6067,7 +5886,7 @@ var MCMAActivityMaterialContent = ({
6067
5886
  {
6068
5887
  className: `w-full flex flex-row items-center justify-center cursor-pointer my-2 gap-x-2 ${learnerAnswerState === "EMPTY" && foundIndex !== -1 || learnerAnswerState === "CORRECT" ? "border-2 border-catchup-green rounded-catchup-xlarge p-2" : learnerAnswerState === "INCORRECT" ? "border-2 border-catchup-red rounded-catchup-xlarge p-2" : ""}`,
6069
5888
  onClick: () => {
6070
- onChange(answer, materialKey, materialSubKey);
5889
+ onChange(answerMap, materialKey, materialSubKey);
6071
5890
  },
6072
5891
  children: [
6073
5892
  /* @__PURE__ */ jsx34(
@@ -6121,7 +5940,7 @@ var MCMAActivityMaterialContent_default = MCMAActivityMaterialContent;
6121
5940
  // src/components/activities/MCMAActivityContent.tsx
6122
5941
  import { jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
6123
5942
  var MCMAActivityContent = ({
6124
- answer,
5943
+ answerMap,
6125
5944
  data,
6126
5945
  canAnswerQuestion,
6127
5946
  changeAnswer,
@@ -6131,21 +5950,17 @@ var MCMAActivityContent = ({
6131
5950
  const contentMap = parseContentMapFromData(data);
6132
5951
  const MCMABodyMap = parseBodyMapFromData(data, "MCMA");
6133
5952
  const MCMAMaterialMap = parseMaterialMapFromData(data, "MCMA");
6134
- const handleMCMAAnswerOnChange = (answer2, key, value) => {
5953
+ const handleMCMAAnswerOnChange = (answerMap2, key, value) => {
6135
5954
  if (isPreview) return;
6136
- let foundIndex = answer2.data.findIndex(
6137
- (answerData) => answerData.type === "MCMA"
6138
- );
6139
- const answerMap = answer2.data[foundIndex].answerMap;
6140
- const foundSubIndex = answerMap[key].findIndex(
5955
+ const foundSubIndex = answerMap2[key].findIndex(
6141
5956
  (answerMaterialKey) => answerMaterialKey === value
6142
5957
  );
6143
5958
  if (foundSubIndex === -1) {
6144
- answerMap[key].push(value);
5959
+ answerMap2[key].push(value);
6145
5960
  } else {
6146
- answerMap[key].splice(foundSubIndex, 1);
5961
+ answerMap2[key].splice(foundSubIndex, 1);
6147
5962
  }
6148
- changeAnswer(answer2);
5963
+ changeAnswer(answerMap2);
6149
5964
  };
6150
5965
  return /* @__PURE__ */ jsxs24("div", { className: "flex flex-row flex-wrap", children: [
6151
5966
  /* @__PURE__ */ jsx35("div", { className: `${isFullScreen ? "w-full" : "w-full md:w-[60%]"}`, children: /* @__PURE__ */ jsx35(ActivityBodyContent_default, { bodyMap: MCMABodyMap, templateType: "MCMA" }) }),
@@ -6155,7 +5970,7 @@ var MCMAActivityContent = ({
6155
5970
  MCMAActivityMaterialContent_default,
6156
5971
  {
6157
5972
  uniqueValue: JSON.stringify(data.contentMap),
6158
- answer,
5973
+ answerMap,
6159
5974
  materialMap: MCMAMaterialMap,
6160
5975
  contentMap,
6161
5976
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -6172,19 +5987,13 @@ import { InlineMath as InlineMath8 } from "react-katex";
6172
5987
  import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
6173
5988
  var MCSAActivityMaterialContent = ({
6174
5989
  uniqueValue,
6175
- answer,
5990
+ answerMap,
6176
5991
  materialMap,
6177
5992
  contentMap,
6178
5993
  checkCanAnswerQuestion,
6179
5994
  onChange,
6180
5995
  isPreview
6181
5996
  }) => {
6182
- const retrieveAnswerMap = () => {
6183
- const foundIndex = answer.data.findIndex(
6184
- (answerData) => answerData.type === "MCSA"
6185
- );
6186
- return answer.data[foundIndex].answerMap;
6187
- };
6188
5997
  const retrieveCorrectAnswer = () => {
6189
5998
  return Object.keys(materialMap)[0];
6190
5999
  };
@@ -6196,7 +6005,6 @@ var MCSAActivityMaterialContent = ({
6196
6005
  }
6197
6006
  return "INCORRECT";
6198
6007
  };
6199
- const answerMap = retrieveAnswerMap();
6200
6008
  const correctAnswer = retrieveCorrectAnswer();
6201
6009
  return Object.keys(materialMap).map((materialKey, index) => {
6202
6010
  return /* @__PURE__ */ jsx36("div", { className: "flex flex-row items-center my-1", children: /* @__PURE__ */ jsxs25("div", { className: "flex-1 flex flex-col justify-center border-catchup-lighter-gray rounded-catchup-xlarge px-5 md:px-0", children: [
@@ -6218,7 +6026,7 @@ var MCSAActivityMaterialContent = ({
6218
6026
  {
6219
6027
  className: `w-full flex flex-row items-center justify-center cursor-pointer my-2 gap-x-2 ${learnerAnswerState === "EMPTY" && materialSubKey === correctAnswer || learnerAnswerState === "CORRECT" ? "border-2 border-catchup-green rounded-catchup-xlarge p-2" : learnerAnswerState === "INCORRECT" ? "border-2 border-catchup-red rounded-catchup-xlarge p-2" : ""}`,
6220
6028
  onClick: () => {
6221
- onChange(answer, materialKey, materialSubKey);
6029
+ onChange(answerMap, materialKey, materialSubKey);
6222
6030
  },
6223
6031
  children: [
6224
6032
  /* @__PURE__ */ jsx36(
@@ -6274,7 +6082,7 @@ var MCSAActivityMaterialContent_default = MCSAActivityMaterialContent;
6274
6082
  // src/components/activities/MCSAActivityContent.tsx
6275
6083
  import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
6276
6084
  var MCSAActivityContent = ({
6277
- answer,
6085
+ answerMap,
6278
6086
  data,
6279
6087
  canAnswerQuestion,
6280
6088
  changeAnswer,
@@ -6284,14 +6092,10 @@ var MCSAActivityContent = ({
6284
6092
  const contentMap = parseContentMapFromData(data);
6285
6093
  const MCSABodyMap = parseBodyMapFromData(data, "MCSA");
6286
6094
  const MCSAMaterialMap = parseMaterialMapFromData(data, "MCSA");
6287
- const handleMCSAAnswerOnChange = (answer2, key, value) => {
6095
+ const handleMCSAAnswerOnChange = (answerMap2, key, value) => {
6288
6096
  if (isPreview) return;
6289
- let foundIndex = answer2.data.findIndex(
6290
- (answerData) => answerData.type === "MCSA"
6291
- );
6292
- const answerMap = answer2.data[foundIndex].answerMap;
6293
- answerMap[key] = value;
6294
- changeAnswer(answer2);
6097
+ answerMap2[key] = value;
6098
+ changeAnswer(answerMap2);
6295
6099
  };
6296
6100
  return /* @__PURE__ */ jsxs26("div", { className: "flex flex-row flex-wrap", children: [
6297
6101
  /* @__PURE__ */ jsx37("div", { className: `${isFullScreen ? "w-full" : "w-full md:w-[60%]"}`, children: /* @__PURE__ */ jsx37(ActivityBodyContent_default, { bodyMap: MCSABodyMap, templateType: "MCSA" }) }),
@@ -6301,7 +6105,7 @@ var MCSAActivityContent = ({
6301
6105
  MCSAActivityMaterialContent_default,
6302
6106
  {
6303
6107
  uniqueValue: JSON.stringify(data.contentMap),
6304
- answer,
6108
+ answerMap,
6305
6109
  materialMap: MCSAMaterialMap,
6306
6110
  contentMap,
6307
6111
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -6344,26 +6148,11 @@ var retrieveDocumentTypeFromExtension = (format) => {
6344
6148
  // src/components/activities/material-contents/OpenEndedActivityMaterialContent.tsx
6345
6149
  import { Fragment as Fragment7, jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
6346
6150
  var OpenEndedActivityMaterialContent = ({
6347
- answer,
6151
+ answerMap,
6348
6152
  contentMap,
6349
6153
  checkCanAnswerQuestion,
6350
6154
  onChange
6351
6155
  }) => {
6352
- const retrieveAnswer = () => {
6353
- if (!answer)
6354
- return {
6355
- answerMap: {
6356
- ANSWER: ""
6357
- }
6358
- };
6359
- return answer.data.find(
6360
- (answerData) => answerData.type === "OPEN_ENDED"
6361
- );
6362
- };
6363
- const retrieveAnswerMap = () => {
6364
- const { answerMap: answerMap2 } = retrieveAnswer();
6365
- return answerMap2;
6366
- };
6367
6156
  const RenderTextContent = (answerMap2) => {
6368
6157
  const answerMapAnswer = answerMap2["ANSWER"];
6369
6158
  let documentType = "TEXT";
@@ -6403,7 +6192,7 @@ var OpenEndedActivityMaterialContent = ({
6403
6192
  useMinHeight: true,
6404
6193
  onChange: (e) => {
6405
6194
  if (checkCanAnswerQuestion()) {
6406
- onChange(answer, e.target.value);
6195
+ onChange(answerMap2, e.target.value);
6407
6196
  }
6408
6197
  }
6409
6198
  }
@@ -6437,7 +6226,6 @@ var OpenEndedActivityMaterialContent = ({
6437
6226
  }
6438
6227
  ) });
6439
6228
  };
6440
- const answerMap = retrieveAnswerMap();
6441
6229
  return /* @__PURE__ */ jsx38(Fragment7, { children: /* @__PURE__ */ jsxs27("div", { className: "", children: [
6442
6230
  /* @__PURE__ */ jsx38("div", { className: "hidden md:block", children: /* @__PURE__ */ jsx38("span", { className: "font-semibold text-xl opacity-60", children: i18n_default.t("please_select_open_ended_text") }) }),
6443
6231
  /* @__PURE__ */ jsx38("div", { className: "hidden md:contents", children: /* @__PURE__ */ jsx38(DividerLine_default, {}) }),
@@ -6449,7 +6237,7 @@ var OpenEndedActivityMaterialContent_default = OpenEndedActivityMaterialContent;
6449
6237
  // src/components/activities/OpenEndedActivityContent.tsx
6450
6238
  import { Fragment as Fragment8, jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
6451
6239
  var OpenEndedActivityContent = ({
6452
- answer,
6240
+ answerMap,
6453
6241
  data,
6454
6242
  changeAnswer,
6455
6243
  canAnswerQuestion,
@@ -6459,14 +6247,10 @@ var OpenEndedActivityContent = ({
6459
6247
  }) => {
6460
6248
  const contentMap = parseContentMapFromData(data);
6461
6249
  const openEndedBodyMap = parseBodyMapFromData(data, "OPEN_ENDED");
6462
- const handleOpenEndedAnswerOnChange = (answer2, value) => {
6250
+ const handleOpenEndedAnswerOnChange = (answerMap2, value) => {
6463
6251
  if (isPreview) return;
6464
- let foundIndex = answer2.data.findIndex(
6465
- (answerData) => answerData.type === "OPEN_ENDED"
6466
- );
6467
- const answerMap = answer2.data[foundIndex].answerMap;
6468
- answerMap["ANSWER"] = value;
6469
- changeAnswer(answer2);
6252
+ answerMap2["ANSWER"] = value;
6253
+ changeAnswer(answerMap2);
6470
6254
  };
6471
6255
  return /* @__PURE__ */ jsxs28("div", { className: "flex flex-row flex-wrap", children: [
6472
6256
  /* @__PURE__ */ jsx39(
@@ -6494,7 +6278,7 @@ var OpenEndedActivityContent = ({
6494
6278
  /* @__PURE__ */ jsx39("div", { className: `${isFullScreen ? "w-full" : "w-full md:flex-1"}`, children: /* @__PURE__ */ jsx39(
6495
6279
  OpenEndedActivityMaterialContent_default,
6496
6280
  {
6497
- answer,
6281
+ answerMap,
6498
6282
  contentMap,
6499
6283
  checkCanAnswerQuestion: canAnswerQuestion,
6500
6284
  onChange: handleOpenEndedAnswerOnChange
@@ -6548,7 +6332,7 @@ var useScreenSize_default = useScreenSize;
6548
6332
  import { jsx as jsx40, jsxs as jsxs29 } from "react/jsx-runtime";
6549
6333
  var OrderingActivityMaterialContent = ({
6550
6334
  uniqueValue,
6551
- answer,
6335
+ answerMap,
6552
6336
  materialMap,
6553
6337
  contentMap,
6554
6338
  checkCanAnswerQuestion,
@@ -6583,19 +6367,10 @@ var OrderingActivityMaterialContent = ({
6583
6367
  }, [screenSize]);
6584
6368
  useEffect13(() => {
6585
6369
  if (!showCorrectAnswer) return;
6586
- const answerMap2 = answer.data.find(
6587
- (answerData) => answerData.type === "ORDERING"
6588
- ).answerMap;
6589
- Object.keys(answerMap2).forEach((answerKey, index) => {
6590
- answerMap2[answerKey] = index;
6370
+ Object.keys(answerMap).forEach((answerKey, index) => {
6371
+ answerMap[answerKey] = index;
6591
6372
  });
6592
6373
  }, [showCorrectAnswer]);
6593
- const retrieveAnswerMap = () => {
6594
- const foundIndex = answer.data.findIndex(
6595
- (answerData) => answerData.type === "ORDERING"
6596
- );
6597
- return answer.data[foundIndex].answerMap;
6598
- };
6599
6374
  const checkAnswerState = (correctAnswer, learnerAnswer) => {
6600
6375
  if (!isPreview) return null;
6601
6376
  if (correctAnswer === learnerAnswer) {
@@ -6644,7 +6419,7 @@ var OrderingActivityMaterialContent = ({
6644
6419
  };
6645
6420
  const handleMouseUp = () => {
6646
6421
  if (dropTargetKey !== null && draggedKey !== null && dropTargetKey !== draggedKey) {
6647
- onChange(answer, draggedKey, dropTargetKey);
6422
+ onChange(answerMap, draggedKey, dropTargetKey);
6648
6423
  }
6649
6424
  setDraggedKey(null);
6650
6425
  setDropTargetKey(null);
@@ -6676,7 +6451,7 @@ var OrderingActivityMaterialContent = ({
6676
6451
  };
6677
6452
  const handleTouchEnd = () => {
6678
6453
  if (dropTargetKey !== null && draggedKey !== null && dropTargetKey !== draggedKey) {
6679
- onChange(answer, draggedKey, dropTargetKey);
6454
+ onChange(answerMap, draggedKey, dropTargetKey);
6680
6455
  }
6681
6456
  setDraggedKey(null);
6682
6457
  setDropTargetKey(null);
@@ -6690,12 +6465,11 @@ var OrderingActivityMaterialContent = ({
6690
6465
  } else if (selectedKey === materialKey) {
6691
6466
  setSelectedKey(null);
6692
6467
  } else {
6693
- onChange(answer, selectedKey, materialKey);
6468
+ onChange(answerMap, selectedKey, materialKey);
6694
6469
  setSelectedKey(null);
6695
6470
  }
6696
6471
  setDraggedKey(null);
6697
6472
  };
6698
- const answerMap = retrieveAnswerMap();
6699
6473
  return /* @__PURE__ */ jsxs29(
6700
6474
  "div",
6701
6475
  {
@@ -6833,7 +6607,7 @@ var OrderingActivityMaterialContent_default = OrderingActivityMaterialContent;
6833
6607
  // src/components/activities/OrderingActivityContent.tsx
6834
6608
  import { Fragment as Fragment9, jsx as jsx41, jsxs as jsxs30 } from "react/jsx-runtime";
6835
6609
  var OrderingActivityContent = ({
6836
- answer,
6610
+ answerMap,
6837
6611
  data,
6838
6612
  canAnswerQuestion,
6839
6613
  changeAnswer,
@@ -6844,16 +6618,12 @@ var OrderingActivityContent = ({
6844
6618
  const contentMap = parseContentMapFromData(data);
6845
6619
  const orderingBodyMap = parseBodyMapFromData(data, "ORDERING");
6846
6620
  const orderingMaterialMap = parseMaterialMapFromData(data, "ORDERING");
6847
- const handleOrderingAnswerOnChange = (answer2, primaryKey, secondaryKey) => {
6621
+ const handleOrderingAnswerOnChange = (answerMap2, primaryKey, secondaryKey) => {
6848
6622
  if (isPreview) return;
6849
- let foundIndex = answer2.data.findIndex(
6850
- (answerData) => answerData.type === "ORDERING"
6851
- );
6852
- const answerMap = answer2.data[foundIndex].answerMap;
6853
- const prevValue = answerMap[primaryKey];
6854
- answerMap[primaryKey] = answerMap[secondaryKey];
6855
- answerMap[secondaryKey] = prevValue;
6856
- changeAnswer(answer2);
6623
+ const prevValue = answerMap2[primaryKey];
6624
+ answerMap2[primaryKey] = answerMap2[secondaryKey];
6625
+ answerMap2[secondaryKey] = prevValue;
6626
+ changeAnswer(answerMap2);
6857
6627
  };
6858
6628
  return /* @__PURE__ */ jsxs30(Fragment9, { children: [
6859
6629
  /* @__PURE__ */ jsx41(
@@ -6868,7 +6638,7 @@ var OrderingActivityContent = ({
6868
6638
  OrderingActivityMaterialContent_default,
6869
6639
  {
6870
6640
  uniqueValue: JSON.stringify(data.contentMap),
6871
- answer,
6641
+ answerMap,
6872
6642
  materialMap: orderingMaterialMap,
6873
6643
  contentMap,
6874
6644
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -6887,7 +6657,7 @@ import { InlineMath as InlineMath10 } from "react-katex";
6887
6657
  import { Fragment as Fragment10, jsx as jsx42, jsxs as jsxs31 } from "react/jsx-runtime";
6888
6658
  var TrueFalseActivityMaterialContent = ({
6889
6659
  uniqueValue,
6890
- answer,
6660
+ answerMap,
6891
6661
  materialMap,
6892
6662
  contentMap,
6893
6663
  checkCanAnswerQuestion,
@@ -6895,7 +6665,6 @@ var TrueFalseActivityMaterialContent = ({
6895
6665
  isPreview,
6896
6666
  showCorrectAnswer
6897
6667
  }) => {
6898
- const { screenSize } = useScreenSize_default();
6899
6668
  const [shuffleOptionList, setShuffleOptionList] = useState23([]);
6900
6669
  useEffect14(() => {
6901
6670
  const optionList = [];
@@ -6909,26 +6678,8 @@ var TrueFalseActivityMaterialContent = ({
6909
6678
  }, []);
6910
6679
  useEffect14(() => {
6911
6680
  if (!showCorrectAnswer) return;
6912
- answer.data.find(
6913
- (answerData) => answerData.type === "TRUE_FALSE"
6914
- ).answerMap = materialMap;
6681
+ answerMap = materialMap;
6915
6682
  }, [showCorrectAnswer]);
6916
- const retrieveAnswer = () => {
6917
- if (!answer)
6918
- return {
6919
- answerMap: {
6920
- trueList: [],
6921
- falseList: []
6922
- }
6923
- };
6924
- return answer.data.find(
6925
- (answerData) => answerData.type === "TRUE_FALSE"
6926
- );
6927
- };
6928
- const retrieveAnswerMap = () => {
6929
- const { answerMap: answerMap2 } = retrieveAnswer();
6930
- return answerMap2;
6931
- };
6932
6683
  const checkAnswerState = (correctAnswer, learnerAnswer) => {
6933
6684
  if (!isPreview) return null;
6934
6685
  if (correctAnswer === learnerAnswer) {
@@ -6936,7 +6687,6 @@ var TrueFalseActivityMaterialContent = ({
6936
6687
  }
6937
6688
  return "INCORRECT";
6938
6689
  };
6939
- const answerMap = retrieveAnswerMap();
6940
6690
  return /* @__PURE__ */ jsxs31("div", { className: "", children: [
6941
6691
  /* @__PURE__ */ jsx42("div", { className: "hidden md:block", children: /* @__PURE__ */ jsx42("span", { className: "font-semibold text-xl opacity-60", children: i18n_default.t("please_select_true_false_text") }) }),
6942
6692
  /* @__PURE__ */ jsx42("div", { className: "hidden md:contents", children: /* @__PURE__ */ jsx42(DividerLine_default, {}) }),
@@ -6986,7 +6736,7 @@ var TrueFalseActivityMaterialContent = ({
6986
6736
  alt: "checkbox",
6987
6737
  size: "small",
6988
6738
  onClick: () => {
6989
- onChange(answer, "TRUE", shuffleOption);
6739
+ onChange(answerMap, "TRUE", shuffleOption);
6990
6740
  }
6991
6741
  }
6992
6742
  ) }) }),
@@ -6997,7 +6747,7 @@ var TrueFalseActivityMaterialContent = ({
6997
6747
  alt: "checkbox",
6998
6748
  size: "small",
6999
6749
  onClick: () => {
7000
- onChange(answer, "FALSE", shuffleOption);
6750
+ onChange(answerMap, "FALSE", shuffleOption);
7001
6751
  }
7002
6752
  }
7003
6753
  ) }) })
@@ -7023,7 +6773,7 @@ var TrueFalseActivityMaterialContent_default = TrueFalseActivityMaterialContent;
7023
6773
  // src/components/activities/TrueFalseActivityContent.tsx
7024
6774
  import { jsx as jsx43, jsxs as jsxs32 } from "react/jsx-runtime";
7025
6775
  var TrueFalseActivityContent = ({
7026
- answer,
6776
+ answerMap,
7027
6777
  data,
7028
6778
  canAnswerQuestion,
7029
6779
  changeAnswer,
@@ -7034,43 +6784,36 @@ var TrueFalseActivityContent = ({
7034
6784
  const contentMap = parseContentMapFromData(data);
7035
6785
  const trueFalseBodyMap = parseBodyMapFromData(data, "TRUE_FALSE");
7036
6786
  const trueFalseMaterialMap = parseMaterialMapFromData(data, "TRUE_FALSE");
7037
- const retrieveCurrentAnswerMap = () => {
7038
- let foundIndex = answer.data.findIndex(
7039
- (answerData) => answerData.type === "TRUE_FALSE"
7040
- );
7041
- return answer.data[foundIndex].answerMap;
7042
- };
7043
- const handleTrueFalseAnswerOnChange = (answer2, key, value) => {
6787
+ const handleTrueFalseAnswerOnChange = (answerMap2, key, value) => {
7044
6788
  if (isPreview) return;
7045
- const answerMap = retrieveCurrentAnswerMap();
7046
6789
  if (key === "TRUE") {
7047
- const foundFalseIndex = answerMap.falseList.findIndex(
6790
+ const foundFalseIndex = answerMap2.falseList.findIndex(
7048
6791
  (item) => item === value
7049
6792
  );
7050
6793
  if (foundFalseIndex !== -1) {
7051
- answerMap.falseList.splice(foundFalseIndex, 1);
6794
+ answerMap2.falseList.splice(foundFalseIndex, 1);
7052
6795
  }
7053
- const foundTrueIndex = answerMap.falseList.findIndex(
6796
+ const foundTrueIndex = answerMap2.falseList.findIndex(
7054
6797
  (item) => item === value
7055
6798
  );
7056
6799
  if (foundTrueIndex === -1) {
7057
- answerMap.trueList.push(value);
6800
+ answerMap2.trueList.push(value);
7058
6801
  }
7059
6802
  } else if (key === "FALSE") {
7060
- const foundTrueIndex = answerMap.trueList.findIndex(
6803
+ const foundTrueIndex = answerMap2.trueList.findIndex(
7061
6804
  (item) => item === value
7062
6805
  );
7063
6806
  if (foundTrueIndex !== -1) {
7064
- answerMap.trueList.splice(foundTrueIndex, 1);
6807
+ answerMap2.trueList.splice(foundTrueIndex, 1);
7065
6808
  }
7066
- const foundFalseIndex = answerMap.falseList.findIndex(
6809
+ const foundFalseIndex = answerMap2.falseList.findIndex(
7067
6810
  (item) => item === value
7068
6811
  );
7069
6812
  if (foundFalseIndex === -1) {
7070
- answerMap.falseList.push(value);
6813
+ answerMap2.falseList.push(value);
7071
6814
  }
7072
6815
  }
7073
- changeAnswer(answer2);
6816
+ changeAnswer(answerMap2);
7074
6817
  };
7075
6818
  return /* @__PURE__ */ jsxs32("div", { className: "flex flex-row flex-wrap", children: [
7076
6819
  /* @__PURE__ */ jsx43("div", { className: `${isFullScreen ? "w-full" : "w-full md:w-[40%]"}`, children: /* @__PURE__ */ jsx43(
@@ -7086,7 +6829,7 @@ var TrueFalseActivityContent = ({
7086
6829
  TrueFalseActivityMaterialContent_default,
7087
6830
  {
7088
6831
  uniqueValue: JSON.stringify(data.contentMap),
7089
- answer,
6832
+ answerMap,
7090
6833
  materialMap: trueFalseMaterialMap,
7091
6834
  contentMap,
7092
6835
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -7314,7 +7057,7 @@ var ActivityPreviewByData = ({
7314
7057
  }
7315
7058
  }, [data, lockedType, typeOptionList, showDifficulty]);
7316
7059
  if (!data) return;
7317
- const answer = constructAnswerBasedOnData(data);
7060
+ const answerMap = constructAnswerBasedOnData(data);
7318
7061
  return /* @__PURE__ */ jsxs36("div", { children: [
7319
7062
  showType ? /* @__PURE__ */ jsxs36(Fragment11, { children: [
7320
7063
  /* @__PURE__ */ jsxs36("div", { className: "mb-4", children: [
@@ -7335,7 +7078,7 @@ var ActivityPreviewByData = ({
7335
7078
  selectedType ? /* @__PURE__ */ jsx47("div", { className: "", children: selectedType === "ORDERING" && data["orderingBodyMap"] != null && data["orderingMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7336
7079
  OrderingActivityContent_default,
7337
7080
  {
7338
- answer,
7081
+ answerMap,
7339
7082
  changeAnswer: () => {
7340
7083
  },
7341
7084
  canAnswerQuestion: () => {
@@ -7349,7 +7092,7 @@ var ActivityPreviewByData = ({
7349
7092
  ) : selectedType === "DROPDOWN" && data["dropdownBodyMap"] != null && data["dropdownMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7350
7093
  DropdownActivityContent_default,
7351
7094
  {
7352
- answer,
7095
+ answerMap,
7353
7096
  changeAnswer: () => {
7354
7097
  },
7355
7098
  canAnswerQuestion: () => {
@@ -7363,7 +7106,7 @@ var ActivityPreviewByData = ({
7363
7106
  ) : selectedType === "MCSA" && data["MCSABodyMap"] != null && data["MCSAMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7364
7107
  MCSAActivityContent_default,
7365
7108
  {
7366
- answer,
7109
+ answerMap,
7367
7110
  changeAnswer: () => {
7368
7111
  },
7369
7112
  canAnswerQuestion: () => {
@@ -7377,7 +7120,7 @@ var ActivityPreviewByData = ({
7377
7120
  ) : selectedType === "MCMA" && data["MCMABodyMap"] != null && data["MCMAMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7378
7121
  MCMAActivityContent_default,
7379
7122
  {
7380
- answer,
7123
+ answerMap,
7381
7124
  changeAnswer: () => {
7382
7125
  },
7383
7126
  canAnswerQuestion: () => {
@@ -7391,7 +7134,7 @@ var ActivityPreviewByData = ({
7391
7134
  ) : selectedType === "MATCHING" && data["matchingBodyMap"] != null && data["matchingMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7392
7135
  MatchingActivityContent_default,
7393
7136
  {
7394
- answer,
7137
+ answerMap,
7395
7138
  changeAnswer: () => {
7396
7139
  },
7397
7140
  canAnswerQuestion: () => {
@@ -7404,7 +7147,7 @@ var ActivityPreviewByData = ({
7404
7147
  ) : selectedType === "GROUPING" && data["groupingBodyMap"] != null && data["groupingMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7405
7148
  GroupingActivityContent_default,
7406
7149
  {
7407
- answer,
7150
+ answerMap,
7408
7151
  changeAnswer: () => {
7409
7152
  },
7410
7153
  canAnswerQuestion: () => {
@@ -7417,7 +7160,7 @@ var ActivityPreviewByData = ({
7417
7160
  ) : selectedType === "FILL_IN_THE_BLANKS" && data["fillInTheBlanksBodyMap"] != null && data["fillInTheBlanksMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7418
7161
  FillInTheBlanksActivityContent_default,
7419
7162
  {
7420
- answer,
7163
+ answerMap,
7421
7164
  changeAnswer: () => {
7422
7165
  },
7423
7166
  canAnswerQuestion: () => {
@@ -7431,7 +7174,7 @@ var ActivityPreviewByData = ({
7431
7174
  ) : selectedType === "OPEN_ENDED" && data["openEndedBodyMap"] != null ? /* @__PURE__ */ jsx47(
7432
7175
  OpenEndedActivityContent_default,
7433
7176
  {
7434
- answer,
7177
+ answerMap,
7435
7178
  canAnswerQuestion: () => false,
7436
7179
  changeAnswer: () => {
7437
7180
  },
@@ -7443,7 +7186,7 @@ var ActivityPreviewByData = ({
7443
7186
  ) : selectedType === "TRUE_FALSE" && data["trueFalseBodyMap"] != null && data["trueFalseMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7444
7187
  TrueFalseActivityContent_default,
7445
7188
  {
7446
- answer,
7189
+ answerMap,
7447
7190
  changeAnswer: () => {
7448
7191
  },
7449
7192
  canAnswerQuestion: () => {
@@ -7476,135 +7219,157 @@ var ActivityPreviewByData_default = ActivityPreviewByData;
7476
7219
  // src/components/activities/ActivityPreviewByAnswerData.tsx
7477
7220
  import { useEffect as useEffect16, useState as useState25 } from "react";
7478
7221
  import { Fragment as Fragment12, jsx as jsx48, jsxs as jsxs37 } from "react/jsx-runtime";
7222
+ var ACTIVITY_TEMPLATE_LIST = [
7223
+ { type: "ORDERING", materialMap: "orderingMaterialMap" },
7224
+ { type: "DROPDOWN", materialMap: "dropdownMaterialMap" },
7225
+ { type: "MCSA", materialMap: "MCSAMaterialMap" },
7226
+ { type: "MCMA", materialMap: "MCMAMaterialMap" },
7227
+ { type: "MATCHING", materialMap: "matchingMaterialMap" },
7228
+ { type: "GROUPING", materialMap: "groupingMaterialMap" },
7229
+ {
7230
+ type: "FILL_IN_THE_BLANKS",
7231
+ materialMap: "fillInTheBlanksMaterialMap"
7232
+ },
7233
+ { type: "OPEN_ENDED", materialMap: "openEndedMaterialMap" },
7234
+ { type: "TRUE_FALSE", materialMap: "trueFalseMaterialMap" }
7235
+ ];
7479
7236
  var ActivityPreviewByAnswerData = ({
7480
7237
  data,
7238
+ answerType = null,
7481
7239
  showType = true,
7482
7240
  showDescription = true,
7483
- lockedType = null,
7484
- typeOptionList = [],
7241
+ lockedTypeList = [],
7485
7242
  showSolution = false,
7486
7243
  showEvaluationRubric = false,
7487
7244
  showDifficulty = true,
7488
7245
  isFullScreen = false,
7489
7246
  showCorrectAnswer = false
7490
7247
  }) => {
7491
- var _a;
7492
- const [key, setKey] = useState25((/* @__PURE__ */ new Date()).getTime());
7493
7248
  const [selectedType, setSelectedType] = useState25(null);
7494
7249
  const [optionList, setOptionList] = useState25([]);
7495
- const [answer, setAnswer] = useState25({ data: [] });
7250
+ const [answerMapMap, setAnswerMapMap] = useState25({});
7251
+ const [activityTemplateTypeList, setActivityTemplateTypeList] = useState25([]);
7496
7252
  useEffect16(() => {
7497
7253
  if (!data) return;
7498
- setKey((/* @__PURE__ */ new Date()).getTime());
7499
- }, [data]);
7500
- const checkAnswerMapExists = (type) => {
7501
- if (data && data.answerMap && Array.isArray(data.answerMap)) {
7502
- const foundAnswer = data.answerMap.find(
7503
- (answer2) => answer2.type === type
7254
+ let currentActivityTemplateMapList = JSON.parse(
7255
+ JSON.stringify(ACTIVITY_TEMPLATE_LIST)
7256
+ );
7257
+ if (lockedTypeList.length > 0) {
7258
+ currentActivityTemplateMapList = currentActivityTemplateMapList.filter(
7259
+ (activityTemplateMap) => lockedTypeList.includes(activityTemplateMap.type)
7504
7260
  );
7505
- return foundAnswer || null;
7506
7261
  }
7507
- return null;
7508
- };
7509
- useEffect16(() => {
7510
- if (!data) return;
7511
- const constructAnswerBasedOnData2 = () => {
7512
- const newAnswer = { data: [] };
7513
- const activityTypes = [
7514
- { type: "ORDERING", materialMap: "orderingMaterialMap" },
7515
- { type: "DROPDOWN", materialMap: "dropdownMaterialMap" },
7516
- { type: "MCSA", materialMap: "MCSAMaterialMap" },
7517
- { type: "MCMA", materialMap: "MCMAMaterialMap" },
7518
- { type: "MATCHING", materialMap: "matchingMaterialMap" },
7519
- { type: "GROUPING", materialMap: "groupingMaterialMap" },
7520
- {
7521
- type: "FILL_IN_THE_BLANKS",
7522
- materialMap: "fillInTheBlanksMaterialMap"
7523
- },
7524
- { type: "OPEN_ENDED", materialMap: "openEndedMaterialMap" },
7525
- { type: "TRUE_FALSE", materialMap: "trueFalseMaterialMap" }
7526
- ];
7527
- activityTypes.forEach(({ type, materialMap }) => {
7528
- if (data[materialMap]) {
7529
- const foundAnswer = checkAnswerMapExists(type);
7530
- const answerItem = foundAnswer || constructActivityAnswerMap(
7531
- { type },
7532
- JSON.parse(JSON.stringify(data))
7533
- );
7534
- newAnswer.data.push(answerItem);
7535
- }
7536
- });
7537
- setAnswer(newAnswer);
7538
- if (newAnswer.data.length > 0) {
7539
- if (lockedType && newAnswer.data.find((item) => item.type === lockedType)) {
7540
- setSelectedType(lockedType);
7541
- } else {
7542
- setSelectedType(newAnswer.data[0].type);
7543
- }
7262
+ const currentActivityTemplateTypeList = [];
7263
+ for (const activityTemplateMap of currentActivityTemplateMapList) {
7264
+ if (data[activityTemplateMap.materialMap]) {
7265
+ currentActivityTemplateTypeList.push(activityTemplateMap);
7544
7266
  }
7545
- };
7546
- constructAnswerBasedOnData2();
7547
- }, [data, lockedType]);
7548
- useEffect16(() => {
7549
- if (!data || !answer.data.length) return;
7550
- let currentTypeOptionList = typeOptionList || answer.data.map((item) => ({
7551
- id: item.type,
7552
- text: i18n_default.t(item.type)
7553
- }));
7554
- if (lockedType) {
7555
- currentTypeOptionList = currentTypeOptionList.filter(
7556
- (typeOption) => typeOption.id === lockedType
7557
- );
7558
7267
  }
7559
- if (showDifficulty) {
7560
- setOptionList(
7561
- currentTypeOptionList.map((typeOption) => __spreadProps(__spreadValues({}, typeOption), {
7562
- subText: i18n_default.t(
7563
- retrieveDifficultyByActivityTypeFromData(typeOption.id, data)
7268
+ setActivityTemplateTypeList(currentActivityTemplateMapList);
7269
+ }, [data, answerType, lockedTypeList]);
7270
+ useEffect16(() => {
7271
+ if (activityTemplateTypeList.length === 0) return;
7272
+ const currentOptionList = [];
7273
+ for (const activityTemplateType of activityTemplateTypeList) {
7274
+ const currentTypeOption = {
7275
+ id: activityTemplateType.type,
7276
+ value: i18n_default.t(activityTemplateType.type)
7277
+ };
7278
+ if (showDifficulty) {
7279
+ currentTypeOption.subText = i18n_default.t(
7280
+ retrieveDifficultyByActivityTypeFromData(
7281
+ activityTemplateType.type,
7282
+ data
7564
7283
  )
7565
- }))
7566
- );
7567
- } else {
7568
- setOptionList(currentTypeOptionList);
7284
+ );
7285
+ }
7286
+ currentOptionList.push(currentTypeOption);
7287
+ }
7288
+ setOptionList(currentOptionList);
7289
+ }, [activityTemplateTypeList, showDifficulty]);
7290
+ useEffect16(() => {
7291
+ if (optionList.length === 0) return;
7292
+ setSelectedType(optionList[0].id);
7293
+ }, [optionList]);
7294
+ useEffect16(() => {
7295
+ if (activityTemplateTypeList.length === 0) return;
7296
+ const currentAnswerMapMap = {};
7297
+ for (const activityTemplateMap of activityTemplateTypeList) {
7298
+ if (answerType === activityTemplateMap.type) {
7299
+ currentAnswerMapMap[activityTemplateMap.type] = data.answerMap;
7300
+ } else {
7301
+ currentAnswerMapMap[activityTemplateMap.type] = constructActivityAnswerMap(
7302
+ { type: activityTemplateMap.type },
7303
+ JSON.parse(JSON.stringify(data))
7304
+ );
7305
+ }
7569
7306
  }
7570
- }, [data, answer.data, lockedType, typeOptionList, showDifficulty]);
7307
+ setAnswerMapMap(currentAnswerMapMap);
7308
+ }, [activityTemplateTypeList]);
7571
7309
  const RenderSelectedActivityContent = () => {
7310
+ if (!selectedType) return null;
7572
7311
  const commonProps = {
7573
- answer,
7312
+ answerMap: answerMapMap[selectedType],
7574
7313
  data,
7575
7314
  canAnswerQuestion: () => true,
7576
- // changeAnswer: (newAnswer: Answer) =>
7577
- // setAnswer(JSON.parse(JSON.stringify(newAnswer))),
7578
7315
  changeAnswer: () => {
7579
7316
  },
7580
7317
  isPreview: true,
7581
7318
  showCorrectAnswer,
7582
7319
  isFullScreen
7583
7320
  };
7321
+ const isEmpty = answerMapMap[selectedType].isEmpty;
7584
7322
  switch (selectedType) {
7585
7323
  case "ORDERING":
7586
- return data.orderingBodyMap && data.orderingMaterialMap ? /* @__PURE__ */ jsx48(OrderingActivityContent_default, __spreadValues({}, commonProps)) : null;
7324
+ return data.orderingBodyMap && data.orderingMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7325
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7326
+ /* @__PURE__ */ jsx48(OrderingActivityContent_default, __spreadValues({}, commonProps))
7327
+ ] }) : null;
7587
7328
  case "DROPDOWN":
7588
- return data.dropdownBodyMap && data.dropdownMaterialMap ? /* @__PURE__ */ jsx48(DropdownActivityContent_default, __spreadValues({}, commonProps)) : null;
7329
+ return data.dropdownBodyMap && data.dropdownMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7330
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7331
+ /* @__PURE__ */ jsx48(DropdownActivityContent_default, __spreadValues({}, commonProps))
7332
+ ] }) : null;
7589
7333
  case "MCSA":
7590
- return data.MCSABodyMap && data.MCSAMaterialMap ? /* @__PURE__ */ jsx48(MCSAActivityContent_default, __spreadValues({}, commonProps)) : null;
7334
+ return data.MCSABodyMap && data.MCSAMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7335
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7336
+ /* @__PURE__ */ jsx48(MCSAActivityContent_default, __spreadValues({}, commonProps))
7337
+ ] }) : null;
7591
7338
  case "MCMA":
7592
- return data.MCMABodyMap && data.MCMAMaterialMap ? /* @__PURE__ */ jsx48(MCMAActivityContent_default, __spreadValues({}, commonProps)) : null;
7339
+ return data.MCMABodyMap && data.MCMAMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7340
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7341
+ /* @__PURE__ */ jsx48(MCMAActivityContent_default, __spreadValues({}, commonProps))
7342
+ ] }) : null;
7593
7343
  case "MATCHING":
7594
- return data.matchingBodyMap && data.matchingMaterialMap ? /* @__PURE__ */ jsx48(MatchingActivityContent_default, __spreadValues({}, commonProps)) : null;
7344
+ return data.matchingBodyMap && data.matchingMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7345
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7346
+ /* @__PURE__ */ jsx48(MatchingActivityContent_default, __spreadValues({}, commonProps))
7347
+ ] }) : null;
7595
7348
  case "GROUPING":
7596
- return data.groupingBodyMap && data.groupingMaterialMap ? /* @__PURE__ */ jsx48(GroupingActivityContent_default, __spreadValues({}, commonProps)) : null;
7349
+ return data.groupingBodyMap && data.groupingMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7350
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7351
+ /* @__PURE__ */ jsx48(GroupingActivityContent_default, __spreadValues({}, commonProps))
7352
+ ] }) : null;
7597
7353
  case "FILL_IN_THE_BLANKS":
7598
- return data.fillInTheBlanksBodyMap && data.fillInTheBlanksMaterialMap ? /* @__PURE__ */ jsx48(FillInTheBlanksActivityContent_default, __spreadValues({}, commonProps)) : null;
7354
+ return data.fillInTheBlanksBodyMap && data.fillInTheBlanksMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7355
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7356
+ /* @__PURE__ */ jsx48(FillInTheBlanksActivityContent_default, __spreadValues({}, commonProps))
7357
+ ] }) : null;
7599
7358
  case "OPEN_ENDED":
7600
- return data.openEndedBodyMap ? /* @__PURE__ */ jsx48(
7601
- OpenEndedActivityContent_default,
7602
- __spreadProps(__spreadValues({}, commonProps), {
7603
- showMaterialContent: true
7604
- })
7605
- ) : null;
7359
+ return data.openEndedBodyMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7360
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7361
+ /* @__PURE__ */ jsx48(
7362
+ OpenEndedActivityContent_default,
7363
+ __spreadProps(__spreadValues({}, commonProps), {
7364
+ showMaterialContent: true
7365
+ })
7366
+ )
7367
+ ] }) : null;
7606
7368
  case "TRUE_FALSE":
7607
- return data.trueFalseBodyMap && data.trueFalseMaterialMap ? /* @__PURE__ */ jsx48(TrueFalseActivityContent_default, __spreadValues({}, commonProps)) : null;
7369
+ return data.trueFalseBodyMap && data.trueFalseMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7370
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7371
+ /* @__PURE__ */ jsx48(TrueFalseActivityContent_default, __spreadValues({}, commonProps))
7372
+ ] }) : null;
7608
7373
  default:
7609
7374
  return null;
7610
7375
  }
@@ -7627,10 +7392,7 @@ var ActivityPreviewByAnswerData = ({
7627
7392
  ] }),
7628
7393
  /* @__PURE__ */ jsx48(DividerLine_default, {})
7629
7394
  ] }) : null,
7630
- /* @__PURE__ */ jsxs37("div", { className: "flex flex-col my-2 w-full p-5", children: [
7631
- ((_a = answer == null ? void 0 : answer.data[0]) == null ? void 0 : _a.isEmpty) ? /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}) : null,
7632
- selectedType ? /* @__PURE__ */ jsx48("div", { children: RenderSelectedActivityContent() }, selectedType) : null
7633
- ] }),
7395
+ /* @__PURE__ */ jsx48("div", { className: "flex flex-col my-2 w-full p-5", children: RenderSelectedActivityContent() }),
7634
7396
  selectedType && showSolution ? /* @__PURE__ */ jsx48("div", { className: "my-4", children: /* @__PURE__ */ jsx48(
7635
7397
  ActivitySolutionContent_default,
7636
7398
  {
@@ -7645,7 +7407,7 @@ var ActivityPreviewByAnswerData = ({
7645
7407
  data
7646
7408
  }
7647
7409
  ) }) : null
7648
- ] }, key);
7410
+ ] });
7649
7411
  };
7650
7412
  var ActivityPreviewByAnswerData_default = ActivityPreviewByAnswerData;
7651
7413
 
@@ -10822,7 +10584,6 @@ export {
10822
10584
  calculateLevenshteinDistance,
10823
10585
  calculateStartDateOfWeek,
10824
10586
  checkActivityAnswerState,
10825
- checkIfAnswerIsEmpty,
10826
10587
  constructActivityAnswerMap,
10827
10588
  constructActivityAnswerStateList,
10828
10589
  constructActivityData,