touchstudy-core 0.1.150 → 0.1.152

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,8 @@
1
1
  import { FC } from "react";
2
- import { CategoryResponse } from "../../../../utils/types/examResults";
3
2
  import { TextbookResult } from "../../configs/types";
4
3
  interface Props {
5
4
  data: TextbookResult;
6
5
  questionIdContextMenu?: number;
7
- categories: CategoryResponse[];
8
6
  itemProps?: any;
9
7
  isStudent: boolean;
10
8
  }
@@ -14,7 +14,7 @@ export interface TextbookAnswerItemProps extends TextbookAnswerItemBaseProps {
14
14
  nextData?: StudentQuestionResult;
15
15
  isLast?: boolean;
16
16
  isFirst?: boolean;
17
- categoryId: number;
17
+ questionGroupId: number;
18
18
  }
19
19
  export interface TextbookAnswerItemBaseProps {
20
20
  menuContextActions?: Action<StudentQuestionResult>[];
@@ -55,8 +55,11 @@ export declare type TextbookResult = {
55
55
  };
56
56
  export declare type StudentQuestionResult = {
57
57
  id: number;
58
- selectedAnswers: string;
59
- correctAnswers: string;
58
+ questionGroupId: number;
59
+ selectedAnswers?: number[] | string;
60
+ correctAnswers?: number[] | string;
61
+ textualAnswers?: string[];
62
+ correctTextualAnswers?: string[];
60
63
  isStar: boolean;
61
64
  duration: number;
62
65
  classAverageTime: number;
package/dist/index.js CHANGED
@@ -6516,26 +6516,23 @@ var formatDataMyAnswer = function formatDataMyAnswer(inputData, categories) {
6516
6516
  });
6517
6517
  return questionsByCategory;
6518
6518
  };
