touchstudy-core 0.1.177 → 0.1.178

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: {
@@ -6280,6 +6343,12 @@ var TextbookEditorType;
6280
6343
  TextbookEditorType[TextbookEditorType["Korea"] = 1] = "Korea";
6281
6344
  TextbookEditorType[TextbookEditorType["Math"] = 2] = "Math";
6282
6345
  })(TextbookEditorType || (TextbookEditorType = {}));
6346
+ var PrintStatus;
6347
+ (function (PrintStatus) {
6348
+ PrintStatus[PrintStatus["Idle"] = 0] = "Idle";
6349
+ PrintStatus[PrintStatus["Saving"] = 1] = "Saving";
6350
+ PrintStatus[PrintStatus["Saved"] = 2] = "Saved";
6351
+ })(PrintStatus || (PrintStatus = {}));
6283
6352
 
6284
6353
  var SchoolType$1;
6285
6354
  (function (SchoolType) {
@@ -6289,6 +6358,13 @@ var SchoolType$1;
6289
6358
  SchoolType[SchoolType["High"] = 3] = "High";
6290
6359
  })(SchoolType$1 || (SchoolType$1 = {}));
6291
6360
 
6361
+ var SubjectTimerStatus;
6362
+ (function (SubjectTimerStatus) {
6363
+ SubjectTimerStatus[SubjectTimerStatus["NotStarted"] = 0] = "NotStarted";
6364
+ SubjectTimerStatus[SubjectTimerStatus["Started"] = 1] = "Started";
6365
+ SubjectTimerStatus[SubjectTimerStatus["Paused"] = 2] = "Paused";
6366
+ })(SubjectTimerStatus || (SubjectTimerStatus = {}));
6367
+
6292
6368
  var canAccess = function canAccess(userRoles, componentRoles) {
6293
6369
  if (!Array.isArray(userRoles)) {
6294
6370
  return false;
@@ -6538,6 +6614,11 @@ var getRemainTime = function getRemainTime(startTime, duration) {
6538
6614
  if (timePass > durationInNumber) return 0;
6539
6615
  return durationInNumber - timePass;
6540
6616
  };
6617
+ var getCountTime = function getCountTime(startTime, duration) {
6618
+ var timePass = diffFromNow(startTime, "second");
6619
+ if (typeof timePass !== "number") return null;
6620
+ return duration + timePass;
6621
+ };
6541
6622
 
6542
6623
  var formatDateTime = function formatDateTime(inputDate) {
6543
6624
  var date = new Date(inputDate);
@@ -8264,6 +8345,27 @@ var getSubjectListApi = function getSubjectListApi(textSearch) {
8264
8345
  return Promise.reject(e);
8265
8346
  }
8266
8347
  };
8348
+ var getStudentSubjectListApi = function getStudentSubjectListApi() {
8349
+ try {
8350
+ return Promise.resolve(api.get(SUBJECT_URL + "/timers"));
8351
+ } catch (e) {
8352
+ return Promise.reject(e);
8353
+ }
8354
+ };
8355
+ var startStudentSubjectTimerApi = function startStudentSubjectTimerApi(subjectId) {
8356
+ try {
8357
+ return Promise.resolve(api.post(SUBJECT_URL + "/" + subjectId + "/timers"));
8358
+ } catch (e) {
8359
+ return Promise.reject(e);
8360
+ }
8361
+ };
8362
+ var pauseStudentSubjectApi = function pauseStudentSubjectApi(subjectId, recordId, data) {
8363
+ try {
8364
+ return Promise.resolve(api.post(SUBJECT_URL + "/" + subjectId + "/timers/" + recordId, data));
8365
+ } catch (e) {
8366
+ return Promise.reject(e);
8367
+ }
8368
+ };
8267
8369
 
8268
8370
  var SubjectSelector = function SubjectSelector(_ref) {
8269
8371
  var value = _ref.value,
@@ -10333,6 +10435,7 @@ var grey = {
10333
10435
  var green = {
10334
10436
  0: '#FFFFFF',
10335
10437
  100: '#F0FFF6',
10438
+ 200: '#D2FFE4',
10336
10439
  300: '#89F0B2',
10337
10440
  500: '#3DC674',
10338
10441
  700: '#349056',
@@ -33929,11 +34032,11 @@ var TextbookRow = function TextbookRow(_ref) {
33929
34032
  });
33930
34033
  var _useTranslation = useTranslation(),
33931
34034
  t = _useTranslation.t;
33932
- 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) {
34035
+ 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) {
33933
34036
  var _infoUser$email, _infoUser$email$trim;
33934
34037
  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);
33935
- })))) && data.totalUses <= 0;
33936
- 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;
34038
+ })));
34039
+ 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);
33937
34040
  var isSharable = !data.isPublic && data.isShared && onAcademy && (isAdminSite || isSuperAdminUser || !isAdmin && data.createdBy.id === infoUser.id);
33938
34041
  var handleUpdateTextbook = function handleUpdateTextbook() {
33939
34042
  onUpdateTextbook(data);
@@ -34954,10 +35057,10 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
34954
35057
  var isAdminSite = role === Role.Admin;
34955
35058
  var onAcademy = !!(user !== null && user !== void 0 && user.academyDomain);
34956
35059
  var isSuperAdminUser = !!user && user.isSuperAdmin;
34957
- 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) {
35060
+ 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) {
34958
35061
  var _user$email, _user$email$trim;
34959
35062
  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);
34960
- }))) && selectedTextbook.totalUses <= 0;
35063
+ }));
34961
35064
  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);
