touchstudy-core 0.1.82 → 0.1.84

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 (62) hide show
  1. package/dist/components/Chats/configs/types.d.ts +1 -0
  2. package/dist/components/ErrorHandler.d.ts +6 -0
  3. package/dist/components/LabelRequired.d.ts +8 -0
  4. package/dist/containers/Classes/apiClients/classService.d.ts +16 -0
  5. package/dist/containers/Classes/apiClients/teacherService.d.ts +2 -0
  6. package/dist/containers/Classes/components/ClassForm.d.ts +4 -0
  7. package/dist/containers/Classes/components/CorrectAnswerSelector.d.ts +7 -0
  8. package/dist/containers/Classes/components/LessonFormBody.d.ts +4 -0
  9. package/dist/containers/Classes/components/LessonFormDialog.d.ts +14 -0
  10. package/dist/containers/Classes/components/LessonList.d.ts +27 -0
  11. package/dist/containers/Classes/components/SelectDialog.d.ts +30 -0
  12. package/dist/containers/Classes/components/StudentList.d.ts +21 -0
  13. package/dist/containers/Classes/components/TeacherList.d.ts +21 -0
  14. package/dist/containers/Classes/components/TeacherSelector.d.ts +11 -0
  15. package/dist/containers/Classes/configs/constants.d.ts +70 -0
  16. package/dist/containers/Classes/configs/interfaces.d.ts +23 -0
  17. package/dist/containers/Classes/configs/types.d.ts +215 -0
  18. package/dist/containers/Classes/hooks/useClassDetail.d.ts +105 -0
  19. package/dist/containers/Classes/hooks/useClassList.d.ts +20 -0
  20. package/dist/containers/Classes/hooks/useLessonClassList.d.ts +20 -0
  21. package/dist/containers/Classes/hooks/useStudentClassList.d.ts +22 -0
  22. package/dist/containers/Classes/hooks/useTab.d.ts +5 -0
  23. package/dist/containers/Classes/hooks/useTeacherClassList.d.ts +22 -0
  24. package/dist/containers/Classes/hooks/useTeacherList.d.ts +6 -0
  25. package/dist/containers/Classes/views/ClassDetail.d.ts +10 -0
  26. package/dist/containers/Classes/views/ClassList.d.ts +10 -0
  27. package/dist/containers/Login/apiClient/index.d.ts +15 -0
  28. package/dist/containers/Login/configs/helpers.d.ts +1 -0
  29. package/dist/containers/Login/hooks/useLogin.d.ts +21 -4
  30. package/dist/containers/Login/hooks/useLoginWithEmail.d.ts +10 -0
  31. package/dist/containers/Login/views/Login.d.ts +1 -1
  32. package/dist/containers/Login/views/LoginWithEmail.d.ts +11 -0
  33. package/dist/containers/Login/views/block/BlockLogin.d.ts +15 -1
  34. package/dist/containers/Select/Category/hook/useCategorySelect.d.ts +0 -1
  35. package/dist/containers/Textbooks/apiClient/articleService.d.ts +5 -6
  36. package/dist/containers/Textbooks/apiClient/chapterService.d.ts +5 -6
  37. package/dist/containers/Textbooks/apiClient/textbookService.d.ts +5 -6
  38. package/dist/containers/Textbooks/hooks/useTextbookDetail.d.ts +2 -0
  39. package/dist/containers/Users/apiClient/userService.d.ts +9 -0
  40. package/dist/containers/Users/components/Dialogs/DeleteUserCsvDialog.d.ts +10 -0
  41. package/dist/containers/Users/components/Dialogs/RecentUserActionDialog.d.ts +9 -0
  42. package/dist/containers/Users/components/Dialogs/UserDialog.d.ts +12 -0
  43. package/dist/containers/Users/configs/constants.d.ts +37 -0
  44. package/dist/containers/Users/configs/types.d.ts +11 -0
  45. package/dist/containers/Users/hooks/useExportUsersCsv.d.ts +5 -0
  46. package/dist/containers/Users/hooks/useRecentUserAction.d.ts +10 -0
  47. package/dist/containers/Users/hooks/useUserList.d.ts +40 -0
  48. package/dist/containers/Users/views/UserList.d.ts +7 -0
  49. package/dist/index.css +6 -0
  50. package/dist/index.d.ts +2 -1
  51. package/dist/index.js +625 -229
  52. package/dist/index.js.map +1 -1
  53. package/dist/index.modern.js +624 -229
  54. package/dist/index.modern.js.map +1 -1
  55. package/dist/services/recentUserActionService.d.ts +4 -4
  56. package/dist/utils/enums/UserSortColumn.d.ts +11 -0
  57. package/dist/utils/toLocalTime.d.ts +1 -0
  58. package/dist/utils/types/login.d.ts +1 -0
  59. package/dist/utils/types/recentUserAction.d.ts +1 -2
  60. package/dist/utils/types/user.d.ts +3 -0
  61. package/dist/utils/types/users.d.ts +17 -0
  62. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -5,14 +5,17 @@ var moment = _interopDefault(require('moment'));
5
5
  var React = require('react');
6
6
  var React__default = _interopDefault(React);
7
7
  var formik = require('formik');
8
- var yup = require('yup');
8
+ var Yup = require('yup');
9
9
  var GoogleLogin = require('@leecheuk/react-google-login');
10
10
  var GoogleLogin__default = _interopDefault(GoogleLogin);
11
11
  var reactRedux = require('react-redux');
12
12
  var axios = _interopDefault(require('axios'));
13
13
  var reactI18next = require('react-i18next');
14
14
  var material = require('@mui/material');
15
+ var colors = require('@mui/material/colors');
16
+ var reactGoogleRecaptchaV3 = require('react-google-recaptcha-v3');
15
17
  var gapiScript = require('gapi-script');
18
+ var reactToastify = require('react-toastify');
16
19
  require('moment/locale/ko.js');
17
20
  require('moment/locale/en-au.js');
18
21
  var Pusher = _interopDefault(require('pusher-js'));
@@ -24,7 +27,6 @@ var Popover = _interopDefault(require('@mui/material/Popover'));
24
27
  var MenuItem = _interopDefault(require('@mui/material/MenuItem'));
25
28
  var IconButton = _interopDefault(require('@mui/material/IconButton'));
26
29
  var go = require('react-icons/go');
27
- var reactToastify = require('react-toastify');
28
30
  var Select = require('react-select');
29
31
  var Select__default = _interopDefault(Select);
30
32
  var fa = require('react-icons/fa');
@@ -472,14 +474,16 @@ var useLogin = function useLogin(history, homeAcademyUrl, homeUrl, registerUrl)
472
474
  return Promise.resolve(apiLogin()).then(function (loginResponse) {
473
475
  var isFirstLogin = loginResponse.isFirstLogin,
474
476
  token = loginResponse.token,
475
- user = loginResponse.user;
477
+ user = loginResponse.user,
478
+ isSuperAdmin = loginResponse.isSuperAdmin;
476
479
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain);
477
480
  var needToRegister = isStudent && isFirstLogin && isAcademy;
478
481
  var redirectUrl = getRedirectUrl();
479
482
  if (isStudent && !registerUrl) throw new Error("an_unexpected_error_has_occurred");
480
483
  if (!redirectUrl) redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
481
484
  redirectLoginUser(_extends({}, user, {
482
- isNotEnoughStatements: isFirstLogin
485
+ isNotEnoughStatements: isFirstLogin,
486
+ isSuperAdmin: isSuperAdmin
483
487
  }), token, redirectUrl);
484
488
  });
485
489
  }, function (error) {
@@ -712,20 +716,33 @@ var SloganFullLogoEn = function SloganFullLogoEn(_ref) {
712
716
  }))));
713
717
  };
714
718
 
715
- var schema = yup.object({
716
- email: yup.string().email("Email is invalid").required("Email is required"),
717
- password: yup.string().required("Password is required"),
718
- rememberMe: yup.boolean()
719
- });
720
- var BlockLogin = function BlockLogin(_ref) {
721
- var defaultInfo = _ref.defaultInfo,
722
- history = _ref.history,
723
- _ref$role = _ref.role,
724
- role = _ref$role === void 0 ? exports.Role.Student : _ref$role,
725
- homeAcademyUrl = _ref.homeAcademyUrl,
726
- homeUrl = _ref.homeUrl,
727
- registerUrl = _ref.registerUrl,
728
- clientId = _ref.clientId;
719
+ var schema = function schema(t, isOTP) {
720
+ return Yup.object({
721
+ email: Yup.string().when([], function (_ref, schema) {
722
+ return !isOTP ? schema.email(t("invalid_email_address")).required(t("email_is_required")) : schema;
723
+ }),
724
+ otp: Yup.number().typeError(t("must_be_number")).when([], function (_ref2, schema) {
725
+ return isOTP ? schema.required(t("otp_is_required")).positive().integer() : schema;
726
+ })
727
+ });
728
+ };
729
+ var BlockLogin = function BlockLogin(_ref3) {
730
+ var isOTP = _ref3.isOTP,
731
+ isEmail = _ref3.isEmail,
732
+ defaultInfo = _ref3.defaultInfo,
733
+ onVerify = _ref3.onVerify,
734
+ tokenReCaptcha = _ref3.tokenReCaptcha,
735
+ refreshReCaptcha = _ref3.refreshReCaptcha,
736
+ handleSwitchOTP = _ref3.handleSwitchOTP,
737
+ handleSwitchEmail = _ref3.handleSwitchEmail,
738
+ history = _ref3.history,
739
+ _ref3$role = _ref3.role,
740
+ role = _ref3$role === void 0 ? exports.Role.Student : _ref3$role,
741
+ homeAcademyUrl = _ref3.homeAcademyUrl,
742
+ homeUrl = _ref3.homeUrl,
743
+ registerUrl = _ref3.registerUrl,
744
+ clientId = _ref3.clientId,
745
+ onSubmit = _ref3.onSubmit;
729
746
  var language = reactRedux.useSelector(function (state) {
730
747
  var _state$common;
731
748
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.language;
@@ -770,19 +787,32 @@ var BlockLogin = function BlockLogin(_ref) {
770
787
  sx: {
771
788
  gap: 4,
772
789
  p: 6,
773
- display: 'flex',
774
- flexDirection: 'column',
775
- alignItems: 'center'
790
+ display: "flex",
791
+ flexDirection: "column",
792
+ alignItems: "center"
776
793
  }
777
794
  }, React__default.createElement(formik.Formik, {
778
795
  initialValues: defaultInfo,
779
- validationSchema: schema,
780
- onSubmit: function onSubmit() {}
781
- }, function (formikProps) {
782
- var handleSubmit = formikProps.handleSubmit;
783
- return React__default.createElement("form", {
784
- onSubmit: handleSubmit
785
- }, React__default.createElement("div", {
796
+ validationSchema: function validationSchema() {
797
+ return schema(t, isOTP);
798
+ },
799
+ onSubmit: onSubmit
800
+ }, function (_ref4) {
801
+ var errors = _ref4.errors,
802
+ values = _ref4.values,
803
+ setFieldValue = _ref4.setFieldValue;
804
+ console.log({
805
+ errors: errors,
806
+ values: values
807
+ });
808
+ React.useEffect(function () {
809
+ if (isOTP) {
810
+ setFieldValue("email", "");
811
+ } else {
812
+ setFieldValue("otp", "");
813
+ }
814
+ }, [isOTP, isEmail]);
815
+ return React__default.createElement(formik.Form, null, React__default.createElement("div", {
786
816
  className: "" + styles["block-form"]
787
817
  }, React__default.createElement(material.Stack, {
788
818
  py: 2,
@@ -792,7 +822,7 @@ var BlockLogin = function BlockLogin(_ref) {
792
822
  width: "300px"
793
823
  }) : React__default.createElement(SloganFullLogoEn, {
794
824
  width: "300px"
795
- })), React__default.createElement("div", {
825
+ })), !isOTP && !isEmail && React__default.createElement("div", {
796
826
  className: "p-0 mt-1 mb-4"
797
827
  }, React__default.createElement(GoogleLogin__default, {
798
828
  clientId: clientId,
@@ -802,18 +832,152 @@ var BlockLogin = function BlockLogin(_ref) {
802
832
  cookiePolicy: "single_host_origin",
803
833
  className: "" + styles["btn-login-google"],
804
834
  isSignedIn: true
805
- }))));
835
+ }), React__default.createElement(material.Box, {
836
+ onClick: function onClick() {
837
+ return handleSwitchEmail(true);
838
+ },
839
+ sx: {
840
+ cursor: "pointer",
841
+ my: 4
842
+ }
843
+ }, React__default.createElement(material.Typography, {
844
+ fontSize: "14px",
845
+ fontWeight: 700,
846
+ color: colors.blue[700]
847
+ }, t("sign_in_with_email"))))), (isEmail || isOTP) && React__default.createElement(material.Stack, null, !isOTP ? React__default.createElement(material.Stack, {
848
+ flexDirection: "column",
849
+ gap: 1
850
+ }, React__default.createElement(material.Typography, {
851
+ fontWeight: 700,
852
+ fontSize: "14px"
853
+ }, t("email")), React__default.createElement(formik.Field, {
854
+ name: "email",
855
+ render: function render(_ref5) {
856
+ var field = _ref5.field;
857
+ return React__default.createElement(material.TextField, Object.assign({}, field));
858
+ }
859
+ }), !!(errors !== null && errors !== void 0 && errors.email) && React__default.createElement(material.Typography, {
860
+ fontWeight: 500,
861
+ fontSize: "10px",
862
+ lineHeight: "11.93px",
863
+ color: !(errors !== null && errors !== void 0 && errors.email) ? "#97A1AF" : "#F34B4B"
864
+ }, errors === null || errors === void 0 ? void 0 : errors.email)) : React__default.createElement(material.Stack, {
865
+ flexDirection: "column",
866
+ gap: 1
867
+ }, React__default.createElement(material.Typography, {
868
+ fontWeight: 700,
869
+ fontSize: "14px"
870
+ }, t("OTP")), React__default.createElement(formik.Field, {
871
+ name: "otp",
872
+ render: function render(_ref6) {
873
+ var field = _ref6.field;
874
+ return React__default.createElement(material.TextField, Object.assign({}, field));
875
+ }
876
+ }), !!(errors !== null && errors !== void 0 && errors.otp) && React__default.createElement(material.Typography, {
877
+ fontWeight: 500,
878
+ fontSize: "10px",
879
+ lineHeight: "11.93px",
880
+ color: !(errors !== null && errors !== void 0 && errors.otp) ? "#97A1AF" : "#F34B4B"
881
+ }, errors === null || errors === void 0 ? void 0 : errors.otp)), React__default.createElement(material.Stack, {
882
+ flexDirection: "row",
883
+ alignItems: "center",
884
+ gap: 2,
885
+ my: 2
886
+ }, React__default.createElement(reactGoogleRecaptchaV3.GoogleReCaptcha, {
887
+ onVerify: onVerify,
888
+ refreshReCaptcha: refreshReCaptcha
889
+ })), React__default.createElement(material.Box, {
890
+ onClick: function onClick() {
891
+ handleSwitchEmail(false);
892
+ handleSwitchOTP(false);
893
+ },
894
+ sx: {
895
+ cursor: "pointer",
896
+ my: 2
897
+ }
898
+ }, React__default.createElement(material.Typography, {
899
+ fontSize: "14px",
900
+ fontWeight: 700,
901
+ color: colors.blue[700]
902
+ }, t("sign_in_with_google_account"))), React__default.createElement(material.Stack, {
903
+ flexDirection: "row",
904
+ justifyContent: "end",
905
+ gap: 1,
906
+ mt: 2
907
+ }, React__default.createElement(material.Button, {
908
+ variant: "contained",
909
+ color: "primary",
910
+ type: "submit",
911
+ disabled: !tokenReCaptcha
912
+ }, t("submit")))));
806
913
  })));
