touchstudy-core 0.1.162 → 0.1.164

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.
package/dist/index.js CHANGED
@@ -27,10 +27,10 @@ require('moment/locale/ko.js');
27
27
  require('moment/locale/en-au.js');
28
28
  var reactVirtualized = require('react-virtualized');
29
29
  var formik = require('formik');
30
- var styles$c = require('@mui/material/styles');
31
30
  var tinymce = _interopDefault(require('tinymce'));
32
31
  require('@wiris/mathtype-tinymce6');
33
32
  var tinymceReact = require('@tinymce/tinymce-react');
33
+ var styles$c = require('@mui/material/styles');
34
34
  var Grid = _interopDefault(require('@mui/material/Grid'));
35
35
  var Typography = _interopDefault(require('@mui/material/Typography'));
36
36
  var Card = _interopDefault(require('@mui/material/Card'));
@@ -1484,6 +1484,25 @@ var textbook_name = "교재 이름";
1484
1484
  var korean_language = "국어";
1485
1485
  var answer_cannot_be_empty = "답변은 비워둘 수 없습니다";
1486
1486
  var are_you_sure_to_create_student_parent_note = "학생/학부모에게 노트를 생성하시겠습니까?";
1487
+ var notification_title = "알림 제목";
1488
+ var vieweduser = "사용자 조회";
1489
+ var updateduser = "사용자 업데이트";
1490
+ var creatednewuser = "새 사용자 생성";
1491
+ var importeduser = "사용자 가져오기";
1492
+ var viewedqna = "Q&A 조회";
1493
+ var completedqna = "Q&A 완료";
1494
+ var answeredqna = "Q&A 답변";
1495
+ var removemessageqna = "Q&A 메시지 삭제";
1496
+ var updatemessageqna = "Q&A 메시지 업데이트";
1497
+ var viewedexamresult = "시험 결과 조회";
1498
+ var printedexamresult = "시험 결과 출력";
1499
+ var viewedattendance = "출석 조회";
1500
+ var updatedattendance = "출석 업데이트";
1501
+ var addedteachertoclass = "교사 수업 추가";
1502
+ var removedteacherfromclass = "교사 수업 제거";
1503
+ var addedstudenttoclass = "학생 수업 추가";
1504
+ var removedstudentfromclass = "학생 수업 제거";
1505
+ var hidden = "숨겨진";
1487
1506
  var lang_ko = {
1488
1507
  problem_solving: problem_solving,
1489
1508
  my_story: my_story,
@@ -2605,7 +2624,26 @@ var lang_ko = {
2605
2624
  textbook_name: textbook_name,
2606
2625
  korean_language: korean_language,
2607
2626
  answer_cannot_be_empty: answer_cannot_be_empty,
2608
- are_you_sure_to_create_student_parent_note: are_you_sure_to_create_student_parent_note
2627
+ are_you_sure_to_create_student_parent_note: are_you_sure_to_create_student_parent_note,
2628
+ notification_title: notification_title,
2629
+ vieweduser: vieweduser,
2630
+ updateduser: updateduser,
2631
+ creatednewuser: creatednewuser,
2632
+ importeduser: importeduser,
2633
+ viewedqna: viewedqna,
2634
+ completedqna: completedqna,
2635
+ answeredqna: answeredqna,
2636
+ removemessageqna: removemessageqna,
2637
+ updatemessageqna: updatemessageqna,
2638
+ viewedexamresult: viewedexamresult,
2639
+ printedexamresult: printedexamresult,
2640
+ viewedattendance: viewedattendance,
2641
+ updatedattendance: updatedattendance,
2642
+ addedteachertoclass: addedteachertoclass,
2643
+ removedteacherfromclass: removedteacherfromclass,
2644
+ addedstudenttoclass: addedstudenttoclass,
2645
+ removedstudentfromclass: removedstudentfromclass,
2646
+ hidden: hidden
2609
2647
  };
2610
2648
 
2611
2649
  var problem_solving$1 = "Problem Solving";
@@ -3750,6 +3788,25 @@ var textbook_name$1 = "Textbook name";
3750
3788
  var korean_language$1 = "Korean";
3751
3789
  var answer_cannot_be_empty$1 = "Answer cannot be empty";
3752
3790
  var are_you_sure_to_create_student_parent_note$1 = "Are you sure you want to create a note for the student/parent?";
3791
+ var notification_title$1 = "Notification title";
3792
+ var vieweduser$1 = "Viewed user";
3793
+ var updateduser$1 = "Updated user";
3794
+ var creatednewuser$1 = "Created new user";
3795
+ var importeduser$1 = "Imported user";
3796
+ var viewedqna$1 = "Viewed Q&A";
3797
+ var completedqna$1 = "Completed Q&A";
3798
+ var answeredqna$1 = "Answered Q&A";
3799
+ var removemessageqna$1 = "Remove message Q&A";
3800
+ var updatemessageqna$1 = "Update message Q&A";
3801
+ var viewedexamresult$1 = "Viewed exam result";
3802
+ var printedexamresult$1 = "Printed exam result";
3803
+ var viewedattendance$1 = "Viewed attendance";
3804
+ var updatedattendance$1 = "Updated attendance";
3805
+ var addedteachertoclass$1 = "Added teacher to class";
3806
+ var removedteacherfromclass$1 = "Removed teacher from class";
3807
+ var addedstudenttoclass$1 = "Added student to class";
3808
+ var removedstudentfromclass$1 = "Removed student from class";
3809
+ var hidden$1 = "Hidden";
3753
3810
  var lang_en = {
3754
3811
  problem_solving: problem_solving$1,
3755
3812
  my_story: my_story$1,
@@ -4873,7 +4930,26 @@ var lang_en = {
4873
4930
  textbook_name: textbook_name$1,
4874
4931
  korean_language: korean_language$1,
4875
4932
  answer_cannot_be_empty: answer_cannot_be_empty$1,
4876
- are_you_sure_to_create_student_parent_note: are_you_sure_to_create_student_parent_note$1
4933
+ are_you_sure_to_create_student_parent_note: are_you_sure_to_create_student_parent_note$1,
4934
+ notification_title: notification_title$1,
4935
+ vieweduser: vieweduser$1,
4936
+ updateduser: updateduser$1,
4937
+ creatednewuser: creatednewuser$1,
4938
+ importeduser: importeduser$1,
4939
+ viewedqna: viewedqna$1,
4940
+ completedqna: completedqna$1,
4941
+ answeredqna: answeredqna$1,
4942
+ removemessageqna: removemessageqna$1,
4943
+ updatemessageqna: updatemessageqna$1,
4944
+ viewedexamresult: viewedexamresult$1,
4945
+ printedexamresult: printedexamresult$1,
4946
+ viewedattendance: viewedattendance$1,
4947
+ updatedattendance: updatedattendance$1,
4948
+ addedteachertoclass: addedteachertoclass$1,
4949
+ removedteacherfromclass: removedteacherfromclass$1,
4950
+ addedstudenttoclass: addedstudenttoclass$1,
4951
+ removedstudentfromclass: removedstudentfromclass$1,
4952
+ hidden: hidden$1
4877
4953
  };
4878
4954
 
4879
4955
  i18n__default.use(reactI18next.initReactI18next).init({
@@ -6228,10 +6304,22 @@ function _finally(body, finalizer) {
6228
6304
 
6229
6305
  (function (RecentUserAction) {
6230
6306
  RecentUserAction["ViewedUser"] = "ViewedUser";
6307
+ RecentUserAction["UpdatedUser"] = "UpdatedUser";
6308
+ RecentUserAction["CreatedNewUser"] = "CreatedNewUser";
6309
+ RecentUserAction["ImportedUser"] = "ImportedUser";
6231
6310
  RecentUserAction["ViewedQNA"] = "ViewedQNA";
6311
+ RecentUserAction["CompletedQNA"] = "CompletedQNA";
6312
+ RecentUserAction["AnsweredQNA"] = "AnsweredQNA";
6313
+ RecentUserAction["RemoveMessageQNA"] = "RemoveMessageQNA";
6314
+ RecentUserAction["UpdateMessageQNA"] = "UpdateMessageQNA";
6232
6315
  RecentUserAction["ViewedExamResult"] = "ViewedExamResult";
6233
6316
  RecentUserAction["PrintedExamResult"] = "PrintedExamResult";
6234
6317
  RecentUserAction["ViewedAttendance"] = "ViewedAttendance";
6318
+ RecentUserAction["UpdatedAttendance"] = "UpdatedAttendance";
6319
+ RecentUserAction["AddedTeacherToClass"] = "AddedTeacherToClass";
6320
+ RecentUserAction["RemovedTeacherFromClass"] = "RemovedTeacherFromClass";
6321
+ RecentUserAction["AddedStudentToClass"] = "AddedStudentToClass";
6322
+ RecentUserAction["RemovedStudentFromClass"] = "RemovedStudentFromClass";
6235
6323
  })(exports.RecentUserAction || (exports.RecentUserAction = {}));
6236
6324
 
6237
6325
  (function (UserSortColumn) {
@@ -7538,6 +7626,8 @@ var getClassesApi = function getClassesApi(textSearch) {
7538
7626
  return api.get("" + COURSE_URL, {
7539
7627
  params: {
7540
7628
  textSearch: textSearch,
7629
+ pageSize: 100,
7630
+ currentPage: 1,
7541
7631
  roles: [exports.Role.Admin]
7542
7632
  }
7543
7633
  });
@@ -7589,11 +7679,7 @@ var ClassSelector = function ClassSelector(_ref) {
7589
7679
  }, [searchString]);
7590
7680
  React.useEffect(function () {
7591
7681
  timeout && timeout.current && clearTimeout(timeout.current);
7592
- if (!searchString || searchString.trim().length < 2) {
7593
- setClasses([]);
7594
- } else {
7595
- timeout.current = setTimeout(loadData, 300);
7596
- }
7682
+ timeout.current = setTimeout(loadData, 300);
7597
7683
  }, [searchString]);
7598
7684
  var options = classes.filter(function (classOption) {
7599
7685
  return !externalClassIds || externalClassIds && !externalClassIds.includes(classOption.id);
@@ -7614,7 +7700,7 @@ var ClassSelector = function ClassSelector(_ref) {
7614
7700
  return setSearchString(inputValue);
7615
7701
  },
7616
7702
  isLoading: isLoading,
7617
- placeholder: t('placeholder_student_selector'),
7703
+ placeholder: t('select_placeholder'),
7618
7704
  isMulti: true,
7619
7705
  value: value,
7620
7706
  onChange: onChange,
@@ -8097,6 +8183,12 @@ var ChatRightItem = function ChatRightItem(_ref) {
8097
8183
  isOpenTooltip = _useTooltip.isOpenTooltip,
8098
8184
  handleCloseTooltip = _useTooltip.handleCloseTooltip,
8099
8185
  handleOpenTooltip = _useTooltip.handleOpenTooltip;
8186
+ React.useEffect(function () {
8187
+ if (window.MathJax) {
8188
+ var _window$MathJax;
8189
+ (_window$MathJax = window.MathJax) === null || _window$MathJax === void 0 ? void 0 : _window$MathJax.typeset();
8190
+ }
8191
+ }, [content]);
8100
8192
  return React__default.createElement("div", null, showTimestamp && React__default.createElement(material.Typography, {
8101
8193
  fontWeight: 500,
8102
8194
  fontSize: "12px",
@@ -8169,17 +8261,15 @@ var ChatRightItem = function ChatRightItem(_ref) {
8169
8261
  style: {
8170
8262
  "float": "inline-end",
8171
8263
  maxWidth: 400,
8172
- background: styles.less_dark
8173
- }
8174
- }, React__default.createElement(material.Typography, {
8175
- fontWeight: 500,
8176
- fontSize: "14px",
8177
- lineHeight: "16.71px",
8178
- color: "#fff",
8179
- sx: {
8180
- wordBreak: "break-word"
8264
+ background: styles.less_dark,
8265
+ color: "#FFF",
8266
+ fontSize: "14px",
8267
+ fontWeight: 500
8268
+ },
8269
+ dangerouslySetInnerHTML: {
8270
+ __html: content || ""
8181
8271
  }
8182
- }, content))))));
8272
+ })))));
8183
8273
  };
8184
8274
 
8185
8275
  var ChatLeftItem = function ChatLeftItem(_ref) {
@@ -8193,6 +8283,12 @@ var ChatLeftItem = function ChatLeftItem(_ref) {
8193
8283
  toggleImageDialog = _ref.toggleImageDialog;
8194
8284
  var _useTranslation = reactI18next.useTranslation(),
8195
8285
  t = _useTranslation.t;
8286
+ React.useEffect(function () {
8287
+ if (window.MathJax) {
8288
+ var _window$MathJax;
8289
+ (_window$MathJax = window.MathJax) === null || _window$MathJax === void 0 ? void 0 : _window$MathJax.typeset();
8290
+ }
8291
+ }, [content]);
8196
8292
  return React__default.createElement("div", null, showTimestamp && React__default.createElement(material.Typography, {
8197
8293
  fontWeight: 500,
8198
8294
  fontSize: "12px",
@@ -8246,17 +8342,15 @@ var ChatLeftItem = function ChatLeftItem(_ref) {
8246
8342
  }) : React__default.createElement("div", {
8247
8343
  className: styles$1["wrap-content"] + " " + styles$1["content-chat-sender"],
8248
8344
  style: {
8249
- maxWidth: 400
8250
- }
8251
- }, React__default.createElement(material.Typography, {
8252
- fontWeight: 500,
8253
- fontSize: "14px",
8254
- lineHeight: "16.71px",
8255
- color: styles.gray_700,
8256
- sx: {
8257
- wordBreak: "break-word"
8345
+ maxWidth: 400,
8346
+ color: styles.gray_700,
8347
+ fontSize: "14px",
8348
+ fontWeight: 500
8349
+ },
8350
+ dangerouslySetInnerHTML: {
8351
+ __html: content || ""
8258
8352
  }
8259
- }, content)))));
8353
+ }))));
8260
8354
  };
