touchstudy-core 0.1.194 → 0.1.196

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 (115) hide show
  1. package/dist/add-ts-nocheck.js +33 -0
  2. package/dist/alert-circle-fill~CSSkoNUz.svg +3 -0
  3. package/dist/calendar_fill~zEgxFwDs.svg +4 -0
  4. package/dist/check-circle_fill~bbGHfKpz.svg +3 -0
  5. package/dist/checked-circle_fill~KLGxfRpW.svg +3 -0
  6. package/dist/clock_fill~mcRclYYO.svg +3 -0
  7. package/dist/close-circle_fill~PRVaHJUQ.svg +3 -0
  8. package/dist/components/Chats/ChatContainer.d.ts +5 -1
  9. package/dist/components/Chats/components/CanvasOverlay.d.ts +11 -0
  10. package/dist/components/Chats/components/InputChat.d.ts +8 -2
  11. package/dist/components/Chats/components/SketchDialog/BgColorTool.d.ts +8 -0
  12. package/dist/components/Chats/components/SketchDialog/BgImgAlignTool.d.ts +10 -0
  13. package/dist/components/Chats/components/SketchDialog/BgImgAlignToolList.d.ts +9 -0
  14. package/dist/components/Chats/components/SketchDialog/BgImgTool.d.ts +13 -0
  15. package/dist/components/Chats/components/SketchDialog/CanvasOverlay.d.ts +11 -0
  16. package/dist/components/Chats/components/SketchDialog/ColorPicker.d.ts +8 -0
  17. package/dist/components/Chats/components/SketchDialog/EraserTool.d.ts +9 -0
  18. package/dist/components/Chats/components/SketchDialog/PencilTool.d.ts +11 -0
  19. package/dist/components/Chats/components/SketchDialog/WidthSlider.d.ts +7 -0
  20. package/dist/components/Chats/components/SketchDialog/index.d.ts +9 -0
  21. package/dist/components/Chats/components/SketchDialog.d.ts +7 -0
  22. package/dist/components/Chats/configs/constants.d.ts +8 -1
  23. package/dist/components/Chats/configs/types.d.ts +2 -0
  24. package/dist/components/Chats/hooks/useChatContainer.d.ts +6 -2
  25. package/dist/components/Chats/styles/styles.d.ts +42 -0
  26. package/dist/components/CkEditor/CkEditor.d.ts +10 -0
  27. package/dist/components/CkEditor/config.d.ts +19 -0
  28. package/dist/components/CkEditor/index.d.ts +2 -0
  29. package/dist/components/Print/hooks/useDeviceType.d.ts +4 -0
  30. package/dist/containers/ExamResult/components/GradesByTerritory/Textbook.d.ts +12 -0
  31. package/dist/containers/ExamResult/components/GradesByTerritory/index.d.ts +12 -0
  32. package/dist/containers/ExamResult/components/ProtractedProblem/index.d.ts +10 -0
  33. package/dist/containers/ExamResult/components/TrickyProblem/Textbook.d.ts +10 -0
  34. package/dist/containers/ExamResult/components/TrickyProblem/index.d.ts +11 -0
  35. package/dist/containers/ExamResult/components/Vulnerable/Textbook.d.ts +11 -0
  36. package/dist/containers/ExamResult/components/Vulnerable/index.d.ts +12 -0
  37. package/dist/containers/Exams/components/ArticleBlock.d.ts +20 -0
  38. package/dist/containers/Exams/components/ArticleGroupView.d.ts +33 -0
  39. package/dist/containers/Exams/components/QuestionBlock.d.ts +19 -0
  40. package/dist/containers/Exams/components/QuestionCompareType.d.ts +9 -0
  41. package/dist/containers/Exams/components/QuestionGroupBlock.d.ts +28 -0
  42. package/dist/containers/Exams/components/QuestionGroupBlockBody.d.ts +23 -0
  43. package/dist/containers/Exams/components/QuestionOrderName.d.ts +9 -0
  44. package/dist/containers/Exams/components/QuestionShortInput.d.ts +13 -0
  45. package/dist/containers/Exams/components/QuestionView.d.ts +20 -0
  46. package/dist/containers/Exams/hooks/useOverallChartContainer.d.ts +9 -0
  47. package/dist/containers/Exams/styles/styles.d.ts +6 -0
  48. package/dist/containers/Notes/components/TeacherAdminNoteDialog.d.ts +4 -0
  49. package/dist/containers/PreparedTextbook/components/Article.d.ts +20 -0
  50. package/dist/containers/PreparedTextbook/components/ArticleBlock.d.ts +20 -0
  51. package/dist/containers/PreparedTextbook/components/Chapter.d.ts +19 -0
  52. package/dist/containers/PreparedTextbook/components/QuestionBlock.d.ts +19 -0
  53. package/dist/containers/PreparedTextbook/components/QuestionCompareType.d.ts +8 -0
  54. package/dist/containers/PreparedTextbook/components/QuestionGroupBlock.d.ts +28 -0
  55. package/dist/containers/PreparedTextbook/components/QuestionGroupBlockBody.d.ts +24 -0
  56. package/dist/containers/PreparedTextbook/components/QuestionOrderName.d.ts +9 -0
  57. package/dist/containers/PreparedTextbook/components/QuestionScore.d.ts +9 -0
  58. package/dist/containers/PreparedTextbook/components/QuestionShortInput.d.ts +12 -0
  59. package/dist/containers/PreparedTextbook/components/QuestionTypeFilter.d.ts +10 -0
  60. package/dist/containers/PreparedTextbook/components/SubChapter.d.ts +18 -0
  61. package/dist/containers/PreparedTextbook/components/TextbookOwners.d.ts +13 -0
  62. package/dist/containers/PreparedTextbook/hooks/useExamDetailView.d.ts +30 -0
  63. package/dist/containers/PreparedTextbook/hooks/useTextbookOptions.d.ts +15 -0
  64. package/dist/containers/PreparedTextbook/styles/styles.d.ts +6 -0
  65. package/dist/containers/PreparedTextbook/views/PreparedTextbook.d.ts +8 -0
  66. package/dist/containers/StudentInfoDrawer/components/Attendance/AttedanceFormDialog.d.ts +13 -0
  67. package/dist/containers/StudentInfoDrawer/components/AttendanceCourseTable.d.ts +15 -0
  68. package/dist/containers/StudentInfoDrawer/components/CourseAttendanceItem.d.ts +10 -0
  69. package/dist/containers/StudentInfoDrawer/components/CourseAttendanceList.d.ts +4 -0
  70. package/dist/containers/StudentInfoDrawer/components/DrawerAttendanceTab.d.ts +4 -0
  71. package/dist/containers/StudentInfoDrawer/components/DrawerExamResultTab.d.ts +9 -0
  72. package/dist/containers/StudentInfoDrawer/components/DrawerNoteTab.d.ts +8 -0
  73. package/dist/containers/StudentInfoDrawer/components/DrawerTextbookResultTab.d.ts +7 -0
  74. package/dist/containers/StudentInfoDrawer/components/Exam/ExanResultList.d.ts +4 -0
  75. package/dist/containers/StudentInfoDrawer/components/ExamResultDrawer.d.ts +13 -0
  76. package/dist/containers/StudentInfoDrawer/components/ExamResultItem.d.ts +10 -0
  77. package/dist/containers/StudentInfoDrawer/components/ExanResultList.d.ts +4 -0
  78. package/dist/containers/StudentInfoDrawer/components/LessonTooltip.d.ts +8 -0
  79. package/dist/containers/StudentInfoDrawer/components/NoteDrawer.d.ts +13 -0
  80. package/dist/containers/StudentInfoDrawer/components/TextbookResultItem.d.ts +10 -0
  81. package/dist/containers/StudentInfoDrawer/components/TextbookResultList.d.ts +4 -0
  82. package/dist/containers/Textbooks/components/ChapterBox.d.ts +4 -0
  83. package/dist/containers/Textbooks/configs/interfaces.d.ts +21 -0
  84. package/dist/containers/Textbooks/hooks/useExam.d.ts +16 -0
  85. package/dist/containers/Textbooks/hooks/useTextbookDetail.d.ts +55 -0
  86. package/dist/containers/Textbooks/views/TextbookDetail.d.ts +15 -0
  87. package/dist/iconPerson~bfprHOKm.svg +4 -0
  88. package/dist/index.js +1001 -139
  89. package/dist/index.js.map +1 -1
  90. package/dist/index.modern.js +1006 -144
  91. package/dist/index.modern.js.map +1 -1
  92. package/dist/layouts/HeaderLink.d.ts +8 -0
  93. package/dist/layouts/TimerCountItem.d.ts +10 -0
  94. package/dist/layouts/TimerDialog.d.ts +9 -0
  95. package/dist/layouts/TimerDropdown.d.ts +3 -0
  96. package/dist/layouts/TimerItem.d.ts +11 -0
  97. package/dist/layouts/configs/constants.d.ts +12 -0
  98. package/dist/layouts/hooks/useCountDownTimer.d.ts +9 -0
  99. package/dist/layouts/partials/AlarmClock.d.ts +10 -0
  100. package/dist/layouts/partials/AlarmClockPanel.d.ts +10 -0
  101. package/dist/layouts/partials/AlarmClockTab.d.ts +10 -0
  102. package/dist/layouts/partials/CircularTimer/index.d.ts +11 -0
  103. package/dist/layouts/partials/CircularTimer/tick.d.ts +9 -0
  104. package/dist/layouts/partials/CircularTimer.d.ts +11 -0
  105. package/dist/layouts/partials/StudyTimerTab.d.ts +12 -0
  106. package/dist/layouts/partials/TimerCountItem.d.ts +10 -0
  107. package/dist/layouts/partials/TimerItem.d.ts +11 -0
  108. package/dist/layouts/partials/TimerTabPanel.d.ts +8 -0
  109. package/dist/layouts/partials/TimerTabs.d.ts +7 -0
  110. package/dist/utils/enums/subject.d.ts +6 -0
  111. package/dist/utils/functions/checkSuperUrl.d.ts +1 -0
  112. package/dist/utils/functions/isRealTabletOrMobileDevice.d.ts +1 -0
  113. package/dist/utils/types/subjects.d.ts +19 -0
  114. package/package.json +8 -9
  115. /package/dist/utils/types/{questionTypeFilter.d.ts → QuestionTypeFilter.d.ts} +0 -0
package/dist/index.js CHANGED
@@ -37,8 +37,10 @@ var CreatableSelect = _interopDefault(require('react-select/creatable'));
37
37
  var tinymce = _interopDefault(require('tinymce'));
38
38
  require('@wiris/mathtype-tinymce6');
39
39
  var tinymceReact = require('@tinymce/tinymce-react');
40
- var fa6 = require('react-icons/fa6');
40
+ var reactSketchCanvas = require('react-sketch-canvas');
41
41
  var md = require('react-icons/md');
42
+ var gr = require('react-icons/gr');
43
+ var fa6 = require('react-icons/fa6');
42
44
  var colors = require('@mui/material/colors');
43
45
  var Grid = _interopDefault(require('@mui/material/Grid'));
44
46
  var Card = _interopDefault(require('@mui/material/Card'));
