catchup-library-web 2.0.6 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/index.d.mts +22 -22
  2. package/dist/index.d.ts +22 -22
  3. package/dist/index.js +286 -472
  4. package/dist/index.mjs +286 -472
  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 +49 -84
  28. package/src/utilization/ManagementUtilization.ts +1 -1
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,7 +2181,7 @@ 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", "");
@@ -2819,82 +2803,63 @@ var constructActivityData = (activityTemplateType, contentMap, bodyMap, material
2819
2803
  return constructedData;
2820
2804
  };
2821
2805
  var constructAnswerBasedOnData = (data) => {
2822
- const answer = { data: [] };
2823
2806
  if (Object.keys(data).find((dataKey) => dataKey === "orderingMaterialMap")) {
2824
- answer.data.push(
2825
- constructActivityAnswerMap(
2826
- { type: "ORDERING" },
2827
- JSON.parse(JSON.stringify(data))
2828
- )
2807
+ return constructActivityAnswerMap(
2808
+ { type: "ORDERING" },
2809
+ JSON.parse(JSON.stringify(data))
2829
2810
  );
2830
2811
  }
2831
2812
  if (Object.keys(data).find((dataKey) => dataKey === "dropdownMaterialMap")) {
2832
- answer.data.push(
2833
- constructActivityAnswerMap(
2834
- { type: "DROPDOWN" },
2835
- JSON.parse(JSON.stringify(data))
2836
- )
2813
+ return constructActivityAnswerMap(
2814
+ { type: "DROPDOWN" },
2815
+ JSON.parse(JSON.stringify(data))
2837
2816
  );
2838
2817
  }
2839
2818
  if (Object.keys(data).find((dataKey) => dataKey === "MCSAMaterialMap")) {
2840
- answer.data.push(
2841
- constructActivityAnswerMap(
2842
- { type: "MCSA" },
2843
- JSON.parse(JSON.stringify(data))
2844
- )
2819
+ return constructActivityAnswerMap(
2820
+ { type: "MCSA" },
2821
+ JSON.parse(JSON.stringify(data))
2845
2822
  );
2846
2823
  }
2847
2824
  if (Object.keys(data).find((dataKey) => dataKey === "MCMAMaterialMap")) {
2848
- answer.data.push(
2849
- constructActivityAnswerMap(
2850
- { type: "MCMA" },
2851
- JSON.parse(JSON.stringify(data))
2852
- )
2825
+ return constructActivityAnswerMap(
2826
+ { type: "MCMA" },
2827
+ JSON.parse(JSON.stringify(data))
2853
2828
  );
2854
2829
  }
2855
2830
  if (Object.keys(data).find((dataKey) => dataKey === "matchingMaterialMap")) {
2856
- answer.data.push(
2857
- constructActivityAnswerMap(
2858
- { type: "MATCHING" },
2859
- JSON.parse(JSON.stringify(data))
2860
- )
2831
+ return constructActivityAnswerMap(
2832
+ { type: "MATCHING" },
2833
+ JSON.parse(JSON.stringify(data))
2861
2834
  );
2862
2835
  }
2863
2836
  if (Object.keys(data).find((dataKey) => dataKey === "groupingMaterialMap")) {
2864
- answer.data.push(
2865
- constructActivityAnswerMap(
2866
- { type: "GROUPING" },
2867
- JSON.parse(JSON.stringify(data))
2868
- )
2837
+ return constructActivityAnswerMap(
2838
+ { type: "GROUPING" },
2839
+ JSON.parse(JSON.stringify(data))
2869
2840
  );
2870
2841
  }
2871
2842
  if (Object.keys(data).find(
2872
2843
  (dataKey) => dataKey === "fillInTheBlanksMaterialMap"
2873
2844
  )) {
2874
- answer.data.push(
2875
- constructActivityAnswerMap(
2876
- { type: "FILL_IN_THE_BLANKS" },
2877
- JSON.parse(JSON.stringify(data))
2878
- )
2845
+ return constructActivityAnswerMap(
2846
+ { type: "FILL_IN_THE_BLANKS" },
2847
+ JSON.parse(JSON.stringify(data))
2879
2848
  );
2880
2849
  }
2881
2850
  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
- )
2851
+ return constructActivityAnswerMap(
2852
+ { type: "OPEN_ENDED" },
2853
+ JSON.parse(JSON.stringify(data))
2887
2854
  );
2888
2855
  }
2889
2856
  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
- )
2857
+ return constructActivityAnswerMap(
2858
+ { type: "TRUE_FALSE" },
2859
+ JSON.parse(JSON.stringify(data))
2895
2860
  );
2896
2861
  }
2897
- return answer;
2862
+ return {};
2898
2863
  };
2899
2864
  var constructActivityItemListBodyOnly = (bodyMap) => {
2900
2865
  const itemList = [];
@@ -4445,7 +4410,7 @@ var ShowMaterialMediaByContentType_default = ShowMaterialMediaByContentType;
4445
4410
  import { jsx as jsx25, jsxs as jsxs15 } from "react/jsx-runtime";
4446
4411
  var DropdownActivityMaterialContent = ({
4447
4412
  uniqueValue,
4448
- answer,
4413
+ answerMap,
4449
4414
  materialMap,
4450
4415
  contentMap,
4451
4416
  checkCanAnswerQuestion,
@@ -4456,27 +4421,16 @@ var DropdownActivityMaterialContent = ({
4456
4421
  const [updated, setUpdated] = useState15(false);
4457
4422
  useEffect6(() => {
4458
4423
  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(
4424
+ answerMap = Object.keys(materialMap).map(
4465
4425
  (materialMapKey, index) => Object.keys(materialMap[materialMapKey])[0]
4466
4426
  );
4467
- onChange(answer, 0, Object.keys(materialMap[0])[0]);
4427
+ onChange(answerMap, 0, Object.keys(materialMap[0])[0]);
4468
4428
  setUpdated(true);
4469
4429
  }, [showCorrectAnswer]);
4470
4430
  useEffect6(() => {
4471
4431
  if (!updated) return;
4472
4432
  setUpdated(false);
4473
4433
  }, [updated]);
4474
- const retrieveAnswerMap = () => {
4475
- const foundIndex = answer.data.findIndex(
4476
- (answerData) => answerData.type === "DROPDOWN"
4477
- );
4478
- return answer.data[foundIndex].answerMap;
4479
- };
4480
4434
  const checkAnswerState = (correctAnswer, learnerAnswer) => {
4481
4435
  if (!isPreview) return null;
4482
4436
  if (correctAnswer === learnerAnswer) {
@@ -4484,7 +4438,6 @@ var DropdownActivityMaterialContent = ({
4484
4438
  }
4485
4439
  return "INCORRECT";
4486
4440
  };
4487
- const answerMap = retrieveAnswerMap();
4488
4441
  return /* @__PURE__ */ jsxs15("div", { className: "flex flex-row flex-wrap items-center", children: [
4489
4442
  /* @__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
4443
  /* @__PURE__ */ jsx25("div", { className: "hidden md:contents", children: /* @__PURE__ */ jsx25(DividerLine_default, {}) }),
@@ -4526,7 +4479,11 @@ var DropdownActivityMaterialContent = ({
4526
4479
  value: materialOption
4527
4480
  })),
4528
4481
  onChange: (e) => {
4529
- onChange(answer, materialKey, e.target.value);
4482
+ onChange(
4483
+ answerMap,
4484
+ materialKey,
4485
+ e.target.value
4486
+ );
4530
4487
  }
4531
4488
  }
4532
4489
  ) }) : /* @__PURE__ */ jsx25(
@@ -4556,7 +4513,7 @@ var DropdownActivityMaterialContent = ({
4556
4513
  ) }, index2),
4557
4514
  onClick: (e) => {
4558
4515
  onChange(
4559
- answer,
4516
+ answerMap,
4560
4517
  materialKey,
4561
4518
  e.target.currentSrc
4562
4519
  );
@@ -4600,7 +4557,7 @@ var DropdownActivityMaterialContent_default = DropdownActivityMaterialContent;
4600
4557
  import { useState as useState16, useEffect as useEffect7 } from "react";
4601
4558
  import { jsx as jsx26, jsxs as jsxs16 } from "react/jsx-runtime";
4602
4559
  var DropdownActivityContent = ({
4603
- answer,
4560
+ answerMap,
4604
4561
  data,
4605
4562
  canAnswerQuestion,
4606
4563
  changeAnswer,
@@ -4611,35 +4568,15 @@ var DropdownActivityContent = ({
4611
4568
  const contentMap = parseContentMapFromData(data);
4612
4569
  const dropdownBodyMap = parseBodyMapFromData(data, "DROPDOWN");
4613
4570
  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
- }
4571
+ const [currentAnswerMap, setCurrentAnswerMap] = useState16(answerMap);
4623
4572
  useEffect7(() => {
4624
- setCurrentAnswerMap(retrieveCurrentAnswerMap());
4625
- }, [answer]);
4626
- const handleDropdownAnswerOnChange = (answerObj, key, value) => {
4573
+ setCurrentAnswerMap(answerMap);
4574
+ }, [answerMap]);
4575
+ const handleDropdownAnswerOnChange = (answerMap2, key, value) => {
4627
4576
  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);
4577
+ answerMap2 = __spreadProps(__spreadValues({}, currentAnswerMap), { [key]: value });
4578
+ setCurrentAnswerMap(answerMap2);
4579
+ changeAnswer(answerMap2);
4643
4580
  };
4644
4581
  return /* @__PURE__ */ jsxs16("div", { className: "flex flex-row flex-wrap", children: [
4645
4582
  /* @__PURE__ */ jsx26("div", { className: `${isFullScreen ? "w-full" : "w-full md:w-[60%]"}`, children: /* @__PURE__ */ jsx26(
@@ -4657,7 +4594,7 @@ var DropdownActivityContent = ({
4657
4594
  DropdownActivityMaterialContent_default,
4658
4595
  {
4659
4596
  uniqueValue: JSON.stringify(data.contentMap),
4660
- answer,
4597
+ answerMap,
4661
4598
  materialMap: dropdownMaterialMap,
4662
4599
  contentMap,
4663
4600
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -4702,7 +4639,7 @@ var InputWithSpecialExpression_default = InputWithSpecialExpression;
4702
4639
  import { jsx as jsx28, jsxs as jsxs17 } from "react/jsx-runtime";
4703
4640
  var FillInTheBlanksActivityMaterialContent = ({
4704
4641
  uniqueValue,
4705
- answer,
4642
+ answerMap,
4706
4643
  optionList,
4707
4644
  materialMap,
4708
4645
  contentMap,
@@ -4732,22 +4669,11 @@ var FillInTheBlanksActivityMaterialContent = ({
4732
4669
  }, [optionList]);
4733
4670
  useEffect8(() => {
4734
4671
  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(
4672
+ answerMap = Object.keys(materialMap).map(
4741
4673
  (materialMapKey) => JSON.parse(materialMap[materialMapKey])[0]
4742
4674
  );
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
- };
4675
+ onChange(answerMap, 0, JSON.parse(materialMap[0])[0]);
4676
+ }, [showCorrectAnswer]);
4751
4677
  const checkAnswerState = (correctAnswerList, learnerAnswer) => {
4752
4678
  if (!isPreview) return null;
4753
4679
  const foundIndex = correctAnswerList.findIndex(
@@ -4781,7 +4707,7 @@ var FillInTheBlanksActivityMaterialContent = ({
4781
4707
  };
4782
4708
  const handleMouseUp = () => {
4783
4709
  if (dropTargetIndex !== null && draggedOption !== null) {
4784
- onChange(answer, dropTargetIndex, draggedOption);
4710
+ onChange(answerMap, dropTargetIndex, draggedOption);
4785
4711
  }
4786
4712
  setDraggedOption(null);
4787
4713
  setDropTargetIndex(null);
@@ -4812,7 +4738,7 @@ var FillInTheBlanksActivityMaterialContent = ({
4812
4738
  };
4813
4739
  const handleTouchEnd = () => {
4814
4740
  if (dropTargetIndex !== null && draggedOption !== null) {
4815
- onChange(answer, dropTargetIndex, draggedOption);
4741
+ onChange(answerMap, dropTargetIndex, draggedOption);
4816
4742
  }
4817
4743
  setDraggedOption(null);
4818
4744
  setDropTargetIndex(null);
@@ -4825,11 +4751,10 @@ var FillInTheBlanksActivityMaterialContent = ({
4825
4751
  };
4826
4752
  const handleDropZoneClick = (index) => {
4827
4753
  if (selectedOption !== null) {
4828
- onChange(answer, index, selectedOption);
4754
+ onChange(answerMap, index, selectedOption);
4829
4755
  setSelectedOption(null);
4830
4756
  }
4831
4757
  };
4832
- const answerMap = retrieveAnswerMap();
4833
4758
  return /* @__PURE__ */ jsxs17(
4834
4759
  "div",
4835
4760
  {
@@ -4968,7 +4893,7 @@ var FillInTheBlanksActivityMaterialContent = ({
4968
4893
  onClick: (e) => {
4969
4894
  if (answerMap[materialKey]) {
4970
4895
  e.stopPropagation();
4971
- onChange(answer, materialKey, "");
4896
+ onChange(answerMap, materialKey, "");
4972
4897
  }
4973
4898
  },
4974
4899
  children: answerMap[materialKey] ? /* @__PURE__ */ jsx28(
@@ -5007,7 +4932,7 @@ var FillInTheBlanksActivityMaterialContent = ({
5007
4932
  className: "flex-1 cursor-pointer",
5008
4933
  onClick: (e) => {
5009
4934
  e.stopPropagation();
5010
- onChange(answer, materialKey, "");
4935
+ onChange(answerMap, materialKey, "");
5011
4936
  },
5012
4937
  children: /* @__PURE__ */ jsx28(
5013
4938
  ShowMaterialMediaByContentType_default,
@@ -5043,7 +4968,7 @@ var FillInTheBlanksActivityMaterialContent_default = FillInTheBlanksActivityMate
5043
4968
  import { useState as useState18, useEffect as useEffect9 } from "react";
5044
4969
  import { jsx as jsx29, jsxs as jsxs18 } from "react/jsx-runtime";
5045
4970
  var FillInTheBlanksActivityContent = ({
5046
- answer,
4971
+ answerMap,
5047
4972
  data,
5048
4973
  canAnswerQuestion,
5049
4974
  changeAnswer,
@@ -5061,18 +4986,10 @@ var FillInTheBlanksActivityContent = ({
5061
4986
  "FILL_IN_THE_BLANKS"
5062
4987
  );
5063
4988
  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
- }
4989
+ const [currentAnswerMap, setCurrentAnswerMap] = useState18(answerMap);
5073
4990
  useEffect9(() => {
5074
- setCurrentAnswerMap(retrieveCurrentAnswerMap());
5075
- }, [answer]);
4991
+ setCurrentAnswerMap(answerMap);
4992
+ }, [answerMap]);
5076
4993
  const constructAnswerOptionList = () => {
5077
4994
  const optionList = [];
5078
4995
  Object.keys(fillInTheBlanksMaterialMap).forEach((key) => {
@@ -5091,23 +5008,11 @@ var FillInTheBlanksActivityContent = ({
5091
5008
  });
5092
5009
  return optionList;
5093
5010
  };
5094
- const handleFillInTheBlanksAnswerOnChange = (answerObj, key, value) => {
5011
+ const handleFillInTheBlanksAnswerOnChange = (answerMap2, key, value) => {
5095
5012
  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);
5013
+ answerMap2 = __spreadProps(__spreadValues({}, currentAnswerMap), { [key]: value });
5014
+ setCurrentAnswerMap(answerMap2);
5015
+ changeAnswer(answerMap2);
5111
5016
  };
5112
5017
  return /* @__PURE__ */ jsxs18("div", { className: "flex flex-row flex-wrap", children: [
5113
5018
  /* @__PURE__ */ jsx29("div", { className: `${isFullScreen ? "w-full" : "w-full md:w-[60%]"}`, children: /* @__PURE__ */ jsx29(
@@ -5125,7 +5030,7 @@ var FillInTheBlanksActivityContent = ({
5125
5030
  FillInTheBlanksActivityMaterialContent_default,
5126
5031
  {
5127
5032
  uniqueValue: JSON.stringify(data.contentMap),
5128
- answer,
5033
+ answerMap,
5129
5034
  optionList: constructAnswerOptionList(),
5130
5035
  materialMap: fillInTheBlanksMaterialMap,
5131
5036
  contentMap,
@@ -5145,7 +5050,7 @@ import { InlineMath as InlineMath5 } from "react-katex";
5145
5050
  import { Fragment as Fragment3, jsx as jsx30, jsxs as jsxs19 } from "react/jsx-runtime";
5146
5051
  var GroupingActivityMaterialContent = ({
5147
5052
  uniqueValue,
5148
- answer,
5053
+ answerMap,
5149
5054
  materialMap,
5150
5055
  contentMap,
5151
5056
  checkCanAnswerQuestion,
@@ -5195,10 +5100,8 @@ var GroupingActivityMaterialContent = ({
5195
5100
  }, [materialMap, isShuffled]);
5196
5101
  useEffect10(() => {
5197
5102
  if (!showCorrectAnswer) return;
5198
- answer.data.find(
5199
- (answerData) => answerData.type === "GROUPING"
5200
- ).answerMap = materialMap;
5201
- }, [showCorrectAnswer, answer, materialMap]);
5103
+ answerMap = materialMap;
5104
+ }, [showCorrectAnswer, answerMap, materialMap]);
5202
5105
  useEffect10(() => {
5203
5106
  if (!dropTargetKey || !dropZoneRefs.current[dropTargetKey]) return;
5204
5107
  const dropZoneElement = dropZoneRefs.current[dropTargetKey];
@@ -5243,13 +5146,6 @@ var GroupingActivityMaterialContent = ({
5243
5146
  };
5244
5147
  requestAnimationFrame(animate);
5245
5148
  }, [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
5149
  const retrieveFilteredMaterialList = (answerMap2) => {
5254
5150
  const selectedValueList = [];
5255
5151
  Object.keys(answerMap2).forEach((key) => {
@@ -5294,7 +5190,7 @@ var GroupingActivityMaterialContent = ({
5294
5190
  };
5295
5191
  const handleMouseUp = () => {
5296
5192
  if (dropTargetKey !== null && draggedValue !== null) {
5297
- onChange(answer, dropTargetKey, draggedValue, null);
5193
+ onChange(answerMap, dropTargetKey, draggedValue, null);
5298
5194
  }
5299
5195
  setDraggedValue(null);
5300
5196
  setDropTargetKey(null);
@@ -5326,7 +5222,7 @@ var GroupingActivityMaterialContent = ({
5326
5222
  };
5327
5223
  const handleTouchEnd = () => {
5328
5224
  if (dropTargetKey !== null && draggedValue !== null) {
5329
- onChange(answer, dropTargetKey, draggedValue, null);
5225
+ onChange(answerMap, dropTargetKey, draggedValue, null);
5330
5226
  }
5331
5227
  setDraggedValue(null);
5332
5228
  setDropTargetKey(null);
@@ -5340,11 +5236,10 @@ var GroupingActivityMaterialContent = ({
5340
5236
  };
5341
5237
  const handleDropZoneClick = (answerMapKey) => {
5342
5238
  if (selectedValue !== null) {
5343
- onChange(answer, answerMapKey, selectedValue, null);
5239
+ onChange(answerMap, answerMapKey, selectedValue, null);
5344
5240
  setSelectedValue(null);
5345
5241
  }
5346
5242
  };
5347
- const answerMap = retrieveAnswerMap();
5348
5243
  const filteredMaterialList = retrieveFilteredMaterialList(answerMap);
5349
5244
  return /* @__PURE__ */ jsxs19("div", { onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, children: [
5350
5245
  draggedValue && mousePosition.x > 0 && /* @__PURE__ */ jsx30(
@@ -5492,7 +5387,7 @@ var GroupingActivityMaterialContent = ({
5492
5387
  e.stopPropagation();
5493
5388
  if (checkCanAnswerQuestion()) {
5494
5389
  onChange(
5495
- answer,
5390
+ answerMap,
5496
5391
  answerMapKey,
5497
5392
  null,
5498
5393
  answerMapIndex
@@ -5539,7 +5434,7 @@ var GroupingActivityMaterialContent_default = GroupingActivityMaterialContent;
5539
5434
  // src/components/activities/GroupingActivityContent.tsx
5540
5435
  import { Fragment as Fragment4, jsx as jsx31, jsxs as jsxs20 } from "react/jsx-runtime";
5541
5436
  var GroupingActivityContent = ({
5542
- answer,
5437
+ answerMap,
5543
5438
  data,
5544
5439
  canAnswerQuestion,
5545
5440
  changeAnswer,
@@ -5549,18 +5444,14 @@ var GroupingActivityContent = ({
5549
5444
  const contentMap = parseContentMapFromData(data);
5550
5445
  const groupingBodyMap = parseBodyMapFromData(data, "GROUPING");
5551
5446
  const groupingMaterialMap = parseMaterialMapFromData(data, "GROUPING");
5552
- const handleGroupingAnswerOnChange = (answer2, key, value, index) => {
5447
+ const handleGroupingAnswerOnChange = (answerMap2, key, value, index) => {
5553
5448
  if (isPreview) return;
5554
- let foundIndex = answer2.data.findIndex(
5555
- (answerData) => answerData.type === "GROUPING"
5556
- );
5557
- const answerMap = answer2.data[foundIndex].answerMap;
5558
5449
  if (value) {
5559
- answerMap[key].push(value);
5450
+ answerMap2[key].push(value);
5560
5451
  } else {
5561
- answerMap[key].splice(index, 1);
5452
+ answerMap2[key].splice(index, 1);
5562
5453
  }
5563
- changeAnswer(answer2);
5454
+ changeAnswer(answerMap2);
5564
5455
  };
5565
5456
  return /* @__PURE__ */ jsxs20(Fragment4, { children: [
5566
5457
  /* @__PURE__ */ jsx31(
@@ -5575,7 +5466,7 @@ var GroupingActivityContent = ({
5575
5466
  GroupingActivityMaterialContent_default,
5576
5467
  {
5577
5468
  uniqueValue: JSON.stringify(data.contentMap),
5578
- answer,
5469
+ answerMap,
5579
5470
  materialMap: groupingMaterialMap,
5580
5471
  contentMap,
5581
5472
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -5594,7 +5485,7 @@ import { InlineMath as InlineMath6 } from "react-katex";
5594
5485
  import { Fragment as Fragment5, jsx as jsx32, jsxs as jsxs21 } from "react/jsx-runtime";
5595
5486
  var MatchingActivityMaterialContent = ({
5596
5487
  uniqueValue,
5597
- answer,
5488
+ answerMap,
5598
5489
  materialMap,
5599
5490
  contentMap,
5600
5491
  checkCanAnswerQuestion,
@@ -5642,10 +5533,8 @@ var MatchingActivityMaterialContent = ({
5642
5533
  }, [materialMap, isShuffled]);
5643
5534
  useEffect11(() => {
5644
5535
  if (!showCorrectAnswer) return;
5645
- answer.data.find(
5646
- (answerData) => answerData.type === "MATCHING"
5647
- ).answerMap = materialMap;
5648
- }, [showCorrectAnswer, answer, materialMap]);
5536
+ answerMap = materialMap;
5537
+ }, [showCorrectAnswer]);
5649
5538
  useEffect11(() => {
5650
5539
  if (!dropTargetKey || !dropZoneRefs.current[dropTargetKey]) return;
5651
5540
  const dropZoneElement = dropZoneRefs.current[dropTargetKey];
@@ -5690,12 +5579,6 @@ var MatchingActivityMaterialContent = ({
5690
5579
  };
5691
5580
  requestAnimationFrame(animate);
5692
5581
  }, [dropTargetKey]);
5693
- const retrieveAnswerMap = () => {
5694
- const foundIndex = answer.data.findIndex(
5695
- (answerData) => answerData.type === "MATCHING"
5696
- );
5697
- return answer.data[foundIndex].answerMap;
5698
- };
5699
5582
  const retrieveFilteredMaterialList = (answerMap2) => {
5700
5583
  const selectedValueList = [];
5701
5584
  Object.keys(answerMap2).forEach((key) => {
@@ -5734,7 +5617,7 @@ var MatchingActivityMaterialContent = ({
5734
5617
  };
5735
5618
  const handleMouseUp = () => {
5736
5619
  if (dropTargetKey !== null && draggedValue !== null) {
5737
- onChange(answer, dropTargetKey, draggedValue);
5620
+ onChange(answerMap, dropTargetKey, draggedValue);
5738
5621
  }
5739
5622
  setDraggedValue(null);
5740
5623
  setDropTargetKey(null);
@@ -5766,7 +5649,7 @@ var MatchingActivityMaterialContent = ({
5766
5649
  };
5767
5650
  const handleTouchEnd = () => {
5768
5651
  if (dropTargetKey !== null && draggedValue !== null) {
5769
- onChange(answer, dropTargetKey, draggedValue);
5652
+ onChange(answerMap, dropTargetKey, draggedValue);
5770
5653
  }
5771
5654
  setDraggedValue(null);
5772
5655
  setDropTargetKey(null);
@@ -5780,11 +5663,10 @@ var MatchingActivityMaterialContent = ({
5780
5663
  };
5781
5664
  const handleDropZoneClick = (answerMapKey) => {
5782
5665
  if (selectedValue !== null) {
5783
- onChange(answer, answerMapKey, selectedValue);
5666
+ onChange(answerMap, answerMapKey, selectedValue);
5784
5667
  setSelectedValue(null);
5785
5668
  }
5786
5669
  };
5787
- const answerMap = retrieveAnswerMap();
5788
5670
  const filteredMaterialList = retrieveFilteredMaterialList(answerMap);
5789
5671
  return /* @__PURE__ */ jsxs21("div", { onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, children: [
5790
5672
  draggedValue && mousePosition.x > 0 && /* @__PURE__ */ jsx32(
@@ -5931,7 +5813,7 @@ var MatchingActivityMaterialContent = ({
5931
5813
  onClick: (e) => {
5932
5814
  e.stopPropagation();
5933
5815
  if (checkCanAnswerQuestion() && answerMap[answerMapKey]) {
5934
- onChange(answer, answerMapKey, null);
5816
+ onChange(answerMap, answerMapKey, null);
5935
5817
  setSelectedValue(null);
5936
5818
  }
5937
5819
  },
@@ -5966,7 +5848,7 @@ var MatchingActivityMaterialContent_default = MatchingActivityMaterialContent;
5966
5848
  // src/components/activities/MatchingActivityContent.tsx
5967
5849
  import { Fragment as Fragment6, jsx as jsx33, jsxs as jsxs22 } from "react/jsx-runtime";
5968
5850
  var MatchingActivityContent = ({
5969
- answer,
5851
+ answerMap,
5970
5852
  data,
5971
5853
  canAnswerQuestion,
5972
5854
  changeAnswer,
@@ -5976,14 +5858,10 @@ var MatchingActivityContent = ({
5976
5858
  const contentMap = parseContentMapFromData(data);
5977
5859
  const matchingBodyMap = parseBodyMapFromData(data, "MATCHING");
5978
5860
  const matchingMaterialMap = parseMaterialMapFromData(data, "MATCHING");
5979
- const handleMatchingAnswerOnChange = (answer2, key, value) => {
5861
+ const handleMatchingAnswerOnChange = (answerMap2, key, value) => {
5980
5862
  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);
5863
+ answerMap2[key] = value;
5864
+ changeAnswer(answerMap2);
5987
5865
  };
5988
5866
  return /* @__PURE__ */ jsxs22(Fragment6, { children: [
5989
5867
  /* @__PURE__ */ jsx33(
@@ -5998,7 +5876,7 @@ var MatchingActivityContent = ({
5998
5876
  MatchingActivityMaterialContent_default,
5999
5877
  {
6000
5878
  uniqueValue: JSON.stringify(data.contentMap),
6001
- answer,
5879
+ answerMap,
6002
5880
  materialMap: matchingMaterialMap,
6003
5881
  contentMap,
6004
5882
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -6016,19 +5894,13 @@ import { InlineMath as InlineMath7 } from "react-katex";
6016
5894
  import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
6017
5895
  var MCMAActivityMaterialContent = ({
6018
5896
  uniqueValue,
6019
- answer,
5897
+ answerMap,
6020
5898
  materialMap,
6021
5899
  contentMap,
6022
5900
  checkCanAnswerQuestion,
6023
5901
  onChange,
6024
5902
  isPreview
6025
5903
  }) => {
6026
- const retrieveAnswerMap = () => {
6027
- const foundIndex = answer.data.findIndex(
6028
- (answerData) => answerData.type === "MCMA"
6029
- );
6030
- return answer.data[foundIndex].answerMap;
6031
- };
6032
5904
  const retrieveCorrectAnswerList = () => {
6033
5905
  return JSON.parse(Object.keys(materialMap)[0]);
6034
5906
  };
@@ -6043,7 +5915,6 @@ var MCMAActivityMaterialContent = ({
6043
5915
  }
6044
5916
  return "INCORRECT";
6045
5917
  };
6046
- const answerMap = retrieveAnswerMap();
6047
5918
  const correctAnswerList = retrieveCorrectAnswerList();
6048
5919
  return Object.keys(materialMap).map((materialKey, index) => {
6049
5920
  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 +5938,7 @@ var MCMAActivityMaterialContent = ({
6067
5938
  {
6068
5939
  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
5940
  onClick: () => {
6070
- onChange(answer, materialKey, materialSubKey);
5941
+ onChange(answerMap, materialKey, materialSubKey);
6071
5942
  },
6072
5943
  children: [
6073
5944
  /* @__PURE__ */ jsx34(
@@ -6121,7 +5992,7 @@ var MCMAActivityMaterialContent_default = MCMAActivityMaterialContent;
6121
5992
  // src/components/activities/MCMAActivityContent.tsx
6122
5993
  import { jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
6123
5994
  var MCMAActivityContent = ({
6124
- answer,
5995
+ answerMap,
6125
5996
  data,
6126
5997
  canAnswerQuestion,
6127
5998
  changeAnswer,
@@ -6131,21 +6002,17 @@ var MCMAActivityContent = ({
6131
6002
  const contentMap = parseContentMapFromData(data);
6132
6003
  const MCMABodyMap = parseBodyMapFromData(data, "MCMA");
6133
6004
  const MCMAMaterialMap = parseMaterialMapFromData(data, "MCMA");
6134
- const handleMCMAAnswerOnChange = (answer2, key, value) => {
6005
+ const handleMCMAAnswerOnChange = (answerMap2, key, value) => {
6135
6006
  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(
6007
+ const foundSubIndex = answerMap2[key].findIndex(
6141
6008
  (answerMaterialKey) => answerMaterialKey === value
6142
6009
  );
6143
6010
  if (foundSubIndex === -1) {
6144
- answerMap[key].push(value);
6011
+ answerMap2[key].push(value);
6145
6012
  } else {
6146
- answerMap[key].splice(foundSubIndex, 1);
6013
+ answerMap2[key].splice(foundSubIndex, 1);
6147
6014
  }
6148
- changeAnswer(answer2);
6015
+ changeAnswer(answerMap2);
6149
6016
  };
6150
6017
  return /* @__PURE__ */ jsxs24("div", { className: "flex flex-row flex-wrap", children: [
6151
6018
  /* @__PURE__ */ jsx35("div", { className: `${isFullScreen ? "w-full" : "w-full md:w-[60%]"}`, children: /* @__PURE__ */ jsx35(ActivityBodyContent_default, { bodyMap: MCMABodyMap, templateType: "MCMA" }) }),
@@ -6155,7 +6022,7 @@ var MCMAActivityContent = ({
6155
6022
  MCMAActivityMaterialContent_default,
6156
6023
  {
6157
6024
  uniqueValue: JSON.stringify(data.contentMap),
6158
- answer,
6025
+ answerMap,
6159
6026
  materialMap: MCMAMaterialMap,
6160
6027
  contentMap,
6161
6028
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -6172,19 +6039,13 @@ import { InlineMath as InlineMath8 } from "react-katex";
6172
6039
  import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
6173
6040
  var MCSAActivityMaterialContent = ({
6174
6041
  uniqueValue,
6175
- answer,
6042
+ answerMap,
6176
6043
  materialMap,
6177
6044
  contentMap,
6178
6045
  checkCanAnswerQuestion,
6179
6046
  onChange,
6180
6047
  isPreview
6181
6048
  }) => {
6182
- const retrieveAnswerMap = () => {
6183
- const foundIndex = answer.data.findIndex(
6184
- (answerData) => answerData.type === "MCSA"
6185
- );
6186
- return answer.data[foundIndex].answerMap;
6187
- };
6188
6049
  const retrieveCorrectAnswer = () => {
6189
6050
  return Object.keys(materialMap)[0];
6190
6051
  };
@@ -6196,7 +6057,6 @@ var MCSAActivityMaterialContent = ({
6196
6057
  }
6197
6058
  return "INCORRECT";
6198
6059
  };
6199
- const answerMap = retrieveAnswerMap();
6200
6060
  const correctAnswer = retrieveCorrectAnswer();
6201
6061
  return Object.keys(materialMap).map((materialKey, index) => {
6202
6062
  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 +6078,7 @@ var MCSAActivityMaterialContent = ({
6218
6078
  {
6219
6079
  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
6080
  onClick: () => {
6221
- onChange(answer, materialKey, materialSubKey);
6081
+ onChange(answerMap, materialKey, materialSubKey);
6222
6082
  },
6223
6083
  children: [
6224
6084
  /* @__PURE__ */ jsx36(
@@ -6274,7 +6134,7 @@ var MCSAActivityMaterialContent_default = MCSAActivityMaterialContent;
6274
6134
  // src/components/activities/MCSAActivityContent.tsx
6275
6135
  import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
6276
6136
  var MCSAActivityContent = ({
6277
- answer,
6137
+ answerMap,
6278
6138
  data,
6279
6139
  canAnswerQuestion,
6280
6140
  changeAnswer,
@@ -6284,14 +6144,10 @@ var MCSAActivityContent = ({
6284
6144
  const contentMap = parseContentMapFromData(data);
6285
6145
  const MCSABodyMap = parseBodyMapFromData(data, "MCSA");
6286
6146
  const MCSAMaterialMap = parseMaterialMapFromData(data, "MCSA");
6287
- const handleMCSAAnswerOnChange = (answer2, key, value) => {
6147
+ const handleMCSAAnswerOnChange = (answerMap2, key, value) => {
6288
6148
  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);
6149
+ answerMap2[key] = value;
6150
+ changeAnswer(answerMap2);
6295
6151
  };
6296
6152
  return /* @__PURE__ */ jsxs26("div", { className: "flex flex-row flex-wrap", children: [
6297
6153
  /* @__PURE__ */ jsx37("div", { className: `${isFullScreen ? "w-full" : "w-full md:w-[60%]"}`, children: /* @__PURE__ */ jsx37(ActivityBodyContent_default, { bodyMap: MCSABodyMap, templateType: "MCSA" }) }),
@@ -6301,7 +6157,7 @@ var MCSAActivityContent = ({
6301
6157
  MCSAActivityMaterialContent_default,
6302
6158
  {
6303
6159
  uniqueValue: JSON.stringify(data.contentMap),
6304
- answer,
6160
+ answerMap,
6305
6161
  materialMap: MCSAMaterialMap,
6306
6162
  contentMap,
6307
6163
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -6344,26 +6200,11 @@ var retrieveDocumentTypeFromExtension = (format) => {
6344
6200
  // src/components/activities/material-contents/OpenEndedActivityMaterialContent.tsx
6345
6201
  import { Fragment as Fragment7, jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
6346
6202
  var OpenEndedActivityMaterialContent = ({
6347
- answer,
6203
+ answerMap,
6348
6204
  contentMap,
6349
6205
  checkCanAnswerQuestion,
6350
6206
  onChange
6351
6207
  }) => {
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
6208
  const RenderTextContent = (answerMap2) => {
6368
6209
  const answerMapAnswer = answerMap2["ANSWER"];
6369
6210
  let documentType = "TEXT";
@@ -6403,7 +6244,7 @@ var OpenEndedActivityMaterialContent = ({
6403
6244
  useMinHeight: true,
6404
6245
  onChange: (e) => {
6405
6246
  if (checkCanAnswerQuestion()) {
6406
- onChange(answer, e.target.value);
6247
+ onChange(answerMap2, e.target.value);
6407
6248
  }
6408
6249
  }
6409
6250
  }
@@ -6437,7 +6278,6 @@ var OpenEndedActivityMaterialContent = ({
6437
6278
  }
6438
6279
  ) });
6439
6280
  };
6440
- const answerMap = retrieveAnswerMap();
6441
6281
  return /* @__PURE__ */ jsx38(Fragment7, { children: /* @__PURE__ */ jsxs27("div", { className: "", children: [
6442
6282
  /* @__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
6283
  /* @__PURE__ */ jsx38("div", { className: "hidden md:contents", children: /* @__PURE__ */ jsx38(DividerLine_default, {}) }),
@@ -6449,7 +6289,7 @@ var OpenEndedActivityMaterialContent_default = OpenEndedActivityMaterialContent;
6449
6289
  // src/components/activities/OpenEndedActivityContent.tsx
6450
6290
  import { Fragment as Fragment8, jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
6451
6291
  var OpenEndedActivityContent = ({
6452
- answer,
6292
+ answerMap,
6453
6293
  data,
6454
6294
  changeAnswer,
6455
6295
  canAnswerQuestion,
@@ -6459,14 +6299,10 @@ var OpenEndedActivityContent = ({
6459
6299
  }) => {
6460
6300
  const contentMap = parseContentMapFromData(data);
6461
6301
  const openEndedBodyMap = parseBodyMapFromData(data, "OPEN_ENDED");
6462
- const handleOpenEndedAnswerOnChange = (answer2, value) => {
6302
+ const handleOpenEndedAnswerOnChange = (answerMap2, value) => {
6463
6303
  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);
6304
+ answerMap2["ANSWER"] = value;
6305
+ changeAnswer(answerMap2);
6470
6306
  };
6471
6307
  return /* @__PURE__ */ jsxs28("div", { className: "flex flex-row flex-wrap", children: [
6472
6308
  /* @__PURE__ */ jsx39(
@@ -6494,7 +6330,7 @@ var OpenEndedActivityContent = ({
6494
6330
  /* @__PURE__ */ jsx39("div", { className: `${isFullScreen ? "w-full" : "w-full md:flex-1"}`, children: /* @__PURE__ */ jsx39(
6495
6331
  OpenEndedActivityMaterialContent_default,
6496
6332
  {
6497
- answer,
6333
+ answerMap,
6498
6334
  contentMap,
6499
6335
  checkCanAnswerQuestion: canAnswerQuestion,
6500
6336
  onChange: handleOpenEndedAnswerOnChange
@@ -6548,7 +6384,7 @@ var useScreenSize_default = useScreenSize;
6548
6384
  import { jsx as jsx40, jsxs as jsxs29 } from "react/jsx-runtime";
6549
6385
  var OrderingActivityMaterialContent = ({
6550
6386
  uniqueValue,
6551
- answer,
6387
+ answerMap,
6552
6388
  materialMap,
6553
6389
  contentMap,
6554
6390
  checkCanAnswerQuestion,
@@ -6583,19 +6419,10 @@ var OrderingActivityMaterialContent = ({
6583
6419
  }, [screenSize]);
6584
6420
  useEffect13(() => {
6585
6421
  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;
6422
+ Object.keys(answerMap).forEach((answerKey, index) => {
6423
+ answerMap[answerKey] = index;
6591
6424
  });
6592
6425
  }, [showCorrectAnswer]);
6593
- const retrieveAnswerMap = () => {
6594
- const foundIndex = answer.data.findIndex(
6595
- (answerData) => answerData.type === "ORDERING"
6596
- );
6597
- return answer.data[foundIndex].answerMap;
6598
- };
6599
6426
  const checkAnswerState = (correctAnswer, learnerAnswer) => {
6600
6427
  if (!isPreview) return null;
6601
6428
  if (correctAnswer === learnerAnswer) {
@@ -6644,7 +6471,7 @@ var OrderingActivityMaterialContent = ({
6644
6471
  };
6645
6472
  const handleMouseUp = () => {
6646
6473
  if (dropTargetKey !== null && draggedKey !== null && dropTargetKey !== draggedKey) {
6647
- onChange(answer, draggedKey, dropTargetKey);
6474
+ onChange(answerMap, draggedKey, dropTargetKey);
6648
6475
  }
6649
6476
  setDraggedKey(null);
6650
6477
  setDropTargetKey(null);
@@ -6676,7 +6503,7 @@ var OrderingActivityMaterialContent = ({
6676
6503
  };
6677
6504
  const handleTouchEnd = () => {
6678
6505
  if (dropTargetKey !== null && draggedKey !== null && dropTargetKey !== draggedKey) {
6679
- onChange(answer, draggedKey, dropTargetKey);
6506
+ onChange(answerMap, draggedKey, dropTargetKey);
6680
6507
  }
6681
6508
  setDraggedKey(null);
6682
6509
  setDropTargetKey(null);
@@ -6690,12 +6517,11 @@ var OrderingActivityMaterialContent = ({
6690
6517
  } else if (selectedKey === materialKey) {
6691
6518
  setSelectedKey(null);
6692
6519
  } else {
6693
- onChange(answer, selectedKey, materialKey);
6520
+ onChange(answerMap, selectedKey, materialKey);
6694
6521
  setSelectedKey(null);
6695
6522
  }
6696
6523
  setDraggedKey(null);
6697
6524
  };
6698
- const answerMap = retrieveAnswerMap();
6699
6525
  return /* @__PURE__ */ jsxs29(
6700
6526
  "div",
6701
6527
  {
@@ -6833,7 +6659,7 @@ var OrderingActivityMaterialContent_default = OrderingActivityMaterialContent;
6833
6659
  // src/components/activities/OrderingActivityContent.tsx
6834
6660
  import { Fragment as Fragment9, jsx as jsx41, jsxs as jsxs30 } from "react/jsx-runtime";
6835
6661
  var OrderingActivityContent = ({
6836
- answer,
6662
+ answerMap,
6837
6663
  data,
6838
6664
  canAnswerQuestion,
6839
6665
  changeAnswer,
@@ -6844,16 +6670,12 @@ var OrderingActivityContent = ({
6844
6670
  const contentMap = parseContentMapFromData(data);
6845
6671
  const orderingBodyMap = parseBodyMapFromData(data, "ORDERING");
6846
6672
  const orderingMaterialMap = parseMaterialMapFromData(data, "ORDERING");
6847
- const handleOrderingAnswerOnChange = (answer2, primaryKey, secondaryKey) => {
6673
+ const handleOrderingAnswerOnChange = (answerMap2, primaryKey, secondaryKey) => {
6848
6674
  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);
6675
+ const prevValue = answerMap2[primaryKey];
6676
+ answerMap2[primaryKey] = answerMap2[secondaryKey];
6677
+ answerMap2[secondaryKey] = prevValue;
6678
+ changeAnswer(answerMap2);
6857
6679
  };
6858
6680
  return /* @__PURE__ */ jsxs30(Fragment9, { children: [
6859
6681
  /* @__PURE__ */ jsx41(
@@ -6868,7 +6690,7 @@ var OrderingActivityContent = ({
6868
6690
  OrderingActivityMaterialContent_default,
6869
6691
  {
6870
6692
  uniqueValue: JSON.stringify(data.contentMap),
6871
- answer,
6693
+ answerMap,
6872
6694
  materialMap: orderingMaterialMap,
6873
6695
  contentMap,
6874
6696
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -6887,7 +6709,7 @@ import { InlineMath as InlineMath10 } from "react-katex";
6887
6709
  import { Fragment as Fragment10, jsx as jsx42, jsxs as jsxs31 } from "react/jsx-runtime";
6888
6710
  var TrueFalseActivityMaterialContent = ({
6889
6711
  uniqueValue,
6890
- answer,
6712
+ answerMap,
6891
6713
  materialMap,
6892
6714
  contentMap,
6893
6715
  checkCanAnswerQuestion,
@@ -6895,7 +6717,6 @@ var TrueFalseActivityMaterialContent = ({
6895
6717
  isPreview,
6896
6718
  showCorrectAnswer
6897
6719
  }) => {
6898
- const { screenSize } = useScreenSize_default();
6899
6720
  const [shuffleOptionList, setShuffleOptionList] = useState23([]);
6900
6721
  useEffect14(() => {
6901
6722
  const optionList = [];
@@ -6909,26 +6730,8 @@ var TrueFalseActivityMaterialContent = ({
6909
6730
  }, []);
6910
6731
  useEffect14(() => {
6911
6732
  if (!showCorrectAnswer) return;
6912
- answer.data.find(
6913
- (answerData) => answerData.type === "TRUE_FALSE"
6914
- ).answerMap = materialMap;
6733
+ answerMap = materialMap;
6915
6734
  }, [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
6735
  const checkAnswerState = (correctAnswer, learnerAnswer) => {
6933
6736
  if (!isPreview) return null;
6934
6737
  if (correctAnswer === learnerAnswer) {
@@ -6936,7 +6739,6 @@ var TrueFalseActivityMaterialContent = ({
6936
6739
  }
6937
6740
  return "INCORRECT";
6938
6741
  };
6939
- const answerMap = retrieveAnswerMap();
6940
6742
  return /* @__PURE__ */ jsxs31("div", { className: "", children: [
6941
6743
  /* @__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
6744
  /* @__PURE__ */ jsx42("div", { className: "hidden md:contents", children: /* @__PURE__ */ jsx42(DividerLine_default, {}) }),
@@ -6986,7 +6788,7 @@ var TrueFalseActivityMaterialContent = ({
6986
6788
  alt: "checkbox",
6987
6789
  size: "small",
6988
6790
  onClick: () => {
6989
- onChange(answer, "TRUE", shuffleOption);
6791
+ onChange(answerMap, "TRUE", shuffleOption);
6990
6792
  }
6991
6793
  }
6992
6794
  ) }) }),
@@ -6997,7 +6799,7 @@ var TrueFalseActivityMaterialContent = ({
6997
6799
  alt: "checkbox",
6998
6800
  size: "small",
6999
6801
  onClick: () => {
7000
- onChange(answer, "FALSE", shuffleOption);
6802
+ onChange(answerMap, "FALSE", shuffleOption);
7001
6803
  }
7002
6804
  }
7003
6805
  ) }) })
@@ -7023,7 +6825,7 @@ var TrueFalseActivityMaterialContent_default = TrueFalseActivityMaterialContent;
7023
6825
  // src/components/activities/TrueFalseActivityContent.tsx
7024
6826
  import { jsx as jsx43, jsxs as jsxs32 } from "react/jsx-runtime";
7025
6827
  var TrueFalseActivityContent = ({
7026
- answer,
6828
+ answerMap,
7027
6829
  data,
7028
6830
  canAnswerQuestion,
7029
6831
  changeAnswer,
@@ -7034,43 +6836,36 @@ var TrueFalseActivityContent = ({
7034
6836
  const contentMap = parseContentMapFromData(data);
7035
6837
  const trueFalseBodyMap = parseBodyMapFromData(data, "TRUE_FALSE");
7036
6838
  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) => {
6839
+ const handleTrueFalseAnswerOnChange = (answerMap2, key, value) => {
7044
6840
  if (isPreview) return;
7045
- const answerMap = retrieveCurrentAnswerMap();
7046
6841
  if (key === "TRUE") {
7047
- const foundFalseIndex = answerMap.falseList.findIndex(
6842
+ const foundFalseIndex = answerMap2.falseList.findIndex(
7048
6843
  (item) => item === value
7049
6844
  );
7050
6845
  if (foundFalseIndex !== -1) {
7051
- answerMap.falseList.splice(foundFalseIndex, 1);
6846
+ answerMap2.falseList.splice(foundFalseIndex, 1);
7052
6847
  }
7053
- const foundTrueIndex = answerMap.falseList.findIndex(
6848
+ const foundTrueIndex = answerMap2.falseList.findIndex(
7054
6849
  (item) => item === value
7055
6850
  );
7056
6851
  if (foundTrueIndex === -1) {
7057
- answerMap.trueList.push(value);
6852
+ answerMap2.trueList.push(value);
7058
6853
  }
7059
6854
  } else if (key === "FALSE") {
7060
- const foundTrueIndex = answerMap.trueList.findIndex(
6855
+ const foundTrueIndex = answerMap2.trueList.findIndex(
7061
6856
  (item) => item === value
7062
6857
  );
7063
6858
  if (foundTrueIndex !== -1) {
7064
- answerMap.trueList.splice(foundTrueIndex, 1);
6859
+ answerMap2.trueList.splice(foundTrueIndex, 1);
7065
6860
  }
7066
- const foundFalseIndex = answerMap.falseList.findIndex(
6861
+ const foundFalseIndex = answerMap2.falseList.findIndex(
7067
6862
  (item) => item === value
7068
6863
  );
7069
6864
  if (foundFalseIndex === -1) {
7070
- answerMap.falseList.push(value);
6865
+ answerMap2.falseList.push(value);
7071
6866
  }
7072
6867
  }
7073
- changeAnswer(answer2);
6868
+ changeAnswer(answerMap2);
7074
6869
  };
7075
6870
  return /* @__PURE__ */ jsxs32("div", { className: "flex flex-row flex-wrap", children: [
7076
6871
  /* @__PURE__ */ jsx43("div", { className: `${isFullScreen ? "w-full" : "w-full md:w-[40%]"}`, children: /* @__PURE__ */ jsx43(
@@ -7086,7 +6881,7 @@ var TrueFalseActivityContent = ({
7086
6881
  TrueFalseActivityMaterialContent_default,
7087
6882
  {
7088
6883
  uniqueValue: JSON.stringify(data.contentMap),
7089
- answer,
6884
+ answerMap,
7090
6885
  materialMap: trueFalseMaterialMap,
7091
6886
  contentMap,
7092
6887
  checkCanAnswerQuestion: canAnswerQuestion,
@@ -7314,7 +7109,7 @@ var ActivityPreviewByData = ({
7314
7109
  }
7315
7110
  }, [data, lockedType, typeOptionList, showDifficulty]);
7316
7111
  if (!data) return;
7317
- const answer = constructAnswerBasedOnData(data);
7112
+ const answerMap = constructAnswerBasedOnData(data);
7318
7113
  return /* @__PURE__ */ jsxs36("div", { children: [
7319
7114
  showType ? /* @__PURE__ */ jsxs36(Fragment11, { children: [
7320
7115
  /* @__PURE__ */ jsxs36("div", { className: "mb-4", children: [
@@ -7335,7 +7130,7 @@ var ActivityPreviewByData = ({
7335
7130
  selectedType ? /* @__PURE__ */ jsx47("div", { className: "", children: selectedType === "ORDERING" && data["orderingBodyMap"] != null && data["orderingMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7336
7131
  OrderingActivityContent_default,
7337
7132
  {
7338
- answer,
7133
+ answerMap,
7339
7134
  changeAnswer: () => {
7340
7135
  },
7341
7136
  canAnswerQuestion: () => {
@@ -7349,7 +7144,7 @@ var ActivityPreviewByData = ({
7349
7144
  ) : selectedType === "DROPDOWN" && data["dropdownBodyMap"] != null && data["dropdownMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7350
7145
  DropdownActivityContent_default,
7351
7146
  {
7352
- answer,
7147
+ answerMap,
7353
7148
  changeAnswer: () => {
7354
7149
  },
7355
7150
  canAnswerQuestion: () => {
@@ -7363,7 +7158,7 @@ var ActivityPreviewByData = ({
7363
7158
  ) : selectedType === "MCSA" && data["MCSABodyMap"] != null && data["MCSAMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7364
7159
  MCSAActivityContent_default,
7365
7160
  {
7366
- answer,
7161
+ answerMap,
7367
7162
  changeAnswer: () => {
7368
7163
  },
7369
7164
  canAnswerQuestion: () => {
@@ -7377,7 +7172,7 @@ var ActivityPreviewByData = ({
7377
7172
  ) : selectedType === "MCMA" && data["MCMABodyMap"] != null && data["MCMAMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7378
7173
  MCMAActivityContent_default,
7379
7174
  {
7380
- answer,
7175
+ answerMap,
7381
7176
  changeAnswer: () => {
7382
7177
  },
7383
7178
  canAnswerQuestion: () => {
@@ -7391,7 +7186,7 @@ var ActivityPreviewByData = ({
7391
7186
  ) : selectedType === "MATCHING" && data["matchingBodyMap"] != null && data["matchingMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7392
7187
  MatchingActivityContent_default,
7393
7188
  {
7394
- answer,
7189
+ answerMap,
7395
7190
  changeAnswer: () => {
7396
7191
  },
7397
7192
  canAnswerQuestion: () => {
@@ -7404,7 +7199,7 @@ var ActivityPreviewByData = ({
7404
7199
  ) : selectedType === "GROUPING" && data["groupingBodyMap"] != null && data["groupingMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7405
7200
  GroupingActivityContent_default,
7406
7201
  {
7407
- answer,
7202
+ answerMap,
7408
7203
  changeAnswer: () => {
7409
7204
  },
7410
7205
  canAnswerQuestion: () => {
@@ -7417,7 +7212,7 @@ var ActivityPreviewByData = ({
7417
7212
  ) : selectedType === "FILL_IN_THE_BLANKS" && data["fillInTheBlanksBodyMap"] != null && data["fillInTheBlanksMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7418
7213
  FillInTheBlanksActivityContent_default,
7419
7214
  {
7420
- answer,
7215
+ answerMap,
7421
7216
  changeAnswer: () => {
7422
7217
  },
7423
7218
  canAnswerQuestion: () => {
@@ -7431,7 +7226,7 @@ var ActivityPreviewByData = ({
7431
7226
  ) : selectedType === "OPEN_ENDED" && data["openEndedBodyMap"] != null ? /* @__PURE__ */ jsx47(
7432
7227
  OpenEndedActivityContent_default,
7433
7228
  {
7434
- answer,
7229
+ answerMap,
7435
7230
  canAnswerQuestion: () => false,
7436
7231
  changeAnswer: () => {
7437
7232
  },
@@ -7443,7 +7238,7 @@ var ActivityPreviewByData = ({
7443
7238
  ) : selectedType === "TRUE_FALSE" && data["trueFalseBodyMap"] != null && data["trueFalseMaterialMap"] != null ? /* @__PURE__ */ jsx47(
7444
7239
  TrueFalseActivityContent_default,
7445
7240
  {
7446
- answer,
7241
+ answerMap,
7447
7242
  changeAnswer: () => {
7448
7243
  },
7449
7244
  canAnswerQuestion: () => {
@@ -7476,135 +7271,157 @@ var ActivityPreviewByData_default = ActivityPreviewByData;
7476
7271
  // src/components/activities/ActivityPreviewByAnswerData.tsx
7477
7272
  import { useEffect as useEffect16, useState as useState25 } from "react";
7478
7273
  import { Fragment as Fragment12, jsx as jsx48, jsxs as jsxs37 } from "react/jsx-runtime";
7274
+ var ACTIVITY_TEMPLATE_LIST = [
7275
+ { type: "ORDERING", materialMap: "orderingMaterialMap" },
7276
+ { type: "DROPDOWN", materialMap: "dropdownMaterialMap" },
7277
+ { type: "MCSA", materialMap: "MCSAMaterialMap" },
7278
+ { type: "MCMA", materialMap: "MCMAMaterialMap" },
7279
+ { type: "MATCHING", materialMap: "matchingMaterialMap" },
7280
+ { type: "GROUPING", materialMap: "groupingMaterialMap" },
7281
+ {
7282
+ type: "FILL_IN_THE_BLANKS",
7283
+ materialMap: "fillInTheBlanksMaterialMap"
7284
+ },
7285
+ { type: "OPEN_ENDED", materialMap: "openEndedMaterialMap" },
7286
+ { type: "TRUE_FALSE", materialMap: "trueFalseMaterialMap" }
7287
+ ];
7479
7288
  var ActivityPreviewByAnswerData = ({
7480
7289
  data,
7290
+ answerType = null,
7481
7291
  showType = true,
7482
7292
  showDescription = true,
7483
- lockedType = null,
7484
- typeOptionList = [],
7293
+ lockedTypeList = [],
7485
7294
  showSolution = false,
7486
7295
  showEvaluationRubric = false,
7487
7296
  showDifficulty = true,
7488
7297
  isFullScreen = false,
7489
7298
  showCorrectAnswer = false
7490
7299
  }) => {
7491
- var _a;
7492
- const [key, setKey] = useState25((/* @__PURE__ */ new Date()).getTime());
7493
7300
  const [selectedType, setSelectedType] = useState25(null);
7494
7301
  const [optionList, setOptionList] = useState25([]);
7495
- const [answer, setAnswer] = useState25({ data: [] });
7302
+ const [answerMapMap, setAnswerMapMap] = useState25({});
7303
+ const [activityTemplateTypeList, setActivityTemplateTypeList] = useState25([]);
7496
7304
  useEffect16(() => {
7497
7305
  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
7306
+ let currentActivityTemplateMapList = JSON.parse(
7307
+ JSON.stringify(ACTIVITY_TEMPLATE_LIST)
7308
+ );
7309
+ if (lockedTypeList.length > 0) {
7310
+ currentActivityTemplateMapList = currentActivityTemplateMapList.filter(
7311
+ (activityTemplateMap) => lockedTypeList.includes(activityTemplateMap.type)
7504
7312
  );
7505
- return foundAnswer || null;
7506
7313
  }
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
- }
7314
+ const currentActivityTemplateTypeList = [];
7315
+ for (const activityTemplateMap of currentActivityTemplateMapList) {
7316
+ if (data[activityTemplateMap.materialMap]) {
7317
+ currentActivityTemplateTypeList.push(activityTemplateMap);
7544
7318
  }
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
7319
  }
7559
- if (showDifficulty) {
7560
- setOptionList(
7561
- currentTypeOptionList.map((typeOption) => __spreadProps(__spreadValues({}, typeOption), {
7562
- subText: i18n_default.t(
7563
- retrieveDifficultyByActivityTypeFromData(typeOption.id, data)
7320
+ setActivityTemplateTypeList(currentActivityTemplateMapList);
7321
+ }, [data, answerType, lockedTypeList]);
7322
+ useEffect16(() => {
7323
+ if (activityTemplateTypeList.length === 0) return;
7324
+ const currentOptionList = [];
7325
+ for (const activityTemplateType of activityTemplateTypeList) {
7326
+ const currentTypeOption = {
7327
+ id: activityTemplateType.type,
7328
+ value: i18n_default.t(activityTemplateType.type)
7329
+ };
7330
+ if (showDifficulty) {
7331
+ currentTypeOption.subText = i18n_default.t(
7332
+ retrieveDifficultyByActivityTypeFromData(
7333
+ activityTemplateType.type,
7334
+ data
7564
7335
  )
7565
- }))
7566
- );
7567
- } else {
7568
- setOptionList(currentTypeOptionList);
7336
+ );
7337
+ }
7338
+ currentOptionList.push(currentTypeOption);
7569
7339
  }
7570
- }, [data, answer.data, lockedType, typeOptionList, showDifficulty]);
7340
+ setOptionList(currentOptionList);
7341
+ }, [activityTemplateTypeList, showDifficulty]);
7342
+ useEffect16(() => {
7343
+ if (optionList.length === 0) return;
7344
+ setSelectedType(optionList[0].id);
7345
+ }, [optionList]);
7346
+ useEffect16(() => {
7347
+ if (activityTemplateTypeList.length === 0) return;
7348
+ const currentAnswerMapMap = {};
7349
+ for (const activityTemplateMap of activityTemplateTypeList) {
7350
+ if (answerType === activityTemplateMap.type) {
7351
+ currentAnswerMapMap[activityTemplateMap.type] = data.answerMap;
7352
+ } else {
7353
+ currentAnswerMapMap[activityTemplateMap.type] = constructActivityAnswerMap(
7354
+ { type: activityTemplateMap.type },
7355
+ JSON.parse(JSON.stringify(data))
7356
+ );
7357
+ }
7358
+ }
7359
+ setAnswerMapMap(currentAnswerMapMap);
7360
+ }, [activityTemplateTypeList]);
7571
7361
  const RenderSelectedActivityContent = () => {
7362
+ if (!selectedType) return null;
7572
7363
  const commonProps = {
7573
- answer,
7364
+ answerMap: answerMapMap[selectedType],
7574
7365
  data,
7575
7366
  canAnswerQuestion: () => true,
7576
- // changeAnswer: (newAnswer: Answer) =>
7577
- // setAnswer(JSON.parse(JSON.stringify(newAnswer))),
7578
7367
  changeAnswer: () => {
7579
7368
  },
7580
7369
  isPreview: true,
7581
7370
  showCorrectAnswer,
7582
7371
  isFullScreen
7583
7372
  };
7373
+ const isEmpty = answerMapMap[selectedType].isEmpty;
7584
7374
  switch (selectedType) {
7585
7375
  case "ORDERING":
7586
- return data.orderingBodyMap && data.orderingMaterialMap ? /* @__PURE__ */ jsx48(OrderingActivityContent_default, __spreadValues({}, commonProps)) : null;
7376
+ return data.orderingBodyMap && data.orderingMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7377
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7378
+ /* @__PURE__ */ jsx48(OrderingActivityContent_default, __spreadValues({}, commonProps))
7379
+ ] }) : null;
7587
7380
  case "DROPDOWN":
7588
- return data.dropdownBodyMap && data.dropdownMaterialMap ? /* @__PURE__ */ jsx48(DropdownActivityContent_default, __spreadValues({}, commonProps)) : null;
7381
+ return data.dropdownBodyMap && data.dropdownMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7382
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7383
+ /* @__PURE__ */ jsx48(DropdownActivityContent_default, __spreadValues({}, commonProps))
7384
+ ] }) : null;
7589
7385
  case "MCSA":
7590
- return data.MCSABodyMap && data.MCSAMaterialMap ? /* @__PURE__ */ jsx48(MCSAActivityContent_default, __spreadValues({}, commonProps)) : null;
7386
+ return data.MCSABodyMap && data.MCSAMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7387
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7388
+ /* @__PURE__ */ jsx48(MCSAActivityContent_default, __spreadValues({}, commonProps))
7389
+ ] }) : null;
7591
7390
  case "MCMA":
7592
- return data.MCMABodyMap && data.MCMAMaterialMap ? /* @__PURE__ */ jsx48(MCMAActivityContent_default, __spreadValues({}, commonProps)) : null;
7391
+ return data.MCMABodyMap && data.MCMAMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7392
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7393
+ /* @__PURE__ */ jsx48(MCMAActivityContent_default, __spreadValues({}, commonProps))
7394
+ ] }) : null;
7593
7395
  case "MATCHING":
7594
- return data.matchingBodyMap && data.matchingMaterialMap ? /* @__PURE__ */ jsx48(MatchingActivityContent_default, __spreadValues({}, commonProps)) : null;
7396
+ return data.matchingBodyMap && data.matchingMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7397
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7398
+ /* @__PURE__ */ jsx48(MatchingActivityContent_default, __spreadValues({}, commonProps))
7399
+ ] }) : null;
7595
7400
  case "GROUPING":
7596
- return data.groupingBodyMap && data.groupingMaterialMap ? /* @__PURE__ */ jsx48(GroupingActivityContent_default, __spreadValues({}, commonProps)) : null;
7401
+ return data.groupingBodyMap && data.groupingMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7402
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7403
+ /* @__PURE__ */ jsx48(GroupingActivityContent_default, __spreadValues({}, commonProps))
7404
+ ] }) : null;
7597
7405
  case "FILL_IN_THE_BLANKS":
7598
- return data.fillInTheBlanksBodyMap && data.fillInTheBlanksMaterialMap ? /* @__PURE__ */ jsx48(FillInTheBlanksActivityContent_default, __spreadValues({}, commonProps)) : null;
7406
+ return data.fillInTheBlanksBodyMap && data.fillInTheBlanksMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7407
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7408
+ /* @__PURE__ */ jsx48(FillInTheBlanksActivityContent_default, __spreadValues({}, commonProps))
7409
+ ] }) : null;
7599
7410
  case "OPEN_ENDED":
7600
- return data.openEndedBodyMap ? /* @__PURE__ */ jsx48(
7601
- OpenEndedActivityContent_default,
7602
- __spreadProps(__spreadValues({}, commonProps), {
7603
- showMaterialContent: true
7604
- })
7605
- ) : null;
7411
+ return data.openEndedBodyMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7412
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7413
+ /* @__PURE__ */ jsx48(
7414
+ OpenEndedActivityContent_default,
7415
+ __spreadProps(__spreadValues({}, commonProps), {
7416
+ showMaterialContent: true
7417
+ })
7418
+ )
7419
+ ] }) : null;
7606
7420
  case "TRUE_FALSE":
7607
- return data.trueFalseBodyMap && data.trueFalseMaterialMap ? /* @__PURE__ */ jsx48(TrueFalseActivityContent_default, __spreadValues({}, commonProps)) : null;
7421
+ return data.trueFalseBodyMap && data.trueFalseMaterialMap ? /* @__PURE__ */ jsxs37(Fragment12, { children: [
7422
+ isEmpty && /* @__PURE__ */ jsx48(ActivityEmptyContent_default, {}),
7423
+ /* @__PURE__ */ jsx48(TrueFalseActivityContent_default, __spreadValues({}, commonProps))
7424
+ ] }) : null;
7608
7425
  default:
7609
7426
  return null;
7610
7427
  }
@@ -7627,10 +7444,7 @@ var ActivityPreviewByAnswerData = ({
7627
7444
  ] }),
7628
7445
  /* @__PURE__ */ jsx48(DividerLine_default, {})
7629
7446
  ] }) : 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
- ] }),
7447
+ /* @__PURE__ */ jsx48("div", { className: "flex flex-col my-2 w-full p-5", children: RenderSelectedActivityContent() }),
7634
7448
  selectedType && showSolution ? /* @__PURE__ */ jsx48("div", { className: "my-4", children: /* @__PURE__ */ jsx48(
7635
7449
  ActivitySolutionContent_default,
7636
7450
  {
@@ -7645,7 +7459,7 @@ var ActivityPreviewByAnswerData = ({
7645
7459
  data
7646
7460
  }
7647
7461
  ) }) : null
7648
- ] }, key);
7462
+ ] });
7649
7463
  };
7650
7464
  var ActivityPreviewByAnswerData_default = ActivityPreviewByAnswerData;
7651
7465
 
@@ -8629,7 +8443,7 @@ var retrieveProvinceNameOptionList = () => {
8629
8443
  { parent: "TURKEY", value: "BURSA", text: "Bursa", code: "16" },
8630
8444
  // { parent: "TURKEY", value: "CANAKKALE", text: "Çanakkale", code: "17" },
8631
8445
  // { parent: "TURKEY", value: "CANKIRI", text: "Çankırı", code: "18" },
8632
- // { parent: "TURKEY", value: "CORUM", text: "Çorum", code: "19" },
8446
+ { parent: "TURKEY", value: "CORUM", text: "\xC7orum", code: "19" },
8633
8447
  { parent: "TURKEY", value: "DENIZLI", text: "Denizli", code: "20" },
8634
8448
  { parent: "TURKEY", value: "DIYARBAKIR", text: "Diyarbak\u0131r", code: "21" },
8635
8449
  // { parent: "TURKEY", value: "EDIRNE", text: "Edirne", code: "22" },