touchstudy-core 0.1.168 → 0.1.169

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 +1713 -226
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.modern.js +1722 -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,22 @@ 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 = "교사에서 교사들에게";
1516
1539
  var lang_ko = {
1517
1540
  problem_solving: problem_solving,
1518
1541
  my_story: my_story,
@@ -2494,6 +2517,12 @@ var lang_ko = {
2494
2517
  reload_page: reload_page,
2495
2518
  last_attendance_date: last_attendance_date,
2496
2519
  less_than_a_day: less_than_a_day,
2520
+ less_than_a_min: less_than_a_min,
2521
+ just_now: just_now,
2522
+ n_mins_ago: n_mins_ago,
2523
+ n_hours_ago: n_hours_ago,
2524
+ one_min_ago: one_min_ago,
2525
+ one_hour_ago: one_hour_ago,
2497
2526
  n_days_ago: n_days_ago,
2498
2527
  n_months_ago: n_months_ago,
2499
2528
  n_years_ago: n_years_ago,
@@ -2658,7 +2687,23 @@ var lang_ko = {
2658
2687
  next_status: next_status,
2659
2688
  arrival_time: arrival_time,
2660
2689
  current_arrival_time: current_arrival_time,
2661
- uppdate_attendance: uppdate_attendance
2690
+ uppdate_attendance: uppdate_attendance,
2691
+ you_have_n_unread_messages: you_have_n_unread_messages,
2692
+ receivers: receivers,
2693
+ total_receivers: total_receivers,
2694
+ sender: sender,
2695
+ manage_notes: manage_notes,
2696
+ notes: notes,
2697
+ new_note: new_note,
2698
+ mark_as_read: mark_as_read,
2699
+ view_notes: view_notes,
2700
+ admin_n: admin_n,
2701
+ teacher_n: teacher_n,
2702
+ sent_a_memo: sent_a_memo,
2703
+ admin_to_admin: admin_to_admin,
2704
+ teacher_to_admin: teacher_to_admin,
2705
+ admin_to_teachers: admin_to_teachers,
2706
+ teacher_to_teachers: teacher_to_teachers
2662
2707
  };
2663
2708
 
2664
2709
  var problem_solving$1 = "Problem Solving";
@@ -3657,6 +3702,12 @@ var please_reload_this_page_to_continue_using_this_tab_or_close_it$1 = "Please r
3657
3702
  var reload_page$1 = "Reload page";
3658
3703
  var last_attendance_date$1 = "Last attendance date";
3659
3704
  var less_than_a_day$1 = "Less than a day";
3705
+ var less_than_a_min$1 = "Less than a minute";
3706
+ var just_now$1 = "Just now";
3707
+ var n_mins_ago$1 = "{{min}} minutes ago";
3708
+ var n_hours_ago$1 = "{{hour}} hours ago";
3709
+ var one_min_ago$1 = "one minute ago";
3710
+ var one_hour_ago$1 = "one hour ago";
3660
3711
  var n_days_ago$1 = "{{day}} days ago";
3661
3712
  var n_months_ago$1 = "{{month}} months ago";
3662
3713
  var n_years_ago$1 = "{{year}} years ago";
@@ -3827,6 +3878,22 @@ var next_status$1 = "Next status";
3827
3878
  var arrival_time$1 = "Arrival time";
3828
3879
  var current_arrival_time$1 = "Current arrival time";
3829
3880
  var uppdate_attendance$1 = "Update attendance";
3881
+ var you_have_n_unread_messages$1 = "You have {{ n }} unread message(s)";
3882
+ var receivers$1 = "Receivers";
3883
+ var total_receivers$1 = "Total receivers";
3884
+ var sender$1 = "Sender";
3885
+ var manage_notes$1 = "Manage notes";
3886
+ var notes$1 = "Notes";
3887
+ var new_note$1 = "New note";
3888
+ var mark_as_read$1 = "Mark as read";
3889
+ var view_notes$1 = "View notes";
3890
+ var admin_n$1 = "Admin {{admin}}";
3891
+ var teacher_n$1 = "Teacher {{teacher}}";
3892
+ var sent_a_memo$1 = "sent a memo";
3893
+ var admin_to_admin$1 = "Admin to admin";
3894
+ var teacher_to_admin$1 = "Teacher to admin";
3895
+ var admin_to_teachers$1 = "Admin to teachers";
3896
+ var teacher_to_teachers$1 = "Teacher to teachers";
3830
3897
  var lang_en = {
3831
3898
  problem_solving: problem_solving$1,
3832
3899
  my_story: my_story$1,
@@ -4809,6 +4876,12 @@ var lang_en = {
4809
4876
  reload_page: reload_page$1,
4810
4877
  last_attendance_date: last_attendance_date$1,
4811
4878
  less_than_a_day: less_than_a_day$1,
4879
+ less_than_a_min: less_than_a_min$1,
4880
+ just_now: just_now$1,
4881
+ n_mins_ago: n_mins_ago$1,
4882
+ n_hours_ago: n_hours_ago$1,
4883
+ one_min_ago: one_min_ago$1,
4884
+ one_hour_ago: one_hour_ago$1,
4812
4885
  n_days_ago: n_days_ago$1,
4813
4886
  n_months_ago: n_months_ago$1,
4814
4887
  n_years_ago: n_years_ago$1,
@@ -4974,7 +5047,23 @@ var lang_en = {
4974
5047
  next_status: next_status$1,
4975
5048
  arrival_time: arrival_time$1,
4976
5049
  current_arrival_time: current_arrival_time$1,
4977
- uppdate_attendance: uppdate_attendance$1
5050
+ uppdate_attendance: uppdate_attendance$1,
5051
+ you_have_n_unread_messages: you_have_n_unread_messages$1,
5052
+ receivers: receivers$1,
5053
+ total_receivers: total_receivers$1,
5054
+ sender: sender$1,
5055
+ manage_notes: manage_notes$1,
5056
+ notes: notes$1,
5057
+ new_note: new_note$1,
5058
+ mark_as_read: mark_as_read$1,
5059
+ view_notes: view_notes$1,
5060
+ admin_n: admin_n$1,
5061
+ teacher_n: teacher_n$1,
5062
+ sent_a_memo: sent_a_memo$1,
5063
+ admin_to_admin: admin_to_admin$1,
5064
+ teacher_to_admin: teacher_to_admin$1,
5065
+ admin_to_teachers: admin_to_teachers$1,
5066
+ teacher_to_teachers: teacher_to_teachers$1
4978
5067
  };
4979
5068
 
4980
5069
  i18n.use(initReactI18next).init({
@@ -6148,8 +6237,12 @@ var NoteSortColumn;
6148
6237
  })(NoteSortColumn || (NoteSortColumn = {}));
6149
6238
  var NoteType;
6150
6239
  (function (NoteType) {
6151
- NoteType[NoteType["Default"] = 0] = "Default";
6152
- NoteType[NoteType["StudentReadable"] = 1] = "StudentReadable";
6240
+ NoteType[NoteType["ToAcademy"] = 0] = "ToAcademy";
6241
+ NoteType[NoteType["ToStudent"] = 1] = "ToStudent";
6242
+ NoteType[NoteType["AdminToAllAdmin"] = 2] = "AdminToAllAdmin";
6243
+ NoteType[NoteType["AdminToAllTeacher"] = 3] = "AdminToAllTeacher";
6244
+ NoteType[NoteType["TeacherToAllAdmin"] = 4] = "TeacherToAllAdmin";
6245
+ NoteType[NoteType["TeacherToTeachers"] = 5] = "TeacherToTeachers";
6153
6246
  })(NoteType || (NoteType = {}));
6154
6247
 
6155
6248
  var SchoolType;
@@ -6321,16 +6414,35 @@ var pushTo = function pushTo(history, data, isReplace) {
6321
6414
  });
6322
6415
  };
6323
6416
 
6324
- var timAgo = function timAgo(date, t) {
6325
- if (date === DATE_MIN_VALUE || date === DATE_TIME_MIN_VALUE) return '';
6417
+ var timAgo = function timAgo(date, t, day) {
6418
+ if (!date || date === DATE_MIN_VALUE || date === DATE_TIME_MIN_VALUE) return '';
6326
6419
  var time = moment.utc(date).local();
6420
+ var years = moment().diff(time, 'years');
6421
+ if (years >= 1) return years >= 2 ? t('n_years_ago', {
6422
+ year: years
6423
+ }) : t("one_year_ago");
6424
+ var months = moment().diff(time, 'months');
6425
+ if (months >= 1) return months >= 2 ? t('n_months_ago', {
6426
+ month: months
6427
+ }) : t("one_month_ago");
6327
6428
  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");
6429
+ if (days < 1 && !day) return t('less_than_a_day');
6430
+ if (days < 1 && day) {
6431
+ var hours = moment().diff(time, 'hours');
6432
+ if (hours >= 1) return hours >= 2 ? t('n_hours_ago', {
6433
+ hour: hours
6434
+ }) : t("one_hour_ago");
6435
+ var mins = moment().diff(time, 'minutes');
6436
+ if (mins >= 1) return mins >= 2 ? t('n_mins_ago', {
6437
+ min: mins
6438
+ }) : t("one_min_ago");
6439
+ var secs = moment().diff(time, 'seconds');
6440
+ if (secs > 10) return t('less_than_a_min');
6441
+ return t("just_now");
6442
+ }
6443
+ return days >= 2 ? t('n_days_ago', {
6444
+ day: days
6445
+ }) : t("one_day_ago");
6334
6446
  };
6335
6447
 
6336
6448
  var toISOString = (function (time) {
@@ -6920,7 +7032,10 @@ var useLanguage = function useLanguage(history, init) {
6920
7032
  };
6921
7033
  };
6922
7034
 
6923
- var useList = function useList(fetchData, defaultQuery) {
7035
+ var useList = function useList(fetchData, defaultQuery, showLoading) {
7036
+ if (showLoading === void 0) {
7037
+ showLoading = true;
7038
+ }
6924
7039
  var dispatch = useDispatch();
6925
7040
  var _useState = useState(defaultQuery),
6926
7041
  filter = _useState[0],
@@ -6934,6 +7049,9 @@ var useList = function useList(fetchData, defaultQuery) {
6934
7049
  var _useState4 = useState(),
6935
7050
  selectedItem = _useState4[0],
6936
7051
  setSelectedItem = _useState4[1];
7052
+ var _useState5 = useState(false),
7053
+ isLoading = _useState5[0],
7054
+ setIsLoading = _useState5[1];
6937
7055
  var textSearchRef = useRef(null);
6938
7056
  var isFirstLoadRef = useRef(true);
6939
7057
  var _useTranslation = useTranslation(),
@@ -6947,11 +7065,13 @@ var useList = function useList(fetchData, defaultQuery) {
6947
7065
  }
6948
7066
  try {
6949
7067
  var _temp2 = function _temp2() {
6950
- isLoading && dispatch(setLoading(false));
7068
+ isLoading && showLoading && dispatch(setLoading(false));
7069
+ setIsLoading(false);
6951
7070
  };
6952
7071
  if (!fetchData) return Promise.resolve();
6953
7072
  if (isFirstLoadRef.current) isFirstLoadRef.current = false;
6954
- isLoading && dispatch(setLoading(true));
7073
+ isLoading && showLoading && dispatch(setLoading(true));
7074
+ setIsLoading(true);
6955
7075
  var _temp = _catch(function () {
6956
7076
  return Promise.resolve(fetchData(filter)).then(function (res) {
6957
7077
  var _res$data$items = res.data.items,
@@ -6976,10 +7096,6 @@ var useList = function useList(fetchData, defaultQuery) {
6976
7096
  };
6977
7097
  var handleSort = function handleSort(sortColumnName) {
6978
7098
  var sortColumnDirection = OrderType.ASC;
6979
- console.log({
6980
- sortColumnName: typeof sortColumnName,
6981
- filter: typeof filter.sortColumnName
6982
- });
6983
7099
  if (filter.sortColumnName == sortColumnName && filter.sortColumnDirection === OrderType.ASC) sortColumnDirection = OrderType.DESC;
6984
7100
  setFilter(_extends({}, filter, {
6985
7101
  sortColumnName: sortColumnName,
@@ -7012,6 +7128,7 @@ var useList = function useList(fetchData, defaultQuery) {
7012
7128
  getData(isFirstLoadRef.current);
7013
7129
  }, [JSON.stringify(filter)]);
7014
7130
  return {
7131
+ isLoading: isLoading,
7015
7132
  filter: filter,
7016
7133
  textSearchRef: textSearchRef,
7017
7134
  paging: paging,
@@ -7114,36 +7231,26 @@ var useLogin = function useLogin(history, homeAcademyUrl, homeUrl, registerUrl,
7114
7231
  }
7115
7232
  var isAcademy = !!academyDomain || isLearningSpace;
7116
7233
  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
- });
7234
+ try {
7235
+ return Promise.resolve(isAcademy ? apiLoginGoogle(data, isLearningSpace) : apiLoginGoogleSuperAdmin(data)).then(function (loginResponse) {
7236
+ var result = loginResponse.data;
7237
+ var _temp = function () {
7238
+ if (loginResponse.status === 204 && academyDomain) {
7239
+ localStorage.removeItem(ACADEMY_DOMAIN);
7240
+ localStorage.removeItem(LEARNING_SPACE);
7241
+ return Promise.resolve(apiLoginGoogleSuperAdmin(data)).then(function (_apiLoginGoogleSuperA) {
7242
+ loginResponse = _apiLoginGoogleSuperA;
7243
+ result = loginResponse.data;
7244
+ });
7245
+ }
7246
+ }();
7247
+ return _temp && _temp.then ? _temp.then(function () {
7248
+ return result;
7249
+ }) : result;
7250
+ });
7251
+ } catch (e) {
7252
+ return Promise.reject(e);
7253
+ }
7147
7254
  }, isStudent, isLogout)).then(function () {});
7148
7255
  } catch (e) {
7149
7256
  return Promise.reject(e);
@@ -7156,21 +7263,14 @@ var useLogin = function useLogin(history, homeAcademyUrl, homeUrl, registerUrl,
7156
7263
  try {
7157
7264
  var isStudent = data.role === Role.Student;
7158
7265
  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
- });
7266
+ try {
7267
+ return Promise.resolve(!isLearningSpace && !domain ? apiLoginSuperAdminWithAccessToken(data) : apiLoginWithAccessToken(data, isLearningSpace, domain)).then(function (loginResponse) {
7268
+ var result = loginResponse.data;
7269
+ return result;
7270
+ });
7271
+ } catch (e) {
7272
+ return Promise.reject(e);
7273
+ }
7174
7274
  }, isStudent, isLogout, superAdminRedirectPath)).then(function () {});
7175
7275
  } catch (e) {
7176
7276
  return Promise.reject(e);
@@ -7181,13 +7281,13 @@ var useLogin = function useLogin(history, homeAcademyUrl, homeUrl, registerUrl,
7181
7281
  isLogout = true;
7182
7282
  }
7183
7283
  try {
7184
- var _temp6 = function _temp6(_result) {
7284
+ var _temp3 = function _temp3(_result) {
7185
7285
  if (_exit) return _result;
7186
7286
  dispatch(setLoading(false));
7187
7287
  };
7188
7288
  var _exit = false;
7189
7289
  dispatch(setLoading(true));
7190
- var _temp5 = _catch(function () {
7290
+ var _temp2 = _catch(function () {
7191
7291
  return Promise.resolve(apiLogin()).then(function (loginResponse) {
7192
7292
  var isFirstLogin = loginResponse.isFirstLogin,
7193
7293
  token = loginResponse.token,
@@ -7211,7 +7311,7 @@ var useLogin = function useLogin(history, homeAcademyUrl, homeUrl, registerUrl,
7211
7311
  alert(getErrorMessage(t, error));
7212
7312
  isLogout && handleSignOut();
7213
7313
  });
7214
- return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
7314
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2));
7215
7315
  } catch (e) {
7216
7316
  return Promise.reject(e);
7217
7317
  }
@@ -8020,7 +8120,8 @@ var getStudentsApi = function getStudentsApi(textSearch) {
8020
8120
  return api.get("" + STUDENT_URL, {
8021
8121
  params: {
8022
8122
  textSearch: textSearch,
8023
- roles: [Role.Admin]
8123
+ roles: [Role.Admin],
8124
+ pageSize: 100
8024
8125
  }
8025
8126
  });
8026
8127
  };
@@ -8031,7 +8132,10 @@ var StudentSelector = function StudentSelector(_ref) {
8031
8132
  externalStudentIds = _ref.externalStudentIds,
8032
8133
  _ref$disabled = _ref.disabled,
8033
8134
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
8034
- title = _ref.title;
8135
+ title = _ref.title,
8136
+ _ref$isMulti = _ref.isMulti,
8137
+ isMulti = _ref$isMulti === void 0 ? true : _ref$isMulti,
8138
+ minSearchLength = _ref.minSearchLength;
8035
8139
  var _useState = useState([]),
8036
8140
  students = _useState[0],
8037
8141
  setStudents = _useState[1];
@@ -8066,7 +8170,7 @@ var StudentSelector = function StudentSelector(_ref) {
8066
8170
  }, [searchString]);
8067
8171
  useEffect(function () {
8068
8172
  timeout && timeout.current && clearTimeout(timeout.current);
8069
- if (!searchString || searchString.trim().length < 2) {
8173
+ if (minSearchLength && (!searchString || searchString.trim().length < minSearchLength)) {
8070
8174
  setStudents([]);
8071
8175
  } else {
8072
8176
  timeout.current = setTimeout(loadData, 300);
@@ -8092,8 +8196,8 @@ var StudentSelector = function StudentSelector(_ref) {
8092
8196
  },
8093
8197
  isDisabled: disabled,
8094
8198
  isLoading: isLoading,
8095
- placeholder: t('placeholder_student_selector'),
8096
- isMulti: true,
8199
+ placeholder: t(minSearchLength ? 'placeholder_student_selector' : 'select_placeholder'),
8200
+ isMulti: isMulti,
8097
8201
  value: value,
8098
8202
  onChange: onChange
8099
8203
  }));
@@ -14180,7 +14284,7 @@ var DrawerHeader = function DrawerHeader(_ref) {
14180
14284
  fontSize: "13px",
14181
14285
  fontWeight: 500
14182
14286
  }
14183
- }, student.schoolName), React__default.createElement(Typography, {
14287
+ }, student.schoolName), !!student.grade && React__default.createElement(Typography, {
14184
14288
  sx: {
14185
14289
  color: grey[500],
14186
14290
  fontSize: "13px",
@@ -15488,6 +15592,9 @@ var getNotesApi = function getNotesApi(query) {
15488
15592
  params: query
15489
15593
  });
15490
15594
  };
15595
+ var getNoteByIdApi = function getNoteByIdApi(id) {
15596
+ return api.get(NOTES_URL + "/" + id);
15597
+ };
15491
15598
  var createNoteApi = function createNoteApi(note) {
15492
15599
  return api.post("" + NOTES_URL, note);
15493
15600
  };
@@ -15496,6 +15603,9 @@ var updateNoteApi = function updateNoteApi(id, content) {
15496
15603
  content: content
15497
15604
  });
15498
15605
  };
15606
+ var updateNoteDataApi = function updateNoteDataApi(id, data) {
15607
+ return api.put(NOTES_URL + "/" + id, data);
15608
+ };
15499
15609
  var deleteNoteApi = function deleteNoteApi(id) {
15500
15610
  return api["delete"](NOTES_URL + "/" + id);
15501
15611
  };
@@ -15770,6 +15880,121 @@ var NotesContainer = function NotesContainer(_ref) {
15770
15880
  });
15771
15881
  };
15772
15882
 
15883
+ var getNoteType = function getNoteType(t, type) {
15884
+ switch (type) {
15885
+ case NoteType.ToAcademy:
15886
+ return t("academy");
15887
+ case NoteType.ToStudent:
15888
+ return t("student_parents");
15889
+ case NoteType.AdminToAllAdmin:
15890
+ return t("admin_to_admin");
15891
+ case NoteType.AdminToAllTeacher:
15892
+ return t("admin_to_teachers");
15893
+ case NoteType.TeacherToAllAdmin:
15894
+ return t("teacher_to_admin");
15895
+ case NoteType.TeacherToTeachers:
15896
+ return t("teacher_to_teachers");
15897
+ default:
15898
+ return "";
15899
+ }
15900
+ };
15901
+
15902
+ var NoteItemList = function NoteItemList(_ref) {
15903
+ var _data$reciever, _data$reciever2, _data$recievers;
15904
+ var data = _ref.data,
15905
+ index = _ref.index,
15906
+ role = _ref.role,
15907
+ calcOrderNumber = _ref.calcOrderNumber,
15908
+ onDelete = _ref.onDelete,
15909
+ onUpdate = _ref.onUpdate,
15910
+ onView = _ref.onView;
15911
+ var isAdminUser = useSelector(function (state) {
15912
+ var _state$common, _state$common$user, _state$common$user$ro;
15913
+ 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);
15914
+ });
15915
+ var userId = useSelector(function (state) {
15916
+ var _state$common2, _state$common2$user;
15917
+ 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;
15918
+ });
15919
+ var _useTranslation = useTranslation(),
15920
+ t = _useTranslation.t;
15921
+ var isAdmin = role === Role.Admin;
15922
+ var order = calcOrderNumber(index);
15923
+ var createdAt = utcToLocalTime(data.createdAt, t("date_time_format"));
15924
+ var handleDelete = function handleDelete() {
15925
+ onDelete(data);
15926
+ };
15927
+ var handleUpdate = function handleUpdate() {
15928
+ onUpdate(data);
15929
+ };
15930
+ var handleView = function handleView() {
15931
+ onView(data);
15932
+ };
15933
+ var disabled = !data.isOwned && (!isAdminUser || data.type == undefined || data.type == NoteType.TeacherToAllAdmin || data.type == NoteType.TeacherToTeachers);
15934
+ useEffect(function () {
15935
+ if (window.MathJax) {
15936
+ var _window$MathJax;
15937
+ (_window$MathJax = window.MathJax) === null || _window$MathJax === void 0 ? void 0 : _window$MathJax.typeset();
15938
+ }
15939
+ }, [data.content]);
15940
+ var noteType = data.type === undefined ? "" : getNoteType(t, data.type);
15941
+ 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, {
15942
+ color: green[700],
15943
+ fontWeight: 600
15944
+ }, t("admin")) : React__default.createElement(Fragment$1, null, React__default.createElement(Typography, {
15945
+ color: green[700],
15946
+ fontWeight: 600
15947
+ }, data.sender.fullName, data.sender.id === userId && React__default.createElement(Typography, {
15948
+ display: "inline-block",
15949
+ color: grey$1[600],
15950
+ fontWeight: 600
15951
+ }, "(", " " + 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, {
15952
+ color: blue[700],
15953
+ fontWeight: 600
15954
+ }, (_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, {
15955
+ direction: "column"
15956
+ }, (_data$recievers = data.recievers) === null || _data$recievers === void 0 ? void 0 : _data$recievers.slice(0, 2).map(function (i) {
15957
+ return React__default.createElement(Typography, null, i.fullName, " - ", i.email);
15958
+ }), 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, {
15959
+ sx: {
15960
+ display: "-webkit-box",
15961
+ lineClamp: 3,
15962
+ WebkitLineClamp: 3,
15963
+ WebkitBoxOrient: "vertical",
15964
+ boxOrient: "vertical",
15965
+ overflow: "hidden"
15966
+ },
15967
+ dangerouslySetInnerHTML: {
15968
+ __html: data.content
15969
+ }
15970
+ })), React__default.createElement(TableCell$1, {
15971
+ className: "text-nowrap"
15972
+ }, noteType), React__default.createElement(TableCell$1, null, createdAt), React__default.createElement(TableCell$1, null, React__default.createElement("div", {
15973
+ className: "d-flex"
15974
+ }, React__default.createElement(Box, null, React__default.createElement(IconButton, {
15975
+ color: "default",
15976
+ className: "bg-primary text-white me-1",
15977
+ onClick: handleView
15978
+ }, React__default.createElement(FaEye, {
15979
+ size: 12
15980
+ }))), React__default.createElement(Box, null, React__default.createElement(IconButton, {
15981
+ color: "default",
15982
+ className: styles$5["action-btn"] + " " + (disabled ? "bg-secondary" : "bg-warning") + " text-white me-2",
15983
+ onClick: handleUpdate,
15984
+ disabled: disabled
15985
+ }, React__default.createElement(HiOutlinePencilAlt, {
15986
+ className: styles$5["action-btn--pencil"],
15987
+ size: 12
15988
+ }))), React__default.createElement(Box, null, React__default.createElement(IconButton, {
15989
+ onClick: handleDelete,
15990
+ color: "default",
15991
+ className: styles$5["action-btn"] + " " + (disabled ? "bg-secondary" : "bg-danger") + " text-white",
15992
+ disabled: disabled
15993
+ }, React__default.createElement(FaTrashCan, {
15994
+ size: 12
15995
+ }))))));
15996
+ };
15997
+
15773
15998
  var NoteContent = function NoteContent(_ref) {
15774
15999
  var content = _ref.content;
15775
16000
  useEffect(function () {
@@ -15791,7 +16016,7 @@ var NoteContent = function NoteContent(_ref) {
15791
16016
  };
15792
16017
 
15793
16018
  var NoteDrawer = function NoteDrawer(props) {
15794
- var _BRIEF_GRADE_OPTIONS$, _data$content;
16019
+ var _BRIEF_GRADE_OPTIONS$, _note$content;
15795
16020
  var anchor = props.anchor,
15796
16021
  open = props.open,
15797
16022
  student = props.student,
@@ -15799,7 +16024,8 @@ var NoteDrawer = function NoteDrawer(props) {
15799
16024
  data = props.data,
15800
16025
  width = props.width,
15801
16026
  _props$showStudentInf = props.showStudentInfo,
15802
- showStudentInfo = _props$showStudentInf === void 0 ? true : _props$showStudentInf;
16027
+ showStudentInfo = _props$showStudentInf === void 0 ? true : _props$showStudentInf,
16028
+ id = props.id;
15803
16029
  var _useTranslation = useTranslation(),
15804
16030
  t = _useTranslation.t;
15805
16031
  var academy = useSelector(function (state) {
@@ -15810,6 +16036,46 @@ var NoteDrawer = function NoteDrawer(props) {
15810
16036
  var _state$common2;
15811
16037
  return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : _state$common2.language;
15812
16038
  });
16039
+ var _useState = useState(false),
16040
+ loading = _useState[0],
16041
+ setLoading = _useState[1];
16042
+ var _useState2 = useState(),
16043
+ noteData = _useState2[0],
16044
+ setNoteData = _useState2[1];
16045
+ useEffect(function () {
16046
+ var getNoteById = function getNoteById() {
16047
+ try {
16048
+ var _temp2 = function _temp2() {
16049
+ setLoading(false);
16050
+ };
16051
+ if (!id) return Promise.resolve();
16052
+ setLoading(true);
16053
+ var _temp = _catch(function () {
16054
+ return Promise.resolve(getNoteByIdApi(+id)).then(function (res) {
16055
+ setNoteData(res.data);
16056
+ });
16057
+ }, function (error) {
16058
+ toast.error(getErrorMessage(t, error));
16059
+ });
16060
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
16061
+ } catch (e) {
16062
+ return Promise.reject(e);
16063
+ }
16064
+ };
16065
+ getNoteById();
16066
+ }, [id]);
16067
+ var note = data != null ? data : noteData;
16068
+ var user = useMemo(function () {
16069
+ if (student) return student;
16070
+ if (!note) return null;
16071
+ switch (note.type) {
16072
+ case NoteType.ToAcademy:
16073
+ case NoteType.ToStudent:
16074
+ return note.reciever;
16075
+ default:
16076
+ return note.sender;
16077
+ }
16078
+ }, [JSON.stringify(note), JSON.stringify(student)]);
15813
16079
  return React__default.createElement(Drawer, {
15814
16080
  anchor: anchor,
15815
16081
  open: open,
@@ -15836,11 +16102,11 @@ var NoteDrawer = function NoteDrawer(props) {
15836
16102
  onClick: onClose
15837
16103
  }, React__default.createElement(IoClose, {
15838
16104
  size: 32
15839
- }))), showStudentInfo && React__default.createElement(Box, {
16105
+ }))), 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
16106
  sx: {
15841
16107
  padding: "16px 40px"
15842
16108
  }
15843
- }, !student ? React__default.createElement(Stack, {
16109
+ }, !user || loading ? React__default.createElement(Stack, {
15844
16110
  direction: "row",
15845
16111
  gap: 3
15846
16112
  }, React__default.createElement(Skeleton, {
@@ -15875,7 +16141,7 @@ var NoteDrawer = function NoteDrawer(props) {
15875
16141
  color: green[500],
15876
16142
  lineHeight: "22px"
15877
16143
  }
15878
- }, student.fullName), React__default.createElement(Stack, {
16144
+ }, user.fullName), React__default.createElement(Stack, {
15879
16145
  direction: "row",
15880
16146
  alignItems: "center",
15881
16147
  gap: 1
@@ -15885,17 +16151,29 @@ var NoteDrawer = function NoteDrawer(props) {
15885
16151
  fontSize: "13px",
15886
16152
  fontWeight: 500
15887
16153
  }
15888
- }, student.schoolName), React__default.createElement(Typography, {
16154
+ }, user.schoolName), !!user.grade && React__default.createElement(Typography, {
15889
16155
  sx: {
15890
16156
  color: grey[500],
15891
16157
  fontSize: "13px",
15892
16158
  fontWeight: 500
15893
16159
  }
15894
16160
  }, t(function (label) {
15895
- return label ? t(label) : formatGrade(student.grade, t, language);
16161
+ return label ? t(label) : formatGrade(user.grade, t, language);
15896
16162
  }((_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, {
16163
+ return o.value === Number(user.grade);
16164
+ })) === null || _BRIEF_GRADE_OPTIONS$ === void 0 ? void 0 : _BRIEF_GRADE_OPTIONS$.label))))))), !note && !loading && React__default.createElement(Stack, {
16165
+ padding: "40px 24px 0",
16166
+ gap: "16px"
16167
+ }, React__default.createElement(Typography, {
16168
+ className: "text-muted"
16169
+ }, t("no_data"))), loading && React__default.createElement(Stack, {
16170
+ padding: "40px 24px 0",
16171
+ gap: "16px",
16172
+ justifyContent: "center"
16173
+ }, React__default.createElement(CircularProgress, {
16174
+ size: 40,
16175
+ color: "primary"
16176
+ })), note && !loading && React__default.createElement(Stack, {
15899
16177
  padding: "40px 24px 0",
15900
16178
  gap: "16px"
15901
16179
  }, React__default.createElement(Stack, {
@@ -15908,7 +16186,7 @@ var NoteDrawer = function NoteDrawer(props) {
15908
16186
  fontWeight: "700",
15909
16187
  color: "#414E62"
15910
16188
  }
15911
- }, data === null || data === void 0 ? void 0 : data.fullName)), React__default.createElement(Stack, {
16189
+ }, note === null || note === void 0 ? void 0 : note.fullName)), React__default.createElement(Stack, {
15912
16190
  display: "flex",
15913
16191
  justifyContent: "end"
15914
16192
  }, React__default.createElement(Typography, {
@@ -15918,7 +16196,7 @@ var NoteDrawer = function NoteDrawer(props) {
15918
16196
  color: "#97A1AF",
15919
16197
  textAlign: "end"
15920
16198
  }
15921
- }, utcToLocalTime(data === null || data === void 0 ? void 0 : data.createdAt, t("date_format"))), React__default.createElement(Typography, {
16199
+ }, utcToLocalTime(note === null || note === void 0 ? void 0 : note.createdAt, t("date_format"))), React__default.createElement(Typography, {
15922
16200
  sx: {
15923
16201
  fontSize: "12px",
15924
16202
  fontWeight: "500",
@@ -15926,11 +16204,808 @@ var NoteDrawer = function NoteDrawer(props) {
15926
16204
  textAlign: "end"
15927
16205
  }
15928
16206
  }, 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 : ""
16207
+ content: (_note$content = note === null || note === void 0 ? void 0 : note.content) != null ? _note$content : ""
15930
16208
  })));
15931
16209
  };
15932
16210
 
15933
- var useVirtualList = function useVirtualList(studentId, defaultFilter, getItemsApi) {
16211
+ var TEACHER_URL = BASE_URL + "/api/teacher";
16212
+ var getTeacherListApi = function getTeacherListApi(query) {
16213
+ return api.get("" + TEACHER_URL, {
16214
+ params: query
16215
+ });
16216
+ };
16217
+
16218
+ var TeacherSelector$1 = function TeacherSelector(_ref) {
16219
+ var value = _ref.value,
16220
+ onChange = _ref.onChange,
16221
+ placeholder = _ref.placeholder,
16222
+ externalTeacherIds = _ref.externalTeacherIds,
16223
+ title = _ref.title,
16224
+ isMultiple = _ref.isMultiple,
16225
+ _ref$isClearable = _ref.isClearable,
16226
+ isClearable = _ref$isClearable === void 0 ? true : _ref$isClearable,
16227
+ useUserId = _ref.useUserId,
16228
+ exceptMe = _ref.exceptMe,
16229
+ isDisabled = _ref.isDisabled;
16230
+ var _useState = useState([]),
16231
+ teachers = _useState[0],
16232
+ setTeachers = _useState[1];
16233
+ var _useState2 = useState(""),
16234
+ searchString = _useState2[0],
16235
+ setSearchString = _useState2[1];
16236
+ var _useState3 = useState(false),
16237
+ isLoading = _useState3[0],
16238
+ setLoading = _useState3[1];
16239
+ var _useTranslation = useTranslation(),
16240
+ t = _useTranslation.t;
16241
+ var debounceSearch = useCallback(_$8.debounce(function (value) {
16242
+ loadData(value);
16243
+ }, 500), []);
16244
+ var handleChangeSearchText = function handleChangeSearchText(value) {
16245
+ setSearchString(value.trim());
16246
+ debounceSearch(value.trim());
16247
+ };
16248
+ var loadData = function loadData(textSearch) {
16249
+ try {
16250
+ var _temp2 = function _temp2() {
16251
+ setLoading(false);
16252
+ };
16253
+ setLoading(true);
16254
+ var _temp = _catch(function () {
16255
+ return Promise.resolve(getTeacherListApi({
16256
+ textSearch: textSearch,
16257
+ pageSize: 100,
16258
+ currentPage: 1,
16259
+ exceptMe: exceptMe,
16260
+ sortColumnDirection: OrderType.DESC,
16261
+ sortColumnName: "User.UserProfile.FullName"
16262
+ })).then(function (res) {
16263
+ var _res$data$items = res.data.items,
16264
+ items = _res$data$items === void 0 ? [] : _res$data$items;
16265
+ setTeachers(items);
16266
+ });
16267
+ }, function (err) {
16268
+ toast.error(getErrorMessage(t, err));
16269
+ });
16270
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
16271
+ } catch (e) {
16272
+ return Promise.reject(e);
16273
+ }
16274
+ };
16275
+ useEffect(function () {
16276
+ loadData();
16277
+ }, []);
16278
+ var options = teachers.filter(function (teacher) {
16279
+ return !externalTeacherIds || externalTeacherIds && !externalTeacherIds.includes(teacher.id);
16280
+ }).map(function (teacher) {
16281
+ return {
16282
+ label: teacher.teacherName + " - " + teacher.teacherEmail,
16283
+ value: useUserId ? teacher.teacherUserId : teacher.id
16284
+ };
16285
+ });
16286
+ return React__default.createElement(FormGroup, {
16287
+ className: "" + styles["filter-item"]
16288
+ }, !!title && React__default.createElement("label", {
16289
+ className: "" + styles["title-form"]
16290
+ }, title), React__default.createElement(CustomSelectOption, {
16291
+ options: options,
16292
+ onInputChange: function onInputChange(inputValue) {
16293
+ return handleChangeSearchText(inputValue);
16294
+ },
16295
+ isLoading: isLoading,
16296
+ placeholder: placeholder || t('select_placeholder'),
16297
+ isMulti: isMultiple,
16298
+ value: value,
16299
+ inputValue: searchString,
16300
+ onChange: onChange,
16301
+ isClearable: isClearable,
16302
+ isDisabled: isDisabled
16303
+ }));
16304
+ };
16305
+
16306
+ var schema$3 = object().shape({
16307
+ content: string().trim().required(),
16308
+ studentId: number().when("type", {
16309
+ is: function is(type) {
16310
+ return type == NoteType.ToAcademy || type == NoteType.ToStudent;
16311
+ },
16312
+ then: function then(schema) {
16313
+ return schema.required("student_required");
16314
+ },
16315
+ otherwise: function otherwise(schema) {
16316
+ return schema.notRequired();
16317
+ }
16318
+ }),
16319
+ userIds: array().of(number()).when("type", {
16320
+ is: function is(type) {
16321
+ return type == NoteType.TeacherToTeachers;
16322
+ },
16323
+ then: function then(schema) {
16324
+ return schema.required("teachers_required");
16325
+ },
16326
+ otherwise: function otherwise(schema) {
16327
+ return schema.notRequired();
16328
+ }
16329
+ }),
16330
+ type: number()
16331
+ });
16332
+ var GeneralNoteDialog = function GeneralNoteDialog(_ref) {
16333
+ var _selectedNote$recieve, _selectedNote$recieve2, _selectedNote$recieve3;
16334
+ var open = _ref.open,
16335
+ type = _ref.type,
16336
+ selectedNote = _ref.selectedNote,
16337
+ value = _ref.value,
16338
+ onClose = _ref.onClose,
16339
+ onSaveNote = _ref.onSaveNote;
16340
+ var _useTranslation = useTranslation(),
16341
+ t = _useTranslation.t;
16342
+ var handleSaveNote = function handleSaveNote(val) {
16343
+ onSaveNote(val);
16344
+ };
16345
+ var tip = useMemo(function () {
16346
+ if (type === undefined) return "";
16347
+ switch (type) {
16348
+ case NoteType.ToAcademy:
16349
+ return "academy";
16350
+ case NoteType.ToStudent:
16351
+ return "student_parents";
16352
+ case NoteType.AdminToAllAdmin:
16353
+ case NoteType.AdminToAllTeacher:
16354
+ case NoteType.TeacherToAllAdmin:
16355
+ return "admin";
16356
+ case NoteType.TeacherToTeachers:
16357
+ return "teacher";
16358
+ default:
16359
+ return "";
16360
+ }
16361
+ }, [type]);
16362
+ return React__default.createElement(Dialog, {
16363
+ onClose: onClose,
16364
+ open: open,
16365
+ maxWidth: "md",
16366
+ scroll: "body",
16367
+ fullWidth: true,
16368
+ disableEnforceFocus: true,
16369
+ disableAutoFocus: true
16370
+ }, React__default.createElement(DialogTitle$1, {
16371
+ id: "customized-dialog-title"
16372
+ }, React__default.createElement(Typography$1, {
16373
+ fontWeight: 700,
16374
+ fontSize: "16px",
16375
+ lineHeight: "19.09px",
16376
+ color: "#202B37"
16377
+ }, t(type === NoteType.ToAcademy || type === NoteType.ToStudent ? selectedNote ? "edit_student_note" : "student_note_taking" : "note"), tip ? " " + t(tip) : "")), React__default.createElement(IconButton$1, {
16378
+ "aria-label": "close",
16379
+ sx: {
16380
+ position: "absolute",
16381
+ right: 8,
16382
+ top: 8,
16383
+ color: function color(theme) {
16384
+ return theme.palette.grey[500];
16385
+ }
16386
+ },
16387
+ onClick: onClose
16388
+ }, React__default.createElement(iconCloseDialog, null)), React__default.createElement(Formik, {
16389
+ initialValues: {
16390
+ content: value ? value.content : (selectedNote === null || selectedNote === void 0 ? void 0 : selectedNote.content) || "",
16391
+ type: type,
16392
+ 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,
16393
+ student: value ? value.student : selectedNote !== null && selectedNote !== void 0 && selectedNote.reciever ? {
16394
+ label: selectedNote.reciever.fullName,
16395
+ value: selectedNote.reciever.id
16396
+ } : undefined,
16397
+ 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) {
16398
+ return i.id;
16399
+ }),
16400
+ 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) {
16401
+ return {
16402
+ label: i.fullName,
16403
+ value: i.id
16404
+ };
16405
+ })
16406
+ },
16407
+ validationSchema: schema$3,
16408
+ enableReinitialize: true,
16409
+ onSubmit: handleSaveNote
16410
+ }, function (_ref2) {
16411
+ var _selectedNote$recieve4;
16412
+ var values = _ref2.values,
16413
+ errors = _ref2.errors,
16414
+ setFieldValue = _ref2.setFieldValue;
16415
+ return React__default.createElement(Form, null, React__default.createElement(DialogContent$1, {
16416
+ sx: {
16417
+ padding: 0,
16418
+ overflowY: "auto"
16419
+ }
16420
+ }, React__default.createElement(Box, {
16421
+ display: "flex",
16422
+ flexDirection: "column",
16423
+ gap: "8px",
16424
+ padding: "24px 24px 40px 24px"
16425
+ }, (type === NoteType.ToAcademy || type === NoteType.ToStudent) && React__default.createElement(Stack, null, React__default.createElement("label", {
16426
+ htmlFor: "student",
16427
+ className: styles["form-label"] + " " + styles$5["form-label-dialog"]
16428
+ }, t("student_name")), selectedNote ? React__default.createElement(Typography$1, {
16429
+ sx: {
16430
+ fontWeight: 700,
16431
+ fontSize: "14px",
16432
+ color: "rgba(61, 198, 116, 1)"
16433
+ }
16434
+ }, (_selectedNote$recieve4 = selectedNote.reciever) === null || _selectedNote$recieve4 === void 0 ? void 0 : _selectedNote$recieve4.fullName) : React__default.createElement(Field, {
16435
+ id: "student",
16436
+ style: {
16437
+ width: "100%"
16438
+ },
16439
+ name: "student",
16440
+ className: styles["form-control"],
16441
+ render: function render(_ref3) {
16442
+ var field = _ref3.field;
16443
+ return React__default.createElement(StudentSelector, {
16444
+ value: field.value,
16445
+ onChange: function onChange(val) {
16446
+ setFieldValue("studentId", val === null || val === void 0 ? void 0 : val.value);
16447
+ setFieldValue("student", val);
16448
+ },
16449
+ isMulti: false
16450
+ });
16451
+ }
16452
+ }), !!errors.studentId && React__default.createElement(Typography$1, {
16453
+ fontWeight: 500,
16454
+ fontSize: "10px",
16455
+ lineHeight: "11.93px",
16456
+ mt: 1,
16457
+ color: "#F34B4B"
16458
+ }, errors.studentId)), (type === NoteType.AdminToAllAdmin || type === NoteType.AdminToAllTeacher) && React__default.createElement(FormControl, {
16459
+ className: "w-100"
16460
+ }, React__default.createElement(FormLabel, {
16461
+ className: "fw-medium",
16462
+ id: "type"
16463
+ }, t("receivers")), React__default.createElement(RadioGroup, {
16464
+ className: "flex-row flex-wrap"
16465
+ }, React__default.createElement(FormControlLabel, {
16466
+ control: React__default.createElement(Radio, {
16467
+ checked: values.type === NoteType.AdminToAllAdmin || values.type === NoteType.TeacherToAllAdmin,
16468
+ onChange: function onChange(_) {
16469
+ return setFieldValue("type", NoteType.AdminToAllAdmin);
16470
+ }
16471
+ }),
16472
+ label: t("admin")
16473
+ }), React__default.createElement(FormControlLabel, {
16474
+ control: React__default.createElement(Radio, {
16475
+ checked: values.type === NoteType.AdminToAllTeacher,
16476
+ onChange: function onChange(_) {
16477
+ return setFieldValue("type", NoteType.AdminToAllTeacher);
16478
+ }
16479
+ }),
16480
+ label: t("teacher")
16481
+ }))), type === NoteType.TeacherToTeachers && React__default.createElement(Stack, null, React__default.createElement("label", {
16482
+ htmlFor: "teachers",
16483
+ className: styles["form-label"] + " " + styles$5["form-label-dialog"]
16484
+ }, t("teachers")), React__default.createElement(Field, {
16485
+ id: "users",
16486
+ style: {
16487
+ width: "100%"
16488
+ },
16489
+ name: "users",
16490
+ className: styles["form-control"],
16491
+ render: function render(_ref4) {
16492
+ var field = _ref4.field;
16493
+ return React__default.createElement(TeacherSelector$1, {
16494
+ value: field.value,
16495
+ onChange: function onChange(val) {
16496
+ var _val$map, _val$map2;
16497
+ 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) {
16498
+ return i.value;
16499
+ })) != null ? _val$map : []);
16500
+ setFieldValue("users", val != null ? val : []);
16501
+ },
16502
+ isDisabled: !!selectedNote,
16503
+ exceptMe: true,
16504
+ isMultiple: true,
16505
+ useUserId: true
16506
+ });
16507
+ }
16508
+ }), !!errors.userIds && React__default.createElement(Typography$1, {
16509
+ fontWeight: 500,
16510
+ fontSize: "10px",
16511
+ lineHeight: "11.93px",
16512
+ mt: 1,
16513
+ color: "#F34B4B"
16514
+ }, errors.userIds)), React__default.createElement(Stack, null, React__default.createElement("label", {
16515
+ htmlFor: "content-question",
16516
+ className: styles["form-label"] + " " + styles$5["form-label-dialog"]
16517
+ }, t("incorrect_answer_note_contents")), React__default.createElement(Box, {
16518
+ position: "relative",
16519
+ display: "flex",
16520
+ flexDirection: "row",
16521
+ alignItems: "center"
16522
+ }, React__default.createElement(Field, {
16523
+ id: "content-question",
16524
+ style: {
16525
+ width: "100%"
16526
+ },
16527
+ name: "content",
16528
+ placeholder: t("the_problem_is_difficult"),
16529
+ className: styles["form-control"],
16530
+ render: function render(_ref5) {
16531
+ var field = _ref5.field;
16532
+ return React__default.createElement(NoteTinyEditor, {
16533
+ initValue: field.value,
16534
+ onChange: function onChange(text) {
16535
+ return setFieldValue("content", text);
16536
+ }
16537
+ });
16538
+ }
16539
+ })), !!errors.content && React__default.createElement(Typography$1, {
16540
+ fontWeight: 500,
16541
+ fontSize: "10px",
16542
+ lineHeight: "11.93px",
16543
+ mt: 1,
16544
+ color: "#F34B4B"
16545
+ }, errors.content), React__default.createElement(Box, {
16546
+ marginBottom: "4px"
16547
+ })))), React__default.createElement(DialogActions$1, {
16548
+ sx: {
16549
+ display: "flex",
16550
+ justifyContent: "space-between",
16551
+ alignItems: "center",
16552
+ padding: "12px",
16553
+ borderTop: "1px solid #CED2DA"
16554
+ }
16555
+ }, React__default.createElement(MButton, {
16556
+ className: styles$5["btn-cancel"],
16557
+ onClick: onClose
16558
+ }, React__default.createElement(Typography$1, {
16559
+ sx: {
16560
+ color: styles.dark + " !important"
16561
+ },
16562
+ fontWeight: 700,
16563
+ fontSize: "14px",
16564
+ lineHeight: "16.71px"
16565
+ }, t("cancel"))), React__default.createElement(MButton, {
16566
+ variant: "contained",
16567
+ sx: {
16568
+ bgcolor: styles.dark
16569
+ },
16570
+ className: styles$5["btn-register"],
16571
+ type: "submit"
16572
+ }, React__default.createElement(Typography$1, {
16573
+ fontWeight: 700,
16574
+ fontSize: "14px",
16575
+ lineHeight: "16.71px",
16576
+ color: "#FFFFFF"
16577
+ }, t("registration")))));
16578
+ }));
16579
+ };
16580
+
16581
+ var NoteList = function NoteList(_ref) {
16582
+ var defaultFilter = _ref.defaultFilter,
16583
+ role = _ref.role,
16584
+ headers = _ref.headers,
16585
+ isAdmin = _ref.isAdmin;
16586
+ var _useTranslation = useTranslation(),
16587
+ t = _useTranslation.t;
16588
+ var _useList = useList(function (filter) {
16589
+ return getNotesApi(filter);
16590
+ }, defaultFilter, false),
16591
+ isLoading = _useList.isLoading,
16592
+ filter = _useList.filter,
16593
+ textSearchRef = _useList.textSearchRef,
16594
+ paging = _useList.paging,
16595
+ data = _useList.data,
16596
+ selectedItem = _useList.selectedItem,
16597
+ handleSort = _useList.handleSort,
16598
+ handleChangeSearchText = _useList.handleChangeSearchText,
16599
+ handleChangePage = _useList.handleChangePage,
16600
+ calcOrderNumber = _useList.calcOrderNumber,
16601
+ handleChangeSelectedItem = _useList.handleChangeSelectedItem,
16602
+ getData = _useList.getData;
16603
+ var dispatch = useDispatch();
16604
+ var _useState = useState(false),
16605
+ openNoteViewDrawer = _useState[0],
16606
+ setOpenNoteViewDrawer = _useState[1];
16607
+ var _useState2 = useState(),
16608
+ openNoteDialog = _useState2[0],
16609
+ setOpenNoteDialog = _useState2[1];
16610
+ var _useState3 = useState(),
16611
+ noteRequest = _useState3[0],
16612
+ setNoteRequest = _useState3[1];
16613
+ var _useState4 = useState(false),
16614
+ openConfirmNote = _useState4[0],
16615
+ setOpenConfirmNote = _useState4[1];
16616
+ var _useState5 = useState(false),
16617
+ openDeleteNoteDialog = _useState5[0],
16618
+ setOpenDeleteNoteDialog = _useState5[1];
16619
+ var handleOpenCreateNoteDialog = function handleOpenCreateNoteDialog() {
16620
+ var _defaultFilter$types;
16621
+ 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) {
16622
+ setOpenNoteDialog(isAdmin ? NoteType.AdminToAllAdmin : NoteType.TeacherToAllAdmin);
16623
+ }
16624
+ };
16625
+ var handleCloseDeleteDialog = function handleCloseDeleteDialog() {
16626
+ setOpenDeleteNoteDialog(false);
16627
+ };
16628
+ var handleOpenDeleteNoteDialog = function handleOpenDeleteNoteDialog(note) {
16629
+ handleChangeSelectedItem(note);
16630
+ setOpenDeleteNoteDialog(true);
16631
+ };
16632
+ var handleOpenNoteDrawer = function handleOpenNoteDrawer(note) {
16633
+ setOpenNoteViewDrawer(true);
16634
+ handleChangeSelectedItem(note);
16635
+ };
16636
+ var handleCloseNoteDrawer = function handleCloseNoteDrawer() {
16637
+ setOpenNoteViewDrawer(false);
16638
+ handleChangeSelectedItem(undefined);
16639
+ };
16640
+ var handleCloseConfirmStudentNoteDialog = function handleCloseConfirmStudentNoteDialog() {
16641
+ setOpenConfirmNote(false);
16642
+ };
16643
+ var handleOpenNoteDialog = function handleOpenNoteDialog(note) {
16644
+ handleChangeSelectedItem(note);
16645
+ setOpenNoteDialog(note.type);
16646
+ };
16647
+ var handleCloseNoteDialog = function handleCloseNoteDialog() {
16648
+ handleChangeSelectedItem(undefined);
16649
+ setOpenNoteDialog(undefined);
16650
+ setNoteRequest(undefined);
16651
+ };
16652
+ var handleOpenConfirmStudentNoteDialog = function handleOpenConfirmStudentNoteDialog(note) {
16653
+ setNoteRequest(note);
16654
+ setOpenConfirmNote(true);
16655
+ };
16656
+ var handleSaveNote = function handleSaveNote(noteRequest) {
16657
+ try {
16658
+ var _temp4 = function _temp4() {
16659
+ dispatch(setLoading(false));
16660
+ };
16661
+ if (openNoteDialog === undefined) return Promise.resolve();
16662
+ if (noteRequest.content.trim().length === 0) return Promise.resolve();
16663
+ dispatch(setLoading(true));
16664
+ var _temp3 = _catch(function () {
16665
+ function _temp2() {
16666
+ getData();
16667
+ reset();
16668
+ }
16669
+ var _temp = function () {
16670
+ if (selectedItem) {
16671
+ return Promise.resolve(updateNoteDataApi(selectedItem.id, noteRequest)).then(function () {
16672
+ toast.success(t("update_note_successfully"));
16673
+ });
16674
+ } else {
16675
+ return Promise.resolve(createNoteApi(noteRequest)).then(function () {
16676
+ toast.success(t("create_note_successfully"));
16677
+ });
16678
+ }
16679
+ }();
16680
+ return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
16681
+ }, function (error) {
16682
+ toast.error(getErrorMessage(t, error));
16683
+ });
16684
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
16685
+ } catch (e) {
16686
+ return Promise.reject(e);
16687
+ }
16688
+ };
16689
+ var handleDeleteNote = function handleDeleteNote() {
16690
+ try {
16691
+ var _temp6 = function _temp6() {
16692
+ dispatch(setLoading(false));
16693
+ };
16694
+ if (!(selectedItem !== null && selectedItem !== void 0 && selectedItem.id)) return Promise.resolve();
16695
+ dispatch(setLoading(true));
16696
+ var _temp5 = _catch(function () {
16697
+ return Promise.resolve(deleteNoteApi(selectedItem.id)).then(function () {
16698
+ toast.success(t("delete_note_successfully"));
16699
+ getData();
16700
+ reset();
16701
+ });
16702
+ }, function (error) {
16703
+ toast.error(getErrorMessage(t, error));
16704
+ });
16705
+ return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
16706
+ } catch (e) {
16707
+ return Promise.reject(e);
16708
+ }
16709
+ };
16710
+ var reset = function reset() {
16711
+ handleCloseNoteDialog();
16712
+ setOpenDeleteNoteDialog(false);
16713
+ setOpenConfirmNote(false);
16714
+ setNoteRequest(undefined);
16715
+ };
16716
+ var handleSaveNoteDialog = openNoteDialog === NoteType.ToStudent && !(selectedItem !== null && selectedItem !== void 0 && selectedItem.id) ? handleOpenConfirmStudentNoteDialog : handleSaveNote;
16717
+ var handleSaveStudentNote = function handleSaveStudentNote() {
16718
+ if (!noteRequest) return;
16719
+ handleSaveNote(noteRequest);
16720
+ };
16721
+ return React__default.createElement(Box, {
16722
+ width: "100%"
16723
+ }, React__default.createElement(Grid, {
16724
+ container: true
16725
+ }, React__default.createElement(Grid, {
16726
+ item: true,
16727
+ xs: 6,
16728
+ className: "d-flex mb-3"
16729
+ }, React__default.createElement(SearchInput, {
16730
+ placeholder: t("search_for"),
16731
+ textSearchRef: textSearchRef,
16732
+ onChange: handleChangeSearchText
16733
+ })), React__default.createElement(Grid, {
16734
+ item: true,
16735
+ xs: 6,
16736
+ className: "d-flex justify-content-end align-items-center"
16737
+ }, React__default.createElement(Button, {
16738
+ variant: "contained",
16739
+ sx: {
16740
+ bgcolor: green[700]
16741
+ },
16742
+ startIcon: React__default.createElement(FaPlus, {
16743
+ size: 12
16744
+ }),
16745
+ onClick: handleOpenCreateNoteDialog
16746
+ }, t("new_note"))), React__default.createElement(Grid, {
16747
+ item: true,
16748
+ xs: 12
16749
+ }, 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) {
16750
+ return React__default.createElement(TableCell, {
16751
+ key: index,
16752
+ onClick: !!i.sortKey ? function () {
16753
+ return handleSort(i.sortKey);
16754
+ } : undefined,
16755
+ className: "" + (!!i.sortKey && "pointer")
16756
+ }, React__default.createElement("div", {
16757
+ className: "d-flex justify-content-between align-items-center text-nowrap"
16758
+ }, t(i.title), !!i.sortKey && React__default.createElement(SortIcon, {
16759
+ isAscending: filter.sortColumnName !== i.sortKey ? undefined : filter.sortColumnDirection === OrderType.ASC
16760
+ })));
16761
+ }))), React__default.createElement(TableBody, null, React__default.createElement(ListView, {
16762
+ data: data,
16763
+ render: function render(item, index) {
16764
+ return React__default.createElement(NoteItemList, {
16765
+ key: index,
16766
+ data: item,
16767
+ calcOrderNumber: calcOrderNumber,
16768
+ index: index,
16769
+ role: role,
16770
+ onDelete: handleOpenDeleteNoteDialog,
16771
+ onUpdate: handleOpenNoteDialog,
16772
+ onView: handleOpenNoteDrawer
16773
+ });
16774
+ }
16775
+ }), !data.length && !isLoading && React__default.createElement(TableRow, null, React__default.createElement(TableCell, {
16776
+ colSpan: 12,
16777
+ className: "text-center text-muted"
16778
+ }, t("no_data"))), isLoading && React__default.createElement(TableRow, null, React__default.createElement(TableCell, {
16779
+ colSpan: 12
16780
+ }, React__default.createElement(Stack, {
16781
+ justifyContent: "center",
16782
+ alignItems: "center",
16783
+ width: "100%"
16784
+ }, React__default.createElement(CircularProgress, {
16785
+ size: 24
16786
+ }))))))), React__default.createElement("div", {
16787
+ className: "d-flex justify-content-end mt-3"
16788
+ }, !!paging.totalPages && React__default.createElement(Pagination, {
16789
+ count: paging.totalPages,
16790
+ page: paging.page,
16791
+ onChange: handleChangePage
16792
+ })))), React__default.createElement(NoteDrawer, {
16793
+ open: !!openNoteViewDrawer,
16794
+ data: selectedItem,
16795
+ student: selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.reciever,
16796
+ width: "80dvw",
16797
+ onClose: handleCloseNoteDrawer,
16798
+ anchor: "right"
16799
+ }), React__default.createElement(GeneralNoteDialog, {
16800
+ open: openNoteDialog !== undefined,
16801
+ type: openNoteDialog,
16802
+ onClose: handleCloseNoteDialog,
16803
+ onSaveNote: handleSaveNoteDialog,
16804
+ selectedNote: selectedItem,
16805
+ value: noteRequest
16806
+ }), React__default.createElement(ConfirmDialog, {
16807
+ open: openConfirmNote,
16808
+ toggle: handleCloseConfirmStudentNoteDialog,
16809
+ onConfirm: handleSaveStudentNote,
16810
+ text: t("are_you_sure_to_create_student_parent_note")
16811
+ }), React__default.createElement(ConfirmDeleteDialog, {
16812
+ open: openDeleteNoteDialog,
16813
+ toggle: handleCloseDeleteDialog,
16814
+ onConfirm: handleDeleteNote,
16815
+ text: t("are_you_sure_you_want_to_delete_the_note"),
16816
+ title: t("delete_note"),
16817
+ okText: t("delete_note"),
16818
+ cancelText: t("cancel")
16819
+ }));
16820
+ };
16821
+
16822
+ var NotetabPanel = function NotetabPanel(_ref) {
16823
+ var children = _ref.children,
16824
+ value = _ref.value,
16825
+ index = _ref.index;
16826
+ return React__default.createElement("div", {
16827
+ role: "tabpanel",
16828
+ hidden: value !== index,
16829
+ id: "tabpanel-" + index,
16830
+ "aria-labelledby": "tab-" + index
16831
+ }, value === index && React__default.createElement(Box, {
16832
+ sx: {
16833
+ p: 2
16834
+ }
16835
+ }, React__default.createElement(Typography, null, children)));
16836
+ };
16837
+
16838
+ var NOTE_STUDENT_HEADERS = [{
16839
+ title: "#"
16840
+ }, {
16841
+ title: "sender",
16842
+ sortKey: "User.UserProfile.FullName"
16843
+ }, {
16844
+ title: "student",
16845
+ sortKey: "Student.UserProfile.FullName"
16846
+ }, {
16847
+ title: "content"
16848
+ }, {
16849
+ title: "type"
16850
+ }, {
16851
+ title: "created_at",
16852
+ sortKey: "CreatedAt"
16853
+ }, {
16854
+ title: "actions"
16855
+ }];
16856
+ var NOTE_TEACHER_HEADERS = [{
16857
+ title: "#"
16858
+ }, {
16859
+ title: "sender",
16860
+ sortKey: "User.UserProfile.FullName"
16861
+ }, {
16862
+ title: "receivers"
16863
+ }, {
16864
+ title: "content"
16865
+ }, {
16866
+ title: "type"
16867
+ }, {
16868
+ title: "created_at",
16869
+ sortKey: "CreatedAt"
16870
+ }, {
16871
+ title: "actions"
16872
+ }];
16873
+ var NOTE_ADMIN_HEADERS = [{
16874
+ title: "#"
16875
+ }, {
16876
+ title: "sender",
16877
+ sortKey: "User.UserProfile.FullName"
16878
+ }, {
16879
+ title: "receivers"
16880
+ }, {
16881
+ title: "content"
16882
+ }, {
16883
+ title: "type"
16884
+ }, {
16885
+ title: "created_at",
16886
+ sortKey: "CreatedAt"
16887
+ }, {
16888
+ title: "actions"
16889
+ }];
16890
+ var ACADEMY_NOTE_FILTER = {
16891
+ currentPage: 1,
16892
+ pageSize: 12,
16893
+ sortColumnDirection: OrderType.DESC,
16894
+ sortColumnName: NoteSortColumn.CreatedAt,
16895
+ types: [NoteType.ToAcademy]
16896
+ };
16897
+ var STUDENT_PARENTS_NOTE_FILTER = {
16898
+ currentPage: 1,
16899
+ pageSize: 12,
16900
+ sortColumnDirection: OrderType.DESC,
16901
+ sortColumnName: NoteSortColumn.CreatedAt,
16902
+ types: [NoteType.ToStudent]
16903
+ };
16904
+ var ADMIN_TEACHER_NOTE_FILTER = {
16905
+ currentPage: 1,
16906
+ pageSize: 12,
16907
+ sortColumnDirection: OrderType.DESC,
16908
+ sortColumnName: NoteSortColumn.CreatedAt,
16909
+ types: [NoteType.TeacherToAllAdmin, NoteType.AdminToAllTeacher]
16910
+ };
16911
+ var ADMIN_NOTE_FILTER = {
16912
+ currentPage: 1,
16913
+ pageSize: 12,
16914
+ sortColumnDirection: OrderType.DESC,
16915
+ sortColumnName: NoteSortColumn.CreatedAt,
16916
+ types: [NoteType.TeacherToAllAdmin, NoteType.AdminToAllTeacher, NoteType.AdminToAllAdmin]
16917
+ };
16918
+ var TEACHER_NOTE_FILTER = {
16919
+ currentPage: 1,
16920
+ pageSize: 12,
16921
+ sortColumnDirection: OrderType.DESC,
16922
+ sortColumnName: NoteSortColumn.CreatedAt,
16923
+ types: [NoteType.TeacherToTeachers]
16924
+ };
16925
+
16926
+ var NoteTabs = function NoteTabs(_ref) {
16927
+ var role = _ref.role;
16928
+ var roles = useSelector(function (state) {
16929
+ var _state$common$user$ro, _state$common, _state$common$user;
16930
+ 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 : [];
16931
+ });
16932
+ var isAdminUser = roles.includes(Role.Admin);
16933
+ var isAdmin = roles.includes(Role.Admin);
16934
+ var _useState = useState(0),
16935
+ value = _useState[0],
16936
+ setValue = _useState[1];
16937
+ var handleChange = function handleChange(_event, newValue) {
16938
+ setValue(newValue);
16939
+ };
16940
+ return React__default.createElement(Box, {
16941
+ sx: {
16942
+ width: "100%"
16943
+ }
16944
+ }, React__default.createElement(Tabs, {
16945
+ value: value,
16946
+ onChange: handleChange,
16947
+ sx: {
16948
+ "& .MuiTab-root": {
16949
+ color: grey[500],
16950
+ fontSize: "1rem"
16951
+ },
16952
+ "& .Mui-selected": {
16953
+ color: green[700] + "!important"
16954
+ },
16955
+ "& .MuiTabs-indicator": {
16956
+ backgroundColor: green[700]
16957
+ }
16958
+ }
16959
+ }, React__default.createElement(Tab, Object.assign({
16960
+ label: t$1("academy")
16961
+ }, a11yProps$1(0))), React__default.createElement(Tab, Object.assign({
16962
+ label: t$1("student_parents")
16963
+ }, a11yProps$1(1))), React__default.createElement(Tab, Object.assign({
16964
+ label: t$1("admin")
16965
+ }, a11yProps$1(2))), !isAdmin && !isAdminUser && React__default.createElement(Tab, Object.assign({
16966
+ label: t$1("teacher")
16967
+ }, a11yProps$1(3)))), React__default.createElement(NotetabPanel, {
16968
+ value: value,
16969
+ index: 0
16970
+ }, React__default.createElement(NoteList, {
16971
+ role: role,
16972
+ isAdmin: isAdmin,
16973
+ defaultFilter: ACADEMY_NOTE_FILTER,
16974
+ headers: NOTE_STUDENT_HEADERS
16975
+ })), React__default.createElement(NotetabPanel, {
16976
+ value: value,
16977
+ index: 1
16978
+ }, React__default.createElement(NoteList, {
16979
+ role: role,
16980
+ isAdmin: isAdmin,
16981
+ defaultFilter: STUDENT_PARENTS_NOTE_FILTER,
16982
+ headers: NOTE_STUDENT_HEADERS
16983
+ })), React__default.createElement(NotetabPanel, {
16984
+ value: value,
16985
+ index: 2
16986
+ }, React__default.createElement(NoteList, {
16987
+ role: role,
16988
+ isAdmin: isAdmin,
16989
+ defaultFilter: isAdmin ? ADMIN_NOTE_FILTER : ADMIN_TEACHER_NOTE_FILTER,
16990
+ headers: NOTE_ADMIN_HEADERS
16991
+ })), !isAdmin && !isAdminUser && React__default.createElement(NotetabPanel, {
16992
+ value: value,
16993
+ index: 3
16994
+ }, React__default.createElement(NoteList, {
16995
+ role: role,
16996
+ isAdmin: isAdmin,
16997
+ defaultFilter: TEACHER_NOTE_FILTER,
16998
+ headers: NOTE_TEACHER_HEADERS
16999
+ })));
17000
+ };
17001
+ function a11yProps$1(index) {
17002
+ return {
17003
+ id: "tab-" + index,
17004
+ "aria-controls": "tabpanel-" + index
17005
+ };
17006
+ }
17007
+
17008
+ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
15934
17009
  var _useTranslation = useTranslation(),
