touchstudy-core 0.1.175 → 0.1.176

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.
@@ -18,7 +18,7 @@ import moment from 'moment';
18
18
  export { default as moment } from 'moment';
19
19
  import { FaSave, FaCaretDown, FaTimes, FaTrash, FaSortUp, FaSortDown, FaPlusCircle, FaEye, FaPlus, FaCalendar, FaUser, FaBookOpen, FaUpload, FaPencilAlt, FaCheckCircle, FaShare, FaExchangeAlt, FaBell } from 'react-icons/fa';
20
20
  import { IoMdArrowBack, IoMdSync, IoIosAlert, IoIosArrowDown, IoIosSearch, IoIosArrowUp, IoIosAdd, IoMdAdd } from 'react-icons/io';
21
- import { IoClose, IoSearch, IoCloseOutline, IoTime, IoChevronUp, IoChevronDown, IoChatbubbleEllipsesSharp, IoPrint, IoCheckmarkCircle, IoChevronUpOutline, IoChevronDownOutline, IoReceiptSharp, IoBook, IoWarning, IoCalendarClear, IoPerson, IoInformationCircle, IoTrash, IoAddCircle, IoCloseCircle, IoLogOut } from 'react-icons/io5';
21
+ import { IoClose, IoSearch, IoCloseOutline, IoTime, IoChevronUp, IoChevronDown, IoChatbubbleEllipsesSharp, IoPrint, IoCheckmarkCircle, IoChevronUpOutline, IoChevronDownOutline, IoReceiptSharp, IoBook, IoWarning, IoCalendarClear, IoPerson, IoInformationCircle, IoTrash, IoAddCircle, IoCheckmark, IoCloseCircle, IoLogOut, IoPlayCircleSharp, IoTimer } from 'react-icons/io5';
22
22
  import MButton from '@mui/material/Button';
23
23
  import DialogTitle$1 from '@mui/material/DialogTitle';
24
24
  import DialogContent$1 from '@mui/material/DialogContent';
@@ -48,7 +48,7 @@ import CardMedia from '@mui/material/CardMedia';
48
48
  import { object, string, number, date as date$2, array, mixed } from 'yup';
49
49
  import { blue, grey as grey$1, yellow as yellow$1 } from '@mui/material/colors';