34962
35065
  var handleOpenConfirmDeleteChapterDialog = function handleOpenConfirmDeleteChapterDialog(chapter) {
34963
35066
  setSelectedChapter(chapter);
@@ -35059,6 +35162,24 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
35059
35162
  return Promise.reject(e);
35060
35163
  }
35061
35164
  };
35165
+ var handleSaveData = useCallback(function (values) {
35166
+ try {
35167
+ if (!coverImage && !(values !== null && values !== void 0 && values.coverImage)) {
35168
+ return Promise.resolve();
35169
+ }
35170
+ return Promise.resolve(_catch(function () {
35171
+ var coverImg = coverImage || (values === null || values === void 0 ? void 0 : values.coverImage);
35172
+ return Promise.resolve(updateTextbookApi$1(_extends({}, values, {
35173
+ coverImage: coverImg
35174
+ }), (selectedTextbook === null || selectedTextbook === void 0 ? void 0 : selectedTextbook.id) || 0, isSuperAdmin)).then(function () {});
35175
+ }, function (error) {
35176
+ toast.error(getErrorMessage(t, error));
35177
+ throw error;
35178
+ }));
35179
+ } catch (e) {
35180
+ return Promise.reject(e);
35181
+ }
35182
+ }, [coverImage, isSuperAdmin, JSON.stringify(selectedTextbook)]);
35062
35183
  useEffect(function () {
35063
35184
  if (!textbookId) return;
35064
35185
  handleGetTextbookDetail();
@@ -35077,6 +35198,7 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
35077
35198
  isSuperAdminUser: isSuperAdminUser,
35078
35199
  openDialog: openDialog,
35079
35200
  handleSubmit: handleSubmit,
35201
+ handleSaveData: handleSaveData,
35080
35202
  selectedTextbook: selectedTextbook,
35081
35203
  handleOpenDialog: handleOpenDialog,
35082
35204
  handleCloseDialog: handleCloseDialog,
@@ -35370,6 +35492,8 @@ var CompareTypeOptions = [{
35370
35492
  label: "synonym_processing",
35371
35493
  value: QuestionAnswerType.SynonymProcessing
35372
35494
  }];
35495
+ var SAVE_TIME_INTERVAL_IN_MILLISECONDS = 60 * 1000;
35496
+ var SAVE_TIME_MAX_DIFF_IN_MILLISECONDS = 1000;
35373
35497
 
35374
35498
  var CustomTextbookTab = function CustomTextbookTab(props) {
35375
35499
  var children = props.children,
@@ -38545,8 +38669,9 @@ var TextbookOwnersTab = function TextbookOwnersTab(_ref) {
38545
38669
  }));
38546
38670
  };
38547
38671
 
38548
- var _excluded$n = ["isCreatedByAdmin", "isSuperAdminUser", "isSuperAdmin", "isAdmin", "textbookId", "selected", "coverImage", "disabled", "ownersDisabled", "onChangeTab", "onUploadImage"];
38672
+ var _excluded$n = ["isCreatedByAdmin", "isSuperAdminUser", "isSuperAdmin", "isAdmin", "textbookId", "selected", "coverImage", "disabled", "ownersDisabled", "selectedTextbook", "handleSaveData", "onChangeTab", "onUploadImage"];
38549
38673
  var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
38674
+ var _valuesTextbook$curre;
38550
38675
  var isCreatedByAdmin = _ref.isCreatedByAdmin,
38551
38676
  isSuperAdminUser = _ref.isSuperAdminUser,
38552
38677
  isSuperAdmin = _ref.isSuperAdmin,
@@ -38556,6 +38681,8 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
38556
38681
  coverImage = _ref.coverImage,
38557
38682
  disabled = _ref.disabled,
38558
38683
  ownersDisabled = _ref.ownersDisabled,
38684
+ selectedTextbook = _ref.selectedTextbook,
38685
+ handleSaveData = _ref.handleSaveData,
38559
38686
  onChangeTab = _ref.onChangeTab,
38560
38687
  onUploadImage = _ref.onUploadImage,
38561
38688
  formikProps = _objectWithoutPropertiesLoose(_ref, _excluded$n);
@@ -38564,6 +38691,20 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
38564
38691
  dirty = formikProps.dirty,
38565
38692
  submitCount = formikProps.submitCount,
38566
38693
  setValues = formikProps.setValues;
