touchstudy-core 0.1.196 → 0.1.197

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 (49) hide show
  1. package/dist/components/Chats/ChatContainer.d.ts +1 -5
  2. package/dist/components/Chats/components/InputChat.d.ts +2 -8
  3. package/dist/components/Chats/configs/constants.d.ts +1 -8
  4. package/dist/components/Chats/configs/types.d.ts +0 -2
  5. package/dist/components/Chats/hooks/useChatContainer.d.ts +2 -6
  6. package/dist/components/Selects/CustomSelectOption.d.ts +1 -1
  7. package/dist/index.css +16 -4
  8. package/dist/index.js +239 -1083
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.modern.js +244 -1088
  11. package/dist/index.modern.js.map +1 -1
  12. package/dist/layouts/TimerDialog.d.ts +3 -1
  13. package/dist/layouts/configs/constants.d.ts +2 -0
  14. package/dist/layouts/configs/enums.d.ts +6 -0
  15. package/dist/layouts/configs/fn.d.ts +3 -0
  16. package/dist/layouts/configs/types.d.ts +8 -0
  17. package/dist/layouts/hooks/useAlarm.d.ts +19 -0
  18. package/dist/layouts/hooks/useCountDownTimer.d.ts +6 -2
  19. package/dist/layouts/hooks/useTimers.d.ts +14 -0
  20. package/dist/layouts/partials/Alarm/AlarmClock.d.ts +12 -0
  21. package/dist/layouts/partials/Alarm/AlarmClockNote.d.ts +3 -0
  22. package/dist/layouts/partials/Alarm/AlarmClockPanel.d.ts +12 -0
  23. package/dist/layouts/partials/Alarm/AlarmClockPanelNote.d.ts +3 -0
  24. package/dist/layouts/partials/Alarm/AlarmClockTab.d.ts +14 -0
  25. package/dist/layouts/partials/Alarm/AlarmSpeakerCheckbox.d.ts +8 -0
  26. package/dist/layouts/partials/Alarm/AudioToastContent.d.ts +8 -0
  27. package/dist/layouts/partials/AlarmClock.d.ts +3 -1
  28. package/dist/layouts/partials/AlarmClockNote.d.ts +3 -0
  29. package/dist/layouts/partials/AlarmClockPanel.d.ts +3 -1
  30. package/dist/layouts/partials/AlarmClockPanelNote.d.ts +3 -0
  31. package/dist/layouts/partials/AlarmClockTab.d.ts +4 -3
  32. package/dist/layouts/partials/AudioToastContent.d.ts +8 -0
  33. package/dist/layouts/partials/StudyTimerTab.d.ts +2 -1
  34. package/dist/layouts/partials/TimeUpdateDialog.d.ts +7 -0
  35. package/dist/layouts/partials/Timer/StudyTimerTab.d.ts +13 -0
  36. package/dist/layouts/partials/Timer/TimeLineTabPanel.d.ts +8 -0
  37. package/dist/layouts/partials/Timer/TimeLineTabs.d.ts +11 -0
  38. package/dist/layouts/partials/Timer/TimeUpdateDialog.d.ts +7 -0
  39. package/dist/layouts/partials/Timer/TimerCountItem.d.ts +10 -0
  40. package/dist/layouts/partials/Timer/TimerDivider.d.ts +9 -0
  41. package/dist/layouts/partials/Timer/TimerItem.d.ts +12 -0
  42. package/dist/layouts/partials/Timer/TimerLineItem.d.ts +13 -0
  43. package/dist/layouts/partials/Timer/TimerTabPanel.d.ts +8 -0
  44. package/dist/layouts/partials/Timer/TimerTabs.d.ts +7 -0
  45. package/dist/layouts/partials/TimerItem.d.ts +2 -1
  46. package/dist/services/alarmService.d.ts +9 -0
  47. package/dist/utils/types/examResults.d.ts +1 -0
  48. package/dist/utils/types/subjects.d.ts +4 -2
  49. package/package.json +1 -2
package/dist/index.js CHANGED
@@ -37,10 +37,8 @@ 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 reactSketchCanvas = require('react-sketch-canvas');
41
- var md = require('react-icons/md');
42
- var gr = require('react-icons/gr');
43
40
  var fa6 = require('react-icons/fa6');
41
+ var md = require('react-icons/md');
44
42
  var colors = require('@mui/material/colors');
45
43
  var Grid = _interopDefault(require('@mui/material/Grid'));
46
44
  var Card = _interopDefault(require('@mui/material/Card'));
@@ -64,6 +62,7 @@ var TableCell = _interopDefault(require('@mui/material/TableCell'));
64
62
  var TableRow = _interopDefault(require('@mui/material/TableRow'));
65
63
  var html2pdf = _interopDefault(require('html2pdf.js'));
66
64
  var Slider = _interopDefault(require('react-slick'));
65
+ var gr = require('react-icons/gr');
67
66
  var Table = _interopDefault(require('@mui/material/Table'));
68
67
  var TableBody = _interopDefault(require('@mui/material/TableBody'));
69
68
  var TableHead = _interopDefault(require('@mui/material/TableHead'));
@@ -1578,8 +1577,9 @@ var there_are_no_problems_you_were_working_on = "풀던 문제가 없습니다."
1578
1577
  var incomplete_exam = "미참가";
1579
1578
  var completed_exam = "참가";
1580
1579
  var failed_to_send_the_image_error = "이미지를 보내지 못했습니다: {{ message }}";
