touchstudy-core 0.1.195 → 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 +2 -2
  115. /package/dist/utils/types/{questionTypeFilter.d.ts → QuestionTypeFilter.d.ts} +0 -0
@@ -13,11 +13,11 @@ export { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment';
13
13
  import { DemoContainer } from '@mui/x-date-pickers/internals/demo';
14
14
  export { DemoContainer } from '@mui/x-date-pickers/internals/demo';
15
15
  import React__default, { useState, useEffect, Fragment as Fragment$1, useRef, useCallback, useMemo, memo, createElement } from 'react';
16
- import { useTheme, Container, Typography, Stack, List, ListItem, FormGroup, FormControlLabel, Checkbox, Button, Box, Dialog, DialogTitle, IconButton, useMediaQuery, DialogContent, TextField, DialogActions, styled, FormLabel, Pagination, Paper, InputBase, Tooltip, tooltipClasses, Grid, ClickAwayListener, CircularProgress, FormControl, RadioGroup, Radio, Accordion, AccordionSummary, AccordionDetails, InputAdornment, Card as Card$1, Avatar, Table, TableHead, TableRow, TableCell, TableBody, Divider, Skeleton, Tabs, Tab, Drawer, TableContainer, tableCellClasses, Popover, Switch, InputLabel, Chip, ListItemButton, ListItemAvatar, ListItemText, Badge, CardMedia as CardMedia$1, MenuList } from '@mui/material';
16
+ import { useTheme, Container, Typography, Stack, List, ListItem, FormGroup, FormControlLabel, Checkbox, Button, Box, Dialog, DialogTitle, IconButton, useMediaQuery, DialogContent, TextField, DialogActions, styled, FormLabel, Pagination, Paper, InputBase, Tooltip, tooltipClasses, Grid, ClickAwayListener, Slider, Slide, AppBar, Toolbar, Divider, CircularProgress, FormControl, RadioGroup, Radio, Accordion, AccordionSummary, AccordionDetails, InputAdornment, Card as Card$1, Avatar, Table, TableHead, TableRow, TableCell, TableBody, Skeleton, Tabs, Tab, Drawer, TableContainer, tableCellClasses, Popover, Switch, InputLabel, Chip, ListItemButton, ListItemAvatar, ListItemText, Badge, CardMedia as CardMedia$1, MenuList } from '@mui/material';
17
17
  import moment from 'moment';
18
18
  export { default as moment } from 'moment';
19
- import { FaSave, FaCaretDown, FaTrash, FaTimes, FaSortUp, FaSortDown, FaPlusCircle, FaEye, FaPlus, FaCalendar, FaUser, FaBookOpen, FaUpload, FaCheckCircle, FaShare, FaExchangeAlt, FaPencilAlt, FaBell } from 'react-icons/fa';
20
- import { IoMdArrowBack, IoIosAdd, IoMdSync, IoIosAlert, IoIosArrowDown, IoIosSearch, IoIosArrowUp, IoMdAdd } from 'react-icons/io';
19
+ import { FaSave, FaCaretDown, FaImage, FaPencilAlt, FaEraser, FaTrash, FaTimes, FaSortUp, FaSortDown, FaPlusCircle, FaEye, FaPlus, FaCalendar, FaUser, FaBookOpen, FaUpload, FaCheckCircle, FaShare, FaExchangeAlt, FaBell } from 'react-icons/fa';
20
+ import { IoMdArrowBack, IoIosColorFill, IoMdUndo, IoMdRedo, IoIosAdd, IoMdSync, IoIosAlert, IoIosArrowDown, IoIosSearch, IoIosArrowUp, IoMdAdd } from 'react-icons/io';
21
21
  import { IoClose, IoSearch, IoTime, IoChatbubbleEllipsesSharp, IoPrint, IoChevronDown, IoCheckmarkCircle, IoChevronUpOutline, IoChevronDownOutline, IoReceiptSharp, IoBook, IoWarning, IoCalendarClear, IoPerson, IoInformationCircle, IoTrash, IoAddCircle, IoCheckmark, IoCloseCircle, IoLogOut } from 'react-icons/io5';
22
22
  import _$a from 'lodash';
23
23
  import { useSelector, useDispatch } from 'react-redux';
@@ -40,8 +40,10 @@ import CreatableSelect from 'react-select/creatable';
40
40
  import tinymce from 'tinymce';
41
41
  import '@wiris/mathtype-tinymce6';
42
42
  import { Editor } from '@tinymce/tinymce-react';
43
+ import { ReactSketchCanvas } from 'react-sketch-canvas';
44
+ import { MdAlignHorizontalRight, MdAlignVerticalBottom, MdAlignHorizontalCenter, MdAlignVerticalCenter, MdAlignHorizontalLeft, MdAlignVerticalTop, MdOutlineZoomOutMap, MdDraw, MdExpandMore, MdVisibilityOff, MdVisibility, MdAutorenew, MdMoreHoriz, MdDownload, MdError } from 'react-icons/md';
45
+ import { GrClear, GrClearOption, GrNext, GrPrevious } from 'react-icons/gr';
43
46
  import { FaTrashCan, FaCirclePlus, FaX, FaEye as FaEye$1, FaRotateRight, FaPencil, FaClockRotateLeft } from 'react-icons/fa6';
44
- import { MdExpandMore, MdVisibilityOff, MdVisibility, MdAutorenew, MdMoreHoriz, MdDownload, MdError } from 'react-icons/md';
45
47
  import { yellow as yellow$1, blue, grey as grey$1 } from '@mui/material/colors';
46
48
  import Grid$1 from '@mui/material/Grid';
47
49
  import Card from '@mui/material/Card';
@@ -64,8 +66,7 @@ import { HiOutlinePencilAlt } from 'react-icons/hi';
64
66
  import TableCell$1 from '@mui/material/TableCell';
65
67
  import TableRow$1 from '@mui/material/TableRow';
66
68
  import html2pdf from 'html2pdf.js';
67
- import Slider from 'react-slick';
68
- import { GrNext, GrPrevious } from 'react-icons/gr';
69
+ import Slider$1 from 'react-slick';
69
70
  import Table$1 from '@mui/material/Table';
70
71
  import TableBody$1 from '@mui/material/TableBody';
71
72
  import TableHead$1 from '@mui/material/TableHead';
@@ -1581,6 +1582,8 @@ var there_are_no_problems_you_were_working_on = "풀던 문제가 없습니다."
1581
1582
  var incomplete_exam = "미참가";
1582
1583
  var completed_exam = "참가";
1583
1584
  var failed_to_send_the_image_error = "이미지를 보내지 못했습니다: {{ message }}";
1585
+ var sketch = "스케치";
1586
+ var sketch_canvas = "스케치 캔버스";
1584
1587
  var lang_ko = {
1585
1588
  problem_solving: problem_solving,
1586
1589
  my_story: my_story,
@@ -2789,7 +2792,9 @@ var lang_ko = {
2789
2792
  there_are_no_problems_you_were_working_on: there_are_no_problems_you_were_working_on,
2790
2793
  incomplete_exam: incomplete_exam,
2791
2794
  completed_exam: completed_exam,
2792
- failed_to_send_the_image_error: failed_to_send_the_image_error
2795
+ failed_to_send_the_image_error: failed_to_send_the_image_error,
2796
+ sketch: sketch,
2797
+ sketch_canvas: sketch_canvas
2793
2798
  };
2794
2799
 
2795
2800
  var problem_solving$1 = "Problem Solving";
@@ -4025,6 +4030,8 @@ var there_are_no_problems_you_were_working_on$1 = "There are no problems you wer
4025
4030
  var incomplete_exam$1 = "Incomplete";
4026
4031
  var completed_exam$1 = "Completed";
4027
4032
  var failed_to_send_the_image_error$1 = "Failed to send the image: {{ message }}";
4033
+ var sketch$1 = "Sketch";
4034
+ var sketch_canvas$1 = "Sketch canvas";
4028
4035
  var lang_en = {
4029
4036
  problem_solving: problem_solving$1,
4030
4037
  my_story: my_story$1,
@@ -5235,7 +5242,9 @@ var lang_en = {
5235
5242
  there_are_no_problems_you_were_working_on: there_are_no_problems_you_were_working_on$1,
5236
5243
  incomplete_exam: incomplete_exam$1,
5237
5244
  completed_exam: completed_exam$1,
5238
- failed_to_send_the_image_error: failed_to_send_the_image_error$1
5245
+ failed_to_send_the_image_error: failed_to_send_the_image_error$1,
5246
+ sketch: sketch$1,
5247
+ sketch_canvas: sketch_canvas$1
5239
5248
  };
5240
5249
 
5241
5250
  i18n.use(initReactI18next).init({
@@ -9023,7 +9032,9 @@ var ChatRightItem = function ChatRightItem(_ref) {
9023
9032
  style: {
9024
9033
  height: "200px",
9025
9034
  position: "relative",
9026
- objectFit: "contain"
9035
+ objectFit: "contain",
9036
+ cursor: "pointer",
9037
+ borderRadius: "6px"
9027
9038
  }
9028
9039
  }) : React__default.createElement("div", {
9029
9040
  className: styles$2["wrap-content"] + " " + styles$2["content-chat-receiver"],
@@ -9106,7 +9117,9 @@ var ChatLeftItem = function ChatLeftItem(_ref) {
9106
9117
  style: {
9107
9118
  height: "200px",
9108
9119
  position: "relative",
9109
- objectFit: "contain"
9120
+ objectFit: "contain",
9121
+ cursor: "pointer",
9122
+ borderRadius: "6px"
9110
9123
  }
9111
9124
  }) : React__default.createElement("div", {
9112
9125
  className: styles$2["wrap-content"] + " " + styles$2["content-chat-sender"],
@@ -9616,8 +9629,847 @@ var iconSendMessage = function iconSendMessage(_ref) {
9616
9629
  }));
9617
9630
  };
9618
9631
 
9632
+ var CanvasOverlay = function CanvasOverlay(_ref) {
9633
+ var open = _ref.open,
9634
+ width = _ref.width,
9635
+ height = _ref.height,
9636
+ size = _ref.size,
9637
+ color = _ref.color,
9638
+ isEraser = _ref.isEraser;
9639
+ var overlayRef = useRef(null);
9640
+ var _useState = useState({
9641
+ x: 0,
9642
+ y: 0
9643
+ }),
9644
+ cursorPosition = _useState[0],
9645
+ setCursorPosition = _useState[1];
9646
+ var _useState2 = useState(true),
9647
+ hideCursor = _useState2[0],
9648
+ setHideCursor = _useState2[1];
9649
+ useEffect(function () {
9650
+ var updateCursorPosition = function updateCursorPosition(clientX, clientY) {
9651
+ var _overlayRef$current;
9652
+ var rect = (_overlayRef$current = overlayRef.current) === null || _overlayRef$current === void 0 ? void 0 : _overlayRef$current.getBoundingClientRect();
9653
+ var isInside = rect && clientX > rect.left && clientX < rect.right && clientY > rect.top && clientY < rect.bottom;
9654
+ setHideCursor(!isInside);
9655
+ if (rect) setCursorPosition({
9656
+ x: clientX - rect.left,
9657
+ y: clientY - rect.top
9658
+ });
9659
+ };
9660
+ var handleMouseMove = function handleMouseMove(e) {
9661
+ updateCursorPosition(e.clientX, e.clientY);
9662
+ };
9663
+ var handleTouchMove = function handleTouchMove(e) {
9664
+ if (e.touches.length > 0) {
9665
+ var touch = e.touches[0];
9666
+ updateCursorPosition(touch.clientX, touch.clientY);
9667
+ }
9668
+ };
9669
+ if (open) {
9670
+ document.addEventListener("mousemove", handleMouseMove);
9671
+ document.addEventListener("touchmove", handleTouchMove);
9672
+ }
9673
+ return function () {
9674
+ document.removeEventListener("mousemove", handleMouseMove);
9675
+ document.removeEventListener("touchmove", handleTouchMove);
9676
+ };
9677
+ }, [open]);
9678
+ var left = cursorPosition.x - size / 2;
9679
+ var top = cursorPosition.y - size / 2;
9680
+ return React__default.createElement(Box, {
9681
+ ref: overlayRef,
9682
+ sx: {
9683
+ position: "absolute",
9684
+ top: 0,
9685
+ left: "50%",
9686
+ transform: "translateX(-50%)",
9687
+ width: width + "px",
9688
+ height: height + "px",
9689
+ pointerEvents: "none",
9690
+ overflow: "hidden"
9691
+ },
9692
+ width: width,
9693
+ height: height
9694
+ }, React__default.createElement(Box, {
9695
+ sx: {
9696
+ position: "fixed",
9697
+ top: top,
9698
+ left: left,
9699
+ width: size + "px",
9700
+ height: size + "px",
9701
+ borderRadius: "50%",
9702
+ border: "1px solid " + (isEraser ? "red" : color),
9703
+ backgroundColor: isEraser ? "rgba(255,0,0,0.1)" : "transparent",
9704
+ pointerEvents: "none",
9705
+ zIndex: 10,
9706
+ display: size > 0 && !hideCursor ? "block" : "none"
9707
+ }
9708
+ }));
9709
+ };
9710
+
9711
+ var MessageSortBy;
9712
+ (function (MessageSortBy) {
9713
+ MessageSortBy["CreatedAt"] = "CreatedAt";
9714
+ })(MessageSortBy || (MessageSortBy = {}));
9715
+ var OrderBy$1;
9716
+ (function (OrderBy) {
9717
+ OrderBy["ASC"] = "ASC";
9718
+ OrderBy["DESC"] = "DESC";
9719
+ })(OrderBy$1 || (OrderBy$1 = {}));
9720
+ var StudentSortBy;
9721
+ (function (StudentSortBy) {
9722
+ StudentSortBy["CreatedAt"] = "CreatedAt";
9723
+ StudentSortBy["FullName"] = "FullName";
9724
+ })(StudentSortBy || (StudentSortBy = {}));
9725
+ var StudentOrderBy;
9726
+ (function (StudentOrderBy) {
9727
+ StudentOrderBy["ASC"] = "ASC";
9728
+ StudentOrderBy["DESC"] = "DESC";
9729
+ })(StudentOrderBy || (StudentOrderBy = {}));
9730
+ var MessageAction;
9731
+ (function (MessageAction) {
9732
+ MessageAction[MessageAction["Default"] = 0] = "Default";
9733
+ MessageAction[MessageAction["Took"] = 1] = "Took";
9734
+ })(MessageAction || (MessageAction = {}));
9735
+ var MessageSourceType;
9736
+ (function (MessageSourceType) {
9737
+ MessageSourceType[MessageSourceType["Default"] = 0] = "Default";
9738
+ MessageSourceType[MessageSourceType["Exam"] = 1] = "Exam";
9739
+ MessageSourceType[MessageSourceType["Class"] = 2] = "Class";
9740
+ })(MessageSourceType || (MessageSourceType = {}));
9741
+ var MessageStatus;
9742
+ (function (MessageStatus) {
9743
+ MessageStatus["Default"] = "Sent";
9744
+ MessageStatus["Sending"] = "Sending...";
9745
+ MessageStatus["SentError"] = "Sent fail, Retry";
9746
+ })(MessageStatus || (MessageStatus = {}));
9747
+
9748
+ var types = {
9749
+ __proto__: null,
9750
+ get MessageSortBy () { return MessageSortBy; },
9751
+ get OrderBy () { return OrderBy$1; },
9752
+ get StudentSortBy () { return StudentSortBy; },
9753
+ get StudentOrderBy () { return StudentOrderBy; },
9754
+ get MessageAction () { return MessageAction; },
9755
+ get MessageSourceType () { return MessageSourceType; },
9756
+ get MessageStatus () { return MessageStatus; }
9757
+ };
9758
+
9759
+ var ExamStatus$1;
9760
+ (function (ExamStatus) {
9761
+ ExamStatus["Default"] = "Default";
9762
+ ExamStatus["Pending"] = "Pending";
9763
+ ExamStatus["Inprogress"] = "Inprogress";
9764
+ ExamStatus["Completed"] = "Completed";
9765
+ })(ExamStatus$1 || (ExamStatus$1 = {}));
9766
+ var Roles;
9767
+ (function (Roles) {
9768
+ Roles["Student"] = "Student";
9769
+ Roles["Teacher"] = "Teacher";
9770
+ Roles["Admin"] = "Admin";
9771
+ })(Roles || (Roles = {}));
9772
+ var MESSAGE_DEFAULT_FILTER = {
9773
+ currentPage: 1,
9774
+ pageSize: 15,
9775
+ textSearch: "",
9776
+ sortColumnDirection: OrderBy$1.DESC,
9777
+ sortColumnName: MessageSortBy.CreatedAt
9778
+ };
9779
+ var AlignList = ["Min", "Mid", "Max"];
9780
+ var DEFAULT_STROKE_COLOR = "#000000";
9781
+ var DEFAULT_BG_COLOR = "#FFFFFF";
9782
+ var DEFAULT_STROKE_WIDTH = 4;
9783
+ var DEFAULT_ERASER_WIDTH = 10;
9784
+ var CANVAS_WIDTH = 800;
9785
+ var CANVAS_HEIGHT = 600;
9786
+
9787
+ var BgImgAlignTool = function BgImgAlignTool(_ref) {
9788
+ var aspect = _ref.aspect,
9789
+ axis = _ref.axis,
9790
+ align = _ref.align,
9791
+ onAlignChange = _ref.onAlignChange;
9792
+ var handleChangeAlign = function handleChangeAlign() {
9793
+ onAlignChange(axis, align);
9794
+ };
9795
+ var icon = useMemo(function () {
9796
+ switch (align) {
9797
+ case "Min":
9798
+ return axis === "x" ? React__default.createElement(MdAlignHorizontalLeft, {
9799
+ size: 14
9800
+ }) : React__default.createElement(MdAlignVerticalTop, {
9801
+ size: 14
9802
+ });
9803
+ case "Mid":
9804
+ return axis === "x" ? React__default.createElement(MdAlignHorizontalCenter, {
9805
+ size: 14
9806
+ }) : React__default.createElement(MdAlignVerticalCenter, {
9807
+ size: 14
9808
+ });
9809
+ default:
9810
+ return axis === "x" ? React__default.createElement(MdAlignHorizontalRight, {
9811
+ size: 14
9812
+ }) : React__default.createElement(MdAlignVerticalBottom, {
9813
+ size: 14
9814
+ });
9815
+ }
9816
+ }, [axis, align]);
9817
+ var selected = useMemo(function () {
9818
+ return axis === "x" ? aspect.startsWith("" + axis + align) : aspect.endsWith("" + axis.toUpperCase() + align);
9819
+ }, [axis, align, aspect]);
9820
+ return React__default.createElement(IconButton, {
9821
+ size: "small",
9822
+ onClick: handleChangeAlign,
9823
+ sx: {
9824
+ p: 1
9825
+ },
9826
+ color: selected ? "success" : undefined
9827
+ }, icon);
9828
+ };
9829
+
9830
+ var BgImgAlignToolList = function BgImgAlignToolList(_ref) {
9831
+ var axis = _ref.axis,
9832
+ aspect = _ref.aspect,
9833
+ onAlignChange = _ref.onAlignChange;
9834
+ return React__default.createElement(Stack, {
9835
+ direction: "row",
9836
+ spacing: 1
9837
+ }, AlignList.map(function (align) {
9838
+ return React__default.createElement(BgImgAlignTool, {
9839
+ key: "" + axis + align,
9840
+ aspect: aspect,
9841
+ axis: axis,
9842
+ align: align,
9843
+ onAlignChange: onAlignChange
9844
+ });
9845
+ }));
9846
+ };
9847
+
9848
+ var BgImgTool = function BgImgTool(_ref) {
9849
+ var inputRef = _ref.inputRef,
9850
+ value = _ref.value,
9851
+ apsect = _ref.apsect,
9852
+ onClear = _ref.onClear,
9853
+ onPick = _ref.onPick,
9854
+ onChange = _ref.onChange,
9855
+ onAspectChange = _ref.onAspectChange;
9856
+ return React__default.createElement(Stack, {
9857
+ direction: "row",
9858
+ spacing: 1,
9859
+ alignItems: "center"
9860
+ }, React__default.createElement(IconButton, {
9861
+ sx: {
9862
+ width: "32px",
9863
+ height: "32px",
9864
+ background: grey[100]
9865
+ },
9866
+ size: "small",
9867
+ onClick: onPick
9868
+ }, React__default.createElement(FaImage, {
9869
+ size: 16
9870
+ }), React__default.createElement("input", {
9871
+ ref: inputRef,
9872
+ hidden: true,
9873
+ type: "file",
9874
+ accept: "image/*",
9875
+ onChange: onChange
9876
+ })), value && React__default.createElement(IconButton, {
9877
+ sx: {
9878
+ width: "32px",
9879
+ height: "32px",
9880
+ background: red[900],
9881
+ "&:hover": {
9882
+ background: red[500]
9883
+ }
9884
+ },
9885
+ onClick: onClear
9886
+ }, React__default.createElement(GrClear, {
9887
+ size: 16,
9888
+ color: "#FFF"
9889
+ })), value && React__default.createElement(Stack, {
9890
+ direction: "row",
9891
+ alignItems: "center",
9892
+ gap: 1
9893
+ }, React__default.createElement(Stack, {
9894
+ direction: "column"
9895
+ }, React__default.createElement(IconButton, {
9896
+ size: "small",
9897
+ onClick: function onClick() {
9898
+ return onAspectChange();
9899
+ },
9900
+ sx: {
9901
+ p: 1
9902
+ },
9903
+ color: apsect === "none" ? "success" : undefined
9904
+ }, React__default.createElement(MdOutlineZoomOutMap, {
9905
+ size: 14
9906
+ }))), React__default.createElement(Stack, {
9907
+ direction: "column"
9908
+ }, React__default.createElement(BgImgAlignToolList, {
9909
+ aspect: apsect,
9910
+ axis: "x",
9911
+ onAlignChange: onAspectChange
9912
+ }), React__default.createElement(BgImgAlignToolList, {
9913
+ aspect: apsect,
9914
+ axis: "y",
9915
+ onAlignChange: onAspectChange
9916
+ }))));
9917
+ };
9918
+
9919
+ var ColorPicker = function ColorPicker(_ref) {
9920
+ var disabled = _ref.disabled,
9921
+ inputRef = _ref.inputRef,
9922
+ onChange = _ref.onChange;
9923
+ return React__default.createElement(Box, {
9924
+ width: "32px",
9925
+ height: "32px",
9926
+ borderRadius: "50%",
9927
+ overflow: "hidden",
9928
+ border: "1px solid " + grey[500]
9929
+ }, React__default.createElement("input", {
9930
+ ref: inputRef,
9931
+ onChange: onChange,
9932
+ type: "color",
9933
+ disabled: disabled,
9934
+ style: {
9935
+ width: "200%",
9936
+ height: "200%",
9937
+ borderStyle: "none",
9938
+ backgroundColor: "none",
9939
+ transform: "translate(-25%, -25%)",
9940
+ cursor: "pointer"
9941
+ }
9942
+ }));
9943
+ };
9944
+
9945
+ 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)";
9946
+ var CustomSlider = styled(Slider)(function (_ref) {
9947
+ var theme = _ref.theme;
9948
+ return _extends({
9949
+ color: green[500],
9950
+ height: 5,
9951
+ width: 120,
9952
+ marginInline: "8px",
9953
+ "& .MuiSlider-thumb": {
9954
+ height: 20,
9955
+ width: 20,
9956
+ backgroundColor: "#fff",
9957
+ boxShadow: "0 0 2px 0px rgba(0, 0, 0, 0.1)",
9958
+ "&:focus, &:hover, &.Mui-active": {
9959
+ boxShadow: "0px 0px 3px 1px rgba(0, 0, 0, 0.1)",
9960
+ "@media (hover: none)": {
9961
+ boxShadow: boxShadow
9962
+ }
9963
+ },
9964
+ "&:before": {
9965
+ 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)"
9966
+ }
9967
+ },
9968
+ "& .MuiSlider-valueLabel": {
9969
+ fontSize: 12,
9970
+ fontWeight: "normal",
9971
+ top: 4,
9972
+ backgroundColor: "unset",
9973
+ color: theme.palette.text.primary,
9974
+ "&::before": {
9975
+ display: "none"
9976
+ },
9977
+ "& *": _extends({
9978
+ background: "transparent",
9979
+ color: "#000"
9980
+ }, theme.applyStyles("dark", {
9981
+ color: "#fff"
9982
+ }))
9983
+ },
9984
+ "& .MuiSlider-track": {
9985
+ border: "none",
9986
+ boxShadow: "inset 0px 0px 4px -2px #000",
9987
+ height: 5
9988
+ },
9989
+ "& .MuiSlider-rail": {
9990
+ opacity: 0.5,
9991
+ boxShadow: "inset 0px 0px 4px -2px #000",
9992
+ backgroundColor: "#d0d0d0"
9993
+ }
9994
+ }, theme.applyStyles("dark", {
9995
+ color: green[700]
9996
+ }));
9997
+ });
9998
+ var WidthSlider = function WidthSlider(_ref2) {
9999
+ var value = _ref2.value,
10000
+ onChange = _ref2.onChange;
10001
+ return React__default.createElement(CustomSlider, {
10002
+ defaultValue: value,
10003
+ onChange: onChange,
10004
+ min: 1,
10005
+ valueLabelDisplay: "on"
10006
+ });
10007
+ };
10008
+
10009
+ var PencilTool = function PencilTool(_ref) {
10010
+ var inputRef = _ref.inputRef,
10011
+ selected = _ref.selected,
10012
+ width = _ref.width,
10013
+ onSelect = _ref.onSelect,
10014
+ onChangeColor = _ref.onChangeColor,
10015
+ onChangeWidth = _ref.onChangeWidth;
10016
+ return React__default.createElement(Stack, {
10017
+ direction: "row",
10018
+ spacing: 1,
10019
+ alignItems: "center"
10020
+ }, React__default.createElement(IconButton, {
10021
+ sx: _extends({
10022
+ width: "32px",
10023
+ height: "32px",
10024
+ background: !selected ? grey[100] : green[500]
10025
+ }, selected && {
10026
+ color: "#FFFF"
10027
+ }, {
10028
+ "&:hover": {
10029
+ background: !selected ? grey[100] : green[500]
10030
+ }
10031
+ }),
10032
+ size: "small",
10033
+ onClick: onSelect
10034
+ }, React__default.createElement(FaPencilAlt, {
10035
+ size: 14
10036
+ })), React__default.createElement(ColorPicker, {
10037
+ inputRef: inputRef,
10038
+ onChange: onChangeColor
10039
+ }), React__default.createElement(Stack, {
10040
+ direction: "row",
10041
+ alignItems: "center",
10042
+ px: 1
10043
+ }, React__default.createElement(WidthSlider, {
10044
+ value: width,
10045
+ onChange: onChangeWidth
10046
+ })));
10047
+ };
10048
+
10049
+ var EraserTool = function EraserTool(_ref) {
10050
+ var selected = _ref.selected,
10051
+ width = _ref.width,
10052
+ onSelect = _ref.onSelect,
10053
+ onChangeWidth = _ref.onChangeWidth;
10054
+ return React__default.createElement(Stack, {
10055
+ direction: "row",
10056
+ spacing: 1,
10057
+ alignItems: "center"
10058
+ }, React__default.createElement(IconButton, {
10059
+ sx: _extends({
10060
+ width: "32px",
10061
+ height: "32px",
10062
+ background: !selected ? grey[100] : red[900]
10063
+ }, selected && {
10064
+ color: "#FFFF"
10065
+ }, {
10066
+ "&:hover": {
10067
+ background: !selected ? grey[100] : red[900]
10068
+ }
10069
+ }),
10070
+ size: "small",
10071
+ onClick: onSelect
10072
+ }, React__default.createElement(FaEraser, {
10073
+ size: 16
10074
+ })), React__default.createElement(Stack, {
10075
+ direction: "row",
10076
+ alignItems: "center",
10077
+ px: 1
10078
+ }, React__default.createElement(WidthSlider, {
10079
+ value: width,
10080
+ onChange: onChangeWidth
10081
+ })));
10082
+ };
10083
+
10084
+ var BgColorTool = function BgColorTool(_ref) {
10085
+ var inputRef = _ref.inputRef,
10086
+ onPick = _ref.onPick,
10087
+ onChange = _ref.onChange;
10088
+ return React__default.createElement(Stack, {
10089
+ direction: "row",
10090
+ spacing: 1,
10091
+ alignItems: "center"
10092
+ }, React__default.createElement(Button, {
10093
+ onClick: onPick
10094
+ }, React__default.createElement(Box, {
10095
+ width: "32px",
10096
+ height: "32px",
10097
+ display: "flex",
10098
+ justifyContent: "center",
10099
+ alignItems: "center"
10100
+ }, React__default.createElement(IoIosColorFill, {
10101
+ color: grey[600],
10102
+ size: 20
10103
+ })), React__default.createElement(ColorPicker, {
10104
+ inputRef: inputRef,
10105
+ onChange: onChange
10106
+ })));
10107
+ };
10108
+
10109
+ var ToolContainerStyles = {
10110
+ display: "flex",
10111
+ gap: 2,
10112
+ flexWrap: "nowrap",
10113
+ justifyContent: {
10114
+ lg: "center",
10115
+ sx: "start"
10116
+ },
10117
+ alignItems: "center",
10118
+ px: 4,
10119
+ pb: 2,
10120
+ pt: 1,
10121
+ width: "100%",
10122
+ overflowX: "auto",
10123
+ overflowY: "hidden"
10124
+ };
10125
+ var CanvasContainerStyles = {
10126
+ position: "relative",
10127
+ flexGrow: 1,
10128
+ display: "flex",
10129
+ justifyContent: {
10130
+ lg: "center",
10131
+ sx: "start"
10132
+ }
10133
+ };
10134
+ var CanvasWrapperStyles = {
10135
+ flexGrow: 1,
10136
+ overflow: "scroll",
10137
+ width: "100%",
10138
+ height: "100%",
10139
+ display: "flex",
10140
+ justifyContent: {
10141
+ lg: "center",
10142
+ sx: "start"
10143
+ },
10144
+ padding: "8px 24px 24px"
10145
+ };
10146
+ var IconButtonStyles = {
10147
+ width: "32px",
10148
+ height: "32px",
10149
+ background: grey[100]
10150
+ };
10151
+
10152
+ var Transition = React__default.forwardRef(function Transition(props, ref) {
10153
+ return React__default.createElement(Slide, Object.assign({
10154
+ direction: "up",
10155
+ ref: ref
10156
+ }, props));
10157
+ });
10158
+ var SketchDialog = function SketchDialog(_ref) {
10159
+ var open = _ref.open,
10160
+ drawPath = _ref.drawPath,
10161
+ onClose = _ref.onClose,
10162
+ onSave = _ref.onSave;
10163
+ var _useTranslation = useTranslation(),
10164
+ t = _useTranslation.t;
10165
+ var canvasRef = useRef(null);
10166
+ var _useState = useState(DEFAULT_STROKE_COLOR),
10167
+ strokeColor = _useState[0],
10168
+ setStrokeColor = _useState[1];
10169
+ var _useState2 = useState(DEFAULT_STROKE_WIDTH),
10170
+ strokeWidth = _useState2[0],
10171
+ setStrokeWidth = _useState2[1];
10172
+ var _useState3 = useState(DEFAULT_ERASER_WIDTH),
10173
+ eraserWidth = _useState3[0],
10174
+ setEraserWidth = _useState3[1];
10175
+ var _useState4 = useState(DEFAULT_BG_COLOR),
10176
+ backgroundColor = _useState4[0],
10177
+ setBackgroundColor = _useState4[1];
10178
+ var _useState5 = useState(null),
10179
+ backgroundImage = _useState5[0],
10180
+ setBackgroundImage = _useState5[1];
10181
+ var _useState6 = useState(false),
10182
+ isEraser = _useState6[0],
10183
+ setIsEraser = _useState6[1];
10184
+ var bgImageInputRef = useRef(null);
10185
+ var bgColorRef = useRef(null);
10186
+ var colorRef = useRef(null);
10187
+ var _useState7 = useState("none"),
10188
+ bgImageAspect = _useState7[0],
10189
+ setBgImageAspect = _useState7[1];
10190
+ var getNewAlign = function getNewAlign(axis, align) {
10191
+ if (!axis || !align) return "none";
10192
+ var _bgImageAspect$split = bgImageAspect.split("Y"),
10193
+ xAlign = _bgImageAspect$split[0],
10194
+ yAlign = _bgImageAspect$split[1];
10195
+ if (bgImageAspect === "none" || !xAlign && !yAlign) return axis === "y" ? "xMinY" + align : "x" + align + "YMin";
10196
+ return axis === "y" ? xAlign + "Y" + align : "x" + align + "Y" + yAlign;
10197
+ };
10198
+ var handleChangeAlign = function handleChangeAlign(axis, pos) {
10199
+ var newValue = getNewAlign(axis, pos);
10200
+ setBgImageAspect(newValue);
10201
+ };
10202
+ var handleClickBgColor = function handleClickBgColor() {
10203
+ var _bgColorRef$current;
10204
+ (_bgColorRef$current = bgColorRef.current) === null || _bgColorRef$current === void 0 ? void 0 : _bgColorRef$current.click();
10205
+ };
10206
+ var clearCanvas = function clearCanvas() {
10207
+ var _canvasRef$current;
10208
+ (_canvasRef$current = canvasRef.current) === null || _canvasRef$current === void 0 ? void 0 : _canvasRef$current.clearCanvas();
10209
+ setBackgroundImage(null);
10210
+ if (bgColorRef.current) bgColorRef.current.value = DEFAULT_BG_COLOR;
10211
+ setBackgroundColor(DEFAULT_BG_COLOR);
10212
+ };
10213
+ var undo = function undo() {
10214
+ var _canvasRef$current2;
10215
+ (_canvasRef$current2 = canvasRef.current) === null || _canvasRef$current2 === void 0 ? void 0 : _canvasRef$current2.undo();
10216
+ };
10217
+ var redo = function redo() {
10218
+ var _canvasRef$current3;
10219
+ (_canvasRef$current3 = canvasRef.current) === null || _canvasRef$current3 === void 0 ? void 0 : _canvasRef$current3.redo();
10220
+ };
10221
+ var saveImage = function saveImage() {
10222
+ try {
10223
+ var _canvasRef$current4;
10224
+ return Promise.resolve((_canvasRef$current4 = canvasRef.current) === null || _canvasRef$current4 === void 0 ? void 0 : _canvasRef$current4.exportImage("png")).then(function (imageData) {
10225
+ var _canvasRef$current5;
10226
+ return Promise.resolve((_canvasRef$current5 = canvasRef.current) === null || _canvasRef$current5 === void 0 ? void 0 : _canvasRef$current5.exportPaths()).then(function (data) {
10227
+ onSave(imageData, data);
10228
+ onClose();
10229
+ });
10230
+ });
10231
+ } catch (e) {
10232
+ return Promise.reject(e);
10233
+ }
10234
+ };
10235
+ var handleEraserMode = function handleEraserMode() {
10236
+ var _canvasRef$current6;
10237
+ setIsEraser(true);
10238
+ (_canvasRef$current6 = canvasRef.current) === null || _canvasRef$current6 === void 0 ? void 0 : _canvasRef$current6.eraseMode(true);
10239
+ };
10240
+ var handlePencilMode = function handlePencilMode() {
10241
+ var _canvasRef$current7;
10242
+ setIsEraser(false);
10243
+ (_canvasRef$current7 = canvasRef.current) === null || _canvasRef$current7 === void 0 ? void 0 : _canvasRef$current7.eraseMode(false);
10244
+ };
10245
+ var handleClickChangeBgImage = function handleClickChangeBgImage() {
10246
+ var _bgImageInputRef$curr;
10247
+ (_bgImageInputRef$curr = bgImageInputRef.current) === null || _bgImageInputRef$curr === void 0 ? void 0 : _bgImageInputRef$curr.click();
10248
+ };
10249
+ var handleBackgroundImageChange = function handleBackgroundImageChange(event) {
10250
+ var _event$target$files;
10251
+ var file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files[0];
10252
+ if (file) {
10253
+ var reader = new FileReader();
10254
+ reader.onload = function () {
10255
+ setBackgroundImage(reader.result);
10256
+ };
10257
+ reader.readAsDataURL(file);
10258
+ }
10259
+ };
10260
+ var handleChangePencilColor = function handleChangePencilColor(e) {
10261
+ setStrokeColor(e.target.value);
10262
+ };
10263
+ var handleChangeBgColor = function handleChangeBgColor(e) {
10264
+ setBackgroundColor(e.target.value);
10265
+ };
10266
+ var handleChangeEraserWidth = function handleChangeEraserWidth(e) {
10267
+ return setEraserWidth(Number(e.target.value));
10268
+ };
10269
+ var handleChangePencilWidth = function handleChangePencilWidth(e) {
10270
+ return setStrokeWidth(Number(e.target.value));
10271
+ };
10272
+ var debounceChangeBgColor = _$a.debounce(handleChangeBgColor, 300);
10273
+ var debounceChangePencilColor = _$a.debounce(handleChangePencilColor, 300);
10274
+ var debounceChangeEraserWidth = _$a.debounce(handleChangeEraserWidth, 300);
10275
+ var debounceChangePencilWidth = _$a.debounce(handleChangePencilWidth, 300);
10276
+ var currentToolSize = isEraser ? eraserWidth : strokeWidth;
10277
+ var handleClearBgImage = function handleClearBgImage() {
10278
+ setBackgroundImage(null);
10279
+ };
10280
+ var handleLoad = function handleLoad(data) {
10281
+ try {
10282
+ var _temp = function () {
10283
+ if (data) {
10284
+ var _canvasRef$current8;
10285
+ return Promise.resolve((_canvasRef$current8 = canvasRef.current) === null || _canvasRef$current8 === void 0 ? void 0 : _canvasRef$current8.loadPaths(data)).then(function () {
10286
+ if (bgColorRef.current) bgColorRef.current.value = backgroundColor;
10287
+ });
10288
+ } else {
10289
+ var _canvasRef$current9;
10290
+ return Promise.resolve((_canvasRef$current9 = canvasRef.current) === null || _canvasRef$current9 === void 0 ? void 0 : _canvasRef$current9.clearCanvas()).then(function () {
10291
+ if (bgColorRef.current) bgColorRef.current.value = DEFAULT_BG_COLOR;
10292
+ setBackgroundColor(DEFAULT_BG_COLOR);
10293
+ setBackgroundImage(null);
10294
+ setBgImageAspect("none");
10295
+ });
10296
+ }
10297
+ }();
10298
+ return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
10299
+ } catch (e) {
10300
+ return Promise.reject(e);
10301
+ }
10302
+ };
10303
+ useEffect(function () {
10304
+ if (open) {
10305
+ setTimeout(function () {
10306
+ if (canvasRef.current) {
10307
+ handleLoad(drawPath);
10308
+ }
10309
+ }, 0);
10310
+ } else {
10311
+ if (bgColorRef.current) bgColorRef.current.value = DEFAULT_BG_COLOR;
10312
+ if (colorRef.current) colorRef.current.value = DEFAULT_STROKE_COLOR;
10313
+ setStrokeColor(DEFAULT_STROKE_COLOR);
10314
+ setStrokeWidth(DEFAULT_STROKE_WIDTH);
10315
+ setEraserWidth(DEFAULT_ERASER_WIDTH);
10316
+ setIsEraser(false);
10317
+ }
10318
+ }, [open, drawPath]);
10319
+ return React__default.createElement(Dialog, {
10320
+ fullScreen: true,
10321
+ open: open,
10322
+ onClose: onClose,
10323
+ TransitionComponent: Transition
10324
+ }, React__default.createElement(AppBar, {
10325
+ color: "success",
10326
+ sx: {
10327
+ position: "relative"
10328
+ }
10329
+ }, React__default.createElement(Toolbar, null, React__default.createElement(IconButton, {
10330
+ sx: {
10331
+ width: "32px",
10332
+ height: "32px"
10333
+ },
10334
+ edge: "start",
10335
+ color: "inherit",
10336
+ onClick: onClose,
10337
+ "aria-label": "close"
10338
+ }, React__default.createElement(IoClose, null)), React__default.createElement(Typography, {
10339
+ sx: {
10340
+ ml: 2,
10341
+ flex: 1
10342
+ },
10343
+ variant: "h6",
10344
+ component: "div"
10345
+ }, t("sketch_canvas")), React__default.createElement(Stack, {
10346
+ direction: "row",
10347
+ gap: 1
10348
+ }, React__default.createElement(Button, {
10349
+ sx: {
10350
+ px: 2
10351
+ },
10352
+ startIcon: React__default.createElement(FaSave, {
10353
+ size: 14
10354
+ }),
10355
+ color: "inherit",
10356
+ onClick: saveImage
10357
+ }, t("save")), React__default.createElement(Button, {
10358
+ sx: {
10359
+ px: 2
10360
+ },
10361
+ startIcon: React__default.createElement(GrClearOption, {
10362
+ size: 14
10363
+ }),
10364
+ color: "inherit",
10365
+ onClick: clearCanvas
10366
+ }, t("clear"))))), React__default.createElement(Box, {
10367
+ sx: {
10368
+ display: "flex",
10369
+ flexDirection: "column",
10370
+ height: "100%",
10371
+ padding: 2
10372
+ }
10373
+ }, React__default.createElement(Box, {
10374
+ sx: ToolContainerStyles
10375
+ }, React__default.createElement(PencilTool, {
10376
+ inputRef: colorRef,
10377
+ width: strokeWidth,
10378
+ selected: !isEraser,
10379
+ onSelect: handlePencilMode,
10380
+ onChangeColor: debounceChangePencilColor,
10381
+ onChangeWidth: debounceChangePencilWidth
10382
+ }), React__default.createElement(Divider, {
10383
+ orientation: "vertical",
10384
+ flexItem: true,
10385
+ sx: {
10386
+ borderColor: grey[300]
10387
+ }
10388
+ }), React__default.createElement(EraserTool, {
10389
+ width: eraserWidth,
10390
+ selected: isEraser,
10391
+ onSelect: handleEraserMode,
10392
+ onChangeWidth: debounceChangeEraserWidth
10393
+ }), React__default.createElement(Divider, {
10394
+ orientation: "vertical",
10395
+ flexItem: true,
10396
+ sx: {
10397
+ borderColor: grey[300]
10398
+ }
10399
+ }), React__default.createElement(BgColorTool, {
10400
+ inputRef: bgColorRef,
10401
+ onChange: debounceChangeBgColor,
10402
+ onPick: handleClickBgColor
10403
+ }), React__default.createElement(Divider, {
10404
+ orientation: "vertical",
10405
+ flexItem: true,
10406
+ sx: {
10407
+ borderColor: grey[300]
10408
+ }
10409
+ }), React__default.createElement(Stack, {
10410
+ direction: "row",
10411
+ spacing: 1,
10412
+ alignItems: "center"
10413
+ }, React__default.createElement(IconButton, {
10414
+ sx: IconButtonStyles,
10415
+ size: "small",
10416
+ onClick: undo
10417
+ }, React__default.createElement(IoMdUndo, {
10418
+ size: 20
10419
+ })), React__default.createElement(IconButton, {
10420
+ sx: IconButtonStyles,
10421
+ size: "small",
10422
+ onClick: redo
10423
+ }, React__default.createElement(IoMdRedo, {
10424
+ size: 20
10425
+ }))), React__default.createElement(Divider, {
10426
+ orientation: "vertical",
10427
+ flexItem: true,
10428
+ sx: {
10429
+ borderColor: grey[300]
10430
+ }
10431
+ }), React__default.createElement(BgImgTool, {
10432
+ apsect: bgImageAspect,
10433
+ inputRef: bgImageInputRef,
10434
+ value: backgroundImage,
10435
+ onAspectChange: handleChangeAlign,
10436
+ onChange: handleBackgroundImageChange,
10437
+ onClear: handleClearBgImage,
10438
+ onPick: handleClickChangeBgImage
10439
+ })), React__default.createElement(Box, {
10440
+ sx: CanvasWrapperStyles
10441
+ }, React__default.createElement(Box, {
10442
+ sx: CanvasContainerStyles
10443
+ }, React__default.createElement(ReactSketchCanvas, {
10444
+ ref: canvasRef,
10445
+ style: {
10446
+ border: "2px solid " + green[500]
10447
+ },
10448
+ width: CANVAS_WIDTH + "px",
10449
+ height: CANVAS_HEIGHT + "px",
10450
+ strokeWidth: strokeWidth,
10451
+ strokeColor: strokeColor,
10452
+ canvasColor: backgroundColor,
10453
+ backgroundImage: backgroundImage != null ? backgroundImage : undefined,
10454
+ eraserWidth: eraserWidth,
10455
+ preserveBackgroundImageAspectRatio: backgroundImage ? bgImageAspect : undefined
10456
+ }), React__default.createElement(CanvasOverlay, {
10457
+ width: CANVAS_WIDTH,
10458
+ height: CANVAS_HEIGHT,
10459
+ size: currentToolSize,
10460
+ color: strokeColor,
10461
+ open: open,
10462
+ isEraser: isEraser
10463
+ })))));
10464
+ };
10465
+
9619
10466
  var InputChat = function InputChat(_ref) {
9620
- var text = _ref.text,
10467
+ var isSending = _ref.isSending,
10468
+ role = _ref.role,
10469
+ text = _ref.text,
10470
+ drawPath = _ref.drawPath,
10471
+ onClearCanvas = _ref.onClearCanvas,
10472
+ onSaveCanvas = _ref.onSaveCanvas,
9621
10473
  onChangeInput = _ref.onChangeInput,
9622
10474
  onSubmit = _ref.onSubmit,
9623
10475
  isCompleted = _ref.isCompleted,
@@ -9626,10 +10478,20 @@ var InputChat = function InputChat(_ref) {
9626
10478
  handleDeleteSelectedImage = _ref.handleDeleteSelectedImage;
9627
10479
  var _useTranslation = useTranslation(),
9628
10480
  t = _useTranslation.t;
10481
+ var isStudent = role === Role.Student;
9629
10482
  var fileInputRef = useRef(null);
10483
+ var _useState = useState(false),
10484
+ open = _useState[0],
10485
+ setOpen = _useState[1];
10486
+ var disabled = isCompleted || isSending;
9630
10487
  var handleSubmit = function handleSubmit() {
9631
10488
  onSubmit();
9632
10489
  };
10490
+ var handleToggleSketchDialog = function handleToggleSketchDialog() {
10491
+ setOpen(function (state) {
10492
+ return !state;
10493
+ });
10494
+ };
9633
10495
  var handleSelectedFile = function handleSelectedFile(e) {
9634
10496
  var files = e.target.files;
9635
10497
  handleUploadImage(files[0]);
@@ -9637,13 +10499,26 @@ var InputChat = function InputChat(_ref) {
9637
10499
  fileInputRef.current.value = "";
9638
10500
  }
9639
10501
  };
10502
+ var handleSaveCanvas = function handleSaveCanvas(data, drawPath) {
10503
+ onSaveCanvas(data, drawPath);
10504
+ };
10505
+ var handleClickImage = function handleClickImage() {
10506
+ if (!drawPath) return;
10507
+ handleToggleSketchDialog();
10508
+ };
10509
+ var handleopenSketchDialog = function handleopenSketchDialog() {
10510
+ handleToggleSketchDialog();
10511
+ onClearCanvas();
10512
+ };
9640
10513
  return React__default.createElement(Grid, {
9641
10514
  item: true,
9642
10515
  xs: 12,
9643
10516
  padding: "16px"
9644
- }, React__default.createElement(Box, {
9645
- display: "flex",
9646
- flexDirection: "row",
10517
+ }, React__default.createElement(Stack, {
10518
+ direction: {
10519
+ sx: "column",
10520
+ lg: "row"
10521
+ },
9647
10522
  gap: "24px"
9648
10523
  }, React__default.createElement(Box, {
9649
10524
  display: "flex",
@@ -9655,12 +10530,14 @@ var InputChat = function InputChat(_ref) {
9655
10530
  border: selectedFile ? "1px solid #97A1AF" : undefined,
9656
10531
  borderRadius: selectedFile ? "6px" : undefined,
9657
10532
  flexDirection: "column"
9658
- }, selectedFile && React__default.createElement("div", {
10533
+ }, selectedFile && React__default.createElement(Box, {
9659
10534
  style: {
9660
10535
  position: "relative",
9661
10536
  margin: "10px",
9662
- width: "fit-content"
9663
- }
10537
+ width: "fit-content",
10538
+ cursor: drawPath ? "pointer" : "unset"
10539
+ },
10540
+ onClick: handleClickImage
9664
10541
  }, React__default.createElement("img", {
9665
10542
  src: selectedFile,
9666
10543
  style: {
@@ -9679,21 +10556,21 @@ var InputChat = function InputChat(_ref) {
9679
10556
  cursor: "pointer",
9680
10557
  background: grey[100]
9681
10558
  },
10559
+ disabled: isSending,
9682
10560
  onClick: handleDeleteSelectedImage
9683
10561
  }, React__default.createElement(FaTrash, {
9684
10562
  size: 16
9685
10563
  }))), !selectedFile && React__default.createElement(TinyChatEditor, {
9686
10564
  initValue: text,
9687
10565
  onChange: onChangeInput,
9688
- disabled: isCompleted
10566
+ disabled: disabled
9689
10567
  })), React__default.createElement(Typography, {
9690
10568
  fontWeight: 500,
9691
10569
  fontSize: "10px",
9692
10570
  lineHeight: "11.93px",
9693
10571
  color: "#97A1AF"
9694
- }, t('this_is_the_guidance_text'))), React__default.createElement(Box, {
9695
- display: "flex",
9696
- flexDirection: "column",
10572
+ }, t("this_is_the_guidance_text"))), React__default.createElement(Stack, {
10573
+ direction: "column",
9697
10574
  justifyContent: "flex-start",
9698
10575
  alignItems: "flex-end",
9699
10576
  gap: "16px"
@@ -9702,11 +10579,19 @@ var InputChat = function InputChat(_ref) {
9702
10579
  fullWidth: true,
9703
10580
  className: styles$2["btn-send"],
9704
10581
  sx: {
9705
- bgcolor: isCompleted ? styles.light + " !important" : styles.less_dark
10582
+ bgcolor: disabled ? styles.light + " !important" : styles.less_dark
9706
10583
  },
9707
- disabled: isCompleted,
10584
+ disabled: disabled,
9708
10585
  onClick: handleSubmit
9709
- }, React__default.createElement(iconSendMessage, null), React__default.createElement(Typography, {
10586
+ }, isSending ? React__default.createElement(Stack, {
10587
+ justifyContent: "center",
10588
+ alignItems: "center"
10589
+ }, React__default.createElement(CircularProgress, {
10590
+ sx: {
10591
+ color: "#FFF"
10592
+ },
10593
+ size: 14
10594
+ })) : React__default.createElement(iconSendMessage, null), React__default.createElement(Typography, {
9710
10595
  fontWeight: 700,
9711
10596
  fontSize: "13px",
9712
10597
  lineHeight: "15.51px"
@@ -9714,12 +10599,12 @@ var InputChat = function InputChat(_ref) {
9714
10599
  variant: "outlined",
9715
10600
  component: "label",
9716
10601
  fullWidth: true,
9717
- disabled: isCompleted,
10602
+ disabled: disabled,
9718
10603
  sx: {
9719
10604
  display: "flex",
9720
10605
  gap: "8px",
9721
10606
  padding: "12px !important",
9722
- borderColor: isCompleted ? "transparent" : styles.less_dark,
10607
+ borderColor: disabled ? "transparent" : styles.less_dark,
9723
10608
  borderWidth: "1px"
9724
10609
  }
9725
10610
  }, React__default.createElement(iconPlusCircle, {
@@ -9735,9 +10620,20 @@ var InputChat = function InputChat(_ref) {
9735
10620
  type: "file",
9736
10621
  hidden: true,
9737
10622
  ref: fileInputRef,
9738
- disabled: isCompleted,
10623
+ disabled: disabled,
9739
10624
  accept: "image/png, image/gif, image/jpeg",
9740
10625
  onChangeCapture: handleSelectedFile
10626
+ })), !isStudent && React__default.createElement(Fragment$1, null, React__default.createElement(Button, {
10627
+ startIcon: React__default.createElement(MdDraw, null),
10628
+ variant: "contained",
10629
+ disabled: disabled,
10630
+ fullWidth: true,
10631
+ onClick: handleopenSketchDialog
10632
+ }, t("sketch")), React__default.createElement(SketchDialog, {
10633
+ open: open,
10634
+ drawPath: drawPath,
10635
+ onClose: handleToggleSketchDialog,
10636
+ onSave: handleSaveCanvas
9741
10637
  })))));
9742
10638
  };
9743
10639
 
@@ -10003,7 +10899,8 @@ var ChatHeader = function ChatHeader(_ref) {
10003
10899
  };
10004
10900
 
10005
10901
  var ChatContainer = function ChatContainer(_ref) {
10006
- var chatHeaderProps = _ref.chatHeaderProps,
10902
+ var role = _ref.role,
10903
+ chatHeaderProps = _ref.chatHeaderProps,
10007
10904
  chatListProps = _ref.chatListProps,
10008
10905
  inputProps = _ref.inputProps,
10009
10906
  _ref$scrollOffset = _ref.scrollOffset,
@@ -10096,76 +10993,9 @@ var ChatContainer = function ChatContainer(_ref) {
10096
10993
  className: "d-flex justify-content-center align-items-center"
10097
10994
  }, React__default.createElement(CircularProgress, null)), React__default.createElement(ChatList, Object.assign({}, chatListProps, {
10098
10995
  listItemRef: listItemRef
10099
- }))), React__default.createElement(InputChat, Object.assign({}, inputProps)));
10100
- };
10101
-
10102
- var MessageSortBy;
10103
- (function (MessageSortBy) {
10104
- MessageSortBy["CreatedAt"] = "CreatedAt";
10105
- })(MessageSortBy || (MessageSortBy = {}));
10106
- var OrderBy$1;
10107
- (function (OrderBy) {
10108
- OrderBy["ASC"] = "ASC";
10109
- OrderBy["DESC"] = "DESC";
10110
- })(OrderBy$1 || (OrderBy$1 = {}));
10111
- var StudentSortBy;
10112
- (function (StudentSortBy) {
10113
- StudentSortBy["CreatedAt"] = "CreatedAt";
10114
- StudentSortBy["FullName"] = "FullName";
10115
- })(StudentSortBy || (StudentSortBy = {}));
10116
- var StudentOrderBy;
10117
- (function (StudentOrderBy) {
10118
- StudentOrderBy["ASC"] = "ASC";
10119
- StudentOrderBy["DESC"] = "DESC";
10120
- })(StudentOrderBy || (StudentOrderBy = {}));
10121
- var MessageAction;
10122
- (function (MessageAction) {
10123
- MessageAction[MessageAction["Default"] = 0] = "Default";
10124
- MessageAction[MessageAction["Took"] = 1] = "Took";
10125
- })(MessageAction || (MessageAction = {}));
10126
- var MessageSourceType;
10127
- (function (MessageSourceType) {
10128
- MessageSourceType[MessageSourceType["Default"] = 0] = "Default";
10129
- MessageSourceType[MessageSourceType["Exam"] = 1] = "Exam";
10130
- MessageSourceType[MessageSourceType["Class"] = 2] = "Class";
10131
- })(MessageSourceType || (MessageSourceType = {}));
10132
- var MessageStatus;
10133
- (function (MessageStatus) {
10134
- MessageStatus["Default"] = "Sent";
10135
- MessageStatus["Sending"] = "Sending...";
10136
- MessageStatus["SentError"] = "Sent fail, Retry";
10137
- })(MessageStatus || (MessageStatus = {}));
10138
-
10139
- var types = {
10140
- __proto__: null,
10141
- get MessageSortBy () { return MessageSortBy; },
10142
- get OrderBy () { return OrderBy$1; },
10143
- get StudentSortBy () { return StudentSortBy; },
10144
- get StudentOrderBy () { return StudentOrderBy; },
10145
- get MessageAction () { return MessageAction; },
10146
- get MessageSourceType () { return MessageSourceType; },
10147
- get MessageStatus () { return MessageStatus; }
10148
- };
10149
-
10150
- var ExamStatus$1;
10151
- (function (ExamStatus) {
10152
- ExamStatus["Default"] = "Default";
10153
- ExamStatus["Pending"] = "Pending";
10154
- ExamStatus["Inprogress"] = "Inprogress";
10155
- ExamStatus["Completed"] = "Completed";
10156
- })(ExamStatus$1 || (ExamStatus$1 = {}));
10157
- var Roles;
10158
- (function (Roles) {
10159
- Roles["Student"] = "Student";
10160
- Roles["Teacher"] = "Teacher";
10161
- Roles["Admin"] = "Admin";
10162
- })(Roles || (Roles = {}));
10163
- var MESSAGE_DEFAULT_FILTER = {
10164
- currentPage: 1,
10165
- pageSize: 15,
10166
- textSearch: "",
10167
- sortColumnDirection: OrderBy$1.DESC,
10168
- sortColumnName: MessageSortBy.CreatedAt
10996
+ }))), React__default.createElement(InputChat, Object.assign({
10997
+ role: role
10998
+ }, inputProps)));
10169
10999
  };