38694
+ var theme = useTheme();
38695
+ var savedRunRef = useRef(Date.now());
38696
+ var runTimeRef = useRef(Date.now());
38697
+ var valuesTextbook = useRef(null);
38698
+ var isFirstLoadRef = useRef(true);
38699
+ var _React$useState = React__default.useState(PrintStatus.Idle),
38700
+ saveStatus = _React$useState[0],
38701
+ setSaveStatus = _React$useState[1];
38702
+ var timeoutRef = useRef(null);
38703
+ var isProcessingRef = useRef(false);
38704
+ var pendingValuesRef = useRef(null);
38705
+ var _useState = useState(),
38706
+ lastEdited = _useState[0],
38707
+ setLastEdited = _useState[1];
38567
38708
  useEffect(function () {
38568
38709
  var handleBeforeUnload = function handleBeforeUnload(event) {
38569
38710
  var message = t$1("are_you_sure_you_want_to_quit_yours_changes_may_not_be_saved");
@@ -38584,9 +38725,99 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
38584
38725
  var newValues = _resetAllCategoriesAndQuestionTypesBySubject(values, val);
38585
38726
  setValues(newValues);
38586
38727
  };
38728
+ useEffect(function () {
38729
+ if (!valuesTextbook.current && isFirstLoadRef.current && !_$8.isEqual(values, DEFAULT_TEXTBOOK_REQUEST)) {
38730
+ valuesTextbook.current = _$8.cloneDeep(values);
38731
+ isFirstLoadRef.current = false;
38732
+ }
38733
+ }, [values]);
38734
+ var _handleSave = function handleSave(valuesProps) {
38735
+ try {
38736
+ var _temp = _finallyRethrows(function () {
38737
+ return _catch(function () {
38738
+ isProcessingRef.current = true;
38739
+ setSaveStatus(PrintStatus.Saving);
38740
+ var valuesToSave = valuesProps || values;
38741
+ return Promise.resolve(handleSaveData(valuesToSave)).then(function () {
38742
+ valuesTextbook.current = _$8.cloneDeep(valuesToSave);
38743
+ var now = Date.now();
38744
+ savedRunRef.current = now;
38745
+ runTimeRef.current = now;
38746
+ setSaveStatus(PrintStatus.Saved);
38747
+ });
38748
+ }, function (error) {
38749
+ setSaveStatus(PrintStatus.Idle);
38750
+ console.error(error);
38751
+ });
38752
+ }, function (_wasThrown, _result) {
38753
+ isProcessingRef.current = false;
38754
+ if (pendingValuesRef.current) {
38755
+ if (timeoutRef.current) {
38756
+ clearTimeout(timeoutRef.current);
38757
+ }
38758
+ timeoutRef.current = setTimeout(function () {
38759
+ timeoutRef.current = null;
38760
+ var pendingValues = pendingValuesRef.current;
38761
+ if (pendingValues) {
38762
+ _handleSave(pendingValues);
38763
+ pendingValuesRef.current = null;
38764
+ }
38765
+ }, SAVE_TIME_INTERVAL_IN_MILLISECONDS);
38766
+ }
38767
+ if (_wasThrown) throw _result;
38768
+ return _result;
38769
+ });
38770
+ return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
38771
+ } catch (e) {
38772
+ return Promise.reject(e);
38773
+ }
38774
+ };
38775
+ useEffect(function () {
38776
+ var now = Date.now();
38777
+ if (valuesTextbook.current && !_$8.isEqual(values, valuesTextbook.current)) setLastEdited(now);
38778
+ if (!_$8.isEmpty(errors) || !valuesTextbook.current || !(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id)) return;
38779
+ if (valuesTextbook.current && _$8.isEqual(values, valuesTextbook.current)) return;
38780
+ if (isProcessingRef.current) {
38781
+ pendingValuesRef.current = _$8.cloneDeep(values);
38782
+ return;
38783
+ }
38784
+ var timeSinceLastRun = now - runTimeRef.current;
38785
+ var maxTime = SAVE_TIME_INTERVAL_IN_MILLISECONDS + SAVE_TIME_MAX_DIFF_IN_MILLISECONDS;
38786
+ if (timeSinceLastRun > maxTime) {
38787
+ runTimeRef.current = now;
38788
+ timeSinceLastRun = 0;
38789
+ }
38790
+ if (timeSinceLastRun >= SAVE_TIME_INTERVAL_IN_MILLISECONDS) {
38791
+ if (timeoutRef.current) {
38792
+ clearTimeout(timeoutRef.current);
38793
+ timeoutRef.current = null;
38794
+ pendingValuesRef.current = null;
38795
+ }
38796
+ _handleSave();
38797
+ } else {
38798
+ pendingValuesRef.current = _$8.cloneDeep(values);
38799
+ var intevalTime = SAVE_TIME_INTERVAL_IN_MILLISECONDS - timeSinceLastRun;
38800
+ timeoutRef.current = setTimeout(function () {
38801
+ timeoutRef.current = null;
38802
+ var pendingValues = pendingValuesRef.current;
38803
+ if (pendingValues) {
38804
+ clearTimeout(timeoutRef.current);
38805
+ _handleSave(pendingValues);
38806
+ pendingValuesRef.current = null;
38807
+ }
38808
+ }, intevalTime);
38809
+ }
38810
+ return function () {
38811
+ if (timeoutRef.current) {
38812
+ clearTimeout(timeoutRef.current);
38813
+ }
38814
+ };
38815
+ }, [values, errors]);
38587
38816
  var inforErrors = errors.coverImage || errors.grade || errors.isbn || errors.preparedType || errors.publicationDate || errors.publisher;
38588
38817
  var contentsErrors = errors.chapters;
38589
38818
  var textbookOwnersErrors = errors.textbookOwners;
38819
+ var hasError = !_$8.isEmpty(errors);
38820
+ var isSaved = !lastEdited || _$8.isEqual(values, (_valuesTextbook$curre = valuesTextbook.current) != null ? _valuesTextbook$curre : {});
38590
38821
  return React__default.createElement(Form, null, React__default.createElement(Stack, {
38591
38822
  direction: "column",
38592
38823
  gap: 3
@@ -38674,7 +38905,45 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
38674
38905
  }), React__default.createElement(FormLabel, {
38675
38906
  htmlFor: "type",
38676
38907
  className: "text-center"
38677
- }, t$1("math"))))), React__default.createElement(Box, null, React__default.createElement(Button, {
38908
+ }, t$1("math"))))), React__default.createElement(Stack, {
38909
+ flexDirection: "row",
38910
+ gap: "8px"
38911
+ }, !!(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id) && React__default.createElement(Stack, {
38912
+ padding: "6px 12px",
38913
+ sx: {
38914
+ transition: "opacity 0.3s ease",
38915
+ opacity: saveStatus === PrintStatus.Idle && isSaved ? 0 : 1,
38916
+ pointerEvents: "none",
38917
+ gap: "8px",
38918
+ flexDirection: "row",
38919
+ justifyContent: "center",
38920
+ alignItems: "center"
38921
+ }
38922
+ }, saveStatus === PrintStatus.Saving && React__default.createElement(AiOutlineLoading3Quarters, {
38923
+ style: {
38924
+ animation: "spin 1s linear infinite"
38925
+ }
38926
+ }), saveStatus === PrintStatus.Saved && isSaved && React__default.createElement(IoCheckmark, null), saveStatus !== PrintStatus.Saving && !isSaved && React__default.createElement(Fragment$1, null, hasError ? React__default.createElement(MdError, {
38927
+ color: red[900]
38928
+ }) : React__default.createElement(FaClockRotateLeft, {
38929
+ size: "14px"
38930
+ })), React__default.createElement(Typography, {
38931
+ sx: {
38932
+ color: theme.palette.grey[700],
38933
+ fontSize: "14px",
38934
+ display: "flex",
38935
+ alignItems: "center",
38936
+ gap: 1,
38937
+ "@keyframes spin": {
38938
+ "0%": {
38939
+ transform: "rotate(0deg)"
38940
+ },
38941
+ "100%": {
38942
+ transform: "rotate(360deg)"
38943
+ }
38944
+ }
38945
+ }
38946
+ }, saveStatus === PrintStatus.Saving && t$1("saving"), saveStatus === PrintStatus.Saved && isSaved && t$1("all_changes_saved"), saveStatus !== PrintStatus.Saving && !isSaved && t$1("all_changes_are_not_saved_yet"))), React__default.createElement(Button, {
38678
38947
  type: "submit",
38679
38948
  sx: {
38680
38949
  width: "fit-content"
@@ -38781,6 +39050,7 @@ var PreparedTextbookView = function PreparedTextbookView(_ref) {
38781
39050
  isSuperAdminUser = _useTextbookManagemen.isSuperAdminUser,
38782
39051
  isAdmin = _useTextbookManagemen.isAdmin,
38783
39052
  coverImage = _useTextbookManagemen.coverImage,
39053
+ handleSaveData = _useTextbookManagemen.handleSaveData,
38784
39054
  selectedTextbook = _useTextbookManagemen.selectedTextbook,
38785
39055
  handleSubmit = _useTextbookManagemen.handleSubmit,
38786
39056
  handleUploadImage = _useTextbookManagemen.handleUploadImage;
@@ -38803,7 +39073,9 @@ var PreparedTextbookView = function PreparedTextbookView(_ref) {
38803
39073
  isAdmin: isAdmin,
38804
39074
  isSuperAdmin: isSuperAdmin,
38805
39075
  selected: selected,
39076
+ handleSaveData: handleSaveData,
38806
39077
  textbookId: textbookId,
39078
+ selectedTextbook: selectedTextbook,
38807
39079
  onChangeTab: handleChangeTab,
38808
39080
  onUploadImage: handleUploadImage,
38809
39081
  coverImage: coverImage,
@@ -40321,6 +40593,491 @@ var singleLogo = function singleLogo(_ref) {
40321
40593
  }))));
40322
40594
  };
40323
40595
 
40596
+ var TimerItem = function TimerItem(_ref) {
40597
+ var data = _ref.data,
40598
+ seconds = _ref.seconds,
40599
+ loading = _ref.loading,
40600
+ activeTimerId = _ref.activeTimerId,
40601
+ onStartOrPauseTimer = _ref.onStartOrPauseTimer;
40602
+ var theme = useTheme();
40603
+ var _useTranslation = useTranslation(),
40604
+ t = _useTranslation.t;
40605
+ var handleStartOrPauseTimer = function handleStartOrPauseTimer() {
40606
+ onStartOrPauseTimer(data);
40607
+ };
40608
+ var isStarted = activeTimerId === data.id && data.status === SubjectTimerStatus.Started;
40609
+ var displayedTime = useMemo(function () {
40610
+ switch (data.status) {
40611
+ case SubjectTimerStatus.Started:
40612
+ return activeTimerId !== data.id ? formatTime$2(Math.floor(data.duration / 1000), t) : formatTime$2(seconds != null ? seconds : 0, t);
40613
+ case SubjectTimerStatus.NotStarted:
40614
+ return t("press_to_start");
40615
+ default:
40616
+ return formatTime$2(Math.floor(data.duration / 1000), t);
40617
+ }
40618
+ }, [data.id, data.status, data.duration, seconds, activeTimerId, t]);
40619
+ return React__default.createElement(MenuItem, {
40620
+ className: "" + styles["timer-menu-item"],
40621
+ sx: {
40622
+ py: 1,
40623
+ bgcolor: theme.palette.background.paper,
40624
+ borderRadius: 0.75,
40625
+ minHeight: "52px"
40626
+ },
40627
+ disabled: loading,
40628
+ onClick: handleStartOrPauseTimer
40629
+ }, React__default.createElement(Stack, {
40630
+ direction: "row",
40631
+ gap: 1,
40632
+ sx: {
40633
+ justifyContent: "space-between",
40634
+ alignItems: "center",
40635
+ width: "100%"
40636
+ }
40637
+ }, React__default.createElement(Typography, {
40638
+ className: styles["subject-name"] + " " + styles["truncate"],
40639
+ fontSize: "14px",
40640
+ fontWeight: 600
40641
+ }, data.name), React__default.createElement(Box, {
40642
+ sx: {
40643
+ display: "flex",
40644
+ alignItems: "center",
40645
+ gap: 1.5
40646
+ }
40647
+ }, React__default.createElement(Typography, {
40648
+ className: "" + styles["duration"],
40649
+ sx: {
40650
+ color: isStarted ? theme.palette.common.black : theme.palette.success.light,
40651
+ fontSize: "14px",
40652
+ fontWeight: 700
40653
+ }
40654
+ }, displayedTime), !isStarted && React__default.createElement(Box, {
40655
+ className: "" + styles["icon-start"]
40656
+ }, React__default.createElement(IoPlayCircleSharp, {
40657
+ size: 20
40658
+ })))));
40659
+ };
40660
+ var TOTAL_SECONDS_IN_A_MINUTE = 60;
40661
+ var TOTAL_SECONDS_IN_AN_HOUR = 60 * 60;
40662
+ var formatTime$2 = function formatTime(totalSeconds, t) {
40663
+ var hours = Math.floor(totalSeconds / TOTAL_SECONDS_IN_AN_HOUR);
40664
+ var minutes = Math.floor(totalSeconds % TOTAL_SECONDS_IN_AN_HOUR / TOTAL_SECONDS_IN_A_MINUTE);
40665
+ var seconds = totalSeconds % TOTAL_SECONDS_IN_A_MINUTE;
40666
+ if (hours > 0) {
40667
+ return "" + hours.toString().padStart(2, "0") + t("hour_h") + " " + minutes.toString().padStart(2, "0") + t("minutes") + " " + seconds.toString().padStart(2, "0") + t("seconds");
40668
+ }
40669
+ if (minutes > 0) {
40670
+ return "" + minutes.toString().padStart(2, "0") + t("minutes") + " " + seconds.toString().padStart(2, "0") + t("seconds");
40671
+ }
40672
+ return "" + seconds.toString().padStart(2, "0") + t("seconds");
40673
+ };
40674
+
40675
+ var TimerCountItem = function TimerCountItem(_ref) {
40676
+ var data = _ref.data,
40677
+ activeTimerId = _ref.activeTimerId,
40678
+ onChangeTime = _ref.onChangeTime;
40679
+ var requestAnimationRef = useRef(null);
40680
+ var user = useSelector(function (state) {
40681
+ var _state$common;
40682
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
40683
+ });
40684
+ useEffect(function () {
40685
+ if (data.status !== SubjectTimerStatus.Started || !(user !== null && user !== void 0 && user.academyDomain) && !(user !== null && user !== void 0 && user.isLearningSpace) || data.id !== activeTimerId) return;
40686
+ var _animate = function animate() {
40687
+ var startTime = data.startTime,
40688
+ lastResumeTime = data.lastResumeTime,
40689
+ duration = data.duration;
40690
+ var startOfTime = lastResumeTime !== DATE_TIME_MIN_VALUE ? lastResumeTime : startTime;
40691
+ if (startOfTime === DATE_TIME_MIN_VALUE) return;
40692
+ var time = getCountTime(startOfTime, Math.floor(duration / 1000));
40693
+ if (typeof time !== "number") {
40694
+ onChangeTime(data, undefined);
40695
+ return;
40696
+ }
40697
+ onChangeTime(data, time);
40698
+ requestAnimationRef.current = requestAnimationFrame(_animate);
40699
+ };
40700
+ requestAnimationRef.current = requestAnimationFrame(_animate);
40701
+ return function () {
40702
+ !!requestAnimationRef.current && cancelAnimationFrame(requestAnimationRef.current);
40703
+ };
40704
+ }, [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]);
40705
+ return React__default.createElement(Fragment$1, null);
40706
+ };
40707
+
40708
+ var formatDate = function formatDate(t, date) {
40709
+ return utcToLocalTime(date, t("date_format"));
40710
+ };
40711
+ var TimerDropdown = function TimerDropdown() {
40712
+ var _user$academyDomain$t, _user$academyDomain, _user$academyDomain$t2;
40713
+ var _useTranslation = useTranslation(),
40714
+ t = _useTranslation.t;
40715
+ var theme = useTheme();
40716
+ var user = useSelector(function (state) {
40717
+ var _state$common;
40718
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
40719
+ });
40720
+ var _useState = useState(null),
40721
+ open = _useState[0],
40722
+ setOpen = _useState[1];
40723
+ var _useState2 = useState([]),
40724
+ timers = _useState2[0],
40725
+ setTimers = _useState2[1];
40726
+ var _useState3 = useState(),
40727
+ seconds = _useState3[0],
40728
+ setSeconds = _useState3[1];
40729
+ var _useState4 = useState(),
40730
+ activeTimerId = _useState4[0],
40731
+ setActiveTimerId = _useState4[1];
40732
+ var _useState5 = useState(false),
40733
+ loadingItem = _useState5[0],
40734
+ setLoadingItem = _useState5[1];
40735
+ var _useState6 = useState(false),
40736
+ isFetching = _useState6[0],
40737
+ setFetching = _useState6[1];
40738
+ var fetchedRef = useRef();
40739
+ 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 : "";
40740
+ var handleChangeTime = function handleChangeTime(data, time) {
40741
+ if (!(user !== null && user !== void 0 && user.id) || !academyDomain && !(user !== null && user !== void 0 && user.isLearningSpace)) return;
40742
+ if (academyDomain !== fetchedRef.current && data.id !== activeTimerId) return;
40743
+ setSeconds(time);
40744
+ var key = user.id + "-" + data.id + "-" + SUBJECT_TIMER_KEY + academyDomain;
40745
+ saveDuration(key, time * 1000);
40746
+ };
40747
+ var handleOpen = function handleOpen(event) {
40748
+ setOpen(event.currentTarget);
40749
+ };
40750
+ var handleClose = function handleClose() {
40751
+ setOpen(null);
40752
+ };
40753
+ var handleStartOrPauseTimer = function handleStartOrPauseTimer(data) {
40754
+ try {
40755
+ var _temp2 = function _temp2(_result3) {
40756
+ if (_exit) return _result3;
40757
+ setLoadingItem(false);
40758
+ };
40759
+ var _exit = false;
40760
+ var isActive = activeTimerId === data.id;
40761
+ var isPaused = data.status === SubjectTimerStatus.Paused;
40762
+ setLoadingItem(true);
40763
+ var _temp = _catch(function () {
40764
+ return Promise.resolve(handlePauseAllTimers(data.id)).then(function () {
40765
+ return function () {
40766
+ if (data.recordId) {
40767
+ return function () {
40768
+ if (!isActive && !isPaused) {
40769
+ setActiveTimerId(data.id);
40770
+ setTimers(function (timers) {
40771
+ return timers.map(function (timer) {
40772
+ return timer.id === data.id ? _extends({}, timer, {
40773
+ lastResumeTime: moment().utc().toISOString()
40774
+ }) : timer;
40775
+ });
40776
+ });
40777
+ setLoadingItem(false);
40778
+ _exit = true;
40779
+ } else {
40780
+ return Promise.resolve(pauseStudentSubjectApi(data.id, data.recordId, {
40781
+ status: isPaused ? SubjectTimerStatus.Started : SubjectTimerStatus.Paused,
40782
+ startTime: isPaused ? moment().utc().valueOf() : 0,
40783
+ pauseTime: !isPaused ? moment().utc().valueOf() : 0,
40784
+ duration: isActive && seconds ? seconds * 1000 : data.duration
40785
+ })).then(function (res) {
40786
+ setTimers(function (timers) {
40787
+ return timers.map(function (timer) {
40788
+ return timer.id === data.id ? res.data : timer;
40789
+ });
40790
+ });
40791
+ setActiveTimerId(!isPaused && isActive ? undefined : data.id);
40792
+ });
40793
+ }
40794
+ }();
40795
+ } else {
40796
+ return Promise.resolve(startStudentSubjectTimerApi(data.id)).then(function (res) {
40797
+ setTimers(function (timers) {
40798
+ return timers.map(function (timer) {
40799
+ return timer.id === data.id ? res.data : timer;
40800
+ });
40801
+ });
40802
+ setActiveTimerId(!isPaused && isActive ? undefined : data.id);
40803
+ });
40804
+ }
40805
+ }();
40806
+ });
40807
+ }, function () {
40808
+ toast.error(t(isPaused ? "failed_to_start_the_subject_name" : "failed_to_pause_the_subject_name", {
40809
+ name: data.name
40810
+ }));
40811
+ });
40812
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
40813
+ } catch (e) {
40814
+ return Promise.reject(e);
40815
+ }
40816
+ };
40817
+ var handlePauseAllTimers = function handlePauseAllTimers(exceptId) {
40818
+ try {
40819
+ !exceptId && setLoadingItem(true);
40820
+ var tasks = timers.filter(function (i) {
40821
+ return i.status === SubjectTimerStatus.Started && i.id !== exceptId;
40822
+ }).map(function (i) {
40823
+ return handlePauseTimer(i);
40824
+ });
40825
+ return Promise.resolve(Promise.all(tasks)).then(function () {
40826
+ !exceptId && setLoadingItem(false);
40827
+ });
40828
+ } catch (e) {
40829
+ return Promise.reject(e);
40830
+ }
40831
+ };
40832
+ var handlePauseTimer = function handlePauseTimer(data, updateState) {
40833
+ if (updateState === void 0) {
40834
+ updateState = true;
40835
+ }
40836
+ try {
40837
+ if (data.status === SubjectTimerStatus.Paused) return Promise.resolve(data);
40838
+ return Promise.resolve(_catch(function () {
40839
+ return Promise.resolve(pauseStudentSubjectApi(data.id, data.recordId, {
40840
+ status: SubjectTimerStatus.Paused,
40841
+ duration: activeTimerId === data.id && seconds ? seconds * 1000 : data.duration,
40842
+ pauseTime: moment().utc().valueOf()
40843
+ })).then(function (res) {
40844
+ if (updateState) setTimers(function (state) {
40845
+ return state.map(function (i) {
40846
+ return i.id === data.id ? res.data : i;
40847
+ });
40848
+ });
40849
+ return res.data;
40850
+ });
40851
+ }, function () {
40852
+ activeTimerId === data.id && toast.error(t("failed_to_pause_the_subject_name", {
40853
+ name: data.name
40854
+ }));
40855
+ }));
40856
+ } catch (e) {
40857
+ return Promise.reject(e);
40858
+ }
40859
+ };
40860
+ var getDataFromLocalStorage = useCallback(function (items) {
40861
+ if (fetchedRef.current !== academyDomain) return [];
40862
+ return items.map(function (item) {
40863
+ var key = (user === null || user === void 0 ? void 0 : user.id) + "-" + item.id + "-" + SUBJECT_TIMER_KEY + academyDomain;
40864
+ var duration = getLocalDuration(key, item);
40865
+ var lastResumeTime = moment().utc().toISOString();
40866
+ return _extends({}, item, {
40867
+ duration: duration !== null ? duration : item.duration,
40868
+ lastResumeTime: lastResumeTime
40869
+ });
40870
+ });
40871
+ }, [user === null || user === void 0 ? void 0 : user.id, academyDomain]);
40872
+ useEffect(function () {
40873
+ var fetchData = function fetchData() {
40874
+ try {
40875
+ var _temp4 = function _temp4() {
40876
+ setFetching(false);
40877
+ };
40878
+ if (!(user !== null && user !== void 0 && user.id) || !academyDomain && !(user !== null && user !== void 0 && user.isLearningSpace)) return Promise.resolve();
40879
+ if (fetchedRef.current == academyDomain && !open) return Promise.resolve();
40880
+ setFetching(true);
40881
+ var _temp3 = _catch(function () {
40882
+ return Promise.resolve(getStudentSubjectListApi()).then(function (res) {
40883
+ var _items$find;
40884
+ var _res$data$items = res.data.items,
40885
+ items = _res$data$items === void 0 ? [] : _res$data$items;
40886
+ fetchedRef.current = academyDomain;
40887
+ setTimers(getDataFromLocalStorage(items));
40888
+ setActiveTimerId((_items$find = items.find(function (i) {
40889
+ return i.status === SubjectTimerStatus.Started;
40890
+ })) === null || _items$find === void 0 ? void 0 : _items$find.id);
40891
+ });
40892
+ }, function (error) {
40893
+ toast.error(getErrorMessage(t, error));
40894
+ });
40895
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
40896
+ } catch (e) {
40897
+ return Promise.reject(e);
40898
+ }
40899
+ };
40900
+ fetchData();
40901
+ }, [t, getDataFromLocalStorage, user === null || user === void 0 ? void 0 : user.isLearningSpace, open]);
40902
+ var today = formatDate(t);
40903
+ var isRunning = timers.some(function (timer) {
40904
+ return timer.status === SubjectTimerStatus.Started;
40905
+ });
40906
+ var selectedTimer = timers.find(function (i) {
40907
+ return i.id === activeTimerId;
40908
+ });
40909
+ return React__default.createElement(Fragment$1, null, React__default.createElement(IconButton$1, {
40910
+ onClick: handleOpen,
40911
+ sx: {
40912
+ width: 44,
40913
+ height: 44,
40914
+ mx: 1,
40915
+ borderRadius: "6px",
40916
+ padding: "8px",
40917
+ background: !isRunning ? grey[50] : green[100],
40918
+ "&: hover": {
40919
+ background: !isRunning ? grey[200] : green[200]
40920
+ }
40921
+ }
40922
+ }, React__default.createElement(Stack, {
40923
+ justifyContent: "center",
40924
+ alignItems: "center",
40925
+ width: "100%",
40926
+ height: "100%",
40927
+ sx: {
40928
+ borderRadius: "50%",
40929
+ backgroundColor: "#FFF"
40930
+ }
40931
+ }, React__default.createElement(IoTimer, {
40932
+ color: !isRunning ? grey[700] : green[500],
40933
+ size: "16.25px"
40934
+ }))), selectedTimer && React__default.createElement(TimerCountItem, {
40935
+ data: selectedTimer,
40936
+ activeTimerId: activeTimerId,
40937
+ onChangeTime: handleChangeTime
40938
+ }), React__default.createElement(Popover$1, {
40939
+ open: !!open,
40940
+ anchorEl: open,
40941
+ onClose: handleClose,
40942
+ anchorOrigin: {
40943
+ vertical: "bottom",
40944
+ horizontal: "right"
40945
+ },
40946
+ transformOrigin: {
40947
+ vertical: "top",
40948
+ horizontal: "right"
40949
+ },
40950
+ slotProps: {
40951
+ paper: {
40952
+ sx: {
40953
+ px: 2,
40954
+ mt: 1,
40955
+ ml: 0.75,
40956
+ width: 320,
40957
+ borderRadius: 2,
40958
+ boxShadow: 3,
40959
+ bgcolor: theme.palette.grey[50]
40960
+ }
40961
+ }
40962
+ }
40963
+ }, React__default.createElement(Box, {
40964
+ sx: {
40965
+ py: 2,
40966
+ display: "flex",
40967
+ alignItems: "center",
40968
+ justifyContent: "space-between"
40969
+ }
40970
+ }, React__default.createElement(Box, {
40971
+ sx: {
40972
+ display: "flex",
40973
+ gap: 1,
40974
+ alignItems: "center"
40975
+ }
40976
+ }, React__default.createElement(Box, {
40977
+ display: "flex",
40978
+ alignItems: "center"
40979
+ }, React__default.createElement(IoTimer, null)), React__default.createElement(Typography, {
40980
+ variant: "subtitle1",
40981
+ fontWeight: "bold",
40982
+ fontSize: "14px"
40983
+ }, t("study_timer"))), React__default.createElement(Typography, {
40984
+ color: "textSecondary",
40985
+ whiteSpace: "nowrap",
40986
+ fontSize: "14px"
40987
+ }, today)), React__default.createElement(Divider, {
40988
+ sx: {
40989
+ bgcolor: theme.palette.grey[700]
40990
+ }
40991
+ }), React__default.createElement(Stack, {
40992
+ className: "" + styles["timer-menu"],
40993
+ gap: 1.5,
40994
+ flexDirection: "column",
40995
+ sx: {
40996
+ py: 2,
40997
+ maxHeight: "360px"
40998
+ }
40999
+ }, !isFetching && React__default.createElement(ListView, {
41000
+ data: timers,
41001
+ render: function render(item, index) {
41002
+ return React__default.createElement(TimerItem, {
41003
+ key: index,
41004
+ data: item,
41005
+ loading: loadingItem,
41006
+ seconds: activeTimerId === item.id ? seconds : undefined,
41007
+ activeTimerId: activeTimerId,
41008
+ onStartOrPauseTimer: handleStartOrPauseTimer
41009
+ });
41010
+ }
41011
+ }), isFetching && React__default.createElement(Stack, {
41012
+ sx: {
41013
+ width: "100%",
41014
+ py: 2
41015
+ },
41016
+ justifyContent: "center",
41017
+ alignItems: "center"
41018
+ }, React__default.createElement(Typography, {
41019
+ className: "text-muted"
41020
+ }, React__default.createElement(CircularProgress, {
41021
+ size: "16px",
41022
+ color: "success"
41023
+ }))), !timers.length && !isFetching && React__default.createElement(Box, null, React__default.createElement(Typography, {
41024
+ className: "text-muted"
41025
+ }, t("no_data")))), React__default.createElement(Divider, {
41026
+ sx: {
41027
+ bgcolor: theme.palette.grey[700]
41028
+ }
41029
+ }), React__default.createElement(Box, {
41030
+ sx: {
41031
+ p: 2,
41032
+ textAlign: "right"
41033
+ }
41034
+ }, React__default.createElement(Button, {
41035
+ disableTouchRipple: true,
41036
+ onClick: function onClick() {
41037
+ return handlePauseAllTimers();
41038
+ },
41039
+ disabled: loadingItem,
41040
+ sx: {
41041
+ fontWeight: 700,
41042
+ color: theme.palette.success.main,
41043
+ padding: "8px 12px",
41044
+ bgcolor: theme.palette.background.paper,
41045
+ "&:hover": {
41046
+ bgcolor: theme.palette.grey[200]
41047
+ },
41048
+ "&:disabled": {
41049
+ opacity: 0.5
41050
+ }
41051
+ }
41052
+ }, loadingItem ? t("saving") : t("pause")))));
41053
+ };
41054
+ var SUBJECT_TIMER_KEY = "stk";
41055
+ var saveDuration = function saveDuration(key, duration) {
41056
+ localStorage.setItem(key, "" + duration);
41057
+ };
41058
+ var getLocalDuration = function getLocalDuration(key, timer) {
41059
+ try {
41060
+ var res = localStorage.getItem(key);
41061
+ var duration = +(res != null ? res : "");
41062
+ if (!duration || Number.isNaN(duration) || duration <= timer.duration) return null;
41063
+ return duration;
41064
+ } catch (error) {
41065
+ return null;
41066
+ }
41067
+ };
41068
+
41069
+ var HeaderLink = function HeaderLink(_ref) {
41070
+ var data = _ref.data,
41071
+ render = _ref.render;
41072
+ var activePaths = data.activePaths,
41073
+ path = data.path;
41074
+ var pathname = window.location.pathname.toLowerCase();
41075
+ var isActive = (activePaths === null || activePaths === void 0 ? void 0 : activePaths.some(function (a) {
41076
+ return pathname.startsWith(a);
41077
+ })) || pathname.startsWith(path);
41078
+ return React__default.createElement(Fragment$1, null, render(data, isActive));
41079
+ };
41080
+
40324
41081
  var Header = function Header(_ref) {
40325
41082
  var academyListRoute = _ref.academyListRoute,
40326
41083
  homeRoute = _ref.homeRoute,
@@ -40443,7 +41200,9 @@ var Header = function Header(_ref) {
40443
41200
  justifyContent: "center",
40444
41201
  height: "100%",
40445
41202
  className: styles["logo"] + " d-flex d-lg-none"
40446
- }, React__default.createElement(singleLogo, null))), React__default.createElement(Stack, {
41203
+ }, React__default.createElement(singleLogo, null))), !isTeacherSide && React__default.createElement(Stack, {
41204
+ className: "me-2 ms-2"
41205
+ }, React__default.createElement(TimerDropdown, null)), React__default.createElement(Stack, {
40447
41206
  className: "me-2",
40448
41207
  display: "none"
40449
41208
  }, React__default.createElement(TheLanguageDropdown, null)), showAnnouncement && renderNotificationLink && React__default.createElement(AnnouncementContainer, {
@@ -40452,17 +41211,6 @@ var Header = function Header(_ref) {
40452
41211
  renderViewNoteLink: renderViewNoteLink
40453
41212
  })));
40454
41213
  };
40455
- var HeaderLink = function HeaderLink(_ref3) {
40456
- var data = _ref3.data,
40457
- render = _ref3.render;
40458
- var activePaths = data.activePaths,
40459
- path = data.path;
40460
- var pathname = location.pathname.toLowerCase();
40461
- var isActive = (activePaths === null || activePaths === void 0 ? void 0 : activePaths.some(function (a) {
40462
- return pathname.startsWith(a);
40463
- })) || pathname.startsWith(path);
40464
- return React__default.createElement(Fragment$1, null, render(data, isActive));
40465
- };
40466
41214
 
40467
41215
  var useLayoutContext = function useLayoutContext(role, showLoadingAcademy, domain) {
40468
41216
  var _currentPusher$connec2;
@@ -40627,5 +41375,5 @@ var LayoutContext = function LayoutContext(_ref) {
40627
41375
  });else return React__default.createElement(Fragment$1, null, children);
40628
41376
  };
40629
41377
 
40630
- 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 };
41378
+ 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 };
40631
41379
  //# sourceMappingURL=index.modern.js.map