1581
- var sketch = "스케치";
1582
- var sketch_canvas = "스케치 캔버스";
1580
+ var exam_session = "시험 세션";
1581
+ var must_select_an_exam_first = "먼저 시험을 선택해야 합니다";
1582
+ var not_selected = "미선택";
1583
1583
  var lang_ko = {
1584
1584
  problem_solving: problem_solving,
1585
1585
  my_story: my_story,
@@ -2789,8 +2789,9 @@ var lang_ko = {
2789
2789
  incomplete_exam: incomplete_exam,
2790
2790
  completed_exam: completed_exam,
2791
2791
  failed_to_send_the_image_error: failed_to_send_the_image_error,
2792
- sketch: sketch,
2793
- sketch_canvas: sketch_canvas
2792
+ exam_session: exam_session,
2793
+ must_select_an_exam_first: must_select_an_exam_first,
2794
+ not_selected: not_selected
2794
2795
  };
2795
2796
 
2796
2797
  var problem_solving$1 = "Problem Solving";
@@ -4026,8 +4027,9 @@ var there_are_no_problems_you_were_working_on$1 = "There are no problems you wer
4026
4027
  var incomplete_exam$1 = "Incomplete";
4027
4028
  var completed_exam$1 = "Completed";
4028
4029
  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";
4030
+ var exam_session$1 = "Exam session";
4031
+ var must_select_an_exam_first$1 = "Must select an exam first";
4032
+ var not_selected$1 = "Not selected";
4031
4033
  var lang_en = {
4032
4034
  problem_solving: problem_solving$1,
4033
4035
  my_story: my_story$1,
@@ -5239,8 +5241,9 @@ var lang_en = {
5239
5241
  incomplete_exam: incomplete_exam$1,
5240
5242
  completed_exam: completed_exam$1,
5241
5243
  failed_to_send_the_image_error: failed_to_send_the_image_error$1,
5242
- sketch: sketch$1,
5243
- sketch_canvas: sketch_canvas$1
5244
+ exam_session: exam_session$1,
5245
+ must_select_an_exam_first: must_select_an_exam_first$1,
5246
+ not_selected: not_selected$1
5244
5247
  };
5245
5248
 
5246
5249
  i18n__default.use(reactI18next.initReactI18next).init({
@@ -7954,7 +7957,7 @@ var CustomSelect = function CustomSelect(_ref) {
7954
7957
  }, rest));
7955
7958
  };
7956
7959
 
7957
- var _excluded$3 = ["defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti", "valueById", "isTextbook"];
7960
+ var _excluded$3 = ["defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti", "valueById", "isTextbook", "styles"];
7958
7961
  var CustomSelectOption = function CustomSelectOption(_ref) {
7959
7962
  var defaultValue = _ref.defaultValue,
7960
7963
  options = _ref.options,
@@ -7964,6 +7967,7 @@ var CustomSelectOption = function CustomSelectOption(_ref) {
7964
7967
  isMulti = _ref.isMulti,
7965
7968
  valueById = _ref.valueById,
7966
7969
  isTextbook = _ref.isTextbook,
7970
+ styles = _ref.styles,
7967
7971
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
7968
7972
  var _useTranslation = reactI18next.useTranslation(),
7969
7973
  t = _useTranslation.t;
@@ -7990,7 +7994,7 @@ var CustomSelectOption = function CustomSelectOption(_ref) {
7990
7994
  DropdownIndicator: DropdownIndicator,
7991
7995
  Option: CustomOption
7992
7996
  },
7993
- styles: customStyles,
7997
+ styles: _extends({}, customStyles, styles),
7994
7998
  placeholder: t("select_placeholder")
7995
7999
  }, rest)) : React__default.createElement(Select__default, Object.assign({
7996
8000
  isDisabled: isDisabled,
@@ -8006,7 +8010,7 @@ var CustomSelectOption = function CustomSelectOption(_ref) {
8006
8010
  DropdownIndicator: DropdownIndicator,
8007
8011
  Option: CustomOption
8008
8012
  },
8009
- styles: customStyles,
8013
+ styles: _extends({}, customStyles, styles),
8010
8014
  placeholder: t("select_placeholder")
8011
8015
  }, rest));
8012
8016
  };