10170
11000
 
10171
11001
  var RECENT_USER_URL = BASE_URL + "/api/recentUsers";
@@ -10394,6 +11224,12 @@ var useChatContainer = function useChatContainer(props) {
10394
11224
  var _useState5 = useState(true),
10395
11225
  isScrollToEnd = _useState5[0],
10396
11226
  setScrollToEnd = _useState5[1];
11227
+ var _useState6 = useState(),
11228
+ drawPath = _useState6[0],
11229
+ setDrawPath = _useState6[1];
11230
+ var _useState7 = useState(false),
11231
+ isSending = _useState7[0],
11232
+ setSending = _useState7[1];
10397
11233
  var isAdmin = roles === null || roles === void 0 ? void 0 : roles.includes(Role.Admin);
10398
11234
  var _useMessageList = useMessageList({
10399
11235
  student: student
@@ -10418,6 +11254,7 @@ var useChatContainer = function useChatContainer(props) {
10418
11254
  try {
10419
11255
  var _temp3 = function _temp3(_result2) {
10420
11256
  if (_exit) return _result2;
11257
+ setSending(false);
10421
11258
  loadingRef.current = false;
10422
11259
  };
10423
11260
  var _exit = false;
@@ -10425,6 +11262,7 @@ var useChatContainer = function useChatContainer(props) {
10425
11262
  loadingRef.current = true;
10426
11263
  if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) return Promise.resolve();
10427
11264
  setScrollToEnd(true);
11265
+ setSending(true);
10428
11266
  var _temp2 = _catch(function () {
10429
11267
  if (file) {
10430
11268
  return Promise.resolve(handleUploadImageData(file)).then(function (selectedFile) {
@@ -10464,6 +11302,7 @@ var useChatContainer = function useChatContainer(props) {
10464
11302
  };
10465
11303
  var handleUploadImage = function handleUploadImage(file) {
10466
11304
  try {
11305
+ handleClearCanvas();
10467
11306
  if (file) {
10468
11307
  setFile(file);
10469
11308
  var reader = new FileReader();
@@ -10477,11 +11316,29 @@ var useChatContainer = function useChatContainer(props) {
10477
11316
  return Promise.reject(e);
10478
11317
  }
10479
11318
  };
11319
+ var handleSaveCanvas = function handleSaveCanvas(data, drawPath) {
11320
+ try {
11321
+ return Promise.resolve(fetch(data)).then(function (_fetch) {
11322
+ return Promise.resolve(_fetch.blob()).then(function (blob) {
11323
+ setFile(blob);
11324
+ setBackgroundImage(data);
11325
+ setDrawPath(drawPath);
11326
+ });
11327
+ });
11328
+ } catch (e) {
11329
+ return Promise.reject(e);
11330
+ }
11331
+ };
11332
+ var handleClearCanvas = function handleClearCanvas() {
11333
+ setBackgroundImage(null);
11334
+ setDrawPath(undefined);
11335
+ setFile(undefined);
11336
+ };
10480
11337
  var handleUploadImageData = function handleUploadImageData(file) {
10481
11338
  try {
10482
11339
  return Promise.resolve(_catch(function () {
10483
11340
  var formData = new FormData();
10484
- formData.append("upload", file);
11341
+ if (file instanceof Blob) formData.append("upload", file, 'drawing.png');else formData.append("upload", file);
10485
11342
  return Promise.resolve(apiUploadImageFile(formData)).then(function (res) {
10486
11343
  var _res$data;
10487
11344
  return {
@@ -10554,7 +11411,8 @@ var useChatContainer = function useChatContainer(props) {
10554
11411
  return Promise.reject(e);
10555
11412
  }
10556
11413
  };
10557
- var handleDeleteSelectedImage = function handleDeleteSelectedImage() {
11414
+ var handleDeleteSelectedImage = function handleDeleteSelectedImage(e) {
11415
+ e === null || e === void 0 ? void 0 : e.stopPropagation();
10558
11416
  setFile(undefined);
10559
11417
  setBackgroundImage(null);
10560
11418
  };
@@ -10642,12 +11500,16 @@ var useChatContainer = function useChatContainer(props) {
10642
11500
  handleDeleteMessage: handleDeleteMessage
10643
11501
  },
10644
11502
  inputProps: {
11503
+ isSending: isSending,
11504
+ drawPath: drawPath,
10645
11505
  selectedFile: backgroundImage,
10646
11506
  text: (message === null || message === void 0 ? void 0 : message.content) || "",
10647
11507
  onChangeInput: handleChangeInput,
10648
11508
  onSubmit: handleAddMessage,
10649
11509
  handleDeleteSelectedImage: handleDeleteSelectedImage,
10650
11510
  handleUploadImage: handleUploadImage,
11511
+ onSaveCanvas: handleSaveCanvas,
11512
+ onClearCanvas: handleClearCanvas,
10651
11513
  isCompleted: selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.isCompleted
10652
11514
  },
10653
11515
  isScrollToEnd: isScrollToEnd,
@@ -23211,12 +24073,12 @@ var useExamResultData = function useExamResultData(props) {
23211
24073
  var _useState9 = useState(),
23212
24074
  openProblem = _useState9[0],
23213
24075
  setOpenProblem = _useState9[1];
23214
- var _useState0 = useState(),
23215
- selectedQuestion = _useState0[0],
23216
- setSelectedQuestion = _useState0[1];
23217
- var _useState1 = useState(),
23218
- errorMessage = _useState1[0],
23219
- setErrorMessage = _useState1[1];
24076
+ var _useState10 = useState(),
24077
+ selectedQuestion = _useState10[0],
24078
+ setSelectedQuestion = _useState10[1];
24079
+ var _useState11 = useState(),
24080
+ errorMessage = _useState11[0],
24081
+ setErrorMessage = _useState11[1];
23220
24082
  var _useTranslation = useTranslation(),
23221
24083
  t = _useTranslation.t;
23222
24084
  var isBelongAcademy = !!user && user.academyDomain && !user.isLearningSpace;
@@ -24109,7 +24971,7 @@ var useOverallChartContainer = function useOverallChartContainer(isStudent, exam
24109
24971
  return [texts.slice(0, middle), texts.slice(middle)];
24110
24972
  }, [JSON.stringify(categories)]);
24111
24973
  var formatTooltip = useCallback(function (_ref2) {
24112
- 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$;
24974
+ 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$;
24113
24975
  var dataPointIndex = _ref2.dataPointIndex,
24114
24976
  w = _ref2.w;
24115
24977
  var label = categories[dataPointIndex];
@@ -24153,12 +25015,12 @@ var useOverallChartContainer = function useOverallChartContainer(isStudent, exam
24153
25015
  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
24154
25016
  });
24155
25017
  avgValue = "" + t("n_questions", {
24156
- 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
25018
+ 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
24157
25019
  });
24158
25020
  break;
24159
25021
  default:
24160
- 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) + "%";
24161
- 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) + "%";
25022
+ 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) + "%";
25023
+ 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) + "%";
24162
25024
  break;
24163
25025
  }
24164
25026
  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>";
@@ -27797,7 +28659,7 @@ var PreparedItem = function PreparedItem(_ref) {
27797
28659
  margin: "0 1rem",
27798
28660
  width: "800px"
27799
28661
  }
27800
- }, React__default.createElement(Slider, Object.assign({}, settings), subjectOptions.map(function (option) {
28662
+ }, React__default.createElement(Slider$1, Object.assign({}, settings), subjectOptions.map(function (option) {
27801
28663
  return React__default.createElement(Tooltip, {
27802
28664
  title: option.label
27803
28665
  }, React__default.createElement(FormControlLabel, {
@@ -29842,13 +30704,13 @@ var useClassDetail = function useClassDetail(_ref) {
29842
30704
  };
29843
30705
  var handleAddToClass = function handleAddToClass(userIds) {
29844
30706
  try {
29845
- var _temp10 = function _temp10() {
30707
+ var _temp12 = function _temp12() {
29846
30708
  dispatch(setLoading(false));
29847
30709
  };
29848
30710
  if (!classId || !openSelectDialog) return Promise.resolve();
29849
30711
  dispatch(setLoading(true));
29850
- var _temp1 = _catch(function () {
29851
- function _temp0() {
30712
+ var _temp11 = _catch(function () {
30713
+ function _temp10() {
29852
30714
  return Promise.resolve(handleGetDetailData(false)).then(function () {
29853
30715
  toast.success(t(classId ? "update_class_successfully" : "create_class_successfully"));
29854
30716
  handleCloseSelectDialog();
@@ -29865,18 +30727,18 @@ var useClassDetail = function useClassDetail(_ref) {
29865
30727
  });
29866
30728
  }
29867
30729
  }();
29868
- return _temp9 && _temp9.then ? _temp9.then(_temp0) : _temp0(_temp9);
30730
+ return _temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9);
29869
30731
  }, function (error) {
29870
30732
  toast.error(getErrorMessage(t, error));
29871
30733
  });
29872
- return Promise.resolve(_temp1 && _temp1.then ? _temp1.then(_temp10) : _temp10(_temp1));
30734
+ return Promise.resolve(_temp11 && _temp11.then ? _temp11.then(_temp12) : _temp12(_temp11));
29873
30735
  } catch (e) {
29874
30736
  return Promise.reject(e);
29875
30737
  }
29876
30738
  };
29877
30739
  var handleSubmit = function handleSubmit(values, _) {
29878
30740
  try {
29879
- var _temp14 = function _temp14() {
30741
+ var _temp16 = function _temp16() {
29880
30742
  dispatch(setLoading(false));
29881
30743
  };
29882
30744
  if (values.courseWeeklyDays.some(function (i) {
@@ -29893,11 +30755,11 @@ var useClassDetail = function useClassDetail(_ref) {
29893
30755
  }
29894
30756
  var body = convertToRequestBody(values);
29895
30757
  dispatch(setLoading(true));
29896
- var _temp13 = _catch(function () {
29897
- function _temp12() {
30758
+ var _temp15 = _catch(function () {
30759
+ function _temp14() {
29898
30760
  toast.success(t(classId ? "update_class_successfully" : "create_class_successfully"));
29899
30761
  }
29900
- var _temp11 = function () {
30762
+ var _temp13 = function () {
29901
30763
  if (!classId) {
29902
30764
  return Promise.resolve(createClassApi(body)).then(function (res) {
29903
30765
  pushTo(history, classListUrl + "/" + res.data.id);
@@ -29908,11 +30770,11 @@ var useClassDetail = function useClassDetail(_ref) {
29908
30770
  });
29909
30771
  }
29910
30772
  }();
29911
- return _temp11 && _temp11.then ? _temp11.then(_temp12) : _temp12(_temp11);
30773
+ return _temp13 && _temp13.then ? _temp13.then(_temp14) : _temp14(_temp13);
29912
30774
  }, function (error) {
29913
30775
  toast.error(getErrorMessage(t, error));
29914
30776
  });
29915
- return Promise.resolve(_temp13 && _temp13.then ? _temp13.then(_temp14) : _temp14(_temp13));
30777
+ return Promise.resolve(_temp15 && _temp15.then ? _temp15.then(_temp16) : _temp16(_temp15));
29916
30778
  } catch (e) {
29917
30779
  return Promise.reject(e);
29918
30780
  }
@@ -29920,7 +30782,7 @@ var useClassDetail = function useClassDetail(_ref) {
29920
30782
  var getStudentNotInClassList = function getStudentNotInClassList() {
29921
30783
  try {
29922
30784
  if (!classId) return Promise.resolve();
29923
- var _temp15 = _catch(function () {
30785
+ var _temp17 = _catch(function () {
29924
30786
  var _textSearchRef$curren;
29925
30787
  return Promise.resolve(getStudentClassApi(classId, _extends({}, filter, {
29926
30788
  textSearch: (_textSearchRef$curren = textSearchRef.current) === null || _textSearchRef$curren === void 0 ? void 0 : _textSearchRef$curren.value,
@@ -29951,7 +30813,7 @@ var useClassDetail = function useClassDetail(_ref) {
29951
30813
  setStudents([]);
29952
30814
  toast.error(getErrorMessage(t, error));
29953
30815
  });
29954
- return Promise.resolve(_temp15 && _temp15.then ? _temp15.then(function () {}) : void 0);
30816
+ return Promise.resolve(_temp17 && _temp17.then ? _temp17.then(function () {}) : void 0);
29955
30817
  } catch (e) {
29956
30818
  return Promise.reject(e);
29957
30819
  }
@@ -29959,7 +30821,7 @@ var useClassDetail = function useClassDetail(_ref) {
29959
30821
  var getTeacherNotInClassList = function getTeacherNotInClassList() {
29960
30822
  try {
29961
30823
  if (!classId) return Promise.resolve();
29962
- var _temp16 = _catch(function () {
30824
+ var _temp18 = _catch(function () {
29963
30825
  var _textSearchRef$curren2;
29964
30826
  return Promise.resolve(getTeacherClassApi(classId, _extends({}, filter, {
29965
30827
  textSearch: (_textSearchRef$curren2 = textSearchRef.current) === null || _textSearchRef$curren2 === void 0 ? void 0 : _textSearchRef$curren2.value,
@@ -29990,7 +30852,7 @@ var useClassDetail = function useClassDetail(_ref) {
29990
30852
  setTeachers([]);
29991
30853
  toast.error(getErrorMessage(t, error));
29992
30854
  });
29993
- return Promise.resolve(_temp16 && _temp16.then ? _temp16.then(function () {}) : void 0);
30855
+ return Promise.resolve(_temp18 && _temp18.then ? _temp18.then(function () {}) : void 0);
29994
30856
  } catch (e) {
29995
30857
  return Promise.reject(e);
29996
30858
  }
@@ -31748,9 +32610,9 @@ var useUserList = function useUserList(role) {
31748
32610
  var _useState9 = useState(),
31749
32611
  deleteFile = _useState9[0],
31750
32612
  setDeleteFile = _useState9[1];
31751
- var _useState0 = useState(false),
31752
- isOpenDeleteUserCsv = _useState0[0],
31753
- setOpenDeleteUserCsv = _useState0[1];
32613
+ var _useState10 = useState(false),
32614
+ isOpenDeleteUserCsv = _useState10[0],
32615
+ setOpenDeleteUserCsv = _useState10[1];
31754
32616
  var inputFileRef = useRef(null);
31755
32617
  var firstLoadRef = useRef(true);
31756
32618
  var handleChangeSelectedStudent = function handleChangeSelectedStudent(student) {
@@ -31906,7 +32768,7 @@ var useUserList = function useUserList(role) {
31906
32768
  };
31907
32769
  var getUserList = function getUserList() {
31908
32770
  try {
31909
- var _temp0 = function _temp0() {
32771
+ var _temp10 = function _temp10() {
31910
32772
  firstLoadRef.current && dispatch(setLoading(false));
31911
32773
  if (firstLoadRef.current) firstLoadRef.current = false;
31912
32774
  };
@@ -31935,7 +32797,7 @@ var useUserList = function useUserList(role) {
31935
32797
  setPaging(DEFAULT_PAGING_RESPONSE);
31936
32798
  console.log(error);
31937
32799
  });
31938
- return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp0) : _temp0(_temp9));
32800
+ return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9));
31939
32801
  } catch (e) {
31940
32802
  return Promise.reject(e);
31941
32803
  }
@@ -31951,7 +32813,7 @@ var useUserList = function useUserList(role) {
31951
32813
  setSelectedUser(user);
31952
32814
  setOpenUserDialog(true);
31953
32815
  return Promise.resolve(_catch(function () {
31954
- var _temp1 = function () {
32816
+ var _temp11 = function () {
31955
32817
  if (!!user.id && !!user.email) {
31956
32818
  return Promise.resolve(createRecentUserActionListApi({
31957
32819
  userId: user === null || user === void 0 ? void 0 : user.id,
@@ -31961,7 +32823,7 @@ var useUserList = function useUserList(role) {
31961
32823
  })).then(function () {});
31962
32824
  }
31963
32825
  }();
31964
- if (_temp1 && _temp1.then) return _temp1.then(function () {});
32826
+ if (_temp11 && _temp11.then) return _temp11.then(function () {});
31965
32827
  }, function (error) {
31966
32828
  console.error(getErrorMessage(t, error));
31967
32829
  }));
@@ -31990,18 +32852,18 @@ var useUserList = function useUserList(role) {
31990
32852
  };
31991
32853
  var handleCreateOrUpdateUser = function handleCreateOrUpdateUser(value) {
31992
32854
  try {
31993
- var _temp13 = function _temp13() {
32855
+ var _temp15 = function _temp15() {
31994
32856
  dispatch(setLoading(false));
31995
32857
  };
31996
32858
  if (value.fullName === "marcus") return Promise.resolve();
31997
32859
  dispatch(setLoading(true));
31998
- var _temp12 = _catch(function () {
31999
- function _temp11() {
32860
+ var _temp14 = _catch(function () {
32861
+ function _temp13() {
32000
32862
  return Promise.resolve(getUserList()).then(function () {
32001
32863
  handleCloseUserDialog();
32002
32864
  });
32003
32865
  }
32004
- var _temp10 = function () {
32866
+ var _temp12 = function () {
32005
32867
  if (!!(selectedUser !== null && selectedUser !== void 0 && selectedUser.id)) {
32006
32868
  return Promise.resolve(updateUserApi(_extends({}, value, {
32007
32869
  grade: value.grade == null ? undefined : value.grade
@@ -32012,23 +32874,23 @@ var useUserList = function useUserList(role) {
32012
32874
  }))).then(function () {});
32013
32875
  }
32014
32876
  }();
32015
- return _temp10 && _temp10.then ? _temp10.then(_temp11) : _temp11(_temp10);
32877
+ return _temp12 && _temp12.then ? _temp12.then(_temp13) : _temp13(_temp12);
32016
32878
  }, function (error) {
32017
32879
  toast.error(getErrorMessage(t, error));
32018
32880
  });
32019
- return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(_temp13) : _temp13(_temp12));
32881
+ return Promise.resolve(_temp14 && _temp14.then ? _temp14.then(_temp15) : _temp15(_temp14));
32020
32882
  } catch (e) {
32021
32883
  return Promise.reject(e);
32022
32884
  }
32023
32885
  };
32024
32886
  var handleDeleteUser = function handleDeleteUser() {
32025
32887
  try {
32026
- var _temp15 = function _temp15() {
32888
+ var _temp17 = function _temp17() {
32027
32889
  dispatch(setLoading(false));
32028
32890
  };
32029
32891
  if (!(selectedUser !== null && selectedUser !== void 0 && selectedUser.id)) return Promise.resolve();
32030
32892
  dispatch(setLoading(true));
32031
- var _temp14 = _catch(function () {
32893
+ var _temp16 = _catch(function () {
32032
32894
  return Promise.resolve(deleteUserApi(selectedUser.id)).then(function () {
32033
32895
  toggleConfirmDialog();
32034
32896
  getUserList();
@@ -32036,7 +32898,7 @@ var useUserList = function useUserList(role) {
32036
32898
  }, function (error) {
32037
32899
  toast.error(getErrorMessage(t, error));
32038
32900
  });
32039
- return Promise.resolve(_temp14 && _temp14.then ? _temp14.then(_temp15) : _temp15(_temp14));
32901
+ return Promise.resolve(_temp16 && _temp16.then ? _temp16.then(_temp17) : _temp17(_temp16));
32040
32902
  } catch (e) {
32041
32903
  return Promise.reject(e);
32042
32904
  }
@@ -32869,7 +33731,7 @@ var useCategoryOptions = function useCategoryOptions(subjectId, isMath, filter,
32869
33731
  };
32870
33732
  var getQuestionTypes = function getQuestionTypes(categoryId, subCategoryId) {
32871
33733
  try {
32872
- var _temp0 = function _temp0() {
33734
+ var _temp10 = function _temp10() {
32873
33735
  setLoadingQuestionTypes(false);
32874
33736
  };
32875
33737
  setLoadingQuestionTypes(true);
@@ -32892,7 +33754,7 @@ var useCategoryOptions = function useCategoryOptions(subjectId, isMath, filter,
32892
33754
  }, function () {
32893
33755
  setQuestionTypes([]);
32894
33756
  });
32895
- return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp0) : _temp0(_temp9));
33757
+ return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9));
32896
33758
  } catch (e) {
32897
33759
  return Promise.reject(e);
32898
33760
  }