807
914
  };
808
915
 
916
+ var SIGN_IN_SUPER_ADMIN_URL = SUPER_ADMIN_BASE_URL + "/api/auth/login";
917
+ var SIGN_IN_URL = BASE_URL + "/api/auth/login";
918
+ var signInApi = function signInApi(_ref) {
919
+ var email = _ref.email,
920
+ password = _ref.password,
921
+ role = _ref.role;
922
+ return api.post(SIGN_IN_URL + "/demo", {
923
+ email: email,
924
+ password: password,
925
+ role: role
926
+ });
927
+ };
928
+ var signInWithEmailApi = function signInWithEmailApi(_ref2) {
929
+ var academyDomain = _ref2.academyDomain,
930
+ email = _ref2.email,
931
+ reCaptcha = _ref2.reCaptcha;
932
+ return api.post((academyDomain ? SIGN_IN_URL : SIGN_IN_SUPER_ADMIN_URL) + "/email", {
933
+ email: email,
934
+ reCaptcha: reCaptcha
935
+ }, {
936
+ headers: {
937
+ Domain: window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '')
938
+ }
939
+ });
940
+ };
941
+ var signInWithOTPApi = function signInWithOTPApi(_ref3) {
942
+ var academyDomain = _ref3.academyDomain,
943
+ otp = _ref3.otp,
944
+ role = _ref3.role;
945
+ return api.post((academyDomain ? SIGN_IN_URL : SIGN_IN_SUPER_ADMIN_URL) + "/otp", {
946
+ otp: otp,
947
+ role: role
948
+ });
949
+ };
950
+ var signInWithKeyApi = function signInWithKeyApi(_ref4) {
951
+ var academyDomain = _ref4.academyDomain,
952
+ key = _ref4.key,
953
+ role = _ref4.role;
954
+ return api.post((academyDomain ? SIGN_IN_URL : SIGN_IN_SUPER_ADMIN_URL) + "/email/key", {
955
+ key: key,
956
+ role: role
957
+ });
958
+ };
959
+ var signInSuperAdminApi = function signInSuperAdminApi(_ref5) {
960
+ var email = _ref5.email,
961
+ password = _ref5.password,
962
+ role = _ref5.role;
963
+ return api.post(SIGN_IN_SUPER_ADMIN_URL + "/demo", {
964
+ email: email,
965
+ password: password,
966
+ role: role
967
+ });
968
+ };
969
+
809
970
  var defaultInfo = {
810
971
  email: "",
811
- password: "",
812
- captcha: "",
813
- rememberMe: false
972
+ otp: ""
814
973
  };
815
974
  var PAGE_TITLE = "sign_in";
816
- var useLogin$1 = function useLogin(homeAcademyUrl, homeUrl) {
975
+ var useLogin$1 = function useLogin(_ref) {
976
+ var history = _ref.history,
977
+ homeAcademyUrl = _ref.homeAcademyUrl,
978
+ homeUrl = _ref.homeUrl,
979
+ registerUrl = _ref.registerUrl,
980
+ role = _ref.role;
817
981
  var _useState = React.useState(false),
818
982
  openLogin = _useState[0],
819
983
  setOpenLogin = _useState[1];
@@ -823,6 +987,7 @@ var useLogin$1 = function useLogin(homeAcademyUrl, homeUrl) {
823
987
  var _useState3 = React.useState(),
824
988
  clientId = _useState3[0],
825
989
  setClientId = _useState3[1];
990
+ var dispatch = reactRedux.useDispatch();
826
991
  var _useTranslation = reactI18next.useTranslation(),
827
992
  t = _useTranslation.t;
828
993
  var toggle = React.useCallback(function () {
@@ -831,6 +996,96 @@ var useLogin$1 = function useLogin(homeAcademyUrl, homeUrl) {
831
996
  var _useState4 = React.useState(false),
832
997
  isShowPassword = _useState4[0],
833
998
  setIsShowPassword = _useState4[1];
999
+ var _useState5 = React.useState(false),
1000
+ isOTP = _useState5[0],
1001
+ setIsOTP = _useState5[1];
1002
+ var _useState6 = React.useState(false),
1003
+ isEmail = _useState6[0],
1004
+ setIsEmail = _useState6[1];
1005
+ var searchParams = new URLSearchParams(window.location.search);
1006
+ var paramDomain = searchParams.get("domain");
1007
+ var academyDomainStorage = getAcademyDomain();
1008
+ var academyDomain = paramDomain || academyDomainStorage || "";
1009
+ var _useState7 = React.useState(""),
1010
+ tokenReCaptcha = _useState7[0],
1011
+ setTokenReCaptcha = _useState7[1];
1012
+ var _useState8 = React.useState(false),
1013
+ refreshReCaptcha = _useState8[0],
1014
+ setRefreshReCaptcha = _useState8[1];
1015
+ var handleSwitchOTP = function handleSwitchOTP(bool) {
1016
+ setIsOTP(bool);
1017
+ };
1018
+ var handleSwitchEmail = function handleSwitchEmail(bool) {
1019
+ setIsEmail(bool);
1020
+ };
1021
+ var onVerify = React.useCallback(function (token) {
1022
+ setTokenReCaptcha(token);
1023
+ }, []);
1024
+ var redirectLoginUser = function redirectLoginUser(data, token, redirectUrl) {
1025
+ localStorage.setItem(ACCESS_TOKEN, token);
1026
+ !data.academyDomain && localStorage.removeItem(ACADEMY_DOMAIN);
1027
+ !!data.academyDomain && localStorage.setItem(ACADEMY_DOMAIN, data.academyDomain);
1028
+ dispatch(setUser(_extends({}, data)));
1029
+ if (redirectUrl) pushTo(history, redirectUrl);
1030
+ };
1031
+ var handleSubmit = function handleSubmit(values) {
1032
+ try {
1033
+ var _temp5 = function _temp5() {
1034
+ dispatch(setLoading(false));
1035
+ };
1036
+ if (!tokenReCaptcha) return Promise.resolve();
1037
+ dispatch(setLoading(true));
1038
+ var email = values.email,
1039
+ otp = values.otp;
1040
+ var _temp4 = _catch(function () {
1041
+ function _temp3() {
1042
+ var _temp = function () {
1043
+ if (otp) {
1044
+ return Promise.resolve(signInWithOTPApi({
1045
+ academyDomain: academyDomain,
1046
+ otp: otp,
1047
+ role: role
1048
+ })).then(function (res) {
1049
+ var loginResponse = res === null || res === void 0 ? void 0 : res.data;
1050
+ var isFirstLogin = loginResponse.isFirstLogin,
1051
+ token = loginResponse.token,
1052
+ user = loginResponse.user;
1053
+ var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain);
1054
+ var needToRegister = isFirstLogin && isAcademy;
1055
+ var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
1056
+ handleSwitchOTP(false);
1057
+ redirectLoginUser(user, token, redirectUrl);
1058
+ });
1059
+ }
1060
+ }();
1061
+ if (_temp && _temp.then) return _temp.then(function () {});
1062
+ }
1063
+ var _temp2 = function () {
1064
+ if (email) {
1065
+ return Promise.resolve(signInWithEmailApi({
1066
+ academyDomain: academyDomain,
1067
+ email: email,
1068
+ reCaptcha: tokenReCaptcha
1069
+ })).then(function () {
1070
+ reactToastify.toast.success(t("please_check_your_mailbox"));
1071
+ handleSwitchOTP(true);
1072
+ handleSwitchEmail(false);
1073
+ setRefreshReCaptcha(function (b) {
1074
+ return !b;
1075
+ });
1076
+ });
1077
+ }
1078
+ }();
1079
+ return _temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2);
1080
+ }, function (error) {
1081
+ console.log(error);
1082
+ reactToastify.toast.error(getErrorMessage(t, error, t("request_login_fail")));
1083
+ });
1084
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
1085
+ } catch (e) {
1086
+ return Promise.reject(e);
1087
+ }
1088
+ };
834
1089
  React.useEffect(function () {
835
1090
  setClientId(GOOGLE_CLIENT_ID);
836
1091
  }, []);
@@ -853,6 +1108,13 @@ var useLogin$1 = function useLogin(homeAcademyUrl, homeUrl) {
853
1108
  document.title = t("study_peak") + " | " + t(PAGE_TITLE);
854
1109
  }, [t]);
855
1110
  return {
1111
+ isOTP: isOTP,
1112
+ isEmail: isEmail,
1113
+ onVerify: onVerify,
1114
+ tokenReCaptcha: tokenReCaptcha,
1115
+ refreshReCaptcha: refreshReCaptcha,
1116
+ handleSwitchOTP: handleSwitchOTP,
1117
+ handleSwitchEmail: handleSwitchEmail,
856
1118
  clientId: clientId,
857
1119
  defaultInfo: defaultInfo,
858
1120
  openLogin: openLogin,
@@ -860,6 +1122,7 @@ var useLogin$1 = function useLogin(homeAcademyUrl, homeUrl) {
860
1122
  isShowPassword: isShowPassword,
861
1123
  setIsShowPassword: setIsShowPassword,
862
1124
  infoUser: infoUser,
1125
+ handleSubmit: handleSubmit,
863
1126
  setInfoUser: setInfoUser
864
1127
  };
865
1128
  };
@@ -962,9 +1225,23 @@ var _excluded = ["history"];
962
1225
  var Login = function Login(_ref) {
963
1226
  var history = _ref.history,
964
1227
  rest = _objectWithoutPropertiesLoose(_ref, _excluded);
965
- var _useLogin = useLogin$1(rest.homeAcademyUrl, rest.homeUrl),
1228
+ var _useLogin = useLogin$1({
1229
+ homeAcademyUrl: rest.homeAcademyUrl,
1230
+ homeUrl: rest.homeUrl,
1231
+ role: rest.role,
1232
+ registerUrl: rest.registerUrl,
1233
+ history: history
1234
+ }),
1235
+ isOTP = _useLogin.isOTP,
1236
+ isEmail = _useLogin.isEmail,
1237
+ onVerify = _useLogin.onVerify,
966
1238
  defaultInfo = _useLogin.defaultInfo,
967
- clientId = _useLogin.clientId;
1239
+ clientId = _useLogin.clientId,
1240
+ tokenReCaptcha = _useLogin.tokenReCaptcha,
1241
+ handleSubmit = _useLogin.handleSubmit,
1242
+ handleSwitchOTP = _useLogin.handleSwitchOTP,
1243
+ refreshReCaptcha = _useLogin.refreshReCaptcha,
1244
+ handleSwitchEmail = _useLogin.handleSwitchEmail;
968
1245
  useLanguage(history);
969
1246
  return React__default.createElement("div", {
970
1247
  className: styles["login"] + " font-family-lato"
@@ -976,11 +1253,21 @@ var Login = function Login(_ref) {
976
1253
  item: true,
977
1254
  xs: 12,
978
1255
  className: "d-flex justify-content-center h-100 align-items-center"
979
- }, clientId && React__default.createElement(BlockLogin, Object.assign({
1256
+ }, clientId && React__default.createElement(reactGoogleRecaptchaV3.GoogleReCaptchaProvider, {
1257
+ reCaptchaKey: GOOGLE_RECAPTCHA_KEY
1258
+ }, React__default.createElement(BlockLogin, Object.assign({
1259
+ isOTP: isOTP,
1260
+ onVerify: onVerify,
1261
+ isEmail: isEmail,
1262
+ tokenReCaptcha: tokenReCaptcha,
1263
+ refreshReCaptcha: refreshReCaptcha,
1264
+ handleSwitchOTP: handleSwitchOTP,
1265
+ handleSwitchEmail: handleSwitchEmail,
980
1266
  defaultInfo: defaultInfo,
981
1267
  history: history,
982
- clientId: clientId
983
- }, rest)))));
1268
+ clientId: clientId,
1269
+ onSubmit: handleSubmit
1270
+ }, rest))))));
984
1271
  };
