touchstudy-core 0.1.168 → 0.1.170

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/components/Selectors/StudentSelector.d.ts +3 -1
  2. package/dist/components/Selectors/TeacherSelector.d.ts +15 -0
  3. package/dist/containers/Announcements/apiClients/announcementService.d.ts +5 -0
  4. package/dist/containers/Announcements/components/AnnouncementItem.d.ts +11 -0
  5. package/dist/containers/Announcements/configs/constants.d.ts +3 -0
  6. package/dist/containers/Announcements/configs/enums.d.ts +8 -0
  7. package/dist/containers/Announcements/configs/fns.d.ts +10 -0
  8. package/dist/containers/Announcements/configs/types.d.ts +24 -0
  9. package/dist/containers/Announcements/configs/utils.d.ts +3 -0
  10. package/dist/containers/Announcements/index.d.ts +5 -0
  11. package/dist/containers/Announcements/views/AnnouncementContainer.d.ts +10 -0
  12. package/dist/containers/Announcements/views/AnnouncementList.d.ts +12 -0
  13. package/dist/containers/Notes/components/GeneralNoteDialog.d.ts +4 -0
  14. package/dist/containers/Notes/components/NoteItemList.d.ts +14 -0
  15. package/dist/containers/Notes/components/NotetabPanel.d.ts +8 -0
  16. package/dist/containers/Notes/components/TeacherAdminNoteDialog.d.ts +4 -0
  17. package/dist/containers/Notes/configs/constants.d.ts +27 -0
  18. package/dist/containers/Notes/configs/enums.d.ts +6 -2
  19. package/dist/containers/Notes/configs/fns.d.ts +2 -0
  20. package/dist/containers/Notes/configs/interfaces.d.ts +10 -1
  21. package/dist/containers/Notes/configs/types.d.ts +1 -1
  22. package/dist/containers/Notes/index.d.ts +4 -2
  23. package/dist/containers/Notes/views/NoteList.d.ts +11 -0
  24. package/dist/containers/Notes/views/NoteTabs.d.ts +7 -0
  25. package/dist/containers/StudentInfoDrawer/components/Exam/ExamResultList.d.ts +4 -0
  26. package/dist/containers/StudentInfoDrawer/components/Note/NoteDrawer.d.ts +3 -2
  27. package/dist/containers/StudentInfoDrawer/configs/types.d.ts +2 -2
  28. package/dist/containers/StudentInfoDrawer/index.d.ts +2 -1
  29. package/dist/containers/Textbooks/configs/types.d.ts +3 -3
  30. package/dist/containers/index.d.ts +1 -0
  31. package/dist/index.js +1733 -226
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.modern.js +1742 -237
  34. package/dist/index.modern.js.map +1 -1
  35. package/dist/layouts/Header.d.ts +3 -0
  36. package/dist/layouts/LayoutContext.d.ts +0 -1
  37. package/dist/redux/commons/action.d.ts +1 -1
  38. package/dist/services/noteService.d.ts +2 -0
  39. package/dist/services/teacherService.d.ts +5 -0
  40. package/dist/utils/functions/timeAgo.d.ts +1 -1
  41. package/dist/utils/hooks/useLayoutContext.d.ts +1 -1
  42. package/dist/utils/hooks/useList.d.ts +2 -1
  43. package/dist/utils/hooks/useVirtualList.d.ts +4 -2
  44. package/dist/utils/types/note.d.ts +17 -0
  45. package/package.json +1 -1