6519
- var formatTextbookDataMyAnswer = function formatTextbookDataMyAnswer(inputData, categories) {
6520
- var uniqueCategories = new Set();
6521
- var filterCategories = categories.filter(function (category) {
6522
- if (!uniqueCategories.has(category.name)) {
6523
- uniqueCategories.add(category.name);
6524
- return true;
6525
- }
6526
- return false;
6527
- });
6528
- var questionsByCategory = filterCategories.map(function (category) {
6519
+ var formatTextbookDataMyAnswer = function formatTextbookDataMyAnswer(inputData, questionGroupIds) {
6520
+ var questionsByCategories = questionGroupIds.map(function (questionGroupId) {
6521
+ var _questions$, _questions$$categorie, _questions$2, _questions$2$categori;
6522
+ var questions = inputData.studentQuestionResults.filter(function (question) {
6523
+ return question.questionGroupId === questionGroupId;
6524
+ });
6525
+ var category = questions === null || questions === void 0 ? void 0 : (_questions$ = questions[0]) === null || _questions$ === void 0 ? void 0 : (_questions$$categorie = _questions$.categories) === null || _questions$$categorie === void 0 ? void 0 : _questions$$categorie[0];
6526
+ var subcategory = !category ? null : questions === null || questions === void 0 ? void 0 : (_questions$2 = questions[0]) === null || _questions$2 === void 0 ? void 0 : (_questions$2$categori = _questions$2.categories) === null || _questions$2$categori === void 0 ? void 0 : _questions$2$categori.find(function (c) {
6527
+ return !!c.parentCategoryId && c.parentCategoryId === (category === null || category === void 0 ? void 0 : category.id);
6528
+ });
6529
6529
  return {
6530
- category: category,
6531
- questions: inputData.studentQuestionResults.filter(function (question) {
6532
- return !!question.categories.find(function (i) {
6533
- return i.name === category.name;
6534
- });
6535
- })
6530
+ categories: category && subcategory ? [category, subcategory] : category ? [category] : [],
6531
+ questions: questions,
6532
+ questionGroupId: questionGroupId
6536
6533
  };
6537
6534
  });
6538
- return questionsByCategory;
6535
+ return questionsByCategories;
6539
6536
  };
6540
6537
  var totalSolveTimeCategories = function totalSolveTimeCategories(inputData, categories) {
6541
6538
  var uniqueCategories = new Set();
@@ -18493,11 +18490,12 @@ var TimeOrderChart = function TimeOrderChart(_ref) {
18493
18490
  };
18494
18491
 
18495
18492
  var TextbookAnswerItem = function TextbookAnswerItem(_ref) {
18493
+ var _data$selectedAnswers, _data$textualAnswers, _data$selectedAnswers2, _data$textualAnswers2, _data$selectedAnswers3, _data$textualAnswers3;
18496
18494
  var data = _ref.data,
18497
18495
  nextData = _ref.nextData,
18498
18496
  isFirst = _ref.isFirst,
18499
18497
  isLast = _ref.isLast,
18500
- categoryId = _ref.categoryId,
18498
+ questionGroupId = _ref.questionGroupId,
18501
18499
  _ref$menuContextActio = _ref.menuContextActions,
18502
18500
  menuContextActions = _ref$menuContextActio === void 0 ? [] : _ref$menuContextActio,
18503
18501
  openContextMenu = _ref.openContextMenu,
@@ -18509,14 +18507,14 @@ var TextbookAnswerItem = function TextbookAnswerItem(_ref) {
18509
18507
  var isLearningSpace = getLearningSpace();
18510
18508
  var handleCloseContextMenu = function handleCloseContextMenu() {
18511
18509
  onCloseContextMenu === null || onCloseContextMenu === void 0 ? void 0 : onCloseContextMenu(_extends({}, data, {
18512
- id: ((data === null || data === void 0 ? void 0 : data.id) || 0) + categoryId
18510
+ id: ((data === null || data === void 0 ? void 0 : data.id) || 0) + questionGroupId
18513
18511
  }));
18514
18512
  };
18515
18513
  var handleMoreClick = function handleMoreClick(e) {
18516
18514
  e.preventDefault();
18517
18515
  e.stopPropagation();
18518
18516
  onOpenContextMenu === null || onOpenContextMenu === void 0 ? void 0 : onOpenContextMenu(_extends({}, data, {
18519
- id: ((data === null || data === void 0 ? void 0 : data.id) || 0) + categoryId
18517
+ id: ((data === null || data === void 0 ? void 0 : data.id) || 0) + questionGroupId
18520
18518
  }));
18521
18519
  };
18522
18520
  return React__default.createElement("div", {
@@ -18546,11 +18544,11 @@ var TextbookAnswerItem = function TextbookAnswerItem(_ref) {
18546
18544
  alignItems: "center",
18547
18545
  gap: "4px"
18548
18546
  }
18549
- }, data.isCorrect && data.selectedAnswers !== "" && React__default.createElement(React.Fragment, null, React__default.createElement(iconCorrectAnswer, null), React__default.createElement("span", {
18547
+ }, data.isCorrect && (!!((_data$selectedAnswers = data.selectedAnswers) !== null && _data$selectedAnswers !== void 0 && _data$selectedAnswers.length) || !!((_data$textualAnswers = data.textualAnswers) !== null && _data$textualAnswers !== void 0 && _data$textualAnswers.length)) && React__default.createElement(React.Fragment, null, React__default.createElement(iconCorrectAnswer, null), React__default.createElement("span", {
18550
18548
  className: styles$4["answerCorrect"]
18551
- }, t("correct"))), !data.isCorrect && data.selectedAnswers !== "" && React__default.createElement(React.Fragment, null, React__default.createElement(iconCorrectAnswer$1, null), React__default.createElement("span", {
18549
+ }, t("correct"))), !data.isCorrect && (!!((_data$selectedAnswers2 = data.selectedAnswers) !== null && _data$selectedAnswers2 !== void 0 && _data$selectedAnswers2.length) || !!((_data$textualAnswers2 = data.textualAnswers) !== null && _data$textualAnswers2 !== void 0 && _data$textualAnswers2.length)) && React__default.createElement(React.Fragment, null, React__default.createElement(iconCorrectAnswer$1, null), React__default.createElement("span", {
18552
18550
  className: styles$4["answerIncorrect"]
18553
- }, t("incorrect"))), data.selectedAnswers === "" && React__default.createElement(React.Fragment, null, React__default.createElement(iconNoGrass, null), React__default.createElement("span", {
18551
+ }, t("incorrect"))), !((_data$selectedAnswers3 = data.selectedAnswers) !== null && _data$selectedAnswers3 !== void 0 && _data$selectedAnswers3.length) && !((_data$textualAnswers3 = data.textualAnswers) !== null && _data$textualAnswers3 !== void 0 && _data$textualAnswers3.length) && React__default.createElement(React.Fragment, null, React__default.createElement(iconNoGrass, null), React__default.createElement("span", {
18554
18552
  className: styles$4["answerNograss"]
18555
18553
  }, t("no_solution")))), React__default.createElement("div", {
18556
18554
  className: styles["custom-col-2"],
@@ -18643,24 +18641,28 @@ var TextbookAnswerItem = function TextbookAnswerItem(_ref) {
18643
18641
 
18644
18642
  var TextbookMyAnswer = function TextbookMyAnswer(_ref) {
18645
18643
  var data = _ref.data,
18646
- categories = _ref.categories,
18647
18644
  itemProps = _ref.itemProps,
18648
18645
  questionIdContextMenu = _ref.questionIdContextMenu,
18649
18646
  isStudent = _ref.isStudent;
18650
- var formattedData = formatTextbookDataMyAnswer(data, categories);
18647
+ var questionGroupIds = Array.from(new Set(data.studentQuestionResults.map(function (i) {
18648
+ return i.questionGroupId;
18649
+ }))).sort(function (a, b) {
18650
+ return a - b;
18651
+ });
18652
+ var formattedData = formatTextbookDataMyAnswer(data, questionGroupIds);
18651
18653
  var _useTranslation = reactI18next.useTranslation(),
18652
18654
  t = _useTranslation.t;
18653
- var renderAnswer = function renderAnswer(item, index, questions, categoryId) {
18655
+ var renderAnswer = function renderAnswer(item, index, questions, questionGroupId) {
18654
18656
  var nextItem = index < questions.length - 1 ? questions[index + 1] : undefined;
18655
18657
  var isLast = index === questions.length - 1;
18656
18658
  var isFirst = index === 0;
18657
- var isSelected = (item === null || item === void 0 ? void 0 : item.id) + categoryId === questionIdContextMenu;
18659
+ var isSelected = (item === null || item === void 0 ? void 0 : item.id) + questionGroupId === questionIdContextMenu;
18658
18660
  return React__default.createElement(TextbookAnswerItem, Object.assign({
18659
18661
  key: index
18660
18662
  }, itemProps, {
18661
18663
  openContextMenu: isSelected,
18662
18664
  data: item,
18663
- categoryId: categoryId,
18665
+ questionGroupId: questionGroupId,
18664
18666
  nextData: nextItem,
18665
18667
  isLast: isLast,
18666
18668
  isFirst: isFirst,
@@ -18670,8 +18672,9 @@ var TextbookMyAnswer = function TextbookMyAnswer(_ref) {
18670
18672
  return React__default.createElement("div", {
18671
18673
  className: "" + styles$4["myanswer"]
18672
18674
  }, formattedData && formattedData.length > 0 && formattedData.map(function (item) {
18675
+ var _item$categories;
18673
18676
  return React__default.createElement("div", {
18674
- key: item.category.id
18677
+ key: item.questionGroupId
18675
18678
  }, React__default.createElement("div", {
18676
18679
  className: "" + printStyles["avoid-break-inside"]
18677
18680
  }, React__default.createElement(material.Stack, {
@@ -18769,12 +18772,14 @@ var TextbookMyAnswer = function TextbookMyAnswer(_ref) {
18769
18772
  fontSize: "12px",
18770
18773
  fontWeight: 700
18771
18774
  }
18772
- }, item.category.name))), React__default.createElement("div", {
18775
+ }, (_item$categories = item.categories) === null || _item$categories === void 0 ? void 0 : _item$categories.map(function (i) {
18776
+ return i.name;
18777
+ }).join(" / ")))), React__default.createElement("div", {
18773
18778
  className: styles$4["contentMyAnswer"]
18774
18779
  }, React__default.createElement(ListView, {
18775
18780
  data: item.questions,
18776
18781
  render: function render(question, index) {
18777
- return renderAnswer(question, index, item.questions, item.category.id);
18782
+ return renderAnswer(question, index, item.questions, item.questionGroupId);
18778
18783
  }
18779
18784
  })));
18780
18785
  }));
@@ -18934,11 +18939,30 @@ var TextbookVulnerable = function TextbookVulnerable(_ref) {
18934
18939
  var isOpen = openProblem === keyOpen;
18935
18940
  var incorrectQuestions = React.useMemo(function () {
18936
18941
  return data === null || data === void 0 ? void 0 : data.studentQuestionResults.filter(function (i) {
18937
- return i.selectedAnswers !== "" && i.isCorrect === false && i.isStar === false && i.overallCorrectRate >= correctRateThreshHold$1;
18942
+ var _i$selectedAnswers, _i$textualAnswers;
18943
+ return (((_i$selectedAnswers = i.selectedAnswers) === null || _i$selectedAnswers === void 0 ? void 0 : _i$selectedAnswers.length) || ((_i$textualAnswers = i.textualAnswers) === null || _i$textualAnswers === void 0 ? void 0 : _i$textualAnswers.length)) && i.isCorrect === false && i.isStar === false && i.overallCorrectRate >= correctRateThreshHold$1;
18938
18944
  }).sort(function (q1, q2) {
18939
18945
  return q2.overallCorrectRate === q1.overallCorrectRate ? q1.questionOrder - q2.questionOrder : q2.overallCorrectRate - q1.overallCorrectRate;
18940
18946
  }).slice(0, limitQuestions$1);
18941
18947
  }, [JSON.stringify(data === null || data === void 0 ? void 0 : data.studentQuestionResults)]);
18948
+ var renderTextbookAnswer = function renderTextbookAnswer(type, answers, textualAnswers, isCorrect) {
18949
+ var _textualAnswers$;
18950
+ switch (type) {
18951
+ case exports.QuestionAnswerType.ShortAnswer:
18952
+ case exports.QuestionAnswerType.SynonymProcessing:
18953
+ return isCorrect ? textualAnswers === null || textualAnswers === void 0 ? void 0 : textualAnswers.join(" | ") : (_textualAnswers$ = textualAnswers === null || textualAnswers === void 0 ? void 0 : textualAnswers[0]) != null ? _textualAnswers$ : "";
18954
+ case exports.QuestionAnswerType.SingleChoice:
18955
+ case exports.QuestionAnswerType.MultipleChoice:
18956
+ if (!(answers !== null && answers !== void 0 && answers.length)) return "";
18957
+ return answers.map(function (i) {
18958
+ return t("number_question", {
18959
+ number: i
18960
+ });
18961
+ }).join(",");
18962
+ default:
18963
+ return textualAnswers === null || textualAnswers === void 0 ? void 0 : textualAnswers.join(", ");
18964
+ }
18965
+ };
18942
18966
  var renderAnswer = function renderAnswer(type, content) {
18943
18967
  var _content$split, _content$split$map;
18944
18968
  if (!content) return "";
@@ -18995,12 +19019,12 @@ var TextbookVulnerable = function TextbookVulnerable(_ref) {
18995
19019
  fontSize: "13px",
18996
19020
  fontWeight: 500
18997
19021
  }
18998
- }, renderAnswer(item === null || item === void 0 ? void 0 : item.questionAnswerType, item === null || item === void 0 ? void 0 : item.selectedAnswers)), React__default.createElement("td", {
19022
+ }, typeof item.selectedAnswers === "string" ? renderAnswer(item.questionAnswerType, item.selectedAnswers) : renderTextbookAnswer(item.questionAnswerType, item.selectedAnswers, item.textualAnswers)), React__default.createElement("td", {
18999
19023
  style: {
19000
19024
  textAlign: "center",
19001
19025
  color: styles$4.gray_700
19002
19026
  }
19003
- }, renderAnswer(item === null || item === void 0 ? void 0 : item.questionAnswerType, item === null || item === void 0 ? void 0 : item.correctAnswers)), React__default.createElement("td", {
19027
+ }, typeof item.correctAnswers === "string" ? renderAnswer(item.questionAnswerType, item.correctAnswers) : renderTextbookAnswer(item.questionAnswerType, item.correctAnswers, item.correctTextualAnswers, true)), React__default.createElement("td", {
19004
19028
  style: {
19005
19029
  textAlign: "center",
19006
19030
  color: styles$4.gray_700
@@ -19012,7 +19036,6 @@ var TextbookVulnerable = function TextbookVulnerable(_ref) {
19012
19036
  };
19013
19037
  var renderQuestions = function renderQuestions(questions) {
19014
19038
  return questions.map(function (question) {
19015
- var _question$selectedAns, _question$selectedAns2, _question$selectedAns3, _question$correctAnsw, _question$correctAnsw2, _question$correctAnsw3;
19016
19039
  return React__default.createElement(material.Grid, {
19017
19040
  container: true,
19018
19041
  flexWrap: "nowrap",
@@ -19039,29 +19062,9 @@ var TextbookVulnerable = function TextbookVulnerable(_ref) {
19039
19062
  className: styles$4["span2"]
19040
19063
  }, t("my_wrong_answer"))), React__default.createElement("div", null, React__default.createElement("span", {
19041
19064
  className: styles$4["overallCorrectRate"]
19042
- }, question.overallCorrectRate.toFixed(2), "%"), (question === null || question === void 0 ? void 0 : question.questionAnswerType) === exports.QuestionAnswerType.ShortAnswer ? React__default.createElement("span", {
19043
- className: styles$4["answer"]
19044
- }, React__default.createElement(MathJaxContainer, {
19045
- content: question === null || question === void 0 ? void 0 : question.selectedAnswers
19046
- }), " ", React__default.createElement(MathJaxContainer, {
19047
- content: question === null || question === void 0 ? void 0 : question.correctAnswers
19048
- })) : exports.QuestionAnswerType.MultipleChoice ? React__default.createElement("span", {
19049
- className: styles$4["answer"]
19050
- }, (_question$selectedAns = question.selectedAnswers) === null || _question$selectedAns === void 0 ? void 0 : (_question$selectedAns2 = _question$selectedAns.split("|")) === null || _question$selectedAns2 === void 0 ? void 0 : (_question$selectedAns3 = _question$selectedAns2.map(function (i) {
19051
- return t("number_question", {
19052
- number: i
19053
- });
19054
- })) === null || _question$selectedAns3 === void 0 ? void 0 : _question$selectedAns3.join(","), " ", "(", t("answer"), " ", (_question$correctAnsw = question.correctAnswers) === null || _question$correctAnsw === void 0 ? void 0 : (_question$correctAnsw2 = _question$correctAnsw.split("|")) === null || _question$correctAnsw2 === void 0 ? void 0 : (_question$correctAnsw3 = _question$correctAnsw2.map(function (i) {
19055
- return t("number_question", {
19056
- number: i
19057
- });
19058
- })) === null || _question$correctAnsw3 === void 0 ? void 0 : _question$correctAnsw3.join(","), ")", " ") : React__default.createElement("span", {
19065
+ }, question.overallCorrectRate.toFixed(2), "%"), React__default.createElement("span", {
19059
19066
  className: styles$4["answer"]
19060
- }, t("number_question", {
19061
- number: question.selectedAnswers
19062
- }), " ", "(", t("answer"), " ", t("number_question", {
19063
- number: question.correctAnswers
19064
- }), ")"))));
19067
+ }, typeof question.selectedAnswers === "string" ? renderAnswer(question.questionAnswerType, question.selectedAnswers) : renderTextbookAnswer(question.questionAnswerType, question.selectedAnswers, question.textualAnswers), " ", t("answer"), " ", typeof question.correctAnswers === "string" ? renderAnswer(question.questionAnswerType, question.correctAnswers) : renderTextbookAnswer(question.questionAnswerType, question.correctAnswers, question.correctTextualAnswers, true)))));
19065
19068
  });
19066
19069
  };
19067
19070
  var handleToggle = function handleToggle() {
@@ -20888,7 +20891,6 @@ var ExamResultV2 = function ExamResultV2(props) {
20888
20891
  index: 0
20889
20892
  }, chapterId ? textbookResult && React__default.createElement(TextbookMyAnswer, {
20890
20893
  data: textbookResult,
20891
- categories: categoryResponses,
20892
20894
  isStudent: isStudent,
20893
20895
  questionIdContextMenu: questionIdContextMenu,
20894
20896
  itemProps: questionItemProp