985
1272
 
986
1273
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -1379,7 +1666,9 @@ var useLayoutContext = function useLayoutContext(role, pusherRegisterUrls, showL
1379
1666
  };
1380
1667
  var checkRoleUser = React.useCallback(function () {
1381
1668
  if (!(user !== null && user !== void 0 && user.email)) return;
1382
- if (!roles.includes(role) && !!academyDomain) {
1669
+ var isAdmin = roles.includes(exports.Role.Admin);
1670
+ if (isAdmin && role === exports.Role.Teacher) return;
1671
+ if (!roles.includes(role) && !!academyDomain && (role !== exports.Role.Teacher || !roles.includes(exports.Role.Admin))) {
1383
1672
  alert(t("user_not_allow_to_register_role", {
1384
1673
  user: user.email,
1385
1674
  role: role
@@ -1779,11 +2068,17 @@ var useSubjectSelect = function useSubjectSelect(_ref) {
1779
2068
  }, []);
1780
2069
  var handleChangeSubject = function handleChangeSubject(value) {
1781
2070
  var id = value.value;
2071
+ var examQuestions = exam.questions;
1782
2072
  var selectedSubject = subjectList === null || subjectList === void 0 ? void 0 : subjectList.find(function (subject) {
1783
2073
  return subject.id === id;
1784
2074
  });
1785
2075
  onChangeExam(_extends({}, exam, {
1786
- subjectId: (selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id) || 0
2076
+ subjectId: (selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id) || 0,
2077
+ questions: [].concat(examQuestions.map(function (q) {
2078
+ return _extends({}, q, {
2079
+ categoryId: undefined
2080
+ });
2081
+ }))
1787
2082
  }));
1788
2083
  };
1789
2084
  return {
@@ -1838,6 +2133,7 @@ var there_are_no_recent_exams = "최근 시험이 없습니다";
1838
2133
  var you_have_started_an_exam_with_code_code_do_you_want_to_continue = "{{code}} 코드로 시험을 시작했습니다. 계속하시겠습니까?";
1839
2134
  var here = "여기";
1840
2135
  var do_you_want_to_complete_the_exam = "시험을 완료처리 하시겠습니까?";
2136
+ var do_you_want_to_cancel_the_exam = "시험을 취소하시겠습니까? (학생의 결과는 모두 삭제됩니다)";
1841
2137
  var are_you_sure_you_want_to_delete_the_exam = "시험을 삭제하시겠습니까?";
1842
2138
  var are_you_sure_you_want_to_delete_the_textbook = "교과서를 삭제하시겠습니까?";
1843
2139
  var are_you_sure_you_want_to_delete_the_user = "사용자 {{user}}을(를) 삭제하시겠습니까?";
@@ -2081,6 +2377,7 @@ var parent_name = "부모님 성함";
2081
2377
  var users = "사용자";
2082
2378
  var new_user = "새로운 사용자";
2083
2379
  var academy_admin = "아카데미 관리자";
2380
+ var super_admin = "최고 관리자";
2084
2381
  var switch_academy_admin = "스위치 아카데미 관리자";
2085
2382
  var switch_academy = "스위치 아카데미";
2086
2383
  var there_are_no_lessons_this_week = "이번주는 수업이 없습니다";
@@ -2140,7 +2437,7 @@ var teachers = "교사";
2140
2437
  var lessons = "수업";
2141
2438
  var new_test = "새로운 시험";
2142
2439
  var manage_saved_exams = "저장된 시험 관리";
2143
- var manage_textbook = "교과서 관리";
2440
+ var manage_textbooks = "교과서 관리";
2144
2441
  var my_question = "내 질문";
2145
2442
  var update_class = "수업 업데이트";
2146
2443
  var create_class = "수업 만들기";
@@ -2371,6 +2668,7 @@ var textbook_subject_is_required = "교과서 과목은 필수입니다";
2371
2668
  var update_the_textbook_successfully = "교과서를 성공적으로 업데이트했습니다.";
2372
2669
  var create_the_textbook_successfully = "교과서를 성공적으로 만들었습니다.";
2373
2670
  var finish_exam_successful = "시험을 성공적으로 마쳤습니다";
2671
+ var cancel_exam_successful = "시험을 성공적으로 취소했습니다";
2374
2672
  var you_has_been_kicked_out = "당신은 쫓겨났습니다";
2375
2673
  var the_teacher_has_closed_or_deleted_the_exam = "선생님이 시험을 종료했거나 삭제했습니다. 나중에 다시 시도해 주세요.";
2376
2674
  var check_in_lesson_successfully = "수업 체크인 성공";
@@ -2465,6 +2763,7 @@ var added_date = "추가된 날짜";
2465
2763
  var sync_exam_results = "시험 결과 동기화";
2466
2764
  var update_data_fail = "데이터 업데이트 실패";
2467
2765
  var add_students_to_class = "수업에 학생 추가";
2766
+ var add_teachers_to_class = "수업에 교사 추가";
2468
2767
  var click_to_choose_file = "파일을 선택하려면 클릭하세요.";
2469
2768
  var exam_data = "시험 데이터";
2470
2769
  var questions_correct_rate = "질문 정답률";
@@ -2581,6 +2880,16 @@ var allowed_to_send_pop_ups_and_use_redirects = "팝업 보내기 및 리디렉
2581
2880
  var disable_ask_where_to_save_each_file_before_downloading = "다운로드하기 전에 각 파일을 저장할 위치 묻기 비활성화";
2582
2881
  var total_number_of_selected_results = "선택된 결과의 총 개수";
2583
2882
  var choose_to_print = "인쇄를 선택하세요";
2883
+ var exam_has_been_cancelled = "시험이 취소되었습니다";
2884
+ var or = "또는";
2885
+ var sign_in_with_email = "이메일로 로그인";
2886
+ var please_check_your_mailbox = "우편함을 확인해 주세요";
2887
+ var otp_is_required = "OTP가 필요합니다";
2888
+ var min_is_1 = "최소값은 1입니다.";
2889
+ var max_is_6 = "최대는 6입니다";
2890
+ var must_be_number = "숫자여야 합니다.";
2891
+ var sign_in_with_google_account = "구글 계정으로 로그인";
2892
+ var academy_role = "아카데미 역할";
2584
2893
  var lang_ko = {
2585
2894
  problem_solving: problem_solving,
2586
2895
  my_story: my_story,
@@ -2621,6 +2930,7 @@ var lang_ko = {
2621
2930
  you_have_started_an_exam_with_code_code_do_you_want_to_continue: you_have_started_an_exam_with_code_code_do_you_want_to_continue,
2622
2931
  here: here,
2623
2932
  do_you_want_to_complete_the_exam: do_you_want_to_complete_the_exam,
2933
+ do_you_want_to_cancel_the_exam: do_you_want_to_cancel_the_exam,
2624
2934
  are_you_sure_you_want_to_delete_the_exam: are_you_sure_you_want_to_delete_the_exam,
2625
2935
  are_you_sure_you_want_to_delete_the_textbook: are_you_sure_you_want_to_delete_the_textbook,
2626
2936
  are_you_sure_you_want_to_delete_the_user: are_you_sure_you_want_to_delete_the_user,
@@ -2861,6 +3171,7 @@ var lang_ko = {
2861
3171
  users: users,
2862
3172
  new_user: new_user,
2863
3173
  academy_admin: academy_admin,
3174
+ super_admin: super_admin,
2864
3175
  switch_academy_admin: switch_academy_admin,
2865
3176
  switch_academy: switch_academy,
2866
3177
  there_are_no_lessons_this_week: there_are_no_lessons_this_week,
@@ -2910,7 +3221,7 @@ var lang_ko = {
2910
3221
  lessons: lessons,
2911
3222
  new_test: new_test,
2912
3223
  manage_saved_exams: manage_saved_exams,
2913
- manage_textbook: manage_textbook,
3224
+ manage_textbooks: manage_textbooks,
2914
3225
  my_question: my_question,
2915
3226
  update_class: update_class,
2916
3227
  create_class: create_class,
@@ -3146,6 +3457,7 @@ var lang_ko = {
3146
3457
  update_the_textbook_successfully: update_the_textbook_successfully,
3147
3458
  create_the_textbook_successfully: create_the_textbook_successfully,
3148
3459
  finish_exam_successful: finish_exam_successful,
3460
+ cancel_exam_successful: cancel_exam_successful,
3149
3461
  you_has_been_kicked_out: you_has_been_kicked_out,
3150
3462
  the_teacher_has_closed_or_deleted_the_exam: the_teacher_has_closed_or_deleted_the_exam,
3151
3463
  check_in_lesson_successfully: check_in_lesson_successfully,
@@ -3241,6 +3553,7 @@ var lang_ko = {
3241
3553
  sync_exam_results: sync_exam_results,
3242
3554
  update_data_fail: update_data_fail,
3243
3555
  add_students_to_class: add_students_to_class,
3556
+ add_teachers_to_class: add_teachers_to_class,
3244
3557
  click_to_choose_file: click_to_choose_file,
3245
3558
  exam_data: exam_data,
3246
3559
  questions_correct_rate: questions_correct_rate,
@@ -3354,7 +3667,17 @@ var lang_ko = {
3354
3667
  allowed_to_send_pop_ups_and_use_redirects: allowed_to_send_pop_ups_and_use_redirects,
3355
3668
  disable_ask_where_to_save_each_file_before_downloading: disable_ask_where_to_save_each_file_before_downloading,
3356
3669
  total_number_of_selected_results: total_number_of_selected_results,
3357
- choose_to_print: choose_to_print
3670
+ choose_to_print: choose_to_print,
3671
+ exam_has_been_cancelled: exam_has_been_cancelled,
3672
+ or: or,
3673
+ sign_in_with_email: sign_in_with_email,
3674
+ please_check_your_mailbox: please_check_your_mailbox,
3675
+ otp_is_required: otp_is_required,
3676
+ min_is_1: min_is_1,
3677
+ max_is_6: max_is_6,
3678
+ must_be_number: must_be_number,
3679
+ sign_in_with_google_account: sign_in_with_google_account,
3680
+ academy_role: academy_role
3358
3681
  };
3359
3682
 
3360
3683
  var problem_solving$1 = "Problem Solving";
@@ -3394,6 +3717,7 @@ var there_are_no_recent_exams$1 = "There are no recent exams";
3394
3717
  var you_have_started_an_exam_with_code_code_do_you_want_to_continue$1 = "You have started an exam with code {{code}}, do you want to continue?";
3395
3718
  var here$1 = "here";
3396
3719
  var do_you_want_to_complete_the_exam$1 = "Do you want to complete the exam?";
3720
+ var do_you_want_to_cancel_the_exam$1 = "Do you want to cancel the exam? (All student results will be deleted)";
3397
3721
  var are_you_sure_you_want_to_delete_the_exam$1 = "Are you sure you want to delete the exam?";
3398
3722
  var are_you_sure_you_want_to_delete_the_textbook$1 = "Are you sure you want to delete the textbook?";
3399
3723
  var are_you_sure_you_want_to_delete_the_user$1 = "Are you sure you want to delete the user: {{user}}?";
@@ -3662,6 +3986,7 @@ var parent_name$1 = "Parent name";
3662
3986
  var users$1 = "Users";
3663
3987
  var new_user$1 = "New user";
3664
3988
  var academy_admin$1 = "Academy Admin";
3989
+ var super_admin$1 = "Super Admin";
3665
3990
  var switch_academy_admin$1 = "Switch Academy Admin";
3666
3991
  var switch_academy$1 = "Switch Academy";
3667
3992
  var there_are_no_lessons_this_week$1 = "There are no lessons this week";
@@ -3723,7 +4048,7 @@ var update_class$1 = "Update class";
3723
4048
  var create_class$1 = "Create class";
3724
4049
  var new_test$1 = "New Test";
3725
4050
  var manage_saved_exams$1 = "Manage saved exams";
3726
- var manage_textbook$1 = "Manage Textbook";
4051
+ var manage_textbooks$1 = "Manage textbooks";
3727
4052
  var my_question$1 = "My Q&As";
3728
4053
  var problem_number$1 = "Problem number";
3729
4054
  var solve_time$1 = "Solve time";
@@ -3941,7 +4266,8 @@ var textbook_name_is_required$1 = "Textbook name is required";
3941
4266
  var textbook_subject_is_required$1 = "Textbook subject is required";
3942
4267
  var update_the_textbook_successfully$1 = "Update the textbook successfully";
3943
4268
  var create_the_textbook_successfully$1 = "Create the textbook successfully";
3944
- var finish_exam_successful$1 = "Finish exam successful";
4269
+ var finish_exam_successful$1 = "Finish exam successfully";
4270
+ var cancel_exam_successful$1 = "Cancel exam successfully";
3945
4271
  var you_has_been_kicked_out$1 = "You has been kicked out";
3946
4272
  var the_teacher_has_closed_or_deleted_the_exam$1 = "The teacher has closed or deleted the exam, please try again later";
3947
4273
  var check_in_lesson_successfully$1 = "Check in lesson successfully";
@@ -4022,6 +4348,7 @@ var added_date$1 = "Added date";
4022
4348
  var sync_exam_results$1 = "Sync exam results";
4023
4349
  var update_data_fail$1 = "Update data fail";
4024
4350
  var add_students_to_class$1 = "Add students to class";
4351
+ var add_teachers_to_class$1 = "Add teachers to class";
4025
4352
  var click_to_choose_file$1 = "Click to choose file";
4026
4353
  var exam_data$1 = "Exam Data";
4027
4354
  var questions_correct_rate$1 = "Questions Correct Rate";
@@ -4035,8 +4362,8 @@ var messages$1 = {
4035
4362
  var submit$1 = "Submit";
4036
4363
  var must_select_a_teacher_first$1 = "Must select a teacher first";
4037
4364
  var student_grade_is_invalid$1 = "Student grade must be from 1 to 12";
4038
- var recent_users$1 = "Recent Users";
4039
- var recent_students$1 = "Recent Students";
4365
+ var recent_users$1 = "Recent users";
4366
+ var recent_students$1 = "Recent students";
4040
4367
  var viewed_user$1 = "Viewed User";
4041
4368
  var viewed_QNA$1 = "Viewed Question&Answer";
4042
4369
  var viewed_exam_result$1 = "Viewed Exam Results";
@@ -4138,6 +4465,16 @@ var allowed_to_send_pop_ups_and_use_redirects$1 = "Allowed to send pop-ups and u
4138
4465
  var disable_ask_where_to_save_each_file_before_downloading$1 = "Disable ask where to save each file before downloading";
4139
4466
  var total_number_of_selected_results$1 = "Total number of selected results";
4140
4467
  var choose_to_print$1 = "Choose to print";
4468
+ var exam_has_been_cancelled$1 = "The exam has been cancelled";
4469
+ var or$1 = "Or";
4470
+ var sign_in_with_email$1 = "Sign in with email";
4471
+ var please_check_your_mailbox$1 = "Please check your mailbox";
4472
+ var otp_is_required$1 = "OTP is required";
4473
+ var min_is_1$1 = "Min is 1";
4474
+ var max_is_6$1 = "Max is 6";
4475
+ var must_be_number$1 = "Must be number";
4476
+ var sign_in_with_google_account$1 = "Sign in with google account";
4477
+ var academy_role$1 = "Academy role";
4141
4478
  var lang_en = {
4142
4479
  problem_solving: problem_solving$1,
4143
4480
  my_story: my_story$1,
@@ -4178,6 +4515,7 @@ var lang_en = {
4178
4515
  you_have_started_an_exam_with_code_code_do_you_want_to_continue: you_have_started_an_exam_with_code_code_do_you_want_to_continue$1,
4179
4516
  here: here$1,
4180
4517
  do_you_want_to_complete_the_exam: do_you_want_to_complete_the_exam$1,
4518
+ do_you_want_to_cancel_the_exam: do_you_want_to_cancel_the_exam$1,
4181
4519
  are_you_sure_you_want_to_delete_the_exam: are_you_sure_you_want_to_delete_the_exam$1,
4182
4520
  are_you_sure_you_want_to_delete_the_textbook: are_you_sure_you_want_to_delete_the_textbook$1,
4183
4521
  are_you_sure_you_want_to_delete_the_user: are_you_sure_you_want_to_delete_the_user$1,
@@ -4443,6 +4781,7 @@ var lang_en = {
4443
4781
  users: users$1,
4444
4782
  new_user: new_user$1,
4445
4783
  academy_admin: academy_admin$1,
4784
+ super_admin: super_admin$1,
4446
4785
  switch_academy_admin: switch_academy_admin$1,
4447
4786
  switch_academy: switch_academy$1,
4448
4787
  there_are_no_lessons_this_week: there_are_no_lessons_this_week$1,
@@ -4494,7 +4833,7 @@ var lang_en = {
4494
4833
  create_class: create_class$1,
4495
4834
  new_test: new_test$1,
4496
4835
  manage_saved_exams: manage_saved_exams$1,
4497
- manage_textbook: manage_textbook$1,
4836
+ manage_textbooks: manage_textbooks$1,
4498
4837
  my_question: my_question$1,
4499
4838
  problem_number: problem_number$1,
4500
4839
  solve_time: solve_time$1,
@@ -4718,6 +5057,7 @@ var lang_en = {
4718
5057
  update_the_textbook_successfully: update_the_textbook_successfully$1,
4719
5058
  create_the_textbook_successfully: create_the_textbook_successfully$1,
4720
5059
  finish_exam_successful: finish_exam_successful$1,
5060
+ cancel_exam_successful: cancel_exam_successful$1,
4721
5061
  you_has_been_kicked_out: you_has_been_kicked_out$1,
4722
5062
  the_teacher_has_closed_or_deleted_the_exam: the_teacher_has_closed_or_deleted_the_exam$1,
4723
5063
  check_in_lesson_successfully: check_in_lesson_successfully$1,
@@ -4799,6 +5139,7 @@ var lang_en = {
4799
5139
  sync_exam_results: sync_exam_results$1,
4800
5140
  update_data_fail: update_data_fail$1,
4801
5141
  add_students_to_class: add_students_to_class$1,
5142
+ add_teachers_to_class: add_teachers_to_class$1,
4802
5143
  click_to_choose_file: click_to_choose_file$1,
4803
5144
  exam_data: exam_data$1,
4804
5145
  questions_correct_rate: questions_correct_rate$1,
@@ -4912,7 +5253,17 @@ var lang_en = {
4912
5253
  allowed_to_send_pop_ups_and_use_redirects: allowed_to_send_pop_ups_and_use_redirects$1,
4913
5254
  disable_ask_where_to_save_each_file_before_downloading: disable_ask_where_to_save_each_file_before_downloading$1,
4914
5255
  total_number_of_selected_results: total_number_of_selected_results$1,
4915
- choose_to_print: choose_to_print$1
5256
+ choose_to_print: choose_to_print$1,
5257
+ exam_has_been_cancelled: exam_has_been_cancelled$1,
5258
+ or: or$1,
5259
+ sign_in_with_email: sign_in_with_email$1,
5260
+ please_check_your_mailbox: please_check_your_mailbox$1,
5261
+ otp_is_required: otp_is_required$1,
5262
+ min_is_1: min_is_1$1,
5263
+ max_is_6: max_is_6$1,
5264
+ must_be_number: must_be_number$1,
5265
+ sign_in_with_google_account: sign_in_with_google_account$1,
5266
+ academy_role: academy_role$1
4916
5267
  };
4917
5268
 
4918
5269
  i18n__default.use(reactI18next.initReactI18next).init({
@@ -5186,7 +5537,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
5186
5537
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
5187
5538
  });
5188
5539
  var isAdmin = role === exports.Role.Admin;
5189
- var isSuperAdmin = user && !user.academyDomain && ((_user$roles = user.roles) === null || _user$roles === void 0 ? void 0 : _user$roles.includes(exports.Role.Admin));
5540
+ var isSuperAdmin = user && (!user.academyDomain && ((_user$roles = user.roles) === null || _user$roles === void 0 ? void 0 : _user$roles.includes(exports.Role.Admin)) || user.isSuperAdmin);
5190
5541
  var _useTranslation = reactI18next.useTranslation(),
5191
5542
  t = _useTranslation.t;
5192
5543
  var _useState = React.useState(null),
@@ -6931,7 +7282,7 @@ var useMessageList = function useMessageList(_ref) {
6931
7282
  userId: (student === null || student === void 0 ? void 0 : student.id) || 0,
6932
7283
  action: RecentUserAction$1.ViewedQNA,
6933
7284
  data: "" + conversationId,
6934
- roles: [exports.Role.Teacher]
7285
+ isAdmin: !isTeacher
6935
7286
  })).then(function () {
6936
7287
  isFirst = false;
6937
7288
  });
@@ -7099,6 +7450,7 @@ var useChatContainer = function useChatContainer(props) {
7099
7450
  var _useState4 = React.useState(true),
7100
7451
  isScrollToEnd = _useState4[0],
7101
7452
  setScrollToEnd = _useState4[1];
7453
+ var isAdmin = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Admin);
7102
7454
  var _useMessageList = useMessageList({
7103
7455
  student: student
7104
7456
  }),
@@ -7224,9 +7576,6 @@ var useChatContainer = function useChatContainer(props) {
7224
7576
  if (!data) return;
7225
7577
  var parsedData = JSON.parse(data);
7226
7578
  if (parsedData.id) setSelectedConversation(JSON.parse(data));
7227
- console.log({
7228
- data: JSON.parse(data)
7229
- });
7230
7579
  };
7231
7580
  var handleLoadMoreMessages = function handleLoadMoreMessages() {
7232
7581
  try {
@@ -7293,11 +7642,11 @@ var useChatContainer = function useChatContainer(props) {
7293
7642
  var results = messages.map(function (i) {
7294
7643
  var _i$sender;
7295
7644
  return _extends({}, i, {
7296
- isMe: (infoUser === null || infoUser === void 0 ? void 0 : infoUser.id) === ((_i$sender = i.sender) === null || _i$sender === void 0 ? void 0 : _i$sender.id)
7645
+ isMe: isAdmin && !i.isStudent || (infoUser === null || infoUser === void 0 ? void 0 : infoUser.id) === ((_i$sender = i.sender) === null || _i$sender === void 0 ? void 0 : _i$sender.id)
7297
7646
  });
7298
7647
  });
7299
7648
  return results;
7300
- }, [JSON.stringify(messages), infoUser === null || infoUser === void 0 ? void 0 : infoUser.id]);
7649
+ }, [JSON.stringify(messages), infoUser === null || infoUser === void 0 ? void 0 : infoUser.id, isAdmin]);
7301
7650
  React.useEffect(function () {
7302
7651
  getMessageConversation();
7303
7652
  }, [JSON.stringify(selectedConversation)]);
@@ -8062,40 +8411,22 @@ var ChapterBox = function ChapterBox(_ref) {
8062
8411
  };
8063
8412
 
8064
8413
  var TEXTBOOK_URL = BASE_URL + "/api/textbooks";
8065
- var getTextbookListApi = function getTextbookListApi(query, role) {
8414
+ var getTextbookListApi = function getTextbookListApi(query) {
8066
8415
  return api.get("" + TEXTBOOK_URL, {
8067
- params: _extends({}, query, {
8068
- roles: role
8069
- })
8416
+ params: query
8070
8417
  });
8071
8418
  };
8072
- var getTextbookByIdApi = function getTextbookByIdApi(textbookId, role) {
8073
- return api.get(TEXTBOOK_URL + "/" + textbookId, {
8074
- params: {
8075
- roles: role
8076
- }
8077
- });
8419
+ var getTextbookByIdApi = function getTextbookByIdApi(textbookId) {
8420
+ return api.get(TEXTBOOK_URL + "/" + textbookId);
8078
8421
  };
8079
- var createTextbookApi = function createTextbookApi(data, role) {
8080
- return api.post("" + TEXTBOOK_URL, data, {
8081
- params: {
8082
- roles: role
8083
- }
8084
- });
8422
+ var createTextbookApi = function createTextbookApi(data) {
8423
+ return api.post("" + TEXTBOOK_URL, data);
8085
8424
  };
8086
- var updateTextbookApi = function updateTextbookApi(textbookId, data, role) {
8087
- return api.put(TEXTBOOK_URL + "/" + textbookId, data, {
8088
- params: {
8089
- roles: role
8090
- }
8091
- });
8425
+ var updateTextbookApi = function updateTextbookApi(textbookId, data) {
8426
+ return api.put(TEXTBOOK_URL + "/" + textbookId, data);
8092
8427
  };
8093
- var deleteTextbookApi = function deleteTextbookApi(textbookId, role) {
8094
- return api["delete"](TEXTBOOK_URL + "/" + textbookId, {
8095
- params: {
8096
- roles: role
8097
- }
8098
- });
8428
+ var deleteTextbookApi = function deleteTextbookApi(textbookId) {
8429
+ return api["delete"](TEXTBOOK_URL + "/" + textbookId);
8099
8430
  };
8100
8431
 
8101
8432
  var ExamStatus$1;
@@ -8199,49 +8530,25 @@ var DEFAULT_ARTICLE_CREATE_REQUEST = {
8199
8530
  };
8200
8531
 
8201
8532
  var CHAPTER_URL = BASE_URL + "/api/chapters";
8202
- var createChapterApi = function createChapterApi(chapter, role) {
8203
- return api.post("" + CHAPTER_URL, chapter, {
8204
- params: {
8205
- roles: role
8206
- }
8207
- });
8533
+ var createChapterApi = function createChapterApi(chapter) {
8534
+ return api.post("" + CHAPTER_URL, chapter);
8208
8535
  };
8209
- var updateChapterApi = function updateChapterApi(chapterId, chapter, role) {
8210
- return api.put(CHAPTER_URL + "/" + chapterId, chapter, {
8211
- params: {
8212
- roles: role
8213
- }
8214
- });
8536
+ var updateChapterApi = function updateChapterApi(chapterId, chapter) {
8537
+ return api.put(CHAPTER_URL + "/" + chapterId, chapter);
8215
8538
  };
8216
- var deleteChapterApi = function deleteChapterApi(chapterId, role) {
8217
- return api["delete"](CHAPTER_URL + "/" + chapterId, {
8218
- params: {
8219
- roles: role
8220
- }
8221
- });
8539
+ var deleteChapterApi = function deleteChapterApi(chapterId) {
8540
+ return api["delete"](CHAPTER_URL + "/" + chapterId);
8222
8541
  };
8223
8542
 
8224
8543
  var ARTICLE_URL = BASE_URL + "/api/articles";
8225
- var createArticleApi = function createArticleApi(article, role) {
8226
- return api.post("" + ARTICLE_URL, article, {
8227
- params: {
8228
- roles: role
8229
- }
8230
- });
8544
+ var createArticleApi = function createArticleApi(article) {
8545
+ return api.post("" + ARTICLE_URL, article);
8231
8546
  };
8232
- var updateArticleApi = function updateArticleApi(articleId, article, role) {
8233
- return api.put(ARTICLE_URL + "/" + articleId, article, {
8234
- params: {
8235
- roles: role
8236
- }
8237
- });
8547
+ var updateArticleApi = function updateArticleApi(articleId, article) {
8548
+ return api.put(ARTICLE_URL + "/" + articleId, article);
8238
8549
  };
8239
- var deleteArticleApi = function deleteArticleApi(articleId, role) {
8240
- return api["delete"](ARTICLE_URL + "/" + articleId, {
8241
- params: {
8242
- roles: role
8243
- }
8244
- });
8550
+ var deleteArticleApi = function deleteArticleApi(articleId) {
8551
+ return api["delete"](ARTICLE_URL + "/" + articleId);
8245
8552
  };
8246
8553
 
8247
8554
  var EXAM_URL = BASE_URL + "/api/exam";
@@ -8371,9 +8678,31 @@ var useExam = function useExam(props) {
8371
8678
  };
8372
8679
  };
8373
8680
 
8681
+ var ADMIN_CATEGORY_URL = SUPER_ADMIN_BASE_URL + "/api/category";
8682
+ var CATEGORY_URL = BASE_URL + "/api/examcategory";
8683
+ var getCategoryListAdminApi = function getCategoryListAdminApi(data) {
8684
+ try {
8685
+ return Promise.resolve(api.get("" + ADMIN_CATEGORY_URL, {
8686
+ params: data
8687
+ }));
8688
+ } catch (e) {
8689
+ return Promise.reject(e);
8690
+ }
8691
+ };
8692
+ var getCategoryListApi = function getCategoryListApi(data) {
8693
+ try {
8694
+ return Promise.resolve(api.get("" + CATEGORY_URL, {
8695
+ params: data
8696
+ }));
8697
+ } catch (e) {
8698
+ return Promise.reject(e);
8699
+ }
8700
+ };
8701
+
8374
8702
  var PAGE_TITLE_DETAIL = "textbook_detail";
8375
8703
  var PAGE_TITLE_CREATE = "create_textbook";
8376
8704
  var useTextbookDetail = function useTextbookDetail(props) {
8705
+ var _textbook$subject3;
8377
8706
  var role = props.role,
8378
8707
  isReadonlyParam = props.isReadonlyParam,
8379
8708
  navigate = props.navigate,
@@ -8410,6 +8739,9 @@ var useTextbookDetail = function useTextbookDetail(props) {
8410
8739
  var _useState9 = React.useState(false),
8411
8740
  isEditedTitle = _useState9[0],
8412
8741
  setEditedTitle = _useState9[1];
8742
+ var _useState10 = React.useState([]),
8743
+ categoryList = _useState10[0],
8744
+ setCategoryList = _useState10[1];
8413
8745
  var textbookUrl = role === exports.Role.Teacher ? TEXTBOOK_URL$1 : ADMIN_TEXTBOOK_URL;
8414
8746
  var _useExam = useExam({
8415
8747
  navigate: navigate
@@ -8421,6 +8753,40 @@ var useTextbookDetail = function useTextbookDetail(props) {
8421
8753
  handleSaveExam = _useExam.handleSaveExam,
8422
8754
  handleCloseDialog = _useExam.handleCloseDialog,
8423
8755
  handleCreateExam = _useExam.handleCreateExam;
8756
+ var getCategoryList = function getCategoryList(isLoading) {
8757
+ if (isLoading === void 0) {
8758
+ isLoading = true;
8759
+ }
8760
+ try {
8761
+ var _textbook$subject;
8762
+ var _temp2 = function _temp2() {
8763
+ isLoading && dispatch(setLoading(false));
8764
+ };
8765
+ if (!(textbook !== null && textbook !== void 0 && (_textbook$subject = textbook.subject) !== null && _textbook$subject !== void 0 && _textbook$subject.id)) {
8766
+ setCategoryList([]);
8767
+ return Promise.resolve();
8768
+ }
8769
+ isLoading && dispatch(setLoading(true));
8770
+ var _temp = _catch(function () {
8771
+ var _textbook$subject2;
8772
+ return Promise.resolve(getCategoryListApi({
8773
+ subjectId: textbook === null || textbook === void 0 ? void 0 : (_textbook$subject2 = textbook.subject) === null || _textbook$subject2 === void 0 ? void 0 : _textbook$subject2.id
8774
+ })).then(function (res) {
8775
+ var data = res.data.items;
8776
+ setCategoryList(data || []);
8777
+ });
8778
+ }, function (error) {
8779
+ setCategoryList([]);
8780
+ console.log(error);
8781
+ });
8782
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
8783
+ } catch (e) {
8784
+ return Promise.reject(e);
8785
+ }
8786
+ };
8787
+ React.useEffect(function () {
8788
+ getCategoryList();
8789
+ }, [textbook === null || textbook === void 0 ? void 0 : (_textbook$subject3 = textbook.subject) === null || _textbook$subject3 === void 0 ? void 0 : _textbook$subject3.id]);
8424
8790
  var handleOpenAddArticleDialog = function handleOpenAddArticleDialog(chapter) {
8425
8791
  setSelectedChapter(chapter);
8426
8792
  };
@@ -8429,35 +8795,35 @@ var useTextbookDetail = function useTextbookDetail(props) {
8429
8795
  };
8430
8796
  var handleUpdateChapter = function handleUpdateChapter(chapterId, chapter, callback) {
8431
8797
  try {
8432
- var _temp2 = function _temp2() {
8798
+ var _temp4 = function _temp4() {
8433
8799
  dispatch(setLoading(false));
8434
8800
  };
8435
8801
  if (!textbook) return Promise.resolve();
8436
- var _temp = _catch(function () {
8802
+ var _temp3 = _catch(function () {
8437
8803
  var body = {
8438
8804
  name: chapter.name,
8439
8805
  pageFrom: chapter.pageFrom,
8440
8806
  pageTo: chapter.pageTo
8441
8807
  };
8442
- return Promise.resolve(updateChapterApi(chapterId, body, role)).then(function (res) {
8808
+ return Promise.resolve(updateChapterApi(chapterId, body)).then(function (res) {
8443
8809
  callback === null || callback === void 0 ? void 0 : callback(res.data);
8444
8810
  });
8445
8811
  }, function (error) {
8446
8812
  reactToastify.toast.error(getErrorMessage(t, error));
8447
8813
  });
8448
- return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
8814
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
8449
8815
  } catch (e) {
8450
8816
  return Promise.reject(e);
8451
8817
  }
8452
8818
  };
8453
8819
  var handleCreateArticle = function handleCreateArticle(article, callback) {
8454
8820
  try {
8455
- var _temp4 = function _temp4() {
8821
+ var _temp6 = function _temp6() {
8456
8822
  dispatch(setLoading(false));
8457
8823
  };
8458
8824
  if (!textbook) return Promise.resolve();
8459
8825
  dispatch(setLoading(true));
8460
- var _temp3 = _catch(function () {
8826
+ var _temp5 = _catch(function () {
8461
8827
  var _article$category;
8462
8828
  var body = {
8463
8829
  articleNumber: article.articleNumber,
@@ -8473,45 +8839,45 @@ var useTextbookDetail = function useTextbookDetail(props) {
8473
8839
  };
8474
8840
  })
8475
8841
  };
8476
- return Promise.resolve(createArticleApi(body, role)).then(function (res) {
8842
+ return Promise.resolve(createArticleApi(body)).then(function (res) {
8477
8843
  callback === null || callback === void 0 ? void 0 : callback(res.data);
8478
8844
  });
8479
8845
  }, function (error) {
8480
8846
  reactToastify.toast.error(getErrorMessage(t, error));
8481
8847
  });
8482
- return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
8848
+ return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
8483
8849
  } catch (e) {
8484
8850
  return Promise.reject(e);
8485
8851
  }
8486
8852
  };
8487
8853
  var handleDeleteArticle = function handleDeleteArticle(articleId, callback) {
8488
8854
  try {
8489
- var _temp6 = function _temp6() {
8855
+ var _temp8 = function _temp8() {
8490
8856
  dispatch(setLoading(false));
8491
8857
  };
8492
8858
  if (!textbook) return Promise.resolve();
8493
8859
  dispatch(setLoading(true));
8494
- var _temp5 = _catch(function () {
8495
- return Promise.resolve(deleteArticleApi(articleId, role)).then(function () {
8860
+ var _temp7 = _catch(function () {
8861
+ return Promise.resolve(deleteArticleApi(articleId)).then(function () {
8496
8862
  callback === null || callback === void 0 ? void 0 : callback();
8497
8863
  });
8498
8864
  }, function (error) {
8499
8865
  reactToastify.toast.error(getErrorMessage(t, error));
8500
8866
  });
8501
- return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
8867
+ return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7));
8502
8868
  } catch (e) {
8503
8869
  return Promise.reject(e);
8504
8870
  }
8505
8871
  };
8506
8872
  var handleDeleteChapter = function handleDeleteChapter(chapterId, parentChapterId, callback) {
8507
8873
  try {
8508
- var _temp8 = function _temp8() {
8874
+ var _temp10 = function _temp10() {
8509
8875
  dispatch(setLoading(false));
8510
8876
  };
8511
8877
  if (!textbook) return Promise.resolve();
8512
8878
  dispatch(setLoading(true));
8513
- var _temp7 = _catch(function () {
8514
- return Promise.resolve(deleteChapterApi(chapterId, role)).then(function () {
8879
+ var _temp9 = _catch(function () {
8880
+ return Promise.resolve(deleteChapterApi(chapterId)).then(function () {
8515
8881
  if (parentChapterId) {
8516
8882
  var parentIndex = textbook.chapters.findIndex(function (i) {
8517
8883
  return i.id === parentChapterId;
@@ -8536,7 +8902,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
8536
8902
  }, function (error) {
8537
8903
  reactToastify.toast.error(getErrorMessage(t, error));
8538
8904
  });
8539
- return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7));
8905
+ return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9));
8540
8906
  } catch (e) {
8541
8907
  return Promise.reject(e);
8542
8908
  }
@@ -8544,7 +8910,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
8544
8910
  var handleUpdateArticle = function handleUpdateArticle(article, callback) {
8545
8911
  try {
8546
8912
  if (!textbook || !article.id) return Promise.resolve();
8547
- var _temp9 = _catch(function () {
8913
+ var _temp11 = _catch(function () {
8548
8914
  var _article$category2;
8549
8915
  var body = {
8550
8916
  articleNumber: article.articleNumber,
@@ -8560,13 +8926,13 @@ var useTextbookDetail = function useTextbookDetail(props) {
8560
8926
  };
8561
8927
  })
8562
8928
  };
8563
- return Promise.resolve(updateArticleApi(article.id, body, role)).then(function (res) {
8929
+ return Promise.resolve(updateArticleApi(article.id, body)).then(function (res) {
8564
8930
  callback === null || callback === void 0 ? void 0 : callback(res.data);
8565
8931
  });
8566
8932
  }, function (error) {
8567
8933
  reactToastify.toast.error(getErrorMessage(t, error));
8568
8934
  });
8569
- return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(function () {}) : void 0);
8935
+ return Promise.resolve(_temp11 && _temp11.then ? _temp11.then(function () {}) : void 0);
8570
8936
  } catch (e) {
8571
8937
  return Promise.reject(e);
8572
8938
  }
@@ -8841,18 +9207,18 @@ var useTextbookDetail = function useTextbookDetail(props) {
8841
9207
  };
8842
9208
  var handleCreateChapter = function handleCreateChapter(chapterName) {
8843
9209
  try {
8844
- var _temp11 = function _temp11() {
9210
+ var _temp13 = function _temp13() {
8845
9211
  dispatch(setLoading(false));
8846
9212
  };
8847
9213
  if (!textbookId && !parentChapter && !textbook) return Promise.resolve();
8848
9214
  dispatch(setLoading(true));
8849
- var _temp10 = _catch(function () {
9215
+ var _temp12 = _catch(function () {
8850
9216
  var body = {
8851
9217
  name: chapterName,
8852
9218
  parentChapterId: parentChapter === null || parentChapter === void 0 ? void 0 : parentChapter.id,
8853
9219
  textbookId: textbookId
8854
9220
  };
8855
- return Promise.resolve(createChapterApi(body, role)).then(function (res) {
9221
+ return Promise.resolve(createChapterApi(body)).then(function (res) {
8856
9222
  var chapter = _extends({}, res.data, {
8857
9223
  articles: [],
8858
9224
  subChapters: []
@@ -8878,7 +9244,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
8878
9244
  }, function (error) {
8879
9245
  reactToastify.toast.error(getErrorMessage(t, error));
8880
9246
  });
8881
- return Promise.resolve(_temp10 && _temp10.then ? _temp10.then(_temp11) : _temp11(_temp10));
9247
+ return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(_temp13) : _temp13(_temp12));
8882
9248
  } catch (e) {
8883
9249
  return Promise.reject(e);
8884
9250
  }
@@ -8888,12 +9254,12 @@ var useTextbookDetail = function useTextbookDetail(props) {
8888
9254
  setParentChapter(undefined);
8889
9255
  };
8890
9256
  var validateTextbook = function validateTextbook() {
8891
- var _textbook$subject;
9257
+ var _textbook$subject4;
8892
9258
  if (!textbook.name.trim().length) {
8893
9259
  reactToastify.toast.error(t('textbook_name_is_required'));
8894
9260
  return false;
8895
9261
  }
8896
- if (!((_textbook$subject = textbook.subject) !== null && _textbook$subject !== void 0 && _textbook$subject.id)) {
9262
+ if (!((_textbook$subject4 = textbook.subject) !== null && _textbook$subject4 !== void 0 && _textbook$subject4.id)) {
8897
9263
  reactToastify.toast.error(t('textbook_subject_is_required'));
8898
9264
  return false;
8899
9265
  }
@@ -8901,7 +9267,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
8901
9267
  };
8902
9268
  var handleCreateOrUpdateTextbook = function handleCreateOrUpdateTextbook() {
8903
9269
  try {
8904
- var _temp15 = function _temp15() {
9270
+ var _temp17 = function _temp17() {
8905
9271
  dispatch(setLoading(false));
8906
9272
  };
8907
9273
  if (!textbook) return Promise.resolve();
@@ -8912,22 +9278,22 @@ var useTextbookDetail = function useTextbookDetail(props) {
8912
9278
  return Promise.resolve();
8913
9279
  }
8914
9280
  dispatch(setLoading(true));
8915
- var _temp14 = _catch(function () {
8916
- function _temp13() {
9281
+ var _temp16 = _catch(function () {
9282
+ function _temp15() {
8917
9283
  reactToastify.toast.success(t(textbook.id ? "update_the_textbook_successfully" : "create_the_textbook_successfully"));
8918
9284
  }
8919
- var _temp12 = function () {
9285
+ var _temp14 = function () {
8920
9286
  if (textbook.id) {
8921
9287
  var body = {
8922
9288
  name: textbook.name
8923
9289
  };
8924
- return Promise.resolve(updateTextbookApi(textbook.id, body, role)).then(function () {});
9290
+ return Promise.resolve(updateTextbookApi(textbook.id, body)).then(function () {});
8925
9291
  } else {
8926
9292
  var _body = {
8927
9293
  name: textbook.name,
8928
9294
  subjectId: textbook.subject.id
8929
9295
  };
8930
- return Promise.resolve(createTextbookApi(_body, role)).then(function (res) {
9296
+ return Promise.resolve(createTextbookApi(_body)).then(function (res) {
8931
9297
  var textbookId = res.data.id;
8932
9298
  navigate(textbookUrl + "/" + textbookId, {
8933
9299
  replace: true
@@ -8935,11 +9301,11 @@ var useTextbookDetail = function useTextbookDetail(props) {
8935
9301
  });
8936
9302
  }
8937
9303
  }();
8938
- return _temp12 && _temp12.then ? _temp12.then(_temp13) : _temp13(_temp12);
9304
+ return _temp14 && _temp14.then ? _temp14.then(_temp15) : _temp15(_temp14);
8939
9305
  }, function (error) {
8940
9306
  reactToastify.toast.error(getErrorMessage(t, error));
8941
9307
  });
8942
- return Promise.resolve(_temp14 && _temp14.then ? _temp14.then(_temp15) : _temp15(_temp14));
9308
+ return Promise.resolve(_temp16 && _temp16.then ? _temp16.then(_temp17) : _temp17(_temp16));
8943
9309
  } catch (e) {
8944
9310
  return Promise.reject(e);
8945
9311
  }
@@ -9005,12 +9371,12 @@ var useTextbookDetail = function useTextbookDetail(props) {
9005
9371
  React.useEffect(function () {
9006
9372
  var getTextbookDetail = function getTextbookDetail() {
9007
9373
  try {
9008
- var _temp17 = function _temp17() {
9374
+ var _temp19 = function _temp19() {
9009
9375
  dispatch(setLoading(false));
9010
9376
  };
9011
9377
  dispatch(setLoading(true));
9012
- var _temp16 = _catch(function () {
9013
- return Promise.resolve(getTextbookByIdApi(+id, role)).then(function (res) {
9378
+ var _temp18 = _catch(function () {
9379
+ return Promise.resolve(getTextbookByIdApi(+id)).then(function (res) {
9014
9380
  setEditedTitle(false);
9015
9381
  setTextbook(res.data);
9016
9382
  setNotFound(false);
@@ -9019,7 +9385,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
9019
9385
  var _error$response;
9020
9386
  if ((error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 404) setNotFound(true);else reactToastify.toast.error(getErrorMessage(t, error));
9021
9387
  });
9022
- return Promise.resolve(_temp16 && _temp16.then ? _temp16.then(_temp17) : _temp17(_temp16));
9388
+ return Promise.resolve(_temp18 && _temp18.then ? _temp18.then(_temp19) : _temp19(_temp18));
9023
9389
  } catch (e) {
9024
9390
  return Promise.reject(e);
9025
9391
  }
@@ -9095,6 +9461,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
9095
9461
  articlesSelected: articlesSelected,
9096
9462
  isOpenDialog: isOpenDialog,
9097
9463
  examRequest: examRequest,
9464
+ categoryList: categoryList,
9098
9465
  handleChangeExamRequest: handleChangeExamRequest,
9099
9466
  handleCheckArticle: handleCheckArticle,
9100
9467
  handleOpenCreateExamDialog: handleChangeExamRequestBeforeOpenDialog,
@@ -9529,27 +9896,6 @@ var DURATION_OPTIONS = Array.from({
9529
9896
  });
9530
9897
  var DEFAULT_ANSWER_COUNT$1 = 5;
9531
9898
 
9532
- var ADMIN_CATEGORY_URL = SUPER_ADMIN_BASE_URL + "/api/category";
9533
- var CATEGORY_URL = BASE_URL + "/api/examcategory";
9534
- var getCategoryListAdminApi = function getCategoryListAdminApi(data) {
9535
- try {
9536
- return Promise.resolve(api.get("" + ADMIN_CATEGORY_URL, {
9537
- params: data
9538
- }));
9539
- } catch (e) {
9540
- return Promise.reject(e);
9541
- }
9542
- };
9543
- var getCategoryListApi = function getCategoryListApi(data) {
9544
- try {
9545
- return Promise.resolve(api.get("" + CATEGORY_URL, {
9546
- params: data
9547
- }));
9548
- } catch (e) {
9549
- return Promise.reject(e);
9550
- }
9551
- };
9552
-
9553
9899
  var useExamDetailView = function useExamDetailView(props) {
9554
9900
  var exam = props.exam,
9555
9901
  onChangeExam = props.onChangeExam;
@@ -9775,9 +10121,8 @@ var useExamDetailView = function useExamDetailView(props) {
9775
10121
  }
9776
10122
  };
9777
10123
  React.useEffect(function () {
9778
- if (categoryList !== null && categoryList !== void 0 && categoryList.length) return;
9779
10124
  getCategoryList();
9780
- }, [exam.subjectId, JSON.stringify(categoryList)]);
10125
+ }, [exam.subjectId]);
9781
10126
  var examGroupByArticle = React.useMemo(function () {
9782
10127
  if (!exam) return [];
9783
10128
  var articles = [];
@@ -10010,6 +10355,7 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
10010
10355
  isEditedTitle = _useTextbookDetail.isEditedTitle,
10011
10356
  isOpenDialog = _useTextbookDetail.isOpenDialog,
10012
10357
  examRequest = _useTextbookDetail.examRequest,
10358
+ categoryList = _useTextbookDetail.categoryList,
10013
10359
  handleChangeExamRequest = _useTextbookDetail.handleChangeExamRequest,
10014
10360
  handleSaveExam = _useTextbookDetail.handleSaveExam,
10015
10361
  handleCloseDialog = _useTextbookDetail.handleCloseDialog,
@@ -10039,7 +10385,7 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
10039
10385
  handleRemoveSelectedItem = _useTextbookDetail.handleRemoveSelectedItem,
10040
10386
  handleOpenRemoveChapterConfirmDialog = _useTextbookDetail.handleOpenRemoveChapterConfirmDialog;
10041
10387
  var _useCategorySelect = useCategorySelect({
10042
- subjectId: id ? textbookSubject === null || textbookSubject === void 0 ? void 0 : textbookSubject.value : undefined
10388
+ categoryList: categoryList
10043
10389
  }),
10044
10390
  categoryOptions = _useCategorySelect.categoryOptions;
10045
10391
  if (isNotFound) return React__default.createElement(NotFound, {
@@ -10402,7 +10748,7 @@ var useTextbookList = function useTextbookList(props) {
10402
10748
  var role = props.role,
10403
10749
  navigate = props.navigate;
10404
10750
  var _useList = useList(function (search) {
10405
- return getTextbookListApi(search, role);
10751
+ return getTextbookListApi(search);
10406
10752
  }, TextbookDefaultQuery),
10407
10753
  filter = _useList.filter,
10408
10754
  textSearchRef = _useList.textSearchRef,
@@ -10448,7 +10794,7 @@ var useTextbookList = function useTextbookList(props) {
10448
10794
  if (!(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id)) return Promise.resolve();
10449
10795
  dispatch(setLoading(true));
10450
10796
  var _temp = _catch(function () {
10451
- return Promise.resolve(deleteTextbookApi(selectedTextbook.id, role)).then(function () {
10797
+ return Promise.resolve(deleteTextbookApi(selectedTextbook.id)).then(function () {
10452
10798
  return Promise.resolve(getData(false)).then(function () {
10453
10799
  toggleConfirmDialog();
10454
10800
  });
@@ -11625,23 +11971,11 @@ var getRecentUserActionListApi = function getRecentUserActionListApi(query) {
11625
11971
  params: _extends({}, query)
11626
11972
  });
11627
11973
  };
11628
- var createRecentUserActionListApi = function createRecentUserActionListApi(_ref) {
11629
- var userId = _ref.userId,
11630
- action = _ref.action,
11631
- data = _ref.data,
11632
- roles = _ref.roles;
11633
- return api.post("" + RECENT_USER_URL, {
11634
- userId: userId,
11635
- action: action,
11636
- data: data
11637
- }, {
11638
- params: {
11639
- roles: roles
11640
- }
11641
- });
11974
+ var createRecentUserActionListApi = function createRecentUserActionListApi(recentData) {
11975
+ return api.post("" + RECENT_USER_URL, recentData);
11642
11976
  };
11643
11977
 
11644
- var styles$4 = {"lighter":"#F0FFF6","light":"#89F0B2","less_dark":"#3DC674","dark":"#349056","darker":"#18442A","gray_50":"#FBFBF9","gray_100":"#EAEAE5","gray_300":"#D0D0C8","gray_500":"#9A9A98","gray_700":"#5D5D5B","gray_900":"#363634","red_900":"#DB4D4D","green_support_900":"#3ACB46","yellow_900":"#FEAF06","purple_900":"#C3099A","titleBox":"_1dveO","title":"_mxRxf","point":"_2fD-F","buttonGroup":"_2DGl3","btnFeedback":"_xGW1x","btnTerminate":"_3mLu2","myanswer":"_eDBpS","titleMyAnswer1":"_2fMq3","titleMyAnswer2":"_3gEYh","contentMyAnswer":"_2K_sx","myAnswerItem":"_2qiLh","time":"_6TCOK","timeCol":"_hmseC","answer-response":"_3GfJt","answer-response-0":"_3ut64","answer-response-1":"_2VtpD","answer-response-2":"_58lQU","answer-response-3":"_1ucMY","answer-response-4":"_1qkxy","answerCorrect":"_2jIeT","answerIncorrect":"_to2v0","answerNograss":"_1JSte","answerEasy":"_2_uTU","answerDiscrimination":"_1DBoA","answerTrap":"_1q3tD","answerNoTime":"_3iItu","questionOrder":"_1fNkS","myTimeLabel":"_1Z_F3","myPoolTime":"_4KwG0","topTimeLabel":"_245H-","topTime":"_3tZqw","meanTimeLabel":"_PlPLY","meanTime":"_12a7R","compareChart":"_3MW16","prevChart":"_1fNkb","chart":"_3K4oY","nextChart":"_3YKBp","titleChart":"_13BVP","titleCompareGrass":"_o1txm","tableCompareGrass":"_bT5nf","thcolumn1":"_3Umg0","tdcolumn1":"_3dRMF","tdcolumn3":"_2tcBP","classification":"_1AFeb","wrapperProblem":"_oTqG7","titleProblem":"_35eIx","titleProblemClose":"_3t4HO","titleTrickyProblem":"_1-oxK","wrongQuestions":"_2dpMR","question":"_1lSOX","assignedQuestions":"_1ONUt","wrapperContent":"_nPoR0","content":"_2zmZn","contentColumn1":"_334SY","span1":"_3Lf-U","span2":"_ZpMot","contentColumn2":"_16P3l","duration":"_1kT28","topDuration":"_1fVRi","overallCorrectRate":"_3jLGe","answer":"_VsZ0K","contentVulnerable":"_QxKMy","wrappContentProblem":"_nnqpW","contentProblem":"_3Z1nV","labelProblem":"_36Xpx","name":"_3ZJQW","percent":"_2J3MK","slider":"_1MPdO","track":"_3CV_y","noData":"__g-ff","loading":"_3j485","table-responsive":"_2O6RX","form-label":"_1RYOQ","form-control":"_3VRVT","form-label-dialog":"_3oCSh","btn-cancel":"_3USKq","btn-register":"_3y_iD","pdfBtnBox":"_3xZHo","pdfBtn":"_1DtWq","form-select":"_1a_vw","loader":"_2uC7T","dot":"_Xz-Mr","bounce":"_3THgz"};
11978
+ var styles$4 = {"lighter":"#F0FFF6","light":"#89F0B2","less_dark":"#3DC674","dark":"#349056","darker":"#18442A","gray_50":"#FBFBF9","gray_100":"#EAEAE5","gray_300":"#D0D0C8","gray_500":"#9A9A98","gray_700":"#5D5D5B","gray_900":"#363634","red_900":"#DB4D4D","green_support_900":"#3ACB46","yellow_900":"#FEAF06","purple_900":"#C3099A","titleBox":"_1dveO","title":"_mxRxf","point":"_2fD-F","buttonGroup":"_2DGl3","btnFeedback":"_xGW1x","btnTerminate":"_3mLu2","myanswer":"_eDBpS","titleMyAnswer1":"_2fMq3","titleMyAnswer2":"_3gEYh","contentMyAnswer":"_2K_sx","myAnswerItem":"_2qiLh","time":"_6TCOK","timeCol":"_hmseC","answer-response":"_3GfJt","answer-response-0":"_3ut64","answer-response-1":"_2VtpD","answer-response-2":"_58lQU","answer-response-3":"_1ucMY","answer-response-4":"_1qkxy","overall-response-1":"_1AeGu","overall-response-2":"_1xTB0","overall-response-3":"_3Yu_5","answerCorrect":"_2jIeT","answerIncorrect":"_to2v0","answerNograss":"_1JSte","answerEasy":"_2_uTU","answerDiscrimination":"_1DBoA","answerTrap":"_1q3tD","answerNoTime":"_3iItu","questionOrder":"_1fNkS","myTimeLabel":"_1Z_F3","myPoolTime":"_4KwG0","topTimeLabel":"_245H-","topTime":"_3tZqw","meanTimeLabel":"_PlPLY","meanTime":"_12a7R","compareChart":"_3MW16","prevChart":"_1fNkb","chart":"_3K4oY","nextChart":"_3YKBp","titleChart":"_13BVP","titleCompareGrass":"_o1txm","tableCompareGrass":"_bT5nf","thcolumn1":"_3Umg0","tdcolumn1":"_3dRMF","tdcolumn3":"_2tcBP","classification":"_1AFeb","wrapperProblem":"_oTqG7","titleProblem":"_35eIx","titleProblemClose":"_3t4HO","titleTrickyProblem":"_1-oxK","wrongQuestions":"_2dpMR","question":"_1lSOX","assignedQuestions":"_1ONUt","wrapperContent":"_nPoR0","content":"_2zmZn","contentColumn1":"_334SY","span1":"_3Lf-U","span2":"_ZpMot","contentColumn2":"_16P3l","duration":"_1kT28","topDuration":"_1fVRi","overallCorrectRate":"_3jLGe","answer":"_VsZ0K","contentVulnerable":"_QxKMy","wrappContentProblem":"_nnqpW","contentProblem":"_3Z1nV","labelProblem":"_36Xpx","name":"_3ZJQW","percent":"_2J3MK","slider":"_1MPdO","track":"_3CV_y","noData":"__g-ff","loading":"_3j485","table-responsive":"_2O6RX","form-label":"_1RYOQ","form-control":"_3VRVT","form-label-dialog":"_3oCSh","btn-cancel":"_3USKq","btn-register":"_3y_iD","pdfBtnBox":"_3xZHo","pdfBtn":"_1DtWq","form-select":"_1a_vw","loader":"_2uC7T","dot":"_Xz-Mr","bounce":"_3THgz"};
11645
11979
 
11646
11980
  var useExamResult = function useExamResult(props) {
11647
11981
  var _allSeries$dataChartI;
@@ -11661,6 +11995,7 @@ var useExamResult = function useExamResult(props) {
11661
11995
  });
11662
11996
  var roles = (user === null || user === void 0 ? void 0 : user.roles) || [];
11663
11997
  var isStudent = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Student);
11998
+ var isAdmin = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Admin);
11664
11999
  var examCode = query.get("examCode") || code;
11665
12000
  var language = reactRedux.useSelector(function (state) {
11666
12001
  var _state$common2;
@@ -11747,12 +12082,12 @@ var useExamResult = function useExamResult(props) {
11747
12082
  userId: studentId,
11748
12083
  action: isPrint ? RecentUserAction$1.PrintedExamResult : RecentUserAction$1.ViewedExamResult,
11749
12084
  data: "" + examSessionId,
11750
- roles: [exports.Role.Teacher]
12085
+ isAdmin: isAdmin
11751
12086
  })) : Promise.resolve(!isStudent && createRecentUserActionListApi({
11752
12087
  userId: studentId,
11753
12088
  action: isPrint ? RecentUserAction$1.PrintedExamResult : RecentUserAction$1.ViewedExamResult,
11754
12089
  data: "" + examSessionId,
11755
- roles: [exports.Role.Teacher]
12090
+ isAdmin: isAdmin
11756
12091
  })).then(_temp3);
11757
12092
  });
11758
12093
  }, function (error) {
@@ -13334,8 +13669,8 @@ var iconWarning = function iconWarning(_ref) {
13334
13669
  }));
13335
13670
  };
13336
13671
 
13337
- var schema$1 = yup.object().shape({
13338
- content: yup.string().required()
13672
+ var schema$1 = Yup.object().shape({
13673
+ content: Yup.string().required()
13339
13674
  });
13340
13675
  function CreateNewQuestionDialog(_ref) {
13341
13676
  var handleCreateQuestion = _ref.handleCreateQuestion,
@@ -13510,6 +13845,9 @@ function MyAnswer(_ref) {
13510
13845
  if (diff > 0) prefix = "+";
13511
13846
  return "" + prefix + formatTimeSecond(Math.abs(diff), t);
13512
13847
  };
13848
+ var getOverallColorClassName = function getOverallColorClassName(correctRate) {
13849
+ return styles$4["overall-response-" + (correctRate < 40 ? 1 : correctRate <= 70 ? 2 : 3)];
13850
+ };
13513
13851
  var renderQuestions = function renderQuestions(questions) {
13514
13852
  return questions.map(function (question, index) {
13515
13853
  var _questions;
@@ -13592,7 +13930,7 @@ function MyAnswer(_ref) {
13592
13930
  style: {
13593
13931
  margin: 0
13594
13932
  },
13595
- className: styles$4["answer-response"] + " " + styles$4["answer-response-" + question.answerResponseSignal]
13933
+ className: styles$4["answer-response"] + " " + getOverallColorClassName(question.overallCorrectRate)
13596
13934
  }, question.overallCorrectRate.toFixed(2) + "%") : React__default.createElement("p", {
13597
13935
  style: {
13598
13936
  margin: 0
@@ -14529,8 +14867,8 @@ var useCreateQuestionDialog$1 = function useCreateQuestionDialog() {
14529
14867
  };
14530
14868
  };
14531
14869
 
14532
- var schema$2 = yup.object().shape({
14533
- content: yup.string().required()
14870
+ var schema$2 = Yup.object().shape({
14871
+ content: Yup.string().required()
14534
14872
  });
14535
14873
  function CreateNewQuestionDialog$1(_ref) {
14536
14874
  var handleCreateQuestion = _ref.handleCreateQuestion,
@@ -15407,29 +15745,6 @@ var times = {
15407
15745
  getRemainTime: getRemainTime
15408
15746
  };
15409
15747
 
15410
- var SIGN_IN_SUPER_ADMIN_URL = SUPER_ADMIN_BASE_URL + "/api/auth/login";
15411
- var SIGN_IN_URL = BASE_URL + "/api/auth/login";
15412
- var signInApi = function signInApi(_ref) {
15413
- var email = _ref.email,
15414
- password = _ref.password,
15415
- role = _ref.role;
15416
- return api.post(SIGN_IN_URL + "/demo", {
15417
- email: email,
15418
- password: password,
15419
- role: role
15420
- });
15421
- };
15422
- var signInSuperAdminApi = function signInSuperAdminApi(_ref2) {
15423
- var email = _ref2.email,
15424
- password = _ref2.password,
15425
- role = _ref2.role;
15426
- return api.post(SIGN_IN_SUPER_ADMIN_URL + "/demo", {
15427
- email: email,
15428
- password: password,
15429
- role: role
15430
- });
15431
- };
15432
-
15433
15748
  var PAGE_TITLE$2 = "sign_in";
15434
15749
  var useLogin$2 = function useLogin(_ref) {
15435
15750
  var history = _ref.history,
@@ -17087,6 +17402,86 @@ var PrintExamView2 = function PrintExamView2(_ref) {
17087
17402
  }, t("print_pdf"))));
17088
17403
  };
17089
17404
 
17405
+ var urlSafeFormat = function urlSafeFormat(text) {
17406
+ return text.replaceAll(' ', "+");
17407
+ };
17408
+
17409
+ var useLoginWithEmail = function useLoginWithEmail(_ref) {
17410
+ var history = _ref.history,
17411
+ homeAcademyUrl = _ref.homeAcademyUrl,
17412
+ homeUrl = _ref.homeUrl,
17413
+ registerUrl = _ref.registerUrl,
17414
+ role = _ref.role;
17415
+ var _useLocation = reactRouterDom.useLocation(),
17416
+ searchLocation = _useLocation.search;
17417
+ var _useTranslation = reactI18next.useTranslation(),
17418
+ t = _useTranslation.t;
17419
+ var searchParams = new URLSearchParams(searchLocation);
17420
+ var key = urlSafeFormat(searchParams.get("key") || "");
17421
+ var dispatch = reactRedux.useDispatch();
17422
+ var paramDomain = searchParams.get("domain");
17423
+ var academyDomainStorage = getAcademyDomain();
17424
+ var academyDomain = paramDomain || academyDomainStorage || "";
17425
+ var handleSignIn = function handleSignIn() {
17426
+ try {
17427
+ var _temp2 = function _temp2() {
17428
+ dispatch(setLoading(false));
17429
+ };
17430
+ dispatch(setLoading(true));
17431
+ var _temp = _catch(function () {
17432
+ return Promise.resolve(signInWithKeyApi({
17433
+ academyDomain: academyDomain,
17434
+ key: key,
17435
+ role: role
17436
+ })).then(function (res) {
17437
+ var loginResponse = res === null || res === void 0 ? void 0 : res.data;
17438
+ var isFirstLogin = loginResponse.isFirstLogin,
17439
+ token = loginResponse.token,
17440
+ user = loginResponse.user;
17441
+ var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain);
17442
+ var needToRegister = isFirstLogin && isAcademy;
17443
+ var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
17444
+ redirectLoginUser(user, token, redirectUrl);
17445
+ });
17446
+ }, function (error) {
17447
+ console.log(error);
17448
+ reactToastify.toast.error(getErrorMessage(t, error, t("request_login_fail")));
17449
+ });
17450
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
17451
+ } catch (e) {
17452
+ return Promise.reject(e);
17453
+ }
17454
+ };
17455
+ var redirectLoginUser = function redirectLoginUser(data, token, redirectUrl) {
17456
+ localStorage.setItem(ACCESS_TOKEN, token);
17457
+ !data.academyDomain && localStorage.removeItem(ACADEMY_DOMAIN);
17458
+ !!data.academyDomain && localStorage.setItem(ACADEMY_DOMAIN, data.academyDomain);
17459
+ dispatch(setUser(_extends({}, data)));
17460
+ if (redirectUrl) pushTo(history, redirectUrl);
17461
+ };
17462
+ React.useEffect(function () {
17463
+ if (!key) return;
17464
+ handleSignIn();
17465
+ });
17466
+ return {};
17467
+ };
17468
+
17469
+ var LoginWithEmail = function LoginWithEmail(_ref) {
17470
+ var history = _ref.history,
17471
+ homeAcademyUrl = _ref.homeAcademyUrl,
17472
+ homeUrl = _ref.homeUrl,
17473
+ registerUrl = _ref.registerUrl,
17474
+ role = _ref.role;
17475
+ useLoginWithEmail({
17476
+ history: history,
17477
+ homeAcademyUrl: homeAcademyUrl,
17478
+ homeUrl: homeUrl,
17479
+ registerUrl: registerUrl,
17480
+ role: role
17481
+ });
17482
+ return React__default.createElement(Loading, null);
17483
+ };
17484
+
17090
17485
  exports.moment = moment;
17091
17486
  Object.defineProperty(exports, 'I18nextProvider', {
17092
17487
  enumerable: true,
@@ -17146,6 +17541,7 @@ exports.LayoutContext = LayoutContext;
17146
17541
  exports.Loading = Loading;
17147
17542
  exports.LoadingComponent = LoadingComponent;
17148
17543
  exports.Login = Login;
17544
+ exports.LoginWithEmail = LoginWithEmail;
17149
17545
  exports.LoginWithPassword = SignIn;
17150
17546
  exports.NotFound = NotFound;
17151
17547
  exports.PUSHER_CONFIG = PUSHER_CONFIG;