@@ -13,10 +13,10 @@ export { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment';
13
13
  import { DemoContainer } from '@mui/x-date-pickers/internals/demo';
14
14
  export { DemoContainer } from '@mui/x-date-pickers/internals/demo';
15
15
  import React__default, { useState, useEffect, Fragment as Fragment$1, useRef, useCallback, useMemo, memo, createElement } from 'react';
16
- import { useTheme, Container, Typography, Stack, List, ListItem, FormGroup, FormControlLabel, Checkbox, Button, Box, Dialog, DialogTitle, IconButton, DialogContent, TextField, DialogActions, useMediaQuery, styled, FormLabel, Pagination, Paper, InputBase, Tooltip, tooltipClasses, Grid, ClickAwayListener, CircularProgress, InputAdornment, Card as Card$1, Avatar, Table, TableHead, TableRow, TableCell, TableBody, Divider, Skeleton, Tabs, Tab, Drawer, tableCellClasses, Accordion, AccordionSummary, AccordionDetails, TableContainer, Switch, RadioGroup, Radio, FormControl, InputLabel, Chip, CardMedia as CardMedia$1, MenuList } from '@mui/material';
16
+ import { useTheme, Container, Typography, Stack, List, ListItem, FormGroup, FormControlLabel, Checkbox, Button, Box, Dialog, DialogTitle, IconButton, DialogContent, TextField, DialogActions, useMediaQuery, styled, FormLabel, Pagination, Paper, InputBase, Tooltip, tooltipClasses, Grid, ClickAwayListener, CircularProgress, InputAdornment, Card as Card$1, Avatar, Table, TableHead, TableRow, TableCell, TableBody, Divider, Skeleton, Tabs, Tab, Drawer, FormControl, RadioGroup, Radio, TableContainer, tableCellClasses, Accordion, AccordionSummary, AccordionDetails, Switch, InputLabel, Chip, ListItemButton, ListItemAvatar, ListItemText, Badge, Popover, CardMedia as CardMedia$1, MenuList } from '@mui/material';
17
17
  import moment from 'moment';
18
18
  export { default as moment } from 'moment';
19
- import { FaSave, FaCaretDown, FaTimes, FaTrash, FaSortUp, FaSortDown, FaPlusCircle, FaCalendar, FaUser, FaBookOpen, FaPlus, FaUpload, FaEye as FaEye$1, FaPencilAlt, FaCheckCircle, FaShare, FaExchangeAlt } from 'react-icons/fa';
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
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';
22
22
  import MButton from '@mui/material/Button';
@@ -46,7 +46,7 @@ import CardActions from '@mui/material/CardActions';
46
46
  import CardContent from '@mui/material/CardContent';
47
47
  import CardMedia from '@mui/material/CardMedia';
48
48
  import { object, string, number, date as date$2, array, mixed } from 'yup';
49
- import { blue, yellow as yellow$1 } from '@mui/material/colors';
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
51
  import { MdVisibilityOff, MdVisibility, MdAutorenew, MdMoreHoriz, MdDownload, MdExpandMore } from 'react-icons/md';
52
52
  import { gapi } from 'gapi-script';
@@ -58,22 +58,23 @@ import Paper$1 from '@mui/material/Paper';
58
58
  import Box$1 from '@mui/material/Box';
59
59
  import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
60
60
  import { DatePicker } from '@mui/x-date-pickers/DatePicker';
61
- import { FaCirclePlus, FaTrashCan, FaEye, FaRotateRight, FaPencil } from 'react-icons/fa6';
61
+ import { FaCirclePlus, FaTrashCan, FaEye as FaEye$1, FaRotateRight, FaPencil, FaClockRotateLeft } from 'react-icons/fa6';
62
62
  import { CgArrowsExchange } from 'react-icons/cg';
63
+ import { HiOutlinePencilAlt } from 'react-icons/hi';
64
+ import TableCell$1 from '@mui/material/TableCell';
65
+ import TableRow$1 from '@mui/material/TableRow';
63
66
  import html2pdf from 'html2pdf.js';
64
67
  import Slider from 'react-slick';
65
68
  import { GrNext, GrPrevious } from 'react-icons/gr';
66
- import { HiOutlinePencilAlt } from 'react-icons/hi';
67
69
  import Table$1 from '@mui/material/Table';
68
70
  import TableBody$1 from '@mui/material/TableBody';
69
- import TableCell$1 from '@mui/material/TableCell';
70
71
  import TableHead$1 from '@mui/material/TableHead';
71
- import TableRow$1 from '@mui/material/TableRow';
72
72
  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 Popover from '@mui/material/Popover';
76
+ import { BsCheckAll } from 'react-icons/bs';
77
+ import Popover$1 from '@mui/material/Popover';
77
78
  import MenuItem from '@mui/material/MenuItem';
78
79
  import { GoArrowSwitch } from 'react-icons/go';
79
80
  import Pusher$1 from 'pusher-js';
@@ -282,7 +283,7 @@ var setLanguage = createAction("common/setLanguage");
282
283
  var reset = createAction("common/reset");
283
284
  var setReFetchUserAcademies = createAction("common/setReFetchUserAcademies");
284
285
  var setConcurrentConnectionPusher = createAction("common/setConcurrentConnectionPusher");
285
- var setReadyRegisterPusher = createAction("common/setReadyRegisterPusher");
286
+ var setTotalUnreadMessages = createAction("common/setTotalUnreadMessages");
286
287
 
287
288
  var initialState = {
288
289
  isLoading: false,
@@ -292,8 +293,8 @@ var initialState = {
292
293
  },
293
294
  user: null,
294
295
  academy: null,
296
+ totalUnreadMessages: 0,
295
297
  isReFetchUserAcademies: false,
296
- isReadyRegisterPusher: false,
297
298
  concurrentConnectionPusher: {
298
299
  pusher: null,
299
300
  academyDomain: "",
@@ -319,8 +320,8 @@ var commonReducer = createReducer(initialState, function (builder) {
319
320
  state.concurrentConnectionPusher.pusher = action.payload.pusher;
320
321
  state.concurrentConnectionPusher.academyDomain = action.payload.academyDomain;
321
322
  state.concurrentConnectionPusher.isRegistered = action.payload.isRegistered;
322
- }).addCase(setReadyRegisterPusher, function (state, action) {
323
- state.isReadyRegisterPusher = action.payload;
323
+ }).addCase(setTotalUnreadMessages, function (state, action) {
324
+ state.totalUnreadMessages = action.payload;
324
325
  });
325
326
  });
326
327
 
@@ -1344,6 +1345,12 @@ var please_reload_this_page_to_continue_using_this_tab_or_close_it = "이 탭을
1344
1345
  var reload_page = "페이지 새로고침";
1345
1346
  var last_attendance_date = "마지막 출석일자";
1346
1347
  var less_than_a_day = "하루 미만";
1348
+ var less_than_a_min = "1분 미만";
1349
+ var just_now = "방금 전";
1350
+ var n_mins_ago = "{{min}}분 전";
1351
+ var n_hours_ago = "{{hour}}시간 전";
1352
+ var one_min_ago = "1분 전";
1353
+ var one_hour_ago = "1시간 전";
1347
1354
  var n_days_ago = "{{day}}일 전";
1348
1355
  var n_months_ago = "{{month}}개월 전";
1349
1356
  var n_years_ago = "{{year}}년 전";
@@ -1513,6 +1520,24 @@ var next_status = "다음 상태";
1513
1520
  var arrival_time = "도착 시간";
1514
1521
  var current_arrival_time = "현재 도착 시간";
1515
1522
  var uppdate_attendance = "출석 현황 수정";
1523
+ var you_have_n_unread_messages = "읽지 않은 메시지가 {{ n }}개 있습니다";
1524
+ var receivers = "수신자";
1525
+ var total_receivers = "총 수신자";
1526
+ var sender = "보내는 사람";
1527
+ var manage_notes = "메모 관리";
1528
+ var notes = "노트";
1529
+ var new_note = "새 노트";
1530
+ var mark_as_read = "읽은 것으로 표시";
1531
+ var view_notes = "노트 보기";
1532
+ var admin_n = "{{admin}} 관리자";
1533
+ var teacher_n = "{{teacher}} 교사";
1534
+ var sent_a_memo = "메모를 보냈습니다";
1535
+ var admin_to_admin = "관리자에서 관리자에게";
1536
+ var teacher_to_admin = "교사에서 관리자에게";
1537
+ var admin_to_teachers = "관리자에서 교사들에게";
1538
+ var teacher_to_teachers = "교사에서 교사들에게";
1539
+ var student_required = "학생은 필수입니다";
1540
+ var teachers_required = "교사가 필요합니다";
1516
1541
  var lang_ko = {
1517
1542
  problem_solving: problem_solving,
1518
1543
  my_story: my_story,
@@ -2494,6 +2519,12 @@ var lang_ko = {
2494
2519
  reload_page: reload_page,
2495
2520
  last_attendance_date: last_attendance_date,
2496
2521
  less_than_a_day: less_than_a_day,
2522
+ less_than_a_min: less_than_a_min,
2523
+ just_now: just_now,
2524
+ n_mins_ago: n_mins_ago,
2525
+ n_hours_ago: n_hours_ago,
2526
+ one_min_ago: one_min_ago,
2527
+ one_hour_ago: one_hour_ago,
2497
2528
  n_days_ago: n_days_ago,
2498
2529
  n_months_ago: n_months_ago,
2499
2530
  n_years_ago: n_years_ago,
@@ -2658,7 +2689,25 @@ var lang_ko = {
2658
2689
  next_status: next_status,
2659
2690
  arrival_time: arrival_time,
2660
2691
  current_arrival_time: current_arrival_time,
2661
- uppdate_attendance: uppdate_attendance
2692
+ uppdate_attendance: uppdate_attendance,
2693
+ you_have_n_unread_messages: you_have_n_unread_messages,
2694
+ receivers: receivers,
2695
+ total_receivers: total_receivers,
2696
+ sender: sender,
2697
+ manage_notes: manage_notes,
2698
+ notes: notes,
2699
+ new_note: new_note,
2700
+ mark_as_read: mark_as_read,
2701
+ view_notes: view_notes,
2702
+ admin_n: admin_n,
2703
+ teacher_n: teacher_n,
2704
+ sent_a_memo: sent_a_memo,
2705
+ admin_to_admin: admin_to_admin,
2706
+ teacher_to_admin: teacher_to_admin,
2707
+ admin_to_teachers: admin_to_teachers,
2708
+ teacher_to_teachers: teacher_to_teachers,
2709
+ student_required: student_required,
2710
+ teachers_required: teachers_required
2662
2711
  };
2663
2712
 
2664
2713
  var problem_solving$1 = "Problem Solving";
@@ -3657,6 +3706,12 @@ var please_reload_this_page_to_continue_using_this_tab_or_close_it$1 = "Please r
3657
3706
  var reload_page$1 = "Reload page";
3658
3707
  var last_attendance_date$1 = "Last attendance date";
3659
3708
  var less_than_a_day$1 = "Less than a day";
3709
+ var less_than_a_min$1 = "Less than a minute";
3710
+ var just_now$1 = "Just now";
3711
+ var n_mins_ago$1 = "{{min}} minutes ago";
3712
+ var n_hours_ago$1 = "{{hour}} hours ago";
3713
+ var one_min_ago$1 = "one minute ago";
3714
+ var one_hour_ago$1 = "one hour ago";
3660
3715
  var n_days_ago$1 = "{{day}} days ago";
3661
3716
  var n_months_ago$1 = "{{month}} months ago";
3662
3717
  var n_years_ago$1 = "{{year}} years ago";
@@ -3827,6 +3882,24 @@ var next_status$1 = "Next status";
3827
3882
  var arrival_time$1 = "Arrival time";
3828
3883
  var current_arrival_time$1 = "Current arrival time";
3829
3884
  var uppdate_attendance$1 = "Update attendance";
3885
+ var you_have_n_unread_messages$1 = "You have {{ n }} unread message(s)";
3886
+ var receivers$1 = "Receivers";
3887
+ var total_receivers$1 = "Total receivers";
3888
+ var sender$1 = "Sender";
3889
+ var manage_notes$1 = "Manage notes";
3890
+ var notes$1 = "Notes";
3891
+ var new_note$1 = "New note";
3892
+ var mark_as_read$1 = "Mark as read";
3893
+ var view_notes$1 = "View notes";
3894
+ var admin_n$1 = "Admin {{admin}}";
3895
+ var teacher_n$1 = "Teacher {{teacher}}";
3896
+ var sent_a_memo$1 = "sent a memo";
3897
+ var admin_to_admin$1 = "Admin to admin";
3898
+ var teacher_to_admin$1 = "Teacher to admin";
3899
+ var admin_to_teachers$1 = "Admin to teachers";
3900
+ var teacher_to_teachers$1 = "Teacher to teachers";
3901
+ var student_required$1 = "Student is required";
3902
+ var teachers_required$1 = "Teachers are required";
3830
3903
  var lang_en = {
3831
3904
  problem_solving: problem_solving$1,
3832
3905
  my_story: my_story$1,
@@ -4809,6 +4882,12 @@ var lang_en = {
4809
4882
  reload_page: reload_page$1,
4810
4883
  last_attendance_date: last_attendance_date$1,
4811
4884
  less_than_a_day: less_than_a_day$1,
4885
+ less_than_a_min: less_than_a_min$1,
4886
+ just_now: just_now$1,
4887
+ n_mins_ago: n_mins_ago$1,
4888
+ n_hours_ago: n_hours_ago$1,
4889
+ one_min_ago: one_min_ago$1,
4890
+ one_hour_ago: one_hour_ago$1,
4812
4891
  n_days_ago: n_days_ago$1,
4813
4892
  n_months_ago: n_months_ago$1,
4814
4893
  n_years_ago: n_years_ago$1,
@@ -4974,7 +5053,25 @@ var lang_en = {
4974
5053
  next_status: next_status$1,
4975
5054
  arrival_time: arrival_time$1,
4976
5055
  current_arrival_time: current_arrival_time$1,
4977
- uppdate_attendance: uppdate_attendance$1
5056
+ uppdate_attendance: uppdate_attendance$1,
5057
+ you_have_n_unread_messages: you_have_n_unread_messages$1,
5058
+ receivers: receivers$1,
5059
+ total_receivers: total_receivers$1,
5060
+ sender: sender$1,
5061
+ manage_notes: manage_notes$1,
5062
+ notes: notes$1,
5063
+ new_note: new_note$1,
5064
+ mark_as_read: mark_as_read$1,
5065
+ view_notes: view_notes$1,
5066
+ admin_n: admin_n$1,
5067
+ teacher_n: teacher_n$1,
5068
+ sent_a_memo: sent_a_memo$1,
5069
+ admin_to_admin: admin_to_admin$1,
5070
+ teacher_to_admin: teacher_to_admin$1,
5071
+ admin_to_teachers: admin_to_teachers$1,
5072
+ teacher_to_teachers: teacher_to_teachers$1,
5073
+ student_required: student_required$1,
5074
+ teachers_required: teachers_required$1
4978
5075
  };
4979
5076
 
4980
5077
  i18n.use(initReactI18next).init({
@@ -6148,8 +6245,12 @@ var NoteSortColumn;
6148
6245
  })(NoteSortColumn || (NoteSortColumn = {}));
6149
6246
  var NoteType;
6150
6247
  (function (NoteType) {
6151
- NoteType[NoteType["Default"] = 0] = "Default";
6152
- NoteType[NoteType["StudentReadable"] = 1] = "StudentReadable";
6248
+ NoteType[NoteType["ToAcademy"] = 0] = "ToAcademy";
6249
+ NoteType[NoteType["ToStudent"] = 1] = "ToStudent";
6250
+ NoteType[NoteType["AdminToAllAdmin"] = 2] = "AdminToAllAdmin";
6251
+ NoteType[NoteType["AdminToAllTeacher"] = 3] = "AdminToAllTeacher";
6252
+ NoteType[NoteType["TeacherToAllAdmin"] = 4] = "TeacherToAllAdmin";
6253
+ NoteType[NoteType["TeacherToTeachers"] = 5] = "TeacherToTeachers";
6153
6254
  })(NoteType || (NoteType = {}));
6154
6255
 
6155
6256
  var SchoolType;
@@ -6321,16 +6422,35 @@ var pushTo = function pushTo(history, data, isReplace) {
6321
6422
  });
6322
6423
  };
6323
6424
 
6324
- var timAgo = function timAgo(date, t) {
6325
- if (date === DATE_MIN_VALUE || date === DATE_TIME_MIN_VALUE) return '';
6425
+ var timAgo = function timAgo(date, t, day) {
6426
+ if (!date || date === DATE_MIN_VALUE || date === DATE_TIME_MIN_VALUE) return '';
6326
6427
  var time = moment.utc(date).local();
6428
+ var years = moment().diff(time, 'years');
6429
+ if (years >= 1) return years >= 2 ? t('n_years_ago', {
6430
+ year: years
6431
+ }) : t("one_year_ago");
6432
+ var months = moment().diff(time, 'months');
6433
+ if (months >= 1) return months >= 2 ? t('n_months_ago', {
6434
+ month: months
6435
+ }) : t("one_month_ago");
6327
6436
  var days = moment().diff(time, 'days');
6328
- if (days === 0) return t('less_than_a_day');
6329
- var months = days / 30;
6330
- var years = months / 12;
6331
- if (years > 0) return years > 1 ? t('n_years_ago') : t("one_year_ago");
6332
- if (months > 0) return months > 1 ? t('n_months_ago') : t("one_month_ago");
6333
- return days > 1 ? t('n_days_ago') : t("one_day_ago");
6437
+ if (days < 1 && !day) return t('less_than_a_day');
6438
+ if (days < 1 && day) {
6439
+ var hours = moment().diff(time, 'hours');
6440
+ if (hours >= 1) return hours >= 2 ? t('n_hours_ago', {
6441
+ hour: hours
6442
+ }) : t("one_hour_ago");
6443
+ var mins = moment().diff(time, 'minutes');
6444
+ if (mins >= 1) return mins >= 2 ? t('n_mins_ago', {
6445
+ min: mins
6446
+ }) : t("one_min_ago");
6447
+ var secs = moment().diff(time, 'seconds');
6448
+ if (secs > 10) return t('less_than_a_min');
6449
+ return t("just_now");
6450
+ }
6451
+ return days >= 2 ? t('n_days_ago', {
6452
+ day: days
6453
+ }) : t("one_day_ago");
6334
6454
  };
6335
6455
 
6336
6456
  var toISOString = (function (time) {
@@ -6920,7 +7040,10 @@ var useLanguage = function useLanguage(history, init) {
6920
7040
  };
6921
7041
  };
6922
7042
 
6923
- var useList = function useList(fetchData, defaultQuery) {
7043
+ var useList = function useList(fetchData, defaultQuery, showLoading) {
7044
+ if (showLoading === void 0) {
7045
+ showLoading = true;
7046
+ }
6924
7047
  var dispatch = useDispatch();
6925
7048
  var _useState = useState(defaultQuery),
6926
7049
  filter = _useState[0],
@@ -6934,6 +7057,9 @@ var useList = function useList(fetchData, defaultQuery) {
6934
7057
  var _useState4 = useState(),
6935
7058
  selectedItem = _useState4[0],
6936
7059
  setSelectedItem = _useState4[1];
7060
+ var _useState5 = useState(false),
7061
+ isLoading = _useState5[0],
7062
+ setIsLoading = _useState5[1];
6937
7063
  var textSearchRef = useRef(null);
6938
7064
  var isFirstLoadRef = useRef(true);
6939
7065
  var _useTranslation = useTranslation(),
@@ -6947,11 +7073,13 @@ var useList = function useList(fetchData, defaultQuery) {
6947
7073
  }
6948
7074
  try {
6949
7075
  var _temp2 = function _temp2() {
6950
- isLoading && dispatch(setLoading(false));
7076
+ isLoading && showLoading && dispatch(setLoading(false));
7077
+ setIsLoading(false);
6951
7078
  };
6952
7079
  if (!fetchData) return Promise.resolve();
6953
7080
  if (isFirstLoadRef.current) isFirstLoadRef.current = false;
6954
- isLoading && dispatch(setLoading(true));
7081
+ isLoading && showLoading && dispatch(setLoading(true));
7082
+ setIsLoading(true);
6955
7083
  var _temp = _catch(function () {
6956
7084
  return Promise.resolve(fetchData(filter)).then(function (res) {
6957
7085
  var _res$data$items = res.data.items,
@@ -6976,10 +7104,6 @@ var useList = function useList(fetchData, defaultQuery) {
6976
7104
  };
6977
7105
  var handleSort = function handleSort(sortColumnName) {
6978
7106
  var sortColumnDirection = OrderType.ASC;
6979
- console.log({
6980
- sortColumnName: typeof sortColumnName,
6981
- filter: typeof filter.sortColumnName
6982
- });
6983
7107
  if (filter.sortColumnName == sortColumnName && filter.sortColumnDirection === OrderType.ASC) sortColumnDirection = OrderType.DESC;
6984
7108
  setFilter(_extends({}, filter, {
6985
7109
  sortColumnName: sortColumnName,
@@ -7012,6 +7136,7 @@ var useList = function useList(fetchData, defaultQuery) {
7012
7136
  getData(isFirstLoadRef.current);
7013
7137
  }, [JSON.stringify(filter)]);
7014
7138
  return {
7139
+ isLoading: isLoading,
7015
7140
  filter: filter,
7016
7141
  textSearchRef: textSearchRef,
7017
7142
  paging: paging,
@@ -7114,36 +7239,26 @@ var useLogin = function useLogin(history, homeAcademyUrl, homeUrl, registerUrl,
7114
7239
  }
7115
7240
  var isAcademy = !!academyDomain || isLearningSpace;
7116
7241
  return Promise.resolve(handleLogin(function () {
7117
- return new Promise(function (resolve, reject) {
7118
- try {
7119
- var _temp3 = _catch(function () {
7120
- return Promise.resolve(isAcademy ? apiLoginGoogle(data, isLearningSpace) : apiLoginGoogleSuperAdmin(data)).then(function (loginResponse) {
7121
- function _temp2() {
7122
- resolve(result);
7123
- }
7124
- var result = loginResponse.data;
7125
- var _temp = function () {
7126
- if (loginResponse.status === 204 && academyDomain) {
7127
- localStorage.removeItem(ACADEMY_DOMAIN);
7128
- localStorage.removeItem(LEARNING_SPACE);
7129
- return Promise.resolve(apiLoginGoogleSuperAdmin(data)).then(function (_apiLoginGoogleSuperA) {
7130
- loginResponse = _apiLoginGoogleSuperA;
7131
- result = loginResponse.data;
7132
- });
7133
- }
7134
- }();
7135
- return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
7136
- });
7137
- }, function (error) {
7138
- !!academyDomain && localStorage.removeItem(ACADEMY_DOMAIN);
7139
- localStorage.removeItem(LEARNING_SPACE);
7140
- reject(error);
7141
- });
7142
- return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(function () {}) : void 0);
7143
- } catch (e) {
7144
- return Promise.reject(e);
7145
- }
7146
- });
7242
+ try {
7243
+ return Promise.resolve(isAcademy ? apiLoginGoogle(data, isLearningSpace) : apiLoginGoogleSuperAdmin(data)).then(function (loginResponse) {
7244
+ var result = loginResponse.data;
7245
+ var _temp = function () {
7246
+ if (loginResponse.status === 204 && academyDomain) {
7247
+ localStorage.removeItem(ACADEMY_DOMAIN);
7248
+ localStorage.removeItem(LEARNING_SPACE);
7249
+ return Promise.resolve(apiLoginGoogleSuperAdmin(data)).then(function (_apiLoginGoogleSuperA) {
7250
+ loginResponse = _apiLoginGoogleSuperA;
7251
+ result = loginResponse.data;
7252
+ });
7253
+ }
7254
+ }();
7255
+ return _temp && _temp.then ? _temp.then(function () {
7256
+ return result;
7257
+ }) : result;
7258
+ });
7259
+ } catch (e) {
7260
+ return Promise.reject(e);
7261
+ }
7147
7262
  }, isStudent, isLogout)).then(function () {});
7148
7263
  } catch (e) {
7149
7264
  return Promise.reject(e);
@@ -7156,21 +7271,14 @@ var useLogin = function useLogin(history, homeAcademyUrl, homeUrl, registerUrl,
7156
7271
  try {
7157
7272
  var isStudent = data.role === Role.Student;
7158
7273
  return Promise.resolve(handleLogin(function () {
7159
- return new Promise(function (resolve, reject) {
7160
- try {
7161
- var _temp4 = _catch(function () {
7162
- return Promise.resolve(!isLearningSpace && !domain ? apiLoginSuperAdminWithAccessToken(data) : apiLoginWithAccessToken(data, isLearningSpace, domain)).then(function (loginResponse) {
7163
- var result = loginResponse.data;
7164
- resolve(result);
7165
- });
7166
- }, function (error) {
7167
- reject(error);
7168
- });
7169
- return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(function () {}) : void 0);
7170
- } catch (e) {
7171
- return Promise.reject(e);
7172
- }
7173
- });
7274
+ try {
7275
+ return Promise.resolve(!isLearningSpace && !domain ? apiLoginSuperAdminWithAccessToken(data) : apiLoginWithAccessToken(data, isLearningSpace, domain)).then(function (loginResponse) {
7276
+ var result = loginResponse.data;
7277
+ return result;
7278
+ });
7279
+ } catch (e) {
7280
+ return Promise.reject(e);
7281
+ }
7174
7282
  }, isStudent, isLogout, superAdminRedirectPath)).then(function () {});
7175
7283
  } catch (e) {
7176
7284
  return Promise.reject(e);
@@ -7181,13 +7289,13 @@ var useLogin = function useLogin(history, homeAcademyUrl, homeUrl, registerUrl,
7181
7289
  isLogout = true;
7182
7290
  }
7183
7291
  try {
7184
- var _temp6 = function _temp6(_result) {
7292
+ var _temp3 = function _temp3(_result) {
7185
7293
  if (_exit) return _result;
7186
7294
  dispatch(setLoading(false));
7187
7295
  };
7188
7296
  var _exit = false;
7189
7297
  dispatch(setLoading(true));
7190
- var _temp5 = _catch(function () {
7298
+ var _temp2 = _catch(function () {
7191
7299
  return Promise.resolve(apiLogin()).then(function (loginResponse) {
7192
7300
  var isFirstLogin = loginResponse.isFirstLogin,
7193
7301
  token = loginResponse.token,
@@ -7211,7 +7319,7 @@ var useLogin = function useLogin(history, homeAcademyUrl, homeUrl, registerUrl,
7211
7319
  alert(getErrorMessage(t, error));
7212
7320
  isLogout && handleSignOut();
7213
7321
  });
7214
- return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
7322
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2));
7215
7323
  } catch (e) {
7216
7324
  return Promise.reject(e);
7217
7325
  }
@@ -8020,7 +8128,8 @@ var getStudentsApi = function getStudentsApi(textSearch) {
8020
8128
  return api.get("" + STUDENT_URL, {
8021
8129
  params: {
8022
8130
  textSearch: textSearch,
8023
- roles: [Role.Admin]
8131
+ roles: [Role.Admin],
8132
+ pageSize: 100
8024
8133
  }
8025
8134
  });
8026
8135
  };
@@ -8031,7 +8140,10 @@ var StudentSelector = function StudentSelector(_ref) {
8031
8140
  externalStudentIds = _ref.externalStudentIds,
8032
8141
  _ref$disabled = _ref.disabled,
8033
8142
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
8034
- title = _ref.title;
8143
+ title = _ref.title,
8144
+ _ref$isMulti = _ref.isMulti,
8145
+ isMulti = _ref$isMulti === void 0 ? true : _ref$isMulti,
8146
+ minSearchLength = _ref.minSearchLength;
8035
8147
  var _useState = useState([]),
8036
8148
  students = _useState[0],
8037
8149
  setStudents = _useState[1];
@@ -8066,7 +8178,7 @@ var StudentSelector = function StudentSelector(_ref) {
8066
8178
  }, [searchString]);
8067
8179
  useEffect(function () {
8068
8180
  timeout && timeout.current && clearTimeout(timeout.current);
8069
- if (!searchString || searchString.trim().length < 2) {
8181
+ if (minSearchLength && (!searchString || searchString.trim().length < minSearchLength)) {
8070
8182
  setStudents([]);
8071
8183
  } else {
8072
8184
  timeout.current = setTimeout(loadData, 300);
@@ -8092,8 +8204,8 @@ var StudentSelector = function StudentSelector(_ref) {
8092
8204
  },
8093
8205
  isDisabled: disabled,
8094
8206
  isLoading: isLoading,
8095
- placeholder: t('placeholder_student_selector'),
8096
- isMulti: true,
8207
+ placeholder: t(minSearchLength ? 'placeholder_student_selector' : 'select_placeholder'),
8208
+ isMulti: isMulti,
8097
8209
  value: value,
8098
8210
  onChange: onChange
8099
8211
  }));
@@ -14180,7 +14292,7 @@ var DrawerHeader = function DrawerHeader(_ref) {
14180
14292
  fontSize: "13px",
14181
14293
  fontWeight: 500
14182
14294
  }
14183
- }, student.schoolName), React__default.createElement(Typography, {
14295
+ }, student.schoolName), !!student.grade && React__default.createElement(Typography, {
14184
14296
  sx: {
14185
14297
  color: grey[500],
14186
14298
  fontSize: "13px",
@@ -15488,6 +15600,9 @@ var getNotesApi = function getNotesApi(query) {
15488
15600
  params: query
15489
15601
  });
15490
15602
  };
15603
+ var getNoteByIdApi = function getNoteByIdApi(id) {
15604
+ return api.get(NOTES_URL + "/" + id);
15605
+ };
15491
15606
  var createNoteApi = function createNoteApi(note) {
15492
15607
  return api.post("" + NOTES_URL, note);
15493
15608
  };
@@ -15496,6 +15611,9 @@ var updateNoteApi = function updateNoteApi(id, content) {
15496
15611
  content: content
15497
15612
  });
15498
15613
  };
15614
+ var updateNoteDataApi = function updateNoteDataApi(id, data) {
15615
+ return api.put(NOTES_URL + "/" + id, data);
15616
+ };
15499
15617
  var deleteNoteApi = function deleteNoteApi(id) {
15500
15618
  return api["delete"](NOTES_URL + "/" + id);
15501
15619
  };
@@ -15770,6 +15888,121 @@ var NotesContainer = function NotesContainer(_ref) {
15770
15888
  });
15771
15889
  };
15772
15890
 
15891
+ var getNoteType = function getNoteType(t, type) {
15892
+ switch (type) {
15893
+ case NoteType.ToAcademy:
15894
+ return t("academy");
15895
+ case NoteType.ToStudent:
15896
+ return t("student_parents");
15897
+ case NoteType.AdminToAllAdmin:
15898
+ return t("admin_to_admin");
15899
+ case NoteType.AdminToAllTeacher:
15900
+ return t("admin_to_teachers");
15901
+ case NoteType.TeacherToAllAdmin:
15902
+ return t("teacher_to_admin");
15903
+ case NoteType.TeacherToTeachers:
15904
+ return t("teacher_to_teachers");
15905
+ default:
15906
+ return "";
15907
+ }
15908
+ };
15909
+
15910
+ var NoteItemList = function NoteItemList(_ref) {
15911
+ var _data$reciever, _data$reciever2, _data$recievers;
15912
+ var data = _ref.data,
15913
+ index = _ref.index,
15914
+ role = _ref.role,
15915
+ calcOrderNumber = _ref.calcOrderNumber,
15916
+ onDelete = _ref.onDelete,
15917
+ onUpdate = _ref.onUpdate,
15918
+ onView = _ref.onView;
15919
+ var isAdminUser = useSelector(function (state) {
15920
+ var _state$common, _state$common$user, _state$common$user$ro;
15921
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : (_state$common$user = _state$common.user) === null || _state$common$user === void 0 ? void 0 : (_state$common$user$ro = _state$common$user.roles) === null || _state$common$user$ro === void 0 ? void 0 : _state$common$user$ro.includes(Role.Admin);
15922
+ });
15923
+ var userId = useSelector(function (state) {
15924
+ var _state$common2, _state$common2$user;
15925
+ return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : (_state$common2$user = _state$common2.user) === null || _state$common2$user === void 0 ? void 0 : _state$common2$user.id;
15926
+ });
15927
+ var _useTranslation = useTranslation(),
15928
+ t = _useTranslation.t;
15929
+ var isAdmin = role === Role.Admin;
15930
+ var order = calcOrderNumber(index);
15931
+ var createdAt = utcToLocalTime(data.createdAt, t("date_time_format"));
15932
+ var handleDelete = function handleDelete() {
15933
+ onDelete(data);
15934
+ };
15935
+ var handleUpdate = function handleUpdate() {
15936
+ onUpdate(data);
15937
+ };
15938
+ var handleView = function handleView() {
15939
+ onView(data);
15940
+ };
15941
+ var disabled = !data.isOwned && (!isAdminUser || data.type == undefined || data.type == NoteType.TeacherToAllAdmin || data.type == NoteType.TeacherToTeachers);
15942
+ useEffect(function () {
15943
+ if (window.MathJax) {
15944
+ var _window$MathJax;
15945
+ (_window$MathJax = window.MathJax) === null || _window$MathJax === void 0 ? void 0 : _window$MathJax.typeset();
15946
+ }
15947
+ }, [data.content]);
15948
+ var noteType = data.type === undefined ? "" : getNoteType(t, data.type);
15949
+ return React__default.createElement(TableRow$1, null, React__default.createElement(TableCell$1, null, order), React__default.createElement(TableCell$1, null, data.type === NoteType.AdminToAllTeacher && !isAdmin && !isAdminUser ? React__default.createElement(Typography, {
15950
+ color: green[700],
15951
+ fontWeight: 600
15952
+ }, t("admin")) : React__default.createElement(Fragment$1, null, React__default.createElement(Typography, {
15953
+ color: green[700],
15954
+ fontWeight: 600
15955
+ }, data.sender.fullName, data.sender.id === userId && React__default.createElement(Typography, {
15956
+ display: "inline-block",
15957
+ color: grey$1[600],
15958
+ fontWeight: 600
15959
+ }, "(", " " + t("me"), ")")), React__default.createElement(Typography, null, data.sender.email))), data.type === NoteType.ToAcademy || data.type === NoteType.ToStudent ? React__default.createElement(TableCell$1, null, React__default.createElement(Typography, {
15960
+ color: blue[700],
15961
+ fontWeight: 600
15962
+ }, (_data$reciever = data.reciever) === null || _data$reciever === void 0 ? void 0 : _data$reciever.fullName), React__default.createElement(Typography, null, (_data$reciever2 = data.reciever) === null || _data$reciever2 === void 0 ? void 0 : _data$reciever2.email)) : data.type === NoteType.TeacherToTeachers ? React__default.createElement(TableCell$1, null, React__default.createElement(Stack, {
15963
+ direction: "column"
15964
+ }, (_data$recievers = data.recievers) === null || _data$recievers === void 0 ? void 0 : _data$recievers.slice(0, 2).map(function (i) {
15965
+ return React__default.createElement(Typography, null, i.fullName, " - ", i.email);
15966
+ }), data.recievers && data.recievers.length > 2 && React__default.createElement(Typography, null, "(+", data.recievers.length - 2, ")"))) : React__default.createElement(TableCell$1, null, React__default.createElement(Typography, null, t(data.type === NoteType.AdminToAllTeacher ? "teachers" : "admin"))), React__default.createElement(TableCell$1, null, React__default.createElement(Box, {
15967
+ sx: {
15968
+ display: "-webkit-box",
15969
+ lineClamp: 3,
15970
+ WebkitLineClamp: 3,
15971
+ WebkitBoxOrient: "vertical",
15972
+ boxOrient: "vertical",
15973
+ overflow: "hidden"
15974
+ },
15975
+ dangerouslySetInnerHTML: {
15976
+ __html: data.content
15977
+ }
15978
+ })), React__default.createElement(TableCell$1, {
15979
+ className: "text-nowrap"
15980
+ }, noteType), React__default.createElement(TableCell$1, null, createdAt), React__default.createElement(TableCell$1, null, React__default.createElement("div", {
15981
+ className: "d-flex"
15982
+ }, React__default.createElement(Box, null, React__default.createElement(IconButton, {
15983
+ color: "default",
15984
+ className: "bg-primary text-white me-1",
15985
+ onClick: handleView
15986
+ }, React__default.createElement(FaEye, {
15987
+ size: 12
15988
+ }))), React__default.createElement(Box, null, React__default.createElement(IconButton, {
15989
+ color: "default",
15990
+ className: styles$5["action-btn"] + " " + (disabled ? "bg-secondary" : "bg-warning") + " text-white me-2",
15991
+ onClick: handleUpdate,
15992
+ disabled: disabled
15993
+ }, React__default.createElement(HiOutlinePencilAlt, {
15994
+ className: styles$5["action-btn--pencil"],
15995
+ size: 12
15996
+ }))), React__default.createElement(Box, null, React__default.createElement(IconButton, {
15997
+ onClick: handleDelete,
15998
+ color: "default",
15999
+ className: styles$5["action-btn"] + " " + (disabled ? "bg-secondary" : "bg-danger") + " text-white",
16000
+ disabled: disabled
16001
+ }, React__default.createElement(FaTrashCan, {
16002
+ size: 12
16003
+ }))))));
16004
+ };
16005
+
15773
16006
  var NoteContent = function NoteContent(_ref) {
15774
16007
  var content = _ref.content;
15775
16008
  useEffect(function () {
@@ -15791,7 +16024,7 @@ var NoteContent = function NoteContent(_ref) {
15791
16024
  };
15792
16025
 
15793
16026
  var NoteDrawer = function NoteDrawer(props) {
15794
- var _BRIEF_GRADE_OPTIONS$, _data$content;
16027
+ var _BRIEF_GRADE_OPTIONS$, _note$content;
15795
16028
  var anchor = props.anchor,
15796
16029
  open = props.open,
15797
16030
  student = props.student,
@@ -15799,7 +16032,8 @@ var NoteDrawer = function NoteDrawer(props) {
15799
16032
  data = props.data,
15800
16033
  width = props.width,
15801
16034
  _props$showStudentInf = props.showStudentInfo,
15802
- showStudentInfo = _props$showStudentInf === void 0 ? true : _props$showStudentInf;
16035
+ showStudentInfo = _props$showStudentInf === void 0 ? true : _props$showStudentInf,
16036
+ id = props.id;
15803
16037
  var _useTranslation = useTranslation(),
15804
16038
  t = _useTranslation.t;
15805
16039
  var academy = useSelector(function (state) {
@@ -15810,6 +16044,46 @@ var NoteDrawer = function NoteDrawer(props) {
15810
16044
  var _state$common2;
15811
16045
  return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : _state$common2.language;
15812
16046
  });
16047
+ var _useState = useState(false),
16048
+ loading = _useState[0],
16049
+ setLoading = _useState[1];
16050
+ var _useState2 = useState(),
16051
+ noteData = _useState2[0],
16052
+ setNoteData = _useState2[1];
16053
+ useEffect(function () {
16054
+ var getNoteById = function getNoteById() {
16055
+ try {
16056
+ var _temp2 = function _temp2() {
16057
+ setLoading(false);
16058
+ };
16059
+ if (!id) return Promise.resolve();
16060
+ setLoading(true);
16061
+ var _temp = _catch(function () {
16062
+ return Promise.resolve(getNoteByIdApi(+id)).then(function (res) {
16063
+ setNoteData(res.data);
16064
+ });
16065
+ }, function (error) {
16066
+ toast.error(getErrorMessage(t, error));
16067
+ });
16068
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
16069
+ } catch (e) {
16070
+ return Promise.reject(e);
16071
+ }
16072
+ };
16073
+ getNoteById();
16074
+ }, [id]);
16075
+ var note = data != null ? data : noteData;
16076
+ var user = useMemo(function () {
16077
+ if (student) return student;
16078
+ if (!note) return null;
16079
+ switch (note.type) {
16080
+ case NoteType.ToAcademy:
16081
+ case NoteType.ToStudent:
16082
+ return note.reciever;
16083
+ default:
16084
+ return note.sender;
16085
+ }
16086
+ }, [JSON.stringify(note), JSON.stringify(student)]);
15813
16087
  return React__default.createElement(Drawer, {
15814
16088
  anchor: anchor,
15815
16089
  open: open,
@@ -15836,11 +16110,11 @@ var NoteDrawer = function NoteDrawer(props) {
15836
16110
  onClick: onClose
15837
16111
  }, React__default.createElement(IoClose, {
15838
16112
  size: 32
15839
- }))), showStudentInfo && React__default.createElement(Box, {
16113
+ }))), showStudentInfo && ((note === null || note === void 0 ? void 0 : note.type) === NoteType.ToAcademy || (note === null || note === void 0 ? void 0 : note.type) === NoteType.ToStudent) && React__default.createElement(Box, {
15840
16114
  sx: {
15841
16115
  padding: "16px 40px"
15842
16116
  }
15843
- }, !student ? React__default.createElement(Stack, {
16117
+ }, !user || loading ? React__default.createElement(Stack, {
15844
16118
  direction: "row",
15845
16119
  gap: 3
15846
16120
  }, React__default.createElement(Skeleton, {
@@ -15875,7 +16149,7 @@ var NoteDrawer = function NoteDrawer(props) {
15875
16149
  color: green[500],
15876
16150
  lineHeight: "22px"
15877
16151
  }
15878
- }, student.fullName), React__default.createElement(Stack, {
16152
+ }, user.fullName), React__default.createElement(Stack, {
15879
16153
  direction: "row",
15880
16154
  alignItems: "center",
15881
16155
  gap: 1
@@ -15885,17 +16159,29 @@ var NoteDrawer = function NoteDrawer(props) {
15885
16159
  fontSize: "13px",
15886
16160
  fontWeight: 500
15887
16161
  }
15888
- }, student.schoolName), React__default.createElement(Typography, {
16162
+ }, user.schoolName), !!user.grade && React__default.createElement(Typography, {
15889
16163
  sx: {
15890
16164
  color: grey[500],
15891
16165
  fontSize: "13px",
15892
16166
  fontWeight: 500
15893
16167
  }
15894
16168
  }, t(function (label) {
15895
- return label ? t(label) : formatGrade(student.grade, t, language);
16169
+ return label ? t(label) : formatGrade(user.grade, t, language);
15896
16170
  }((_BRIEF_GRADE_OPTIONS$ = BRIEF_GRADE_OPTIONS.find(function (o) {
15897
- return o.value === Number(student.grade);
15898
- })) === null || _BRIEF_GRADE_OPTIONS$ === void 0 ? void 0 : _BRIEF_GRADE_OPTIONS$.label))))))), React__default.createElement(Stack, {
16171
+ return o.value === Number(user.grade);
16172
+ })) === null || _BRIEF_GRADE_OPTIONS$ === void 0 ? void 0 : _BRIEF_GRADE_OPTIONS$.label))))))), !note && !loading && React__default.createElement(Stack, {
16173
+ padding: "40px 24px 0",
16174
+ gap: "16px"
16175
+ }, React__default.createElement(Typography, {
16176
+ className: "text-muted"
16177
+ }, t("no_data"))), loading && React__default.createElement(Stack, {
16178
+ padding: "40px 24px 0",
16179
+ gap: "16px",
16180
+ justifyContent: "center"
16181
+ }, React__default.createElement(CircularProgress, {
16182
+ size: 40,
16183
+ color: "primary"
16184
+ })), note && !loading && React__default.createElement(Stack, {
15899
16185
  padding: "40px 24px 0",
15900
16186
  gap: "16px"
15901
16187
  }, React__default.createElement(Stack, {
@@ -15908,7 +16194,7 @@ var NoteDrawer = function NoteDrawer(props) {
15908
16194
  fontWeight: "700",
15909
16195
  color: "#414E62"
15910
16196
  }
15911
- }, data === null || data === void 0 ? void 0 : data.fullName)), React__default.createElement(Stack, {
16197
+ }, note === null || note === void 0 ? void 0 : note.fullName)), React__default.createElement(Stack, {
15912
16198
  display: "flex",
15913
16199
  justifyContent: "end"
15914
16200
  }, React__default.createElement(Typography, {
@@ -15918,7 +16204,7 @@ var NoteDrawer = function NoteDrawer(props) {
15918
16204
  color: "#97A1AF",
15919
16205
  textAlign: "end"
15920
16206
  }
15921
- }, utcToLocalTime(data === null || data === void 0 ? void 0 : data.createdAt, t("date_format"))), React__default.createElement(Typography, {
16207
+ }, utcToLocalTime(note === null || note === void 0 ? void 0 : note.createdAt, t("date_format"))), React__default.createElement(Typography, {
15922
16208
  sx: {
15923
16209
  fontSize: "12px",
15924
16210
  fontWeight: "500",
@@ -15926,11 +16212,819 @@ var NoteDrawer = function NoteDrawer(props) {
15926
16212
  textAlign: "end"
15927
16213
  }
15928
16214
  }, academy === null || academy === void 0 ? void 0 : academy.name))), React__default.createElement(NoteContent, {
15929
- content: (_data$content = data === null || data === void 0 ? void 0 : data.content) != null ? _data$content : ""
16215
+ content: (_note$content = note === null || note === void 0 ? void 0 : note.content) != null ? _note$content : ""
15930
16216
  })));
15931
16217
  };
15932
16218
 
15933
- var useVirtualList = function useVirtualList(studentId, defaultFilter, getItemsApi) {
16219
+ var TEACHER_URL = BASE_URL + "/api/teacher";
16220
+ var getTeacherListApi = function getTeacherListApi(query) {
16221
+ return api.get("" + TEACHER_URL, {
16222
+ params: query
16223
+ });
16224
+ };
16225
+
16226
+ var TeacherSelector$1 = function TeacherSelector(_ref) {
16227
+ var value = _ref.value,
16228
+ onChange = _ref.onChange,
16229
+ placeholder = _ref.placeholder,
16230
+ externalTeacherIds = _ref.externalTeacherIds,
16231
+ title = _ref.title,
16232
+ isMultiple = _ref.isMultiple,
16233
+ _ref$isClearable = _ref.isClearable,
16234
+ isClearable = _ref$isClearable === void 0 ? true : _ref$isClearable,
16235
+ useUserId = _ref.useUserId,
16236
+ exceptMe = _ref.exceptMe,
16237
+ isDisabled = _ref.isDisabled;
16238
+ var _useState = useState([]),
16239
+ teachers = _useState[0],
16240
+ setTeachers = _useState[1];
16241
+ var _useState2 = useState(""),
16242
+ searchString = _useState2[0],
16243
+ setSearchString = _useState2[1];
16244
+ var _useState3 = useState(false),
16245
+ isLoading = _useState3[0],
16246
+ setLoading = _useState3[1];
16247
+ var _useTranslation = useTranslation(),
16248
+ t = _useTranslation.t;
16249
+ var debounceSearch = useCallback(_$8.debounce(function (value) {
16250
+ loadData(value);
16251
+ }, 500), []);
16252
+ var handleChangeSearchText = function handleChangeSearchText(value) {
16253
+ setSearchString(value.trim());
16254
+ debounceSearch(value.trim());
16255
+ };
16256
+ var loadData = function loadData(textSearch) {
16257
+ try {
16258
+ var _temp2 = function _temp2() {
16259
+ setLoading(false);
16260
+ };
16261
+ setLoading(true);
16262
+ var _temp = _catch(function () {
16263
+ return Promise.resolve(getTeacherListApi({
16264
+ textSearch: textSearch,
16265
+ pageSize: 100,
16266
+ currentPage: 1,
16267
+ exceptMe: exceptMe,
16268
+ sortColumnDirection: OrderType.DESC,
16269
+ sortColumnName: "User.UserProfile.FullName"
16270
+ })).then(function (res) {
16271
+ var _res$data$items = res.data.items,
16272
+ items = _res$data$items === void 0 ? [] : _res$data$items;
16273
+ setTeachers(items);
16274
+ });
16275
+ }, function (err) {
16276
+ toast.error(getErrorMessage(t, err));
16277
+ });
16278
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
16279
+ } catch (e) {
16280
+ return Promise.reject(e);
16281
+ }
16282
+ };
16283
+ useEffect(function () {
16284
+ loadData();
16285
+ }, []);
16286
+ var options = teachers.filter(function (teacher) {
16287
+ return !externalTeacherIds || externalTeacherIds && !externalTeacherIds.includes(teacher.id);
16288
+ }).map(function (teacher) {
16289
+ return {
16290
+ label: teacher.teacherName + " - " + teacher.teacherEmail,
16291
+ value: useUserId ? teacher.teacherUserId : teacher.id
16292
+ };
16293
+ });
16294
+ return React__default.createElement(FormGroup, {
16295
+ className: "" + styles["filter-item"]
16296
+ }, !!title && React__default.createElement("label", {
16297
+ className: "" + styles["title-form"]
16298
+ }, title), React__default.createElement(CustomSelectOption, {
16299
+ options: options,
16300
+ onInputChange: function onInputChange(inputValue) {
16301
+ return handleChangeSearchText(inputValue);
16302
+ },
16303
+ isLoading: isLoading,
16304
+ placeholder: placeholder || t('select_placeholder'),
16305
+ isMulti: isMultiple,
16306
+ value: value,
16307
+ inputValue: searchString,
16308
+ onChange: onChange,
16309
+ isClearable: isClearable,
16310
+ isDisabled: isDisabled
16311
+ }));
16312
+ };
16313
+
16314
+ var schema$3 = object().shape({
16315
+ content: string().trim().required(),
16316
+ studentId: number().when("type", {
16317
+ is: function is(type) {
16318
+ return type == NoteType.ToAcademy || type == NoteType.ToStudent;
16319
+ },
16320
+ then: function then(schema) {
16321
+ return schema.required("student_required");
16322
+ },
16323
+ otherwise: function otherwise(schema) {
16324
+ return schema.notRequired();
16325
+ }
16326
+ }),
16327
+ userIds: array().of(number()).when("type", {
16328
+ is: function is(type) {
16329
+ return type == NoteType.TeacherToTeachers;
16330
+ },
16331
+ then: function then(schema) {
16332
+ return schema.required("teachers_required");
16333
+ },
16334
+ otherwise: function otherwise(schema) {
16335
+ return schema.notRequired();
16336
+ }
16337
+ }),
16338
+ type: number()
16339
+ });
16340
+ var GeneralNoteDialog = function GeneralNoteDialog(_ref) {
16341
+ var _selectedNote$recieve, _selectedNote$recieve2, _selectedNote$recieve3;
16342
+ var open = _ref.open,
16343
+ type = _ref.type,
16344
+ selectedNote = _ref.selectedNote,
16345
+ value = _ref.value,
16346
+ onClose = _ref.onClose,
16347
+ onSaveNote = _ref.onSaveNote;
16348
+ var _useTranslation = useTranslation(),
16349
+ t = _useTranslation.t;
16350
+ var handleSaveNote = function handleSaveNote(val) {
16351
+ onSaveNote(val);
16352
+ };
16353
+ var tip = useMemo(function () {
16354
+ if (type === undefined) return "";
16355
+ switch (type) {
16356
+ case NoteType.ToAcademy:
16357
+ return "academy";
16358
+ case NoteType.ToStudent:
16359
+ return "student_parents";
16360
+ case NoteType.AdminToAllAdmin:
16361
+ case NoteType.AdminToAllTeacher:
16362
+ case NoteType.TeacherToAllAdmin:
16363
+ return "admin";
16364
+ case NoteType.TeacherToTeachers:
16365
+ return "teacher";
16366
+ default:
16367
+ return "";
16368
+ }
16369
+ }, [type]);
16370
+ return React__default.createElement(Dialog, {
16371
+ onClose: onClose,
16372
+ open: open,
16373
+ maxWidth: "md",
16374
+ scroll: "body",
16375
+ fullWidth: true,
16376
+ disableEnforceFocus: true,
16377
+ disableAutoFocus: true
16378
+ }, React__default.createElement(DialogTitle$1, {
16379
+ id: "customized-dialog-title"
16380
+ }, React__default.createElement(Typography$1, {
16381
+ fontWeight: 700,
16382
+ fontSize: "16px",
16383
+ lineHeight: "19.09px",
16384
+ color: "#202B37"
16385
+ }, t(type === NoteType.ToAcademy || type === NoteType.ToStudent ? selectedNote ? "edit_student_note" : "student_note_taking" : "note"), tip ? " " + t(tip) : "")), React__default.createElement(IconButton$1, {
16386
+ "aria-label": "close",
16387
+ sx: {
16388
+ position: "absolute",
16389
+ right: 8,
16390
+ top: 8,
16391
+ color: function color(theme) {
16392
+ return theme.palette.grey[500];
16393
+ }
16394
+ },
16395
+ onClick: onClose
16396
+ }, React__default.createElement(iconCloseDialog, null)), React__default.createElement(Formik, {
16397
+ initialValues: {
16398
+ content: value ? value.content : (selectedNote === null || selectedNote === void 0 ? void 0 : selectedNote.content) || "",
16399
+ type: type,
16400
+ studentId: value ? value.studentId : selectedNote === null || selectedNote === void 0 ? void 0 : (_selectedNote$recieve = selectedNote.reciever) === null || _selectedNote$recieve === void 0 ? void 0 : _selectedNote$recieve.id,
16401
+ student: value ? value.student : selectedNote !== null && selectedNote !== void 0 && selectedNote.reciever ? {
16402
+ label: selectedNote.reciever.fullName,
16403
+ value: selectedNote.reciever.id
16404
+ } : undefined,
16405
+ userIds: value ? value.userIds : selectedNote === null || selectedNote === void 0 ? void 0 : (_selectedNote$recieve2 = selectedNote.recievers) === null || _selectedNote$recieve2 === void 0 ? void 0 : _selectedNote$recieve2.map(function (i) {
16406
+ return i.id;
16407
+ }),
16408
+ users: value ? value.users : selectedNote === null || selectedNote === void 0 ? void 0 : (_selectedNote$recieve3 = selectedNote.recievers) === null || _selectedNote$recieve3 === void 0 ? void 0 : _selectedNote$recieve3.map(function (i) {
16409
+ return {
16410
+ label: i.fullName,
16411
+ value: i.id
16412
+ };
16413
+ })
16414
+ },
16415
+ validationSchema: schema$3,
16416
+ enableReinitialize: true,
16417
+ onSubmit: handleSaveNote
16418
+ }, function (_ref2) {
16419
+ var _selectedNote$recieve4;
16420
+ var values = _ref2.values,
16421
+ errors = _ref2.errors,
16422
+ setFieldValue = _ref2.setFieldValue;
16423
+ return React__default.createElement(Form, null, React__default.createElement(DialogContent$1, {
16424
+ sx: {
16425
+ padding: 0,
16426
+ overflowY: "auto"
16427
+ }
16428
+ }, React__default.createElement(Box, {
16429
+ display: "flex",
16430
+ flexDirection: "column",
16431
+ gap: "8px",
16432
+ padding: "24px 24px 40px 24px"
16433
+ }, (type === NoteType.ToAcademy || type === NoteType.ToStudent) && React__default.createElement(Stack, null, React__default.createElement("label", {
16434
+ htmlFor: "student",
16435
+ className: styles["form-label"] + " " + styles$5["form-label-dialog"]
16436
+ }, t("student_name")), selectedNote ? React__default.createElement(Typography$1, {
16437
+ sx: {
16438
+ fontWeight: 700,
16439
+ fontSize: "14px",
16440
+ color: "rgba(61, 198, 116, 1)"
16441
+ }
16442
+ }, (_selectedNote$recieve4 = selectedNote.reciever) === null || _selectedNote$recieve4 === void 0 ? void 0 : _selectedNote$recieve4.fullName) : React__default.createElement(Field, {
16443
+ id: "student",
16444
+ style: {
16445
+ width: "100%"
16446
+ },
16447
+ name: "student",
16448
+ className: styles["form-control"],
16449
+ render: function render(_ref3) {
16450
+ var field = _ref3.field;
16451
+ return React__default.createElement(StudentSelector, {
16452
+ value: field.value,
16453
+ onChange: function (val) {
16454
+ try {
16455
+ return Promise.resolve(setFieldValue("studentId", val === null || val === void 0 ? void 0 : val.value)).then(function () {
16456
+ return Promise.resolve(setFieldValue("student", val)).then(function () {});
16457
+ });
16458
+ } catch (e) {
16459
+ return Promise.reject(e);
16460
+ }
16461
+ },
16462
+ isMulti: false
16463
+ });
16464
+ }
16465
+ }), !!errors.studentId && React__default.createElement(Typography$1, {
16466
+ fontWeight: 500,
16467
+ fontSize: "10px",
16468
+ lineHeight: "11.93px",
16469
+ mt: 1,
16470
+ color: "#F34B4B"
16471
+ }, t(errors.studentId))), (type === NoteType.AdminToAllAdmin || type === NoteType.AdminToAllTeacher) && React__default.createElement(FormControl, {
16472
+ className: "w-100"
16473
+ }, React__default.createElement(FormLabel, {
16474
+ className: "fw-medium",
16475
+ id: "type"
16476
+ }, t("receivers")), React__default.createElement(RadioGroup, {
16477
+ className: "flex-row flex-wrap"
16478
+ }, React__default.createElement(FormControlLabel, {
16479
+ control: React__default.createElement(Radio, {
16480
+ checked: values.type === NoteType.AdminToAllAdmin || values.type === NoteType.TeacherToAllAdmin,
16481
+ onChange: function onChange(_) {
16482
+ return setFieldValue("type", NoteType.AdminToAllAdmin);
16483
+ }
16484
+ }),
16485
+ label: t("admin")
16486
+ }), React__default.createElement(FormControlLabel, {
16487
+ control: React__default.createElement(Radio, {
16488
+ checked: values.type === NoteType.AdminToAllTeacher,
16489
+ onChange: function onChange(_) {
16490
+ return setFieldValue("type", NoteType.AdminToAllTeacher);
16491
+ }
16492
+ }),
16493
+ label: t("teacher")
16494
+ }))), type === NoteType.TeacherToTeachers && React__default.createElement(Stack, null, React__default.createElement("label", {
16495
+ htmlFor: "teachers",
16496
+ className: styles["form-label"] + " " + styles$5["form-label-dialog"]
16497
+ }, t("teachers")), React__default.createElement(Field, {
16498
+ id: "users",
16499
+ style: {
16500
+ width: "100%"
16501
+ },
16502
+ name: "users",
16503
+ className: styles["form-control"],
16504
+ render: function render(_ref4) {
16505
+ var field = _ref4.field;
16506
+ return React__default.createElement(TeacherSelector$1, {
16507
+ value: field.value,
16508
+ onChange: function (val) {
16509
+ try {
16510
+ var _val$map, _val$map2;
16511
+ return Promise.resolve(setFieldValue("userIds", (_val$map = val === null || val === void 0 ? void 0 : (_val$map2 = val.map) === null || _val$map2 === void 0 ? void 0 : _val$map2.call(val, function (i) {
16512
+ return i.value;
16513
+ })) != null ? _val$map : [])).then(function () {
16514
+ return Promise.resolve(setFieldValue("users", val != null ? val : [])).then(function () {});
16515
+ });
16516
+ } catch (e) {
16517
+ return Promise.reject(e);
16518
+ }
16519
+ },
16520
+ isDisabled: !!selectedNote,
16521
+ exceptMe: true,
16522
+ isMultiple: true,
16523
+ useUserId: true
16524
+ });
16525
+ }
16526
+ }), !!errors.userIds && React__default.createElement(Typography$1, {
16527
+ fontWeight: 500,
16528
+ fontSize: "10px",
16529
+ lineHeight: "11.93px",
16530
+ mt: 1,
16531
+ color: "#F34B4B"
16532
+ }, t(errors.userIds))), React__default.createElement(Stack, null, React__default.createElement("label", {
16533
+ htmlFor: "content-question",
16534
+ className: styles["form-label"] + " " + styles$5["form-label-dialog"]
16535
+ }, t("incorrect_answer_note_contents")), React__default.createElement(Box, {
16536
+ position: "relative",
16537
+ display: "flex",
16538
+ flexDirection: "row",
16539
+ alignItems: "center"
16540
+ }, React__default.createElement(Field, {
16541
+ id: "content-question",
16542
+ style: {
16543
+ width: "100%"
16544
+ },
16545
+ name: "content",
16546
+ placeholder: t("the_problem_is_difficult"),
16547
+ className: styles["form-control"],
16548
+ render: function render(_ref5) {
16549
+ var field = _ref5.field;
16550
+ return React__default.createElement(NoteTinyEditor, {
16551
+ initValue: field.value,
16552
+ onChange: function onChange(text) {
16553
+ return setFieldValue("content", text);
16554
+ }
16555
+ });
16556
+ }
16557
+ })), !!errors.content && React__default.createElement(Typography$1, {
16558
+ fontWeight: 500,
16559
+ fontSize: "10px",
16560
+ lineHeight: "11.93px",
16561
+ mt: 1,
16562
+ color: "#F34B4B"
16563
+ }, t(errors.content)), React__default.createElement(Box, {
16564
+ marginBottom: "4px"
16565
+ })))), React__default.createElement(DialogActions$1, {
16566
+ sx: {
16567
+ display: "flex",
16568
+ justifyContent: "space-between",
16569
+ alignItems: "center",
16570
+ padding: "12px",
16571
+ borderTop: "1px solid #CED2DA"
16572
+ }
16573
+ }, React__default.createElement(MButton, {
16574
+ className: styles$5["btn-cancel"],
16575
+ onClick: onClose
16576
+ }, React__default.createElement(Typography$1, {
16577
+ sx: {
16578
+ color: styles.dark + " !important"
16579
+ },
16580
+ fontWeight: 700,
16581
+ fontSize: "14px",
16582
+ lineHeight: "16.71px"
16583
+ }, t("cancel"))), React__default.createElement(MButton, {
16584
+ variant: "contained",
16585
+ sx: {
16586
+ bgcolor: styles.dark
16587
+ },
16588
+ className: styles$5["btn-register"],
16589
+ type: "submit"
16590
+ }, React__default.createElement(Typography$1, {
16591
+ fontWeight: 700,
16592
+ fontSize: "14px",
16593
+ lineHeight: "16.71px",
16594
+ color: "#FFFFFF"
16595
+ }, t("registration")))));
16596
+ }));
16597
+ };
16598
+
16599
+ var NoteList = function NoteList(_ref) {
16600
+ var defaultFilter = _ref.defaultFilter,
16601
+ role = _ref.role,
16602
+ headers = _ref.headers,
16603
+ isAdmin = _ref.isAdmin;
16604
+ var _useTranslation = useTranslation(),
16605
+ t = _useTranslation.t;
16606
+ var _useList = useList(function (filter) {
16607
+ return getNotesApi(filter);
16608
+ }, defaultFilter, false),
16609
+ isLoading = _useList.isLoading,
16610
+ filter = _useList.filter,
16611
+ textSearchRef = _useList.textSearchRef,
16612
+ paging = _useList.paging,
16613
+ data = _useList.data,
16614
+ selectedItem = _useList.selectedItem,
16615
+ handleSort = _useList.handleSort,
16616
+ handleChangeSearchText = _useList.handleChangeSearchText,
16617
+ handleChangePage = _useList.handleChangePage,
16618
+ calcOrderNumber = _useList.calcOrderNumber,
16619
+ handleChangeSelectedItem = _useList.handleChangeSelectedItem,
16620
+ getData = _useList.getData;
16621
+ var dispatch = useDispatch();
16622
+ var _useState = useState(false),
16623
+ openNoteViewDrawer = _useState[0],
16624
+ setOpenNoteViewDrawer = _useState[1];
16625
+ var _useState2 = useState(),
16626
+ openNoteDialog = _useState2[0],
16627
+ setOpenNoteDialog = _useState2[1];
16628
+ var _useState3 = useState(),
16629
+ noteRequest = _useState3[0],
16630
+ setNoteRequest = _useState3[1];
16631
+ var _useState4 = useState(false),
16632
+ openConfirmNote = _useState4[0],
16633
+ setOpenConfirmNote = _useState4[1];
16634
+ var _useState5 = useState(false),
16635
+ openDeleteNoteDialog = _useState5[0],
16636
+ setOpenDeleteNoteDialog = _useState5[1];
16637
+ var handleOpenCreateNoteDialog = function handleOpenCreateNoteDialog() {
16638
+ var _defaultFilter$types;
16639
+ if (((_defaultFilter$types = defaultFilter.types) === null || _defaultFilter$types === void 0 ? void 0 : _defaultFilter$types.length) === 1) setOpenNoteDialog(defaultFilter.types[0]);else if (defaultFilter.types && defaultFilter.types.length > 1) {
16640
+ setOpenNoteDialog(isAdmin ? NoteType.AdminToAllAdmin : NoteType.TeacherToAllAdmin);
16641
+ }
16642
+ };
16643
+ var handleCloseDeleteDialog = function handleCloseDeleteDialog() {
16644
+ setOpenDeleteNoteDialog(false);
16645
+ };
16646
+ var handleOpenDeleteNoteDialog = function handleOpenDeleteNoteDialog(note) {
16647
+ handleChangeSelectedItem(note);
16648
+ setOpenDeleteNoteDialog(true);
16649
+ };
16650
+ var handleOpenNoteDrawer = function handleOpenNoteDrawer(note) {
16651
+ setOpenNoteViewDrawer(true);
16652
+ handleChangeSelectedItem(note);
16653
+ };
16654
+ var handleCloseNoteDrawer = function handleCloseNoteDrawer() {
16655
+ setOpenNoteViewDrawer(false);
16656
+ handleChangeSelectedItem(undefined);
16657
+ };
16658
+ var handleCloseConfirmStudentNoteDialog = function handleCloseConfirmStudentNoteDialog() {
16659
+ setOpenConfirmNote(false);
16660
+ };
16661
+ var handleOpenNoteDialog = function handleOpenNoteDialog(note) {
16662
+ handleChangeSelectedItem(note);
16663
+ setOpenNoteDialog(note.type);
16664
+ };
16665
+ var handleCloseNoteDialog = function handleCloseNoteDialog() {
16666
+ handleChangeSelectedItem(undefined);
16667
+ setOpenNoteDialog(undefined);
16668
+ setNoteRequest(undefined);
16669
+ };
16670
+ var handleOpenConfirmStudentNoteDialog = function handleOpenConfirmStudentNoteDialog(note) {
16671
+ setNoteRequest(note);
16672
+ setOpenConfirmNote(true);
16673
+ };
16674
+ var handleSaveNote = function handleSaveNote(noteRequest) {
16675
+ try {
16676
+ var _temp4 = function _temp4() {
16677
+ dispatch(setLoading(false));
16678
+ };
16679
+ if (openNoteDialog === undefined) return Promise.resolve();
16680
+ if (noteRequest.content.trim().length === 0) return Promise.resolve();
16681
+ dispatch(setLoading(true));
16682
+ var _temp3 = _catch(function () {
16683
+ function _temp2() {
16684
+ getData();
16685
+ reset();
16686
+ }
16687
+ var _temp = function () {
16688
+ if (selectedItem) {
16689
+ return Promise.resolve(updateNoteDataApi(selectedItem.id, noteRequest)).then(function () {
16690
+ toast.success(t("update_note_successfully"));
16691
+ });
16692
+ } else {
16693
+ return Promise.resolve(createNoteApi(noteRequest)).then(function () {
16694
+ toast.success(t("create_note_successfully"));
16695
+ });
16696
+ }
16697
+ }();
16698
+ return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
16699
+ }, function (error) {
16700
+ toast.error(getErrorMessage(t, error));
16701
+ });
16702
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
16703
+ } catch (e) {
16704
+ return Promise.reject(e);
16705
+ }
16706
+ };
16707
+ var handleDeleteNote = function handleDeleteNote() {
16708
+ try {
16709
+ var _temp6 = function _temp6() {
16710
+ dispatch(setLoading(false));
16711
+ };
16712
+ if (!(selectedItem !== null && selectedItem !== void 0 && selectedItem.id)) return Promise.resolve();
16713
+ dispatch(setLoading(true));
16714
+ var _temp5 = _catch(function () {
16715
+ return Promise.resolve(deleteNoteApi(selectedItem.id)).then(function () {
16716
+ toast.success(t("delete_note_successfully"));
16717
+ getData();
16718
+ reset();
16719
+ });
16720
+ }, function (error) {
16721
+ toast.error(getErrorMessage(t, error));
16722
+ });
16723
+ return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
16724
+ } catch (e) {
16725
+ return Promise.reject(e);
16726
+ }
16727
+ };
16728
+ var reset = function reset() {
16729
+ handleCloseNoteDialog();
16730
+ setOpenDeleteNoteDialog(false);
16731
+ setOpenConfirmNote(false);
16732
+ setNoteRequest(undefined);
16733
+ };
16734
+ var handleSaveNoteDialog = openNoteDialog === NoteType.ToStudent && !(selectedItem !== null && selectedItem !== void 0 && selectedItem.id) ? handleOpenConfirmStudentNoteDialog : handleSaveNote;
16735
+ var handleSaveStudentNote = function handleSaveStudentNote() {
16736
+ if (!noteRequest) return;
16737
+ handleSaveNote(noteRequest);
16738
+ };
16739
+ return React__default.createElement(Box, {
16740
+ width: "100%"
16741
+ }, React__default.createElement(Grid, {
16742
+ container: true
16743
+ }, React__default.createElement(Grid, {
16744
+ item: true,
16745
+ xs: 6,
16746
+ className: "d-flex mb-3"
16747
+ }, React__default.createElement(SearchInput, {
16748
+ placeholder: t("search_for"),
16749
+ textSearchRef: textSearchRef,
16750
+ onChange: handleChangeSearchText
16751
+ })), React__default.createElement(Grid, {
16752
+ item: true,
16753
+ xs: 6,
16754
+ className: "d-flex justify-content-end align-items-center"
16755
+ }, React__default.createElement(Button, {
16756
+ variant: "contained",
16757
+ sx: {
16758
+ bgcolor: green[700]
16759
+ },
16760
+ startIcon: React__default.createElement(FaPlus, {
16761
+ size: 12
16762
+ }),
16763
+ onClick: handleOpenCreateNoteDialog
16764
+ }, t("new_note"))), React__default.createElement(Grid, {
16765
+ item: true,
16766
+ xs: 12
16767
+ }, React__default.createElement(TableContainer, null, React__default.createElement(Table, null, React__default.createElement(TableHead, null, React__default.createElement(TableRow, null, headers.map(function (i, index) {
16768
+ return React__default.createElement(TableCell, {
16769
+ key: index,
16770
+ onClick: !!i.sortKey ? function () {
16771
+ return handleSort(i.sortKey);
16772
+ } : undefined,
16773
+ className: "" + (!!i.sortKey && "pointer")
16774
+ }, React__default.createElement("div", {
16775
+ className: "d-flex justify-content-between align-items-center text-nowrap"
16776
+ }, t(i.title), !!i.sortKey && React__default.createElement(SortIcon, {
16777
+ isAscending: filter.sortColumnName !== i.sortKey ? undefined : filter.sortColumnDirection === OrderType.ASC
16778
+ })));
16779
+ }))), React__default.createElement(TableBody, null, React__default.createElement(ListView, {
16780
+ data: data,
16781
+ render: function render(item, index) {
16782
+ return React__default.createElement(NoteItemList, {
16783
+ key: index,
16784
+ data: item,
16785
+ calcOrderNumber: calcOrderNumber,
16786
+ index: index,
16787
+ role: role,
16788
+ onDelete: handleOpenDeleteNoteDialog,
16789
+ onUpdate: handleOpenNoteDialog,
16790
+ onView: handleOpenNoteDrawer
16791
+ });
16792
+ }
16793
+ }), !data.length && !isLoading && React__default.createElement(TableRow, null, React__default.createElement(TableCell, {
16794
+ colSpan: 12,
16795
+ className: "text-center text-muted"
16796
+ }, t("no_data"))), isLoading && React__default.createElement(TableRow, null, React__default.createElement(TableCell, {
16797
+ colSpan: 12
16798
+ }, React__default.createElement(Stack, {
16799
+ justifyContent: "center",
16800
+ alignItems: "center",
16801
+ width: "100%"
16802
+ }, React__default.createElement(CircularProgress, {
16803
+ size: 24
16804
+ }))))))), React__default.createElement("div", {
16805
+ className: "d-flex justify-content-end mt-3"
16806
+ }, !!paging.totalPages && React__default.createElement(Pagination, {
16807
+ count: paging.totalPages,
16808
+ page: paging.page,
16809
+ onChange: handleChangePage
16810
+ })))), React__default.createElement(NoteDrawer, {
16811
+ open: !!openNoteViewDrawer,
16812
+ data: selectedItem,
16813
+ student: selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.reciever,
16814
+ width: "80dvw",
16815
+ onClose: handleCloseNoteDrawer,
16816
+ anchor: "right"
16817
+ }), React__default.createElement(GeneralNoteDialog, {
16818
+ open: openNoteDialog !== undefined,
16819
+ type: openNoteDialog,
16820
+ onClose: handleCloseNoteDialog,
16821
+ onSaveNote: handleSaveNoteDialog,
16822
+ selectedNote: selectedItem,
16823
+ value: noteRequest
16824
+ }), React__default.createElement(ConfirmDialog, {
16825
+ open: openConfirmNote,
16826
+ toggle: handleCloseConfirmStudentNoteDialog,
16827
+ onConfirm: handleSaveStudentNote,
16828
+ text: t("are_you_sure_to_create_student_parent_note"),
16829
+ zIndex: 1300
16830
+ }), React__default.createElement(ConfirmDeleteDialog, {
16831
+ open: openDeleteNoteDialog,
16832
+ toggle: handleCloseDeleteDialog,
16833
+ onConfirm: handleDeleteNote,
16834
+ text: t("are_you_sure_you_want_to_delete_the_note"),
16835
+ title: t("delete_note"),
16836
+ okText: t("delete_note"),
16837
+ cancelText: t("cancel")
16838
+ }));
16839
+ };
16840
+
16841
+ var NotetabPanel = function NotetabPanel(_ref) {
16842
+ var children = _ref.children,
16843
+ value = _ref.value,
16844
+ index = _ref.index;
16845
+ return React__default.createElement("div", {
16846
+ role: "tabpanel",
16847
+ hidden: value !== index,
16848
+ id: "tabpanel-" + index,
16849
+ "aria-labelledby": "tab-" + index
16850
+ }, value === index && React__default.createElement(Box, {
16851
+ sx: {
16852
+ p: 2
16853
+ }
16854
+ }, React__default.createElement(Typography, null, children)));
16855
+ };
16856
+
16857
+ var NOTE_STUDENT_HEADERS = [{
16858
+ title: "#"
16859
+ }, {
16860
+ title: "sender",
16861
+ sortKey: "User.UserProfile.FullName"
16862
+ }, {
16863
+ title: "student",
16864
+ sortKey: "Student.UserProfile.FullName"
16865
+ }, {
16866
+ title: "content"
16867
+ }, {
16868
+ title: "type"
16869
+ }, {
16870
+ title: "created_at",
16871
+ sortKey: "CreatedAt"
16872
+ }, {
16873
+ title: "actions"
16874
+ }];
16875
+ var NOTE_TEACHER_HEADERS = [{
16876
+ title: "#"
16877
+ }, {
16878
+ title: "sender",
16879
+ sortKey: "User.UserProfile.FullName"
16880
+ }, {
16881
+ title: "receivers"
16882
+ }, {
16883
+ title: "content"
16884
+ }, {
16885
+ title: "type"
16886
+ }, {
16887
+ title: "created_at",
16888
+ sortKey: "CreatedAt"
16889
+ }, {
16890
+ title: "actions"
16891
+ }];
16892
+ var NOTE_ADMIN_HEADERS = [{
16893
+ title: "#"
16894
+ }, {
16895
+ title: "sender",
16896
+ sortKey: "User.UserProfile.FullName"
16897
+ }, {
16898
+ title: "receivers"
16899
+ }, {
16900
+ title: "content"
16901
+ }, {
16902
+ title: "type"
16903
+ }, {
16904
+ title: "created_at",
16905
+ sortKey: "CreatedAt"
16906
+ }, {
16907
+ title: "actions"
16908
+ }];
16909
+ var ACADEMY_NOTE_FILTER = {
16910
+ currentPage: 1,
16911
+ pageSize: 12,
16912
+ sortColumnDirection: OrderType.DESC,
16913
+ sortColumnName: NoteSortColumn.CreatedAt,
16914
+ types: [NoteType.ToAcademy]
16915
+ };
16916
+ var STUDENT_PARENTS_NOTE_FILTER = {
16917
+ currentPage: 1,
16918
+ pageSize: 12,
16919
+ sortColumnDirection: OrderType.DESC,
16920
+ sortColumnName: NoteSortColumn.CreatedAt,
16921
+ types: [NoteType.ToStudent]
16922
+ };
16923
+ var ADMIN_TEACHER_NOTE_FILTER = {
16924
+ currentPage: 1,
16925
+ pageSize: 12,
16926
+ sortColumnDirection: OrderType.DESC,
16927
+ sortColumnName: NoteSortColumn.CreatedAt,
16928
+ types: [NoteType.TeacherToAllAdmin, NoteType.AdminToAllTeacher]
16929
+ };
16930
+ var ADMIN_NOTE_FILTER = {
16931
+ currentPage: 1,
16932
+ pageSize: 12,
16933
+ sortColumnDirection: OrderType.DESC,
16934
+ sortColumnName: NoteSortColumn.CreatedAt,
16935
+ types: [NoteType.TeacherToAllAdmin, NoteType.AdminToAllTeacher, NoteType.AdminToAllAdmin]
16936
+ };
16937
+ var TEACHER_NOTE_FILTER = {
16938
+ currentPage: 1,
16939
+ pageSize: 12,
16940
+ sortColumnDirection: OrderType.DESC,
16941
+ sortColumnName: NoteSortColumn.CreatedAt,
16942
+ types: [NoteType.TeacherToTeachers]
16943
+ };
16944
+
16945
+ var NoteTabs = function NoteTabs(_ref) {
16946
+ var role = _ref.role;
16947
+ var roles = useSelector(function (state) {
16948
+ var _state$common$user$ro, _state$common, _state$common$user;
16949
+ return (_state$common$user$ro = state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : (_state$common$user = _state$common.user) === null || _state$common$user === void 0 ? void 0 : _state$common$user.roles) != null ? _state$common$user$ro : [];
16950
+ });
16951
+ var isAdminUser = roles.includes(Role.Admin);
16952
+ var isAdmin = roles.includes(Role.Admin);
16953
+ var _useState = useState(0),
16954
+ value = _useState[0],
16955
+ setValue = _useState[1];
16956
+ var handleChange = function handleChange(_event, newValue) {
16957
+ setValue(newValue);
16958
+ };
16959
+ return React__default.createElement(Box, {
16960
+ sx: {
16961
+ width: "100%"
16962
+ }
16963
+ }, React__default.createElement(Tabs, {
16964
+ value: value,
16965
+ onChange: handleChange,
16966
+ sx: {
16967
+ "& .MuiTab-root": {
16968
+ color: grey[500],
16969
+ fontSize: "1rem"
16970
+ },
16971
+ "& .Mui-selected": {
16972
+ color: green[700] + "!important"
16973
+ },
16974
+ "& .MuiTabs-indicator": {
16975
+ backgroundColor: green[700]
16976
+ }
16977
+ }
16978
+ }, React__default.createElement(Tab, Object.assign({
16979
+ label: t$1("academy")
16980
+ }, a11yProps$1(0))), React__default.createElement(Tab, Object.assign({
16981
+ label: t$1("student_parents")
16982
+ }, a11yProps$1(1))), React__default.createElement(Tab, Object.assign({
16983
+ label: t$1("admin")
16984
+ }, a11yProps$1(2))), !isAdmin && !isAdminUser && React__default.createElement(Tab, Object.assign({
16985
+ label: t$1("teacher")
16986
+ }, a11yProps$1(3)))), React__default.createElement(NotetabPanel, {
16987
+ value: value,
16988
+ index: 0
16989
+ }, React__default.createElement(NoteList, {
16990
+ role: role,
16991
+ isAdmin: isAdmin,
16992
+ defaultFilter: ACADEMY_NOTE_FILTER,
16993
+ headers: NOTE_STUDENT_HEADERS
16994
+ })), React__default.createElement(NotetabPanel, {
16995
+ value: value,
16996
+ index: 1
16997
+ }, React__default.createElement(NoteList, {
16998
+ role: role,
16999
+ isAdmin: isAdmin,
17000
+ defaultFilter: STUDENT_PARENTS_NOTE_FILTER,
17001
+ headers: NOTE_STUDENT_HEADERS
17002
+ })), React__default.createElement(NotetabPanel, {
17003
+ value: value,
17004
+ index: 2
17005
+ }, React__default.createElement(NoteList, {
17006
+ role: role,
17007
+ isAdmin: isAdmin,
17008
+ defaultFilter: isAdmin ? ADMIN_NOTE_FILTER : ADMIN_TEACHER_NOTE_FILTER,
17009
+ headers: NOTE_ADMIN_HEADERS
17010
+ })), !isAdmin && !isAdminUser && React__default.createElement(NotetabPanel, {
17011
+ value: value,
17012
+ index: 3
17013
+ }, React__default.createElement(NoteList, {
17014
+ role: role,
17015
+ isAdmin: isAdmin,
17016
+ defaultFilter: TEACHER_NOTE_FILTER,
17017
+ headers: NOTE_TEACHER_HEADERS
17018
+ })));
17019
+ };
17020
+ function a11yProps$1(index) {
17021
+ return {
17022
+ id: "tab-" + index,
17023
+ "aria-controls": "tabpanel-" + index
17024
+ };
17025
+ }
17026
+
17027
+ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
15934
17028
  var _useTranslation = useTranslation(),
15935
17029
  t = _useTranslation.t;
15936
17030
  var _useState = useState([]),
@@ -15944,7 +17038,7 @@ var useVirtualList = function useVirtualList(studentId, defaultFilter, getItemsA
15944
17038
  setSelectedItem = _useState3[1];
15945
17039
  var _useState4 = useState(false),
15946
17040
  isLoading = _useState4[0],
15947
- setLoadingExamSessions = _useState4[1];
17041
+ setLoading = _useState4[1];
15948
17042
  var _useState5 = useState(),
15949
17043
  filter = _useState5[0],
15950
17044
  setFilter = _useState5[1];
@@ -15954,18 +17048,16 @@ var useVirtualList = function useVirtualList(studentId, defaultFilter, getItemsA
15954
17048
  var getItems = function getItems() {
15955
17049
  try {
15956
17050
  var _temp2 = function _temp2() {
15957
- setLoadingExamSessions(false);
17051
+ setLoading(false);
15958
17052
  };
15959
17053
  if (isLoading) return Promise.resolve();
15960
17054
  if (!filter || !filter.currentPage) {
15961
17055
  setItems([]);
15962
17056
  return Promise.resolve();
15963
17057
  }
15964
- setLoadingExamSessions(true);
17058
+ setLoading(true);
15965
17059
  var _temp = _catch(function () {
15966
- return Promise.resolve(getItemsApi(_extends({}, filter, {
15967
- studentId: studentId
15968
- }))).then(function (res) {
17060
+ return Promise.resolve(getItemsApi(filter)).then(function (res) {
15969
17061
  var responseData = res.data;
15970
17062
  setTotalPages((responseData === null || responseData === void 0 ? void 0 : responseData.totalPages) || 0);
15971
17063
  var responseItems = (responseData === null || responseData === void 0 ? void 0 : responseData.items) || [];
@@ -16004,23 +17096,25 @@ var useVirtualList = function useVirtualList(studentId, defaultFilter, getItemsA
16004
17096
  });
16005
17097
  setItems(results);
16006
17098
  };
16007
- var handleItemRemoved = function handleItemRemoved(item) {
16008
- var results = items.filter(function (i) {
16009
- return i.id !== item.id;
16010
- });
16011
- setItems(results);
17099
+ var handleItemRemoved = function handleItemRemoved(_item) {
17100
+ getItems();
17101
+ };
17102
+ var handleChangeFilter = function handleChangeFilter(newFilter) {
17103
+ setFilter(newFilter);
16012
17104
  };
16013
17105
  useEffect(function () {
16014
17106
  setFilter(defaultFilter);
16015
17107
  }, [JSON.stringify(defaultFilter)]);
16016
17108
  useEffect(function () {
16017
17109
  getItems();
16018
- }, [JSON.stringify(filter)]);
17110
+ }, [JSON.stringify(filter), getItemsApi]);
16019
17111
  return {
16020
17112
  t: t,
17113
+ filter: filter,
16021
17114
  selectedItem: selectedItem,
16022
17115
  items: items,
16023
17116
  isLoading: isLoading,
17117
+ handleChangeFilter: handleChangeFilter,
16024
17118
  setItems: setItems,
16025
17119
  handleChangeSelectedItem: handleChangeSelectedItem,
16026
17120
  handleLoadMore: handleLoadMore,
@@ -16072,8 +17166,9 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16072
17166
  var _useState6 = useState(),
16073
17167
  noteIdContextMenu = _useState6[0],
16074
17168
  setNoteIdContextMenu = _useState6[1];
16075
- var _useVirtualList = useVirtualList(studentId, _extends({}, DEFAULT_NOTE_FILTER, {
16076
- type: NoteType.Default
17169
+ var _useVirtualList = useVirtualList(_extends({}, DEFAULT_NOTE_FILTER, {
17170
+ types: [NoteType.ToAcademy],
17171
+ studentId: studentId
16077
17172
  }), getNotesApi$1),
16078
17173
  academyNotes = _useVirtualList.items,
16079
17174
  isLoadingAcademyNotes = _useVirtualList.isLoading,
@@ -16083,8 +17178,9 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16083
17178
  handleItemAddedAcademyNote = _useVirtualList.handleItemAdded,
16084
17179
  handleItemUpdatedAcademyNote = _useVirtualList.handleItemUpdated,
16085
17180
  handleChangeSelectedItem = _useVirtualList.handleChangeSelectedItem;
16086
- var _useVirtualList2 = useVirtualList(studentId, _extends({}, DEFAULT_NOTE_FILTER, {
16087
- type: NoteType.StudentReadable
17181
+ var _useVirtualList2 = useVirtualList(_extends({}, DEFAULT_NOTE_FILTER, {
17182
+ types: [NoteType.ToStudent],
17183
+ studentId: studentId
16088
17184
  }), getNotesApi$1),
16089
17185
  studentNotes = _useVirtualList2.items,
16090
17186
  isLoadingStudentNotes = _useVirtualList2.isLoading,
@@ -16101,11 +17197,11 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16101
17197
  };
16102
17198
  var handleOpenCreateAcademyNoteDialog = function handleOpenCreateAcademyNoteDialog() {
16103
17199
  handleCloseTooltip();
16104
- setOpenNoteDialog(NoteType.Default);
17200
+ setOpenNoteDialog(NoteType.ToAcademy);
16105
17201
  };
16106
17202
  var handleOpenCreateStudentNoteDialog = function handleOpenCreateStudentNoteDialog() {
16107
17203
  handleCloseTooltip();
16108
- setOpenNoteDialog(NoteType.StudentReadable);
17204
+ setOpenNoteDialog(NoteType.ToStudent);
16109
17205
  };
16110
17206
  var handleCloseTooltip = function handleCloseTooltip() {
16111
17207
  setNoteIdContextMenu(0);
@@ -16156,7 +17252,7 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16156
17252
  var _temp = function () {
16157
17253
  if (selectedItem) {
16158
17254
  return Promise.resolve(updateNoteApi$1(selectedItem.id, data.content)).then(function (res) {
16159
- if (selectedItem.type === NoteType.StudentReadable) handleItemUpdatedStudentNote(res.data);else handleItemUpdatedAcademyNote(res.data);
17255
+ if (selectedItem.type === NoteType.ToStudent) handleItemUpdatedStudentNote(res.data);else handleItemUpdatedAcademyNote(res.data);
16160
17256
  toast.success(t("update_note_successfully"));
16161
17257
  });
16162
17258
  } else {
@@ -16164,7 +17260,7 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16164
17260
  return Promise.resolve(createNoteApi$1(_extends({}, data, {
16165
17261
  type: openNoteDialog
16166
17262
  }))).then(function (res) {
16167
- if (res.data.type === NoteType.StudentReadable) handleItemAddedStudentNote(res.data);else handleItemAddedAcademyNote(res.data);
17263
+ if (res.data.type === NoteType.ToStudent) handleItemAddedStudentNote(res.data);else handleItemAddedAcademyNote(res.data);
16168
17264
  toast.success(t("create_note_successfully"));
16169
17265
  });
16170
17266
  }
@@ -16197,7 +17293,7 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16197
17293
  var _temp5 = _catch(function () {
16198
17294
  return Promise.resolve(deleteNoteApi$1(selectedItem.id)).then(function () {
16199
17295
  toast.success(t("delete_note_successfully"));
16200
- if (selectedItem.type === NoteType.StudentReadable) handleItemRemovedStudentNote(selectedItem);else handleItemRemovedAcademyNote(selectedItem);
17296
+ if (selectedItem.type === NoteType.ToStudent) handleItemRemovedStudentNote(selectedItem);else handleItemRemovedAcademyNote(selectedItem);
16201
17297
  reset();
16202
17298
  });
16203
17299
  }, function (error) {
@@ -16219,14 +17315,12 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16219
17315
  handleSaveNote(studentNoteContent);
16220
17316
  };
16221
17317
  var noteDialogProps = {
16222
- open: openNoteDialog === NoteType.StudentReadable && !openConfirmNote || openNoteDialog === NoteType.Default,
17318
+ open: openNoteDialog === NoteType.ToStudent && !openConfirmNote || openNoteDialog === NoteType.ToAcademy,
16223
17319
  selectedNote: selectedItem,
16224
- tip: " (" + t(openNoteDialog === NoteType.StudentReadable ? "student_parents" : "academy") + ")",
17320
+ tip: " (" + t(openNoteDialog === NoteType.ToStudent ? "student_parents" : "academy") + ")",
16225
17321
  value: studentNoteContent,
16226
17322
  onClose: handleCloseNoteDialog,
16227
- onSaveNote: openNoteDialog === NoteType.StudentReadable && !(selectedItem !== null && selectedItem !== void 0 && selectedItem.id) ? handleOpenConfirmStudentNoteDialog : function (content) {
16228
- return handleSaveNote(content);
16229
- }
17323
+ onSaveNote: openNoteDialog === NoteType.ToStudent && !(selectedItem !== null && selectedItem !== void 0 && selectedItem.id) ? handleOpenConfirmStudentNoteDialog : handleSaveNote
16230
17324
  };
16231
17325
  return {
16232
17326
  openConfirmNote: openConfirmNote,
@@ -16493,11 +17587,11 @@ var DrawerInfoTab = function DrawerInfoTab(_ref) {
16493
17587
  }
16494
17588
  }, data ? React__default.createElement(Typography, {
16495
17589
  sx: contentStyle
16496
- }, t(function (label) {
17590
+ }, !!data.grade ? t(function (label) {
16497
17591
  return label ? t(label) : formatGrade(data.grade, t, language);
16498
17592
  }((_BRIEF_GRADE_OPTIONS$ = BRIEF_GRADE_OPTIONS.find(function (o) {
16499
17593
  return o.value === Number(data.grade);
16500
- })) === null || _BRIEF_GRADE_OPTIONS$ === void 0 ? void 0 : _BRIEF_GRADE_OPTIONS$.label))) : React__default.createElement(Skeleton, {
17594
+ })) === null || _BRIEF_GRADE_OPTIONS$ === void 0 ? void 0 : _BRIEF_GRADE_OPTIONS$.label)) : "") : React__default.createElement(Skeleton, {
16501
17595
  variant: "text",
16502
17596
  width: 20,
16503
17597
  sx: contentStyle
@@ -16690,7 +17784,7 @@ var ExamResultItem = function ExamResultItem(_ref) {
16690
17784
  }, (_data$teacher = data.teacher) === null || _data$teacher === void 0 ? void 0 : _data$teacher.fullName))))));
16691
17785
  };
16692
17786
 
16693
- var ExanResultList = function ExanResultList(_ref) {
17787
+ var ExamResultList = function ExamResultList(_ref) {
16694
17788
  var studentId = _ref.studentId,
16695
17789
  data = _ref.data,
16696
17790
  isLoading = _ref.isLoading,
@@ -22044,7 +23138,7 @@ var ExamResultDrawer = function ExamResultDrawer(_ref) {
22044
23138
  fontSize: "13px",
22045
23139
  fontWeight: 500
22046
23140
  }
22047
- }, student.schoolName), React__default.createElement(Typography, {
23141
+ }, student.schoolName), !!student.grade && React__default.createElement(Typography, {
22048
23142
  sx: {
22049
23143
  color: grey[500],
22050
23144
  fontSize: "13px",
@@ -22082,7 +23176,9 @@ var DrawerExamResultTab = function DrawerExamResultTab(_ref) {
22082
23176
  value = _ref.value,
22083
23177
  studentId = _ref.studentId,
22084
23178
  onViewQA = _ref.onViewQA;
22085
- var _useVirtualList = useVirtualList(studentId, EXAM_SESSION_DEFAULT_FILTER, getExamSessionListApi),
23179
+ var _useVirtualList = useVirtualList(_extends({}, EXAM_SESSION_DEFAULT_FILTER, {
23180
+ studentId: studentId
23181
+ }), getExamSessionListApi),
22086
23182
  items = _useVirtualList.items,
22087
23183
  selectedItem = _useVirtualList.selectedItem,
22088
23184
  isLoading = _useVirtualList.isLoading,
@@ -22099,7 +23195,7 @@ var DrawerExamResultTab = function DrawerExamResultTab(_ref) {
22099
23195
  p: 3,
22100
23196
  height: "100%"
22101
23197
  }
22102
- }, React__default.createElement(ExanResultList, {
23198
+ }, React__default.createElement(ExamResultList, {
22103
23199
  data: items,
22104
23200
  isLoading: isLoading,
22105
23201
  onLoadMore: handleLoadMore,
@@ -24848,7 +25944,9 @@ var DrawerTextbookResultTab = function DrawerTextbookResultTab(_ref) {
24848
25944
  selectedTab = _ref.selectedTab,
24849
25945
  value = _ref.value,
24850
25946
  onViewQA = _ref.onViewQA;
24851
- var _useVirtualList = useVirtualList(studentId, TEXTBOOK_DEFAULT_FILTER, getTextbookListApi),
25947
+ var _useVirtualList = useVirtualList(_extends({}, TEXTBOOK_DEFAULT_FILTER, {
25948
+ studentId: studentId
25949
+ }), getTextbookListApi),
24852
25950
  items = _useVirtualList.items,
24853
25951
  selectedItem = _useVirtualList.selectedItem,
24854
25952
  isLoading = _useVirtualList.isLoading,
@@ -25246,9 +26344,10 @@ var useDrawerAttendanceTab = function useDrawerAttendanceTab(studentId, onUpdate
25246
26344
  var pusher = concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.pusher;
25247
26345
  var channelName = useRef();
25248
26346
  var channel = useRef();
25249
- var _useVirtualList = useVirtualList(studentId, ATTENDANCE_COURSE_DEFAULT_FILTER, function (query) {
25250
- return getAttendanceByStudentIdApi(studentId, query);
25251
- }),
26347
+ var handleGetAttendanceByStudentId = useCallback(function (query) {
26348
+ return getAttendanceByStudentIdApi(studentId, query);
26349
+ }, [studentId]);
26350
+ var _useVirtualList = useVirtualList(ATTENDANCE_COURSE_DEFAULT_FILTER, handleGetAttendanceByStudentId),
25252
26351
  items = _useVirtualList.items,
25253
26352
  isLoading = _useVirtualList.isLoading,
25254
26353
  handleLoadMore = _useVirtualList.handleLoadMore,
@@ -26334,9 +27433,9 @@ var useLessonClassList = function useLessonClassList(courseId) {
26334
27433
  };
26335
27434
  };
26336
27435
 
26337
- var TEACHER_URL = BASE_URL + "/api/teacher";
26338
- var getTeacherListApi = function getTeacherListApi(query) {
26339
- return api.get("" + TEACHER_URL, {
27436
+ var TEACHER_URL$1 = BASE_URL + "/api/teacher";
27437
+ var getTeacherListApi$1 = function getTeacherListApi(query) {
27438
+ return api.get("" + TEACHER_URL$1, {
26340
27439
  params: query
26341
27440
  });
26342
27441
  };
@@ -26357,7 +27456,7 @@ var useTeacherList = function useTeacherList() {
26357
27456
  var getListTeacher = function getListTeacher() {
26358
27457
  try {
26359
27458
  var _temp = _catch(function () {
26360
- return Promise.resolve(getTeacherListApi(teacherFilter)).then(function (res) {
27459
+ return Promise.resolve(getTeacherListApi$1(teacherFilter)).then(function (res) {
26361
27460
  var _res$data;
26362
27461
  setTeachers(((_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.items) || []);
26363
27462
  });
@@ -26427,11 +27526,6 @@ var useClassDetail = function useClassDetail(_ref) {
26427
27526
  var isSelected = function isSelected(id) {
26428
27527
  return selected.indexOf(id) !== -1;
26429
27528
  };
26430
- var registerPusherRef = useRef(true);
26431
- var isReadyRegisterPusher = useSelector(function (state) {
26432
- var _state$common2;
26433
- return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : _state$common2.isReadyRegisterPusher;
26434
- });
26435
27529
  var _useStudentClassList = useStudentClassList(classId),
26436
27530
  getStudents = _useStudentClassList.getStudents,
26437
27531
  studentListProps = _objectWithoutPropertiesLoose(_useStudentClassList, _excluded$b);
@@ -26821,12 +27915,6 @@ var useClassDetail = function useClassDetail(_ref) {
26821
27915
  useEffect(function () {
26822
27916
  document.title = t("study_peak") + " | " + t(PAGE_TITLE$4);
26823
27917
  }, [t]);
26824
- useEffect(function () {
26825
- if (!isReadyRegisterPusher && registerPusherRef.current) {
26826
- dispatch(setReadyRegisterPusher(true));
26827
- registerPusherRef.current = false;
26828
- }
26829
- }, [isReadyRegisterPusher]);
26830
27918
  return {
26831
27919
  classId: classId,
26832
27920
  schema: schema,
@@ -27644,7 +28732,7 @@ var ClassList = function ClassList(_ref) {
27644
28732
  onClick: function onClick() {
27645
28733
  return handleUpdateClass(i);
27646
28734
  }
27647
- }, React__default.createElement(FaEye, {
28735
+ }, React__default.createElement(FaEye$1, {
27648
28736
  size: 12
27649
28737
  }))));
27650
28738
  }), !classList.length && React__default.createElement(TableRow$1, null, React__default.createElement(TableCell$1, {
@@ -28491,11 +29579,6 @@ var useUserList = function useUserList(role) {
28491
29579
  setOpenDeleteUserCsv = _useState10[1];
28492
29580
  var inputFileRef = useRef(null);
28493
29581
  var firstLoadRef = useRef(true);
28494
- var registerPusherRef = useRef(true);
28495
- var isReadyRegisterPusher = useSelector(function (state) {
28496
- var _state$common;
28497
- return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.isReadyRegisterPusher;
28498
- });
28499
29582
  var handleChangeSelectedStudent = function handleChangeSelectedStudent(student) {
28500
29583
  var _student$roles, _student$roles2;
28501
29584
  var isStudent = ((_student$roles = student.roles) === null || _student$roles === void 0 ? void 0 : _student$roles.includes(Role.Student)) && ((_student$roles2 = student.roles) === null || _student$roles2 === void 0 ? void 0 : _student$roles2.length) === 1;
@@ -28807,12 +29890,6 @@ var useUserList = function useUserList(role) {
28807
29890
  var userHeaders = USER_HEADERS.filter(function (i) {
28808
29891
  return i.roles.includes(role);
28809
29892
  });
28810
- useEffect(function () {
28811
- if (!isReadyRegisterPusher && registerPusherRef.current) {
28812
- dispatch(setReadyRegisterPusher(true));
28813
- registerPusherRef.current = false;
28814
- }
28815
- }, [isReadyRegisterPusher]);
28816
29893
  return {
28817
29894
  userDetail: userDetail,
28818
29895
  userHeaders: userHeaders,
@@ -29089,7 +30166,7 @@ var UserRow = function UserRow(_ref) {
29089
30166
  color: "default",
29090
30167
  className: "bg-primary text-white me-1",
29091
30168
  onClick: handleViewOrUpdate
29092
- }, React__default.createElement(FaEye$1, {
30169
+ }, React__default.createElement(FaEye, {
29093
30170
  size: 12
29094
30171
  })), (isAdmin || isSuperAdmin) && React__default.createElement(IconButton, {
29095
30172
  onClick: handleDelete,
@@ -30744,9 +31821,9 @@ var TextbookSortBy$1;
30744
31821
  var TeacherSortBy$1;
30745
31822
  (function (TeacherSortBy) {
30746
31823
  TeacherSortBy["CreatedAt"] = "CreatedAt";
30747
- TeacherSortBy["Name"] = "UserProfile.FullName";
30748
- TeacherSortBy["Email"] = "Email";
30749
- TeacherSortBy["PhoneNumber"] = "UserProfile.PhoneNumber";
31824
+ TeacherSortBy["Name"] = "User.UserProfile.FullName";
31825
+ TeacherSortBy["Email"] = "User.Email";
31826
+ TeacherSortBy["PhoneNumber"] = "User.UserProfile.PhoneNumber";
30750
31827
  })(TeacherSortBy$1 || (TeacherSortBy$1 = {}));
30751
31828
  var ExamType$1;
30752
31829
  (function (ExamType) {
@@ -32513,9 +33590,9 @@ var ShareToTeacherDialog = function ShareToTeacherDialog(_ref) {
32513
33590
  }, t("cancel")))));
32514
33591
  };
32515
33592
 
32516
- var TEACHER_URL$1 = BASE_URL + "/api/teacher";
32517
- var getTeacherListApi$1 = function getTeacherListApi(query) {
32518
- return api.get("" + TEACHER_URL$1, {
33593
+ var TEACHER_URL$2 = BASE_URL + "/api/teacher";
33594
+ var getTeacherListApi$2 = function getTeacherListApi(query) {
33595
+ return api.get("" + TEACHER_URL$2, {
32519
33596
  params: query
32520
33597
  });
32521
33598
  };
@@ -32526,7 +33603,7 @@ var useTextbookShare = function useTextbookShare(props) {
32526
33603
  role = props.role,
32527
33604
  isSuperAdmin = props.isSuperAdmin;
32528
33605
  var _useList = useList(!isSuperAdmin ? function (search) {
32529
- return getTeacherListApi$1(search);
33606
+ return getTeacherListApi$2(search);
32530
33607
  } : null, DefaultTeacherQuery),
32531
33608
  filterShare = _useList.filter,
32532
33609
  textSearchShareRef = _useList.textSearchRef,
@@ -32825,7 +33902,7 @@ var TextbookRow = function TextbookRow(_ref) {
32825
33902
  color: "default",
32826
33903
  className: "bg-primary text-white",
32827
33904
  onClick: handleViewTextbook
32828
- }, React__default.createElement(FaEye$1, {
33905
+ }, React__default.createElement(FaEye, {
32829
33906
  size: 12
32830
33907
  })), onAcademy && React__default.createElement(IconButton, {
32831
33908
  disabled: !isSharable,
@@ -33686,7 +34763,7 @@ var NotificationList = function NotificationList(_ref) {
33686
34763
  onClick: function onClick() {
33687
34764
  return handleUpdateNotification(i);
33688
34765
  }
33689
- }, !isAdmin && (isTeacherAdmin || !i.isOwned) ? React__default.createElement(FaEye$1, {
34766
+ }, !isAdmin && (isTeacherAdmin || !i.isOwned) ? React__default.createElement(FaEye, {
33690
34767
  size: 12
33691
34768
  }) : React__default.createElement(HiOutlinePencilAlt, {
33692
34769
  size: 12
@@ -37557,17 +38634,17 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
37557
38634
  sx: {
37558
38635
  color: inforErrors && submitCount ? error.main + "!important" : "gray"
37559
38636
  }
37560
- }, a11yProps$1(0))), React__default.createElement(Tab, Object.assign({
38637
+ }, a11yProps$2(0))), React__default.createElement(Tab, Object.assign({
37561
38638
  label: t$1("textbook.contents"),
37562
38639
  sx: {
37563
38640
  color: contentsErrors && submitCount ? error.main + "!important" : "gray"
37564
38641
  }
37565
- }, a11yProps$1(1))), !(values !== null && values !== void 0 && values.isPublic) && (!isSuperAdmin || textbookId) && (!textbookId && !isAdmin || (values === null || values === void 0 ? void 0 : values.isShared)) && React__default.createElement(Tab, Object.assign({
38642
+ }, a11yProps$2(1))), !(values !== null && values !== void 0 && values.isPublic) && (!isSuperAdmin || textbookId) && (!textbookId && !isAdmin || (values === null || values === void 0 ? void 0 : values.isShared)) && React__default.createElement(Tab, Object.assign({
37566
38643
  label: t$1("textbook.owners"),
37567
38644
  sx: {
37568
38645
  color: textbookOwnersErrors && submitCount ? error.main + "!important" : "gray"
37569
38646
  }
37570
- }, a11yProps$1(2))))), React__default.createElement(CustomTextbookTab, {
38647
+ }, a11yProps$2(2))))), React__default.createElement(CustomTextbookTab, {
37571
38648
  value: selected,
37572
38649
  index: 0
37573
38650
  }, React__default.createElement(TextbookInfoTab, Object.assign({}, formikProps, {
@@ -37589,7 +38666,7 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
37589
38666
  disabled: ownersDisabled
37590
38667
  }))))));
37591
38668
  };
37592
- var a11yProps$1 = function a11yProps(index) {
38669
+ var a11yProps$2 = function a11yProps(index) {
37593
38670
  return {
37594
38671
  id: "textbook-tab-" + index,
37595
38672
  "aria-controls": "textbook-tabpanel-" + index
@@ -37986,6 +39063,450 @@ var PreparedTextbookList = function PreparedTextbookList(_ref) {
37986
39063
  }));
37987
39064
  };
37988
39065
 
39066
+ var AnnouncementEvent;
39067
+ (function (AnnouncementEvent) {
39068
+ AnnouncementEvent["ReceivedNewNote"] = "ReceivedNewNote";
39069
+ AnnouncementEvent["UpdatedNote"] = "UpdatedNote";
39070
+ AnnouncementEvent["DeletedNote"] = "DeletedNote";
39071
+ })(AnnouncementEvent || (AnnouncementEvent = {}));
39072
+ var AnnouncementType;
39073
+ (function (AnnouncementType) {
39074
+ AnnouncementType["ReceivedNewNote"] = "ReceivedNewNote";
39075
+ })(AnnouncementType || (AnnouncementType = {}));
39076
+
39077
+ var stringToColor = function stringToColor(string) {
39078
+ var hash = 0;
39079
+ var i;
39080
+ for (i = 0; i < string.length; i += 1) {
39081
+ hash = string.charCodeAt(i) + ((hash << 5) - hash);
39082
+ }
39083
+ var color = "#";
39084
+ for (i = 0; i < 3; i += 1) {
39085
+ var value = hash >> i * 8 & 0xff;
39086
+ color += ("00" + value.toString(16)).slice(-2);
39087
+ }
39088
+ return color;
39089
+ };
39090
+ var stringAvatar = function stringAvatar(name) {
39091
+ var _name$split$0$, _name$split$, _name$split$1$, _name$split$2;
39092
+ return {
39093
+ sx: {
39094
+ bgcolor: stringToColor(name)
39095
+ },
39096
+ children: "" + ((_name$split$0$ = (_name$split$ = name.split(" ")[0]) === null || _name$split$ === void 0 ? void 0 : _name$split$[0]) != null ? _name$split$0$ : "") + ((_name$split$1$ = (_name$split$2 = name.split(" ")[1]) === null || _name$split$2 === void 0 ? void 0 : _name$split$2[0]) != null ? _name$split$1$ : "")
39097
+ };
39098
+ };
39099
+ var convertAnnouncementData = function convertAnnouncementData(t, role, announcement) {
39100
+ var isTeacherSite = role === Role.Teacher;
39101
+ var data = announcement.data;
39102
+ switch (announcement.type) {
39103
+ case AnnouncementType.ReceivedNewNote:
39104
+ var extraData = data.data;
39105
+ var contents = extraData.split("|");
39106
+ var noteType = contents[0];
39107
+ var content = contents.slice(1).join("|");
39108
+ var isAdmin = noteType === NoteType[NoteType.AdminToAllTeacher] || noteType === NoteType[NoteType.AdminToAllAdmin];
39109
+ return {
39110
+ content: content,
39111
+ name: isAdmin ? isTeacherSite ? t("admin") : t("admin_n", {
39112
+ admin: data.senderFullName
39113
+ }) : t("teacher_n", {
39114
+ teacher: data.senderFullName
39115
+ }),
39116
+ image: isAdmin && isTeacherSite ? undefined : data.senderAvatar,
39117
+ action: t("sent_a_memo")
39118
+ };
39119
+ default:
39120
+ return {
39121
+ name: data.senderFullName,
39122
+ image: data.senderAvatar,
39123
+ content: data.data,
39124
+ action: ""
39125
+ };
39126
+ }
39127
+ };
39128
+
39129
+ var AnnouncementItem = function AnnouncementItem(_ref) {
39130
+ var data = _ref.data,
39131
+ role = _ref.role,
39132
+ renderLink = _ref.renderLink,
39133
+ onLoad = _ref.onLoad;
39134
+ var _useTranslation = useTranslation(),
39135
+ t = _useTranslation.t;
39136
+ useEffect(function () {
39137
+ onLoad();
39138
+ }, []);
39139
+ var announcementData = convertAnnouncementData(t, role, data);
39140
+ return React__default.createElement(Fragment$1, null, renderLink(React__default.createElement(ListItemButton, {
39141
+ sx: _extends({
39142
+ py: 1.5,
39143
+ px: 2.5,
39144
+ mt: "1px"
39145
+ }, !data.isRead && {
39146
+ bgcolor: "action.selected"
39147
+ })
39148
+ }, React__default.createElement(Stack, {
39149
+ direction: "row",
39150
+ gap: 1,
39151
+ justifyContent: "space-between",
39152
+ width: "100%"
39153
+ }, React__default.createElement(Stack, {
39154
+ direction: "row",
39155
+ gap: 1
39156
+ }, React__default.createElement(ListItemAvatar, null, React__default.createElement(Avatar, Object.assign({}, stringAvatar(announcementData.name), {
39157
+ src: announcementData.image
39158
+ }))), React__default.createElement(ListItemText, {
39159
+ sx: {
39160
+ marginBlock: 0
39161
+ },
39162
+ primary: React__default.createElement(Box, null, React__default.createElement(Typography, {
39163
+ fontWeight: 600,
39164
+ display: "inline-block"
39165
+ }, announcementData.name), announcementData.action && React__default.createElement(Typography, {
39166
+ display: "inline-block",
39167
+ px: "4px"
39168
+ }, announcementData.action + ":"), React__default.createElement(Box, {
39169
+ display: "inline-block"
39170
+ }, React__default.createElement(Box, {
39171
+ sx: {
39172
+ display: "-webkit-box",
39173
+ lineClamp: 2,
39174
+ WebkitLineClamp: 2,
39175
+ WebkitBoxOrient: "vertical",
39176
+ boxOrient: "vertical",
39177
+ overflow: "hidden"
39178
+ },
39179
+ dangerouslySetInnerHTML: {
39180
+ __html: announcementData.content || ""
39181
+ }
39182
+ }))),
39183
+ secondary: React__default.createElement(Typography, {
39184
+ variant: "caption",
39185
+ sx: {
39186
+ mt: 0.5,
39187
+ display: "flex",
39188
+ alignItems: "center",
39189
+ color: "text.disabled"
39190
+ }
39191
+ }, React__default.createElement(Box, {
39192
+ sx: {
39193
+ marginRight: "8px"
39194
+ }
39195
+ }, React__default.createElement(FaClockRotateLeft, {
39196
+ size: 12
39197
+ })), timAgo(data.createdAt, t, true))
39198
+ })))), data));
39199
+ };
39200
+
39201
+ var AnnouncementList = function AnnouncementList(_ref) {
39202
+ var role = _ref.role,
39203
+ items = _ref.items,
39204
+ isLoading = _ref.isLoading,
39205
+ onLoadMore = _ref.onLoadMore,
39206
+ renderLink = _ref.renderLink;
39207
+ return React__default.createElement(VirtualListView, {
39208
+ data: items,
39209
+ loading: isLoading,
39210
+ listHeight: 0,
39211
+ containerProps: {
39212
+ sx: {
39213
+ height: "100%"
39214
+ }
39215
+ },
39216
+ renderItem: function renderItem(item, index, measure) {
39217
+ return React__default.createElement(AnnouncementItem, {
39218
+ role: role,
39219
+ key: index,
39220
+ data: item,
39221
+ renderLink: renderLink,
39222
+ onLoad: measure
39223
+ });
39224
+ },
39225
+ onLoadMore: onLoadMore
39226
+ });
39227
+ };
39228
+
39229
+ var DEFAULT_ANNOUNCEMENT_FILTER = {
39230
+ currentPage: 1,
39231
+ pageSize: 10,
39232
+ sortColumnDirection: OrderType.DESC,
39233
+ sortColumnName: "CreatedAt"
39234
+ };
39235
+ var ANNOUNCEMENT_CHANNEL = "ANNOUNCEMENT_A{academy}_U{userId}_CHANNEL";
39236
+
39237
+ var ANNOUNCEMENT_URL = BASE_URL + "/api/announcements";
39238
+ var getAnnouncementListApi = function getAnnouncementListApi(query) {
39239
+ return api.get("" + ANNOUNCEMENT_URL, {
39240
+ params: query
39241
+ });
39242
+ };
39243
+ var getTotalNumberUnreadAnnouncementsApi = function getTotalNumberUnreadAnnouncementsApi() {
39244
+ return api.get(ANNOUNCEMENT_URL + "/unread");
39245
+ };
39246
+ var markAsReadAnnouncementsApi = function markAsReadAnnouncementsApi() {
39247
+ return api.post(ANNOUNCEMENT_URL + "/mark-as-read");
39248
+ };
39249
+ var markAsReadAnnouncementByIdApi = function markAsReadAnnouncementByIdApi(id) {
39250
+ return api.post(ANNOUNCEMENT_URL + "/" + id + "/mark-as-read");
39251
+ };
39252
+
39253
+ var AnnouncementContainer = function AnnouncementContainer(_ref) {
39254
+ var role = _ref.role,
39255
+ renderLink = _ref.renderLink,
39256
+ renderViewNoteLink = _ref.renderViewNoteLink;
39257
+ var _useTranslation = useTranslation(),
39258
+ t = _useTranslation.t;
39259
+ var dispatch = useDispatch();
39260
+ var user = useSelector(function (state) {
39261
+ var _state$common;
39262
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
39263
+ });
39264
+ var academyDomain = user === null || user === void 0 ? void 0 : user.academyDomain;
39265
+ var concurrentConnectionPusher = useSelector(function (state) {
39266
+ var _state$common2;
39267
+ return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : _state$common2.concurrentConnectionPusher;
39268
+ });
39269
+ var totalUnreadMessages = useSelector(function (state) {
39270
+ var _state$common3;
39271
+ return state === null || state === void 0 ? void 0 : (_state$common3 = state.common) === null || _state$common3 === void 0 ? void 0 : _state$common3.totalUnreadMessages;
39272
+ });
39273
+ var pusher = concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.pusher;
39274
+ var channel = useRef();
39275
+ var channelName = useRef();
39276
+ var _useState = useState(false),
39277
+ openPopover = _useState[0],
39278
+ setOpenPopover = _useState[1];
39279
+ var anchorEl = useRef(null);
39280
+ var handleOpenPopover = function handleOpenPopover() {
39281
+ setOpenPopover(true);
39282
+ };
39283
+ var handleClosePopover = function handleClosePopover() {
39284
+ setOpenPopover(false);
39285
+ };
39286
+ var _useVirtualList = useVirtualList({}, getAnnouncementListApi),
39287
+ filter = _useVirtualList.filter,
39288
+ items = _useVirtualList.items,
39289
+ isLoading = _useVirtualList.isLoading,
39290
+ handleLoadMore = _useVirtualList.handleLoadMore,
39291
+ handleItemAdded = _useVirtualList.handleItemAdded,
39292
+ setItems = _useVirtualList.setItems,
39293
+ handleChangeFilter = _useVirtualList.handleChangeFilter,
39294
+ getItems = _useVirtualList.getItems;
39295
+ var handleNewAnnouncement = function handleNewAnnouncement(data) {
39296
+ try {
39297
+ var announcement = JSON.parse(data);
39298
+ openPopover && handleItemAdded(announcement);
39299
+ } catch (error) {
39300
+ console.log(error);
39301
+ }
39302
+ dispatch(setTotalUnreadMessages(totalUnreadMessages + 1));
39303
+ };
39304
+ var handleDeletedAnnouncement = function handleDeletedAnnouncement(_data) {
39305
+ openPopover && getItems();
39306
+ handleGetTotalUnread();
39307
+ };
39308
+ var handleUpdatedAnnouncement = function handleUpdatedAnnouncement(data) {
39309
+ try {
39310
+ var announcement = JSON.parse(data);
39311
+ openPopover && setItems(function (state) {
39312
+ return state.map(function (i) {
39313
+ if (i.id !== announcement.id) return i;
39314
+ return _extends({}, i, {
39315
+ data: _extends({}, i.data, {
39316
+ data: announcement.data.data
39317
+ })
39318
+ });
39319
+ });
39320
+ });
39321
+ } catch (error) {
39322
+ console.log(error);
39323
+ }
39324
+ };
39325
+ var handleMarkAsRead = function handleMarkAsRead() {
39326
+ try {
39327
+ var _temp2 = function _temp2() {
39328
+ dispatch(setLoading(false));
39329
+ };
39330
+ dispatch(setLoading(true));
39331
+ var _temp = _catch(function () {
39332
+ return Promise.resolve(markAsReadAnnouncementsApi()).then(function () {
39333
+ setItems(function (state) {
39334
+ return state.map(function (i) {
39335
+ return _extends({}, i, {
39336
+ isRead: true
39337
+ });
39338
+ });
39339
+ });
39340
+ dispatch(setTotalUnreadMessages(0));
39341
+ });
39342
+ }, function (error) {
39343
+ toast.error(getErrorMessage(t, error));
39344
+ });
39345
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
39346
+ } catch (e) {
39347
+ return Promise.reject(e);
39348
+ }
39349
+ };
39350
+ var handleMarkAsReadById = function handleMarkAsReadById(id, loading) {
39351
+ try {
39352
+ var _temp4 = function _temp4() {
39353
+ loading && dispatch(setLoading(false));
39354
+ };
39355
+ loading && dispatch(setLoading(true));
39356
+ var _temp3 = _catch(function () {
39357
+ return Promise.resolve(markAsReadAnnouncementByIdApi(id)).then(function () {
39358
+ setItems(function (state) {
39359
+ return state.map(function (i) {
39360
+ return _extends({}, i, {
39361
+ isRead: i.id === id ? true : i.isRead
39362
+ });
39363
+ });
39364
+ });
39365
+ dispatch(setTotalUnreadMessages(Math.max(0, totalUnreadMessages - 1)));
39366
+ });
39367
+ }, function (error) {
39368
+ toast.error(getErrorMessage(t, error));
39369
+ });
39370
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
39371
+ } catch (e) {
39372
+ return Promise.reject(e);
39373
+ }
39374
+ };
39375
+ var handleCloseAndMarkRead = function handleCloseAndMarkRead(data) {
39376
+ handleClosePopover();
39377
+ if (!data.isRead) handleMarkAsReadById(data.id);
39378
+ };
39379
+ var renderNotiLink = function renderNotiLink(children, data) {
39380
+ return renderLink(children, data, function () {
39381
+ return handleCloseAndMarkRead(data);
39382
+ });
39383
+ };
39384
+ var cleanupPusher = function cleanupPusher() {
39385
+ channel.current && channel.current.unbind(AnnouncementEvent.ReceivedNewNote, handleNewAnnouncement);
39386
+ channel.current && channel.current.unbind(AnnouncementEvent.UpdatedNote, handleUpdatedAnnouncement);
39387
+ channel.current && channel.current.unbind(AnnouncementEvent.DeletedNote, handleDeletedAnnouncement);
39388
+ channelName.current && pusher && pusher.unsubscribe(channelName.current);
39389
+ };
39390
+ useEffect(function () {
39391
+ if (concurrentConnectionPusher !== null && concurrentConnectionPusher !== void 0 && concurrentConnectionPusher.academyDomain && academyDomain && user !== null && user !== void 0 && user.id) {
39392
+ var normalizedAcademyDomain = academyDomain.trim().toUpperCase();
39393
+ channelName.current = ANNOUNCEMENT_CHANNEL.replace("{academy}", normalizedAcademyDomain).replace("{userId}", user.id);
39394
+ channel.current = pusher.subscribe(channelName.current);
39395
+ channel.current.bind(AnnouncementEvent.ReceivedNewNote, handleNewAnnouncement);
39396
+ channel.current.bind(AnnouncementEvent.UpdatedNote, handleUpdatedAnnouncement);
39397
+ channel.current.bind(AnnouncementEvent.DeletedNote, handleDeletedAnnouncement);
39398
+ }
39399
+ return cleanupPusher;
39400
+ }, [academyDomain, user === null || user === void 0 ? void 0 : user.id, concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.academyDomain, totalUnreadMessages, openPopover, JSON.stringify(filter)]);
39401
+ var handleGetTotalUnread = function handleGetTotalUnread() {
39402
+ try {
39403
+ var _temp5 = _catch(function () {
39404
+ return Promise.resolve(getTotalNumberUnreadAnnouncementsApi()).then(function (res) {
39405
+ dispatch(setTotalUnreadMessages(res.data));
39406
+ });
39407
+ }, function (error) {
39408
+ console.log({
39409
+ error: error
39410
+ });
39411
+ });
39412
+ return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(function () {}) : void 0);
39413
+ } catch (e) {
39414
+ return Promise.reject(e);
39415
+ }
39416
+ };
39417
+ useEffect(function () {
39418
+ if (academyDomain && user !== null && user !== void 0 && user.id) handleGetTotalUnread();
39419
+ }, [academyDomain, user === null || user === void 0 ? void 0 : user.id]);
39420
+ useEffect(function () {
39421
+ handleChangeFilter(openPopover ? DEFAULT_ANNOUNCEMENT_FILTER : {});
39422
+ }, [openPopover]);
39423
+ return React__default.createElement(Box, null, React__default.createElement(IconButton, {
39424
+ ref: anchorEl,
39425
+ className: "ms-2",
39426
+ onClick: handleOpenPopover
39427
+ }, React__default.createElement(Badge, {
39428
+ badgeContent: totalUnreadMessages,
39429
+ max: 9,
39430
+ color: "error"
39431
+ }, React__default.createElement(FaBell, {
39432
+ size: 20,
39433
+ color: blue[500]
39434
+ }))), React__default.createElement(Popover, {
39435
+ open: openPopover,
39436
+ anchorEl: anchorEl.current,
39437
+ onClose: handleClosePopover,
39438
+ anchorOrigin: {
39439
+ vertical: "bottom",
39440
+ horizontal: "right"
39441
+ },
39442
+ slotProps: {
39443
+ paper: {
39444
+ sx: {
39445
+ width: 360
39446
+ }
39447
+ }
39448
+ }
39449
+ }, React__default.createElement(Stack, {
39450
+ height: "100%",
39451
+ direction: "column"
39452
+ }, React__default.createElement(Stack, {
39453
+ direction: "row",
39454
+ justifyContent: "space-between",
39455
+ gap: 2,
39456
+ sx: {
39457
+ py: 2,
39458
+ px: 2.5
39459
+ }
39460
+ }, React__default.createElement(Box, {
39461
+ sx: {
39462
+ flexGrow: 1
39463
+ }
39464
+ }, React__default.createElement(Typography, {
39465
+ variant: "subtitle1"
39466
+ }, t("notifications")), totalUnreadMessages > 0 && React__default.createElement(Typography, {
39467
+ variant: "body2",
39468
+ sx: {
39469
+ color: "text.secondary"
39470
+ }
39471
+ }, t("you_have_n_unread_messages", {
39472
+ n: totalUnreadMessages
39473
+ })), renderViewNoteLink && React__default.createElement(Box, null, renderViewNoteLink(React__default.createElement(Typography, {
39474
+ sx: {
39475
+ fontWeight: 600,
39476
+ color: grey[600],
39477
+ fontSize: "14px",
39478
+ "&:hover": {
39479
+ textDecoration: "underline",
39480
+ color: green[700]
39481
+ }
39482
+ }
39483
+ }, t("view_notes")), handleClosePopover))), totalUnreadMessages > 0 && React__default.createElement(Stack, {
39484
+ direction: "column"
39485
+ }, React__default.createElement(Tooltip, {
39486
+ title: t("mark_as_read")
39487
+ }, React__default.createElement(IconButton, {
39488
+ color: "primary",
39489
+ onClick: handleMarkAsRead
39490
+ }, React__default.createElement(BsCheckAll, null))))), React__default.createElement(Divider, {
39491
+ component: "div"
39492
+ }), React__default.createElement(Stack, {
39493
+ direction: "column",
39494
+ sx: {
39495
+ height: {
39496
+ xs: 280,
39497
+ sm: 400
39498
+ },
39499
+ py: 2
39500
+ }
39501
+ }, React__default.createElement(AnnouncementList, {
39502
+ role: role,
39503
+ items: items,
39504
+ isLoading: isLoading,
39505
+ onLoadMore: handleLoadMore,
39506
+ renderLink: renderNotiLink
39507
+ })))));
39508
+ };
39509
+
37989
39510
  var MenuItemCustom = styled(MenuItem)(function () {
37990
39511
  return {
37991
39512
  '&.Mui-selected': {
@@ -38133,7 +39654,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
38133
39654
  }, React__default.createElement(GoArrowSwitch, {
38134
39655
  size: 14,
38135
39656
  color: styles.gray_900
38136
- })))))), (isSuperAdmin || !isAdmin || isTeacherSite) && React__default.createElement(Popover, {
39657
+ })))))), (isSuperAdmin || !isAdmin || isTeacherSite) && React__default.createElement(Popover$1, {
38137
39658
  open: !!open,
38138
39659
  anchorEl: open,
38139
39660
  onClose: handleClose,
@@ -38337,7 +39858,7 @@ var TheLanguageDropdown = function TheLanguageDropdown() {
38337
39858
  }, React__default.createElement("img", {
38338
39859
  src: currentLanguage === null || currentLanguage === void 0 ? void 0 : currentLanguage.image,
38339
39860
  alt: currentLanguage === null || currentLanguage === void 0 ? void 0 : currentLanguage.name
38340
- })), React__default.createElement(Popover, {
39861
+ })), React__default.createElement(Popover$1, {
38341
39862
  open: !!open,
38342
39863
  anchorEl: open,
38343
39864
  onClose: handleClose,
@@ -38712,17 +40233,19 @@ var Header = function Header(_ref) {
38712
40233
  role = _ref.role,
38713
40234
  history = _ref.history,
38714
40235
  link = _ref.link,
38715
- onSignOut = _ref.onSignOut;
40236
+ onSignOut = _ref.onSignOut,
40237
+ renderNotificationLink = _ref.renderNotificationLink,
40238
+ renderViewNoteLink = _ref.renderViewNoteLink;
38716
40239
  var Link = link;
38717
40240
  var _useTranslation = useTranslation(),
38718
40241
  t = _useTranslation.t;
38719
40242
  var theme = useTheme();
38720
- var param = window.location.pathname;
38721
40243
  var language = useSelector(function (state) {
38722
40244
  var _state$common;
38723
40245
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.language;
38724
40246
  });
38725
- var isTeacherSide = param.includes('teacher');
40247
+ var isTeacherSide = role === Role.Teacher;
40248
+ var isStudentSide = role === Role.Student;
38726
40249
  var isLargerThanXL = useMediaQuery(theme.breakpoints.up("xl"));
38727
40250
  var academyDomain = useSelector(function (state) {
38728
40251
  var _state$common2, _state$common2$user;
@@ -38733,6 +40256,7 @@ var Header = function Header(_ref) {
38733
40256
  return state === null || state === void 0 ? void 0 : (_state$common3 = state.common) === null || _state$common3 === void 0 ? void 0 : (_state$common3$user = _state$common3.user) === null || _state$common3$user === void 0 ? void 0 : _state$common3$user.isLearningSpace;
38734
40257
  });
38735
40258
  var isAcademy = isLearningSpace || academyDomain;
40259
+ var showAnnouncement = !isStudentSide && isAcademy;
38736
40260
  var logo = useMemo(function () {
38737
40261
  if (isTeacherSide) {
38738
40262
  return language === Language.en ? React__default.createElement(teacherFullLogoEn, null) : React__default.createElement(teacherFullLogoKo, null);
@@ -38826,7 +40350,11 @@ var Header = function Header(_ref) {
38826
40350
  }, React__default.createElement(singleLogo, null))), React__default.createElement(Stack, {
38827
40351
  className: "me-2",
38828
40352
  display: "none"
38829
- }, React__default.createElement(TheLanguageDropdown, null))));
40353
+ }, React__default.createElement(TheLanguageDropdown, null)), showAnnouncement && renderNotificationLink && React__default.createElement(AnnouncementContainer, {
40354
+ role: role,
40355
+ renderLink: renderNotificationLink,
40356
+ renderViewNoteLink: renderViewNoteLink
40357
+ })));
38830
40358
  };
38831
40359
  var HeaderLink = function HeaderLink(_ref3) {
38832
40360
  var data = _ref3.data,
@@ -38840,7 +40368,7 @@ var HeaderLink = function HeaderLink(_ref3) {
38840
40368
  return React__default.createElement(Fragment$1, null, render(data, isActive));
38841
40369
  };
38842
40370
 
38843
- var useLayoutContext = function useLayoutContext(role, pusherRegisterUrls, showLoadingAcademy, domain) {
40371
+ var useLayoutContext = function useLayoutContext(role, showLoadingAcademy, domain) {
38844
40372
  var _currentPusher$connec2;
38845
40373
  if (showLoadingAcademy === void 0) {
38846
40374
  showLoadingAcademy = true;
@@ -38854,13 +40382,9 @@ var useLayoutContext = function useLayoutContext(role, pusherRegisterUrls, showL
38854
40382
  var _state$common;
38855
40383
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
38856
40384
  });
38857
- var isReadyRegisterPusher = useSelector(function (state) {
38858
- var _state$common2;
38859
- return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : _state$common2.isReadyRegisterPusher;
38860
- });
38861
40385
  var concurrentConnectionPusher = useSelector(function (state) {
38862
- var _state$common3;
38863
- return state === null || state === void 0 ? void 0 : (_state$common3 = state.common) === null || _state$common3 === void 0 ? void 0 : _state$common3.concurrentConnectionPusher;
40386
+ var _state$common2;
40387
+ return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : _state$common2.concurrentConnectionPusher;
38864
40388
  });
38865
40389
  var currentPusher = concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.pusher;
38866
40390
  var roles = (user === null || user === void 0 ? void 0 : user.roles) || [];
@@ -38941,53 +40465,36 @@ var useLayoutContext = function useLayoutContext(role, pusherRegisterUrls, showL
38941
40465
  }
38942
40466
  };
38943
40467
  var registerPusher = useCallback(function () {
38944
- if (!academyDomain && role !== Role.Student) return;
38945
- if (includePathname(pusherRegisterUrls, pathname) || role === Role.Student) {
38946
- var _currentPusher$connec;
38947
- if ((academyDomain !== (concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.academyDomain) || !academyDomain && !(concurrentConnectionPusher !== null && concurrentConnectionPusher !== void 0 && concurrentConnectionPusher.academyDomain) && !concurrentConnectionPusher.isRegistered) && isReadyRegisterPusher) {
38948
- var _headers;
38949
- if (currentPusher) {
38950
- currentPusher.disconnect();
38951
- }
38952
- var token = getAccessToken();
38953
- var pusher = new Pusher$1(PUSHER_CONFIG.key, {
38954
- cluster: PUSHER_CONFIG.cluster,
38955
- authEndpoint: (academyDomain ? BASE_URL : SUPER_ADMIN_BASE_URL) + "/api/auth/pusher",
38956
- auth: {
38957
- params: {},
38958
- headers: (_headers = {
38959
- Authorization: "Bearer " + token
38960
- }, _headers[AcademyHeaders] = academyDomain, _headers)
38961
- }
38962
- });
38963
- dispatch(setConcurrentConnectionPusher({
38964
- pusher: pusher,
38965
- academyDomain: academyDomain,
38966
- isRegistered: true
38967
- }));
38968
- } else if ((currentPusher === null || currentPusher === void 0 ? void 0 : (_currentPusher$connec = currentPusher.connection) === null || _currentPusher$connec === void 0 ? void 0 : _currentPusher$connec.state) === "disconnected") {
38969
- currentPusher.connect();
38970
- }
38971
- if (!isReadyRegisterPusher && !!currentPusher) {
38972
- currentPusher.connection.state !== "disconnected" && currentPusher.disconnect();
38973
- dispatch(setConcurrentConnectionPusher({
38974
- pusher: null,
38975
- academyDomain: "",
38976
- isRegistered: false
38977
- }));
38978
- }
38979
- } else {
38980
- if (!!currentPusher) {
38981
- currentPusher.connection.state !== "disconnected" && currentPusher.disconnect();
38982
- dispatch(setConcurrentConnectionPusher({
38983
- pusher: null,
38984
- academyDomain: "",
38985
- isRegistered: false
38986
- }));
40468
+ var _currentPusher$connec;
40469
+ if ((!academyDomain || !(user !== null && user !== void 0 && user.id)) && role !== Role.Student) return;
40470
+ if (academyDomain !== (concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.academyDomain) || !academyDomain && !(concurrentConnectionPusher !== null && concurrentConnectionPusher !== void 0 && concurrentConnectionPusher.academyDomain) && !concurrentConnectionPusher.isRegistered) {
40471
+ var _headers;
40472
+ if (currentPusher) {
40473
+ currentPusher.disconnect();
38987
40474
  }
38988
- isReadyRegisterPusher && dispatch(setReadyRegisterPusher(false));
40475
+ var token = getAccessToken();
40476
+ var pusher = new Pusher$1(PUSHER_CONFIG.key, {
40477
+ cluster: PUSHER_CONFIG.cluster,
40478
+ authEndpoint: (academyDomain ? BASE_URL : SUPER_ADMIN_BASE_URL) + "/api/auth/pusher",
40479
+ auth: {
40480
+ params: {},
40481
+ headers: (_headers = {
40482
+ Authorization: "Bearer " + token
40483
+ }, _headers[AcademyHeaders] = academyDomain, _headers)
40484
+ }
40485
+ });
40486
+ dispatch(setConcurrentConnectionPusher({
40487
+ pusher: pusher,
40488
+ academyDomain: academyDomain,
40489
+ isRegistered: true
40490
+ }));
40491
+ } else if ((currentPusher === null || currentPusher === void 0 ? void 0 : (_currentPusher$connec = currentPusher.connection) === null || _currentPusher$connec === void 0 ? void 0 : _currentPusher$connec.state) === "disconnected") {
40492
+ currentPusher.connect();
38989
40493
  }
38990
- }, [pusherRegisterUrls.join(","), academyDomain, pathname, isReadyRegisterPusher, currentPusher === null || currentPusher === void 0 ? void 0 : (_currentPusher$connec2 = currentPusher.connection) === null || _currentPusher$connec2 === void 0 ? void 0 : _currentPusher$connec2.state, role]);
40494
+ return function () {
40495
+ currentPusher === null || currentPusher === void 0 ? void 0 : currentPusher.disconnect();
40496
+ };
40497
+ }, [user === null || user === void 0 ? void 0 : user.id, academyDomain, currentPusher === null || currentPusher === void 0 ? void 0 : (_currentPusher$connec2 = currentPusher.connection) === null || _currentPusher$connec2 === void 0 ? void 0 : _currentPusher$connec2.state, role]);
38991
40498
  useEffect(function () {
38992
40499
  !(user !== null && user !== void 0 && user.id) && loadInfo();
38993
40500
  }, [user === null || user === void 0 ? void 0 : user.id]);
@@ -39013,18 +40520,16 @@ var useLayoutContext = function useLayoutContext(role, pusherRegisterUrls, showL
39013
40520
  var LayoutContext = function LayoutContext(_ref) {
39014
40521
  var children = _ref.children,
39015
40522
  role = _ref.role,
39016
- _ref$pusherRegisterUr = _ref.pusherRegisterUrls,
39017
- pusherRegisterUrls = _ref$pusherRegisterUr === void 0 ? [] : _ref$pusherRegisterUr,
39018
40523
  showLoadingAcademy = _ref.showLoadingAcademy;
39019
40524
  var user = useSelector(function (state) {
39020
40525
  var _state$common;
39021
40526
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
39022
40527
  });
39023
- useLayoutContext(role, pusherRegisterUrls, showLoadingAcademy);
40528
+ useLayoutContext(role, showLoadingAcademy);
39024
40529
  if (!(user !== null && user !== void 0 && user.email)) return React__default.createElement(LoadingComponent, {
39025
40530
  isLoading: true
39026
40531
  });else return React__default.createElement(Fragment$1, null, children);
39027
40532
  };
39028
40533
 
39029
- export { ACADEMY_DOMAIN, ACCESS_TOKEN, AcademyHeaders, AcademyList, AcceptNoAcademy, ActionButtons, 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, 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, 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, setReadyRegisterPusher, setUser, store, timAgo, timeSpanToLocalMoment, toISOString, toLocalTime, totalSolveTimeCategories, totalTextbookSolveTimeCategories, useAutoAcademyDomain, useChatContainer, useCountDownTimer, useGoogleSignOut, useKeyboardVisible, useLanguage, useList, useLoadMore, useLogin, useNotes, usePusherConversation, useSwitchAcademy, useVirtualizeList, utcToLocalTime };
40534
+ 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, 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 };
39030
40535
  //# sourceMappingURL=index.modern.js.map