8261
8355
 
8262
8356
  var ImageDetailDialog = function ImageDetailDialog(_ref) {
@@ -8427,6 +8521,47 @@ var iconPlusCircle = function iconPlusCircle(_ref) {
8427
8521
  }));
8428
8522
  };
8429
8523
 
8524
+ var TinyChatEditor = function TinyChatEditor(_ref) {
8525
+ var _ref$disabled = _ref.disabled,
8526
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
8527
+ onChange = _ref.onChange,
8528
+ initValue = _ref.initValue,
8529
+ config = _ref.config;
8530
+ var isFirstChange = React.useRef(true);
8531
+ var _useTranslation = reactI18next.useTranslation(),
8532
+ t = _useTranslation.t;
8533
+ React.useEffect(function () {
8534
+ if (window.tinymce) {
8535
+ window.tinymce = tinymce;
8536
+ }
8537
+ }, []);
8538
+ var options = {
8539
+ height: 126,
8540
+ menubar: false,
8541
+ readonly: false,
8542
+ external_plugins: {
8543
+ tiny_mce_wiris: '/editor/wiris-for-tinymce.js'
8544
+ },
8545
+ toolbar: 'tiny_mce_wiris_formulaEditor',
8546
+ branding: false,
8547
+ extended_valid_elements: '*[.*]',
8548
+ placeholder: t("send_message")
8549
+ };
8550
+ var handleChange = function handleChange(value, _) {
8551
+ if (isFirstChange.current) {
8552
+ isFirstChange.current = false;
8553
+ return;
8554
+ }
8555
+ onChange(value);
8556
+ };
8557
+ return React__default.createElement(tinymceReact.Editor, {
8558
+ disabled: disabled,
8559
+ init: config || options,
8560
+ value: initValue,
8561
+ onEditorChange: handleChange
8562
+ });
8563
+ };
8564
+
8430
8565
  var UpdateMessageDialog = function UpdateMessageDialog(_ref) {
8431
8566
  var open = _ref.open,
8432
8567
  onClose = _ref.onClose,
@@ -8459,7 +8594,7 @@ var UpdateMessageDialog = function UpdateMessageDialog(_ref) {
8459
8594
  handleUpdateMessage(content || "");
8460
8595
  }
8461
8596
  }, function (_ref2) {
8462
- _objectDestructuringEmpty(_ref2);
8597
+ var setFieldValue = _ref2.setFieldValue;
8463
8598
  return React__default.createElement(formik.Form, null, React__default.createElement("label", {
8464
8599
  htmlFor: "content",
8465
8600
  className: styles$1['form-label'] + " " + styles$1['form-label-dialog']
@@ -8471,7 +8606,16 @@ var UpdateMessageDialog = function UpdateMessageDialog(_ref) {
8471
8606
  name: "content",
8472
8607
  validate: validate,
8473
8608
  placeholder: t('the_problem_is_difficult'),
8474
- className: styles$1['form-control']
8609
+ className: styles$1['form-control'],
8610
+ render: function render(_ref3) {
8611
+ var field = _ref3.field;
8612
+ return React__default.createElement(TinyChatEditor, {
8613
+ initValue: field.value,
8614
+ onChange: function onChange(text) {
8615
+ return setFieldValue("content", text);
8616
+ }
8617
+ });
8618
+ }
8475
8619
  }), React__default.createElement(material.DialogActions, {
8476
8620
  sx: {
8477
8621
  display: 'flex',
@@ -8694,7 +8838,6 @@ var iconSendMessage = function iconSendMessage(_ref) {
8694
8838
 
8695
8839
  var InputChat = function InputChat(_ref) {
8696
8840
  var text = _ref.text,
8697
- inputRef = _ref.inputRef,
8698
8841
  onChangeInput = _ref.onChangeInput,
8699
8842
  onSubmit = _ref.onSubmit,
8700
8843
  isCompleted = _ref.isCompleted,
@@ -8707,15 +8850,6 @@ var InputChat = function InputChat(_ref) {
8707
8850
  var handleSubmit = function handleSubmit() {
8708
8851
  onSubmit();
8709
8852
  };
8710
- var handleInputChange = function handleInputChange(event) {
8711
- onChangeInput(event.target.value);
8712
- };
8713
- var handleKeyPressEnter = function handleKeyPressEnter(e) {
8714
- if (e.key === "Enter") {
8715
- handleSubmit();
8716
- return;
8717
- }
8718
- };
8719
8853
  var handleSelectedFile = function handleSelectedFile(e) {
8720
8854
  var files = e.target.files;
8721
8855
  handleUploadImage(files[0]);
@@ -8738,8 +8872,8 @@ var InputChat = function InputChat(_ref) {
8738
8872
  width: "100%"
8739
8873
  }, React__default.createElement(material.Box, {
8740
8874
  display: "flex",
8741
- border: "1px solid #97A1AF",
8742
- borderRadius: "6px",
8875
+ border: selectedFile ? "1px solid #97A1AF" : undefined,
8876
+ borderRadius: selectedFile ? "6px" : undefined,
8743
8877
  flexDirection: "column"
8744
8878
  }, selectedFile && React__default.createElement("div", {
8745
8879
  style: {
@@ -8765,17 +8899,9 @@ var InputChat = function InputChat(_ref) {
8765
8899
  }, React__default.createElement(io5.IoCloseOutline, {
8766
8900
  color: "#fff",
8767
8901
  size: 30
8768
- }))), React__default.createElement("input", {
8769
- className: styles$1["input-chat"],
8770
- style: {
8771
- border: "none"
8772
- },
8773
- placeholder: t("send_message"),
8774
- ref: inputRef,
8775
- value: text,
8776
- width: "100%",
8777
- onKeyPress: handleKeyPressEnter,
8778
- onChange: handleInputChange,
8902
+ }))), React__default.createElement(TinyChatEditor, {
8903
+ initValue: text,
8904
+ onChange: onChangeInput,
8779
8905
  disabled: isCompleted
8780
8906
  })), React__default.createElement(material.Typography, {
8781
8907
  fontWeight: 500,
@@ -8785,8 +8911,8 @@ var InputChat = function InputChat(_ref) {
8785
8911
  }, t('this_is_the_guidance_text'))), React__default.createElement(material.Box, {
8786
8912
  display: "flex",
8787
8913
  flexDirection: "column",
8788
- justifyContent: "flex-end",
8789
- alignItems: "flex-start",
8914
+ justifyContent: "flex-start",
8915
+ alignItems: "flex-end",
8790
8916
  gap: "16px"
8791
8917
  }, React__default.createElement(material.Button, {
8792
8918
  variant: "contained",
@@ -9105,7 +9231,6 @@ var ChatContainer = function ChatContainer(_ref) {
9105
9231
  onReachTop = _ref.onReachTop,
9106
9232
  onReachBottom = _ref.onReachBottom,
9107
9233
  onEndScrollToEnd = _ref.onEndScrollToEnd;
9108
- var inputRef = React.useRef(null);
9109
9234
  var listRef = React.useRef(null);
9110
9235
  var listItemRef = React.useRef(null);
9111
9236
  var scrollRef = React.useRef();
@@ -9188,9 +9313,7 @@ var ChatContainer = function ChatContainer(_ref) {
9188
9313
  className: "d-flex justify-content-center align-items-center"
9189
9314
  }, React__default.createElement(material.CircularProgress, null)), React__default.createElement(ChatList, Object.assign({}, chatListProps, {
9190
9315
  listItemRef: listItemRef
9191
- }))), React__default.createElement(InputChat, Object.assign({}, inputProps, {
9192
- inputRef: inputRef
9193
- })));
9316
+ }))), React__default.createElement(InputChat, Object.assign({}, inputProps)));
9194
9317
  };
9195
9318
 
9196
9319
  var MessageSortBy;
@@ -10922,7 +11045,11 @@ var useLoginPhoneNumber = function useLoginPhoneNumber(props) {
10922
11045
  });
10923
11046
  }, function (error) {
10924
11047
  var _error$response, _error$response2, _error$response2$data;
10925
- if ((error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 500 && (error === null || error === void 0 ? void 0 : (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.title) === "PhoneNumberIsDuplicated") reactToastify.toast.error(t("duplicate_passcode_for_siblings_please_contact_admin_for_assistance"));else reactToastify.toast.error(getErrorMessage(t, error));
11048
+ if ((error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 500 && (error === null || error === void 0 ? void 0 : (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.title) === "PhoneNumberIsDuplicated") reactToastify.toast.error(t("duplicate_passcode_for_siblings_please_contact_admin_for_assistance"));else {
11049
+ !!academyDomain && localStorage.removeItem(ACADEMY_DOMAIN);
11050
+ localStorage.removeItem(LEARNING_SPACE);
11051
+ reactToastify.toast.error(getErrorMessage(t, error));
11052
+ }
10926
11053
  });
10927
11054
  return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
10928
11055
  } catch (e) {
@@ -11451,7 +11578,8 @@ var useLogin$1 = function useLogin(_ref) {
11451
11578
  }();
11452
11579
  return _temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2);
11453
11580
  }, function (error) {
11454
- console.log(error);
11581
+ !!academyDomain && localStorage.removeItem(ACADEMY_DOMAIN);
11582
+ localStorage.removeItem(LEARNING_SPACE);
11455
11583
  reactToastify.toast.error(getErrorMessage(t, error, t("request_login_fail")));
11456
11584
  });
11457
11585
  return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
@@ -11547,6 +11675,7 @@ var useLogiQRCode = function useLogiQRCode(props) {
11547
11675
  error = _useState8[0],
11548
11676
  setError = _useState8[1];
11549
11677
  var firstLoadRef = React.useRef(true);
11678
+ var hasErrorRef = React.useRef(false);
11550
11679
  var onVerify = React.useCallback(function (token) {
11551
11680
  setTokenReCaptcha(token);
11552
11681
  }, []);
@@ -11562,7 +11691,8 @@ var useLogiQRCode = function useLogiQRCode(props) {
11562
11691
  if (!tokenReCaptcha) return Promise.resolve();
11563
11692
  resetData();
11564
11693
  setLoadingQR(true);
11565
- if (!academyDomain) localStorage.setItem(LEARNING_SPACE, "true");
11694
+ if (!academyDomain || hasErrorRef.current) localStorage.setItem(LEARNING_SPACE, "true");
11695
+ if (hasErrorRef.current) localStorage.removeItem(ACADEMY_DOMAIN);
11566
11696
  var _temp = _catch(function () {
11567
11697
  return Promise.resolve(generateQRCode(academyDomain, tokenReCaptcha)).then(function (response) {
11568
11698
  setQrCodeData(response.data);
@@ -11583,6 +11713,7 @@ var useLogiQRCode = function useLogiQRCode(props) {
11583
11713
  setInfo(recievedData === null || recievedData === void 0 ? void 0 : recievedData.data);
11584
11714
  setStatus(QRCodeStatus.Scanned);
11585
11715
  } catch (error) {
11716
+ hasErrorRef.current = true;
11586
11717
  setInvalid(true);
11587
11718
  }
11588
11719
  };
@@ -11888,7 +12019,8 @@ var useLoginWithEmail = function useLoginWithEmail(_ref) {
11888
12019
  }), token, redirectUrl);
11889
12020
  });
11890
12021
  }, function (error) {
11891
- console.log(error);
12022
+ !!academyDomain && localStorage.removeItem(ACADEMY_DOMAIN);
12023
+ localStorage.removeItem(LEARNING_SPACE);
11892
12024
  reactToastify.toast.error(getErrorMessage(t, error, t("request_login_fail")));
11893
12025
  });
11894
12026
  return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
@@ -12008,7 +12140,8 @@ var useLogin$2 = function useLogin(_ref) {
12008
12140
  }), token, redirectUrl);