@@ -9013,9 +9017,7 @@ var ChatRightItem = function ChatRightItem(_ref) {
9013
9017
  style: {
9014
9018
  height: "200px",
9015
9019
  position: "relative",
9016
- objectFit: "contain",
9017
- cursor: "pointer",
9018
- borderRadius: "6px"
9020
+ objectFit: "contain"
9019
9021
  }
9020
9022
  }) : React__default.createElement("div", {
9021
9023
  className: styles$2["wrap-content"] + " " + styles$2["content-chat-receiver"],
@@ -9098,9 +9100,7 @@ var ChatLeftItem = function ChatLeftItem(_ref) {
9098
9100
  style: {
9099
9101
  height: "200px",
9100
9102
  position: "relative",
9101
- objectFit: "contain",
9102
- cursor: "pointer",
9103
- borderRadius: "6px"
9103
+ objectFit: "contain"
9104
9104
  }
9105
9105
  }) : React__default.createElement("div", {
9106
9106
  className: styles$2["wrap-content"] + " " + styles$2["content-chat-sender"],
@@ -9529,928 +9529,89 @@ var ChatItem = function ChatItem(props) {
9529
9529
  open: openConfirmDialog,
9530
9530
  toggle: toggleConfirmDialog,
9531
9531
  text: t("confirm_delete_message"),
9532
- onConfirm: function onConfirm() {
9533
- return handleDeleteMessage(conversationId || 0, id || 0, toggleConfirmDialog);
9534
- },
9535
- title: t("confirmation"),
9536
- okText: t("yes"),
9537
- cancelText: t("no")
9538
- }), React__default.createElement(UpdateMessageDialog, {
9539
- open: openUpdateDialog,
9540
- onClose: toggleUpdateDialog,
9541
- content: content,
9542
- handleUploadImage: handleUploadImage,
9543
- selectedFile: selectedFile,
9544
- contentType: contentType,
9545
- handleUpdateMessage: function handleUpdateMessage(content) {
9546
- return _handleUpdateMessage(conversationId || 0, id || 0, content, toggleUpdateDialog);
9547
- }
9548
- }));
9549
- };
9550
-
9551
- var ChatList = function ChatList(_ref) {
9552
- var _ref$messages = _ref.messages,
9553
- messages = _ref$messages === void 0 ? [] : _ref$messages,
9554
- roles = _ref.roles,
9555
- onReTrySendMessage = _ref.onReTrySendMessage,
9556
- handleUpdateMessage = _ref.handleUpdateMessage,
9557
- handleDeleteMessage = _ref.handleDeleteMessage,
9558
- listItemRef = _ref.listItemRef;
9559
- var _useTranslation = reactI18next.useTranslation(),
9560
- t = _useTranslation.t;
9561
- var filterMessage = React.useMemo(function () {
9562
- var prevTime = 0;
9563
- var prevSender;
9564
- return messages.map(function (message) {
9565
- var _message$sender, _message$sender2;
9566
- var currentTime = new Date(message.createdAt).getTime();
9567
- var showTimestamp = !prevTime || currentTime - prevTime > 20 * 60 * 1000;
9568
- var showName = ((_message$sender = message.sender) === null || _message$sender === void 0 ? void 0 : _message$sender.fullName) !== prevSender;
9569
- prevSender = (_message$sender2 = message.sender) === null || _message$sender2 === void 0 ? void 0 : _message$sender2.fullName;
9570
- prevTime = currentTime;
9571
- return _extends({}, message, {
9572
- showTimestamp: showTimestamp,
9573
- showName: showName
9574
- });
9575
- });
9576
- }, [JSON.stringify(messages)]);
9577
- var isStudent = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Student);
9578
- return React__default.createElement("ul", {
9579
- ref: listItemRef,
9580
- className: styles$2["list"] + " " + styles$2["padding-content"] + " d-flex h-100 flex-column mb-0 " + (!(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) ? 'justify-content-center' : '')
9581
- }, !(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) && React__default.createElement("li", {
9582
- className: "text-muted text-center fst-italic fs-6"
9583
- }, t('no_message')), !!(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) && filterMessage.map(function (message) {
9584
- return React__default.createElement(ChatItem, Object.assign({
9585
- key: message.id
9586
- }, message, {
9587
- isStudent: isStudent,
9588
- handleUpdateMessage: handleUpdateMessage,
9589
- handleDeleteMessage: handleDeleteMessage,
9590
- onReTrySendMessage: onReTrySendMessage
9591
- }));
9592
- }));
9593
- };
9594
-
9595
- var iconSendMessage = function iconSendMessage(_ref) {
9596
- var _ref$width = _ref.width,
9597
- width = _ref$width === void 0 ? "16" : _ref$width,
9598
- _ref$height = _ref.height,
9599
- height = _ref$height === void 0 ? "16" : _ref$height,
9600
- color = _ref.color;
9601
- return React__default.createElement("svg", {
9602
- width: width,
9603
- height: height,
9604
- viewBox: "0 0 16 16",
9605
- fill: color,
9606
- xmlns: "http://www.w3.org/2000/svg"
9607
- }, React__default.createElement("path", {
9608
- d: "M14.8934 7.09539L14.8884 7.0932L1.54219 1.55758C1.42993 1.51059 1.30778 1.49217 1.18666 1.50395C1.06554 1.51573 0.949225 1.55734 0.848125 1.62508C0.741311 1.69507 0.653573 1.79052 0.592805 1.90283C0.532037 2.01515 0.500145 2.14081 0.5 2.26852V5.80883C0.50006 5.98341 0.561019 6.15249 0.67237 6.28695C0.783722 6.42141 0.938491 6.5128 1.11 6.54539L8.38906 7.89133C8.41767 7.89675 8.44348 7.91199 8.46205 7.93441C8.48062 7.95683 8.49078 7.98503 8.49078 8.01414C8.49078 8.04325 8.48062 8.07145 8.46205 8.09387C8.44348 8.1163 8.41767 8.13153 8.38906 8.13695L1.11031 9.48289C0.938851 9.5154 0.784092 9.60667 0.67269 9.74101C0.561288 9.87534 0.500219 10.0443 0.5 10.2188V13.7598C0.499917 13.8817 0.530111 14.0018 0.587871 14.1092C0.645632 14.2166 0.729152 14.3079 0.830938 14.3751C0.953375 14.4564 1.09706 14.4999 1.24406 14.5001C1.34626 14.5 1.4474 14.4795 1.54156 14.4398L14.8875 8.9357L14.8934 8.93289C15.0731 8.85569 15.2262 8.72751 15.3337 8.56421C15.4413 8.40092 15.4986 8.20968 15.4986 8.01414C15.4986 7.81861 15.4413 7.62736 15.3337 7.46407C15.2262 7.30077 15.0731 7.1726 14.8934 7.09539Z",
9609
- fill: "white"
9610
- }));
9611
- };
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
9532
+ onConfirm: function onConfirm() {
9533
+ return handleDeleteMessage(conversationId || 0, id || 0, toggleConfirmDialog);
10341
9534
  },
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]
9535
+ title: t("confirmation"),
9536
+ okText: t("yes"),
9537
+ cancelText: t("no")
9538
+ }), React__default.createElement(UpdateMessageDialog, {
9539
+ open: openUpdateDialog,
9540
+ onClose: toggleUpdateDialog,
9541
+ content: content,
9542
+ handleUploadImage: handleUploadImage,
9543
+ selectedFile: selectedFile,
9544
+ contentType: contentType,
9545
+ handleUpdateMessage: function handleUpdateMessage(content) {
9546
+ return _handleUpdateMessage(conversationId || 0, id || 0, content, toggleUpdateDialog);
10389
9547
  }
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
- })))));
9548
+ }));
9549
+ };
9550
+
9551
+ var ChatList = function ChatList(_ref) {
9552
+ var _ref$messages = _ref.messages,
9553
+ messages = _ref$messages === void 0 ? [] : _ref$messages,
9554
+ roles = _ref.roles,
9555
+ onReTrySendMessage = _ref.onReTrySendMessage,
9556
+ handleUpdateMessage = _ref.handleUpdateMessage,
9557
+ handleDeleteMessage = _ref.handleDeleteMessage,
9558
+ listItemRef = _ref.listItemRef;
9559
+ var _useTranslation = reactI18next.useTranslation(),
9560
+ t = _useTranslation.t;
9561
+ var filterMessage = React.useMemo(function () {
9562
+ var prevTime = 0;
9563
+ var prevSender;
9564
+ return messages.map(function (message) {
9565
+ var _message$sender, _message$sender2;
9566
+ var currentTime = new Date(message.createdAt).getTime();
9567
+ var showTimestamp = !prevTime || currentTime - prevTime > 20 * 60 * 1000;
9568
+ var showName = ((_message$sender = message.sender) === null || _message$sender === void 0 ? void 0 : _message$sender.fullName) !== prevSender;
9569
+ prevSender = (_message$sender2 = message.sender) === null || _message$sender2 === void 0 ? void 0 : _message$sender2.fullName;
9570
+ prevTime = currentTime;
9571
+ return _extends({}, message, {
9572
+ showTimestamp: showTimestamp,
9573
+ showName: showName
9574
+ });
9575
+ });
9576
+ }, [JSON.stringify(messages)]);
9577
+ var isStudent = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Student);
9578
+ return React__default.createElement("ul", {
9579
+ ref: listItemRef,
9580
+ className: styles$2["list"] + " " + styles$2["padding-content"] + " d-flex h-100 flex-column mb-0 " + (!(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) ? 'justify-content-center' : '')
9581
+ }, !(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) && React__default.createElement("li", {
9582
+ className: "text-muted text-center fst-italic fs-6"
9583
+ }, t('no_message')), !!(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) && filterMessage.map(function (message) {
9584
+ return React__default.createElement(ChatItem, Object.assign({
9585
+ key: message.id
9586
+ }, message, {
9587
+ isStudent: isStudent,
9588
+ handleUpdateMessage: handleUpdateMessage,
9589
+ handleDeleteMessage: handleDeleteMessage,
9590
+ onReTrySendMessage: onReTrySendMessage
9591
+ }));
9592
+ }));
9593
+ };
9594
+
9595
+ var iconSendMessage = function iconSendMessage(_ref) {
9596
+ var _ref$width = _ref.width,
9597
+ width = _ref$width === void 0 ? "16" : _ref$width,
9598
+ _ref$height = _ref.height,
9599
+ height = _ref$height === void 0 ? "16" : _ref$height,
9600
+ color = _ref.color;
9601
+ return React__default.createElement("svg", {
9602
+ width: width,
9603
+ height: height,
9604
+ viewBox: "0 0 16 16",
9605
+ fill: color,
9606
+ xmlns: "http://www.w3.org/2000/svg"
9607
+ }, React__default.createElement("path", {
9608
+ d: "M14.8934 7.09539L14.8884 7.0932L1.54219 1.55758C1.42993 1.51059 1.30778 1.49217 1.18666 1.50395C1.06554 1.51573 0.949225 1.55734 0.848125 1.62508C0.741311 1.69507 0.653573 1.79052 0.592805 1.90283C0.532037 2.01515 0.500145 2.14081 0.5 2.26852V5.80883C0.50006 5.98341 0.561019 6.15249 0.67237 6.28695C0.783722 6.42141 0.938491 6.5128 1.11 6.54539L8.38906 7.89133C8.41767 7.89675 8.44348 7.91199 8.46205 7.93441C8.48062 7.95683 8.49078 7.98503 8.49078 8.01414C8.49078 8.04325 8.48062 8.07145 8.46205 8.09387C8.44348 8.1163 8.41767 8.13153 8.38906 8.13695L1.11031 9.48289C0.938851 9.5154 0.784092 9.60667 0.67269 9.74101C0.561288 9.87534 0.500219 10.0443 0.5 10.2188V13.7598C0.499917 13.8817 0.530111 14.0018 0.587871 14.1092C0.645632 14.2166 0.729152 14.3079 0.830938 14.3751C0.953375 14.4564 1.09706 14.4999 1.24406 14.5001C1.34626 14.5 1.4474 14.4795 1.54156 14.4398L14.8875 8.9357L14.8934 8.93289C15.0731 8.85569 15.2262 8.72751 15.3337 8.56421C15.4413 8.40092 15.4986 8.20968 15.4986 8.01414C15.4986 7.81861 15.4413 7.62736 15.3337 7.46407C15.2262 7.30077 15.0731 7.1726 14.8934 7.09539Z",
9609
+ fill: "white"
9610
+ }));
10445
9611
  };