15935
17010
  t = _useTranslation.t;
15936
17011
  var _useState = useState([]),
@@ -15944,7 +17019,7 @@ var useVirtualList = function useVirtualList(studentId, defaultFilter, getItemsA
15944
17019
  setSelectedItem = _useState3[1];
15945
17020
  var _useState4 = useState(false),
15946
17021
  isLoading = _useState4[0],
15947
- setLoadingExamSessions = _useState4[1];
17022
+ setLoading = _useState4[1];
15948
17023
  var _useState5 = useState(),
15949
17024
  filter = _useState5[0],
15950
17025
  setFilter = _useState5[1];
@@ -15954,18 +17029,16 @@ var useVirtualList = function useVirtualList(studentId, defaultFilter, getItemsA
15954
17029
  var getItems = function getItems() {
15955
17030
  try {
15956
17031
  var _temp2 = function _temp2() {
15957
- setLoadingExamSessions(false);
17032
+ setLoading(false);
15958
17033
  };
15959
17034
  if (isLoading) return Promise.resolve();
15960
17035
  if (!filter || !filter.currentPage) {
15961
17036
  setItems([]);
15962
17037
  return Promise.resolve();
15963
17038
  }
15964
- setLoadingExamSessions(true);
17039
+ setLoading(true);
15965
17040
  var _temp = _catch(function () {
15966
- return Promise.resolve(getItemsApi(_extends({}, filter, {
15967
- studentId: studentId
15968
- }))).then(function (res) {
17041
+ return Promise.resolve(getItemsApi(filter)).then(function (res) {
15969
17042
  var responseData = res.data;
15970
17043
  setTotalPages((responseData === null || responseData === void 0 ? void 0 : responseData.totalPages) || 0);
15971
17044
  var responseItems = (responseData === null || responseData === void 0 ? void 0 : responseData.items) || [];
@@ -16004,23 +17077,25 @@ var useVirtualList = function useVirtualList(studentId, defaultFilter, getItemsA
16004
17077
  });
16005
17078
  setItems(results);
16006
17079
  };
16007
- var handleItemRemoved = function handleItemRemoved(item) {
16008
- var results = items.filter(function (i) {
16009
- return i.id !== item.id;
16010
- });
16011
- setItems(results);
17080
+ var handleItemRemoved = function handleItemRemoved(_item) {
17081
+ getItems();
17082
+ };
17083
+ var handleChangeFilter = function handleChangeFilter(newFilter) {
17084
+ setFilter(newFilter);
16012
17085
  };
16013
17086
  useEffect(function () {
16014
17087
  setFilter(defaultFilter);
16015
17088
  }, [JSON.stringify(defaultFilter)]);
16016
17089
  useEffect(function () {
16017
17090
  getItems();
16018
- }, [JSON.stringify(filter)]);
17091
+ }, [JSON.stringify(filter), getItemsApi]);
16019
17092
  return {
16020
17093
  t: t,
17094
+ filter: filter,
16021
17095
  selectedItem: selectedItem,
16022
17096
  items: items,
16023
17097
  isLoading: isLoading,
17098
+ handleChangeFilter: handleChangeFilter,
16024
17099
  setItems: setItems,
16025
17100
  handleChangeSelectedItem: handleChangeSelectedItem,
16026
17101
  handleLoadMore: handleLoadMore,
@@ -16072,8 +17147,9 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16072
17147
  var _useState6 = useState(),
16073
17148
  noteIdContextMenu = _useState6[0],
16074
17149
  setNoteIdContextMenu = _useState6[1];
16075
- var _useVirtualList = useVirtualList(studentId, _extends({}, DEFAULT_NOTE_FILTER, {
16076
- type: NoteType.Default
17150
+ var _useVirtualList = useVirtualList(_extends({}, DEFAULT_NOTE_FILTER, {
17151
+ types: [NoteType.ToAcademy],
17152
+ studentId: studentId
16077
17153
  }), getNotesApi$1),
16078
17154
  academyNotes = _useVirtualList.items,
16079
17155
  isLoadingAcademyNotes = _useVirtualList.isLoading,
@@ -16083,8 +17159,9 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16083
17159
  handleItemAddedAcademyNote = _useVirtualList.handleItemAdded,
16084
17160
  handleItemUpdatedAcademyNote = _useVirtualList.handleItemUpdated,
16085
17161
  handleChangeSelectedItem = _useVirtualList.handleChangeSelectedItem;
16086
- var _useVirtualList2 = useVirtualList(studentId, _extends({}, DEFAULT_NOTE_FILTER, {
16087
- type: NoteType.StudentReadable
17162
+ var _useVirtualList2 = useVirtualList(_extends({}, DEFAULT_NOTE_FILTER, {
17163
+ types: [NoteType.ToStudent],
17164
+ studentId: studentId
16088
17165
  }), getNotesApi$1),
16089
17166
  studentNotes = _useVirtualList2.items,
16090
17167
  isLoadingStudentNotes = _useVirtualList2.isLoading,
@@ -16101,11 +17178,11 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16101
17178
  };
16102
17179
  var handleOpenCreateAcademyNoteDialog = function handleOpenCreateAcademyNoteDialog() {
16103
17180
  handleCloseTooltip();
16104
- setOpenNoteDialog(NoteType.Default);
17181
+ setOpenNoteDialog(NoteType.ToAcademy);
16105
17182
  };
16106
17183
  var handleOpenCreateStudentNoteDialog = function handleOpenCreateStudentNoteDialog() {
16107
17184
  handleCloseTooltip();
16108
- setOpenNoteDialog(NoteType.StudentReadable);
17185
+ setOpenNoteDialog(NoteType.ToStudent);
16109
17186
  };
16110
17187
  var handleCloseTooltip = function handleCloseTooltip() {
16111
17188
  setNoteIdContextMenu(0);
@@ -16156,7 +17233,7 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16156
17233
  var _temp = function () {
16157
17234
  if (selectedItem) {
16158
17235
  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);
17236
+ if (selectedItem.type === NoteType.ToStudent) handleItemUpdatedStudentNote(res.data);else handleItemUpdatedAcademyNote(res.data);
16160
17237
  toast.success(t("update_note_successfully"));
16161
17238
  });
16162
17239
  } else {
@@ -16164,7 +17241,7 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16164
17241
  return Promise.resolve(createNoteApi$1(_extends({}, data, {
16165
17242
  type: openNoteDialog
16166
17243
  }))).then(function (res) {
16167
- if (res.data.type === NoteType.StudentReadable) handleItemAddedStudentNote(res.data);else handleItemAddedAcademyNote(res.data);
17244
+ if (res.data.type === NoteType.ToStudent) handleItemAddedStudentNote(res.data);else handleItemAddedAcademyNote(res.data);
16168
17245
  toast.success(t("create_note_successfully"));
16169
17246
  });
16170
17247
  }
@@ -16197,7 +17274,7 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16197
17274
  var _temp5 = _catch(function () {
16198
17275
  return Promise.resolve(deleteNoteApi$1(selectedItem.id)).then(function () {
16199
17276
  toast.success(t("delete_note_successfully"));
16200
- if (selectedItem.type === NoteType.StudentReadable) handleItemRemovedStudentNote(selectedItem);else handleItemRemovedAcademyNote(selectedItem);
17277
+ if (selectedItem.type === NoteType.ToStudent) handleItemRemovedStudentNote(selectedItem);else handleItemRemovedAcademyNote(selectedItem);
16201
17278
  reset();
16202
17279
  });
16203
17280
  }, function (error) {
@@ -16219,14 +17296,12 @@ var useDrawerNoteTab = function useDrawerNoteTab(props) {
16219
17296
  handleSaveNote(studentNoteContent);
16220
17297
  };
16221
17298
  var noteDialogProps = {
16222
- open: openNoteDialog === NoteType.StudentReadable && !openConfirmNote || openNoteDialog === NoteType.Default,
17299
+ open: openNoteDialog === NoteType.ToStudent && !openConfirmNote || openNoteDialog === NoteType.ToAcademy,
16223
17300
  selectedNote: selectedItem,
16224
- tip: " (" + t(openNoteDialog === NoteType.StudentReadable ? "student_parents" : "academy") + ")",
17301
+ tip: " (" + t(openNoteDialog === NoteType.ToStudent ? "student_parents" : "academy") + ")",
16225
17302
  value: studentNoteContent,
16226
17303
  onClose: handleCloseNoteDialog,
16227
- onSaveNote: openNoteDialog === NoteType.StudentReadable && !(selectedItem !== null && selectedItem !== void 0 && selectedItem.id) ? handleOpenConfirmStudentNoteDialog : function (content) {
16228
- return handleSaveNote(content);
16229
- }
17304
+ onSaveNote: openNoteDialog === NoteType.ToStudent && !(selectedItem !== null && selectedItem !== void 0 && selectedItem.id) ? handleOpenConfirmStudentNoteDialog : handleSaveNote
16230
17305
  };
16231
17306
  return {
16232
17307
  openConfirmNote: openConfirmNote,
@@ -16493,11 +17568,11 @@ var DrawerInfoTab = function DrawerInfoTab(_ref) {
16493
17568
  }
16494
17569
  }, data ? React__default.createElement(Typography, {
16495
17570
  sx: contentStyle
16496
- }, t(function (label) {
17571
+ }, !!data.grade ? t(function (label) {
16497
17572
  return label ? t(label) : formatGrade(data.grade, t, language);
16498
17573
  }((_BRIEF_GRADE_OPTIONS$ = BRIEF_GRADE_OPTIONS.find(function (o) {
16499
17574
  return o.value === Number(data.grade);
16500
- })) === null || _BRIEF_GRADE_OPTIONS$ === void 0 ? void 0 : _BRIEF_GRADE_OPTIONS$.label))) : React__default.createElement(Skeleton, {
17575
+ })) === null || _BRIEF_GRADE_OPTIONS$ === void 0 ? void 0 : _BRIEF_GRADE_OPTIONS$.label)) : "") : React__default.createElement(Skeleton, {
16501
17576
  variant: "text",
16502
17577
  width: 20,
16503
17578
  sx: contentStyle
@@ -16690,7 +17765,7 @@ var ExamResultItem = function ExamResultItem(_ref) {
16690
17765
  }, (_data$teacher = data.teacher) === null || _data$teacher === void 0 ? void 0 : _data$teacher.fullName))))));
16691
17766
  };
16692
17767
 
16693
- var ExanResultList = function ExanResultList(_ref) {
17768
+ var ExamResultList = function ExamResultList(_ref) {
16694
17769
  var studentId = _ref.studentId,
16695
17770
  data = _ref.data,
16696
17771
  isLoading = _ref.isLoading,
@@ -22044,7 +23119,7 @@ var ExamResultDrawer = function ExamResultDrawer(_ref) {
22044
23119
  fontSize: "13px",
22045
23120
  fontWeight: 500
22046
23121
  }
22047
- }, student.schoolName), React__default.createElement(Typography, {
23122
+ }, student.schoolName), !!student.grade && React__default.createElement(Typography, {
22048
23123
  sx: {
22049
23124
  color: grey[500],
22050
23125
  fontSize: "13px",
@@ -22082,7 +23157,9 @@ var DrawerExamResultTab = function DrawerExamResultTab(_ref) {
22082
23157
  value = _ref.value,
22083
23158
  studentId = _ref.studentId,
22084
23159
  onViewQA = _ref.onViewQA;
22085
- var _useVirtualList = useVirtualList(studentId, EXAM_SESSION_DEFAULT_FILTER, getExamSessionListApi),
23160
+ var _useVirtualList = useVirtualList(_extends({}, EXAM_SESSION_DEFAULT_FILTER, {
23161
+ studentId: studentId
23162
+ }), getExamSessionListApi),
22086
23163
  items = _useVirtualList.items,
22087
23164
  selectedItem = _useVirtualList.selectedItem,
22088
23165
  isLoading = _useVirtualList.isLoading,
@@ -22099,7 +23176,7 @@ var DrawerExamResultTab = function DrawerExamResultTab(_ref) {
22099
23176
  p: 3,
22100
23177
  height: "100%"
22101
23178
  }
22102
- }, React__default.createElement(ExanResultList, {
23179
+ }, React__default.createElement(ExamResultList, {
22103
23180
  data: items,
22104
23181
  isLoading: isLoading,
22105
23182
  onLoadMore: handleLoadMore,
@@ -24848,7 +25925,9 @@ var DrawerTextbookResultTab = function DrawerTextbookResultTab(_ref) {
24848
25925
  selectedTab = _ref.selectedTab,
24849
25926
  value = _ref.value,
24850
25927
  onViewQA = _ref.onViewQA;
24851
- var _useVirtualList = useVirtualList(studentId, TEXTBOOK_DEFAULT_FILTER, getTextbookListApi),
25928
+ var _useVirtualList = useVirtualList(_extends({}, TEXTBOOK_DEFAULT_FILTER, {
25929
+ studentId: studentId
25930
+ }), getTextbookListApi),
24852
25931
  items = _useVirtualList.items,
24853
25932
  selectedItem = _useVirtualList.selectedItem,
24854
25933
  isLoading = _useVirtualList.isLoading,
@@ -25246,9 +26325,10 @@ var useDrawerAttendanceTab = function useDrawerAttendanceTab(studentId, onUpdate
25246
26325
  var pusher = concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.pusher;
25247
26326
  var channelName = useRef();
25248
26327
  var channel = useRef();
25249
- var _useVirtualList = useVirtualList(studentId, ATTENDANCE_COURSE_DEFAULT_FILTER, function (query) {
25250
- return getAttendanceByStudentIdApi(studentId, query);
25251
- }),
26328
+ var handleGetAttendanceByStudentId = useCallback(function (query) {
26329
+ return getAttendanceByStudentIdApi(studentId, query);
26330
+ }, [studentId]);
26331
+ var _useVirtualList = useVirtualList(ATTENDANCE_COURSE_DEFAULT_FILTER, handleGetAttendanceByStudentId),
25252
26332
  items = _useVirtualList.items,
25253
26333
  isLoading = _useVirtualList.isLoading,
25254
26334
  handleLoadMore = _useVirtualList.handleLoadMore,
@@ -26334,9 +27414,9 @@ var useLessonClassList = function useLessonClassList(courseId) {
26334
27414
  };
26335
27415
  };
26336
27416
 
26337
- var TEACHER_URL = BASE_URL + "/api/teacher";
26338
- var getTeacherListApi = function getTeacherListApi(query) {
26339
- return api.get("" + TEACHER_URL, {
27417
+ var TEACHER_URL$1 = BASE_URL + "/api/teacher";
27418
+ var getTeacherListApi$1 = function getTeacherListApi(query) {
27419
+ return api.get("" + TEACHER_URL$1, {
26340
27420
  params: query
26341
27421
  });
26342
27422
  };
@@ -26357,7 +27437,7 @@ var useTeacherList = function useTeacherList() {
26357
27437
  var getListTeacher = function getListTeacher() {
26358
27438
  try {
26359
27439
  var _temp = _catch(function () {
26360
- return Promise.resolve(getTeacherListApi(teacherFilter)).then(function (res) {
27440
+ return Promise.resolve(getTeacherListApi$1(teacherFilter)).then(function (res) {
26361
27441
  var _res$data;
26362
27442
  setTeachers(((_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.items) || []);
26363
27443
  });
@@ -26427,11 +27507,6 @@ var useClassDetail = function useClassDetail(_ref) {
26427
27507
  var isSelected = function isSelected(id) {
26428
27508
  return selected.indexOf(id) !== -1;
26429
27509
  };
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
27510
  var _useStudentClassList = useStudentClassList(classId),
26436
27511
  getStudents = _useStudentClassList.getStudents,
26437
27512
  studentListProps = _objectWithoutPropertiesLoose(_useStudentClassList, _excluded$b);
@@ -26821,12 +27896,6 @@ var useClassDetail = function useClassDetail(_ref) {
26821
27896
  useEffect(function () {
26822
27897
  document.title = t("study_peak") + " | " + t(PAGE_TITLE$4);
26823
27898
  }, [t]);
26824
- useEffect(function () {
26825
- if (!isReadyRegisterPusher && registerPusherRef.current) {
26826
- dispatch(setReadyRegisterPusher(true));
26827
- registerPusherRef.current = false;
26828
- }
26829
- }, [isReadyRegisterPusher]);
26830
27899
  return {
26831
27900
  classId: classId,
26832
27901
  schema: schema,
@@ -27644,7 +28713,7 @@ var ClassList = function ClassList(_ref) {
27644
28713
  onClick: function onClick() {
27645
28714
  return handleUpdateClass(i);
27646
28715
  }
27647
- }, React__default.createElement(FaEye, {
28716
+ }, React__default.createElement(FaEye$1, {
27648
28717
  size: 12
27649
28718
  }))));
27650
28719
  }), !classList.length && React__default.createElement(TableRow$1, null, React__default.createElement(TableCell$1, {
@@ -28491,11 +29560,6 @@ var useUserList = function useUserList(role) {
28491
29560
  setOpenDeleteUserCsv = _useState10[1];
28492
29561
  var inputFileRef = useRef(null);
28493
29562
  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
29563
  var handleChangeSelectedStudent = function handleChangeSelectedStudent(student) {
28500
29564
  var _student$roles, _student$roles2;
28501
29565
  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 +29871,6 @@ var useUserList = function useUserList(role) {
28807
29871
  var userHeaders = USER_HEADERS.filter(function (i) {
28808
29872
  return i.roles.includes(role);
28809
29873
  });
28810
- useEffect(function () {
28811
- if (!isReadyRegisterPusher && registerPusherRef.current) {
28812
- dispatch(setReadyRegisterPusher(true));
28813
- registerPusherRef.current = false;
28814
- }
28815
- }, [isReadyRegisterPusher]);
28816
29874
  return {
28817
29875
  userDetail: userDetail,
28818
29876
  userHeaders: userHeaders,
@@ -29089,7 +30147,7 @@ var UserRow = function UserRow(_ref) {
29089
30147
  color: "default",
29090
30148
  className: "bg-primary text-white me-1",
29091
30149
  onClick: handleViewOrUpdate
29092
- }, React__default.createElement(FaEye$1, {
30150
+ }, React__default.createElement(FaEye, {
29093
30151
  size: 12
29094
30152
  })), (isAdmin || isSuperAdmin) && React__default.createElement(IconButton, {
29095
30153
  onClick: handleDelete,
@@ -30744,9 +31802,9 @@ var TextbookSortBy$1;
30744
31802
  var TeacherSortBy$1;
30745
31803
  (function (TeacherSortBy) {
30746
31804
  TeacherSortBy["CreatedAt"] = "CreatedAt";
30747
- TeacherSortBy["Name"] = "UserProfile.FullName";
30748
- TeacherSortBy["Email"] = "Email";
30749
- TeacherSortBy["PhoneNumber"] = "UserProfile.PhoneNumber";
31805
+ TeacherSortBy["Name"] = "User.UserProfile.FullName";
31806
+ TeacherSortBy["Email"] = "User.Email";
31807
+ TeacherSortBy["PhoneNumber"] = "User.UserProfile.PhoneNumber";
30750
31808
  })(TeacherSortBy$1 || (TeacherSortBy$1 = {}));
30751
31809
  var ExamType$1;
30752
31810
  (function (ExamType) {
@@ -32513,9 +33571,9 @@ var ShareToTeacherDialog = function ShareToTeacherDialog(_ref) {
32513
33571
  }, t("cancel")))));
32514
33572
  };
32515
33573
 
32516
- var TEACHER_URL$1 = BASE_URL + "/api/teacher";
32517
- var getTeacherListApi$1 = function getTeacherListApi(query) {
32518
- return api.get("" + TEACHER_URL$1, {
33574
+ var TEACHER_URL$2 = BASE_URL + "/api/teacher";
33575
+ var getTeacherListApi$2 = function getTeacherListApi(query) {
33576
+ return api.get("" + TEACHER_URL$2, {
32519
33577
  params: query
32520
33578
  });
32521
33579
  };
@@ -32526,7 +33584,7 @@ var useTextbookShare = function useTextbookShare(props) {
32526
33584
  role = props.role,
32527
33585
  isSuperAdmin = props.isSuperAdmin;
32528
33586
  var _useList = useList(!isSuperAdmin ? function (search) {
32529
- return getTeacherListApi$1(search);
33587
+ return getTeacherListApi$2(search);
32530
33588
  } : null, DefaultTeacherQuery),
32531
33589
  filterShare = _useList.filter,
32532
33590
  textSearchShareRef = _useList.textSearchRef,
@@ -32825,7 +33883,7 @@ var TextbookRow = function TextbookRow(_ref) {
32825
33883
  color: "default",
32826
33884
  className: "bg-primary text-white",
32827
33885
  onClick: handleViewTextbook
32828
- }, React__default.createElement(FaEye$1, {
33886
+ }, React__default.createElement(FaEye, {
32829
33887
  size: 12
32830
33888
  })), onAcademy && React__default.createElement(IconButton, {
32831
33889
  disabled: !isSharable,
@@ -33686,7 +34744,7 @@ var NotificationList = function NotificationList(_ref) {
33686
34744
  onClick: function onClick() {
33687
34745
  return handleUpdateNotification(i);
33688
34746
  }
33689
- }, !isAdmin && (isTeacherAdmin || !i.isOwned) ? React__default.createElement(FaEye$1, {
34747
+ }, !isAdmin && (isTeacherAdmin || !i.isOwned) ? React__default.createElement(FaEye, {
33690
34748
  size: 12
33691
34749
  }) : React__default.createElement(HiOutlinePencilAlt, {
33692
34750
  size: 12
@@ -37557,17 +38615,17 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
37557
38615
  sx: {
37558
38616
  color: inforErrors && submitCount ? error.main + "!important" : "gray"
37559
38617
  }
37560
- }, a11yProps$1(0))), React__default.createElement(Tab, Object.assign({
38618
+ }, a11yProps$2(0))), React__default.createElement(Tab, Object.assign({
37561
38619
  label: t$1("textbook.contents"),
37562
38620
  sx: {
37563
38621
  color: contentsErrors && submitCount ? error.main + "!important" : "gray"
37564
38622
  }
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({
38623
+ }, 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
38624
  label: t$1("textbook.owners"),
37567
38625
  sx: {
37568
38626
  color: textbookOwnersErrors && submitCount ? error.main + "!important" : "gray"
37569
38627
  }
37570
- }, a11yProps$1(2))))), React__default.createElement(CustomTextbookTab, {
38628
+ }, a11yProps$2(2))))), React__default.createElement(CustomTextbookTab, {
37571
38629
  value: selected,
37572
38630
  index: 0
37573
38631
  }, React__default.createElement(TextbookInfoTab, Object.assign({}, formikProps, {
@@ -37589,7 +38647,7 @@ var PreparedTextbookForm = function PreparedTextbookForm(_ref) {
37589
38647
  disabled: ownersDisabled
37590
38648
  }))))));
37591
38649
  };
37592
- var a11yProps$1 = function a11yProps(index) {
38650
+ var a11yProps$2 = function a11yProps(index) {
37593
38651
  return {
37594
38652
  id: "textbook-tab-" + index,
37595
38653
  "aria-controls": "textbook-tabpanel-" + index
@@ -37986,6 +39044,449 @@ var PreparedTextbookList = function PreparedTextbookList(_ref) {
37986
39044
  }));
37987
39045
  };
37988
39046
 
39047
+ var AnnouncementEvent;
39048
+ (function (AnnouncementEvent) {
39049
+ AnnouncementEvent["ReceivedNewNote"] = "ReceivedNewNote";
39050
+ AnnouncementEvent["UpdatedNote"] = "UpdatedNote";
39051
+ AnnouncementEvent["DeletedNote"] = "DeletedNote";
39052
+ })(AnnouncementEvent || (AnnouncementEvent = {}));
39053
+ var AnnouncementType;
39054
+ (function (AnnouncementType) {
39055
+ AnnouncementType["ReceivedNewNote"] = "ReceivedNewNote";
39056
+ })(AnnouncementType || (AnnouncementType = {}));
39057
+
39058
+ var stringToColor = function stringToColor(string) {
39059
+ var hash = 0;
39060
+ var i;
39061
+ for (i = 0; i < string.length; i += 1) {
39062
+ hash = string.charCodeAt(i) + ((hash << 5) - hash);
39063
+ }
39064
+ var color = "#";
39065
+ for (i = 0; i < 3; i += 1) {
39066
+ var value = hash >> i * 8 & 0xff;
39067
+ color += ("00" + value.toString(16)).slice(-2);
39068
+ }
39069
+ return color;
39070
+ };
39071
+ var stringAvatar = function stringAvatar(name) {
39072
+ var _name$split$0$, _name$split$, _name$split$1$, _name$split$2;
39073
+ return {
39074
+ sx: {
39075
+ bgcolor: stringToColor(name)
39076
+ },
39077
+ 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$ : "")
39078
+ };
39079
+ };
39080
+ var convertAnnouncementData = function convertAnnouncementData(t, role, announcement) {
39081
+ var isTeacherSite = role === Role.Teacher;
39082
+ var data = announcement.data;
39083
+ switch (announcement.type) {
39084
+ case AnnouncementType.ReceivedNewNote:
39085
+ var extraData = data.data;
39086
+ var contents = extraData.split("|");
39087
+ var noteType = contents[0];
39088
+ var content = contents.slice(1).join("|");
39089
+ var isAdmin = noteType === NoteType[NoteType.AdminToAllTeacher] || noteType === NoteType[NoteType.AdminToAllAdmin];
39090
+ return {
39091
+ content: content,
39092
+ name: isAdmin ? isTeacherSite ? t("admin") : t("admin_n", {
39093
+ admin: data.senderFullName
39094
+ }) : t("teacher_n", {
39095
+ teacher: data.senderFullName
39096
+ }),
39097
+ image: isAdmin && isTeacherSite ? undefined : data.senderAvatar,
39098
+ action: t("sent_a_memo")
39099
+ };
39100
+ default:
39101
+ return {
39102
+ name: data.senderFullName,
39103
+ image: data.senderAvatar,
39104
+ content: data.data,
39105
+ action: ""
39106
+ };
39107
+ }
39108
+ };
39109
+
39110
+ var AnnouncementItem = function AnnouncementItem(_ref) {
39111
+ var data = _ref.data,
39112
+ role = _ref.role,
39113
+ renderLink = _ref.renderLink,
39114
+ onLoad = _ref.onLoad;
39115
+ var _useTranslation = useTranslation(),
39116
+ t = _useTranslation.t;
39117
+ useEffect(function () {
39118
+ onLoad();
39119
+ }, []);
39120
+ var announcementData = convertAnnouncementData(t, role, data);
39121
+ return React__default.createElement(Fragment$1, null, renderLink(React__default.createElement(ListItemButton, {
39122
+ sx: _extends({
39123
+ py: 1.5,
39124
+ px: 2.5,
39125
+ mt: "1px"
39126
+ }, !data.isRead && {
39127
+ bgcolor: "action.selected"
39128
+ })
39129
+ }, React__default.createElement(Stack, {
39130
+ direction: "row",
39131
+ gap: 1,
39132
+ justifyContent: "space-between",
39133
+ width: "100%"
39134
+ }, React__default.createElement(Stack, {
39135
+ direction: "row",
39136
+ gap: 1
39137
+ }, React__default.createElement(ListItemAvatar, null, React__default.createElement(Avatar, Object.assign({}, stringAvatar(announcementData.name), {
39138
+ src: announcementData.image
39139
+ }))), React__default.createElement(ListItemText, {
39140
+ sx: {
39141
+ marginBlock: 0
39142
+ },
39143
+ primary: React__default.createElement(Typography, null, React__default.createElement(Typography, {
39144
+ fontWeight: 600,
39145
+ display: "inline-block"
39146
+ }, announcementData.name), announcementData.action && React__default.createElement(Typography, {
39147
+ display: "inline-block",
39148
+ px: "4px"
39149
+ }, announcementData.action + ":"), React__default.createElement(Typography, {
39150
+ display: "inline-block",
39151
+ sx: {
39152
+ display: "-webkit-box",
39153
+ lineClamp: 2,
39154
+ WebkitLineClamp: 2,
39155
+ WebkitBoxOrient: "vertical",
39156
+ boxOrient: "vertical",
39157
+ overflow: "hidden"
39158
+ },
39159
+ dangerouslySetInnerHTML: {
39160
+ __html: announcementData.content || ""
39161
+ }
39162
+ })),
39163
+ secondary: React__default.createElement(Typography, {
39164
+ variant: "caption",
39165
+ sx: {
39166
+ mt: 0.5,
39167
+ display: "flex",
39168
+ alignItems: "center",
39169
+ color: "text.disabled"
39170
+ }
39171
+ }, React__default.createElement(Box, {
39172
+ sx: {
39173
+ marginRight: "8px"
39174
+ }
39175
+ }, React__default.createElement(FaClockRotateLeft, {
39176
+ size: 12
39177
+ })), timAgo(data.createdAt, t, true))
39178
+ })))), data));
39179
+ };
39180
+
39181
+ var AnnouncementList = function AnnouncementList(_ref) {
39182
+ var role = _ref.role,
39183
+ items = _ref.items,
39184
+ isLoading = _ref.isLoading,
39185
+ onLoadMore = _ref.onLoadMore,
39186
+ renderLink = _ref.renderLink;
39187
+ return React__default.createElement(VirtualListView, {
39188
+ data: items,
39189
+ loading: isLoading,
39190
+ listHeight: 0,
39191
+ containerProps: {
39192
+ sx: {
39193
+ height: "100%"
39194
+ }
39195
+ },
39196
+ renderItem: function renderItem(item, index, measure) {
39197
+ return React__default.createElement(AnnouncementItem, {
39198
+ role: role,
39199
+ key: index,
39200
+ data: item,
39201
+ renderLink: renderLink,
39202
+ onLoad: measure
39203
+ });
39204
+ },
39205
+ onLoadMore: onLoadMore
39206
+ });
39207
+ };
39208
+
39209
+ var DEFAULT_ANNOUNCEMENT_FILTER = {
39210
+ currentPage: 1,
39211
+ pageSize: 10,
39212
+ sortColumnDirection: OrderType.DESC,
39213
+ sortColumnName: "CreatedAt"
39214
+ };
39215
+ var ANNOUNCEMENT_CHANNEL = "ANNOUNCEMENT_A{academy}_U{userId}_CHANNEL";
39216
+
39217
+ var ANNOUNCEMENT_URL = BASE_URL + "/api/announcements";
39218
+ var getAnnouncementListApi = function getAnnouncementListApi(query) {
39219
+ return api.get("" + ANNOUNCEMENT_URL, {
39220
+ params: query
39221
+ });
39222
+ };
39223
+ var getTotalNumberUnreadAnnouncementsApi = function getTotalNumberUnreadAnnouncementsApi() {
39224
+ return api.get(ANNOUNCEMENT_URL + "/unread");
39225
+ };
39226
+ var markAsReadAnnouncementsApi = function markAsReadAnnouncementsApi() {
39227
+ return api.post(ANNOUNCEMENT_URL + "/mark-as-read");
39228
+ };
39229
+ var markAsReadAnnouncementByIdApi = function markAsReadAnnouncementByIdApi(id) {
39230
+ return api.post(ANNOUNCEMENT_URL + "/" + id + "/mark-as-read");
39231
+ };
39232
+
39233
+ var AnnouncementContainer = function AnnouncementContainer(_ref) {
39234
+ var role = _ref.role,
39235
+ renderLink = _ref.renderLink,
39236
+ renderViewNoteLink = _ref.renderViewNoteLink;
39237
+ var _useTranslation = useTranslation(),
39238
+ t = _useTranslation.t;
39239
+ var dispatch = useDispatch();
39240
+ var user = useSelector(function (state) {
39241
+ var _state$common;
39242
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
39243
+ });
39244
+ var academyDomain = user === null || user === void 0 ? void 0 : user.academyDomain;
39245
+ var concurrentConnectionPusher = useSelector(function (state) {
39246
+ var _state$common2;
39247
+ return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : _state$common2.concurrentConnectionPusher;
39248
+ });
39249
+ var totalUnreadMessages = useSelector(function (state) {
39250
+ var _state$common3;
39251
+ return state === null || state === void 0 ? void 0 : (_state$common3 = state.common) === null || _state$common3 === void 0 ? void 0 : _state$common3.totalUnreadMessages;
39252
+ });
39253
+ var pusher = concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.pusher;
39254
+ var channel = useRef();
39255
+ var channelName = useRef();
39256
+ var _useState = useState(false),
39257
+ openPopover = _useState[0],
39258
+ setOpenPopover = _useState[1];
39259
+ var anchorEl = useRef(null);
39260
+ var handleOpenPopover = function handleOpenPopover() {
39261
+ setOpenPopover(true);
39262
+ };
39263
+ var handleClosePopover = function handleClosePopover() {
39264
+ setOpenPopover(false);
39265
+ };
39266
+ var _useVirtualList = useVirtualList({}, getAnnouncementListApi),
39267
+ filter = _useVirtualList.filter,
39268
+ items = _useVirtualList.items,
39269
+ isLoading = _useVirtualList.isLoading,
39270
+ handleLoadMore = _useVirtualList.handleLoadMore,
39271
+ handleItemAdded = _useVirtualList.handleItemAdded,
39272
+ setItems = _useVirtualList.setItems,
39273
+ handleChangeFilter = _useVirtualList.handleChangeFilter,
39274
+ getItems = _useVirtualList.getItems;
39275
+ var handleNewAnnouncement = function handleNewAnnouncement(data) {
39276
+ try {
39277
+ var announcement = JSON.parse(data);
39278
+ openPopover && handleItemAdded(announcement);
39279
+ } catch (error) {
39280
+ console.log(error);
39281
+ }
39282
+ dispatch(setTotalUnreadMessages(totalUnreadMessages + 1));
39283
+ };
39284
+ var handleDeletedAnnouncement = function handleDeletedAnnouncement(_data) {
39285
+ openPopover && getItems();
39286
+ handleGetTotalUnread();
39287
+ };
39288
+ var handleUpdatedAnnouncement = function handleUpdatedAnnouncement(data) {
39289
+ try {
39290
+ var announcement = JSON.parse(data);
39291
+ openPopover && setItems(function (state) {
39292
+ return state.map(function (i) {
39293
+ if (i.id !== announcement.id) return i;
39294
+ return _extends({}, i, {
39295
+ data: _extends({}, i.data, {
39296
+ data: announcement.data.data
39297
+ })
39298
+ });
39299
+ });
39300
+ });
39301
+ } catch (error) {
39302
+ console.log(error);
39303
+ }
39304
+ };
39305
+ var handleMarkAsRead = function handleMarkAsRead() {
39306
+ try {
39307
+ var _temp2 = function _temp2() {
39308
+ dispatch(setLoading(false));
39309
+ };
39310
+ dispatch(setLoading(true));
39311
+ var _temp = _catch(function () {
39312
+ return Promise.resolve(markAsReadAnnouncementsApi()).then(function () {
39313
+ setItems(function (state) {
39314
+ return state.map(function (i) {
39315
+ return _extends({}, i, {
39316
+ isRead: true
39317
+ });
39318
+ });
39319
+ });
39320
+ dispatch(setTotalUnreadMessages(0));
39321
+ });
39322
+ }, function (error) {
39323
+ toast.error(getErrorMessage(t, error));
39324
+ });
39325
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
39326
+ } catch (e) {
39327
+ return Promise.reject(e);
39328
+ }
39329
+ };
39330
+ var handleMarkAsReadById = function handleMarkAsReadById(id, loading) {
39331
+ try {
39332
+ var _temp4 = function _temp4() {
39333
+ loading && dispatch(setLoading(false));
39334
+ };
39335
+ loading && dispatch(setLoading(true));
39336
+ var _temp3 = _catch(function () {
39337
+ return Promise.resolve(markAsReadAnnouncementByIdApi(id)).then(function () {
39338
+ setItems(function (state) {
39339
+ return state.map(function (i) {
39340
+ return _extends({}, i, {
39341
+ isRead: i.id === id ? true : i.isRead
39342
+ });
39343
+ });
39344
+ });
39345
+ dispatch(setTotalUnreadMessages(Math.max(0, totalUnreadMessages - 1)));
39346
+ });
39347
+ }, function (error) {
39348
+ toast.error(getErrorMessage(t, error));
39349
+ });
39350
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
39351
+ } catch (e) {
39352
+ return Promise.reject(e);
39353
+ }
39354
+ };
39355
+ var handleCloseAndMarkRead = function handleCloseAndMarkRead(data) {
39356
+ handleClosePopover();
39357
+ if (!data.isRead) handleMarkAsReadById(data.id);
39358
+ };
39359
+ var renderNotiLink = function renderNotiLink(children, data) {
39360
+ return renderLink(children, data, function () {
39361
+ return handleCloseAndMarkRead(data);
39362
+ });
39363
+ };
39364
+ var cleanupPusher = function cleanupPusher() {
39365
+ channel.current && channel.current.unbind(AnnouncementEvent.ReceivedNewNote, handleNewAnnouncement);
39366
+ channel.current && channel.current.unbind(AnnouncementEvent.UpdatedNote, handleUpdatedAnnouncement);
39367
+ channel.current && channel.current.unbind(AnnouncementEvent.DeletedNote, handleDeletedAnnouncement);
39368
+ channelName.current && pusher && pusher.unsubscribe(channelName.current);
39369
+ };
39370
+ useEffect(function () {
39371
+ if (concurrentConnectionPusher !== null && concurrentConnectionPusher !== void 0 && concurrentConnectionPusher.academyDomain && academyDomain && user !== null && user !== void 0 && user.id) {
39372
+ var normalizedAcademyDomain = academyDomain.trim().toUpperCase();
39373
+ channelName.current = ANNOUNCEMENT_CHANNEL.replace("{academy}", normalizedAcademyDomain).replace("{userId}", user.id);
39374
+ channel.current = pusher.subscribe(channelName.current);
39375
+ channel.current.bind(AnnouncementEvent.ReceivedNewNote, handleNewAnnouncement);
39376
+ channel.current.bind(AnnouncementEvent.UpdatedNote, handleUpdatedAnnouncement);
39377
+ channel.current.bind(AnnouncementEvent.DeletedNote, handleDeletedAnnouncement);
39378
+ }
39379
+ return cleanupPusher;
39380
+ }, [academyDomain, user === null || user === void 0 ? void 0 : user.id, concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.academyDomain, totalUnreadMessages, openPopover, JSON.stringify(filter)]);
39381
+ var handleGetTotalUnread = function handleGetTotalUnread() {
39382
+ try {
39383
+ var _temp5 = _catch(function () {
39384
+ return Promise.resolve(getTotalNumberUnreadAnnouncementsApi()).then(function (res) {
39385
+ dispatch(setTotalUnreadMessages(res.data));
39386
+ });
39387
+ }, function (error) {
39388
+ console.log({
39389
+ error: error
39390
+ });
39391
+ });
39392
+ return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(function () {}) : void 0);
39393
+ } catch (e) {
39394
+ return Promise.reject(e);
39395
+ }
39396
+ };
39397
+ useEffect(function () {
39398
+ if (academyDomain && user !== null && user !== void 0 && user.id) handleGetTotalUnread();
39399
+ }, [academyDomain, user === null || user === void 0 ? void 0 : user.id]);
39400
+ useEffect(function () {
39401
+ handleChangeFilter(openPopover ? DEFAULT_ANNOUNCEMENT_FILTER : {});
39402
+ }, [openPopover]);
39403
+ return React__default.createElement(Box, null, React__default.createElement(IconButton, {
39404
+ ref: anchorEl,
39405
+ className: "ms-2",
39406
+ onClick: handleOpenPopover
39407
+ }, React__default.createElement(Badge, {
39408
+ badgeContent: totalUnreadMessages,
39409
+ max: 9,
39410
+ color: "error"
39411
+ }, React__default.createElement(FaBell, {
39412
+ size: 20,
39413
+ color: blue[500]
39414
+ }))), React__default.createElement(Popover, {
39415
+ open: openPopover,
39416
+ anchorEl: anchorEl.current,
39417
+ onClose: handleClosePopover,
39418
+ anchorOrigin: {
39419
+ vertical: "bottom",
39420
+ horizontal: "right"
39421
+ },
39422
+ slotProps: {
39423
+ paper: {
39424
+ sx: {
39425
+ width: 360
39426
+ }
39427
+ }
39428
+ }
39429
+ }, React__default.createElement(Stack, {
39430
+ height: "100%",
39431
+ direction: "column"
39432
+ }, React__default.createElement(Stack, {
39433
+ direction: "row",
39434
+ justifyContent: "space-between",
39435
+ gap: 2,
39436
+ sx: {
39437
+ py: 2,
39438
+ px: 2.5
39439
+ }
39440
+ }, React__default.createElement(Box, {
39441
+ sx: {
39442
+ flexGrow: 1
39443
+ }
39444
+ }, React__default.createElement(Typography, {
39445
+ variant: "subtitle1"
39446
+ }, t("notifications")), totalUnreadMessages > 0 && React__default.createElement(Typography, {
39447
+ variant: "body2",
39448
+ sx: {
39449
+ color: "text.secondary"
39450
+ }
39451
+ }, t("you_have_n_unread_messages", {
39452
+ n: totalUnreadMessages
39453
+ })), renderViewNoteLink && React__default.createElement(Box, null, renderViewNoteLink(React__default.createElement(Typography, {
39454
+ sx: {
39455
+ fontWeight: 600,
39456
+ color: grey[600],
39457
+ fontSize: "14px",
39458
+ "&:hover": {
39459
+ textDecoration: "underline",
39460
+ color: green[700]
39461
+ }
39462
+ }
39463
+ }, t("view_notes")), handleClosePopover))), totalUnreadMessages > 0 && React__default.createElement(Stack, {
39464
+ direction: "column"
39465
+ }, React__default.createElement(Tooltip, {
39466
+ title: t("mark_as_read")
39467
+ }, React__default.createElement(IconButton, {
39468
+ color: "primary",
39469
+ onClick: handleMarkAsRead
39470
+ }, React__default.createElement(BsCheckAll, null))))), React__default.createElement(Divider, {
39471
+ component: "div"
39472
+ }), React__default.createElement(Stack, {
39473
+ direction: "column",
39474
+ sx: {
39475
+ height: {
39476
+ xs: 280,
39477
+ sm: 400
39478
+ },
39479
+ py: 2
39480
+ }
39481
+ }, React__default.createElement(AnnouncementList, {
39482
+ role: role,
39483
+ items: items,
39484
+ isLoading: isLoading,
39485
+ onLoadMore: handleLoadMore,
39486
+ renderLink: renderNotiLink
39487
+ })))));
39488
+ };
39489
+
37989
39490
  var MenuItemCustom = styled(MenuItem)(function () {
37990
39491
  return {
37991
39492
  '&.Mui-selected': {
@@ -38133,7 +39634,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
38133
39634
  }, React__default.createElement(GoArrowSwitch, {
38134
39635
  size: 14,
38135
39636
  color: styles.gray_900
38136
- })))))), (isSuperAdmin || !isAdmin || isTeacherSite) && React__default.createElement(Popover, {
39637
+ })))))), (isSuperAdmin || !isAdmin || isTeacherSite) && React__default.createElement(Popover$1, {
38137
39638
  open: !!open,
38138
39639
  anchorEl: open,
38139
39640
  onClose: handleClose,
@@ -38337,7 +39838,7 @@ var TheLanguageDropdown = function TheLanguageDropdown() {
38337
39838
  }, React__default.createElement("img", {
38338
39839
  src: currentLanguage === null || currentLanguage === void 0 ? void 0 : currentLanguage.image,
38339
39840
  alt: currentLanguage === null || currentLanguage === void 0 ? void 0 : currentLanguage.name
38340
- })), React__default.createElement(Popover, {
39841
+ })), React__default.createElement(Popover$1, {
38341
39842
  open: !!open,
38342
39843
  anchorEl: open,
38343
39844
  onClose: handleClose,
@@ -38712,17 +40213,19 @@ var Header = function Header(_ref) {
38712
40213
  role = _ref.role,
38713
40214
  history = _ref.history,
38714
40215
  link = _ref.link,
38715
- onSignOut = _ref.onSignOut;
40216
+ onSignOut = _ref.onSignOut,
40217
+ renderNotificationLink = _ref.renderNotificationLink,
40218
+ renderViewNoteLink = _ref.renderViewNoteLink;
38716
40219
  var Link = link;
38717
40220
  var _useTranslation = useTranslation(),
38718
40221
  t = _useTranslation.t;
38719
40222
  var theme = useTheme();
38720
- var param = window.location.pathname;
38721
40223
  var language = useSelector(function (state) {
38722
40224
  var _state$common;
38723
40225
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.language;
38724
40226
  });
38725
- var isTeacherSide = param.includes('teacher');
40227
+ var isTeacherSide = role === Role.Teacher;
40228
+ var isStudentSide = role === Role.Student;
38726
40229
  var isLargerThanXL = useMediaQuery(theme.breakpoints.up("xl"));
38727
40230
  var academyDomain = useSelector(function (state) {
38728
40231
  var _state$common2, _state$common2$user;
@@ -38733,6 +40236,7 @@ var Header = function Header(_ref) {
38733
40236
  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
40237
  });
38735
40238
  var isAcademy = isLearningSpace || academyDomain;
40239
+ var showAnnouncement = !isStudentSide && isAcademy;
38736
40240
  var logo = useMemo(function () {
38737
40241
  if (isTeacherSide) {
38738
40242
  return language === Language.en ? React__default.createElement(teacherFullLogoEn, null) : React__default.createElement(teacherFullLogoKo, null);
@@ -38826,7 +40330,11 @@ var Header = function Header(_ref) {
38826
40330
  }, React__default.createElement(singleLogo, null))), React__default.createElement(Stack, {
38827
40331
  className: "me-2",
38828
40332
  display: "none"
38829
- }, React__default.createElement(TheLanguageDropdown, null))));
40333
+ }, React__default.createElement(TheLanguageDropdown, null)), showAnnouncement && renderNotificationLink && React__default.createElement(AnnouncementContainer, {
40334
+ role: role,
40335
+ renderLink: renderNotificationLink,
40336
+ renderViewNoteLink: renderViewNoteLink
40337
+ })));
38830
40338
  };
38831
40339
  var HeaderLink = function HeaderLink(_ref3) {
38832
40340
  var data = _ref3.data,
@@ -38840,7 +40348,7 @@ var HeaderLink = function HeaderLink(_ref3) {
38840
40348
  return React__default.createElement(Fragment$1, null, render(data, isActive));
38841
40349
  };
38842
40350
 
38843
- var useLayoutContext = function useLayoutContext(role, pusherRegisterUrls, showLoadingAcademy, domain) {
40351
+ var useLayoutContext = function useLayoutContext(role, showLoadingAcademy, domain) {
38844
40352
  var _currentPusher$connec2;
38845
40353
  if (showLoadingAcademy === void 0) {
38846
40354
  showLoadingAcademy = true;
@@ -38854,13 +40362,9 @@ var useLayoutContext = function useLayoutContext(role, pusherRegisterUrls, showL
38854
40362
  var _state$common;
38855
40363
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
38856
40364
  });
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
40365
  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;
40366
+ var _state$common2;
40367
+ return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : _state$common2.concurrentConnectionPusher;
38864
40368
  });
38865
40369
  var currentPusher = concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.pusher;
38866
40370
  var roles = (user === null || user === void 0 ? void 0 : user.roles) || [];
@@ -38941,53 +40445,36 @@ var useLayoutContext = function useLayoutContext(role, pusherRegisterUrls, showL
38941
40445
  }
38942
40446
  };
38943
40447
  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
- }));
40448
+ var _currentPusher$connec;
40449
+ if ((!academyDomain || !(user !== null && user !== void 0 && user.id)) && role !== Role.Student) return;
40450
+ if (academyDomain !== (concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.academyDomain) || !academyDomain && !(concurrentConnectionPusher !== null && concurrentConnectionPusher !== void 0 && concurrentConnectionPusher.academyDomain) && !concurrentConnectionPusher.isRegistered) {
40451
+ var _headers;
40452
+ if (currentPusher) {
40453
+ currentPusher.disconnect();
38987
40454
  }
38988
- isReadyRegisterPusher && dispatch(setReadyRegisterPusher(false));
40455
+ var token = getAccessToken();
40456
+ var pusher = new Pusher$1(PUSHER_CONFIG.key, {
40457
+ cluster: PUSHER_CONFIG.cluster,
40458
+ authEndpoint: (academyDomain ? BASE_URL : SUPER_ADMIN_BASE_URL) + "/api/auth/pusher",
40459
+ auth: {
40460
+ params: {},
40461
+ headers: (_headers = {
40462
+ Authorization: "Bearer " + token
40463
+ }, _headers[AcademyHeaders] = academyDomain, _headers)
40464
+ }
40465
+ });
40466
+ dispatch(setConcurrentConnectionPusher({
40467
+ pusher: pusher,
40468
+ academyDomain: academyDomain,
40469
+ isRegistered: true
40470
+ }));
40471
+ } else if ((currentPusher === null || currentPusher === void 0 ? void 0 : (_currentPusher$connec = currentPusher.connection) === null || _currentPusher$connec === void 0 ? void 0 : _currentPusher$connec.state) === "disconnected") {
40472
+ currentPusher.connect();
38989
40473
  }
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]);
40474
+ return function () {
40475
+ currentPusher === null || currentPusher === void 0 ? void 0 : currentPusher.disconnect();
40476
+ };
40477
+ }, [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
40478
  useEffect(function () {
38992
40479
  !(user !== null && user !== void 0 && user.id) && loadInfo();
38993
40480
  }, [user === null || user === void 0 ? void 0 : user.id]);
@@ -39013,18 +40500,16 @@ var useLayoutContext = function useLayoutContext(role, pusherRegisterUrls, showL
39013
40500
  var LayoutContext = function LayoutContext(_ref) {
39014
40501
  var children = _ref.children,
39015
40502
  role = _ref.role,
39016
- _ref$pusherRegisterUr = _ref.pusherRegisterUrls,
39017
- pusherRegisterUrls = _ref$pusherRegisterUr === void 0 ? [] : _ref$pusherRegisterUr,
39018
40503
  showLoadingAcademy = _ref.showLoadingAcademy;
39019
40504
  var user = useSelector(function (state) {
39020
40505
  var _state$common;
39021
40506
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
39022
40507
  });
39023
- useLayoutContext(role, pusherRegisterUrls, showLoadingAcademy);
40508
+ useLayoutContext(role, showLoadingAcademy);
39024
40509
  if (!(user !== null && user !== void 0 && user.email)) return React__default.createElement(LoadingComponent, {
39025
40510
  isLoading: true
39026
40511
  });else return React__default.createElement(Fragment$1, null, children);
39027
40512
  };
39028
40513
 
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 };
40514
+ 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
40515
  //# sourceMappingURL=index.modern.js.map