12009
12141
  });
12010
12142
  }, function (error) {
12011
- console.log(error);
12143
+ !!academyDomain && localStorage.removeItem(ACADEMY_DOMAIN);
12144
+ localStorage.removeItem(LEARNING_SPACE);
12012
12145
  reactToastify.toast.error(getErrorMessage(t, error, t("request_login_fail")));
12013
12146
  }));
12014
12147
  } catch (e) {
@@ -14351,6 +14484,48 @@ var iconCloseDialog = function iconCloseDialog(_ref) {
14351
14484
  }));
14352
14485
  };
14353
14486
 
14487
+ var NoteTinyEditor = function NoteTinyEditor(_ref) {
14488
+ var _ref$disabled = _ref.disabled,
14489
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
14490
+ onChange = _ref.onChange,
14491
+ initValue = _ref.initValue,
14492
+ config = _ref.config;
14493
+ var isFirstChange = React.useRef(true);
14494
+ var _useTranslation = reactI18next.useTranslation(),
14495
+ t = _useTranslation.t;
14496
+ React.useEffect(function () {
14497
+ if (window.tinymce) {
14498
+ window.tinymce = tinymce;
14499
+ }
14500
+ }, []);
14501
+ var options = {
14502
+ height: 280,
14503
+ menubar: false,
14504
+ readonly: false,
14505
+ external_plugins: {
14506
+ tiny_mce_wiris: '/editor/wiris-for-tinymce.js'
14507
+ },
14508
+ plugins: ['anchor', 'autolink', 'charmap', 'codesample', 'emoticons', 'image', 'link', 'lists', 'media', 'searchreplace', 'table', 'textcolor', 'wordcount'],
14509
+ toolbar: 'undo redo | blocks fontfamily fontsize forecolor backcolor | bold italic underline strikethrough | link image media table mergetags | addcomment showcomments | spellcheckdialog a11ycheck typography | align lineheight | checklist numlist bullist indent outdent | emoticons charmap | removeformat | tiny_mce_wiris_formulaEditor | tiny_mce_wiris_formulaEditorChemistry',
14510
+ branding: false,
14511
+ extended_valid_elements: '*[.*]',
14512
+ placeholder: t("the_problem_is_difficult")
14513
+ };
14514
+ var handleChange = function handleChange(value, _) {
14515
+ if (isFirstChange.current) {
14516
+ isFirstChange.current = false;
14517
+ return;
14518
+ }
14519
+ onChange(value);
14520
+ };
14521
+ return React__default.createElement(tinymceReact.Editor, {
14522
+ disabled: disabled,
14523
+ init: config || options,
14524
+ value: initValue,
14525
+ onEditorChange: handleChange
14526
+ });
14527
+ };
14528
+
14354
14529
  var schema$1 = yup.object().shape({
14355
14530
  content: yup.string().required()
14356
14531
  });