50
50
  import { GoogleReCaptcha, GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';
51
- import { MdVisibilityOff, MdVisibility, MdAutorenew, MdMoreHoriz, MdDownload, MdExpandMore } from 'react-icons/md';
51
+ import { MdVisibilityOff, MdVisibility, MdAutorenew, MdMoreHoriz, MdDownload, MdExpandMore, MdError } from 'react-icons/md';
52
52
  import { gapi } from 'gapi-script';
53
53
  import Pusher from 'pusher-js/with-encryption';
54
54
  import { BiSolidError } from 'react-icons/bi';
@@ -73,6 +73,7 @@ import { useForm } from 'react-hook-form';
73
73
  import { yupResolver } from '@hookform/resolvers/yup';
74
74
  import { PiDotsNineLight } from 'react-icons/pi';
75
75
  import Container$1 from '@mui/material/Container';
76
+ import { AiOutlineLoading3Quarters } from 'react-icons/ai';
76
77
  import { BsCheckAll } from 'react-icons/bs';
77
78
  import Popover$1 from '@mui/material/Popover';
78
79
  import MenuItem from '@mui/material/MenuItem';
@@ -540,6 +541,7 @@ var teacher_in_charge = "담당 교사";
540
541
  var counselor = "상담교사";
541
542
  var new_question = "새로운 질문";
542
543
  var hour = "시간";
544
+ var hour_h = "시간";
543
545
  var minute = "분";
544
546
  var second = "두번째";
545
547
  var question_order = "{{number}} 번";
@@ -1033,6 +1035,7 @@ var teacher_required = "선생님은 필수입니다";
1033
1035
  var total_users = "총 사용자";
1034
1036
  var added_date = "추가된 날짜";
1035
1037
  var sync_exam_results = "시험 결과 동기화";
1038
+ var sync_textbook_results = "교재 결과 동기화";
1036
1039
  var update_data_fail = "데이터 업데이트 실패";
1037
1040
  var add_students_to_class = "수업에 학생 추가";
1038
1041
  var add_teachers_to_class = "수업에 교사 추가";
@@ -1043,9 +1046,13 @@ var question_management = "질문 관리";
1043
1046
  var student_data = "학생 데이터";
1044
1047
  var problem_number_question_chart = "문제 {{number}}번";
1045
1048
  var are_you_sure_to_sync_exam_results_to_academy = "시험 결과를 아카데미 {{ academyName }}에 동기화하시겠습니까(백그라운드에서 실행되며 시간이 다소 소요됨)";
1049
+ var are_you_sure_to_sync_textbook_results_to_academy = "교재 학습 결과를 아카데미 {{ academyName }}에 동기화하시겠습니까? (백그라운드에서 실행되며 시간이 다소 소요됨)";
1046
1050
  var messages = {
1047
- exam_sessions_are_being_synchronized: "{{ total }} 개의 시험 세션이 동기화되고 있습니다"
1051
+ exam_sessions_are_being_synchronized: "{{ total }} 개의 시험 세션이 동기화되고 있습니다",
1052
+ textbook_sessions_are_being_synchronized: "{{ total }} 개의 교재 학습 세션이 동기화되고 있습니다"
1048
1053
  };
1054
+ var sync_exam = "시험 동기화";
1055
+ var sync_textbook = "교재 동기화";
1049
1056
  var submit = "제출하다";
1050
1057
  var must_select_a_teacher_first = "먼저 교사를 선택해야 합니다";
1051
1058
  var student_grade_is_invalid = "학생 등급은 1에서 12 사이여야 합니다";
@@ -1109,6 +1116,7 @@ var academy_invite_detail = "아카데미 초대 세부정보";
1109
1116
  var are_you_sure_to_delete_academy_invite = "이 아카데미 초대를 삭제하시겠습니까?";
1110
1117
  var day = "낮";
1111
1118
  var days = "날";
1119
+ var month = "월";
1112
1120
  var emails = "이메일";
1113
1121
  var is_accepted = "승인됨";
1114
1122
  var re_send = "다시 보내기";
@@ -1492,6 +1500,8 @@ var order_matters = "순서 상관 있음";
1492
1500
  var order_does_not_matter = "순서 상관 없음";
1493
1501
  var synonym_processing = "답 이음동의어 처리";
1494
1502
  var compare_type = "비교 유형";
1503
+ var all_changes_saved = "모든 변경 사항이 저장되었습니다";
1504
+ var saving = "절약";
1495
1505
  var textbook_name = "교재 이름";
1496
1506
  var korean_language = "국어";
1497
1507
  var answer_cannot_be_empty = "답변은 비워둘 수 없습니다";
@@ -1538,6 +1548,13 @@ var admin_to_teachers = "관리자에서 교사들에게";
1538
1548
  var teacher_to_teachers = "교사에서 교사들에게";
1539
1549
  var student_required = "학생은 필수입니다";
1540
1550
  var teachers_required = "교사가 필요합니다";
1551
+ var all_changes_are_not_saved_yet = "아직 모든 변경 사항이 저장되지 않았습니다";
1552
+ var pause = "일시정지";
1553
+ var press_to_start = "눌러서 시작하기";
1554
+ var study_timer = "순공 타이머";
1555
+ var show_timer = "타이머 표시";
1556
+ var failed_to_pause_the_subject_name = "과목 '{{name}}'를 일시 중지하는 데 실패했습니다";
1557
+ var failed_to_start_the_subject_name = "과목 '{{name}}'를 시작하는 데 실패했습니다";
1541
1558
  var lang_ko = {
1542
1559
  problem_solving: problem_solving,
1543
1560
  my_story: my_story,
@@ -1729,6 +1746,7 @@ var lang_ko = {
1729
1746
  counselor: counselor,
1730
1747
  new_question: new_question,
1731
1748
  hour: hour,
1749
+ hour_h: hour_h,
1732
1750
  minute: minute,
1733
1751
  second: second,
1734
1752
  question_order: question_order,
@@ -2217,6 +2235,7 @@ var lang_ko = {
2217
2235
  total_users: total_users,
2218
2236
  added_date: added_date,
2219
2237
  sync_exam_results: sync_exam_results,
2238
+ sync_textbook_results: sync_textbook_results,
2220
2239
  update_data_fail: update_data_fail,
2221
2240
  add_students_to_class: add_students_to_class,
2222
2241
  add_teachers_to_class: add_teachers_to_class,
@@ -2227,7 +2246,10 @@ var lang_ko = {
2227
2246
  student_data: student_data,
2228
2247
  problem_number_question_chart: problem_number_question_chart,
2229
2248
  are_you_sure_to_sync_exam_results_to_academy: are_you_sure_to_sync_exam_results_to_academy,
2249
+ are_you_sure_to_sync_textbook_results_to_academy: are_you_sure_to_sync_textbook_results_to_academy,
2230
2250
  messages: messages,
2251
+ sync_exam: sync_exam,
2252
+ sync_textbook: sync_textbook,
2231
2253
  submit: submit,
2232
2254
  must_select_a_teacher_first: must_select_a_teacher_first,
2233
2255
  student_grade_is_invalid: student_grade_is_invalid,
@@ -2291,6 +2313,7 @@ var lang_ko = {
2291
2313
  are_you_sure_to_delete_academy_invite: are_you_sure_to_delete_academy_invite,
2292
2314
  day: day,
2293
2315
  days: days,
2316
+ month: month,
2294
2317
  emails: emails,
2295
2318
  is_accepted: is_accepted,
2296
2319
  re_send: re_send,
@@ -2662,6 +2685,8 @@ var lang_ko = {
2662
2685
  order_does_not_matter: order_does_not_matter,
2663
2686
  synonym_processing: synonym_processing,
2664
2687
  compare_type: compare_type,
2688
+ all_changes_saved: all_changes_saved,
2689
+ saving: saving,
2665
2690
  textbook_name: textbook_name,
2666
2691
  korean_language: korean_language,
2667
2692
  answer_cannot_be_empty: answer_cannot_be_empty,
@@ -2707,7 +2732,14 @@ var lang_ko = {
2707
2732
  admin_to_teachers: admin_to_teachers,
2708
2733
  teacher_to_teachers: teacher_to_teachers,
2709
2734
  student_required: student_required,
2710
- teachers_required: teachers_required
2735
+ teachers_required: teachers_required,
2736
+ all_changes_are_not_saved_yet: all_changes_are_not_saved_yet,
2737
+ pause: pause,
2738
+ press_to_start: press_to_start,
2739
+ study_timer: study_timer,
2740
+ show_timer: show_timer,
2741
+ failed_to_pause_the_subject_name: failed_to_pause_the_subject_name,
2742
+ failed_to_start_the_subject_name: failed_to_start_the_subject_name
2711
2743
  };
2712
2744
 
2713
2745
  var problem_solving$1 = "Problem Solving";
@@ -2926,6 +2958,7 @@ var counselor$1 = "Counselor";
2926
2958
  var new_question$1 = "New Question";
2927
2959
  var hour$1 = "hr";
2928
2960
  var hours = "hrs";
2961
+ var hour_h$1 = "h";
2929
2962
  var minute$1 = "min";
2930
2963
  var second$1 = "second";
2931
2964
  var question_order$1 = "Number {{number}}";
@@ -3394,6 +3427,7 @@ var teacher_required$1 = "Teacher is required";
3394
3427
  var total_users$1 = "Total users";
3395
3428
  var added_date$1 = "Added date";
3396
3429
  var sync_exam_results$1 = "Sync exam results";
3430
+ var sync_textbook_results$1 = "Sync textbook results";
3397
3431
  var update_data_fail$1 = "Update data fail";
3398
3432
  var add_students_to_class$1 = "Add students to class";
3399
3433
  var add_teachers_to_class$1 = "Add teachers to class";
@@ -3404,9 +3438,13 @@ var question_management$1 = "Question Management";
3404
3438
  var student_data$1 = "Student Data";
3405
3439
  var problem_number_question_chart$1 = "Q. {{number}}";
3406
3440
  var are_you_sure_to_sync_exam_results_to_academy$1 = "Are you sure to sync exam results to academy \"{{ academyName }}\" (it will run in the background and take a while)";
3441
+ var are_you_sure_to_sync_textbook_results_to_academy$1 = "Are you sure to sync textbook results to academy \"{{ academyName }}\" (it will run in the background and take a while)";
3407
3442
  var messages$1 = {
3408
- exam_sessions_are_being_synchronized: "{{ total }} exam sessions are being synchronized"
3443
+ exam_sessions_are_being_synchronized: "{{ total }} exam sessions are being synchronized",
3444
+ textbook_sessions_are_being_synchronized: "{{ total }} textbook sessions are being synchronized"
3409
3445
  };
3446
+ var sync_exam$1 = "Sync Exam";
3447
+ var sync_textbook$1 = "Sync Textbook";
3410
3448
  var submit$1 = "Submit";
3411
3449
  var must_select_a_teacher_first$1 = "Must select a teacher first";
3412
3450
  var student_grade_is_invalid$1 = "Student grade must be from 1 to 12";
@@ -3470,6 +3508,7 @@ var academy_invite_detail$1 = "Academy Invite Detail";
3470
3508
  var are_you_sure_to_delete_academy_invite$1 = "Are you sure to delete this academy invite?";
3471
3509
  var day$1 = "day";
3472
3510
  var days$1 = "days";
3511
+ var month$1 = "month";
3473
3512
  var emails$1 = "Emails";
3474
3513
  var is_accepted$1 = "Is Accepted";
3475
3514
  var re_send$1 = "Resend";
@@ -3854,6 +3893,8 @@ var order_matters$1 = "Order matters";
3854
3893
  var order_does_not_matter$1 = "Order doesn't matter";
3855
3894
  var synonym_processing$1 = "Answer Synonym processing";
3856
3895
  var compare_type$1 = "Compare Type";
3896
+ var all_changes_saved$1 = "All changes saved";
3897
+ var saving$1 = "Saving";
3857
3898
  var textbook_name$1 = "Textbook name";
3858
3899
  var korean_language$1 = "Korean";
3859
3900
  var answer_cannot_be_empty$1 = "Answer cannot be empty";
@@ -3900,6 +3941,13 @@ var admin_to_teachers$1 = "Admin to teachers";
3900
3941
  var teacher_to_teachers$1 = "Teacher to teachers";
3901
3942
  var student_required$1 = "Student is required";
3902
3943
  var teachers_required$1 = "Teachers are required";
3944
+ var all_changes_are_not_saved_yet$1 = "All changes are not saved yet";
3945
+ var pause$1 = "Pause";
3946
+ var press_to_start$1 = "Press to start";
3947
+ var study_timer$1 = "Focused Study Timer";
3948
+ var show_timer$1 = "Show timer";
3949
+ var failed_to_pause_the_subject_name$1 = "Failed to pause the subject '{{name}}'";
3950
+ var failed_to_start_the_subject_name$1 = "Failed to start the subject '{{name}}'";
3903
3951
  var lang_en = {
3904
3952
  problem_solving: problem_solving$1,
3905
3953
  my_story: my_story$1,
@@ -4117,6 +4165,7 @@ var lang_en = {
4117
4165
  new_question: new_question$1,
4118
4166
  hour: hour$1,
4119
4167
  hours: hours,
4168
+ hour_h: hour_h$1,
4120
4169
  minute: minute$1,
4121
4170
  second: second$1,
4122
4171
  question_order: question_order$1,
@@ -4580,6 +4629,7 @@ var lang_en = {
4580
4629
  total_users: total_users$1,
4581
4630
  added_date: added_date$1,
4582
4631
  sync_exam_results: sync_exam_results$1,
4632
+ sync_textbook_results: sync_textbook_results$1,
4583
4633
  update_data_fail: update_data_fail$1,
4584
4634
  add_students_to_class: add_students_to_class$1,
4585
4635
  add_teachers_to_class: add_teachers_to_class$1,
@@ -4590,7 +4640,10 @@ var lang_en = {
4590
4640
  student_data: student_data$1,
4591
4641
  problem_number_question_chart: problem_number_question_chart$1,
4592
4642
  are_you_sure_to_sync_exam_results_to_academy: are_you_sure_to_sync_exam_results_to_academy$1,
4643
+ are_you_sure_to_sync_textbook_results_to_academy: are_you_sure_to_sync_textbook_results_to_academy$1,
4593
4644
  messages: messages$1,
4645
+ sync_exam: sync_exam$1,
4646
+ sync_textbook: sync_textbook$1,
4594
4647
  submit: submit$1,
4595
4648
  must_select_a_teacher_first: must_select_a_teacher_first$1,
4596
4649
  student_grade_is_invalid: student_grade_is_invalid$1,
@@ -4654,6 +4707,7 @@ var lang_en = {
4654
4707
  are_you_sure_to_delete_academy_invite: are_you_sure_to_delete_academy_invite$1,
4655
4708
  day: day$1,
4656
4709
  days: days$1,
4710
+ month: month$1,
4657
4711
  emails: emails$1,
4658
4712
  is_accepted: is_accepted$1,
4659
4713
  re_send: re_send$1,
@@ -5026,6 +5080,8 @@ var lang_en = {
5026
5080
  order_does_not_matter: order_does_not_matter$1,
5027
5081
  synonym_processing: synonym_processing$1,
5028
5082
  compare_type: compare_type$1,
5083
+ all_changes_saved: all_changes_saved$1,
5084
+ saving: saving$1,
5029
5085
  textbook_name: textbook_name$1,
5030
5086
  korean_language: korean_language$1,
5031
5087
  answer_cannot_be_empty: answer_cannot_be_empty$1,
@@ -5071,7 +5127,14 @@ var lang_en = {
5071
5127
  admin_to_teachers: admin_to_teachers$1,
5072
5128
  teacher_to_teachers: teacher_to_teachers$1,
5073
5129
  student_required: student_required$1,
5074
- teachers_required: teachers_required$1
5130
+ teachers_required: teachers_required$1,
5131
+ all_changes_are_not_saved_yet: all_changes_are_not_saved_yet$1,
5132
+ pause: pause$1,
5133
+ press_to_start: press_to_start$1,
5134
+ study_timer: study_timer$1,
5135
+ show_timer: show_timer$1,
5136
+ failed_to_pause_the_subject_name: failed_to_pause_the_subject_name$1,
5137
+ failed_to_start_the_subject_name: failed_to_start_the_subject_name$1
5075
5138
  };
5076
5139
 
5077
5140
  i18n.use(initReactI18next).init({
@@ -5529,7 +5592,7 @@ var PrintExamView2 = function PrintExamView2(_ref) {
5529
5592
  }, t("print_pdf"))));
5530
5593
  };
5531
5594
 
5532
- var styles = {"lighter":"#F0FFF6","light":"#89F0B2","less_dark":"#3DC674","dark":"#349056","darker":"#18442A","gray_50":"#FBFBF9","gray_100":"#EAEAE5","gray_300":"#D0D0C8","gray_500":"#9A9A98","gray_700":"#5D5D5B","gray_900":"#363634","red_900":"#DB4D4D","green_support_900":"#3ACB46","yellow_900":"#FEAF06","purple_900":"#C3099A","btn-login-google":"_2HqmH","math-jax":"_3Pfdk","block-login":"_wWIyO","box-login":"_38Lo1","btn-primary":"_rd4Uy","dropdown-menu":"_1krbH","header-avatar":"_RQaHE","dropdown-menu-flag":"_XK8oS","dropdown-content":"_3ys4W","dropdown-change":"_ToOW_","item-address":"_3sQlR","item-logout":"_3bqSM","title-address":"_1jgSI","img-avatar":"_35Ttz","item-contact":"_1wc7o","content-text":"_3S4f2","dropdown-content-language":"_3ajui","dropdown-item-language":"_3Y_y4","dropdown-item-language-active":"_CzNMi","dropdown-academy":"_3CMVp","image-academy":"_2ibYC","academy-btn":"_1JMRU","switch-icon":"_N4FNf","dropdown-content-academy":"_31Dr0","dropdown-academy-item":"_3bjcz","noGutters":"_31ZQk","custom-col-2":"_3yXyK","custom-col-3":"_1RsJQ","custom-col-5":"_L42CP","custom-col-10":"_2u6eL","custom-row":"_8x7OP","custom-col":"_1JmTh","custom-col-4":"_3HO1e","custom-col-8":"_Oy31M","custom-col-12":"_3aUKo","custom-container":"_39LRs","form-label":"__Ut-u","form-control":"_2k4dX","btn-outline-primary":"_2PWdX","sort-icons":"_mQvLF","active":"_3oAH-","form-select":"_3W3aw","truncate":"_3NJzN","headers":"_3xnI5","logo-container":"_3YG70","tabBox":"_1CQPn","routerBox":"_3hx2T","tabText":"_3UyhW","router-link-active":"_1TGKA","router-link":"_1AqMh","userImg":"_2RI6G","disabled-link":"_3aVHg","line-clamp":"_3fpky"};
5595
+ var styles = {"lighter":"#F0FFF6","light":"#89F0B2","less_dark":"#3DC674","dark":"#349056","darker":"#18442A","gray_50":"#FBFBF9","gray_100":"#EAEAE5","gray_300":"#D0D0C8","gray_500":"#9A9A98","gray_700":"#5D5D5B","gray_900":"#363634","red_900":"#DB4D4D","green_support_900":"#3ACB46","yellow_900":"#FEAF06","purple_900":"#C3099A","btn-login-google":"_2HqmH","math-jax":"_3Pfdk","block-login":"_wWIyO","box-login":"_38Lo1","btn-primary":"_rd4Uy","dropdown-menu":"_1krbH","header-avatar":"_RQaHE","dropdown-menu-flag":"_XK8oS","dropdown-content":"_3ys4W","dropdown-change":"_ToOW_","item-address":"_3sQlR","item-logout":"_3bqSM","title-address":"_1jgSI","img-avatar":"_35Ttz","item-contact":"_1wc7o","content-text":"_3S4f2","dropdown-content-language":"_3ajui","dropdown-item-language":"_3Y_y4","dropdown-item-language-active":"_CzNMi","dropdown-academy":"_3CMVp","image-academy":"_2ibYC","academy-btn":"_1JMRU","switch-icon":"_N4FNf","dropdown-content-academy":"_31Dr0","dropdown-academy-item":"_3bjcz","noGutters":"_31ZQk","custom-col-2":"_3yXyK","custom-col-3":"_1RsJQ","custom-col-5":"_L42CP","custom-col-10":"_2u6eL","custom-row":"_8x7OP","custom-col":"_1JmTh","custom-col-4":"_3HO1e","custom-col-8":"_Oy31M","custom-col-12":"_3aUKo","custom-container":"_39LRs","form-label":"__Ut-u","form-control":"_2k4dX","btn-outline-primary":"_2PWdX","sort-icons":"_mQvLF","active":"_3oAH-","form-select":"_3W3aw","truncate":"_3NJzN","headers":"_3xnI5","logo-container":"_3YG70","tabBox":"_1CQPn","routerBox":"_3hx2T","tabText":"_3UyhW","router-link-active":"_1TGKA","router-link":"_1AqMh","userImg":"_2RI6G","disabled-link":"_3aVHg","line-clamp":"_3fpky","timer-menu":"_3bvVg","timer-menu-item":"_z624V","subject-name":"_2KJX4","duration":"_1mwlk","icon-start":"_maff_"};
5533
5596
 
5534
5597
  var config = {
5535
5598
  loader: {
@@ -6278,6 +6341,12 @@ var TextbookEditorType;
6278
6341
  TextbookEditorType[TextbookEditorType["Korea"] = 1] = "Korea";
6279
6342
  TextbookEditorType[TextbookEditorType["Math"] = 2] = "Math";
6280
6343
  })(TextbookEditorType || (TextbookEditorType = {}));
6344
+ var PrintStatus;
6345
+ (function (PrintStatus) {
6346
+ PrintStatus[PrintStatus["Idle"] = 0] = "Idle";
6347
+ PrintStatus[PrintStatus["Saving"] = 1] = "Saving";
6348
+ PrintStatus[PrintStatus["Saved"] = 2] = "Saved";
6349
+ })(PrintStatus || (PrintStatus = {}));
6281
6350
 
6282
6351
  var SchoolType$1;
6283
6352
  (function (SchoolType) {
@@ -6287,6 +6356,13 @@ var SchoolType$1;
6287
6356
  SchoolType[SchoolType["High"] = 3] = "High";
6288
6357
  })(SchoolType$1 || (SchoolType$1 = {}));
6289
6358
 
6359
+ var SubjectTimerStatus;
6360
+ (function (SubjectTimerStatus) {
6361
+ SubjectTimerStatus[SubjectTimerStatus["NotStarted"] = 0] = "NotStarted";
6362
+ SubjectTimerStatus[SubjectTimerStatus["Started"] = 1] = "Started";
6363
+ SubjectTimerStatus[SubjectTimerStatus["Paused"] = 2] = "Paused";
6364
+ })(SubjectTimerStatus || (SubjectTimerStatus = {}));
6365
+
6290
6366
  var canAccess = function canAccess(userRoles, componentRoles) {
6291
6367
  if (!Array.isArray(userRoles)) {
6292
6368
  return false;
@@ -6536,6 +6612,11 @@ var getRemainTime = function getRemainTime(startTime, duration) {
6536
6612
  if (timePass > durationInNumber) return 0;
6537
6613
  return durationInNumber - timePass;
6538
6614
  };
6615
+ var getCountTime = function getCountTime(startTime, duration) {
6616
+ var timePass = diffFromNow(startTime, "second");
6617
+ if (typeof timePass !== "number") return null;
6618
+ return duration + timePass;
6619
+ };
6539
6620
 
6540
6621
  var formatDateTime = function formatDateTime(inputDate) {
6541
6622
  var date = new Date(inputDate);
@@ -8262,6 +8343,27 @@ var getSubjectListApi = function getSubjectListApi(textSearch) {
8262
8343
  return Promise.reject(e);
8263
8344
  }
8264
8345
  };
8346
+ var getStudentSubjectListApi = function getStudentSubjectListApi() {
8347
+ try {
8348
+ return Promise.resolve(api.get(SUBJECT_URL + "/timers"));
8349
+ } catch (e) {
8350
+ return Promise.reject(e);
8351
+ }
8352
+ };
8353
+ var startStudentSubjectTimerApi = function startStudentSubjectTimerApi(subjectId) {
8354
+ try {
8355
+ return Promise.resolve(api.post(SUBJECT_URL + "/" + subjectId + "/timers"));
8356
+ } catch (e) {
8357
+ return Promise.reject(e);
8358
+ }
8359
+ };
8360
+ var pauseStudentSubjectApi = function pauseStudentSubjectApi(subjectId, recordId, data) {
8361
+ try {
8362
+ return Promise.resolve(api.post(SUBJECT_URL + "/" + subjectId + "/timers/" + recordId, data));
8363
+ } catch (e) {
8364
+ return Promise.reject(e);
8365
+ }
8366
+ };
8265
8367
 
8266
8368
  var SubjectSelector = function SubjectSelector(_ref) {
8267
8369
  var value = _ref.value,
@@ -10331,6 +10433,7 @@ var grey = {
10331
10433
  var green = {
10332
10434
  0: '#FFFFFF',
10333
10435
  100: '#F0FFF6',
10436
+ 200: '#D2FFE4',
10334
10437
  300: '#89F0B2',
10335
10438
  500: '#3DC674',
10336
10439
  700: '#349056',
@@ -33880,11 +33983,11 @@ var TextbookRow = function TextbookRow(_ref) {
33880
33983
  });
33881
33984
  var _useTranslation = useTranslation(),
33882
33985
  t = _useTranslation.t;
33883
- var isEditable = (!onAcademy || isAdminSite || isSuperAdmin || isSuperAdminUser || !isAdmin && data.isShared && (((_data$createdBy = data.createdBy) === null || _data$createdBy === void 0 ? void 0 : _data$createdBy.id) === (infoUser === null || infoUser === void 0 ? void 0 : infoUser.id) || ((_data$textbookOwners = data.textbookOwners) === null || _data$textbookOwners === void 0 ? void 0 : _data$textbookOwners.some(function (i) {
33986
+ var isEditable = !onAcademy || isAdminSite || isSuperAdmin || isSuperAdminUser || !isAdmin && data.isShared && (((_data$createdBy = data.createdBy) === null || _data$createdBy === void 0 ? void 0 : _data$createdBy.id) === (infoUser === null || infoUser === void 0 ? void 0 : infoUser.id) || ((_data$textbookOwners = data.textbookOwners) === null || _data$textbookOwners === void 0 ? void 0 : _data$textbookOwners.some(function (i) {
33884
33987
  var _infoUser$email, _infoUser$email$trim;
33885
33988
  return (i === null || i === void 0 ? void 0 : i.email.trim().toUpperCase()) === (infoUser === null || infoUser === void 0 ? void 0 : (_infoUser$email = infoUser.email) === null || _infoUser$email === void 0 ? void 0 : (_infoUser$email$trim = _infoUser$email.trim()) === null || _infoUser$email$trim === void 0 ? void 0 : _infoUser$email$trim.toUpperCase()) && (i === null || i === void 0 ? void 0 : i.academyId) === (academy === null || academy === void 0 ? void 0 : academy.id);
33886
- })))) && data.totalUses <= 0;
33887
- var isDeleteAble = !onAcademy || isAdminSite || isSuperAdmin || isSuperAdminUser || !isAdmin && data.isShared && ((_data$createdBy2 = data.createdBy) === null || _data$createdBy2 === void 0 ? void 0 : _data$createdBy2.id) === (infoUser === null || infoUser === void 0 ? void 0 : infoUser.id) && data.totalUses <= 0;
33989
+ })));
33990
+ var isDeleteAble = !onAcademy || isAdminSite || isSuperAdmin || isSuperAdminUser || !isAdmin && data.isShared && ((_data$createdBy2 = data.createdBy) === null || _data$createdBy2 === void 0 ? void 0 : _data$createdBy2.id) === (infoUser === null || infoUser === void 0 ? void 0 : infoUser.id);
33888
33991
  var isSharable = !data.isPublic && data.isShared && onAcademy && (isAdminSite || isSuperAdminUser || !isAdmin && data.createdBy.id === infoUser.id);
33889
33992
  var handleUpdateTextbook = function handleUpdateTextbook() {
33890
33993
  onUpdateTextbook(data);
@@ -34905,10 +35008,10 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
34905
35008
  var isAdminSite = role === Role.Admin;
34906
35009
  var onAcademy = !!(user !== null && user !== void 0 && user.academyDomain);
34907
35010
  var isSuperAdminUser = !!user && user.isSuperAdmin;
34908
- var isEditable = !selectedTextbook || (!onAcademy || isAdminSite || isSuperAdmin || isSuperAdminUser || !isAdmin && selectedTextbook.isShared && (((_selectedTextbook$cre = selectedTextbook.createdBy) === null || _selectedTextbook$cre === void 0 ? void 0 : _selectedTextbook$cre.id) === (user === null || user === void 0 ? void 0 : user.id) || selectedTextbook.textbookOwners.some(function (i) {
35011
+ var isEditable = !selectedTextbook || !onAcademy || isAdminSite || isSuperAdmin || isSuperAdminUser || !isAdmin && selectedTextbook.isShared && (((_selectedTextbook$cre = selectedTextbook.createdBy) === null || _selectedTextbook$cre === void 0 ? void 0 : _selectedTextbook$cre.id) === (user === null || user === void 0 ? void 0 : user.id) || selectedTextbook.textbookOwners.some(function (i) {
34909
35012
  var _user$email, _user$email$trim;
34910
35013
  return i.email.trim().toUpperCase() === (user === null || user === void 0 ? void 0 : (_user$email = user.email) === null || _user$email === void 0 ? void 0 : (_user$email$trim = _user$email.trim()) === null || _user$email$trim === void 0 ? void 0 : _user$email$trim.toUpperCase()) && i.academyId === (academy === null || academy === void 0 ? void 0 : academy.id);
34911
- }))) && selectedTextbook.totalUses <= 0;
35014
+ }));
34912
35015
  var disabledTextbookOwners = !selectedTextbook && isAdmin || selectedTextbook && (!isEditable || isTeacher && ((_selectedTextbook$cre2 = selectedTextbook.createdBy) === null || _selectedTextbook$cre2 === void 0 ? void 0 : _selectedTextbook$cre2.id) !== (user === null || user === void 0 ? void 0 : user.id) || isAdmin && !isSuperAdminUser);
34913
35016
  var handleOpenConfirmDeleteChapterDialog = function handleOpenConfirmDeleteChapterDialog(chapter) {
34914
35017
  setSelectedChapter(chapter);
@@ -35010,6 +35113,24 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
35010
35113
  return Promise.reject(e);
35011
35114
  }
35012
35115
  };
35116
+ var handleSaveData = useCallback(function (values) {
35117
+ try {
35118
+ if (!coverImage && !(values !== null && values !== void 0 && values.coverImage)) {
35119
+ return Promise.resolve();
35120
+ }
35121
+ return Promise.resolve(_catch(function () {
35122
+ var coverImg = coverImage || (values === null || values === void 0 ? void 0 : values.coverImage);
35123
+ return Promise.resolve(updateTextbookApi$1(_extends({}, values, {
35124
+ coverImage: coverImg
35125
+ }), (selectedTextbook === null || selectedTextbook === void 0 ? void 0 : selectedTextbook.id) || 0, isSuperAdmin)).then(function () {});
35126
+ }, function (error) {
35127
+ toast.error(getErrorMessage(t, error));
35128
+ throw error;
35129
+ }));
35130
+ } catch (e) {
35131
+ return Promise.reject(e);
35132
+ }
35133
+ }, [coverImage, isSuperAdmin, JSON.stringify(selectedTextbook)]);
35013
35134
  useEffect(function () {
35014
35135
  if (!textbookId) return;
35015
35136
  handleGetTextbookDetail();
@@ -35028,6 +35149,7 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
35028
35149
  isSuperAdminUser: isSuperAdminUser,
35029
35150
  openDialog: openDialog,
35030
35151
  handleSubmit: handleSubmit,
35152
+ handleSaveData: handleSaveData,
35031
35153
  selectedTextbook: selectedTextbook,
35032
35154
  handleOpenDialog: handleOpenDialog,
35033
35155
  handleCloseDialog: handleCloseDialog,
@@ -35321,6 +35443,8 @@ var CompareTypeOptions = [{
35321
35443
  label: "synonym_processing",
35322
35444
  value: QuestionAnswerType.SynonymProcessing
35323
35445
  }];
35446
+ var SAVE_TIME_INTERVAL_IN_MILLISECONDS = 60 * 1000;
35447
+ var SAVE_TIME_MAX_DIFF_IN_MILLISECONDS = 1000;
35324
35448
 
35325
35449
  var CustomTextbookTab = function CustomTextbookTab(props) {
35326
35450
  var children = props.children,
@@ -38496,8 +38620,9 @@ var TextbookOwnersTab = function TextbookOwnersTab(_ref) {
38496
38620
  }));
38497
38621
  };
38498
38622
 
38499
- var _excluded$m = ["isCreatedByAdmin", "isSuperAdminUser", "isSuperAdmin", "isAdmin", "textbookId", "selected", "coverImage", "disabled", "ownersDisabled", "onChangeTab", "onUploadImage"];
38623
+ var _excluded$m = ["isCreatedByAdmin", "isSuperAdminUser", "isSuperAdmin", "isAdmin", "textbookId", "selected", "coverImage", "disabled", "ownersDisabled", "selectedTextbook", "handleSaveData", "onChangeTab", "onUploadImage"];
38500
38624
  var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
38625
+ var _valuesTextbook$curre;
38501
38626
  var isCreatedByAdmin = _ref.isCreatedByAdmin,
38502
38627
  isSuperAdminUser = _ref.isSuperAdminUser,
38503
38628
  isSuperAdmin = _ref.isSuperAdmin,
@@ -38507,6 +38632,8 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
38507
38632
  coverImage = _ref.coverImage,
38508
38633
  disabled = _ref.disabled,
38509
38634
  ownersDisabled = _ref.ownersDisabled,
38635
+ selectedTextbook = _ref.selectedTextbook,
38636
+ handleSaveData = _ref.handleSaveData,
38510
38637
  onChangeTab = _ref.onChangeTab,
38511
38638
  onUploadImage = _ref.onUploadImage,
38512
38639
  formikProps = _objectWithoutPropertiesLoose(_ref, _excluded$m);
@@ -38515,6 +38642,20 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
38515
38642
  dirty = formikProps.dirty,
38516
38643
  submitCount = formikProps.submitCount,
38517
38644
  setValues = formikProps.setValues;
38645
+ var theme = useTheme();
38646
+ var savedRunRef = useRef(Date.now());
38647
+ var runTimeRef = useRef(Date.now());
38648
+ var valuesTextbook = useRef(null);
38649
+ var isFirstLoadRef = useRef(true);
38650
+ var _React$useState = React__default.useState(PrintStatus.Idle),
38651
+ saveStatus = _React$useState[0],
38652
+ setSaveStatus = _React$useState[1];
38653
+ var timeoutRef = useRef(null);
38654
+ var isProcessingRef = useRef(false);
38655
+ var pendingValuesRef = useRef(null);
38656
+ var _useState = useState(),
38657
+ lastEdited = _useState[0],
38658
+ setLastEdited = _useState[1];
38518
38659
  useEffect(function () {
38519
38660
  var handleBeforeUnload = function handleBeforeUnload(event) {
38520
38661
  var message = t$1("are_you_sure_you_want_to_quit_yours_changes_may_not_be_saved");
@@ -38535,9 +38676,99 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
38535
38676
  var newValues = _resetAllCategoriesAndQuestionTypesBySubject(values, val);
38536
38677
  setValues(newValues);
38537
38678
  };
38679
+ useEffect(function () {
38680
+ if (!valuesTextbook.current && isFirstLoadRef.current && !_$8.isEqual(values, DEFAULT_TEXTBOOK_REQUEST)) {
38681
+ valuesTextbook.current = _$8.cloneDeep(values);
38682
+ isFirstLoadRef.current = false;
38683
+ }
38684
+ }, [values]);
38685
+ var _handleSave = function handleSave(valuesProps) {
38686
+ try {
38687
+ var _temp = _finallyRethrows(function () {
38688
+ return _catch(function () {
38689
+ isProcessingRef.current = true;
38690
+ setSaveStatus(PrintStatus.Saving);
38691
+ var valuesToSave = valuesProps || values;
38692
+ return Promise.resolve(handleSaveData(valuesToSave)).then(function () {
38693
+ valuesTextbook.current = _$8.cloneDeep(valuesToSave);
38694
+ var now = Date.now();
38695
+ savedRunRef.current = now;
38696
+ runTimeRef.current = now;
38697
+ setSaveStatus(PrintStatus.Saved);
38698
+ });
38699
+ }, function (error) {
38700
+ setSaveStatus(PrintStatus.Idle);
38701
+ console.error(error);
38702
+ });
38703
+ }, function (_wasThrown, _result) {
38704
+ isProcessingRef.current = false;
38705
+ if (pendingValuesRef.current) {
38706
+ if (timeoutRef.current) {
38707
+ clearTimeout(timeoutRef.current);
38708
+ }
38709
+ timeoutRef.current = setTimeout(function () {
38710
+ timeoutRef.current = null;
38711
+ var pendingValues = pendingValuesRef.current;
38712
+ if (pendingValues) {
38713
+ _handleSave(pendingValues);
38714
+ pendingValuesRef.current = null;
38715
+ }
38716
+ }, SAVE_TIME_INTERVAL_IN_MILLISECONDS);
38717
+ }
38718
+ if (_wasThrown) throw _result;
38719
+ return _result;
38720
+ });
38721
+ return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
38722
+ } catch (e) {
38723
+ return Promise.reject(e);
38724
+ }
38725
+ };
38726
+ useEffect(function () {
38727
+ var now = Date.now();
38728
+ if (valuesTextbook.current && !_$8.isEqual(values, valuesTextbook.current)) setLastEdited(now);
38729
+ if (!_$8.isEmpty(errors) || !valuesTextbook.current || !(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id)) return;
38730
+ if (valuesTextbook.current && _$8.isEqual(values, valuesTextbook.current)) return;
38731
+ if (isProcessingRef.current) {
38732
+ pendingValuesRef.current = _$8.cloneDeep(values);
38733
+ return;
38734
+ }
38735
+ var timeSinceLastRun = now - runTimeRef.current;
38736
+ var maxTime = SAVE_TIME_INTERVAL_IN_MILLISECONDS + SAVE_TIME_MAX_DIFF_IN_MILLISECONDS;
38737
+ if (timeSinceLastRun > maxTime) {
38738
+ runTimeRef.current = now;
38739
+ timeSinceLastRun = 0;
38740
+ }
38741
+ if (timeSinceLastRun >= SAVE_TIME_INTERVAL_IN_MILLISECONDS) {
38742
+ if (timeoutRef.current) {
38743
+ clearTimeout(timeoutRef.current);
38744
+ timeoutRef.current = null;
38745
+ pendingValuesRef.current = null;
38746
+ }
38747
+ _handleSave();
38748
+ } else {
38749
+ pendingValuesRef.current = _$8.cloneDeep(values);
38750
+ var intevalTime = SAVE_TIME_INTERVAL_IN_MILLISECONDS - timeSinceLastRun;
38751
+ timeoutRef.current = setTimeout(function () {
38752
+ timeoutRef.current = null;
38753
+ var pendingValues = pendingValuesRef.current;
38754
+ if (pendingValues) {
38755
+ clearTimeout(timeoutRef.current);
38756
+ _handleSave(pendingValues);
38757
+ pendingValuesRef.current = null;
38758
+ }
38759
+ }, intevalTime);
38760
+ }
38761
+ return function () {
38762
+ if (timeoutRef.current) {
38763
+ clearTimeout(timeoutRef.current);
38764
+ }
38765
+ };
38766
+ }, [values, errors]);
38538
38767
  var inforErrors = errors.coverImage || errors.grade || errors.isbn || errors.preparedType || errors.publicationDate || errors.publisher;
38539
38768
  var contentsErrors = errors.chapters;
38540
38769
  var textbookOwnersErrors = errors.textbookOwners;
38770
+ var hasError = !_$8.isEmpty(errors);
38771
+ var isSaved = !lastEdited || _$8.isEqual(values, (_valuesTextbook$curre = valuesTextbook.current) != null ? _valuesTextbook$curre : {});
38541
38772
  return React__default.createElement(Form, null, React__default.createElement(Stack, {
38542
38773
  direction: "column",
38543
38774
  gap: 3
@@ -38625,7 +38856,45 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
38625
38856
  }), React__default.createElement(FormLabel, {
38626
38857
  htmlFor: "type",
38627
38858
  className: "text-center"
38628
- }, t$1("math"))))), React__default.createElement(Box, null, React__default.createElement(Button, {
38859
+ }, t$1("math"))))), React__default.createElement(Stack, {
38860
+ flexDirection: "row",
38861
+ gap: "8px"
38862
+ }, React__default.createElement(Stack, {
38863
+ padding: "6px 12px",
38864
+ sx: {
38865
+ transition: "opacity 0.3s ease",
38866
+ opacity: saveStatus === PrintStatus.Idle && isSaved ? 0 : 1,
38867
+ pointerEvents: "none",
38868
+ gap: "8px",
38869
+ flexDirection: "row",
38870
+ justifyContent: "center",
38871
+ alignItems: "center"
38872
+ }
38873
+ }, saveStatus === PrintStatus.Saving && React__default.createElement(AiOutlineLoading3Quarters, {
38874
+ style: {
38875
+ animation: "spin 1s linear infinite"
38876
+ }
38877
+ }), saveStatus === PrintStatus.Saved && isSaved && React__default.createElement(IoCheckmark, null), saveStatus !== PrintStatus.Saving && !isSaved && React__default.createElement(Fragment$1, null, hasError ? React__default.createElement(MdError, {
38878
+ color: red[900]
38879
+ }) : React__default.createElement(FaClockRotateLeft, {
38880
+ size: "14px"
38881
+ })), React__default.createElement(Typography, {
38882
+ sx: {
38883
+ color: theme.palette.grey[700],
38884
+ fontSize: "14px",
38885
+ display: "flex",
38886
+ alignItems: "center",
38887
+ gap: 1,
38888
+ "@keyframes spin": {
38889
+ "0%": {
38890
+ transform: "rotate(0deg)"
38891
+ },
38892
+ "100%": {
38893
+ transform: "rotate(360deg)"
38894
+ }
38895
+ }
38896
+ }
38897
+ }, saveStatus === PrintStatus.Saving && t$1("saving"), saveStatus === PrintStatus.Saved && isSaved && t$1("all_changes_saved"), saveStatus !== PrintStatus.Saving && (selectedTextbook === null || selectedTextbook === void 0 ? void 0 : selectedTextbook.id) && !isSaved && t$1("all_changes_are_not_saved_yet"))), React__default.createElement(Button, {
38629
38898
  type: "submit",
38630
38899
  sx: {
38631
38900
  width: "fit-content"
@@ -38732,6 +39001,7 @@ var PreparedTextbookView = function PreparedTextbookView(_ref) {
38732
39001
  isSuperAdminUser = _useTextbookManagemen.isSuperAdminUser,
38733
39002
  isAdmin = _useTextbookManagemen.isAdmin,
38734
39003
  coverImage = _useTextbookManagemen.coverImage,
39004
+ handleSaveData = _useTextbookManagemen.handleSaveData,
38735
39005
  selectedTextbook = _useTextbookManagemen.selectedTextbook,
38736
39006
  handleSubmit = _useTextbookManagemen.handleSubmit,
38737
39007
  handleUploadImage = _useTextbookManagemen.handleUploadImage;
@@ -38754,7 +39024,9 @@ var PreparedTextbookView = function PreparedTextbookView(_ref) {
38754
39024
  isAdmin: isAdmin,
38755
39025
  isSuperAdmin: isSuperAdmin,
38756
39026
  selected: selected,
39027
+ handleSaveData: handleSaveData,
38757
39028
  textbookId: textbookId,
39029
+ selectedTextbook: selectedTextbook,
38758
39030
  onChangeTab: handleChangeTab,
38759
39031
  onUploadImage: handleUploadImage,
38760
39032
  coverImage: coverImage,
@@ -39617,7 +39889,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
39617
39889
  var handleGoToMainPage = function handleGoToMainPage() {
39618
39890
  if (!user) return;
39619
39891
  var isAcademy = user.academyDomain || user.isLearningSpace;
39620
- var mainUrl = !isAcademy ? homeAcademyUrl : homeUrl;
39892
+ var mainUrl = isAcademy ? homeAcademyUrl : homeUrl;
39621
39893
  pushTo(history, mainUrl);
39622
39894
  };
39623
39895
  var handleImageError = function handleImageError() {
@@ -40272,6 +40544,491 @@ var singleLogo = function singleLogo(_ref) {
40272
40544
  }))));
40273
40545
  };
40274
40546
 
40547
+ var TimerItem = function TimerItem(_ref) {
40548
+ var data = _ref.data,
40549
+ seconds = _ref.seconds,
40550
+ loading = _ref.loading,
40551
+ activeTimerId = _ref.activeTimerId,
40552
+ onStartOrPauseTimer = _ref.onStartOrPauseTimer;
40553
+ var theme = useTheme();
40554
+ var _useTranslation = useTranslation(),
40555
+ t = _useTranslation.t;
40556
+ var handleStartOrPauseTimer = function handleStartOrPauseTimer() {
40557
+ onStartOrPauseTimer(data);
40558
+ };
40559
+ var isStarted = activeTimerId === data.id && data.status === SubjectTimerStatus.Started;
40560
+ var displayedTime = useMemo(function () {
40561
+ switch (data.status) {
40562
+ case SubjectTimerStatus.Started:
40563
+ return activeTimerId !== data.id ? formatTime$2(Math.floor(data.duration / 1000), t) : formatTime$2(seconds != null ? seconds : 0, t);
40564
+ case SubjectTimerStatus.NotStarted:
40565
+ return t("press_to_start");
40566
+ default:
40567
+ return formatTime$2(Math.floor(data.duration / 1000), t);
40568
+ }
40569
+ }, [data.id, data.status, data.duration, seconds, activeTimerId, t]);
40570
+ return React__default.createElement(MenuItem, {
40571
+ className: "" + styles["timer-menu-item"],
40572
+ sx: {
40573
+ py: 1,
40574
+ bgcolor: theme.palette.background.paper,
40575
+ borderRadius: 0.75,
40576
+ minHeight: "52px"
40577
+ },
40578
+ disabled: loading,
40579
+ onClick: handleStartOrPauseTimer
40580
+ }, React__default.createElement(Stack, {
40581
+ direction: "row",
40582
+ gap: 1,
40583
+ sx: {
40584
+ justifyContent: "space-between",
40585
+ alignItems: "center",
40586
+ width: "100%"
40587
+ }
40588
+ }, React__default.createElement(Typography, {
40589
+ className: styles["subject-name"] + " " + styles["truncate"],
40590
+ fontSize: "14px",
40591
+ fontWeight: 600
40592
+ }, data.name), React__default.createElement(Box, {
40593
+ sx: {
40594
+ display: "flex",
40595
+ alignItems: "center",
40596
+ gap: 1.5
40597
+ }
40598
+ }, React__default.createElement(Typography, {
40599
+ className: "" + styles["duration"],
40600
+ sx: {
40601
+ color: isStarted ? theme.palette.common.black : theme.palette.success.light,
40602
+ fontSize: "14px",
40603
+ fontWeight: 700
40604
+ }
40605
+ }, displayedTime), !isStarted && React__default.createElement(Box, {
40606
+ className: "" + styles["icon-start"]
40607
+ }, React__default.createElement(IoPlayCircleSharp, {
40608
+ size: 20
40609
+ })))));
40610
+ };
40611
+ var TOTAL_SECONDS_IN_A_MINUTE = 60;
40612
+ var TOTAL_SECONDS_IN_AN_HOUR = 60 * 60;
40613
+ var formatTime$2 = function formatTime(totalSeconds, t) {
40614
+ var hours = Math.floor(totalSeconds / TOTAL_SECONDS_IN_AN_HOUR);
40615
+ var minutes = Math.floor(totalSeconds % TOTAL_SECONDS_IN_AN_HOUR / TOTAL_SECONDS_IN_A_MINUTE);
40616
+ var seconds = totalSeconds % TOTAL_SECONDS_IN_A_MINUTE;
40617
+ if (hours > 0) {
40618
+ return "" + hours.toString().padStart(2, "0") + t("hour_h") + " " + minutes.toString().padStart(2, "0") + t("minutes") + " " + seconds.toString().padStart(2, "0") + t("seconds");
40619
+ }
40620
+ if (minutes > 0) {
40621
+ return "" + minutes.toString().padStart(2, "0") + t("minutes") + " " + seconds.toString().padStart(2, "0") + t("seconds");
40622
+ }
40623
+ return "" + seconds.toString().padStart(2, "0") + t("seconds");
40624
+ };
40625
+
40626
+ var TimerCountItem = function TimerCountItem(_ref) {
40627
+ var data = _ref.data,
40628
+ activeTimerId = _ref.activeTimerId,
40629
+ onChangeTime = _ref.onChangeTime;
40630
+ var requestAnimationRef = useRef(null);
40631
+ var user = useSelector(function (state) {
40632
+ var _state$common;
40633
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
40634
+ });
40635
+ useEffect(function () {
40636
+ if (data.status !== SubjectTimerStatus.Started || !(user !== null && user !== void 0 && user.academyDomain) && !(user !== null && user !== void 0 && user.isLearningSpace) || data.id !== activeTimerId) return;
40637
+ var _animate = function animate() {
40638
+ var startTime = data.startTime,
40639
+ lastResumeTime = data.lastResumeTime,
40640
+ duration = data.duration;
40641
+ var startOfTime = lastResumeTime !== DATE_TIME_MIN_VALUE ? lastResumeTime : startTime;
40642
+ if (startOfTime === DATE_TIME_MIN_VALUE) return;
40643
+ var time = getCountTime(startOfTime, Math.floor(duration / 1000));
40644
+ if (typeof time !== "number") {
40645
+ onChangeTime(data, undefined);
40646
+ return;
40647
+ }
40648
+ onChangeTime(data, time);
40649
+ requestAnimationRef.current = requestAnimationFrame(_animate);
40650
+ };
40651
+ requestAnimationRef.current = requestAnimationFrame(_animate);
40652
+ return function () {
40653
+ !!requestAnimationRef.current && cancelAnimationFrame(requestAnimationRef.current);
40654
+ };
40655
+ }, [JSON.stringify(data), user === null || user === void 0 ? void 0 : user.id, user === null || user === void 0 ? void 0 : user.academyDomain, user === null || user === void 0 ? void 0 : user.isLearningSpace, activeTimerId]);
40656
+ return React__default.createElement(Fragment$1, null);
40657
+ };
40658
+
40659
+ var formatDate = function formatDate(t, date) {
40660
+ return utcToLocalTime(date, t("date_format"));
40661
+ };
40662
+ var TimerDropdown = function TimerDropdown() {
40663
+ var _user$academyDomain$t, _user$academyDomain, _user$academyDomain$t2;
40664
+ var _useTranslation = useTranslation(),
40665
+ t = _useTranslation.t;
40666
+ var theme = useTheme();
40667
+ var user = useSelector(function (state) {
40668
+ var _state$common;
40669
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
40670
+ });
40671
+ var _useState = useState(null),
40672
+ open = _useState[0],
40673
+ setOpen = _useState[1];
40674
+ var _useState2 = useState([]),
40675
+ timers = _useState2[0],
40676
+ setTimers = _useState2[1];
40677
+ var _useState3 = useState(),
40678
+ seconds = _useState3[0],
40679
+ setSeconds = _useState3[1];
40680
+ var _useState4 = useState(),
40681
+ activeTimerId = _useState4[0],
40682
+ setActiveTimerId = _useState4[1];
40683
+ var _useState5 = useState(false),
40684
+ loadingItem = _useState5[0],
40685
+ setLoadingItem = _useState5[1];
40686
+ var _useState6 = useState(false),
40687
+ isFetching = _useState6[0],
40688
+ setFetching = _useState6[1];
40689
+ var fetchedRef = useRef();
40690
+ var academyDomain = (_user$academyDomain$t = user === null || user === void 0 ? void 0 : (_user$academyDomain = user.academyDomain) === null || _user$academyDomain === void 0 ? void 0 : (_user$academyDomain$t2 = _user$academyDomain.toLowerCase) === null || _user$academyDomain$t2 === void 0 ? void 0 : _user$academyDomain$t2.call(_user$academyDomain)) != null ? _user$academyDomain$t : "";
40691
+ var handleChangeTime = function handleChangeTime(data, time) {
40692
+ if (!(user !== null && user !== void 0 && user.id) || !academyDomain && !(user !== null && user !== void 0 && user.isLearningSpace)) return;
40693
+ if (academyDomain !== fetchedRef.current && data.id !== activeTimerId) return;
40694
+ setSeconds(time);
40695
+ var key = user.id + "-" + data.id + "-" + SUBJECT_TIMER_KEY + academyDomain;
40696
+ saveDuration(key, time * 1000);
40697
+ };
40698
+ var handleOpen = function handleOpen(event) {
40699
+ setOpen(event.currentTarget);
40700
+ };
40701
+ var handleClose = function handleClose() {
40702
+ setOpen(null);
40703
+ };
40704
+ var handleStartOrPauseTimer = function handleStartOrPauseTimer(data) {
40705
+ try {
40706
+ var _temp2 = function _temp2(_result3) {
40707
+ if (_exit) return _result3;
40708
+ setLoadingItem(false);
40709
+ };
40710
+ var _exit = false;
40711
+ var isActive = activeTimerId === data.id;
40712
+ var isPaused = data.status === SubjectTimerStatus.Paused;
40713
+ setLoadingItem(true);
40714
+ var _temp = _catch(function () {
40715
+ return Promise.resolve(handlePauseAllTimers(data.id)).then(function () {
40716
+ return function () {
40717
+ if (data.recordId) {
40718
+ return function () {
40719
+ if (!isActive && !isPaused) {
40720
+ setActiveTimerId(data.id);
40721
+ setTimers(function (timers) {
40722
+ return timers.map(function (timer) {
40723
+ return timer.id === data.id ? _extends({}, timer, {
40724
+ lastResumeTime: moment().utc().toISOString()
40725
+ }) : timer;
40726
+ });
40727
+ });
40728
+ setLoadingItem(false);
40729
+ _exit = true;
40730
+ } else {
40731
+ return Promise.resolve(pauseStudentSubjectApi(data.id, data.recordId, {
40732
+ status: isPaused ? SubjectTimerStatus.Started : SubjectTimerStatus.Paused,
40733
+ startTime: isPaused ? moment().utc().valueOf() : 0,
40734
+ pauseTime: !isPaused ? moment().utc().valueOf() : 0,
40735
+ duration: isActive && seconds ? seconds * 1000 : data.duration
40736
+ })).then(function (res) {
40737
+ setTimers(function (timers) {
40738
+ return timers.map(function (timer) {
40739
+ return timer.id === data.id ? res.data : timer;
40740
+ });
40741
+ });
40742
+ setActiveTimerId(!isPaused && isActive ? undefined : data.id);
40743
+ });
40744
+ }
40745
+ }();
40746
+ } else {
40747
+ return Promise.resolve(startStudentSubjectTimerApi(data.id)).then(function (res) {
40748
+ setTimers(function (timers) {
40749
+ return timers.map(function (timer) {
40750
+ return timer.id === data.id ? res.data : timer;
40751
+ });
40752
+ });
40753
+ setActiveTimerId(!isPaused && isActive ? undefined : data.id);
40754
+ });
40755
+ }
40756
+ }();
40757
+ });
40758
+ }, function () {
40759
+ toast.error(t(isPaused ? "failed_to_start_the_subject_name" : "failed_to_pause_the_subject_name", {
40760
+ name: data.name
40761
+ }));
40762
+ });
40763
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
40764
+ } catch (e) {
40765
+ return Promise.reject(e);
40766
+ }
40767
+ };
40768
+ var handlePauseAllTimers = function handlePauseAllTimers(exceptId) {
40769
+ try {
40770
+ !exceptId && setLoadingItem(true);
40771
+ var tasks = timers.filter(function (i) {
40772
+ return i.status === SubjectTimerStatus.Started && i.id !== exceptId;
40773
+ }).map(function (i) {
40774
+ return handlePauseTimer(i);
40775
+ });
40776
+ return Promise.resolve(Promise.all(tasks)).then(function () {
40777
+ !exceptId && setLoadingItem(false);
40778
+ });
40779
+ } catch (e) {
40780
+ return Promise.reject(e);
40781
+ }
40782
+ };
40783
+ var handlePauseTimer = function handlePauseTimer(data, updateState) {
40784
+ if (updateState === void 0) {
40785
+ updateState = true;
40786
+ }
40787
+ try {
40788
+ if (data.status === SubjectTimerStatus.Paused) return Promise.resolve(data);
40789
+ return Promise.resolve(_catch(function () {
40790
+ return Promise.resolve(pauseStudentSubjectApi(data.id, data.recordId, {
40791
+ status: SubjectTimerStatus.Paused,
40792
+ duration: activeTimerId === data.id && seconds ? seconds * 1000 : data.duration,
40793
+ pauseTime: moment().utc().valueOf()
40794
+ })).then(function (res) {
40795
+ if (updateState) setTimers(function (state) {
40796
+ return state.map(function (i) {
40797
+ return i.id === data.id ? res.data : i;
40798
+ });
40799
+ });
40800
+ return res.data;
40801
+ });
40802
+ }, function () {
40803
+ activeTimerId === data.id && toast.error(t("failed_to_pause_the_subject_name", {
40804
+ name: data.name
40805
+ }));
40806
+ }));
40807
+ } catch (e) {
40808
+ return Promise.reject(e);
40809
+ }
40810
+ };
40811
+ var getDataFromLocalStorage = useCallback(function (items) {
40812
+ if (fetchedRef.current !== academyDomain) return [];
40813
+ return items.map(function (item) {
40814
+ var key = (user === null || user === void 0 ? void 0 : user.id) + "-" + item.id + "-" + SUBJECT_TIMER_KEY + academyDomain;
40815
+ var duration = getLocalDuration(key, item);
40816
+ var lastResumeTime = moment().utc().toISOString();
40817
+ return _extends({}, item, {
40818
+ duration: duration !== null ? duration : item.duration,
40819
+ lastResumeTime: lastResumeTime
40820
+ });
40821
+ });
40822
+ }, [user === null || user === void 0 ? void 0 : user.id, academyDomain]);
40823
+ useEffect(function () {
40824
+ var fetchData = function fetchData() {
40825
+ try {
40826
+ var _temp4 = function _temp4() {
40827
+ setFetching(false);
40828
+ };
40829
+ if (!(user !== null && user !== void 0 && user.id) || !academyDomain && !(user !== null && user !== void 0 && user.isLearningSpace)) return Promise.resolve();
40830
+ if (fetchedRef.current == academyDomain && !open) return Promise.resolve();
40831
+ setFetching(true);
40832
+ var _temp3 = _catch(function () {
40833
+ return Promise.resolve(getStudentSubjectListApi()).then(function (res) {
40834
+ var _items$find;
40835
+ var _res$data$items = res.data.items,
40836
+ items = _res$data$items === void 0 ? [] : _res$data$items;
40837
+ fetchedRef.current = academyDomain;
40838
+ setTimers(getDataFromLocalStorage(items));
40839
+ setActiveTimerId((_items$find = items.find(function (i) {
40840
+ return i.status === SubjectTimerStatus.Started;
40841
+ })) === null || _items$find === void 0 ? void 0 : _items$find.id);
40842
+ });
40843
+ }, function (error) {
40844
+ toast.error(getErrorMessage(t, error));
40845
+ });
40846
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
40847
+ } catch (e) {
40848
+ return Promise.reject(e);
40849
+ }
40850
+ };
40851
+ fetchData();
40852
+ }, [t, getDataFromLocalStorage, user === null || user === void 0 ? void 0 : user.isLearningSpace, open]);
40853
+ var today = formatDate(t);
40854
+ var isRunning = timers.some(function (timer) {
40855
+ return timer.status === SubjectTimerStatus.Started;
40856
+ });
40857
+ var selectedTimer = timers.find(function (i) {
40858
+ return i.id === activeTimerId;
40859
+ });
40860
+ return React__default.createElement(Fragment$1, null, React__default.createElement(IconButton$1, {
40861
+ onClick: handleOpen,
40862
+ sx: {
40863
+ width: 44,
40864
+ height: 44,
40865
+ mx: 1,
40866
+ borderRadius: "6px",
40867
+ padding: "8px",
40868
+ background: !isRunning ? grey[50] : green[100],
40869
+ "&: hover": {
40870
+ background: !isRunning ? grey[200] : green[200]
40871
+ }
40872
+ }
40873
+ }, React__default.createElement(Stack, {
40874
+ justifyContent: "center",
40875
+ alignItems: "center",
40876
+ width: "100%",
40877
+ height: "100%",
40878
+ sx: {
40879
+ borderRadius: "50%",
40880
+ backgroundColor: "#FFF"
40881
+ }
40882
+ }, React__default.createElement(IoTimer, {
40883
+ color: !isRunning ? grey[700] : green[500],
40884
+ size: "16.25px"
40885
+ }))), selectedTimer && React__default.createElement(TimerCountItem, {
40886
+ data: selectedTimer,
40887
+ activeTimerId: activeTimerId,
40888
+ onChangeTime: handleChangeTime
40889
+ }), React__default.createElement(Popover$1, {
40890
+ open: !!open,
40891
+ anchorEl: open,
40892
+ onClose: handleClose,
40893
+ anchorOrigin: {
40894
+ vertical: "bottom",
40895
+ horizontal: "right"
40896
+ },
40897
+ transformOrigin: {
40898
+ vertical: "top",
40899
+ horizontal: "right"
40900
+ },
40901
+ slotProps: {
40902
+ paper: {
40903
+ sx: {
40904
+ px: 2,
40905
+ mt: 1,
40906
+ ml: 0.75,
40907
+ width: 320,
40908
+ borderRadius: 2,
40909
+ boxShadow: 3,
40910
+ bgcolor: theme.palette.grey[50]
40911
+ }
40912
+ }
40913
+ }
40914
+ }, React__default.createElement(Box, {
40915
+ sx: {
40916
+ py: 2,
40917
+ display: "flex",
40918
+ alignItems: "center",
40919
+ justifyContent: "space-between"
40920
+ }
40921
+ }, React__default.createElement(Box, {
40922
+ sx: {
40923
+ display: "flex",
40924
+ gap: 1,
40925
+ alignItems: "center"
40926
+ }
40927
+ }, React__default.createElement(Box, {
40928
+ display: "flex",
40929
+ alignItems: "center"
40930
+ }, React__default.createElement(IoTimer, null)), React__default.createElement(Typography, {
40931
+ variant: "subtitle1",
40932
+ fontWeight: "bold",
40933
+ fontSize: "14px"
40934
+ }, t("study_timer"))), React__default.createElement(Typography, {
40935
+ color: "textSecondary",
40936
+ whiteSpace: "nowrap",
40937
+ fontSize: "14px"
40938
+ }, today)), React__default.createElement(Divider, {
40939
+ sx: {
40940
+ bgcolor: theme.palette.grey[700]
40941
+ }
40942
+ }), React__default.createElement(Stack, {
40943
+ className: "" + styles["timer-menu"],
40944
+ gap: 1.5,
40945
+ flexDirection: "column",
40946
+ sx: {
40947
+ py: 2,
40948
+ maxHeight: "360px"
40949
+ }
40950
+ }, !isFetching && React__default.createElement(ListView, {
40951
+ data: timers,
40952
+ render: function render(item, index) {
40953
+ return React__default.createElement(TimerItem, {
40954
+ key: index,
40955
+ data: item,
40956
+ loading: loadingItem,
40957
+ seconds: activeTimerId === item.id ? seconds : undefined,
40958
+ activeTimerId: activeTimerId,
40959
+ onStartOrPauseTimer: handleStartOrPauseTimer
40960
+ });
40961
+ }
40962
+ }), isFetching && React__default.createElement(Stack, {
40963
+ sx: {
40964
+ width: "100%",
40965
+ py: 2
40966
+ },
40967
+ justifyContent: "center",
40968
+ alignItems: "center"
40969
+ }, React__default.createElement(Typography, {
40970
+ className: "text-muted"
40971
+ }, React__default.createElement(CircularProgress, {
40972
+ size: "16px",
40973
+ color: "success"
40974
+ }))), !timers.length && !isFetching && React__default.createElement(Box, null, React__default.createElement(Typography, {
40975
+ className: "text-muted"
40976
+ }, t("no_data")))), React__default.createElement(Divider, {
40977
+ sx: {
40978
+ bgcolor: theme.palette.grey[700]
40979
+ }
40980
+ }), React__default.createElement(Box, {
40981
+ sx: {
40982
+ p: 2,
40983
+ textAlign: "right"
40984
+ }
40985
+ }, React__default.createElement(Button, {
40986
+ disableTouchRipple: true,
40987
+ onClick: function onClick() {
40988
+ return handlePauseAllTimers();
40989
+ },
40990
+ disabled: loadingItem,
40991
+ sx: {
40992
+ fontWeight: 700,
40993
+ color: theme.palette.success.main,
40994
+ padding: "8px 12px",
40995
+ bgcolor: theme.palette.background.paper,
40996
+ "&:hover": {
40997
+ bgcolor: theme.palette.grey[200]
40998
+ },
40999
+ "&:disabled": {
41000
+ opacity: 0.5
41001
+ }
41002
+ }
41003
+ }, loadingItem ? t("saving") : t("pause")))));
41004
+ };
41005
+ var SUBJECT_TIMER_KEY = "stk";
41006
+ var saveDuration = function saveDuration(key, duration) {
41007
+ localStorage.setItem(key, "" + duration);
41008
+ };
41009
+ var getLocalDuration = function getLocalDuration(key, timer) {
41010
+ try {
41011
+ var res = localStorage.getItem(key);
41012
+ var duration = +(res != null ? res : "");
41013
+ if (!duration || Number.isNaN(duration) || duration <= timer.duration) return null;
41014
+ return duration;
41015
+ } catch (error) {
41016
+ return null;
41017
+ }
41018
+ };
41019
+
41020
+ var HeaderLink = function HeaderLink(_ref) {
41021
+ var data = _ref.data,
41022
+ render = _ref.render;
41023
+ var activePaths = data.activePaths,
41024
+ path = data.path;
41025
+ var pathname = window.location.pathname.toLowerCase();
41026
+ var isActive = (activePaths === null || activePaths === void 0 ? void 0 : activePaths.some(function (a) {
41027
+ return pathname.startsWith(a);
41028
+ })) || pathname.startsWith(path);
41029
+ return React__default.createElement(Fragment$1, null, render(data, isActive));
41030
+ };
41031
+
40275
41032
  var Header = function Header(_ref) {
40276
41033
  var academyListRoute = _ref.academyListRoute,
40277
41034
  homeRoute = _ref.homeRoute,
@@ -40394,7 +41151,9 @@ var Header = function Header(_ref) {
40394
41151
  justifyContent: "center",
40395
41152
  height: "100%",
40396
41153
  className: styles["logo"] + " d-flex d-lg-none"
40397
- }, React__default.createElement(singleLogo, null))), React__default.createElement(Stack, {
41154
+ }, React__default.createElement(singleLogo, null))), !isTeacherSide && React__default.createElement(Stack, {
41155
+ className: "me-2 ms-2"
41156
+ }, React__default.createElement(TimerDropdown, null)), React__default.createElement(Stack, {
40398
41157
  className: "me-2",
40399
41158
  display: "none"
40400
41159
  }, React__default.createElement(TheLanguageDropdown, null)), showAnnouncement && renderNotificationLink && React__default.createElement(AnnouncementContainer, {
@@ -40403,17 +41162,6 @@ var Header = function Header(_ref) {
40403
41162
  renderViewNoteLink: renderViewNoteLink
40404
41163
  })));
40405
41164
  };
40406
- var HeaderLink = function HeaderLink(_ref3) {
40407
- var data = _ref3.data,
40408
- render = _ref3.render;
40409
- var activePaths = data.activePaths,
40410
- path = data.path;
40411
- var pathname = location.pathname.toLowerCase();
40412
- var isActive = (activePaths === null || activePaths === void 0 ? void 0 : activePaths.some(function (a) {
40413
- return pathname.startsWith(a);
40414
- })) || pathname.startsWith(path);
40415
- return React__default.createElement(Fragment$1, null, render(data, isActive));
40416
- };
40417
41165
 
40418
41166
  var useLayoutContext = function useLayoutContext(role, showLoadingAcademy, domain) {
40419
41167
  var _currentPusher$connec2;
@@ -40578,5 +41326,5 @@ var LayoutContext = function LayoutContext(_ref) {
40578
41326
  });else return React__default.createElement(Fragment$1, null, children);
40579
41327
  };
40580
41328
 
40581
- export { ACADEMY_DOMAIN, ACCESS_TOKEN, AcademyHeaders, AcademyList, AcceptNoAcademy, ActionButtons, AnnouncementContainer, AnnouncementType, AnswerCountSelector, ArticleCategorySelector, ArticleDialog, ArticleGroupView, AttendanceFormDialog, BASE_URL, BRIEF_GRADE_OPTIONS, _ChapterBox as ChapterBox, ChatContainer, types as ChatTypes, ClassDetail, ClassList, ClassNoteDialog, ClassSelector, CommonCreateNewQuestionDialog, CommonDialog, ConfirmDeleteDialog, ConfirmDialog, CustomAsyncSelect, CustomCreatable, CustomPagination, CustomSelect, CustomSelectOption, DATE_MIN_VALUE, DATE_TIME_MIN_VALUE, DEFAULT_NOTE_FILTER, DEFAULT_PAGING_RESPONSE, DefaultErrorMessage, EXAM_CHANNEL, EXAM_STUDENT_CHANNEL, ExamDetailView, ExamEvent, ExamNoteDialog, ExamResultV2, ExamStatus, GOOGLE_CLIENT_ID, GOOGLE_RECAPTCHA_ID, GOOGLE_RECAPTCHA_KEY, GOOGLE_RECAPTCHA_SECRET, GRADE_OPTIONS, Header, InputText, LANGUAGE, LEARNING_SPACE, Language, LanguageHeaders, LayoutContext, LessonTooltip, ListView, Loading, LoadingComponent, Login, LoginQRCode, LoginWithEmail, SignIn as LoginWithPassword, MathJaxContainer, MathTinyEditor, NewNoteButton, NoAcademyHeaders, NotFound, NoteDrawer, NoteTabs, NoteType, NotesContainer, NotificationDetail, NotificationList, OrderBy, OrderType, PRE_REDIRECT_URL, PUSHER_CONFIG, PassCodeCheck, PassCodeDialog, PreparedItem, PreparedTextbookList, PreparedTextbookView, PreparedType, PrintContainerClassName, PrintContentClassName, PrintExamResultView, PrintExamView2, PrintHeaderClassName, PrintTitleClassName, QRCodeConfirmation, QuestionAnswerType, QuestionCountSelector, REDIRECT_URL, RELEASE_DATE, RecentUserAction, RecentUserActionNames, RecentUserActionSortBy, ReleaseAlert, Role, SUPER_ADMIN_BASE_URL, SchoolType$1 as SchoolType, ScoreSelector, SearchInput, ShareToTeacherDialog, StudentInfoDrawer, StudentSelector, SubjectSelector, TextbookActionButtons, TextbookViewDetail as TextbookDetail, TextbookDrawer, TextbookEditorType, TextbookList, TheAcademyDropdown, TheLanguageDropdown, TinyEditor, UserList, UserSortColumn, VirtualListView, VirtualTableView, api, apiUpload, canAccess as canAccessRoute, cleanRichText, convertHHMMSStoSeconds, createRecentUserActionListApi, diffFromNow, ellipsisText, encodeParams, formatDataMyAnswer, formatDateTime, formatPhoneNumber, formatRole, formatTextbookDataMyAnswer, formatTime, formatTimeSecond, getAcademyDomain, getAccessToken, getErrorMessage, getLanguage, getLearningSpace, getLocalDayOfWeek, getOrdinalSuffix, getRecentUserActionListApi, getRedirectUrl, getRemainTime, getRole, getUtcDayOfWeek, i18n, includePathname, isLocalHost, isTextType, minutesToTimeSpan, pushTo, reset, setAcademies, setAcademy, setAlert, setConcurrentConnectionPusher, setLanguage, setLoading, setReFetchUserAcademies, setTotalUnreadMessages, setUser, store, timAgo, timeSpanToLocalMoment, toISOString, toLocalTime, totalSolveTimeCategories, totalTextbookSolveTimeCategories, useAutoAcademyDomain, useChatContainer, useCountDownTimer, useGoogleSignOut, useKeyboardVisible, useLanguage, useList, useLoadMore, useLogin, useNotes, usePusherConversation, useSwitchAcademy, useVirtualizeList, utcToLocalTime };
41329
+ export { ACADEMY_DOMAIN, ACCESS_TOKEN, AcademyHeaders, AcademyList, AcceptNoAcademy, ActionButtons, AnnouncementContainer, AnnouncementType, AnswerCountSelector, ArticleCategorySelector, ArticleDialog, ArticleGroupView, AttendanceFormDialog, BASE_URL, BRIEF_GRADE_OPTIONS, _ChapterBox as ChapterBox, ChatContainer, types as ChatTypes, ClassDetail, ClassList, ClassNoteDialog, ClassSelector, CommonCreateNewQuestionDialog, CommonDialog, ConfirmDeleteDialog, ConfirmDialog, CustomAsyncSelect, CustomCreatable, CustomPagination, CustomSelect, CustomSelectOption, DATE_MIN_VALUE, DATE_TIME_MIN_VALUE, DEFAULT_NOTE_FILTER, DEFAULT_PAGING_RESPONSE, DefaultErrorMessage, EXAM_CHANNEL, EXAM_STUDENT_CHANNEL, ExamDetailView, ExamEvent, ExamNoteDialog, ExamResultV2, ExamStatus, GOOGLE_CLIENT_ID, GOOGLE_RECAPTCHA_ID, GOOGLE_RECAPTCHA_KEY, GOOGLE_RECAPTCHA_SECRET, GRADE_OPTIONS, Header, InputText, LANGUAGE, LEARNING_SPACE, Language, LanguageHeaders, LayoutContext, LessonTooltip, ListView, Loading, LoadingComponent, Login, LoginQRCode, LoginWithEmail, SignIn as LoginWithPassword, MathJaxContainer, MathTinyEditor, NewNoteButton, NoAcademyHeaders, NotFound, NoteDrawer, NoteTabs, NoteType, NotesContainer, NotificationDetail, NotificationList, OrderBy, OrderType, PRE_REDIRECT_URL, PUSHER_CONFIG, PassCodeCheck, PassCodeDialog, PreparedItem, PreparedTextbookList, PreparedTextbookView, PreparedType, PrintContainerClassName, PrintContentClassName, PrintExamResultView, PrintExamView2, PrintHeaderClassName, PrintTitleClassName, QRCodeConfirmation, QuestionAnswerType, QuestionCountSelector, REDIRECT_URL, RELEASE_DATE, RecentUserAction, RecentUserActionNames, RecentUserActionSortBy, ReleaseAlert, Role, SUPER_ADMIN_BASE_URL, SchoolType$1 as SchoolType, ScoreSelector, SearchInput, ShareToTeacherDialog, StudentInfoDrawer, StudentSelector, SubjectSelector, SubjectTimerStatus, TextbookActionButtons, TextbookViewDetail as TextbookDetail, TextbookDrawer, TextbookEditorType, TextbookList, TheAcademyDropdown, TheLanguageDropdown, TinyEditor, UserList, UserSortColumn, VirtualListView, VirtualTableView, api, apiUpload, canAccess as canAccessRoute, cleanRichText, convertHHMMSStoSeconds, createRecentUserActionListApi, diffFromNow, ellipsisText, encodeParams, formatDataMyAnswer, formatDateTime, formatPhoneNumber, formatRole, formatTextbookDataMyAnswer, formatTime, formatTimeSecond, getAcademyDomain, getAccessToken, getCountTime, getErrorMessage, getLanguage, getLearningSpace, getLocalDayOfWeek, getOrdinalSuffix, getRecentUserActionListApi, getRedirectUrl, getRemainTime, getRole, getUtcDayOfWeek, i18n, includePathname, isLocalHost, isTextType, minutesToTimeSpan, pushTo, reset, setAcademies, setAcademy, setAlert, setConcurrentConnectionPusher, setLanguage, setLoading, setReFetchUserAcademies, setTotalUnreadMessages, setUser, store, timAgo, timeSpanToLocalMoment, toISOString, toLocalTime, totalSolveTimeCategories, totalTextbookSolveTimeCategories, useAutoAcademyDomain, useChatContainer, useCountDownTimer, useGoogleSignOut, useKeyboardVisible, useLanguage, useList, useLoadMore, useLogin, useNotes, usePusherConversation, useSwitchAcademy, useVirtualizeList, utcToLocalTime };
40582
41330
  //# sourceMappingURL=index.modern.js.map