10446
9612
 
10447
9613
  var InputChat = function InputChat(_ref) {
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,
9614
+ var text = _ref.text,
10454
9615
  onChangeInput = _ref.onChangeInput,
10455
9616
  onSubmit = _ref.onSubmit,
10456
9617
  isCompleted = _ref.isCompleted,
@@ -10459,20 +9620,10 @@ var InputChat = function InputChat(_ref) {
10459
9620
  handleDeleteSelectedImage = _ref.handleDeleteSelectedImage;
10460
9621
  var _useTranslation = reactI18next.useTranslation(),
10461
9622
  t = _useTranslation.t;
10462
- var isStudent = role === exports.Role.Student;
10463
9623
  var fileInputRef = React.useRef(null);
10464
- var _useState = React.useState(false),
10465
- open = _useState[0],
10466
- setOpen = _useState[1];
10467
- var disabled = isCompleted || isSending;
10468
9624
  var handleSubmit = function handleSubmit() {
10469
9625
  onSubmit();
10470
9626
  };
10471
- var handleToggleSketchDialog = function handleToggleSketchDialog() {
10472
- setOpen(function (state) {
10473
- return !state;
10474
- });
10475
- };
10476
9627
  var handleSelectedFile = function handleSelectedFile(e) {
10477
9628
  var files = e.target.files;
10478
9629
  handleUploadImage(files[0]);
@@ -10480,26 +9631,13 @@ var InputChat = function InputChat(_ref) {
10480
9631
  fileInputRef.current.value = "";
10481
9632
  }
10482
9633
  };
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
- };
10494
9634
  return React__default.createElement(material.Grid, {
10495
9635
  item: true,
10496
9636
  xs: 12,
10497
9637
  padding: "16px"
10498
- }, React__default.createElement(material.Stack, {
10499
- direction: {
10500
- sx: "column",
10501
- lg: "row"
10502
- },
9638
+ }, React__default.createElement(material.Box, {
9639
+ display: "flex",
9640
+ flexDirection: "row",
10503
9641
  gap: "24px"
10504
9642
  }, React__default.createElement(material.Box, {
10505
9643
  display: "flex",
@@ -10511,14 +9649,12 @@ var InputChat = function InputChat(_ref) {
10511
9649
  border: selectedFile ? "1px solid #97A1AF" : undefined,
10512
9650
  borderRadius: selectedFile ? "6px" : undefined,
10513
9651
  flexDirection: "column"
10514
- }, selectedFile && React__default.createElement(material.Box, {
9652
+ }, selectedFile && React__default.createElement("div", {
10515
9653
  style: {
10516
9654
  position: "relative",
10517
9655
  margin: "10px",
10518
- width: "fit-content",
10519
- cursor: drawPath ? "pointer" : "unset"
10520
- },
10521
- onClick: handleClickImage
9656
+ width: "fit-content"
9657
+ }
10522
9658
  }, React__default.createElement("img", {
10523
9659
  src: selectedFile,
10524
9660
  style: {
@@ -10537,21 +9673,21 @@ var InputChat = function InputChat(_ref) {
10537
9673
  cursor: "pointer",
10538
9674
  background: grey[100]
10539
9675
  },
10540
- disabled: isSending,
10541
9676
  onClick: handleDeleteSelectedImage
10542
9677
  }, React__default.createElement(fa.FaTrash, {
10543
9678
  size: 16
10544
9679
  }))), !selectedFile && React__default.createElement(TinyChatEditor, {
10545
9680
  initValue: text,
10546
9681
  onChange: onChangeInput,
10547
- disabled: disabled
9682
+ disabled: isCompleted
10548
9683
  })), React__default.createElement(material.Typography, {
10549
9684
  fontWeight: 500,
10550
9685
  fontSize: "10px",
10551
9686
  lineHeight: "11.93px",
10552
9687
  color: "#97A1AF"
10553
- }, t("this_is_the_guidance_text"))), React__default.createElement(material.Stack, {
10554
- direction: "column",
9688
+ }, t('this_is_the_guidance_text'))), React__default.createElement(material.Box, {
9689
+ display: "flex",
9690
+ flexDirection: "column",
10555
9691
  justifyContent: "flex-start",
10556
9692
  alignItems: "flex-end",
10557
9693
  gap: "16px"
@@ -10560,19 +9696,11 @@ var InputChat = function InputChat(_ref) {
10560
9696
  fullWidth: true,
10561
9697
  className: styles$2["btn-send"],
10562
9698
  sx: {
10563
- bgcolor: disabled ? styles.light + " !important" : styles.less_dark
9699
+ bgcolor: isCompleted ? styles.light + " !important" : styles.less_dark
10564
9700
  },
10565
- disabled: disabled,
9701
+ disabled: isCompleted,
10566
9702
  onClick: handleSubmit
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, {
9703
+ }, React__default.createElement(iconSendMessage, null), React__default.createElement(material.Typography, {
10576
9704
  fontWeight: 700,
10577
9705
  fontSize: "13px",
10578
9706
  lineHeight: "15.51px"
@@ -10580,12 +9708,12 @@ var InputChat = function InputChat(_ref) {
10580
9708
  variant: "outlined",
10581
9709
  component: "label",
10582
9710
  fullWidth: true,
10583
- disabled: disabled,
9711
+ disabled: isCompleted,
10584
9712
  sx: {
10585
9713
  display: "flex",
10586
9714
  gap: "8px",
10587
9715
  padding: "12px !important",
10588
- borderColor: disabled ? "transparent" : styles.less_dark,
9716
+ borderColor: isCompleted ? "transparent" : styles.less_dark,
10589
9717
  borderWidth: "1px"
10590
9718
  }
10591
9719
  }, React__default.createElement(iconPlusCircle, {
@@ -10601,20 +9729,9 @@ var InputChat = function InputChat(_ref) {
10601
9729
  type: "file",
10602
9730
  hidden: true,
10603
9731
  ref: fileInputRef,
10604
- disabled: disabled,
9732
+ disabled: isCompleted,
10605
9733
  accept: "image/png, image/gif, image/jpeg",
10606
9734
  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
10618
9735
  })))));
10619
9736
  };
10620
9737
 
@@ -10880,8 +9997,7 @@ var ChatHeader = function ChatHeader(_ref) {
10880
9997
  };
10881
9998
 
10882
9999
  var ChatContainer = function ChatContainer(_ref) {
10883
- var role = _ref.role,
10884
- chatHeaderProps = _ref.chatHeaderProps,
10000
+ var chatHeaderProps = _ref.chatHeaderProps,
10885
10001
  chatListProps = _ref.chatListProps,
10886
10002
  inputProps = _ref.inputProps,
10887
10003
  _ref$scrollOffset = _ref.scrollOffset,
@@ -10974,9 +10090,76 @@ var ChatContainer = function ChatContainer(_ref) {
10974
10090
  className: "d-flex justify-content-center align-items-center"
10975
10091
  }, React__default.createElement(material.CircularProgress, null)), React__default.createElement(ChatList, Object.assign({}, chatListProps, {
10976
10092
  listItemRef: listItemRef
10977
- }))), React__default.createElement(InputChat, Object.assign({
10978
- role: role
10979
- }, inputProps)));
10093
+ }))), React__default.createElement(InputChat, Object.assign({}, inputProps)));
10094
+ };
10095
+
10096
+ var MessageSortBy;
10097
+ (function (MessageSortBy) {
10098
+ MessageSortBy["CreatedAt"] = "CreatedAt";
10099
+ })(MessageSortBy || (MessageSortBy = {}));
10100
+ var OrderBy;
10101
+ (function (OrderBy) {
10102
+ OrderBy["ASC"] = "ASC";
10103
+ OrderBy["DESC"] = "DESC";
10104
+ })(OrderBy || (OrderBy = {}));
10105
+ var StudentSortBy;
10106
+ (function (StudentSortBy) {
10107
+ StudentSortBy["CreatedAt"] = "CreatedAt";
10108
+ StudentSortBy["FullName"] = "FullName";
10109
+ })(StudentSortBy || (StudentSortBy = {}));
10110
+ var StudentOrderBy;
10111
+ (function (StudentOrderBy) {
10112
+ StudentOrderBy["ASC"] = "ASC";
10113
+ StudentOrderBy["DESC"] = "DESC";
10114
+ })(StudentOrderBy || (StudentOrderBy = {}));
10115
+ var MessageAction;
10116
+ (function (MessageAction) {
10117
+ MessageAction[MessageAction["Default"] = 0] = "Default";
10118
+ MessageAction[MessageAction["Took"] = 1] = "Took";
10119
+ })(MessageAction || (MessageAction = {}));
10120
+ var MessageSourceType;
10121
+ (function (MessageSourceType) {
10122
+ MessageSourceType[MessageSourceType["Default"] = 0] = "Default";
10123
+ MessageSourceType[MessageSourceType["Exam"] = 1] = "Exam";
10124
+ MessageSourceType[MessageSourceType["Class"] = 2] = "Class";
10125
+ })(MessageSourceType || (MessageSourceType = {}));
10126
+ var MessageStatus;
10127
+ (function (MessageStatus) {
10128
+ MessageStatus["Default"] = "Sent";
10129
+ MessageStatus["Sending"] = "Sending...";
10130
+ MessageStatus["SentError"] = "Sent fail, Retry";
10131
+ })(MessageStatus || (MessageStatus = {}));
10132
+
10133
+ var types = {
10134
+ __proto__: null,
10135
+ get MessageSortBy () { return MessageSortBy; },
10136
+ get OrderBy () { return OrderBy; },
10137
+ get StudentSortBy () { return StudentSortBy; },
10138
+ get StudentOrderBy () { return StudentOrderBy; },
10139
+ get MessageAction () { return MessageAction; },
10140
+ get MessageSourceType () { return MessageSourceType; },
10141
+ get MessageStatus () { return MessageStatus; }
10142
+ };
10143
+
10144
+ var ExamStatus;
10145
+ (function (ExamStatus) {
10146
+ ExamStatus["Default"] = "Default";
10147
+ ExamStatus["Pending"] = "Pending";
10148
+ ExamStatus["Inprogress"] = "Inprogress";
10149
+ ExamStatus["Completed"] = "Completed";
10150
+ })(ExamStatus || (ExamStatus = {}));
10151
+ var Roles;
10152
+ (function (Roles) {
10153
+ Roles["Student"] = "Student";
10154
+ Roles["Teacher"] = "Teacher";
10155
+ Roles["Admin"] = "Admin";
10156
+ })(Roles || (Roles = {}));
10157
+ var MESSAGE_DEFAULT_FILTER = {
10158
+ currentPage: 1,
10159
+ pageSize: 15,
10160
+ textSearch: "",
10161
+ sortColumnDirection: OrderBy.DESC,
10162
+ sortColumnName: MessageSortBy.CreatedAt
10980
10163
  };