@@ -14367,37 +14542,12 @@ var ClassNoteDialog = function ClassNoteDialog(_ref) {
14367
14542
  var handleSaveNote = function handleSaveNote(content) {
14368
14543
  onSaveNote(content);
14369
14544
  };
14370
- var _useState = React.useState(false),
14371
- keyboardOpen = _useState[0],
14372
- setKeyboardOpen = _useState[1];
14373
- React.useEffect(function () {
14374
- var handleResize = function handleResize() {
14375
- if (window.innerHeight < window.outerHeight) {
14376
- setKeyboardOpen(true);
14377
- } else {
14378
- setKeyboardOpen(false);
14379
- }
14380
- };
14381
- window.addEventListener("resize", handleResize);
14382
- handleResize();
14383
- return function () {
14384
- return window.removeEventListener("resize", handleResize);
14385
- };
14386
- }, []);
14387
14545
  return React__default.createElement(material.Dialog, {
14388
14546
  onClose: onClose,
14389
14547
  open: open,
14548
+ maxWidth: "md",
14390
14549
  scroll: "body",
14391
- PaperProps: {
14392
- sx: {
14393
- maxHeight: "unset",
14394
- minWidth: "363px",
14395
- overflowY: "auto",
14396
- position: "relative",
14397
- bottom: keyboardOpen ? "0" : undefined,
14398
- transition: "top 0.3s ease"
14399
- }
14400
- }
14550
+ fullWidth: true
14401
14551
  }, React__default.createElement(DialogTitle, {
14402
14552
  id: "customized-dialog-title"
14403
14553
  }, React__default.createElement(Typography, {
@@ -14426,7 +14576,8 @@ var ClassNoteDialog = function ClassNoteDialog(_ref) {
14426
14576
  handleSaveNote(values.content);
14427
14577
  }
14428
14578
  }, function (_ref2) {
14429
- var values = _ref2.values;
14579
+ var values = _ref2.values,
14580
+ setFieldValue = _ref2.setFieldValue;
14430
14581
  return React__default.createElement(formik.Form, null, React__default.createElement(DialogContent, {
14431
14582
  sx: {
14432
14583
  padding: 0,
@@ -14455,16 +14606,22 @@ var ClassNoteDialog = function ClassNoteDialog(_ref) {
14455
14606
  flexDirection: "row",
14456
14607
  alignItems: "center"
14457
14608
  }, React__default.createElement(formik.Field, {
14458
- as: "textarea",
14459
- rows: 3,
14460
14609
  id: "content-question",
14461
14610
  style: {
14462
- paddingRight: "40px",
14463
- minHeight: "64px"
14611
+ width: "100%"
14464
14612
  },
14465
14613
  name: "content",
14466
14614
  placeholder: t("the_problem_is_difficult"),
14467
- className: styles["form-control"]
14615
+ className: styles["form-control"],
14616
+ render: function render(_ref3) {
14617
+ var field = _ref3.field;
14618
+ return React__default.createElement(NoteTinyEditor, {
14619
+ initValue: field.value,
14620
+ onChange: function onChange(text) {
14621
+ return setFieldValue("content", text);
14622
+ }
14623
+ });
14624
+ }
14468
14625
  })), React__default.createElement(material.Box, {
14469
14626
  marginBottom: "4px"
14470
14627
  })))), React__default.createElement(DialogActions, {
@@ -14954,7 +15111,18 @@ var NoteItem = function NoteItem(_ref) {
14954
15111
  number: (data.questionOrder || 0) + 1
14955
15112
  }) : "" + utcToLocalTime(data.createdAt, t("date_format") + " HH:mm")), data.examSessionId && React__default.createElement(material.Typography, Object.assign({}, NoteItemStyles.text.right), data.categoryName)), React__default.createElement(material.Typography, Object.assign({
14956
15113
  className: "truncate"
14957
- }, NoteItemStyles.contentText), data.content)), React__default.createElement(material.Box, null, (isAdmin || data.isOwned) && React__default.createElement(material.ClickAwayListener, {
15114
+ }, NoteItemStyles.contentText, {
15115
+ sx: {
15116
+ display: "-webkit-box",
15117
+ lineClamp: 1,
15118
+ WebkitLineClamp: 1,
15119
+ WebkitBoxOrient: "vertical",
15120
+ overflow: "hidden"
15121
+ },
15122
+ dangerouslySetInnerHTML: {
15123
+ __html: data.content || ""
15124
+ }
15125
+ }))), React__default.createElement(material.Box, null, (isAdmin || data.isOwned) && React__default.createElement(material.ClickAwayListener, {
14958
15126
  onClickAway: onClose
14959
15127
  }, React__default.createElement(material.Box, null, React__default.createElement(CustomTooltip, {
14960
15128
  onClose: onClose,
@@ -15154,8 +15322,11 @@ var NoteDrawer = function NoteDrawer(props) {
15154
15322
  fontSize: "14px",
15155
15323
  fontWeight: "300",
15156
15324
  color: "#414E62"
15325
+ },
15326
+ dangerouslySetInnerHTML: {
15327
+ __html: (data === null || data === void 0 ? void 0 : data.content) || ""
15157
15328
  }
15158
- }, data === null || data === void 0 ? void 0 : data.content)));
15329
+ })));
15159
15330
  };