@@ -62,7 +64,6 @@ var TableCell = _interopDefault(require('@mui/material/TableCell'));
62
64
  var TableRow = _interopDefault(require('@mui/material/TableRow'));
63
65
  var html2pdf = _interopDefault(require('html2pdf.js'));
64
66
  var Slider = _interopDefault(require('react-slick'));
65
- var gr = require('react-icons/gr');
66
67
  var Table = _interopDefault(require('@mui/material/Table'));
67
68
  var TableBody = _interopDefault(require('@mui/material/TableBody'));
68
69
  var TableHead = _interopDefault(require('@mui/material/TableHead'));
@@ -1577,6 +1578,8 @@ var there_are_no_problems_you_were_working_on = "풀던 문제가 없습니다."
1577
1578
  var incomplete_exam = "미참가";
1578
1579
  var completed_exam = "참가";
1579
1580
  var failed_to_send_the_image_error = "이미지를 보내지 못했습니다: {{ message }}";
1581
+ var sketch = "스케치";
1582
+ var sketch_canvas = "스케치 캔버스";
1580
1583
  var lang_ko = {
1581
1584
  problem_solving: problem_solving,
1582
1585
  my_story: my_story,
@@ -2785,7 +2788,9 @@ var lang_ko = {
2785
2788
  there_are_no_problems_you_were_working_on: there_are_no_problems_you_were_working_on,
2786
2789
  incomplete_exam: incomplete_exam,
2787
2790
  completed_exam: completed_exam,
2788
- failed_to_send_the_image_error: failed_to_send_the_image_error
2791
+ failed_to_send_the_image_error: failed_to_send_the_image_error,
2792
+ sketch: sketch,
2793
+ sketch_canvas: sketch_canvas
2789
2794
  };
2790
2795
 
2791
2796
  var problem_solving$1 = "Problem Solving";
@@ -4021,6 +4026,8 @@ var there_are_no_problems_you_were_working_on$1 = "There are no problems you wer
4021
4026
  var incomplete_exam$1 = "Incomplete";
4022
4027
  var completed_exam$1 = "Completed";
4023
4028
  var failed_to_send_the_image_error$1 = "Failed to send the image: {{ message }}";
4029
+ var sketch$1 = "Sketch";
4030
+ var sketch_canvas$1 = "Sketch canvas";
4024
4031
  var lang_en = {
4025
4032
  problem_solving: problem_solving$1,
4026
4033
  my_story: my_story$1,
@@ -5231,7 +5238,9 @@ var lang_en = {
5231
5238
  there_are_no_problems_you_were_working_on: there_are_no_problems_you_were_working_on$1,
5232
5239
  incomplete_exam: incomplete_exam$1,
5233
5240
  completed_exam: completed_exam$1,
5234
- failed_to_send_the_image_error: failed_to_send_the_image_error$1
5241
+ failed_to_send_the_image_error: failed_to_send_the_image_error$1,
5242
+ sketch: sketch$1,
5243
+ sketch_canvas: sketch_canvas$1
5235
5244
  };
5236
5245
 
5237
5246
  i18n__default.use(reactI18next.initReactI18next).init({
@@ -9004,7 +9013,9 @@ var ChatRightItem = function ChatRightItem(_ref) {
9004
9013
  style: {
9005
9014
  height: "200px",
9006
9015
  position: "relative",
9007
- objectFit: "contain"
9016
+ objectFit: "contain",
9017
+ cursor: "pointer",
9018
+ borderRadius: "6px"
9008
9019
  }
9009
9020
  }) : React__default.createElement("div", {
9010
9021
  className: styles$2["wrap-content"] + " " + styles$2["content-chat-receiver"],
@@ -9087,7 +9098,9 @@ var ChatLeftItem = function ChatLeftItem(_ref) {
9087
9098
  style: {
9088
9099
  height: "200px",
9089
9100
  position: "relative",
9090
- objectFit: "contain"
9101
+ objectFit: "contain",
9102
+ cursor: "pointer",
9103
+ borderRadius: "6px"
9091
9104
  }
9092
9105
  }) : React__default.createElement("div", {
9093
9106
  className: styles$2["wrap-content"] + " " + styles$2["content-chat-sender"],
@@ -9597,8 +9610,847 @@ var iconSendMessage = function iconSendMessage(_ref) {
9597
9610
  }));
9598
9611
  };
9599
9612
 
9613
+ var CanvasOverlay = function CanvasOverlay(_ref) {
9614
+ var open = _ref.open,
9615
+ width = _ref.width,
9616
+ height = _ref.height,
9617
+ size = _ref.size,
9618
+ color = _ref.color,
9619
+ isEraser = _ref.isEraser;
9620
+ var overlayRef = React.useRef(null);
9621
+ var _useState = React.useState({
9622
+ x: 0,
9623
+ y: 0
9624
+ }),
9625
+ cursorPosition = _useState[0],
9626
+ setCursorPosition = _useState[1];
9627
+ var _useState2 = React.useState(true),
9628
+ hideCursor = _useState2[0],
9629
+ setHideCursor = _useState2[1];
9630
+ React.useEffect(function () {
9631
+ var updateCursorPosition = function updateCursorPosition(clientX, clientY) {
9632
+ var _overlayRef$current;
9633
+ var rect = (_overlayRef$current = overlayRef.current) === null || _overlayRef$current === void 0 ? void 0 : _overlayRef$current.getBoundingClientRect();
9634
+ var isInside = rect && clientX > rect.left && clientX < rect.right && clientY > rect.top && clientY < rect.bottom;
9635
+ setHideCursor(!isInside);
9636
+ if (rect) setCursorPosition({
9637
+ x: clientX - rect.left,
9638
+ y: clientY - rect.top
9639
+ });
9640
+ };
9641
+ var handleMouseMove = function handleMouseMove(e) {
9642
+ updateCursorPosition(e.clientX, e.clientY);
9643
+ };
9644
+ var handleTouchMove = function handleTouchMove(e) {
9645
+ if (e.touches.length > 0) {
9646
+ var touch = e.touches[0];
9647
+ updateCursorPosition(touch.clientX, touch.clientY);
9648
+ }
9649
+ };
9650
+ if (open) {
9651
+ document.addEventListener("mousemove", handleMouseMove);
9652
+ document.addEventListener("touchmove", handleTouchMove);
9653
+ }
9654
+ return function () {
9655
+ document.removeEventListener("mousemove", handleMouseMove);
9656
+ document.removeEventListener("touchmove", handleTouchMove);
9657
+ };
9658
+ }, [open]);
9659
+ var left = cursorPosition.x - size / 2;
9660
+ var top = cursorPosition.y - size / 2;
9661
+ return React__default.createElement(material.Box, {
9662
+ ref: overlayRef,
9663
+ sx: {
9664
+ position: "absolute",
9665
+ top: 0,
9666
+ left: "50%",
9667
+ transform: "translateX(-50%)",
9668
+ width: width + "px",
9669
+ height: height + "px",
9670
+ pointerEvents: "none",
9671
+ overflow: "hidden"
9672
+ },
9673
+ width: width,
9674
+ height: height
9675
+ }, React__default.createElement(material.Box, {
9676
+ sx: {
9677
+ position: "fixed",
9678
+ top: top,
9679
+ left: left,
9680
+ width: size + "px",
9681
+ height: size + "px",
9682
+ borderRadius: "50%",
9683
+ border: "1px solid " + (isEraser ? "red" : color),
9684
+ backgroundColor: isEraser ? "rgba(255,0,0,0.1)" : "transparent",
9685
+ pointerEvents: "none",
9686
+ zIndex: 10,
9687
+ display: size > 0 && !hideCursor ? "block" : "none"
9688
+ }
9689
+ }));
9690
+ };
9691
+
9692
+ var MessageSortBy;
9693
+ (function (MessageSortBy) {
9694
+ MessageSortBy["CreatedAt"] = "CreatedAt";
9695
+ })(MessageSortBy || (MessageSortBy = {}));
9696
+ var OrderBy;
9697
+ (function (OrderBy) {
9698
+ OrderBy["ASC"] = "ASC";
9699
+ OrderBy["DESC"] = "DESC";
9700
+ })(OrderBy || (OrderBy = {}));
9701
+ var StudentSortBy;
9702
+ (function (StudentSortBy) {
9703
+ StudentSortBy["CreatedAt"] = "CreatedAt";
9704
+ StudentSortBy["FullName"] = "FullName";
9705
+ })(StudentSortBy || (StudentSortBy = {}));
9706
+ var StudentOrderBy;
9707
+ (function (StudentOrderBy) {
9708
+ StudentOrderBy["ASC"] = "ASC";
9709
+ StudentOrderBy["DESC"] = "DESC";
9710
+ })(StudentOrderBy || (StudentOrderBy = {}));
9711
+ var MessageAction;
9712
+ (function (MessageAction) {
9713
+ MessageAction[MessageAction["Default"] = 0] = "Default";
9714
+ MessageAction[MessageAction["Took"] = 1] = "Took";
9715
+ })(MessageAction || (MessageAction = {}));
9716
+ var MessageSourceType;
9717
+ (function (MessageSourceType) {
9718
+ MessageSourceType[MessageSourceType["Default"] = 0] = "Default";
9719
+ MessageSourceType[MessageSourceType["Exam"] = 1] = "Exam";
9720
+ MessageSourceType[MessageSourceType["Class"] = 2] = "Class";
9721
+ })(MessageSourceType || (MessageSourceType = {}));
9722
+ var MessageStatus;
9723
+ (function (MessageStatus) {
9724
+ MessageStatus["Default"] = "Sent";
9725
+ MessageStatus["Sending"] = "Sending...";
9726
+ MessageStatus["SentError"] = "Sent fail, Retry";
9727
+ })(MessageStatus || (MessageStatus = {}));
9728
+
9729
+ var types = {
9730
+ __proto__: null,
9731
+ get MessageSortBy () { return MessageSortBy; },
9732
+ get OrderBy () { return OrderBy; },
9733
+ get StudentSortBy () { return StudentSortBy; },
9734
+ get StudentOrderBy () { return StudentOrderBy; },
9735
+ get MessageAction () { return MessageAction; },
9736
+ get MessageSourceType () { return MessageSourceType; },
9737
+ get MessageStatus () { return MessageStatus; }
9738
+ };
9739
+
9740
+ var ExamStatus;
9741
+ (function (ExamStatus) {
9742
+ ExamStatus["Default"] = "Default";
9743
+ ExamStatus["Pending"] = "Pending";
9744
+ ExamStatus["Inprogress"] = "Inprogress";
9745
+ ExamStatus["Completed"] = "Completed";
9746
+ })(ExamStatus || (ExamStatus = {}));
9747
+ var Roles;
9748
+ (function (Roles) {
9749
+ Roles["Student"] = "Student";
9750
+ Roles["Teacher"] = "Teacher";
9751
+ Roles["Admin"] = "Admin";
9752
+ })(Roles || (Roles = {}));
9753
+ var MESSAGE_DEFAULT_FILTER = {
9754
+ currentPage: 1,
9755
+ pageSize: 15,
9756
+ textSearch: "",
9757
+ sortColumnDirection: OrderBy.DESC,
9758
+ sortColumnName: MessageSortBy.CreatedAt
9759
+ };
9760
+ var AlignList = ["Min", "Mid", "Max"];
9761
+ var DEFAULT_STROKE_COLOR = "#000000";
9762
+ var DEFAULT_BG_COLOR = "#FFFFFF";
9763
+ var DEFAULT_STROKE_WIDTH = 4;
9764
+ var DEFAULT_ERASER_WIDTH = 10;
9765
+ var CANVAS_WIDTH = 800;
9766
+ var CANVAS_HEIGHT = 600;
9767
+
9768
+ var BgImgAlignTool = function BgImgAlignTool(_ref) {
9769
+ var aspect = _ref.aspect,
9770
+ axis = _ref.axis,
9771
+ align = _ref.align,
9772
+ onAlignChange = _ref.onAlignChange;
9773
+ var handleChangeAlign = function handleChangeAlign() {
9774
+ onAlignChange(axis, align);
9775
+ };
9776
+ var icon = React.useMemo(function () {
9777
+ switch (align) {
9778
+ case "Min":
9779
+ return axis === "x" ? React__default.createElement(md.MdAlignHorizontalLeft, {
9780
+ size: 14
9781
+ }) : React__default.createElement(md.MdAlignVerticalTop, {
9782
+ size: 14
9783
+ });
9784
+ case "Mid":
9785
+ return axis === "x" ? React__default.createElement(md.MdAlignHorizontalCenter, {
9786
+ size: 14
9787
+ }) : React__default.createElement(md.MdAlignVerticalCenter, {
9788
+ size: 14
9789
+ });
9790
+ default:
9791
+ return axis === "x" ? React__default.createElement(md.MdAlignHorizontalRight, {
9792
+ size: 14
9793
+ }) : React__default.createElement(md.MdAlignVerticalBottom, {
9794
+ size: 14
9795
+ });
9796
+ }
9797
+ }, [axis, align]);
9798
+ var selected = React.useMemo(function () {
9799
+ return axis === "x" ? aspect.startsWith("" + axis + align) : aspect.endsWith("" + axis.toUpperCase() + align);
9800
+ }, [axis, align, aspect]);
9801
+ return React__default.createElement(material.IconButton, {
9802
+ size: "small",
9803
+ onClick: handleChangeAlign,
9804
+ sx: {
9805
+ p: 1
9806
+ },
9807
+ color: selected ? "success" : undefined
9808
+ }, icon);
9809
+ };
9810
+
9811
+ var BgImgAlignToolList = function BgImgAlignToolList(_ref) {
9812
+ var axis = _ref.axis,
9813
+ aspect = _ref.aspect,
9814
+ onAlignChange = _ref.onAlignChange;
9815
+ return React__default.createElement(material.Stack, {
9816
+ direction: "row",
9817
+ spacing: 1
9818
+ }, AlignList.map(function (align) {
9819
+ return React__default.createElement(BgImgAlignTool, {
9820
+ key: "" + axis + align,
9821
+ aspect: aspect,
9822
+ axis: axis,
9823
+ align: align,
9824
+ onAlignChange: onAlignChange
9825
+ });
9826
+ }));
9827
+ };
9828
+
9829
+ var BgImgTool = function BgImgTool(_ref) {
9830
+ var inputRef = _ref.inputRef,
9831
+ value = _ref.value,
9832
+ apsect = _ref.apsect,
9833
+ onClear = _ref.onClear,
9834
+ onPick = _ref.onPick,
9835
+ onChange = _ref.onChange,
9836
+ onAspectChange = _ref.onAspectChange;
9837
+ return React__default.createElement(material.Stack, {
9838
+ direction: "row",
9839
+ spacing: 1,
9840
+ alignItems: "center"
9841
+ }, React__default.createElement(material.IconButton, {
9842
+ sx: {
9843
+ width: "32px",
9844
+ height: "32px",
9845
+ background: grey[100]
9846
+ },
9847
+ size: "small",
9848
+ onClick: onPick
9849
+ }, React__default.createElement(fa.FaImage, {
9850
+ size: 16
9851
+ }), React__default.createElement("input", {
9852
+ ref: inputRef,
9853
+ hidden: true,
9854
+ type: "file",
9855
+ accept: "image/*",
9856
+ onChange: onChange
9857
+ })), value && React__default.createElement(material.IconButton, {
9858
+ sx: {
9859
+ width: "32px",
9860
+ height: "32px",
9861
+ background: red[900],
9862
+ "&:hover": {
9863
+ background: red[500]
9864
+ }
9865
+ },
9866
+ onClick: onClear
9867
+ }, React__default.createElement(gr.GrClear, {
9868
+ size: 16,
9869
+ color: "#FFF"
9870
+ })), value && React__default.createElement(material.Stack, {
9871
+ direction: "row",
9872
+ alignItems: "center",
9873
+ gap: 1
9874
+ }, React__default.createElement(material.Stack, {
9875
+ direction: "column"
9876
+ }, React__default.createElement(material.IconButton, {
9877
+ size: "small",
9878
+ onClick: function onClick() {
9879
+ return onAspectChange();
9880
+ },
9881
+ sx: {
9882
+ p: 1
9883
+ },
9884
+ color: apsect === "none" ? "success" : undefined
9885
+ }, React__default.createElement(md.MdOutlineZoomOutMap, {
9886
+ size: 14
9887
+ }))), React__default.createElement(material.Stack, {
9888
+ direction: "column"
9889
+ }, React__default.createElement(BgImgAlignToolList, {
9890
+ aspect: apsect,
9891
+ axis: "x",
9892
+ onAlignChange: onAspectChange
9893
+ }), React__default.createElement(BgImgAlignToolList, {
9894
+ aspect: apsect,
9895
+ axis: "y",
9896
+ onAlignChange: onAspectChange
9897
+ }))));
9898
+ };
9899
+
9900
+ var ColorPicker = function ColorPicker(_ref) {
9901
+ var disabled = _ref.disabled,
9902
+ inputRef = _ref.inputRef,
9903
+ onChange = _ref.onChange;
9904
+ return React__default.createElement(material.Box, {
9905
+ width: "32px",
9906
+ height: "32px",
9907
+ borderRadius: "50%",
9908
+ overflow: "hidden",
9909
+ border: "1px solid " + grey[500]
9910
+ }, React__default.createElement("input", {
9911
+ ref: inputRef,
9912
+ onChange: onChange,
9913
+ type: "color",
9914
+ disabled: disabled,
9915
+ style: {
9916
+ width: "200%",
9917
+ height: "200%",
9918
+ borderStyle: "none",
9919
+ backgroundColor: "none",
9920
+ transform: "translate(-25%, -25%)",
9921
+ cursor: "pointer"
9922
+ }
9923
+ }));
9924
+ };
9925
+
9926
+ var boxShadow = "0 3px 1px rgba(0,0,0,0.1),0 4px 8px rgba(0,0,0,0.13),0 0 0 1px rgba(0,0,0,0.02)";
9927
+ var CustomSlider = material.styled(material.Slider)(function (_ref) {
9928
+ var theme = _ref.theme;
9929
+ return _extends({
9930
+ color: green[500],
9931
+ height: 5,
9932
+ width: 120,
9933
+ marginInline: "8px",
9934
+ "& .MuiSlider-thumb": {
9935
+ height: 20,
9936
+ width: 20,
9937
+ backgroundColor: "#fff",
9938
+ boxShadow: "0 0 2px 0px rgba(0, 0, 0, 0.1)",
9939
+ "&:focus, &:hover, &.Mui-active": {
9940
+ boxShadow: "0px 0px 3px 1px rgba(0, 0, 0, 0.1)",
9941
+ "@media (hover: none)": {
9942
+ boxShadow: boxShadow
9943
+ }
9944
+ },
9945
+ "&:before": {
9946
+ boxShadow: "0px 0px 1px 0px rgba(0,0,0,0.2), 0px 0px 0px 0px rgba(0,0,0,0.14), 0px 0px 1px 0px rgba(0,0,0,0.12)"
9947
+ }
9948
+ },
9949
+ "& .MuiSlider-valueLabel": {
9950
+ fontSize: 12,
9951
+ fontWeight: "normal",
9952
+ top: 4,
9953
+ backgroundColor: "unset",
9954
+ color: theme.palette.text.primary,
9955
+ "&::before": {
9956
+ display: "none"
9957
+ },
9958
+ "& *": _extends({
9959
+ background: "transparent",
9960
+ color: "#000"
9961
+ }, theme.applyStyles("dark", {
9962
+ color: "#fff"
9963
+ }))
9964
+ },
9965
+ "& .MuiSlider-track": {
9966
+ border: "none",
9967
+ boxShadow: "inset 0px 0px 4px -2px #000",
9968
+ height: 5
9969
+ },
9970
+ "& .MuiSlider-rail": {
9971
+ opacity: 0.5,
9972
+ boxShadow: "inset 0px 0px 4px -2px #000",
9973
+ backgroundColor: "#d0d0d0"
9974
+ }
9975
+ }, theme.applyStyles("dark", {
9976
+ color: green[700]
9977
+ }));
9978
+ });
9979
+ var WidthSlider = function WidthSlider(_ref2) {
9980
+ var value = _ref2.value,
9981
+ onChange = _ref2.onChange;
9982
+ return React__default.createElement(CustomSlider, {
9983
+ defaultValue: value,
9984
+ onChange: onChange,
9985
+ min: 1,
9986
+ valueLabelDisplay: "on"
9987
+ });
9988
+ };
9989
+
9990
+ var PencilTool = function PencilTool(_ref) {
9991
+ var inputRef = _ref.inputRef,
9992
+ selected = _ref.selected,
9993
+ width = _ref.width,
9994
+ onSelect = _ref.onSelect,
9995
+ onChangeColor = _ref.onChangeColor,
9996
+ onChangeWidth = _ref.onChangeWidth;
9997
+ return React__default.createElement(material.Stack, {
9998
+ direction: "row",
9999
+ spacing: 1,
10000
+ alignItems: "center"
10001
+ }, React__default.createElement(material.IconButton, {
10002
+ sx: _extends({
10003
+ width: "32px",
10004
+ height: "32px",
10005
+ background: !selected ? grey[100] : green[500]
10006
+ }, selected && {
10007
+ color: "#FFFF"
10008
+ }, {
10009
+ "&:hover": {
10010
+ background: !selected ? grey[100] : green[500]
10011
+ }
10012
+ }),
10013
+ size: "small",
10014
+ onClick: onSelect
10015
+ }, React__default.createElement(fa.FaPencilAlt, {
10016
+ size: 14
10017
+ })), React__default.createElement(ColorPicker, {
10018
+ inputRef: inputRef,
10019
+ onChange: onChangeColor
10020
+ }), React__default.createElement(material.Stack, {
10021
+ direction: "row",
10022
+ alignItems: "center",
10023
+ px: 1
10024
+ }, React__default.createElement(WidthSlider, {
10025
+ value: width,
10026
+ onChange: onChangeWidth
10027
+ })));
10028
+ };
10029
+
10030
+ var EraserTool = function EraserTool(_ref) {
10031
+ var selected = _ref.selected,
10032
+ width = _ref.width,
10033
+ onSelect = _ref.onSelect,
10034
+ onChangeWidth = _ref.onChangeWidth;
10035
+ return React__default.createElement(material.Stack, {
10036
+ direction: "row",
10037
+ spacing: 1,
10038
+ alignItems: "center"
10039
+ }, React__default.createElement(material.IconButton, {
10040
+ sx: _extends({
10041
+ width: "32px",
10042
+ height: "32px",
10043
+ background: !selected ? grey[100] : red[900]
10044
+ }, selected && {
10045
+ color: "#FFFF"
10046
+ }, {
10047
+ "&:hover": {
10048
+ background: !selected ? grey[100] : red[900]
10049
+ }
10050
+ }),
10051
+ size: "small",
10052
+ onClick: onSelect
10053
+ }, React__default.createElement(fa.FaEraser, {
10054
+ size: 16
10055
+ })), React__default.createElement(material.Stack, {
10056
+ direction: "row",
10057
+ alignItems: "center",
10058
+ px: 1
10059
+ }, React__default.createElement(WidthSlider, {
10060
+ value: width,
10061
+ onChange: onChangeWidth
10062
+ })));
10063
+ };
10064
+
10065
+ var BgColorTool = function BgColorTool(_ref) {
10066
+ var inputRef = _ref.inputRef,
10067
+ onPick = _ref.onPick,
10068
+ onChange = _ref.onChange;
10069
+ return React__default.createElement(material.Stack, {
10070
+ direction: "row",
10071
+ spacing: 1,
10072
+ alignItems: "center"
10073
+ }, React__default.createElement(material.Button, {
10074
+ onClick: onPick
10075
+ }, React__default.createElement(material.Box, {
10076
+ width: "32px",
10077
+ height: "32px",
10078
+ display: "flex",
10079
+ justifyContent: "center",
10080
+ alignItems: "center"
10081
+ }, React__default.createElement(io.IoIosColorFill, {
10082
+ color: grey[600],
10083
+ size: 20
10084
+ })), React__default.createElement(ColorPicker, {
10085
+ inputRef: inputRef,
10086
+ onChange: onChange
10087
+ })));
10088
+ };
10089
+
10090
+ var ToolContainerStyles = {
10091
+ display: "flex",
10092
+ gap: 2,
10093
+ flexWrap: "nowrap",
10094
+ justifyContent: {
10095
+ lg: "center",
10096
+ sx: "start"
10097
+ },
10098
+ alignItems: "center",
10099
+ px: 4,
10100
+ pb: 2,
10101
+ pt: 1,
10102
+ width: "100%",
10103
+ overflowX: "auto",
10104
+ overflowY: "hidden"
10105
+ };
10106
+ var CanvasContainerStyles = {
10107
+ position: "relative",
10108
+ flexGrow: 1,
10109
+ display: "flex",
10110
+ justifyContent: {
10111
+ lg: "center",
10112
+ sx: "start"
10113
+ }
10114
+ };
10115
+ var CanvasWrapperStyles = {
10116
+ flexGrow: 1,
10117
+ overflow: "scroll",
10118
+ width: "100%",
10119
+ height: "100%",
10120
+ display: "flex",
10121
+ justifyContent: {
10122
+ lg: "center",
10123
+ sx: "start"
10124
+ },
10125
+ padding: "8px 24px 24px"
10126
+ };
10127
+ var IconButtonStyles = {
10128
+ width: "32px",
10129
+ height: "32px",
10130
+ background: grey[100]
10131
+ };
10132
+
10133
+ var Transition = React__default.forwardRef(function Transition(props, ref) {
10134
+ return React__default.createElement(material.Slide, Object.assign({
10135
+ direction: "up",
10136
+ ref: ref
10137
+ }, props));
10138
+ });
10139
+ var SketchDialog = function SketchDialog(_ref) {
10140
+ var open = _ref.open,
10141
+ drawPath = _ref.drawPath,
10142
+ onClose = _ref.onClose,
10143
+ onSave = _ref.onSave;
10144
+ var _useTranslation = reactI18next.useTranslation(),
10145
+ t = _useTranslation.t;
10146
+ var canvasRef = React.useRef(null);
10147
+ var _useState = React.useState(DEFAULT_STROKE_COLOR),
10148
+ strokeColor = _useState[0],
10149
+ setStrokeColor = _useState[1];
10150
+ var _useState2 = React.useState(DEFAULT_STROKE_WIDTH),
10151
+ strokeWidth = _useState2[0],
10152
+ setStrokeWidth = _useState2[1];
10153
+ var _useState3 = React.useState(DEFAULT_ERASER_WIDTH),
10154
+ eraserWidth = _useState3[0],
10155
+ setEraserWidth = _useState3[1];
10156
+ var _useState4 = React.useState(DEFAULT_BG_COLOR),
10157
+ backgroundColor = _useState4[0],
10158
+ setBackgroundColor = _useState4[1];
10159
+ var _useState5 = React.useState(null),
10160
+ backgroundImage = _useState5[0],
10161
+ setBackgroundImage = _useState5[1];
10162
+ var _useState6 = React.useState(false),
10163
+ isEraser = _useState6[0],
10164
+ setIsEraser = _useState6[1];
10165
+ var bgImageInputRef = React.useRef(null);
10166
+ var bgColorRef = React.useRef(null);
10167
+ var colorRef = React.useRef(null);
10168
+ var _useState7 = React.useState("none"),
10169
+ bgImageAspect = _useState7[0],
10170
+ setBgImageAspect = _useState7[1];
10171
+ var getNewAlign = function getNewAlign(axis, align) {
10172
+ if (!axis || !align) return "none";
10173
+ var _bgImageAspect$split = bgImageAspect.split("Y"),
10174
+ xAlign = _bgImageAspect$split[0],
10175
+ yAlign = _bgImageAspect$split[1];
10176
+ if (bgImageAspect === "none" || !xAlign && !yAlign) return axis === "y" ? "xMinY" + align : "x" + align + "YMin";
10177
+ return axis === "y" ? xAlign + "Y" + align : "x" + align + "Y" + yAlign;
10178
+ };
10179
+ var handleChangeAlign = function handleChangeAlign(axis, pos) {
10180
+ var newValue = getNewAlign(axis, pos);
10181
+ setBgImageAspect(newValue);
10182
+ };
10183
+ var handleClickBgColor = function handleClickBgColor() {
10184
+ var _bgColorRef$current;
10185
+ (_bgColorRef$current = bgColorRef.current) === null || _bgColorRef$current === void 0 ? void 0 : _bgColorRef$current.click();
10186
+ };
10187
+ var clearCanvas = function clearCanvas() {
10188
+ var _canvasRef$current;
10189
+ (_canvasRef$current = canvasRef.current) === null || _canvasRef$current === void 0 ? void 0 : _canvasRef$current.clearCanvas();
10190
+ setBackgroundImage(null);
10191
+ if (bgColorRef.current) bgColorRef.current.value = DEFAULT_BG_COLOR;
10192
+ setBackgroundColor(DEFAULT_BG_COLOR);
10193
+ };
10194
+ var undo = function undo() {
10195
+ var _canvasRef$current2;
10196
+ (_canvasRef$current2 = canvasRef.current) === null || _canvasRef$current2 === void 0 ? void 0 : _canvasRef$current2.undo();
10197
+ };
10198
+ var redo = function redo() {
10199
+ var _canvasRef$current3;
10200
+ (_canvasRef$current3 = canvasRef.current) === null || _canvasRef$current3 === void 0 ? void 0 : _canvasRef$current3.redo();
10201
+ };
10202
+ var saveImage = function saveImage() {
10203
+ try {
10204
+ var _canvasRef$current4;
10205
+ return Promise.resolve((_canvasRef$current4 = canvasRef.current) === null || _canvasRef$current4 === void 0 ? void 0 : _canvasRef$current4.exportImage("png")).then(function (imageData) {
10206
+ var _canvasRef$current5;
10207
+ return Promise.resolve((_canvasRef$current5 = canvasRef.current) === null || _canvasRef$current5 === void 0 ? void 0 : _canvasRef$current5.exportPaths()).then(function (data) {
10208
+ onSave(imageData, data);
10209
+ onClose();
10210
+ });
10211
+ });
10212
+ } catch (e) {
10213
+ return Promise.reject(e);
10214
+ }
10215
+ };
10216
+ var handleEraserMode = function handleEraserMode() {
10217
+ var _canvasRef$current6;
10218
+ setIsEraser(true);
10219
+ (_canvasRef$current6 = canvasRef.current) === null || _canvasRef$current6 === void 0 ? void 0 : _canvasRef$current6.eraseMode(true);
10220
+ };
10221
+ var handlePencilMode = function handlePencilMode() {
10222
+ var _canvasRef$current7;
10223
+ setIsEraser(false);
10224
+ (_canvasRef$current7 = canvasRef.current) === null || _canvasRef$current7 === void 0 ? void 0 : _canvasRef$current7.eraseMode(false);
10225
+ };
10226
+ var handleClickChangeBgImage = function handleClickChangeBgImage() {
10227
+ var _bgImageInputRef$curr;
10228
+ (_bgImageInputRef$curr = bgImageInputRef.current) === null || _bgImageInputRef$curr === void 0 ? void 0 : _bgImageInputRef$curr.click();
10229
+ };
10230
+ var handleBackgroundImageChange = function handleBackgroundImageChange(event) {
10231
+ var _event$target$files;
10232
+ var file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files[0];
10233
+ if (file) {
10234
+ var reader = new FileReader();
10235
+ reader.onload = function () {
10236
+ setBackgroundImage(reader.result);
10237
+ };
10238
+ reader.readAsDataURL(file);
10239
+ }
10240
+ };
10241
+ var handleChangePencilColor = function handleChangePencilColor(e) {
10242
+ setStrokeColor(e.target.value);
10243
+ };
10244
+ var handleChangeBgColor = function handleChangeBgColor(e) {
10245
+ setBackgroundColor(e.target.value);
10246
+ };
10247
+ var handleChangeEraserWidth = function handleChangeEraserWidth(e) {
10248
+ return setEraserWidth(Number(e.target.value));
10249
+ };
10250
+ var handleChangePencilWidth = function handleChangePencilWidth(e) {
10251
+ return setStrokeWidth(Number(e.target.value));
10252
+ };
10253
+ var debounceChangeBgColor = _$a.debounce(handleChangeBgColor, 300);
10254
+ var debounceChangePencilColor = _$a.debounce(handleChangePencilColor, 300);
10255
+ var debounceChangeEraserWidth = _$a.debounce(handleChangeEraserWidth, 300);
10256
+ var debounceChangePencilWidth = _$a.debounce(handleChangePencilWidth, 300);
10257
+ var currentToolSize = isEraser ? eraserWidth : strokeWidth;
10258
+ var handleClearBgImage = function handleClearBgImage() {
10259
+ setBackgroundImage(null);
10260
+ };
10261
+ var handleLoad = function handleLoad(data) {
10262
+ try {
10263
+ var _temp = function () {
10264
+ if (data) {
10265
+ var _canvasRef$current8;
10266
+ return Promise.resolve((_canvasRef$current8 = canvasRef.current) === null || _canvasRef$current8 === void 0 ? void 0 : _canvasRef$current8.loadPaths(data)).then(function () {
10267
+ if (bgColorRef.current) bgColorRef.current.value = backgroundColor;
10268
+ });
10269
+ } else {
10270
+ var _canvasRef$current9;
10271
+ return Promise.resolve((_canvasRef$current9 = canvasRef.current) === null || _canvasRef$current9 === void 0 ? void 0 : _canvasRef$current9.clearCanvas()).then(function () {
10272
+ if (bgColorRef.current) bgColorRef.current.value = DEFAULT_BG_COLOR;
10273
+ setBackgroundColor(DEFAULT_BG_COLOR);
10274
+ setBackgroundImage(null);
10275
+ setBgImageAspect("none");
10276
+ });
10277
+ }
10278
+ }();
10279
+ return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
10280
+ } catch (e) {
10281
+ return Promise.reject(e);
10282
+ }
10283
+ };
10284
+ React.useEffect(function () {
10285
+ if (open) {
10286
+ setTimeout(function () {
10287
+ if (canvasRef.current) {
10288
+ handleLoad(drawPath);
10289
+ }
10290
+ }, 0);
10291
+ } else {
10292
+ if (bgColorRef.current) bgColorRef.current.value = DEFAULT_BG_COLOR;
10293
+ if (colorRef.current) colorRef.current.value = DEFAULT_STROKE_COLOR;
10294
+ setStrokeColor(DEFAULT_STROKE_COLOR);
10295
+ setStrokeWidth(DEFAULT_STROKE_WIDTH);
10296
+ setEraserWidth(DEFAULT_ERASER_WIDTH);
10297
+ setIsEraser(false);
10298
+ }
10299
+ }, [open, drawPath]);
10300
+ return React__default.createElement(material.Dialog, {
10301
+ fullScreen: true,
10302
+ open: open,
10303
+ onClose: onClose,
10304
+ TransitionComponent: Transition
10305
+ }, React__default.createElement(material.AppBar, {
10306
+ color: "success",
10307
+ sx: {
10308
+ position: "relative"
10309
+ }
10310
+ }, React__default.createElement(material.Toolbar, null, React__default.createElement(material.IconButton, {
10311
+ sx: {
10312
+ width: "32px",
10313
+ height: "32px"
10314
+ },
10315
+ edge: "start",
10316
+ color: "inherit",
10317
+ onClick: onClose,
10318
+ "aria-label": "close"
10319
+ }, React__default.createElement(io5.IoClose, null)), React__default.createElement(material.Typography, {
10320
+ sx: {
10321
+ ml: 2,
10322
+ flex: 1
10323
+ },
10324
+ variant: "h6",
10325
+ component: "div"
10326
+ }, t("sketch_canvas")), React__default.createElement(material.Stack, {
10327
+ direction: "row",
10328
+ gap: 1
10329
+ }, React__default.createElement(material.Button, {
10330
+ sx: {
10331
+ px: 2
10332
+ },
10333
+ startIcon: React__default.createElement(fa.FaSave, {
10334
+ size: 14
10335
+ }),
10336
+ color: "inherit",
10337
+ onClick: saveImage
10338
+ }, t("save")), React__default.createElement(material.Button, {
10339
+ sx: {
10340
+ px: 2
10341
+ },
10342
+ startIcon: React__default.createElement(gr.GrClearOption, {
10343
+ size: 14
10344
+ }),
10345
+ color: "inherit",
10346
+ onClick: clearCanvas
10347
+ }, t("clear"))))), React__default.createElement(material.Box, {
10348
+ sx: {
10349
+ display: "flex",
10350
+ flexDirection: "column",
10351
+ height: "100%",
10352
+ padding: 2
10353
+ }
10354
+ }, React__default.createElement(material.Box, {
10355
+ sx: ToolContainerStyles
10356
+ }, React__default.createElement(PencilTool, {
10357
+ inputRef: colorRef,
10358
+ width: strokeWidth,
10359
+ selected: !isEraser,
10360
+ onSelect: handlePencilMode,
10361
+ onChangeColor: debounceChangePencilColor,
10362
+ onChangeWidth: debounceChangePencilWidth
10363
+ }), React__default.createElement(material.Divider, {
10364
+ orientation: "vertical",
10365
+ flexItem: true,
10366
+ sx: {
10367
+ borderColor: grey[300]
10368
+ }
10369
+ }), React__default.createElement(EraserTool, {
10370
+ width: eraserWidth,
10371
+ selected: isEraser,
10372
+ onSelect: handleEraserMode,
10373
+ onChangeWidth: debounceChangeEraserWidth
10374
+ }), React__default.createElement(material.Divider, {
10375
+ orientation: "vertical",
10376
+ flexItem: true,
10377
+ sx: {
10378
+ borderColor: grey[300]
10379
+ }
10380
+ }), React__default.createElement(BgColorTool, {
10381
+ inputRef: bgColorRef,
10382
+ onChange: debounceChangeBgColor,
10383
+ onPick: handleClickBgColor
10384
+ }), React__default.createElement(material.Divider, {
10385
+ orientation: "vertical",
10386
+ flexItem: true,
10387
+ sx: {
10388
+ borderColor: grey[300]
10389
+ }
10390
+ }), React__default.createElement(material.Stack, {
10391
+ direction: "row",
10392
+ spacing: 1,
10393
+ alignItems: "center"
10394
+ }, React__default.createElement(material.IconButton, {
10395
+ sx: IconButtonStyles,
10396
+ size: "small",
10397
+ onClick: undo
10398
+ }, React__default.createElement(io.IoMdUndo, {
10399
+ size: 20
10400
+ })), React__default.createElement(material.IconButton, {
10401
+ sx: IconButtonStyles,
10402
+ size: "small",
10403
+ onClick: redo
10404
+ }, React__default.createElement(io.IoMdRedo, {
10405
+ size: 20
10406
+ }))), React__default.createElement(material.Divider, {
10407
+ orientation: "vertical",
10408
+ flexItem: true,
10409
+ sx: {
10410
+ borderColor: grey[300]
10411
+ }
10412
+ }), React__default.createElement(BgImgTool, {
10413
+ apsect: bgImageAspect,
10414
+ inputRef: bgImageInputRef,
10415
+ value: backgroundImage,
10416
+ onAspectChange: handleChangeAlign,
10417
+ onChange: handleBackgroundImageChange,
10418
+ onClear: handleClearBgImage,
10419
+ onPick: handleClickChangeBgImage
10420
+ })), React__default.createElement(material.Box, {
10421
+ sx: CanvasWrapperStyles
10422
+ }, React__default.createElement(material.Box, {
10423
+ sx: CanvasContainerStyles
10424
+ }, React__default.createElement(reactSketchCanvas.ReactSketchCanvas, {
10425
+ ref: canvasRef,
10426
+ style: {
10427
+ border: "2px solid " + green[500]
10428
+ },
10429
+ width: CANVAS_WIDTH + "px",
10430
+ height: CANVAS_HEIGHT + "px",
10431
+ strokeWidth: strokeWidth,
10432
+ strokeColor: strokeColor,
10433
+ canvasColor: backgroundColor,
10434
+ backgroundImage: backgroundImage != null ? backgroundImage : undefined,
10435
+ eraserWidth: eraserWidth,
10436
+ preserveBackgroundImageAspectRatio: backgroundImage ? bgImageAspect : undefined
10437
+ }), React__default.createElement(CanvasOverlay, {
10438
+ width: CANVAS_WIDTH,
10439
+ height: CANVAS_HEIGHT,
10440
+ size: currentToolSize,
10441
+ color: strokeColor,
10442
+ open: open,
10443
+ isEraser: isEraser
10444
+ })))));
10445
+ };
10446
+
9600
10447
  var InputChat = function InputChat(_ref) {
9601
- var text = _ref.text,
10448
+ var isSending = _ref.isSending,
10449
+ role = _ref.role,
10450
+ text = _ref.text,
10451
+ drawPath = _ref.drawPath,
10452
+ onClearCanvas = _ref.onClearCanvas,
10453
+ onSaveCanvas = _ref.onSaveCanvas,
9602
10454
  onChangeInput = _ref.onChangeInput,
9603
10455
  onSubmit = _ref.onSubmit,
9604
10456
  isCompleted = _ref.isCompleted,
@@ -9607,10 +10459,20 @@ var InputChat = function InputChat(_ref) {
9607
10459
  handleDeleteSelectedImage = _ref.handleDeleteSelectedImage;
9608
10460
  var _useTranslation = reactI18next.useTranslation(),
9609
10461
  t = _useTranslation.t;
10462
+ var isStudent = role === exports.Role.Student;
9610
10463
  var fileInputRef = React.useRef(null);
10464
+ var _useState = React.useState(false),
10465
+ open = _useState[0],
10466
+ setOpen = _useState[1];
10467
+ var disabled = isCompleted || isSending;
9611
10468
  var handleSubmit = function handleSubmit() {
9612
10469
  onSubmit();
9613
10470
  };
10471
+ var handleToggleSketchDialog = function handleToggleSketchDialog() {
10472
+ setOpen(function (state) {
10473
+ return !state;
10474
+ });
10475
+ };
9614
10476
  var handleSelectedFile = function handleSelectedFile(e) {
9615
10477
  var files = e.target.files;
9616
10478
  handleUploadImage(files[0]);
@@ -9618,13 +10480,26 @@ var InputChat = function InputChat(_ref) {
9618
10480
  fileInputRef.current.value = "";
9619
10481
  }
9620
10482
  };
10483
+ var handleSaveCanvas = function handleSaveCanvas(data, drawPath) {
10484
+ onSaveCanvas(data, drawPath);
10485
+ };
10486
+ var handleClickImage = function handleClickImage() {
10487
+ if (!drawPath) return;
10488
+ handleToggleSketchDialog();
10489
+ };
10490
+ var handleopenSketchDialog = function handleopenSketchDialog() {
10491
+ handleToggleSketchDialog();
10492
+ onClearCanvas();
10493
+ };
9621
10494
  return React__default.createElement(material.Grid, {
9622
10495
  item: true,
9623
10496
  xs: 12,
9624
10497
  padding: "16px"
9625
- }, React__default.createElement(material.Box, {
9626
- display: "flex",
9627
- flexDirection: "row",
10498
+ }, React__default.createElement(material.Stack, {
10499
+ direction: {
10500
+ sx: "column",
10501
+ lg: "row"
10502
+ },
9628
10503
  gap: "24px"
9629
10504
  }, React__default.createElement(material.Box, {
9630
10505
  display: "flex",
@@ -9636,12 +10511,14 @@ var InputChat = function InputChat(_ref) {
9636
10511
  border: selectedFile ? "1px solid #97A1AF" : undefined,
9637
10512
  borderRadius: selectedFile ? "6px" : undefined,
9638
10513
  flexDirection: "column"
9639
- }, selectedFile && React__default.createElement("div", {
10514
+ }, selectedFile && React__default.createElement(material.Box, {
9640
10515
  style: {
9641
10516
  position: "relative",
9642
10517
  margin: "10px",
9643
- width: "fit-content"
9644
- }
10518
+ width: "fit-content",
10519
+ cursor: drawPath ? "pointer" : "unset"
10520
+ },
10521
+ onClick: handleClickImage
9645
10522
  }, React__default.createElement("img", {
9646
10523
  src: selectedFile,
9647
10524
  style: {
@@ -9660,21 +10537,21 @@ var InputChat = function InputChat(_ref) {
9660
10537
  cursor: "pointer",
9661
10538
  background: grey[100]
9662
10539
  },
10540
+ disabled: isSending,
9663
10541
  onClick: handleDeleteSelectedImage
9664
10542
  }, React__default.createElement(fa.FaTrash, {
9665
10543
  size: 16
9666
10544
  }))), !selectedFile && React__default.createElement(TinyChatEditor, {
9667
10545
  initValue: text,
9668
10546
  onChange: onChangeInput,
9669
- disabled: isCompleted
10547
+ disabled: disabled
9670
10548
  })), React__default.createElement(material.Typography, {
9671
10549
  fontWeight: 500,
9672
10550
  fontSize: "10px",
9673
10551
  lineHeight: "11.93px",
9674
10552
  color: "#97A1AF"
9675
- }, t('this_is_the_guidance_text'))), React__default.createElement(material.Box, {
9676
- display: "flex",
9677
- flexDirection: "column",
10553
+ }, t("this_is_the_guidance_text"))), React__default.createElement(material.Stack, {
10554
+ direction: "column",
9678
10555
  justifyContent: "flex-start",
9679
10556
  alignItems: "flex-end",
9680
10557
  gap: "16px"
@@ -9683,11 +10560,19 @@ var InputChat = function InputChat(_ref) {
9683
10560
  fullWidth: true,
9684
10561
  className: styles$2["btn-send"],
9685
10562
  sx: {
9686
- bgcolor: isCompleted ? styles.light + " !important" : styles.less_dark
10563
+ bgcolor: disabled ? styles.light + " !important" : styles.less_dark
9687
10564
  },
9688
- disabled: isCompleted,
10565
+ disabled: disabled,
9689
10566
  onClick: handleSubmit
9690
- }, React__default.createElement(iconSendMessage, null), React__default.createElement(material.Typography, {
10567
+ }, isSending ? React__default.createElement(material.Stack, {
10568
+ justifyContent: "center",
10569
+ alignItems: "center"
10570
+ }, React__default.createElement(material.CircularProgress, {
10571
+ sx: {
10572
+ color: "#FFF"
10573
+ },
10574
+ size: 14
10575
+ })) : React__default.createElement(iconSendMessage, null), React__default.createElement(material.Typography, {
9691
10576
  fontWeight: 700,
9692
10577
  fontSize: "13px",
9693
10578
  lineHeight: "15.51px"
@@ -9695,12 +10580,12 @@ var InputChat = function InputChat(_ref) {
9695
10580
  variant: "outlined",
9696
10581
  component: "label",
9697
10582
  fullWidth: true,
9698
- disabled: isCompleted,
10583
+ disabled: disabled,
9699
10584
  sx: {
9700
10585
  display: "flex",
9701
10586
  gap: "8px",
9702
10587
  padding: "12px !important",
9703
- borderColor: isCompleted ? "transparent" : styles.less_dark,
10588
+ borderColor: disabled ? "transparent" : styles.less_dark,
9704
10589
  borderWidth: "1px"
9705
10590
  }
9706
10591
  }, React__default.createElement(iconPlusCircle, {
@@ -9716,9 +10601,20 @@ var InputChat = function InputChat(_ref) {
9716
10601
  type: "file",
9717
10602
  hidden: true,
9718
10603
  ref: fileInputRef,
9719
- disabled: isCompleted,
10604
+ disabled: disabled,
9720
10605
  accept: "image/png, image/gif, image/jpeg",
9721
10606
  onChangeCapture: handleSelectedFile
10607
+ })), !isStudent && React__default.createElement(React.Fragment, null, React__default.createElement(material.Button, {
10608
+ startIcon: React__default.createElement(md.MdDraw, null),
10609
+ variant: "contained",
10610
+ disabled: disabled,
10611
+ fullWidth: true,
10612
+ onClick: handleopenSketchDialog
10613
+ }, t("sketch")), React__default.createElement(SketchDialog, {
10614
+ open: open,
10615
+ drawPath: drawPath,
10616
+ onClose: handleToggleSketchDialog,
10617
+ onSave: handleSaveCanvas
9722
10618
  })))));
9723
10619
  };
9724
10620
 
@@ -9984,7 +10880,8 @@ var ChatHeader = function ChatHeader(_ref) {
9984
10880
  };
9985
10881
 
9986
10882
  var ChatContainer = function ChatContainer(_ref) {
9987
- var chatHeaderProps = _ref.chatHeaderProps,
10883
+ var role = _ref.role,
10884
+ chatHeaderProps = _ref.chatHeaderProps,
9988
10885
  chatListProps = _ref.chatListProps,
9989
10886
  inputProps = _ref.inputProps,
9990
10887
  _ref$scrollOffset = _ref.scrollOffset,
@@ -10077,76 +10974,9 @@ var ChatContainer = function ChatContainer(_ref) {
10077
10974
  className: "d-flex justify-content-center align-items-center"
10078
10975
  }, React__default.createElement(material.CircularProgress, null)), React__default.createElement(ChatList, Object.assign({}, chatListProps, {
10079
10976
  listItemRef: listItemRef
10080
- }))), React__default.createElement(InputChat, Object.assign({}, inputProps)));
10081
- };
10082
-
10083
- var MessageSortBy;
10084
- (function (MessageSortBy) {
10085
- MessageSortBy["CreatedAt"] = "CreatedAt";
10086
- })(MessageSortBy || (MessageSortBy = {}));
10087
- var OrderBy;
10088
- (function (OrderBy) {
10089
- OrderBy["ASC"] = "ASC";
10090
- OrderBy["DESC"] = "DESC";
10091
- })(OrderBy || (OrderBy = {}));
10092
- var StudentSortBy;
10093
- (function (StudentSortBy) {
10094
- StudentSortBy["CreatedAt"] = "CreatedAt";
10095
- StudentSortBy["FullName"] = "FullName";
10096
- })(StudentSortBy || (StudentSortBy = {}));
10097
- var StudentOrderBy;
10098
- (function (StudentOrderBy) {
10099
- StudentOrderBy["ASC"] = "ASC";
10100
- StudentOrderBy["DESC"] = "DESC";
10101
- })(StudentOrderBy || (StudentOrderBy = {}));
10102
- var MessageAction;
10103
- (function (MessageAction) {
10104
- MessageAction[MessageAction["Default"] = 0] = "Default";
10105
- MessageAction[MessageAction["Took"] = 1] = "Took";
10106
- })(MessageAction || (MessageAction = {}));
10107
- var MessageSourceType;
10108
- (function (MessageSourceType) {
10109
- MessageSourceType[MessageSourceType["Default"] = 0] = "Default";
10110
- MessageSourceType[MessageSourceType["Exam"] = 1] = "Exam";
10111
- MessageSourceType[MessageSourceType["Class"] = 2] = "Class";
10112
- })(MessageSourceType || (MessageSourceType = {}));
10113
- var MessageStatus;
10114
- (function (MessageStatus) {
10115
- MessageStatus["Default"] = "Sent";
10116
- MessageStatus["Sending"] = "Sending...";
10117
- MessageStatus["SentError"] = "Sent fail, Retry";
10118
- })(MessageStatus || (MessageStatus = {}));
10119
-
10120
- var types = {
10121
- __proto__: null,
10122
- get MessageSortBy () { return MessageSortBy; },
10123
- get OrderBy () { return OrderBy; },
10124
- get StudentSortBy () { return StudentSortBy; },
10125
- get StudentOrderBy () { return StudentOrderBy; },
10126
- get MessageAction () { return MessageAction; },
10127
- get MessageSourceType () { return MessageSourceType; },
10128
- get MessageStatus () { return MessageStatus; }
10129
- };
10130
-
10131
- var ExamStatus;
10132
- (function (ExamStatus) {
10133
- ExamStatus["Default"] = "Default";
10134
- ExamStatus["Pending"] = "Pending";
10135
- ExamStatus["Inprogress"] = "Inprogress";
10136
- ExamStatus["Completed"] = "Completed";
10137
- })(ExamStatus || (ExamStatus = {}));
10138
- var Roles;
10139
- (function (Roles) {
10140
- Roles["Student"] = "Student";
10141
- Roles["Teacher"] = "Teacher";
10142
- Roles["Admin"] = "Admin";
10143
- })(Roles || (Roles = {}));
10144
- var MESSAGE_DEFAULT_FILTER = {
10145
- currentPage: 1,
10146
- pageSize: 15,
10147
- textSearch: "",
10148
- sortColumnDirection: OrderBy.DESC,
10149
- sortColumnName: MessageSortBy.CreatedAt
10977
+ }))), React__default.createElement(InputChat, Object.assign({
10978
+ role: role
10979
+ }, inputProps)));
10150
10980
  };
10151
10981
 
10152
10982
  var RECENT_USER_URL = BASE_URL + "/api/recentUsers";
@@ -10375,6 +11205,12 @@ var useChatContainer = function useChatContainer(props) {
10375
11205
  var _useState5 = React.useState(true),
10376
11206
  isScrollToEnd = _useState5[0],
10377
11207
  setScrollToEnd = _useState5[1];
11208
+ var _useState6 = React.useState(),
11209
+ drawPath = _useState6[0],
11210
+ setDrawPath = _useState6[1];
11211
+ var _useState7 = React.useState(false),
11212
+ isSending = _useState7[0],
11213
+ setSending = _useState7[1];
10378
11214
  var isAdmin = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Admin);
10379
11215
  var _useMessageList = useMessageList({
10380
11216
  student: student
@@ -10399,6 +11235,7 @@ var useChatContainer = function useChatContainer(props) {
10399
11235
  try {
10400
11236
  var _temp3 = function _temp3(_result2) {
10401
11237
  if (_exit) return _result2;
11238
+ setSending(false);
10402
11239
  loadingRef.current = false;
10403
11240
  };
10404
11241
  var _exit = false;
@@ -10406,6 +11243,7 @@ var useChatContainer = function useChatContainer(props) {
10406
11243
  loadingRef.current = true;
10407
11244
  if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) return Promise.resolve();
10408
11245
  setScrollToEnd(true);
11246
+ setSending(true);
10409
11247
  var _temp2 = _catch(function () {
10410
11248
  if (file) {
10411
11249
  return Promise.resolve(handleUploadImageData(file)).then(function (selectedFile) {
@@ -10445,6 +11283,7 @@ var useChatContainer = function useChatContainer(props) {
10445
11283
  };
10446
11284
  var handleUploadImage = function handleUploadImage(file) {
10447
11285
  try {
11286
+ handleClearCanvas();
10448
11287
  if (file) {
10449
11288
  setFile(file);
10450
11289
  var reader = new FileReader();
@@ -10458,11 +11297,29 @@ var useChatContainer = function useChatContainer(props) {
10458
11297
  return Promise.reject(e);
10459
11298
  }
10460
11299
  };
11300
+ var handleSaveCanvas = function handleSaveCanvas(data, drawPath) {
11301
+ try {
11302
+ return Promise.resolve(fetch(data)).then(function (_fetch) {
11303
+ return Promise.resolve(_fetch.blob()).then(function (blob) {
11304
+ setFile(blob);
11305
+ setBackgroundImage(data);
11306
+ setDrawPath(drawPath);
11307
+ });
11308
+ });
11309
+ } catch (e) {
11310
+ return Promise.reject(e);
11311
+ }
11312
+ };
11313
+ var handleClearCanvas = function handleClearCanvas() {
11314
+ setBackgroundImage(null);
11315
+ setDrawPath(undefined);
11316
+ setFile(undefined);
11317
+ };
10461
11318
  var handleUploadImageData = function handleUploadImageData(file) {
10462
11319
  try {
10463
11320
  return Promise.resolve(_catch(function () {
10464
11321
  var formData = new FormData();
10465
- formData.append("upload", file);
11322
+ if (file instanceof Blob) formData.append("upload", file, 'drawing.png');else formData.append("upload", file);
10466
11323
  return Promise.resolve(apiUploadImageFile(formData)).then(function (res) {
10467
11324
  var _res$data;
10468
11325
  return {
@@ -10535,7 +11392,8 @@ var useChatContainer = function useChatContainer(props) {
10535
11392
  return Promise.reject(e);
10536
11393
  }
10537
11394
  };
10538
- var handleDeleteSelectedImage = function handleDeleteSelectedImage() {
11395
+ var handleDeleteSelectedImage = function handleDeleteSelectedImage(e) {
11396
+ e === null || e === void 0 ? void 0 : e.stopPropagation();
10539
11397
  setFile(undefined);
10540
11398
  setBackgroundImage(null);
10541
11399
  };
@@ -10623,12 +11481,16 @@ var useChatContainer = function useChatContainer(props) {
10623
11481
  handleDeleteMessage: handleDeleteMessage
10624
11482
  },
10625
11483
  inputProps: {
11484
+ isSending: isSending,
11485
+ drawPath: drawPath,
10626
11486
  selectedFile: backgroundImage,
10627
11487
  text: (message === null || message === void 0 ? void 0 : message.content) || "",
10628
11488
  onChangeInput: handleChangeInput,
10629
11489
  onSubmit: handleAddMessage,
10630
11490
  handleDeleteSelectedImage: handleDeleteSelectedImage,
10631
11491
  handleUploadImage: handleUploadImage,
11492
+ onSaveCanvas: handleSaveCanvas,
11493
+ onClearCanvas: handleClearCanvas,
10632
11494
  isCompleted: selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.isCompleted
10633
11495
  },
10634
11496
  isScrollToEnd: isScrollToEnd,
@@ -23192,12 +24054,12 @@ var useExamResultData = function useExamResultData(props) {
23192
24054
  var _useState9 = React.useState(),
23193
24055
  openProblem = _useState9[0],
23194
24056
  setOpenProblem = _useState9[1];
23195
- var _useState0 = React.useState(),
23196
- selectedQuestion = _useState0[0],
23197
- setSelectedQuestion = _useState0[1];
23198
- var _useState1 = React.useState(),
23199
- errorMessage = _useState1[0],
23200
- setErrorMessage = _useState1[1];
24057
+ var _useState10 = React.useState(),
24058
+ selectedQuestion = _useState10[0],
24059
+ setSelectedQuestion = _useState10[1];
24060
+ var _useState11 = React.useState(),
24061
+ errorMessage = _useState11[0],
24062
+ setErrorMessage = _useState11[1];
23201
24063
  var _useTranslation = reactI18next.useTranslation(),
23202
24064
  t = _useTranslation.t;
23203
24065
  var isBelongAcademy = !!user && user.academyDomain && !user.isLearningSpace;
@@ -24090,7 +24952,7 @@ var useOverallChartContainer = function useOverallChartContainer(isStudent, exam
24090
24952
  return [texts.slice(0, middle), texts.slice(middle)];
24091
24953
  }, [JSON.stringify(categories)]);
24092
24954
  var formatTooltip = React.useCallback(function (_ref2) {
24093
- var _overallData$data$0$h, _overallData$data$, _overallData$data$1$h, _overallData$data$2, _overallData$data$2$h, _overallData$data$0$q, _overallData$data$3, _overallData$data$1$q, _overallData$data$4, _overallData$data$0$p, _overallData$data$5, _overallData$data$1$p, _overallData$data$6, _overallData$data$0$t, _overallData$data$7, _overallData$data$1$t, _overallData$data$8, _overallData$data$8$t, _overallData$data$0$l, _overallData$data$9, _overallData$data$1$l, _overallData$data$0, _overallData$data$0$l2, _overallData$data$0$c, _overallData$data$1, _overallData$data$1$c, _overallData$data$1$c2, _overallData$data$10, _overallData$data$10$;
24955
+ var _overallData$data$0$h, _overallData$data$, _overallData$data$1$h, _overallData$data$2, _overallData$data$2$h, _overallData$data$0$q, _overallData$data$3, _overallData$data$1$q, _overallData$data$4, _overallData$data$0$p, _overallData$data$5, _overallData$data$1$p, _overallData$data$6, _overallData$data$0$t, _overallData$data$7, _overallData$data$1$t, _overallData$data$8, _overallData$data$8$t, _overallData$data$0$l, _overallData$data$9, _overallData$data$1$l, _overallData$data$10, _overallData$data$10$, _overallData$data$0$c, _overallData$data$11, _overallData$data$11$, _overallData$data$1$c, _overallData$data$12, _overallData$data$12$;
24094
24956
  var dataPointIndex = _ref2.dataPointIndex,
24095
24957
  w = _ref2.w;
24096
24958
  var label = categories[dataPointIndex];
@@ -24134,12 +24996,12 @@ var useOverallChartContainer = function useOverallChartContainer(isStudent, exam
24134
24996
  total: (_overallData$data$0$l = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$9 = overallData.data[0]) === null || _overallData$data$9 === void 0 ? void 0 : _overallData$data$9.lowLevelQuestions) != null ? _overallData$data$0$l : 0
24135
24997
  });
24136
24998
  avgValue = "" + t("n_questions", {
24137
- total: (_overallData$data$1$l = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$0 = overallData.data[1]) === null || _overallData$data$0 === void 0 ? void 0 : (_overallData$data$0$l2 = _overallData$data$0.lowLevelQuestions) === null || _overallData$data$0$l2 === void 0 ? void 0 : _overallData$data$0$l2.toFixed(2)) != null ? _overallData$data$1$l : 0
24999
+ total: (_overallData$data$1$l = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$10 = overallData.data[1]) === null || _overallData$data$10 === void 0 ? void 0 : (_overallData$data$10$ = _overallData$data$10.lowLevelQuestions) === null || _overallData$data$10$ === void 0 ? void 0 : _overallData$data$10$.toFixed(2)) != null ? _overallData$data$1$l : 0
24138
25000
  });
24139
25001
  break;
24140
25002
  default:
24141
- myValue = ((_overallData$data$0$c = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$1 = overallData.data[0]) === null || _overallData$data$1 === void 0 ? void 0 : (_overallData$data$1$c = _overallData$data$1.correctRate) === null || _overallData$data$1$c === void 0 ? void 0 : _overallData$data$1$c.toFixed(2)) != null ? _overallData$data$0$c : 0) + "%";
24142
- avgValue = ((_overallData$data$1$c2 = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$10 = overallData.data[1]) === null || _overallData$data$10 === void 0 ? void 0 : (_overallData$data$10$ = _overallData$data$10.correctRate) === null || _overallData$data$10$ === void 0 ? void 0 : _overallData$data$10$.toFixed(2)) != null ? _overallData$data$1$c2 : 0) + "%";
25003
+ myValue = ((_overallData$data$0$c = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$11 = overallData.data[0]) === null || _overallData$data$11 === void 0 ? void 0 : (_overallData$data$11$ = _overallData$data$11.correctRate) === null || _overallData$data$11$ === void 0 ? void 0 : _overallData$data$11$.toFixed(2)) != null ? _overallData$data$0$c : 0) + "%";
25004
+ avgValue = ((_overallData$data$1$c = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$12 = overallData.data[1]) === null || _overallData$data$12 === void 0 ? void 0 : (_overallData$data$12$ = _overallData$data$12.correctRate) === null || _overallData$data$12$ === void 0 ? void 0 : _overallData$data$12$.toFixed(2)) != null ? _overallData$data$1$c : 0) + "%";
24143
25005
  break;
24144
25006
  }
24145
25007
  return "<div style=\"padding: 8px; background: #fff; border-radius: 4px;\">\n <div style=\"border-bottom: 1px solid #f3f3f3; margin-bottom: 4px\"><strong>" + label + "</strong></div>\n <div style=\"display: flex; justify-content: space-between\">\n <p style=\"margin-right: 4px\"><strong style=\"color: " + w.globals.colors[0] + "\">" + t("my_data") + ":</strong></p>\n <p>" + myValue + "</p>\n </div>\n <div style=\"display: flex; justify-content: space-between\">\n <p style=\"margin-right: 4px\"><strong style=\"color: " + w.globals.colors[1] + "\">" + t("avg_data") + ":</strong></p>\n <p>" + avgValue + "</p>\n </div>\n </div>";
@@ -29823,13 +30685,13 @@ var useClassDetail = function useClassDetail(_ref) {
29823
30685
  };
29824
30686
  var handleAddToClass = function handleAddToClass(userIds) {
29825
30687
  try {
29826
- var _temp10 = function _temp10() {
30688
+ var _temp12 = function _temp12() {
29827
30689
  dispatch(setLoading(false));
29828
30690
  };
29829
30691
  if (!classId || !openSelectDialog) return Promise.resolve();
29830
30692
  dispatch(setLoading(true));
29831
- var _temp1 = _catch(function () {
29832
- function _temp0() {
30693
+ var _temp11 = _catch(function () {
30694
+ function _temp10() {
29833
30695
  return Promise.resolve(handleGetDetailData(false)).then(function () {
29834
30696
  reactToastify.toast.success(t(classId ? "update_class_successfully" : "create_class_successfully"));
29835
30697
  handleCloseSelectDialog();
@@ -29846,18 +30708,18 @@ var useClassDetail = function useClassDetail(_ref) {
29846
30708
  });
29847
30709
  }
29848
30710
  }();
29849
- return _temp9 && _temp9.then ? _temp9.then(_temp0) : _temp0(_temp9);
30711
+ return _temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9);
29850
30712
  }, function (error) {
29851
30713
  reactToastify.toast.error(getErrorMessage(t, error));
29852
30714
  });
29853
- return Promise.resolve(_temp1 && _temp1.then ? _temp1.then(_temp10) : _temp10(_temp1));
30715
+ return Promise.resolve(_temp11 && _temp11.then ? _temp11.then(_temp12) : _temp12(_temp11));
29854
30716
  } catch (e) {
29855
30717
  return Promise.reject(e);
29856
30718
  }
29857
30719
  };
29858
30720
  var handleSubmit = function handleSubmit(values, _) {
29859
30721
  try {
29860
- var _temp14 = function _temp14() {
30722
+ var _temp16 = function _temp16() {
29861
30723
  dispatch(setLoading(false));
29862
30724
  };
29863
30725
  if (values.courseWeeklyDays.some(function (i) {
@@ -29874,11 +30736,11 @@ var useClassDetail = function useClassDetail(_ref) {
29874
30736
  }
29875
30737
  var body = convertToRequestBody(values);
29876
30738
  dispatch(setLoading(true));
29877
- var _temp13 = _catch(function () {
29878
- function _temp12() {
30739
+ var _temp15 = _catch(function () {
30740
+ function _temp14() {
29879
30741
  reactToastify.toast.success(t(classId ? "update_class_successfully" : "create_class_successfully"));
29880
30742
  }
29881
- var _temp11 = function () {
30743
+ var _temp13 = function () {
29882
30744
  if (!classId) {
29883
30745
  return Promise.resolve(createClassApi(body)).then(function (res) {
29884
30746
  pushTo(history, classListUrl + "/" + res.data.id);
@@ -29889,11 +30751,11 @@ var useClassDetail = function useClassDetail(_ref) {
29889
30751
  });
29890
30752
  }
29891
30753
  }();
29892
- return _temp11 && _temp11.then ? _temp11.then(_temp12) : _temp12(_temp11);
30754
+ return _temp13 && _temp13.then ? _temp13.then(_temp14) : _temp14(_temp13);
29893
30755
  }, function (error) {
29894
30756
  reactToastify.toast.error(getErrorMessage(t, error));
29895
30757
  });
29896
- return Promise.resolve(_temp13 && _temp13.then ? _temp13.then(_temp14) : _temp14(_temp13));
30758
+ return Promise.resolve(_temp15 && _temp15.then ? _temp15.then(_temp16) : _temp16(_temp15));
29897
30759
  } catch (e) {
29898
30760
  return Promise.reject(e);
29899
30761
  }
@@ -29901,7 +30763,7 @@ var useClassDetail = function useClassDetail(_ref) {
29901
30763
  var getStudentNotInClassList = function getStudentNotInClassList() {
29902
30764
  try {
29903
30765
  if (!classId) return Promise.resolve();
29904
- var _temp15 = _catch(function () {
30766
+ var _temp17 = _catch(function () {
29905
30767
  var _textSearchRef$curren;
29906
30768
  return Promise.resolve(getStudentClassApi(classId, _extends({}, filter, {
29907
30769
  textSearch: (_textSearchRef$curren = textSearchRef.current) === null || _textSearchRef$curren === void 0 ? void 0 : _textSearchRef$curren.value,
@@ -29932,7 +30794,7 @@ var useClassDetail = function useClassDetail(_ref) {
29932
30794
  setStudents([]);
29933
30795
  reactToastify.toast.error(getErrorMessage(t, error));
29934
30796
  });
29935
- return Promise.resolve(_temp15 && _temp15.then ? _temp15.then(function () {}) : void 0);
30797
+ return Promise.resolve(_temp17 && _temp17.then ? _temp17.then(function () {}) : void 0);
29936
30798
  } catch (e) {
29937
30799
  return Promise.reject(e);
29938
30800
  }
@@ -29940,7 +30802,7 @@ var useClassDetail = function useClassDetail(_ref) {
29940
30802
  var getTeacherNotInClassList = function getTeacherNotInClassList() {
29941
30803
  try {
29942
30804
  if (!classId) return Promise.resolve();
29943
- var _temp16 = _catch(function () {
30805
+ var _temp18 = _catch(function () {
29944
30806
  var _textSearchRef$curren2;
29945
30807
  return Promise.resolve(getTeacherClassApi(classId, _extends({}, filter, {
29946
30808
  textSearch: (_textSearchRef$curren2 = textSearchRef.current) === null || _textSearchRef$curren2 === void 0 ? void 0 : _textSearchRef$curren2.value,
@@ -29971,7 +30833,7 @@ var useClassDetail = function useClassDetail(_ref) {
29971
30833
  setTeachers([]);
29972
30834
  reactToastify.toast.error(getErrorMessage(t, error));
29973
30835
  });
29974
- return Promise.resolve(_temp16 && _temp16.then ? _temp16.then(function () {}) : void 0);
30836
+ return Promise.resolve(_temp18 && _temp18.then ? _temp18.then(function () {}) : void 0);
29975
30837
  } catch (e) {
29976
30838
  return Promise.reject(e);
29977
30839
  }
@@ -31729,9 +32591,9 @@ var useUserList = function useUserList(role) {
31729
32591
  var _useState9 = React.useState(),
31730
32592
  deleteFile = _useState9[0],
31731
32593
  setDeleteFile = _useState9[1];
31732
- var _useState0 = React.useState(false),
31733
- isOpenDeleteUserCsv = _useState0[0],
31734
- setOpenDeleteUserCsv = _useState0[1];
32594
+ var _useState10 = React.useState(false),
32595
+ isOpenDeleteUserCsv = _useState10[0],
32596
+ setOpenDeleteUserCsv = _useState10[1];
31735
32597
  var inputFileRef = React.useRef(null);
31736
32598
  var firstLoadRef = React.useRef(true);
31737
32599
  var handleChangeSelectedStudent = function handleChangeSelectedStudent(student) {
@@ -31887,7 +32749,7 @@ var useUserList = function useUserList(role) {
31887
32749
  };
31888
32750
  var getUserList = function getUserList() {
31889
32751
  try {
31890
- var _temp0 = function _temp0() {
32752
+ var _temp10 = function _temp10() {
31891
32753
  firstLoadRef.current && dispatch(setLoading(false));
31892
32754
  if (firstLoadRef.current) firstLoadRef.current = false;
31893
32755
  };
@@ -31916,7 +32778,7 @@ var useUserList = function useUserList(role) {
31916
32778
  setPaging(DEFAULT_PAGING_RESPONSE);
31917
32779
  console.log(error);
31918
32780
  });
31919
- return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp0) : _temp0(_temp9));
32781
+ return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9));
31920
32782
  } catch (e) {
31921
32783
  return Promise.reject(e);
31922
32784
  }
@@ -31932,7 +32794,7 @@ var useUserList = function useUserList(role) {
31932
32794
  setSelectedUser(user);
31933
32795
  setOpenUserDialog(true);
31934
32796
  return Promise.resolve(_catch(function () {
31935
- var _temp1 = function () {
32797
+ var _temp11 = function () {
31936
32798
  if (!!user.id && !!user.email) {
31937
32799
  return Promise.resolve(createRecentUserActionListApi({
31938
32800
  userId: user === null || user === void 0 ? void 0 : user.id,
@@ -31942,7 +32804,7 @@ var useUserList = function useUserList(role) {
31942
32804
  })).then(function () {});
31943
32805
  }
31944
32806
  }();
31945
- if (_temp1 && _temp1.then) return _temp1.then(function () {});
32807
+ if (_temp11 && _temp11.then) return _temp11.then(function () {});
31946
32808
  }, function (error) {
31947
32809
  console.error(getErrorMessage(t, error));
31948
32810
  }));
@@ -31971,18 +32833,18 @@ var useUserList = function useUserList(role) {
31971
32833
  };
31972
32834
  var handleCreateOrUpdateUser = function handleCreateOrUpdateUser(value) {
31973
32835
  try {
31974
- var _temp13 = function _temp13() {
32836
+ var _temp15 = function _temp15() {
31975
32837
  dispatch(setLoading(false));
31976
32838
  };
31977
32839
  if (value.fullName === "marcus") return Promise.resolve();
31978
32840
  dispatch(setLoading(true));
31979
- var _temp12 = _catch(function () {
31980
- function _temp11() {
32841
+ var _temp14 = _catch(function () {
32842
+ function _temp13() {
31981
32843
  return Promise.resolve(getUserList()).then(function () {
31982
32844
  handleCloseUserDialog();
31983
32845
  });
31984
32846
  }
31985
- var _temp10 = function () {
32847
+ var _temp12 = function () {
31986
32848
  if (!!(selectedUser !== null && selectedUser !== void 0 && selectedUser.id)) {
31987
32849
  return Promise.resolve(updateUserApi(_extends({}, value, {
31988
32850
  grade: value.grade == null ? undefined : value.grade
@@ -31993,23 +32855,23 @@ var useUserList = function useUserList(role) {
31993
32855
  }))).then(function () {});
31994
32856
  }
31995
32857
  }();
31996
- return _temp10 && _temp10.then ? _temp10.then(_temp11) : _temp11(_temp10);
32858
+ return _temp12 && _temp12.then ? _temp12.then(_temp13) : _temp13(_temp12);
31997
32859
  }, function (error) {
31998
32860
  reactToastify.toast.error(getErrorMessage(t, error));
31999
32861
  });
32000
- return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(_temp13) : _temp13(_temp12));
32862
+ return Promise.resolve(_temp14 && _temp14.then ? _temp14.then(_temp15) : _temp15(_temp14));
32001
32863
  } catch (e) {
32002
32864
  return Promise.reject(e);
32003
32865
  }
32004
32866
  };
32005
32867
  var handleDeleteUser = function handleDeleteUser() {
32006
32868
  try {
32007
- var _temp15 = function _temp15() {
32869
+ var _temp17 = function _temp17() {
32008
32870
  dispatch(setLoading(false));
32009
32871
  };
32010
32872
  if (!(selectedUser !== null && selectedUser !== void 0 && selectedUser.id)) return Promise.resolve();
32011
32873
  dispatch(setLoading(true));
32012
- var _temp14 = _catch(function () {
32874
+ var _temp16 = _catch(function () {
32013
32875
  return Promise.resolve(deleteUserApi(selectedUser.id)).then(function () {
32014
32876
  toggleConfirmDialog();
32015
32877
  getUserList();
@@ -32017,7 +32879,7 @@ var useUserList = function useUserList(role) {
32017
32879
  }, function (error) {
32018
32880
  reactToastify.toast.error(getErrorMessage(t, error));
32019
32881
  });
32020
- return Promise.resolve(_temp14 && _temp14.then ? _temp14.then(_temp15) : _temp15(_temp14));
32882
+ return Promise.resolve(_temp16 && _temp16.then ? _temp16.then(_temp17) : _temp17(_temp16));
32021
32883
  } catch (e) {
32022
32884
  return Promise.reject(e);
32023
32885
  }
@@ -32850,7 +33712,7 @@ var useCategoryOptions = function useCategoryOptions(subjectId, isMath, filter,
32850
33712
  };
32851
33713
  var getQuestionTypes = function getQuestionTypes(categoryId, subCategoryId) {
32852
33714
  try {
32853
- var _temp0 = function _temp0() {
33715
+ var _temp10 = function _temp10() {
32854
33716
  setLoadingQuestionTypes(false);
32855
33717
  };
32856
33718
  setLoadingQuestionTypes(true);
@@ -32873,7 +33735,7 @@ var useCategoryOptions = function useCategoryOptions(subjectId, isMath, filter,
32873
33735
  }, function () {
32874
33736
  setQuestionTypes([]);
32875
33737
  });
32876
- return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp0) : _temp0(_temp9));
33738
+ return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9));
32877
33739
  } catch (e) {
32878
33740
  return Promise.reject(e);
32879
33741
  }