10981
10164
 
10982
10165
  var RECENT_USER_URL = BASE_URL + "/api/recentUsers";
@@ -11205,12 +10388,6 @@ var useChatContainer = function useChatContainer(props) {
11205
10388
  var _useState5 = React.useState(true),
11206
10389
  isScrollToEnd = _useState5[0],
11207
10390
  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];
11214
10391
  var isAdmin = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Admin);
11215
10392
  var _useMessageList = useMessageList({
11216
10393
  student: student
@@ -11235,7 +10412,6 @@ var useChatContainer = function useChatContainer(props) {
11235
10412
  try {
11236
10413
  var _temp3 = function _temp3(_result2) {
11237
10414
  if (_exit) return _result2;
11238
- setSending(false);
11239
10415
  loadingRef.current = false;
11240
10416
  };
11241
10417
  var _exit = false;
@@ -11243,7 +10419,6 @@ var useChatContainer = function useChatContainer(props) {
11243
10419
  loadingRef.current = true;
11244
10420
  if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) return Promise.resolve();
11245
10421
  setScrollToEnd(true);
11246
- setSending(true);
11247
10422
  var _temp2 = _catch(function () {
11248
10423
  if (file) {
11249
10424
  return Promise.resolve(handleUploadImageData(file)).then(function (selectedFile) {
@@ -11283,7 +10458,6 @@ var useChatContainer = function useChatContainer(props) {
11283
10458
  };
11284
10459
  var handleUploadImage = function handleUploadImage(file) {
11285
10460
  try {
11286
- handleClearCanvas();
11287
10461
  if (file) {
11288
10462
  setFile(file);
11289
10463
  var reader = new FileReader();
@@ -11297,29 +10471,11 @@ var useChatContainer = function useChatContainer(props) {
11297
10471
  return Promise.reject(e);
11298
10472
  }
11299
10473
  };
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
- };
11318
10474
  var handleUploadImageData = function handleUploadImageData(file) {
11319
10475
  try {
11320
10476
  return Promise.resolve(_catch(function () {
11321
10477
  var formData = new FormData();
11322
- if (file instanceof Blob) formData.append("upload", file, 'drawing.png');else formData.append("upload", file);
10478
+ formData.append("upload", file);
11323
10479
  return Promise.resolve(apiUploadImageFile(formData)).then(function (res) {
11324
10480
  var _res$data;
11325
10481
  return {
@@ -11392,8 +10548,7 @@ var useChatContainer = function useChatContainer(props) {
11392
10548
  return Promise.reject(e);
11393
10549
  }
11394
10550
  };
11395
- var handleDeleteSelectedImage = function handleDeleteSelectedImage(e) {
11396
- e === null || e === void 0 ? void 0 : e.stopPropagation();
10551
+ var handleDeleteSelectedImage = function handleDeleteSelectedImage() {
11397
10552
  setFile(undefined);
11398
10553
  setBackgroundImage(null);
11399
10554
  };
@@ -11481,16 +10636,12 @@ var useChatContainer = function useChatContainer(props) {
11481
10636
  handleDeleteMessage: handleDeleteMessage
11482
10637
  },
11483
10638
  inputProps: {
11484
- isSending: isSending,
11485
- drawPath: drawPath,
11486
10639
  selectedFile: backgroundImage,
11487
10640
  text: (message === null || message === void 0 ? void 0 : message.content) || "",
11488
10641
  onChangeInput: handleChangeInput,
11489
10642
  onSubmit: handleAddMessage,
11490
10643
  handleDeleteSelectedImage: handleDeleteSelectedImage,
11491
10644
  handleUploadImage: handleUploadImage,
11492
- onSaveCanvas: handleSaveCanvas,
11493
- onClearCanvas: handleClearCanvas,
11494
10645
  isCompleted: selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.isCompleted
11495
10646
  },
11496
10647
  isScrollToEnd: isScrollToEnd,
@@ -20215,7 +19366,7 @@ var ChipCustom = material.styled(material.Stack)(function (_ref) {
20215
19366
  };
20216
19367
  });
20217
19368
  var AnswerItem = function AnswerItem(_ref2) {
20218
- var _data$selectedAnswers, _data$textualAnswers;
19369
+ var _data$selectedAnswers, _data$textualAnswers, _data$skipRate$toFixe, _data$skipRate;
20219
19370
  var data = _ref2.data,
20220
19371
  nextData = _ref2.nextData,
20221
19372
  isFirst = _ref2.isFirst,
@@ -20280,7 +19431,7 @@ var AnswerItem = function AnswerItem(_ref2) {
20280
19431
  width: "80px",
20281
19432
  justifyContent: "center"
20282
19433
  }
20283
- }, data.answerResponseSignal != null ? React__default.createElement("p", {
19434
+ }, data.duration != 0 ? React__default.createElement("p", {
20284
19435
  style: {
20285
19436
  margin: 0
20286
19437
  },
@@ -20297,7 +19448,7 @@ var AnswerItem = function AnswerItem(_ref2) {
20297
19448
  width: "80px",
20298
19449
  justifyContent: "center"
20299
19450
  }
20300
- }, data.answerResponseSignal != null && data.topDuration ? React__default.createElement("p", {
19451
+ }, data.duration != 0 && data.topDuration ? React__default.createElement("p", {
20301
19452
  style: {
20302
19453
  margin: 0
20303
19454
  },
@@ -20312,20 +19463,20 @@ var AnswerItem = function AnswerItem(_ref2) {
20312
19463
  style: {
20313
19464
  display: "flex",
20314
19465
  alignItems: "center",
20315
- width: "80px",
19466
+ width: "150px",
20316
19467
  justifyContent: "center"
20317
19468
  }
20318
- }, data.answerResponseSignal != null ? React__default.createElement("p", {
19469
+ }, React__default.createElement("p", {
20319
19470
  style: {
20320
19471
  margin: 0
20321
19472
  },
20322
19473
  className: styles$7["answer-response"] + " " + getOverallColorClassName(data.overallCorrectRate, styles$7)
20323
- }, data.overallCorrectRate.toFixed(2) + "%") : React__default.createElement("p", {
19474
+ }, data.overallCorrectRate.toFixed(2) + "%", React__default.createElement("span", {
20324
19475
  style: {
20325
- margin: 0
20326
- },
20327
- className: styles$7["answerNoTime"]
20328
- }, t("no_time"))), React__default.createElement("div", {
19476
+ fontSize: "10px",
19477
+ color: red[900]
19478
+ }
19479
+ }, "(" + ((_data$skipRate$toFixe = (_data$skipRate = data.skipRate) === null || _data$skipRate === void 0 ? void 0 : _data$skipRate.toFixed(2)) != null ? _data$skipRate$toFixe : 0) + "%)"))), React__default.createElement("div", {
20329
19480
  className: styles$7["classification"] + " " + printStyles["avoid-break-inside"] + " flex-grow-1 justify-content-start",
20330
19481
  style: {
20331
19482
  paddingInline: "14px",
@@ -20378,7 +19529,7 @@ var AnswerItem = function AnswerItem(_ref2) {
20378
19529
  }, openContextMenu ? React__default.createElement(material.ClickAwayListener, {
20379
19530
  onClickAway: handleCloseContextMenu
20380
19531
  }, React__default.createElement(material.Box, null, React__default.createElement(CustomTooltip, {
20381
- onClose: onCloseContextMenu,
19532
+ onClose: handleCloseContextMenu,
20382
19533
  open: openContextMenu,
20383
19534
  disableFocusListener: true,
20384
19535
  disableHoverListener: true,
@@ -20524,7 +19675,7 @@ var MyAnswer = function MyAnswer(_ref) {
20524
19675
  display: "flex",
20525
19676
  alignItems: "center",
20526
19677
  gap: "4px",
20527
- width: "80px",
19678
+ width: "150px",
20528
19679
  justifyContent: "center"
20529
19680
  }
20530
19681
  }, React__default.createElement(material.Typography, {
@@ -20534,9 +19685,15 @@ var MyAnswer = function MyAnswer(_ref) {
20534
19685
  fontWeight: 600,
20535
19686
  color: "#97A1AF",
20536
19687
  display: "flex",
20537
- alignItems: "center"
19688
+ alignItems: "baseline",
19689
+ gap: "2px"
20538
19690
  }
20539
- }, t("total_correct_rate")))), React__default.createElement("div", {
19691
+ }, t("total_correct_rate"), React__default.createElement("span", {
19692
+ style: {
19693
+ fontSize: "10px",
19694
+ color: red[900]
19695
+ }
19696
+ }, "(" + t("not_selected") + ")")))), React__default.createElement("div", {
20540
19697
  className: styles$7["titleMyAnswer2"]
20541
19698
  }, React__default.createElement(material.Typography, {
20542
19699
  sx: {
@@ -22069,7 +21226,7 @@ var TimeOrderChart = function TimeOrderChart(_ref) {
22069
21226
  };
22070
21227
 
22071
21228
  var TextbookAnswerItem = function TextbookAnswerItem(_ref) {
22072
- var _data$selectedAnswers, _data$textualAnswers, _data$selectedAnswers2, _data$textualAnswers2, _data$selectedAnswers3, _data$textualAnswers3;
21229
+ var _data$selectedAnswers, _data$textualAnswers, _data$selectedAnswers2, _data$textualAnswers2, _data$selectedAnswers3, _data$textualAnswers3, _data$skipRate$toFixe, _data$skipRate;
22073
21230
  var data = _ref.data,
22074
21231
  nextData = _ref.nextData,
22075
21232
  isFirst = _ref.isFirst,
@@ -22135,7 +21292,7 @@ var TextbookAnswerItem = function TextbookAnswerItem(_ref) {
22135
21292
  display: "flex",
22136
21293
  alignItems: "center"
22137
21294
  }
22138
- }, data.answerResponseSignal != null ? React__default.createElement("p", {
21295
+ }, data.duration != 0 ? React__default.createElement("p", {
22139
21296
  style: {
22140
21297
  margin: 0
22141
21298
  },
@@ -22151,7 +21308,7 @@ var TextbookAnswerItem = function TextbookAnswerItem(_ref) {
22151
21308
  display: "flex",
22152
21309
  alignItems: "center"
22153
21310
  }
22154
- }, data.answerResponseSignal != null && data.topDuration ? React__default.createElement("p", {
21311
+ }, data.duration != 0 && data.topDuration ? React__default.createElement("p", {
22155
21312
  style: {
22156
21313
  margin: 0
22157
21314
  },
@@ -22168,22 +21325,22 @@ var TextbookAnswerItem = function TextbookAnswerItem(_ref) {
22168
21325
  display: "flex",
22169
21326
  alignItems: "center"
22170
21327
  }
22171
- }, data.answerResponseSignal != null ? React__default.createElement("p", {
21328
+ }, React__default.createElement("p", {
22172
21329
  style: {
22173
21330
  margin: 0
22174
21331
  },
22175
21332
  className: styles$7["answer-response"] + " " + getOverallColorClassName(data.overallCorrectRate, styles$7)
22176
- }, data.overallCorrectRate.toFixed(2) + "%") : React__default.createElement("p", {
21333
+ }, data.overallCorrectRate.toFixed(2) + "%", React__default.createElement("span", {
22177
21334
  style: {
22178
- margin: 0
22179
- },
22180
- className: styles$7["answerNoTime"]
22181
- }, t("no_time"))), isStudent && !isLearningSpace && React__default.createElement(material.Box, {
21335
+ fontSize: "10px",
21336
+ color: red[900]
21337
+ }
21338
+ }, "(" + ((_data$skipRate$toFixe = (_data$skipRate = data.skipRate) === null || _data$skipRate === void 0 ? void 0 : _data$skipRate.toFixed(2)) != null ? _data$skipRate$toFixe : 0) + "%)"))), isStudent && !isLearningSpace && React__default.createElement(material.Box, {
22182
21339
  className: styles["custom-col-2"]
22183
21340
  }, openContextMenu ? React__default.createElement(material.ClickAwayListener, {
22184
21341
  onClickAway: handleCloseContextMenu
22185
21342
  }, React__default.createElement(material.Box, null, React__default.createElement(CustomTooltip, {
22186
- onClose: onCloseContextMenu,
21343
+ onClose: handleCloseContextMenu,
22187
21344
  open: openContextMenu,
22188
21345
  disableFocusListener: true,
22189
21346
  disableHoverListener: true,
@@ -22336,9 +21493,15 @@ var TextbookMyAnswer = function TextbookMyAnswer(_ref) {
22336
21493
  fontWeight: 600,
22337
21494
  color: "#97A1AF",
22338
21495
  display: "flex",
22339
- alignItems: "center"
21496
+ alignItems: "baseline",
21497
+ gap: "2px"
21498
+ }
21499
+ }, t("total_correct_rate"), React__default.createElement("span", {
21500
+ style: {
21501
+ fontSize: "10px",
21502
+ color: red[900]
22340
21503
  }
22341
- }, t("total_correct_rate")))), React__default.createElement("div", {
21504
+ }, "(" + t("not_selected") + ")")))), React__default.createElement("div", {
22342
21505
  className: styles$7["titleMyAnswer2"]
22343
21506
  }, React__default.createElement(material.Typography, {
22344
21507
  sx: {
@@ -24952,7 +24115,7 @@ var useOverallChartContainer = function useOverallChartContainer(isStudent, exam
24952
24115
  return [texts.slice(0, middle), texts.slice(middle)];
24953
24116
  }, [JSON.stringify(categories)]);
24954
24117
  var formatTooltip = React.useCallback(function (_ref2) {
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$;
24118
+ var _overallData$data$0$h, _overallData$data$, _overallData$maxData$, _overallData$data$1$h, _overallData$data$2, _overallData$maxData$2, _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$maxData$3, _overallData$data$1$t, _overallData$data$8, _overallData$maxData$4, _overallData$data$0$l, _overallData$data$9, _overallData$maxData$5, _overallData$data$1$l, _overallData$data$10, _overallData$maxData$6, _overallData$data$0$c, _overallData$data$11, _overallData$data$11$, _overallData$data$1$c, _overallData$data$12, _overallData$data$12$;
24956
24119
  var dataPointIndex = _ref2.dataPointIndex,
24957
24120
  w = _ref2.w;
24958
24121
  var label = categories[dataPointIndex];
@@ -24961,42 +24124,34 @@ var useOverallChartContainer = function useOverallChartContainer(isStudent, exam
24961
24124
  switch (dataPointIndex) {
24962
24125
  case 1:
24963
24126
  myValue = "" + t("n_questions", {
24964
- total: (_overallData$data$0$h = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$ = overallData.data[0]) === null || _overallData$data$ === void 0 ? void 0 : _overallData$data$.highLevelQuestions) != null ? _overallData$data$0$h : 0
24127
+ total: ((_overallData$data$0$h = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$ = overallData.data[0]) === null || _overallData$data$ === void 0 ? void 0 : _overallData$data$.highLevelQuestions) != null ? _overallData$data$0$h : 0) + "/" + ((_overallData$maxData$ = overallData === null || overallData === void 0 ? void 0 : overallData.maxData.highLevelQuestions) != null ? _overallData$maxData$ : 0)
24965
24128
  });
24966
24129
  avgValue = "" + t("n_questions", {
24967
- total: (_overallData$data$1$h = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$2 = overallData.data[1]) === null || _overallData$data$2 === void 0 ? void 0 : (_overallData$data$2$h = _overallData$data$2.highLevelQuestions) === null || _overallData$data$2$h === void 0 ? void 0 : _overallData$data$2$h.toFixed(2)) != null ? _overallData$data$1$h : 0
24130
+ total: Math.round((_overallData$data$1$h = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$2 = overallData.data[1]) === null || _overallData$data$2 === void 0 ? void 0 : _overallData$data$2.highLevelQuestions) != null ? _overallData$data$1$h : 0) + "/" + ((_overallData$maxData$2 = overallData === null || overallData === void 0 ? void 0 : overallData.maxData.highLevelQuestions) != null ? _overallData$maxData$2 : 0)
24968
24131
  });
24969
24132
  break;
24970
24133
  case 2:
24971
- myValue = "" + t("n_seconds", {
24972
- sec: (((_overallData$data$0$q = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$3 = overallData.data[0]) === null || _overallData$data$3 === void 0 ? void 0 : _overallData$data$3.questionLongestTime) != null ? _overallData$data$0$q : 0) / 1000).toFixed(2)
24973
- });
24974
- avgValue = "" + t("n_seconds", {
24975
- sec: (((_overallData$data$1$q = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$4 = overallData.data[1]) === null || _overallData$data$4 === void 0 ? void 0 : _overallData$data$4.questionLongestTime) != null ? _overallData$data$1$q : 0) / 1000).toFixed(2)
24976
- });
24134
+ myValue = formatTimeSecond(((_overallData$data$0$q = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$3 = overallData.data[0]) === null || _overallData$data$3 === void 0 ? void 0 : _overallData$data$3.questionLongestTime) != null ? _overallData$data$0$q : 0) / 1000, t);
24135
+ avgValue = formatTimeSecond(((_overallData$data$1$q = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$4 = overallData.data[1]) === null || _overallData$data$4 === void 0 ? void 0 : _overallData$data$4.questionLongestTime) != null ? _overallData$data$1$q : 0) / 1000, t);
24977
24136
  break;
24978
24137
  case 3:
24979
- myValue = "" + t("n_seconds", {
24980
- sec: (((_overallData$data$0$p = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$5 = overallData.data[0]) === null || _overallData$data$5 === void 0 ? void 0 : _overallData$data$5.problemSolvingTime) != null ? _overallData$data$0$p : 0) / 1000).toFixed(2)
24981
- });
24982
- avgValue = "" + t("n_seconds", {
24983
- sec: (((_overallData$data$1$p = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$6 = overallData.data[1]) === null || _overallData$data$6 === void 0 ? void 0 : _overallData$data$6.problemSolvingTime) != null ? _overallData$data$1$p : 0) / 1000).toFixed(2)
24984
- });
24138
+ myValue = formatTimeSecond(((_overallData$data$0$p = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$5 = overallData.data[0]) === null || _overallData$data$5 === void 0 ? void 0 : _overallData$data$5.problemSolvingTime) != null ? _overallData$data$0$p : 0) / 1000, t);
24139
+ avgValue = formatTimeSecond(((_overallData$data$1$p = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$6 = overallData.data[1]) === null || _overallData$data$6 === void 0 ? void 0 : _overallData$data$6.problemSolvingTime) != null ? _overallData$data$1$p : 0) / 1000, t);
24985
24140
  break;
24986
24141
  case 4:
24987
24142
  myValue = "" + t("n_questions", {
24988
- total: (_overallData$data$0$t = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$7 = overallData.data[0]) === null || _overallData$data$7 === void 0 ? void 0 : _overallData$data$7.totalAsteriskQuestions) != null ? _overallData$data$0$t : 0
24143
+ total: ((_overallData$data$0$t = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$7 = overallData.data[0]) === null || _overallData$data$7 === void 0 ? void 0 : _overallData$data$7.totalAsteriskQuestions) != null ? _overallData$data$0$t : 0) + "/" + ((_overallData$maxData$3 = overallData === null || overallData === void 0 ? void 0 : overallData.maxData.totalAsteriskQuestions) != null ? _overallData$maxData$3 : 0)
24989
24144
  });
24990
24145
  avgValue = "" + t("n_questions", {
24991
- total: (_overallData$data$1$t = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$8 = overallData.data[1]) === null || _overallData$data$8 === void 0 ? void 0 : (_overallData$data$8$t = _overallData$data$8.totalAsteriskQuestions) === null || _overallData$data$8$t === void 0 ? void 0 : _overallData$data$8$t.toFixed(2)) != null ? _overallData$data$1$t : 0
24146
+ total: Math.round((_overallData$data$1$t = overallData === null || overallData === void 0 ? void 0 : (_overallData$data$8 = overallData.data[1]) === null || _overallData$data$8 === void 0 ? void 0 : _overallData$data$8.totalAsteriskQuestions) != null ? _overallData$data$1$t : 0) + "/" + ((_overallData$maxData$4 = overallData === null || overallData === void 0 ? void 0 : overallData.maxData.totalAsteriskQuestions) != null ? _overallData$maxData$4 : 0)
24992
24147
  });
24993
24148
  break;
24994
24149
  case 5:
24995
24150
  myValue = "" + t("n_questions", {
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
24151
+ 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) + "/" + ((_overallData$maxData$5 = overallData === null || overallData === void 0 ? void 0 : overallData.maxData.lowLevelQuestions) != null ? _overallData$maxData$5 : 0)
24997
24152
  });
24998
24153
  avgValue = "" + t("n_questions", {
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
24154
+ total: Math.round((_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.lowLevelQuestions) != null ? _overallData$data$1$l : 0) + "/" + ((_overallData$maxData$6 = overallData === null || overallData === void 0 ? void 0 : overallData.maxData.lowLevelQuestions) != null ? _overallData$maxData$6 : 0)
25000
24155
  });
25001
24156
  break;
25002
24157
  default:
@@ -27142,7 +26297,7 @@ var ChapterDetail = function ChapterDetail(_ref) {
27142
26297
  gap: "16px",
27143
26298
  justifyContent: "center",
27144
26299
  alignItems: "center"
27145
- }, React__default.createElement(io5.IoCheckmarkCircle, {
26300
+ }, chapter.completedChapterQuestions === chapter.totalChapterQuestions && React__default.createElement(io5.IoCheckmarkCircle, {
27146
26301
  color: styles.less_dark
27147
26302
  }), React__default.createElement(material.Typography, {
27148
26303
  fontSize: "14px",
@@ -27741,7 +26896,8 @@ var TextbookDrawer = function TextbookDrawer(_ref) {
27741
26896
  borderRadius: "10px",
27742
26897
  width: "100%",
27743
26898
  height: "22px",
27744
- position: "relative"
26899
+ position: "relative",
26900
+ overflow: "hidden"
27745
26901
  }
27746
26902
  }, React__default.createElement(material.Stack, {
27747
26903
  sx: {