15160
15331
 
15161
15332
  var useVirtualList = function useVirtualList(studentId, defaultFilter, getItemsApi) {
@@ -23471,6 +23642,7 @@ var Textbook = function Textbook(_ref) {
23471
23642
  getTextbookList = _ref.getTextbookList,
23472
23643
  onViewQA = _ref.onViewQA;
23473
23644
  var isTabletUp = material.useMediaQuery(theme.breakpoints.up("lg"));
23645
+ var isStudentSite = role === exports.Role.Student;
23474
23646
  var _useDrawer = useDrawer(),
23475
23647
  isOpenDialog = _useDrawer.isOpenDialog,
23476
23648
  handleCloseDialog = _useDrawer.handleCloseDialog,
@@ -23485,6 +23657,9 @@ var Textbook = function Textbook(_ref) {
23485
23657
  handleOpenConfirmDialog = _useTextbook.handleOpenConfirmDialog,
23486
23658
  handleCloseConfirmDialog = _useTextbook.handleCloseConfirmDialog,
23487
23659
  handleDeleteTextbook = _useTextbook.handleDeleteTextbook;
23660
+ var isEditable = isSuperAdmin || textbook.isShared && ((textbook === null || textbook === void 0 ? void 0 : (_textbook$createdBy = textbook.createdBy) === null || _textbook$createdBy === void 0 ? void 0 : _textbook$createdBy.id) === (user === null || user === void 0 ? void 0 : user.id) || textbook.textbookOwners.some(function (i) {
23661
+ return i.id === (user === null || user === void 0 ? void 0 : user.id);
23662
+ }));
23488
23663
  return React__default.createElement(material.Stack, {
23489
23664
  sx: {
23490
23665
  border: 1,
@@ -23497,16 +23672,19 @@ var Textbook = function Textbook(_ref) {
23497
23672
  sx: {
23498
23673
  gap: "24px",
23499
23674
  flexDirection: "row",
23500
- alignItems: "center",
23501
- cursor: "pointer"
23675
+ alignItems: "center"
23502
23676
  }
23503
23677
  }, React__default.createElement("img", {
23504
23678
  style: {
23505
23679
  objectFit: "contain",
23506
- height: "100%"
23680
+ height: "100%",
23681
+ cursor: !isStudentSite ? "pointer" : undefined
23507
23682
  },
23508
23683
  width: 68,
23509
- src: textbook.coverImage
23684
+ src: textbook.coverImage,
23685
+ onClick: function onClick() {
23686
+ return !isStudentSite && handleOpenDetailDialog();
23687
+ }
23510
23688
  }), React__default.createElement(material.Stack, null, React__default.createElement(material.Stack, {
23511
23689
  flexDirection: "row"
23512
23690
  }, React__default.createElement(material.Typography, {
@@ -23516,7 +23694,16 @@ var Textbook = function Textbook(_ref) {
23516
23694
  }, t("test_name")), React__default.createElement(material.Typography, {
23517
23695
  fontSize: "14px",
23518
23696
  color: styles.gray_900,
23519
- fontWeight: 700
23697
+ fontWeight: 700,
23698
+ sx: _extends({}, !isStudentSite && {
23699
+ "&:hover": {
23700
+ color: styles.less_dark
23701
+ },
23702
+ cursor: "pointer"
23703
+ }),
23704
+ onClick: function onClick() {
23705
+ return !isStudentSite && handleOpenDetailDialog();
23706
+ }
23520
23707
  }, textbook.name)), React__default.createElement(material.Stack, {
23521
23708
  flexDirection: "row"
23522
23709
  }, React__default.createElement(material.Typography, {
@@ -23558,9 +23745,7 @@ var Textbook = function Textbook(_ref) {
23558
23745
  onClick: handleOpenDialog
23559
23746
  }, React__default.createElement(fa.FaBookOpen, {
23560
23747
  size: "20px"
23561
- }), t("test_start")), (isSuperAdmin || textbook.isShared && ((textbook === null || textbook === void 0 ? void 0 : (_textbook$createdBy = textbook.createdBy) === null || _textbook$createdBy === void 0 ? void 0 : _textbook$createdBy.id) === (user === null || user === void 0 ? void 0 : user.id) || textbook.textbookOwners.some(function (i) {
23562
- return i.id === (user === null || user === void 0 ? void 0 : user.id);
23563
- }))) && React__default.createElement(material.Button, {
23748
+ }), t("test_start")), isEditable && React__default.createElement(material.Button, {
23564
23749
  variant: "outlined",
23565
23750
  sx: {
23566
23751
  width: "fit-content",
@@ -25438,6 +25623,12 @@ var updateClassApi = function updateClassApi(id, model) {
25438
25623
  var deleteClassApi = function deleteClassApi(id) {
25439
25624
  return api["delete"](CLASS_URL + "/" + id);
25440
25625
  };
25626
+ var hiddenClassesApi = function hiddenClassesApi(hidden, classId) {
25627
+ return api.post(CLASS_URL + "/hidden", {
25628
+ hidden: hidden,
25629
+ courseIds: [classId]
25630
+ });
25631
+ };
25441
25632
  var addStudentToClass = function addStudentToClass(id, studentIds) {
25442
25633
  return api.post(CLASS_URL + "/" + id + "/students", studentIds);
25443
25634
  };
@@ -26971,6 +27162,27 @@ var useClassList = function useClassList(history, classCreateUrl, classUpdateUrl
26971
27162
  var handleUpdateClass = function handleUpdateClass(value) {
26972
27163
  value.id && classUpdateUrl && pushTo(history, "" + classUpdateUrl.replace(":id", "" + value.id));
26973
27164
  };
27165
+ var handleToggleHidden = function handleToggleHidden(e, classId) {
27166
+ try {
27167
+ var _temp5 = function _temp5() {
27168
+ dispatch(setLoading(false));
27169
+ };
27170
+ var checked = e.target.checked;
27171
+ dispatch(setLoading(true));
27172
+ var _temp4 = _catch(function () {
27173
+ return Promise.resolve(hiddenClassesApi(checked, classId)).then(function () {
27174
+ return Promise.resolve(getClassList()).then(function () {
27175
+ reactToastify.toast.success(t("update_data_successfully"));
27176
+ });
27177
+ });
27178
+ }, function (error) {
27179
+ reactToastify.toast.error(getErrorMessage(t, error));
27180
+ });
27181
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
27182
+ } catch (e) {
27183
+ return Promise.reject(e);
27184
+ }
27185
+ };
26974
27186
  var handleChangePage = function handleChangePage(_, page) {
26975
27187
  setClassFilter(_extends({}, classFilter, {
26976
27188
  currentPage: page
@@ -26996,7 +27208,8 @@ var useClassList = function useClassList(history, classCreateUrl, classUpdateUrl
26996
27208
  handleCreateClass: handleCreateClass,
26997
27209
  handleUpdateClass: handleUpdateClass,
26998
27210
  handleChangePage: handleChangePage,
26999
- handleDeleteClass: handleDeleteClass
27211
+ handleDeleteClass: handleDeleteClass,
27212
+ handleToggleHidden: handleToggleHidden
27000
27213
  };
27001
27214
  };
27002
27215
 
@@ -27009,7 +27222,15 @@ var ClassList = function ClassList(_ref) {
27009
27222
  var _state$common, _state$common$user;
27010
27223
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : (_state$common$user = _state$common.user) === null || _state$common$user === void 0 ? void 0 : _state$common$user.isSuperAdmin;
27011
27224
  });
27012
- var isAdmin = role === exports.Role.Admin;
27225
+ var isAdmin = reactRedux.useSelector(function (state) {
27226
+ var _state$common2, _state$common2$user, _state$common2$user$r;
27227
+ return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : (_state$common2$user = _state$common2.user) === null || _state$common2$user === void 0 ? void 0 : (_state$common2$user$r = _state$common2$user.roles) === null || _state$common2$user$r === void 0 ? void 0 : _state$common2$user$r.includes(exports.Role.Admin);
27228
+ });
27229
+ var isTeacher = reactRedux.useSelector(function (state) {
27230
+ var _state$common3, _state$common3$user, _state$common3$user$r;
27231
+ return state === null || state === void 0 ? void 0 : (_state$common3 = state.common) === null || _state$common3 === void 0 ? void 0 : (_state$common3$user = _state$common3.user) === null || _state$common3$user === void 0 ? void 0 : (_state$common3$user$r = _state$common3$user.roles) === null || _state$common3$user$r === void 0 ? void 0 : _state$common3$user$r.includes(exports.Role.Teacher);
27232
+ }) && !isAdmin;
27233
+ var isAdminSite = role === exports.Role.Admin;
27013
27234
  var _useClassList = useClassList(history, classCreateUrl, classUpdateUrl),
27014
27235
  t = _useClassList.t,
27015
27236
  paging = _useClassList.paging,
@@ -27024,7 +27245,11 @@ var ClassList = function ClassList(_ref) {
27024
27245
  handleCreateClass = _useClassList.handleCreateClass,
27025
27246
  handleUpdateClass = _useClassList.handleUpdateClass,
27026
27247
  handleChangePage = _useClassList.handleChangePage,
27027
- handleDeleteClass = _useClassList.handleDeleteClass;
27248
+ handleDeleteClass = _useClassList.handleDeleteClass,
27249
+ handleToggleHidden = _useClassList.handleToggleHidden;
27250
+ var headers = !isTeacher ? CLASS_HEADERS : [].concat(CLASS_HEADERS.slice(0, -1), [{
27251
+ title: "hidden"
27252
+ }], CLASS_HEADERS.slice(-1));
27028
27253
  return React__default.createElement(material.Box, null, React__default.createElement(material.Stack, {
27029
27254
  direction: "row",
27030
27255
  alignItems: "center",
@@ -27032,7 +27257,7 @@ var ClassList = function ClassList(_ref) {
27032
27257
  mb: 2
27033
27258
  }, React__default.createElement(material.Typography, {
27034
27259
  variant: "h4"
27035
- }, t("classes")), (isAdmin || isSuperAdmin) && React__default.createElement(MButton, {
27260
+ }, t("classes")), (isAdminSite || isSuperAdmin) && React__default.createElement(MButton, {
27036
27261
  variant: "contained",
27037
27262
  color: "inherit",
27038
27263
  startIcon: React__default.createElement(fa.FaPlus, {
@@ -27055,7 +27280,7 @@ var ClassList = function ClassList(_ref) {
27055
27280
  }), React__default.createElement(material.Grid, {
27056
27281
  item: true,
27057
27282
  xs: 12
27058
- }, React__default.createElement(material.TableContainer, null, React__default.createElement(Table, null, React__default.createElement(TableHead, null, React__default.createElement(TableRow, null, CLASS_HEADERS.map(function (i, index) {
27283
+ }, React__default.createElement(material.TableContainer, null, React__default.createElement(Table, null, React__default.createElement(TableHead, null, React__default.createElement(TableRow, null, headers.map(function (i, index) {
27059
27284
  return React__default.createElement(TableCell, {
27060
27285
  key: index,
27061
27286
  onClick: !!i.sortKey ? function () {
@@ -27072,7 +27297,13 @@ var ClassList = function ClassList(_ref) {
27072
27297
  key: i.id
27073
27298
  }, React__default.createElement(TableCell, null, (paging.page - 1) * paging.limit + index + 1), React__default.createElement(TableCell, {
27074
27299
  className: "text-nowrap"
27075
- }, i.name), React__default.createElement(TableCell, null, toLocalTime(i.startDate, t("date_format"))), React__default.createElement(TableCell, null, toLocalTime(i.endDate, t("date_format"))), React__default.createElement(TableCell, null, i.totalStudents), React__default.createElement(TableCell, null, i.totalTeachers), React__default.createElement(TableCell, null, i.totalLessons), React__default.createElement(TableCell, null, (isAdmin || isSuperAdmin) && React__default.createElement("div", {
27300
+ }, i.name), React__default.createElement(TableCell, null, toLocalTime(i.startDate, t("date_format"))), React__default.createElement(TableCell, null, toLocalTime(i.endDate, t("date_format"))), React__default.createElement(TableCell, null, i.totalStudents), React__default.createElement(TableCell, null, i.totalTeachers), React__default.createElement(TableCell, null, i.totalLessons), isTeacher && React__default.createElement(TableCell, null, React__default.createElement(material.Switch, {
27301
+ checked: i.hidden,
27302
+ onChange: function onChange(e) {
27303
+ var _i$id;
27304
+ return handleToggleHidden(e, (_i$id = i.id) != null ? _i$id : 0);
27305
+ }
27306
+ })), React__default.createElement(TableCell, null, (isAdminSite || isSuperAdmin) && React__default.createElement("div", {
27076
27307
  className: "d-flex"
27077
27308
  }, React__default.createElement(material.IconButton, {
27078
27309
  color: "default",
@@ -27090,7 +27321,7 @@ var ClassList = function ClassList(_ref) {
27090
27321
  }
27091
27322
  }, React__default.createElement(fa6.FaTrashCan, {
27092
27323
  size: 12
27093
- }))), !(isAdmin || isSuperAdmin) && React__default.createElement(material.IconButton, {
27324
+ }))), !(isAdminSite || isSuperAdmin) && React__default.createElement(material.IconButton, {
27094
27325
  color: "default",
27095
27326
  className: "bg-primary text-white me-1",
27096
27327
  onClick: function onClick() {
@@ -28469,10 +28700,10 @@ var RecentUserActionDialog = function RecentUserActionDialog(_ref) {
28469
28700
  }
28470
28701
  }, t(i.title)));
28471
28702
  }))), React__default.createElement(material.TableBody, null, recentUserActions === null || recentUserActions === void 0 ? void 0 : recentUserActions.map(function (i, index) {
28472
- var _i$targetUser, _i$targetUser2;
28703
+ var _i$targetUser, _i$targetUser2, _RecentUserActionName, _RecentUserActionName2;
28473
28704
  return React__default.createElement(material.TableRow, {
28474
28705
  key: i.id
28475
- }, React__default.createElement(material.TableCell, null, index + 1), React__default.createElement(material.TableCell, null, ((_i$targetUser = i.targetUser) === null || _i$targetUser === void 0 ? void 0 : _i$targetUser.fullName) || ''), React__default.createElement(material.TableCell, null, formatRole((_i$targetUser2 = i.targetUser) === null || _i$targetUser2 === void 0 ? void 0 : _i$targetUser2.roles, t)), React__default.createElement(material.TableCell, null, t(RecentUserActionNames[i.action] || '')), React__default.createElement(material.TableCell, null, utcToLocalTime(i.createdAt, t("date_time_format"))));
28706
+ }, React__default.createElement(material.TableCell, null, index + 1), React__default.createElement(material.TableCell, null, ((_i$targetUser = i.targetUser) === null || _i$targetUser === void 0 ? void 0 : _i$targetUser.fullName) || ''), React__default.createElement(material.TableCell, null, formatRole((_i$targetUser2 = i.targetUser) === null || _i$targetUser2 === void 0 ? void 0 : _i$targetUser2.roles, t)), React__default.createElement(material.TableCell, null, t(((_RecentUserActionName = RecentUserActionNames[i.action]) === null || _RecentUserActionName === void 0 ? void 0 : (_RecentUserActionName2 = _RecentUserActionName.toLowerCase) === null || _RecentUserActionName2 === void 0 ? void 0 : _RecentUserActionName2.call(_RecentUserActionName)) || '')), React__default.createElement(material.TableCell, null, utcToLocalTime(i.createdAt, t("date_time_format"))));
28476
28707
  }), !(recentUserActions !== null && recentUserActions !== void 0 && recentUserActions.length) && React__default.createElement(material.TableRow, null, React__default.createElement(material.TableCell, {
28477
28708
  sx: {
28478
28709
  textAlign: 'center'
@@ -32451,16 +32682,18 @@ var TypeNotificationEnum;
32451
32682
  TypeNotificationEnum[TypeNotificationEnum["Class"] = 2] = "Class";
32452
32683
  TypeNotificationEnum[TypeNotificationEnum["Student"] = 3] = "Student";
32453
32684
  })(TypeNotificationEnum || (TypeNotificationEnum = {}));
32454
- var optionTypeNotification = [{
32455
- value: TypeNotificationEnum.Academy,
32456
- label: "Academy"
32457
- }, {
32458
- value: TypeNotificationEnum.Class,
32459
- label: "Class"
32460
- }, {
32461
- value: TypeNotificationEnum.Student,
32462
- label: "Student"
32463
- }];
32685
+ var optionTypeNotification = function optionTypeNotification(t) {
32686
+ return [{
32687
+ value: TypeNotificationEnum.Academy,
32688
+ label: t("academy")
32689
+ }, {
32690
+ value: TypeNotificationEnum.Class,
32691
+ label: t("class")
32692
+ }, {
32693
+ value: TypeNotificationEnum.Student,
32694
+ label: t("student")
32695
+ }];
32696
+ };
32464
32697
  var NotificationSortBy;
32465
32698
  (function (NotificationSortBy) {
32466
32699
  NotificationSortBy["CreatedAt"] = "CreatedAt";
@@ -32476,7 +32709,7 @@ var OrderBy$2;
32476
32709
  var NOTIFICATION_HEADERS = [{
32477
32710
  title: "#"
32478
32711
  }, {
32479
- title: "name",
32712
+ title: "notification_title",
32480
32713
  sortKey: NotificationSortBy.Name
32481
32714
  }, {
32482
32715
  title: "type",
@@ -32690,6 +32923,10 @@ var NotificationForm = function NotificationForm(_ref) {
32690
32923
  formikProp.setValues(_extends({}, DEFAULT_NOTIFICATION_REQUEST));
32691
32924
  }
32692
32925
  }, [JSON.stringify(data)]);
32926
+ var optionTypes = optionTypeNotification(t);
32927
+ var notificationTypes = isAdmin ? optionTypes : optionTypes.filter(function (i) {
32928
+ return i.value !== TypeNotificationEnum.Academy;
32929
+ });
32693
32930
  return React__default.createElement("div", {
32694
32931
  className: "d-flex flex-column"
32695
32932
  }, React__default.createElement(material.Grid, {
@@ -32704,14 +32941,14 @@ var NotificationForm = function NotificationForm(_ref) {
32704
32941
  }, React__default.createElement(material.FormGroup, null, React__default.createElement(material.FormLabel, {
32705
32942
  className: "mb-2 fw-bold",
32706
32943
  htmlFor: "class_name"
32707
- }, t("name"), " ", React__default.createElement("span", {
32944
+ }, t("notification_title"), " ", React__default.createElement("span", {
32708
32945
  className: "text-danger"
32709
32946
  }, "*")), React__default.createElement(InputText, {
32710
32947
  id: "name",
32711
32948
  disabled: !isAdmin && (!!id && !(data !== null && data !== void 0 && data.isOwned) || isTeacherAdmin),
32712
32949
  value: formikProp.values.name,
32713
32950
  onChange: handleChangeClassTitle,
32714
- placeholder: t("name")
32951
+ placeholder: t("notification_title")
32715
32952
  }), formikProp.touched.name && formikProp.errors.name ? React__default.createElement("div", {
32716
32953
  className: "mt-1"
32717
32954
  }, React__default.createElement(ErrorHandler, {
@@ -32746,9 +32983,7 @@ var NotificationForm = function NotificationForm(_ref) {
32746
32983
  className: "" + styles$9["teacher-selector-wrapper"]
32747
32984
  }, React__default.createElement(TypeSelector, {
32748
32985
  disabled: !isAdmin && (!!id && !(data !== null && data !== void 0 && data.isOwned) || isTeacherAdmin),
32749
- optionTypeNotification: isAdmin ? optionTypeNotification : optionTypeNotification.filter(function (i) {
32750
- return i.value !== TypeNotificationEnum.Academy;
32751
- }),
32986
+ optionTypeNotification: notificationTypes,
32752
32987
  value: formikProp.values.type,
32753
32988
  onChange: handleChangeType
32754
32989
  }), formikProp.touched.type && formikProp.errors.type ? React__default.createElement("div", {
@@ -33043,6 +33278,10 @@ var NotificationList = function NotificationList(_ref) {
33043
33278
  handleDeleteNotification = _useNotificationList.handleDeleteNotification,
33044
33279
  onChangeFilterType = _useNotificationList.onChangeFilterType;
33045
33280
  var Wrapper = as || Container;
33281
+ var optionTypes = optionTypeNotification(t);
33282
+ var notificationTypes = isAdmin ? optionTypes : optionTypes.filter(function (i) {
33283
+ return i.value !== TypeNotificationEnum.Academy;
33284
+ });
33046
33285
  return React__default.createElement(Wrapper, {
33047
33286
  maxWidth: "xl",
33048
33287
  className: "bg-white pt-5 p-4 rounded-4 " + className
@@ -33083,9 +33322,7 @@ var NotificationList = function NotificationList(_ref) {
33083
33322
  item: true,
33084
33323
  xs: 6
33085
33324
  }, React__default.createElement(SelectFilterType, {
33086
- optionTypeNotification: isAdmin ? optionTypeNotification : optionTypeNotification.filter(function (i) {
33087
- return i.value !== TypeNotificationEnum.Academy;
33088
- }),
33325
+ optionTypeNotification: notificationTypes,
33089
33326
  value: notificationFilter.type,
33090
33327
  onChange: onChangeFilterType
33091
33328
  })))), React__default.createElement(material.Grid, {
@@ -38186,6 +38423,7 @@ var Header = function Header(_ref) {
38186
38423
  }, [isTeacherSide, language]);
38187
38424
  return React__default.createElement(material.Stack, {
38188
38425
  width: "100%",
38426
+ height: "78px",
38189
38427
  display: "flex",
38190
38428
  flexDirection: "row",
38191
38429
  gap: {