mario-core 2.9.145-up → 2.9.147-level

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 (84) hide show
  1. package/dist/components/Alerts/ReactNotification.d.ts +2 -2
  2. package/dist/components/Image/UploadImage.d.ts +2 -2
  3. package/dist/components/Modals/ModelSelectRole.d.ts +7 -0
  4. package/dist/components/Modals/NotificationLogoutModal.d.ts +2 -2
  5. package/dist/components/Modals/NotificationModal.d.ts +2 -2
  6. package/dist/components/Others/QuitPrompt.d.ts +2 -2
  7. package/dist/components/Pagination/CustomPagination.d.ts +2 -2
  8. package/dist/components/Selectors/AcademicClassSelector.d.ts +2 -2
  9. package/dist/components/Selectors/CategorySelector.d.ts +2 -2
  10. package/dist/components/Selectors/CreatableSelector.d.ts +2 -2
  11. package/dist/components/Selectors/CustomSelector.d.ts +2 -2
  12. package/dist/components/Selectors/MailCategorySelectors.d.ts +2 -2
  13. package/dist/components/Selectors/QuestionCategorySelector.d.ts +2 -2
  14. package/dist/components/Selectors/QuestionTypeSelector.d.ts +2 -2
  15. package/dist/components/Selectors/StarRatingSelector.d.ts +2 -2
  16. package/dist/components/Selectors/SuggestionCategorySelector.d.ts +2 -2
  17. package/dist/components/Tabs/CustomTab.d.ts +2 -2
  18. package/dist/containers/Login/constant/type.d.ts +5 -0
  19. package/dist/containers/Login/views/Dashboard.d.ts +2 -2
  20. package/dist/containers/Login/views/Login.d.ts +2 -2
  21. package/dist/containers/Login/views/ModelSelectRole.d.ts +4 -0
  22. package/dist/containers/Login/views/block/BlockForgetPassword.d.ts +2 -2
  23. package/dist/containers/Login/views/block/BlockResetPassword.d.ts +2 -2
  24. package/dist/containers/Login/views/block/BlockTwoFactorLogin.d.ts +2 -2
  25. package/dist/containers/Login/views/block/QuoteContent.d.ts +2 -2
  26. package/dist/containers/Notifications/views/NotificationList.d.ts +2 -2
  27. package/dist/containers/Skill/components/SkillSelector.d.ts +2 -2
  28. package/dist/containers/User/views/UserDetail.d.ts +2 -2
  29. package/dist/containers/User/views/UserList.d.ts +2 -2
  30. package/dist/index.css +31 -4
  31. package/dist/index.js +805 -781
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.modern.js +806 -782
  34. package/dist/index.modern.js.map +1 -1
  35. package/dist/layouts/TheContent.d.ts +1 -1
  36. package/dist/layouts/TheFooter.d.ts +1 -1
  37. package/dist/layouts/TheHeader.d.ts +5 -2
  38. package/dist/layouts/TheHeaderDropdown.d.ts +5 -2
  39. package/dist/layouts/TheLanguageDropdown.d.ts +2 -2
  40. package/dist/layouts/TheLayout.d.ts +2 -2
  41. package/dist/layouts/TheSidebar.d.ts +2 -2
  42. package/dist/redux/assessments/reducer.d.ts +2 -2
  43. package/dist/redux/assignment/reducer.d.ts +1 -1
  44. package/dist/redux/assistants/reducer.d.ts +1 -1
  45. package/dist/redux/badges/reducer.d.ts +1 -1
  46. package/dist/redux/bandScores/reducer.d.ts +1 -1
  47. package/dist/redux/certificate/reducer.d.ts +1 -1
  48. package/dist/redux/classes/reducer.d.ts +1 -1
  49. package/dist/redux/commons/reducer.d.ts +1 -1
  50. package/dist/redux/conferenceRubrics/reducer.d.ts +1 -1
  51. package/dist/redux/customAlert/reducer.d.ts +1 -1
  52. package/dist/redux/dashboard/reducer.d.ts +1 -1
  53. package/dist/redux/dataPlayer/reducer.d.ts +1 -1
  54. package/dist/redux/emailTemplates/reducer.d.ts +1 -1
  55. package/dist/redux/faqs/reducer.d.ts +1 -1
  56. package/dist/redux/feedback/reducer.d.ts +1 -1
  57. package/dist/redux/gallery/reducer.d.ts +1 -1
  58. package/dist/redux/goalExamples/reducer.d.ts +1 -1
  59. package/dist/redux/improveMyClass/reducer.d.ts +1 -1
  60. package/dist/redux/learningStrategies/reducer.d.ts +1 -1
  61. package/dist/redux/learningSupportCategories/reducer.d.ts +1 -1
  62. package/dist/redux/mailCategories/reducer.d.ts +1 -1
  63. package/dist/redux/navMobile/reducer.d.ts +1 -1
  64. package/dist/redux/notifications/reducer.d.ts +1 -1
  65. package/dist/redux/questionBanks/reducer.d.ts +1 -1
  66. package/dist/redux/questionByCategory/reducer.d.ts +1 -1
  67. package/dist/redux/questionCategory/reducer.d.ts +1 -1
  68. package/dist/redux/reflectionForms/reducer.d.ts +1 -1
  69. package/dist/redux/reflectionResults/reducer.d.ts +1 -1
  70. package/dist/redux/schoolBlankDays/reducer.d.ts +1 -1
  71. package/dist/redux/semester/reducer.d.ts +1 -1
  72. package/dist/redux/sessionPlayers/reducer.d.ts +1 -1
  73. package/dist/redux/sessionTemplateGeneralClasses/reducer.d.ts +1 -1
  74. package/dist/redux/sessionTemplates/reducer.d.ts +1 -1
  75. package/dist/redux/skills/reducer.d.ts +1 -1
  76. package/dist/redux/subjects/reducer.d.ts +1 -1
  77. package/dist/redux/suggestionBanks/reducer.d.ts +1 -1
  78. package/dist/redux/teacher/myStudent/reducer.d.ts +1 -1
  79. package/dist/redux/tutorialScreen/reducer.d.ts +2 -2
  80. package/dist/redux/users/reducer.d.ts +1 -1
  81. package/dist/redux/widget/reducer.d.ts +1 -1
  82. package/dist/utils/amplitude.d.ts +1 -0
  83. package/dist/utils/constants.d.ts +1 -0
  84. package/package.json +101 -101
@@ -21,7 +21,7 @@ import { CgMenuRight } from 'react-icons/cg';
21
21
  import { RiLogoutBoxRLine } from 'react-icons/ri';
22
22
  import Pusher from 'pusher-js/with-encryption';
23
23
  import { BsChevronDown } from 'react-icons/bs';
24
- import { FaPlus, FaTrashAlt, FaUsersCog, FaRegEdit, FaArrowLeft, FaDownload, FaTrash, FaEdit, FaFolderPlus, FaFileUpload } from 'react-icons/fa';
24
+ import { FaPlus, FaTrashAlt, FaRegEdit, FaArrowLeft, FaDownload, FaTrash, FaEdit, FaFolderPlus, FaFileUpload, FaUsersCog } from 'react-icons/fa';
25
25
  import { format } from 'date-fns';
26
26
  import { Editor } from '@tinymce/tinymce-react';
27
27
  import differenceInCalendarYears from 'date-fns/differenceInCalendarYears';
@@ -32,6 +32,7 @@ import Creatable from 'react-select/creatable';
32
32
  import ReactNotification$1 from 'react-notifications-component';
33
33
  import 'react-notifications-component/dist/theme.css';
34
34
  import { AiOutlineEye } from 'react-icons/ai';
35
+ import 'symbol-observable';
35
36
 
36
37
  var dashboard = "Dashboard";
37
38
  var user = "User";
@@ -2761,7 +2762,7 @@ function _catch(body, recover) {
2761
2762
  return result;
2762
2763
  }
2763
2764
 
2764
- var styles = {"btn-login-google":"_2HqmH","notification-count":"_2sew7","text-introduction":"_3OgWF","btn-trans-border":"_r9cAh","contact":"_NszFe","learn-more":"_MDjzH","title-quote":"_1Swkw","descriptions-quote":"_gi8vj","box-login":"_38Lo1","block-verification":"_1OzGy","block-login":"_wWIyO","title-login":"_3nuns","title-forgot-password":"_21qb6","btn-close":"_NhW9l","btn-login":"_3IL10","digital-privacy-icon":"_141p1","return-to-login":"_Ce3Kg","recover-account":"_2t6d9","link-to-login":"_3bDsd","remember":"_11FZt","term-and-conditions":"_3LXoI","descriptions-forgot-pass":"_PMcjT","content-icon":"_2rZY6","descriptions-icon":"_3SOdX","title-icon":"_y9lM2","nav-home":"_1TT1q","box-introduction":"_32V6L","icon":"_20YJX","form-user-name":"_39BJD","checkbox-remember":"_2K9b2","block-reset-password":"_23Sua","block-forgot-pass":"_3CWP6","page-not-login":"_3Wmco","content-quote":"_13Rk0","home-page":"_o6HKW","red-background":"_jOY7o","imageAnimation":"_wnn2_","login":"_F-hjL","login-content":"_149oA","logo-home":"_24U3W","img-box":"_2v-L_","img-login":"_3ncTL","img-login-rectangle":"_2kOvJ","c-main":"_39l0X","container-fluid":"_1BMwK","input-file-label":"_1XNpH","delete-avatar-button":"_1z5h9","header-logo":"_Gewcf","box-sidebar":"_2vcmv","sidebar-logo":"_1hXpy","sidebar-nav-links":"_3vb3s","c-active":"_36jSM","sidebar-nav-links-hover":"_DNrus","box-sidebar-header":"_3NEZj","box-logout":"_1wUDG","sidebar-btn-minimized":"_1S7Px","sidebar-logout":"_2P85D","nav-mobile":"_1qjbW","filter-media-file":"_1I62C","div":"_3cLcM","dropdown-menu":"_1krbH","header-avatar":"_RQaHE","dropdown-menu-flag":"_XK8oS","dropdown-content":"_3ys4W","dropdown-change":"_ToOW_","item-address":"_3sQlR","item-logout":"_3bqSM","title-address":"_1jgSI","img-avatar":"_35Ttz","item-contact":"_1wc7o","logout":"_1_9tV","content-text":"_3S4f2","dropdown-content-language":"_3ajui","dropdown-item-language":"_3Y_y4","dropdown-item-language-active":"_CzNMi","hide-in-mobile":"_1INnO","hamburger-menu":"_2yRc8","box-content-home-page":"_ABUIP","collapse-box":"_WX97m","hide-in-desktop":"_2LIqK","control-input":"_2Zz97","custom-control":"_3-yp5"};
2765
+ var styles = {"btn-login-google":"_2HqmH","notification-count":"_2sew7","text-introduction":"_3OgWF","btn-trans-border":"_r9cAh","contact":"_NszFe","learn-more":"_MDjzH","title-quote":"_1Swkw","descriptions-quote":"_gi8vj","box-login":"_38Lo1","block-verification":"_1OzGy","block-login":"_wWIyO","title-login":"_3nuns","title-forgot-password":"_21qb6","btn-close":"_NhW9l","btn-login":"_3IL10","digital-privacy-icon":"_141p1","return-to-login":"_Ce3Kg","recover-account":"_2t6d9","link-to-login":"_3bDsd","remember":"_11FZt","term-and-conditions":"_3LXoI","descriptions-forgot-pass":"_PMcjT","content-icon":"_2rZY6","descriptions-icon":"_3SOdX","title-icon":"_y9lM2","nav-home":"_1TT1q","box-introduction":"_32V6L","icon":"_20YJX","form-user-name":"_39BJD","checkbox-remember":"_2K9b2","block-reset-password":"_23Sua","block-forgot-pass":"_3CWP6","page-not-login":"_3Wmco","content-quote":"_13Rk0","home-page":"_o6HKW","red-background":"_jOY7o","imageAnimation":"_wnn2_","login":"_F-hjL","login-content":"_149oA","logo-home":"_24U3W","img-box":"_2v-L_","img-login":"_3ncTL","img-login-rectangle":"_2kOvJ","c-main":"_39l0X","container-fluid":"_1BMwK","input-file-label":"_1XNpH","delete-avatar-button":"_1z5h9","header-logo":"_Gewcf","box-sidebar":"_2vcmv","sidebar-logo":"_1hXpy","sidebar-nav-links":"_3vb3s","c-active":"_36jSM","sidebar-nav-links-hover":"_DNrus","box-sidebar-header":"_3NEZj","box-logout":"_1wUDG","sidebar-btn-minimized":"_1S7Px","sidebar-logout":"_2P85D","nav-mobile":"_1qjbW","filter-media-file":"_1I62C","div":"_3cLcM","dropdown-menu":"_1krbH","header-avatar":"_RQaHE","dropdown-menu-flag":"_XK8oS","dropdown-content":"_3ys4W","dropdown-change":"_ToOW_","item-address":"_3sQlR","item-logout":"_3bqSM","title-address":"_1jgSI","img-avatar":"_35Ttz","item-contact":"_1wc7o","logout":"_1_9tV","content-text":"_3S4f2","dropdown-content-language":"_3ajui","dropdown-item-language":"_3Y_y4","dropdown-item-language-active":"_CzNMi","hide-in-mobile":"_1INnO","hamburger-menu":"_2yRc8","box-content-home-page":"_ABUIP","collapse-box":"_WX97m","hide-in-desktop":"_2LIqK","control-input":"_2Zz97","custom-control":"_3-yp5","item-select-role":"_1KcY7","item-role-active":"_dOVso","model-switch-roles":"_3ZqxI","title":"_g-p72"};
2765
2766
 
2766
2767
  var style = {
2767
2768
  fontSize: "0.85rem"
@@ -2997,6 +2998,16 @@ var ROLES = {
2997
2998
  SECONDARY_TEACHER: "SecondaryTeacher"
2998
2999
  };
2999
3000
  var NOTIFICATION_ALERT_KEY = "NOTIFICATION_ALERT_KEY";
3001
+ var handleUserRole = function handleUserRole(userRoles) {
3002
+ if (userRoles !== null && userRoles !== void 0 && userRoles.includes("Teacher") && userRoles !== null && userRoles !== void 0 && userRoles.includes("Assistant")) {
3003
+ var roles = userRoles.filter(function (r) {
3004
+ return r !== "Teacher" && r !== "Assistant";
3005
+ });
3006
+ roles.push("Teacher/Assistant");
3007
+ return roles;
3008
+ }
3009
+ return userRoles;
3010
+ };
3000
3011
 
3001
3012
  var getAccessToken = (function () {
3002
3013
  try {
@@ -3617,7 +3628,7 @@ var BlockLogin = function BlockLogin(_ref) {
3617
3628
  }, React.createElement("div", {
3618
3629
  className: "" + styles["block-form"]
3619
3630
  }, React.createElement("img", {
3620
- src: "/images/main-blue-logo.svg",
3631
+ src: "/images/horizontal-logo-blue.svg",
3621
3632
  className: "" + styles["img-login-rectangle"]
3622
3633
  }), React.createElement("p", {
3623
3634
  className: "" + styles["title-login"]
@@ -4137,7 +4148,7 @@ var Dashboard = function Dashboard() {
4137
4148
  href: "/",
4138
4149
  className: "" + styles["logo-home"]
4139
4150
  }, React.createElement("img", {
4140
- src: "/images/logo-v2.svg",
4151
+ src: "/images/horizontal-logo-white.svg",
4141
4152
  alt: "mario"
4142
4153
  })), React.createElement(GiHamburgerMenu, {
4143
4154
  onClick: toggle,
@@ -4370,21 +4381,23 @@ var DEFAULT_USER_AVATAR = "/avatars/default-avatar.png";
4370
4381
  var ADMIN_ROLE = "Admin";
4371
4382
  var TEACHER_ROLE = "Teacher";
4372
4383
  var USER_DETAIL_URL = "/admin/user";
4373
- var TheHeaderDropdown = function TheHeaderDropdown() {
4384
+ var TheHeaderDropdown = function TheHeaderDropdown(_ref) {
4385
+ var _handleUserRole;
4386
+ var onToggleModel = _ref.onToggleModel;
4374
4387
  var user = useSelector(function (state) {
4375
4388
  return state.common.user;
4376
4389
  });
4377
4390
  var dispatch = useDispatch();
4391
+ var location = useLocation();
4378
4392
  var history = useHistory();
4393
+ var params = new URLSearchParams(location.search);
4394
+ var isReadOnly = params.get("isReadOnly");
4379
4395
  var email = user.email,
4380
4396
  profileImageFileName = user.profileImageFileName,
4381
4397
  roles = user.roles,
4382
4398
  id = user.id;
4383
4399
  var isAdmin = roles.includes(ADMIN_ROLE);
4384
4400
  var isTeacher = roles.includes(TEACHER_ROLE);
4385
- var goToTeacherPanel = useCallback(function () {
4386
- isTeacher && history.push("/home");
4387
- }, [isTeacher, history]);
4388
4401
  var signOut = useCallback(function () {
4389
4402
  localStorage.removeItem(ACCESS_TOKEN);
4390
4403
  dispatch(reset());
@@ -4422,20 +4435,20 @@ var TheHeaderDropdown = function TheHeaderDropdown() {
4422
4435
  className: styles["content-text"]
4423
4436
  }, React.createElement("h5", null, user.firstName + " " + user.lastName), React.createElement("span", {
4424
4437
  className: "block"
4425
- }, email), !isDistrict && React.createElement(NavLink, null, isTeacher && React.createElement(Link, {
4426
- to: "/my-profile"
4427
- }, "Edit profile"), isAdmin && React.createElement(Link, {
4428
- to: USER_DETAIL_URL + "/" + id
4429
- }, "Edit profile")))), isTeacher && React.createElement(DropdownItem, {
4430
- onClick: goToTeacherPanel,
4438
+ }, email), !isDistrict && React.createElement(NavLink, null, (isAdmin || isTeacher) && React.createElement(Link, {
4439
+ to: "" + (isAdmin ? USER_DETAIL_URL + "/" + id : "/my-profile")
4440
+ }, "Edit profile")))), ((_handleUserRole = handleUserRole((user === null || user === void 0 ? void 0 : user.roles) || [])) === null || _handleUserRole === void 0 ? void 0 : _handleUserRole.length) > 1 && !isReadOnly && React.createElement(DropdownItem, {
4441
+ onClick: function onClick() {
4442
+ onToggleModel === null || onToggleModel === void 0 ? void 0 : onToggleModel();
4443
+ },
4431
4444
  className: styles["dropdown-change"] + " px-0"
4432
4445
  }, React.createElement("div", {
4433
- className: styles["item-address"] + " d-flex align-items-center w-100"
4446
+ className: styles["item-address"] + " d-flex align-items-center w-100 text-uppercase mb-2"
4434
4447
  }, React.createElement("span", {
4435
4448
  className: "mr-2"
4436
4449
  }, React.createElement("i", {
4437
4450
  className: "fas fa-cogs h6 mb-0"
4438
- })), "GO TO TEACHER PANEL")), React.createElement(DropdownItem, {
4451
+ })), "Role change")), React.createElement(DropdownItem, {
4439
4452
  onClick: signOut,
4440
4453
  className: styles["dropdown-change"] + " px-0"
4441
4454
  }, React.createElement("div", {
@@ -4516,7 +4529,8 @@ var TheLanguageDropdown = function TheLanguageDropdown() {
4516
4529
  })), "United States"))));
4517
4530
  };
4518
4531
 
4519
- var TheHeader = function TheHeader() {
4532
+ var TheHeader = function TheHeader(_ref) {
4533
+ var onToggleModel = _ref.onToggleModel;
4520
4534
  var dispatch = useDispatch();
4521
4535
  var sidebarShow = useSelector(function (state) {
4522
4536
  return state.common.sidebarShow;
@@ -4548,7 +4562,9 @@ var TheHeader = function TheHeader() {
4548
4562
  },
4549
4563
  href: '/privacy-policy',
4550
4564
  target: "blank"
4551
- }, "Privacy Policy"), !isDistrict && React.createElement(NotificationButton, null), React.createElement(TheHeaderDropdown, null)));
4565
+ }, "Privacy Policy"), !isDistrict && React.createElement(NotificationButton, null), React.createElement(TheHeaderDropdown, {
4566
+ onToggleModel: onToggleModel
4567
+ })));
4552
4568
  };
4553
4569
 
4554
4570
  var TITLE$2 = "Not found";
@@ -4655,6 +4671,54 @@ var canAccess = function canAccess(userRoles, componentRoles) {
4655
4671
  return true;
4656
4672
  };
4657
4673
 
4674
+ var ModelSelectRole = function ModelSelectRole(_ref) {
4675
+ var _handleUserRole;
4676
+ var open = _ref.open,
4677
+ onToggleModel = _ref.onToggleModel;
4678
+ var dispatch = useDispatch();
4679
+ var history = useHistory();
4680
+ var pathname = window.location.pathname;
4681
+ var user = useSelector(function (state) {
4682
+ return state.common.user;
4683
+ });
4684
+ var roles = user === null || user === void 0 ? void 0 : user.roles;
4685
+ var handleSelectUserRoles = function handleSelectUserRoles(roles) {
4686
+ if (roles.includes("Admin")) {
4687
+ dispatch(setLoading(true));
4688
+ return history.push("/admin/dashboard");
4689
+ }
4690
+ var roleSelect = roles.includes("Teacher/Assistant") ? ["Teacher", "Assistant"] : roles;
4691
+ dispatch(setUser(_extends({}, user, {
4692
+ roles: roleSelect
4693
+ })));
4694
+ localStorage.setItem("ROLES", roleSelect.toString());
4695
+ onToggleModel();
4696
+ if (roles.includes("Parent")) {
4697
+ history.push("/parent");
4698
+ } else {
4699
+ pathname !== "/home" ? history.push("/home") : window.location.reload();
4700
+ }
4701
+ };
4702
+ return React.createElement(Modal, {
4703
+ isOpen: open,
4704
+ toggle: function toggle() {
4705
+ return onToggleModel();
4706
+ },
4707
+ className: "" + styles["model-switch-roles"],
4708
+ centered: true
4709
+ }, React.createElement("p", {
4710
+ className: "" + styles["title"]
4711
+ }, "Continue as:"), React.createElement("div", null, (_handleUserRole = handleUserRole(user === null || user === void 0 ? void 0 : user.roles)) === null || _handleUserRole === void 0 ? void 0 : _handleUserRole.map(function (r) {
4712
+ return React.createElement("p", {
4713
+ key: r,
4714
+ className: styles["item-select-role"] + " " + styles[roles.includes("Teacher") && roles.includes("Assistant") && r === "Teacher/Assistant" && !roles.includes("Admin") || roles.includes("Admin") && r === "Admin" || roles.includes(r) && !roles.includes("Admin") ? "item-role-active" : ""],
4715
+ onClick: function onClick() {
4716
+ return handleSelectUserRoles([r]);
4717
+ }
4718
+ }, r == "SecondaryTeacher" ? "Support Teacher" : r);
4719
+ })));
4720
+ };
4721
+
4658
4722
  var TheLayout = function TheLayout(_ref) {
4659
4723
  var routes = _ref.routes,
4660
4724
  navigation = _ref.navigation;
@@ -4666,11 +4730,17 @@ var TheLayout = function TheLayout(_ref) {
4666
4730
  var language = useSelector(function (state) {
4667
4731
  return state.common.language;
4668
4732
  });
4733
+ var _useState = useState(false),
4734
+ openModelSelectRole = _useState[0],
4735
+ setOpenModelSelectRole = _useState[1];
4669
4736
  var _useTranslation = useTranslation(),
4670
4737
  t = _useTranslation.t;
4671
4738
  var location = useLocation();
4672
4739
  var isNotification = location.pathname.includes("notifications");
4673
4740
  var isDistrict = window.location.host.includes("-district");
4741
+ var handleToggleModel = function handleToggleModel() {
4742
+ setOpenModelSelectRole(!openModelSelectRole);
4743
+ };
4674
4744
  var authRoutes = useMemo(function () {
4675
4745
  return routes.filter(function (route) {
4676
4746
  return canAccess(user === null || user === void 0 ? void 0 : user.roles, route.roles);
@@ -4736,11 +4806,16 @@ var TheLayout = function TheLayout(_ref) {
4736
4806
  navigation: authNavigations
4737
4807
  }), React.createElement("div", {
4738
4808
  className: "c-wrapper"
4739
- }, !isNotification && React.createElement(TheHeader, null), React.createElement("div", {
4809
+ }, !isNotification && React.createElement(TheHeader, {
4810
+ onToggleModel: handleToggleModel
4811
+ }), React.createElement("div", {
4740
4812
  className: "c-body bg-white"
4741
4813
  }, React.createElement(TheContent$1, {
4742
4814
  routes: authRoutes
4743
- }))));
4815
+ }))), React.createElement(ModelSelectRole, {
4816
+ open: openModelSelectRole,
4817
+ onToggleModel: handleToggleModel
4818
+ }));
4744
4819
  };
4745
4820
 
4746
4821
  var buttonTextStyle = {
@@ -6824,8 +6899,80 @@ var SkillList = function SkillList() {
6824
6899
  }))));
6825
6900
  };
6826
6901
 
6827
- var setUserList = createAction("users/setUserList");
6828
- var setStudentList = createAction("users/setStudentList");
6902
+ var MAX_FILE_SIZE = 20097152;
6903
+ var UploadFileButton = function UploadFileButton(_ref) {
6904
+ var fileName = _ref.fileName,
6905
+ maxWidth = _ref.maxWidth,
6906
+ maxHeight = _ref.maxHeight,
6907
+ setFile = _ref.setFile,
6908
+ canDelete = _ref.canDelete,
6909
+ onDelete = _ref.onDelete,
6910
+ isCheckFeedBack = _ref.isCheckFeedBack,
6911
+ onAddImage = _ref.onAddImage;
6912
+ var dispatch = useDispatch();
6913
+ var _useState = useState(""),
6914
+ imagePreviewUrl = _useState[0],
6915
+ setImagePreviewUrl = _useState[1];
6916
+ var imageStyle = {
6917
+ maxWidth: maxWidth || "100%",
6918
+ maxHeight: maxHeight || "100%"
6919
+ };
6920
+ var imageSrc = imagePreviewUrl || getFileUrl(fileName);
6921
+ var handleImageChange = function handleImageChange(e) {
6922
+ e.preventDefault();
6923
+ var reader = new FileReader();
6924
+ var newFile = e.target.files[0];
6925
+ if (newFile.size > MAX_FILE_SIZE) {
6926
+ dispatch(setAlert({
6927
+ type: "danger",
6928
+ message: "File can't be larger than 2MB"
6929
+ }));
6930
+ return;
6931
+ }
6932
+ reader.onloadend = function () {
6933
+ setFile(newFile);
6934
+ setImagePreviewUrl(reader.result);
6935
+ };
6936
+ if (newFile) {
6937
+ reader.readAsDataURL(newFile);
6938
+ }
6939
+ !!onAddImage && onAddImage();
6940
+ };
6941
+ var imagePreviewContainer = imagePreviewUrl || fileName ? React.createElement("img", {
6942
+ style: imageStyle,
6943
+ src: imageSrc,
6944
+ alt: "image"
6945
+ }) : null;
6946
+ return React.createElement("div", {
6947
+ className: "mb-2"
6948
+ }, React.createElement(Form, {
6949
+ className: "mb-2"
6950
+ }, React.createElement(Input, {
6951
+ className: "d-none",
6952
+ type: "file",
6953
+ id: "uploadFile",
6954
+ onChange: handleImageChange,
6955
+ accept: "image/*"
6956
+ }), React.createElement("div", {
6957
+ className: "d-flex align-items-center"
6958
+ }, React.createElement(Label, {
6959
+ htmlFor: "uploadFile",
6960
+ role: "button",
6961
+ tabIndex: 0,
6962
+ className: styles["input-file-label"]
6963
+ }, isCheckFeedBack == true ? React.createElement(MdAttachFile, null) : React.createElement(React.Fragment, null, React.createElement("i", {
6964
+ className: "fa fa-paperclip mr-1",
6965
+ "aria-hidden": "true"
6966
+ }), imagePreviewUrl || fileName ? "Change file" : "Choose file")), canDelete && imagePreviewContainer && React.createElement(Button, {
6967
+ size: "sm",
6968
+ color: "danger",
6969
+ className: styles["delete-avatar-button"] + " ml-2 d-flex align-items-center justify-content-center",
6970
+ onClick: function onClick() {
6971
+ setImagePreviewUrl(null);
6972
+ onDelete && onDelete();
6973
+ }
6974
+ }, React.createElement(FaTrashAlt, null)))), imagePreviewContainer);
6975
+ };
6829
6976
 
6830
6977
  var USER_URL$1 = BASE_URL + "/api/user";
6831
6978
  var CHANGE_PASSWORD = BASE_URL + "/api/Account/changePassword";
@@ -6858,54 +7005,65 @@ var switchAccountUser = function switchAccountUser(id) {
6858
7005
  return api.post(EDU_USER_URL + "/switch-user/" + id);
6859
7006
  };
6860
7007
 
6861
- var USER_URL$2 = "/admin/user";
6862
- var CREATE_USER_URL = "/admin/create-user";
6863
- var TITLE$7 = "User list";
6864
- var HOMEPAGE_TEACHER$1 = "/home";
6865
- var HOMEPAGE_STUDENT$1 = "/home";
6866
- var HOMEPAGE_ADMIN$1 = "/admin/dashboard";
6867
- var HOMEPAGE_PARENT$1 = "/parent";
6868
- var HOMEPAGE_DISTRICT$1 = "/admin/schools";
6869
- var HOMEPAGE_EDU_TEACHER$1 = "/list-student";
6870
- var useUserList = function useUserList() {
6871
- var history = useHistory();
6872
- var query = new URLSearchParams(location.search);
6873
- var queryName = query.get("query");
6874
- var userList = useSelector(function (state) {
6875
- return state.users.userList;
6876
- });
6877
- var totalItems = useSelector(function (state) {
6878
- return state.users.totalItems;
6879
- });
6880
- var _useFilters = useFilters(),
6881
- filters = _useFilters.filters,
6882
- changeFilters = _useFilters.changeFilters;
6883
- var _useState = useState(!!queryName ? queryName : ""),
6884
- fullName = _useState[0],
6885
- setFullName = _useState[1];
6886
- var isDistrict = window.location.host.includes("-district");
7008
+ var initValue$3 = {
7009
+ id: "",
7010
+ firstName: "",
7011
+ lastName: "",
7012
+ email: "",
7013
+ dateOfBirth: "",
7014
+ roles: [],
7015
+ isActive: true,
7016
+ profileImageFileName: ""
7017
+ };
7018
+ var USER_LIST_URL = "/admin/user";
7019
+ var TITLE$7 = "User detail";
7020
+ var useUserDetail = function useUserDetail(id) {
6887
7021
  var dispatch = useDispatch();
6888
- var getData = useCallback(function (fullName) {
7022
+ var history = useHistory();
7023
+ var _useState = useState(initValue$3),
7024
+ userDetail = _useState[0],
7025
+ setUserDetail = _useState[1];
7026
+ var _useState2 = useState(null),
7027
+ file = _useState2[0],
7028
+ setFile = _useState2[1];
7029
+ var _useState3 = useState(false),
7030
+ edited = _useState3[0],
7031
+ setEdited = _useState3[1];
7032
+ var setEditedTrue = function setEditedTrue() {
7033
+ try {
7034
+ localStorage.setItem(window.location.href, "true");
7035
+ setEdited(true);
7036
+ return Promise.resolve();
7037
+ } catch (e) {
7038
+ return Promise.reject(e);
7039
+ }
7040
+ };
7041
+ var _useState4 = useState([]),
7042
+ currentRoles = _useState4[0],
7043
+ setCurrentRoles = _useState4[1];
7044
+ useEffect(function () {
7045
+ document.title = TITLE$7;
7046
+ setEdited(false);
7047
+ if (!!localStorage.getItem(window.location.href)) localStorage.removeItem(window.location.href);
7048
+ }, []);
7049
+ useEffect(function () {
7050
+ !!id && getData();
7051
+ }, [id]);
7052
+ var getData = useCallback(function () {
6889
7053
  try {
6890
7054
  var _temp2 = function _temp2() {
6891
7055
  dispatch(setLoading(false));
6892
7056
  };
6893
7057
  dispatch(setLoading(true));
6894
7058
  var _temp = _catch(function () {
6895
- return Promise.resolve(fullName ? get$5(_extends({}, filters, {
6896
- searchString: fullName
6897
- })) : get$5(filters)).then(function (res) {
6898
- var _res$data = res.data,
6899
- items = _res$data.items,
6900
- totalItems = _res$data.totalItems;
6901
- for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {
6902
- var user = _step.value;
6903
- user.roles = user.roles.includes("EduTeacher") ? [ROLES.EDUTEACHER] : user.roles;
6904
- }
6905
- dispatch(setUserList({
6906
- userList: items,
6907
- totalItems: totalItems
7059
+ return Promise.resolve(getById$3(id)).then(function (res) {
7060
+ var _res$data$roles, _res$data, _res$data2;
7061
+ setUserDetail(_extends({}, res.data, {
7062
+ dateOfBirth: format(new Date(res.data.dateOfBirth), DATE_FORMAT),
7063
+ roles: res.data.roles.includes("EduTeacher") ? [ROLES.EDUTEACHER] : res.data.roles
6908
7064
  }));
7065
+ setCurrentRoles((_res$data$roles = res === null || res === void 0 ? void 0 : (_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.roles) != null ? _res$data$roles : []);
7066
+ document.title = (_res$data2 = res.data) === null || _res$data2 === void 0 ? void 0 : _res$data2.fullName;
6909
7067
  });
6910
7068
  }, function (err) {
6911
7069
  var _err$response, _err$response$data;
@@ -6918,664 +7076,184 @@ var useUserList = function useUserList() {
6918
7076
  } catch (e) {
6919
7077
  return Promise.reject(e);
6920
7078
  }
6921
- }, [dispatch, filters]);
6922
- useEffect(function () {
6923
- document.title = TITLE$7;
7079
+ }, [id]);
7080
+ var backToList = useCallback(function (user) {
7081
+ !!user && typeof user === "string" ? history.push(USER_LIST_URL + ("?query=" + user)) : history.push(USER_LIST_URL);
6924
7082
  }, []);
6925
- useEffect(function () {
6926
- if (!!fullName) {
6927
- getData(fullName);
6928
- setFullName(null);
6929
- } else {
6930
- getData();
6931
- }
6932
- }, [filters]);
6933
- var removeData = useCallback(function (id) {
6934
- dispatch(setLoading(true));
7083
+ var confirmData = useCallback(function (data) {
6935
7084
  try {
6936
- dispatch(setModal({
6937
- isOpen: true,
6938
- type: "warning",
6939
- message: "Do you want to remove this user?",
6940
- onConfirm: function () {
6941
- try {
6942
- return Promise.resolve(remove$3(id)).then(function () {
6943
- dispatch(setAlert({
6944
- type: "success",
6945
- message: "Remove user successfully"
6946
- }));
6947
- changeFilters({
6948
- currentPage: 1
7085
+ var _temp6 = function _temp6() {
7086
+ dispatch(setLoading(false));
7087
+ };
7088
+ dispatch(setLoading(true));
7089
+ var _temp5 = _catch(function () {
7090
+ function _temp4() {
7091
+ var next = !!id ? update$5 : create$5;
7092
+ !id && delete data.id;
7093
+ return Promise.resolve(next(data)).then(function (result) {
7094
+ if (!!result) {
7095
+ getById$3(result.data.id).then(function (e) {
7096
+ backToList(e.data.fullName);
6949
7097
  });
6950
- });
6951
- } catch (e) {
6952
- return Promise.reject(e);
6953
- }
7098
+ }
7099
+ if (!id) {
7100
+ alert("Password of " + result.data.email + " is " + ("\"" + result.data.password + "\""));
7101
+ }
7102
+ dispatch(setAlert({
7103
+ type: "success",
7104
+ message: (!!id ? "Update" : "Create") + " user successfully"
7105
+ }));
7106
+ });
6954
7107
  }
6955
- }));
6956
- } catch (err) {
6957
- var _err$response2, _err$response2$data;
6958
- dispatch(setAlert({
6959
- type: "danger",
6960
- message: ((_err$response2 = err.response) === null || _err$response2 === void 0 ? void 0 : (_err$response2$data = _err$response2.data) === null || _err$response2$data === void 0 ? void 0 : _err$response2$data.title) || err.message
6961
- }));
7108
+ var _temp3 = function () {
7109
+ if (!!file) {
7110
+ var formData = new FormData();
7111
+ var name = file.name;
7112
+ formData.append("file", file, name);
7113
+ return Promise.resolve(systemProfileUpload(formData)).then(function (res) {
7114
+ var _res$data3;
7115
+ var imageUrl = res === null || res === void 0 ? void 0 : (_res$data3 = res.data) === null || _res$data3 === void 0 ? void 0 : _res$data3.key;
7116
+ data.profileImageFileName = imageUrl;
7117
+ });
7118
+ }
7119
+ }();
7120
+ return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
7121
+ }, function (err) {
7122
+ var _err$response2, _err$response2$data;
7123
+ dispatch(setAlert({
7124
+ type: "danger",
7125
+ message: ((_err$response2 = err.response) === null || _err$response2 === void 0 ? void 0 : (_err$response2$data = _err$response2.data) === null || _err$response2$data === void 0 ? void 0 : _err$response2$data.title) || err.message
7126
+ }));
7127
+ });
7128
+ return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
7129
+ } catch (e) {
7130
+ return Promise.reject(e);
6962
7131
  }
6963
- dispatch(setLoading(false));
6964
- }, [filters]);
6965
- var redirectLoginUser = function redirectLoginUser(res) {
6966
- var _res$data2 = res.data,
6967
- token = _res$data2.token,
6968
- id = _res$data2.id,
6969
- firstName = _res$data2.firstName,
6970
- lastName = _res$data2.lastName,
6971
- roles = _res$data2.roles,
6972
- email = _res$data2.email,
6973
- profileImageFileName = _res$data2.profileImageFileName;
6974
- localStorage.setItem(ACCESS_TOKEN, token);
6975
- localStorage.removeItem(NOTIFICATION_ALERT_KEY);
6976
- dispatch(setUser({
6977
- id: id,
6978
- firstName: firstName,
6979
- lastName: lastName,
6980
- roles: roles,
6981
- email: email,
6982
- profileImageFileName: profileImageFileName
6983
- }));
6984
- if (isDistrict) {
6985
- history.push(HOMEPAGE_DISTRICT$1);
6986
- } else if (roles.includes("Admin")) {
6987
- history.push(HOMEPAGE_ADMIN$1);
6988
- } else if (roles.includes("Teacher") || roles.includes("Assistant")) {
6989
- history.push(HOMEPAGE_TEACHER$1);
6990
- } else if (roles.includes("Student")) {
6991
- history.push(HOMEPAGE_STUDENT$1);
6992
- } else if (roles.includes("Parent")) {
6993
- history.push(HOMEPAGE_PARENT$1);
6994
- } else if (roles.includes("EduTeacher")) {
6995
- history.push(HOMEPAGE_EDU_TEACHER$1);
6996
- } else if (roles.includes("Counselor") || roles.includes("SecondaryTeacher")) {
6997
- history.push(HOMEPAGE_TEACHER$1);
7132
+ }, [id, file]);
7133
+ var handleDisableRoles = function handleDisableRoles(currentRoles) {
7134
+ return ["Student", "Parent", "EduTeacher"].includes(currentRoles);
7135
+ };
7136
+ var confirmChangePassword = function confirmChangePassword(data) {
7137
+ try {
7138
+ var _temp8 = function _temp8() {
7139
+ dispatch(setLoading(false));
7140
+ };
7141
+ dispatch(setLoading(true));
7142
+ var _temp7 = _catch(function () {
7143
+ return Promise.resolve(changePassword(data)).then(function () {
7144
+ dispatch(setAlert({
7145
+ type: "success",
7146
+ message: "Change password successfully"
7147
+ }));
7148
+ });
7149
+ }, function (e) {
7150
+ var _e$response, _e$response$data;
7151
+ dispatch(setAlert({
7152
+ type: "danger",
7153
+ message: ((_e$response = e.response) === null || _e$response === void 0 ? void 0 : (_e$response$data = _e$response.data) === null || _e$response$data === void 0 ? void 0 : _e$response$data.title) || e.message
7154
+ }));
7155
+ });
7156
+ return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7));
7157
+ } catch (e) {
7158
+ return Promise.reject(e);
6998
7159
  }
6999
7160
  };
7000
- var swicthUser = useCallback(function (id) {
7161
+ var forgotPasswordRequest = useCallback(function (data) {
7001
7162
  try {
7002
- var _temp3 = _catch(function () {
7003
- return Promise.resolve(switchAccountUser(id)).then(function (res) {
7004
- var data = res.data;
7005
- dispatch(setModal({
7006
- isOpen: true,
7007
- type: "warning",
7008
- message: "Do you want to impersonate this user?",
7009
- onConfirm: function () {
7010
- try {
7011
- var _temp5 = function _temp5() {
7012
- dispatch(setLoading(false));
7013
- };
7014
- dispatch(setLoading(true));
7015
- var _temp4 = _catch(function () {
7016
- var req = {
7017
- email: data.email,
7018
- password: "default",
7019
- accessToken: data.token
7020
- };
7021
- return Promise.resolve(logIn(req)).then(function (res) {
7022
- localStorage.clear();
7023
- redirectLoginUser(res);
7024
- });
7025
- }, function (err) {
7026
- var _err$response3, _err$response3$data;
7027
- setAlert({
7028
- type: "danger",
7029
- message: ((_err$response3 = err.response) === null || _err$response3 === void 0 ? void 0 : (_err$response3$data = _err$response3.data) === null || _err$response3$data === void 0 ? void 0 : _err$response3$data.title) || err.message
7030
- });
7031
- });
7032
- return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
7033
- } catch (e) {
7034
- return Promise.reject(e);
7035
- }
7036
- }
7163
+ var _temp10 = function _temp10() {
7164
+ dispatch(setLoading(false));
7165
+ };
7166
+ dispatch(setLoading(true));
7167
+ var _temp9 = _catch(function () {
7168
+ return Promise.resolve(forgotChangePassword(data)).then(function () {
7169
+ dispatch(setAlert({
7170
+ type: "success",
7171
+ message: "Send forgot password link successfully"
7037
7172
  }));
7038
7173
  });
7039
7174
  }, function (err) {
7040
- var _err$response4, _err$response4$data;
7175
+ var _err$response3, _err$response3$data;
7041
7176
  dispatch(setAlert({
7042
7177
  type: "danger",
7043
- message: ((_err$response4 = err.response) === null || _err$response4 === void 0 ? void 0 : (_err$response4$data = _err$response4.data) === null || _err$response4$data === void 0 ? void 0 : _err$response4$data.title) || err.message
7178
+ message: ((_err$response3 = err.response) === null || _err$response3 === void 0 ? void 0 : (_err$response3$data = _err$response3.data) === null || _err$response3$data === void 0 ? void 0 : _err$response3$data.title) || err.message || "Error occured"
7044
7179
  }));
7045
7180
  });
7046
- return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(function () {}) : void 0);
7181
+ return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9));
7047
7182
  } catch (e) {
7048
7183
  return Promise.reject(e);
7049
7184
  }
7050
- }, [filters]);
7051
- var reDirectDetailPage = function reDirectDetailPage(id) {
7052
- var url = !!id ? USER_URL$2 + "/" + id : CREATE_USER_URL;
7053
- history.push(url);
7054
- };
7185
+ }, []);
7055
7186
  return {
7056
- userList: userList,
7057
- totalItems: totalItems,
7058
- filters: filters,
7059
- queryName: queryName,
7060
- getData: getData,
7061
- removeData: removeData,
7062
- changeFilters: changeFilters,
7063
- reDirectDetailPage: reDirectDetailPage,
7064
- swicthUser: swicthUser
7187
+ userDetail: userDetail,
7188
+ backToList: backToList,
7189
+ confirmData: confirmData,
7190
+ file: file,
7191
+ setFile: setFile,
7192
+ edited: edited,
7193
+ setEdited: setEdited,
7194
+ setEditedTrue: setEditedTrue,
7195
+ confirmChangePassword: confirmChangePassword,
7196
+ forgotPasswordRequest: forgotPasswordRequest,
7197
+ currentRoles: currentRoles,
7198
+ handleDisableRoles: handleDisableRoles
7065
7199
  };
7066
7200
  };
7067
7201
 
7068
- var SearchBox = function SearchBox(_ref) {
7069
- var initValue = _ref.initValue,
7070
- onSearch = _ref.onSearch,
7071
- placeholder = _ref.placeholder,
7072
- className = _ref.className,
7073
- style = _ref.style;
7074
- var _useState = useState(initValue),
7075
- searchString = _useState[0],
7076
- setSearchString = _useState[1];
7077
- useEffect(function () {
7078
- setSearchString(initValue);
7079
- }, [initValue]);
7080
- var onKeyUp = useCallback(function (e) {
7081
- e.key === "Enter" && onSearch(searchString);
7082
- }, [searchString, onSearch]);
7083
- return React.createElement(Input, {
7084
- placeholder: placeholder,
7085
- value: searchString,
7086
- onChange: function onChange(e) {
7087
- return setSearchString(e.target.value);
7088
- },
7089
- onKeyUp: onKeyUp,
7090
- className: className,
7091
- style: style
7092
- });
7093
- };
7094
- SearchBox.defaultProps = {
7095
- placeholder: "Type something to search",
7096
- className: "",
7097
- style: {}
7098
- };
7099
- var SearchBox$1 = memo(SearchBox);
7100
-
7101
- var searchInputStyle = {
7102
- height: 38
7103
- };
7104
- var SearchBoxContainer = function SearchBoxContainer(_ref) {
7105
- var text = _ref.text,
7106
- initValue = _ref.initValue,
7107
- onClick = _ref.onClick,
7108
- onSearch = _ref.onSearch,
7109
- placeholder = _ref.placeholder;
7110
- return React.createElement("div", {
7111
- className: "d-flex align-items-center"
7112
- }, React.createElement("div", null, React.createElement(AddButton, {
7113
- text: text,
7114
- onClick: onClick
7115
- })), React.createElement("div", {
7116
- className: "flex-grow-1 ml-2"
7117
- }, React.createElement(SearchBox$1, {
7118
- initValue: initValue,
7119
- onSearch: onSearch,
7120
- placeholder: placeholder,
7121
- style: searchInputStyle
7122
- })));
7123
- };
7124
- SearchBoxContainer.defaultProps = {
7125
- placeholder: "Type something to search"
7126
- };
7202
+ var userSchema = object({
7203
+ firstName: string().required("First name is required"),
7204
+ lastName: string().required("Last name is required"),
7205
+ dateOfBirth: string().required("Date of birth is required"),
7206
+ email: string().email("Email is invalid").required("Email is required"),
7207
+ roles: array().of(string()).min(1, "Role is required")
7208
+ });
7127
7209
 
7128
- var utcToLocalTime = (function (time, FORMAT) {
7129
- if (time === DATE_MIN_VALUE) return "";
7130
- try {
7131
- return moment.utc(time).local().format(FORMAT || "yyyy-MM-DD");
7132
- } catch (_unused) {
7133
- return "";
7134
- }
7210
+ var changePasswordSchema = object({
7211
+ oldPassword: string().required("Current password is required"),
7212
+ newPassword: string().required("New password is required"),
7213
+ confirmedNewPassword: string().required("Confirm password is required")
7135
7214
  });
7136
7215
 
7137
- var header$2 = "User";
7138
- var UserList = function UserList() {
7139
- var _useUserList = useUserList(),
7140
- queryName = _useUserList.queryName,
7141
- userList = _useUserList.userList,
7142
- totalItems = _useUserList.totalItems,
7143
- filters = _useUserList.filters,
7144
- removeData = _useUserList.removeData,
7145
- changeFilters = _useUserList.changeFilters,
7146
- reDirectDetailPage = _useUserList.reDirectDetailPage,
7147
- swicthUser = _useUserList.swicthUser;
7148
- var _useTranslation = useTranslation(),
7149
- t = _useTranslation.t;
7150
- return React.createElement("div", {
7151
- className: "fadeIn animated"
7152
- }, React.createElement("h5", {
7153
- className: "mb-2"
7154
- }, t("" + header$2)), React.createElement(Row, {
7155
- className: "my-2"
7156
- }, React.createElement(Col, {
7157
- md: 8
7158
- }, React.createElement(SearchBoxContainer, {
7159
- text: t("create_user"),
7160
- onClick: function onClick() {
7161
- return reDirectDetailPage();
7162
- },
7163
- initValue: !!queryName ? queryName : "",
7164
- onSearch: function onSearch(searchString) {
7165
- return changeFilters({
7166
- searchString: searchString
7167
- });
7168
- },
7169
- placeholder: t("type_something_to_search_by_user_name")
7170
- })), React.createElement(Col, {
7171
- md: 4,
7172
- className: "d-flex justify-content-end align-items-center"
7173
- }, t("total_of_users"), " : ", totalItems)), React.createElement(Row, {
7174
- className: "mb-2"
7175
- }, React.createElement(Col, {
7176
- md: 12
7177
- }, userList && userList.length > 0 ? React.createElement("div", null, React.createElement(Table, {
7178
- bordered: true,
7179
- hover: true,
7180
- striped: true,
7181
- responsive: true,
7182
- size: "sm"
7183
- }, React.createElement("thead", null, React.createElement("tr", null, React.createElement("th", {
7184
- className: "align-top"
7185
- }, t("name")), React.createElement("th", {
7186
- className: "align-top"
7187
- }, t("email")), React.createElement("th", {
7188
- className: "align-top"
7189
- }, t("age")), React.createElement("th", {
7190
- className: "align-top"
7191
- }, t("role")), React.createElement("th", {
7192
- className: "align-top"
7193
- }, t("active_status")), React.createElement("th", {
7194
- className: "align-top"
7195
- }, t("created_time")), React.createElement("th", {
7196
- className: "text-center"
7197
- }, t("action")))), React.createElement("tbody", null, userList.map(function (record) {
7198
- return React.createElement("tr", {
7199
- key: record.id
7200
- }, React.createElement("td", {
7201
- className: "align-middle"
7202
- }, React.createElement(LinkEditButton, {
7203
- label: "" + record.fullName,
7204
- onClick: function onClick() {
7205
- return reDirectDetailPage(record.id);
7206
- }
7207
- })), React.createElement("td", {
7208
- className: "align-middle"
7209
- }, record.email), React.createElement("td", {
7210
- className: "align-middle"
7211
- }, differenceInCalendarYears(new Date(), new Date(record.dateOfBirth))), React.createElement("td", {
7212
- className: "align-middle"
7213
- }, !!record.roles && record.roles.map(function (role) {
7214
- return role === "SecondaryTeacher" ? "SupportTeacher" : role;
7215
- }).join(", ")), React.createElement("td", {
7216
- className: "align-middle"
7217
- }, record.isActive ? t("active") : t("inactive")), React.createElement("td", {
7218
- className: "align-middle"
7219
- }, utcToLocalTime(record === null || record === void 0 ? void 0 : record.createTime, "yyyy-MM-DD HH:mm")), React.createElement("td", {
7220
- className: "text-center align-middle"
7221
- }, React.createElement(FaUsersCog, {
7222
- style: {
7223
- fontSize: "18px",
7224
- marginRight: "10px",
7225
- cursor: "pointer"
7226
- },
7227
- onClick: function onClick() {
7228
- return swicthUser(record.id);
7229
- }
7230
- }), React.createElement(DeleteButtonIcon, {
7231
- onClick: function onClick() {
7232
- return removeData(record.id);
7233
- }
7234
- })));
7235
- })))) : React.createElement(EmptyDataAlert, {
7236
- label: t("user")
7237
- })), React.createElement(Col, {
7238
- md: 12
7239
- }, React.createElement(CustomPagination, {
7240
- filters: filters,
7241
- totalRecordCount: totalItems,
7242
- changePageSize: function changePageSize(pageSize) {
7243
- return changeFilters({
7244
- pageSize: pageSize
7245
- });
7246
- },
7247
- changePage: function changePage(currentPage) {
7248
- return changeFilters({
7249
- currentPage: currentPage
7250
- });
7251
- }
7252
- }))));
7253
- };
7254
-
7255
- var MAX_FILE_SIZE = 20097152;
7256
- var UploadFileButton = function UploadFileButton(_ref) {
7257
- var fileName = _ref.fileName,
7258
- maxWidth = _ref.maxWidth,
7259
- maxHeight = _ref.maxHeight,
7260
- setFile = _ref.setFile,
7261
- canDelete = _ref.canDelete,
7262
- onDelete = _ref.onDelete,
7263
- isCheckFeedBack = _ref.isCheckFeedBack,
7264
- onAddImage = _ref.onAddImage;
7265
- var dispatch = useDispatch();
7266
- var _useState = useState(""),
7267
- imagePreviewUrl = _useState[0],
7268
- setImagePreviewUrl = _useState[1];
7269
- var imageStyle = {
7270
- maxWidth: maxWidth || "100%",
7271
- maxHeight: maxHeight || "100%"
7216
+ var CREATE_USER = "create_user";
7217
+ var EDIT_USER_HEADER = "edit_user";
7218
+ var CHANGE_PASSWORD$1 = "change_password";
7219
+ var UserDetail = function UserDetail() {
7220
+ var _useParams = useParams(),
7221
+ id = _useParams.id;
7222
+ var user = useSelector(function (state) {
7223
+ return state.common.user;
7224
+ });
7225
+ var _useTranslation = useTranslation(),
7226
+ t = _useTranslation.t;
7227
+ var _useUserDetail = useUserDetail(id),
7228
+ userDetail = _useUserDetail.userDetail,
7229
+ backToList = _useUserDetail.backToList,
7230
+ confirmData = _useUserDetail.confirmData,
7231
+ file = _useUserDetail.file,
7232
+ setFile = _useUserDetail.setFile,
7233
+ edited = _useUserDetail.edited,
7234
+ setEdited = _useUserDetail.setEdited,
7235
+ setEditedTrue = _useUserDetail.setEditedTrue,
7236
+ confirmChangePassword = _useUserDetail.confirmChangePassword,
7237
+ forgotPasswordRequest = _useUserDetail.forgotPasswordRequest,
7238
+ currentRoles = _useUserDetail.currentRoles,
7239
+ handleDisableRoles = _useUserDetail.handleDisableRoles;
7240
+ var initialValueForm = {
7241
+ oldPassword: "",
7242
+ newPassword: "",
7243
+ confirmedNewPassword: ""
7272
7244
  };
7273
- var imageSrc = imagePreviewUrl || getFileUrl(fileName);
7274
- var handleImageChange = function handleImageChange(e) {
7275
- e.preventDefault();
7276
- var reader = new FileReader();
7277
- var newFile = e.target.files[0];
7278
- if (newFile.size > MAX_FILE_SIZE) {
7279
- dispatch(setAlert({
7280
- type: "danger",
7281
- message: "File can't be larger than 2MB"
7282
- }));
7283
- return;
7284
- }
7285
- reader.onloadend = function () {
7286
- setFile(newFile);
7287
- setImagePreviewUrl(reader.result);
7288
- };
7289
- if (newFile) {
7290
- reader.readAsDataURL(newFile);
7291
- }
7292
- !!onAddImage && onAddImage();
7245
+ var header = !!id ? t("" + EDIT_USER_HEADER) : t("" + CREATE_USER);
7246
+ var confirmText = !!id ? t("update") : t("create");
7247
+ var getFile = function getFile() {
7248
+ var url = window.location.origin + "/api/ExportDataUser/" + id;
7249
+ window.open(url);
7293
7250
  };
7294
- var imagePreviewContainer = imagePreviewUrl || fileName ? React.createElement("img", {
7295
- style: imageStyle,
7296
- src: imageSrc,
7297
- alt: "image"
7298
- }) : null;
7299
- return React.createElement("div", {
7300
- className: "mb-2"
7301
- }, React.createElement(Form, {
7302
- className: "mb-2"
7303
- }, React.createElement(Input, {
7304
- className: "d-none",
7305
- type: "file",
7306
- id: "uploadFile",
7307
- onChange: handleImageChange,
7308
- accept: "image/*"
7309
- }), React.createElement("div", {
7310
- className: "d-flex align-items-center"
7311
- }, React.createElement(Label, {
7312
- htmlFor: "uploadFile",
7313
- role: "button",
7314
- tabIndex: 0,
7315
- className: styles["input-file-label"]
7316
- }, isCheckFeedBack == true ? React.createElement(MdAttachFile, null) : React.createElement(React.Fragment, null, React.createElement("i", {
7317
- className: "fa fa-paperclip mr-1",
7318
- "aria-hidden": "true"
7319
- }), imagePreviewUrl || fileName ? "Change file" : "Choose file")), canDelete && imagePreviewContainer && React.createElement(Button, {
7320
- size: "sm",
7321
- color: "danger",
7322
- className: styles["delete-avatar-button"] + " ml-2 d-flex align-items-center justify-content-center",
7323
- onClick: function onClick() {
7324
- setImagePreviewUrl(null);
7325
- onDelete && onDelete();
7326
- }
7327
- }, React.createElement(FaTrashAlt, null)))), imagePreviewContainer);
7328
- };
7329
-
7330
- var initValue$3 = {
7331
- id: "",
7332
- firstName: "",
7333
- lastName: "",
7334
- email: "",
7335
- dateOfBirth: "",
7336
- roles: [],
7337
- isActive: true,
7338
- profileImageFileName: ""
7339
- };
7340
- var USER_LIST_URL = "/admin/user";
7341
- var TITLE$8 = "User detail";
7342
- var useUserDetail = function useUserDetail(id) {
7343
- var dispatch = useDispatch();
7344
- var history = useHistory();
7345
- var _useState = useState(initValue$3),
7346
- userDetail = _useState[0],
7347
- setUserDetail = _useState[1];
7348
- var _useState2 = useState(null),
7349
- file = _useState2[0],
7350
- setFile = _useState2[1];
7351
- var _useState3 = useState(false),
7352
- edited = _useState3[0],
7353
- setEdited = _useState3[1];
7354
- var setEditedTrue = function setEditedTrue() {
7251
+ var onResetPw = function onResetPw(email) {
7355
7252
  try {
7356
- localStorage.setItem(window.location.href, "true");
7357
- setEdited(true);
7358
- return Promise.resolve();
7359
- } catch (e) {
7360
- return Promise.reject(e);
7361
- }
7362
- };
7363
- var _useState4 = useState([]),
7364
- currentRoles = _useState4[0],
7365
- setCurrentRoles = _useState4[1];
7366
- useEffect(function () {
7367
- document.title = TITLE$8;
7368
- setEdited(false);
7369
- if (!!localStorage.getItem(window.location.href)) localStorage.removeItem(window.location.href);
7370
- }, []);
7371
- useEffect(function () {
7372
- !!id && getData();
7373
- }, [id]);
7374
- var getData = useCallback(function () {
7375
- try {
7376
- var _temp2 = function _temp2() {
7377
- dispatch(setLoading(false));
7378
- };
7379
- dispatch(setLoading(true));
7380
- var _temp = _catch(function () {
7381
- return Promise.resolve(getById$3(id)).then(function (res) {
7382
- var _res$data$roles, _res$data, _res$data2;
7383
- setUserDetail(_extends({}, res.data, {
7384
- dateOfBirth: format(new Date(res.data.dateOfBirth), DATE_FORMAT),
7385
- roles: res.data.roles.includes("EduTeacher") ? [ROLES.EDUTEACHER] : res.data.roles
7386
- }));
7387
- setCurrentRoles((_res$data$roles = res === null || res === void 0 ? void 0 : (_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.roles) != null ? _res$data$roles : []);
7388
- document.title = (_res$data2 = res.data) === null || _res$data2 === void 0 ? void 0 : _res$data2.fullName;
7389
- });
7390
- }, function (err) {
7391
- var _err$response, _err$response$data;
7392
- dispatch(setAlert({
7393
- type: "danger",
7394
- message: ((_err$response = err.response) === null || _err$response === void 0 ? void 0 : (_err$response$data = _err$response.data) === null || _err$response$data === void 0 ? void 0 : _err$response$data.title) || err.message
7395
- }));
7396
- });
7397
- return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
7398
- } catch (e) {
7399
- return Promise.reject(e);
7400
- }
7401
- }, [id]);
7402
- var backToList = useCallback(function (user) {
7403
- !!user && typeof user === "string" ? history.push(USER_LIST_URL + ("?query=" + user)) : history.push(USER_LIST_URL);
7404
- }, []);
7405
- var confirmData = useCallback(function (data) {
7406
- try {
7407
- var _temp6 = function _temp6() {
7408
- dispatch(setLoading(false));
7409
- };
7410
- dispatch(setLoading(true));
7411
- var _temp5 = _catch(function () {
7412
- function _temp4() {
7413
- var next = !!id ? update$5 : create$5;
7414
- !id && delete data.id;
7415
- return Promise.resolve(next(data)).then(function (result) {
7416
- if (!!result) {
7417
- getById$3(result.data.id).then(function (e) {
7418
- backToList(e.data.fullName);
7419
- });
7420
- }
7421
- if (!id) {
7422
- alert("Password of " + result.data.email + " is " + ("\"" + result.data.password + "\""));
7423
- }
7424
- dispatch(setAlert({
7425
- type: "success",
7426
- message: (!!id ? "Update" : "Create") + " user successfully"
7427
- }));
7428
- });
7429
- }
7430
- var _temp3 = function () {
7431
- if (!!file) {
7432
- var formData = new FormData();
7433
- var name = file.name;
7434
- formData.append("file", file, name);
7435
- return Promise.resolve(systemProfileUpload(formData)).then(function (res) {
7436
- var _res$data3;
7437
- var imageUrl = res === null || res === void 0 ? void 0 : (_res$data3 = res.data) === null || _res$data3 === void 0 ? void 0 : _res$data3.key;
7438
- data.profileImageFileName = imageUrl;
7439
- });
7440
- }
7441
- }();
7442
- return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
7443
- }, function (err) {
7444
- var _err$response2, _err$response2$data;
7445
- dispatch(setAlert({
7446
- type: "danger",
7447
- message: ((_err$response2 = err.response) === null || _err$response2 === void 0 ? void 0 : (_err$response2$data = _err$response2.data) === null || _err$response2$data === void 0 ? void 0 : _err$response2$data.title) || err.message
7448
- }));
7449
- });
7450
- return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
7451
- } catch (e) {
7452
- return Promise.reject(e);
7453
- }
7454
- }, [id, file]);
7455
- var handleDisableRoles = function handleDisableRoles(currentRoles) {
7456
- return ["Student", "Parent", "EduTeacher"].includes(currentRoles);
7457
- };
7458
- var confirmChangePassword = function confirmChangePassword(data) {
7459
- try {
7460
- var _temp8 = function _temp8() {
7461
- dispatch(setLoading(false));
7462
- };
7463
- dispatch(setLoading(true));
7464
- var _temp7 = _catch(function () {
7465
- return Promise.resolve(changePassword(data)).then(function () {
7466
- dispatch(setAlert({
7467
- type: "success",
7468
- message: "Change password successfully"
7469
- }));
7470
- });
7471
- }, function (e) {
7472
- var _e$response, _e$response$data;
7473
- dispatch(setAlert({
7474
- type: "danger",
7475
- message: ((_e$response = e.response) === null || _e$response === void 0 ? void 0 : (_e$response$data = _e$response.data) === null || _e$response$data === void 0 ? void 0 : _e$response$data.title) || e.message
7476
- }));
7477
- });
7478
- return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7));
7479
- } catch (e) {
7480
- return Promise.reject(e);
7481
- }
7482
- };
7483
- var forgotPasswordRequest = useCallback(function (data) {
7484
- try {
7485
- var _temp10 = function _temp10() {
7486
- dispatch(setLoading(false));
7487
- };
7488
- dispatch(setLoading(true));
7489
- var _temp9 = _catch(function () {
7490
- return Promise.resolve(forgotChangePassword(data)).then(function () {
7491
- dispatch(setAlert({
7492
- type: "success",
7493
- message: "Send forgot password link successfully"
7494
- }));
7495
- });
7496
- }, function (err) {
7497
- var _err$response3, _err$response3$data;
7498
- dispatch(setAlert({
7499
- type: "danger",
7500
- message: ((_err$response3 = err.response) === null || _err$response3 === void 0 ? void 0 : (_err$response3$data = _err$response3.data) === null || _err$response3$data === void 0 ? void 0 : _err$response3$data.title) || err.message || "Error occured"
7501
- }));
7502
- });
7503
- return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9));
7504
- } catch (e) {
7505
- return Promise.reject(e);
7506
- }
7507
- }, []);
7508
- return {
7509
- userDetail: userDetail,
7510
- backToList: backToList,
7511
- confirmData: confirmData,
7512
- file: file,
7513
- setFile: setFile,
7514
- edited: edited,
7515
- setEdited: setEdited,
7516
- setEditedTrue: setEditedTrue,
7517
- confirmChangePassword: confirmChangePassword,
7518
- forgotPasswordRequest: forgotPasswordRequest,
7519
- currentRoles: currentRoles,
7520
- handleDisableRoles: handleDisableRoles
7521
- };
7522
- };
7523
-
7524
- var userSchema = object({
7525
- firstName: string().required("First name is required"),
7526
- lastName: string().required("Last name is required"),
7527
- dateOfBirth: string().required("Date of birth is required"),
7528
- email: string().email("Email is invalid").required("Email is required"),
7529
- roles: array().of(string()).min(1, "Role is required")
7530
- });
7531
-
7532
- var changePasswordSchema = object({
7533
- oldPassword: string().required("Current password is required"),
7534
- newPassword: string().required("New password is required"),
7535
- confirmedNewPassword: string().required("Confirm password is required")
7536
- });
7537
-
7538
- var CREATE_USER = "create_user";
7539
- var EDIT_USER_HEADER = "edit_user";
7540
- var CHANGE_PASSWORD$1 = "change_password";
7541
- var UserDetail = function UserDetail() {
7542
- var _useParams = useParams(),
7543
- id = _useParams.id;
7544
- var user = useSelector(function (state) {
7545
- return state.common.user;
7546
- });
7547
- var _useTranslation = useTranslation(),
7548
- t = _useTranslation.t;
7549
- var _useUserDetail = useUserDetail(id),
7550
- userDetail = _useUserDetail.userDetail,
7551
- backToList = _useUserDetail.backToList,
7552
- confirmData = _useUserDetail.confirmData,
7553
- file = _useUserDetail.file,
7554
- setFile = _useUserDetail.setFile,
7555
- edited = _useUserDetail.edited,
7556
- setEdited = _useUserDetail.setEdited,
7557
- setEditedTrue = _useUserDetail.setEditedTrue,
7558
- confirmChangePassword = _useUserDetail.confirmChangePassword,
7559
- forgotPasswordRequest = _useUserDetail.forgotPasswordRequest,
7560
- currentRoles = _useUserDetail.currentRoles,
7561
- handleDisableRoles = _useUserDetail.handleDisableRoles;
7562
- var initialValueForm = {
7563
- oldPassword: "",
7564
- newPassword: "",
7565
- confirmedNewPassword: ""
7566
- };
7567
- var header = !!id ? t("" + EDIT_USER_HEADER) : t("" + CREATE_USER);
7568
- var confirmText = !!id ? t("update") : t("create");
7569
- var getFile = function getFile() {
7570
- var url = window.location.origin + "/api/ExportDataUser/" + id;
7571
- window.open(url);
7572
- };
7573
- var onResetPw = function onResetPw(email) {
7574
- try {
7575
- var data = {
7576
- email: email
7577
- };
7578
- forgotPasswordRequest(data);
7253
+ var data = {
7254
+ email: email
7255
+ };
7256
+ forgotPasswordRequest(data);
7579
7257
  return Promise.resolve();
7580
7258
  } catch (e) {
7581
7259
  return Promise.reject(e);
@@ -7961,6 +7639,15 @@ var CommonHeader = function CommonHeader(_ref) {
7961
7639
  }, header))));
7962
7640
  };
7963
7641
 
7642
+ var utcToLocalTime = (function (time, FORMAT) {
7643
+ if (time === DATE_MIN_VALUE) return "";
7644
+ try {
7645
+ return moment.utc(time).local().format(FORMAT || "yyyy-MM-DD");
7646
+ } catch (_unused) {
7647
+ return "";
7648
+ }
7649
+ });
7650
+
7964
7651
  var NotificationLogoutModal = function NotificationLogoutModal() {
7965
7652
  var _useState = useState(false),
7966
7653
  isOpen = _useState[0],
@@ -8048,6 +7735,39 @@ var CreatableSelector = function CreatableSelector(props) {
8048
7735
  });
8049
7736
  };
8050
7737
 
7738
+ var SearchBox = function SearchBox(_ref) {
7739
+ var initValue = _ref.initValue,
7740
+ onSearch = _ref.onSearch,
7741
+ placeholder = _ref.placeholder,
7742
+ className = _ref.className,
7743
+ style = _ref.style;
7744
+ var _useState = useState(initValue),
7745
+ searchString = _useState[0],
7746
+ setSearchString = _useState[1];
7747
+ useEffect(function () {
7748
+ setSearchString(initValue);
7749
+ }, [initValue]);
7750
+ var onKeyUp = useCallback(function (e) {
7751
+ e.key === "Enter" && onSearch(searchString);
7752
+ }, [searchString, onSearch]);
7753
+ return React.createElement(Input, {
7754
+ placeholder: placeholder,
7755
+ value: searchString,
7756
+ onChange: function onChange(e) {
7757
+ return setSearchString(e.target.value);
7758
+ },
7759
+ onKeyUp: onKeyUp,
7760
+ className: className,
7761
+ style: style
7762
+ });
7763
+ };
7764
+ SearchBox.defaultProps = {
7765
+ placeholder: "Type something to search",
7766
+ className: "",
7767
+ style: {}
7768
+ };
7769
+ var SearchBox$1 = memo(SearchBox);
7770
+
8051
7771
  var QuestionTypeSelector = function QuestionTypeSelector(props) {
8052
7772
  var id = props.id;
8053
7773
  var initValue = !!id ? QUESTION_TYPES_OPTIONS.find(function (option) {
@@ -8379,7 +8099,7 @@ var defaultFilters = {
8379
8099
  searchString: "",
8380
8100
  isRead: false
8381
8101
  };
8382
- var TITLE$9 = "Notification list";
8102
+ var TITLE$8 = "Notification list";
8383
8103
  var NOTIFICATION_CHANNEL$1 = "NOTIFICATION_CHANNEL";
8384
8104
  var NEW_NOTIFICATION$1 = "NEW_NOTIFICATION";
8385
8105
  var useNotificationList = function useNotificationList() {
@@ -8494,7 +8214,7 @@ var useNotificationList = function useNotificationList() {
8494
8214
  }
8495
8215
  }, [filters]);
8496
8216
  useEffect(function () {
8497
- document.title = TITLE$9;
8217
+ document.title = TITLE$8;
8498
8218
  }, []);
8499
8219
  useEffect(function () {
8500
8220
  getData();
@@ -8576,7 +8296,7 @@ var useNotificationList = function useNotificationList() {
8576
8296
  };
8577
8297
  };
8578
8298
 
8579
- var header$3 = "Notification list";
8299
+ var header$2 = "Notification list";
8580
8300
  var ICON_SIZE = 20;
8581
8301
  var NotificationList = function NotificationList() {
8582
8302
  var _useNotificationList = useNotificationList(),
@@ -8595,7 +8315,7 @@ var NotificationList = function NotificationList() {
8595
8315
  }
8596
8316
  }, React.createElement("h5", {
8597
8317
  className: "mb-2"
8598
- }, header$3), React.createElement(Row, {
8318
+ }, header$2), React.createElement(Row, {
8599
8319
  className: "my-2"
8600
8320
  }, React.createElement(Col, {
8601
8321
  md: 8
@@ -8695,12 +8415,39 @@ var NotificationList = function NotificationList() {
8695
8415
  }))));
8696
8416
  };
8697
8417
 
8698
- var CustomTabs = function CustomTabs(props) {
8699
- var history = useHistory();
8700
- var location = useLocation();
8701
- var pathname = location.pathname;
8702
- var tabs = props.tabs,
8703
- title = props.title;
8418
+ var searchInputStyle = {
8419
+ height: 38
8420
+ };
8421
+ var SearchBoxContainer = function SearchBoxContainer(_ref) {
8422
+ var text = _ref.text,
8423
+ initValue = _ref.initValue,
8424
+ onClick = _ref.onClick,
8425
+ onSearch = _ref.onSearch,
8426
+ placeholder = _ref.placeholder;
8427
+ return React.createElement("div", {
8428
+ className: "d-flex align-items-center"
8429
+ }, React.createElement("div", null, React.createElement(AddButton, {
8430
+ text: text,
8431
+ onClick: onClick
8432
+ })), React.createElement("div", {
8433
+ className: "flex-grow-1 ml-2"
8434
+ }, React.createElement(SearchBox$1, {
8435
+ initValue: initValue,
8436
+ onSearch: onSearch,
8437
+ placeholder: placeholder,
8438
+ style: searchInputStyle
8439
+ })));
8440
+ };
8441
+ SearchBoxContainer.defaultProps = {
8442
+ placeholder: "Type something to search"
8443
+ };
8444
+
8445
+ var CustomTabs = function CustomTabs(props) {
8446
+ var history = useHistory();
8447
+ var location = useLocation();
8448
+ var pathname = location.pathname;
8449
+ var tabs = props.tabs,
8450
+ title = props.title;
8704
8451
  var toggle = function toggle(path) {
8705
8452
  history.push(path);
8706
8453
  };
@@ -9066,7 +8813,7 @@ var get$8 = function get(filter) {
9066
8813
  });
9067
8814
  };
9068
8815
 
9069
- var TITLE$a = "Gallery";
8816
+ var TITLE$9 = "Gallery";
9070
8817
  var defaultFilter = {
9071
8818
  searchString: ""
9072
8819
  };
@@ -9275,7 +9022,7 @@ var useGalleryList = function useGalleryList(isLibrary) {
9275
9022
  }
9276
9023
  }, [dispatch, filters]);
9277
9024
  useEffect(function () {
9278
- document.title = TITLE$a;
9025
+ document.title = TITLE$9;
9279
9026
  dispatch(setTargetMedia({
9280
9027
  targetMedia: undefined
9281
9028
  }));
@@ -9455,7 +9202,7 @@ var MediaDetail = function MediaDetail(_ref) {
9455
9202
  };
9456
9203
  var MediaDetail$1 = React.memo(MediaDetail);
9457
9204
 
9458
- var header$4 = "Gallery";
9205
+ var header$3 = "Gallery";
9459
9206
  var GalleryList = function GalleryList(_ref) {
9460
9207
  var isLibrary = _ref.isLibrary;
9461
9208
  var targetMedia = useSelector(function (state) {
@@ -9465,7 +9212,7 @@ var GalleryList = function GalleryList(_ref) {
9465
9212
  className: "fadeIn animated"
9466
9213
  }, !isLibrary && React.createElement("h5", {
9467
9214
  className: "mb-2"
9468
- }, header$4), React.createElement(Row, {
9215
+ }, header$3), React.createElement(Row, {
9469
9216
  className: "mb-2"
9470
9217
  }, React.createElement(Col, {
9471
9218
  md: 8
@@ -9543,17 +9290,6 @@ var reduxLogger = createCommonjsModule(function (module, exports) {
9543
9290
 
9544
9291
  var logger = unwrapExports(reduxLogger);
9545
9292
 
9546
- /**
9547
- * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js
9548
- *
9549
- * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes
9550
- * during build.
9551
- * @param {number} code
9552
- */
9553
- function formatProdErrorMessage(code) {
9554
- return "Minified Redux error #" + code + "; visit https://redux.js.org/Errors?code=" + code + " for the full message or " + 'use the non-minified dev environment for full errors. ';
9555
- }
9556
-
9557
9293
  /**
9558
9294
  * These are private action types reserved by Redux.
9559
9295
  * For any unknown actions, you must return the current state.
@@ -9587,65 +9323,6 @@ function isPlainObject(obj) {
9587
9323
  return Object.getPrototypeOf(obj) === proto;
9588
9324
  }
9589
9325
 
9590
- // Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of
9591
- function miniKindOf(val) {
9592
- if (val === void 0) return 'undefined';
9593
- if (val === null) return 'null';
9594
- var type = typeof val;
9595
-
9596
- switch (type) {
9597
- case 'boolean':
9598
- case 'string':
9599
- case 'number':
9600
- case 'symbol':
9601
- case 'function':
9602
- {
9603
- return type;
9604
- }
9605
- }
9606
-
9607
- if (Array.isArray(val)) return 'array';
9608
- if (isDate(val)) return 'date';
9609
- if (isError(val)) return 'error';
9610
- var constructorName = ctorName(val);
9611
-
9612
- switch (constructorName) {
9613
- case 'Symbol':
9614
- case 'Promise':
9615
- case 'WeakMap':
9616
- case 'WeakSet':
9617
- case 'Map':
9618
- case 'Set':
9619
- return constructorName;
9620
- } // other
9621
-
9622
-
9623
- return type.slice(8, -1).toLowerCase().replace(/\s/g, '');
9624
- }
9625
-
9626
- function ctorName(val) {
9627
- return typeof val.constructor === 'function' ? val.constructor.name : null;
9628
- }
9629
-
9630
- function isError(val) {
9631
- return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';
9632
- }
9633
-
9634
- function isDate(val) {
9635
- if (val instanceof Date) return true;
9636
- return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';
9637
- }
9638
-
9639
- function kindOf(val) {
9640
- var typeOfVal = typeof val;
9641
-
9642
- if (process.env.NODE_ENV !== 'production') {
9643
- typeOfVal = miniKindOf(val);
9644
- }
9645
-
9646
- return typeOfVal;
9647
- }
9648
-
9649
9326
  /**
9650
9327
  * Prints a warning in the console if it exists.
9651
9328
  *
@@ -9669,6 +9346,12 @@ function warning(message) {
9669
9346
 
9670
9347
  }
9671
9348
 
9349
+ function getUndefinedStateErrorMessage(key, action) {
9350
+ var actionType = action && action.type;
9351
+ var actionDescription = actionType && "action \"" + String(actionType) + "\"" || 'an action';
9352
+ return "Given " + actionDescription + ", reducer \"" + key + "\" returned undefined. " + "To ignore an action, you must explicitly return the previous state. " + "If you want this reducer to hold no value, you can return null instead of undefined.";
9353
+ }
9354
+
9672
9355
  function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {
9673
9356
  var reducerKeys = Object.keys(reducers);
9674
9357
  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';
@@ -9678,7 +9361,7 @@ function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, une
9678
9361
  }
9679
9362
 
9680
9363
  if (!isPlainObject(inputState)) {
9681
- return "The " + argumentName + " has unexpected type of \"" + kindOf(inputState) + "\". Expected argument to be an object with the following " + ("keys: \"" + reducerKeys.join('", "') + "\"");
9364
+ return "The " + argumentName + " has unexpected type of \"" + {}.toString.call(inputState).match(/\s([a-z|A-Z]+)/)[1] + "\". Expected argument to be an object with the following " + ("keys: \"" + reducerKeys.join('", "') + "\"");
9682
9365
  }
9683
9366
 
9684
9367
  var unexpectedKeys = Object.keys(inputState).filter(function (key) {
@@ -9702,13 +9385,13 @@ function assertReducerShape(reducers) {
9702
9385
  });
9703
9386
 
9704
9387
  if (typeof initialState === 'undefined') {
9705
- throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(12) : "The slice reducer for key \"" + key + "\" returned undefined during initialization. " + "If the state passed to the reducer is undefined, you must " + "explicitly return the initial state. The initial state may " + "not be undefined. If you don't want to set a value for this reducer, " + "you can use null instead of undefined.");
9388
+ throw new Error("Reducer \"" + key + "\" returned undefined during initialization. " + "If the state passed to the reducer is undefined, you must " + "explicitly return the initial state. The initial state may " + "not be undefined. If you don't want to set a value for this reducer, " + "you can use null instead of undefined.");
9706
9389
  }
9707
9390
 
9708
9391
  if (typeof reducer(undefined, {
9709
9392
  type: ActionTypes.PROBE_UNKNOWN_ACTION()
9710
9393
  }) === 'undefined') {
9711
- throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(13) : "The slice reducer for key \"" + key + "\" returned undefined when probed with a random type. " + ("Don't try to handle '" + ActionTypes.INIT + "' or other actions in \"redux/*\" ") + "namespace. They are considered private. Instead, you must return the " + "current state for any unknown actions, unless it is undefined, " + "in which case you must return the initial state, regardless of the " + "action type. The initial state may not be undefined, but can be null.");
9394
+ throw new Error("Reducer \"" + key + "\" returned undefined when probed with a random type. " + ("Don't try to handle " + ActionTypes.INIT + " or other actions in \"redux/*\" ") + "namespace. They are considered private. Instead, you must return the " + "current state for any unknown actions, unless it is undefined, " + "in which case you must return the initial state, regardless of the " + "action type. The initial state may not be undefined, but can be null.");
9712
9395
  }
9713
9396
  });
9714
9397
  }
@@ -9792,8 +9475,8 @@ function combineReducers(reducers) {
9792
9475
  var nextStateForKey = reducer(previousStateForKey, action);
9793
9476
 
9794
9477
  if (typeof nextStateForKey === 'undefined') {
9795
- var actionType = action && action.type;
9796
- throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(14) : "When called with an action of type " + (actionType ? "\"" + String(actionType) + "\"" : '(unknown type)') + ", the slice reducer for key \"" + _key + "\" returned undefined. " + "To ignore an action, you must explicitly return the previous state. " + "If you want this reducer to hold no value, you can return null instead of undefined.");
9478
+ var errorMessage = getUndefinedStateErrorMessage(_key, action);
9479
+ throw new Error(errorMessage);
9797
9480
  }
9798
9481
 
9799
9482
  nextState[_key] = nextStateForKey;
@@ -9805,6 +9488,17 @@ function combineReducers(reducers) {
9805
9488
  };
9806
9489
  }
9807
9490
 
9491
+ /*
9492
+ * This is a dummy function to check if the function name has been altered by minification.
9493
+ * If the function has been minified and NODE_ENV !== 'production', warn the user.
9494
+ */
9495
+
9496
+ function isCrushed() {}
9497
+
9498
+ if (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {
9499
+ warning('You are currently using minified code outside of NODE_ENV === "production". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');
9500
+ }
9501
+
9808
9502
  var _localStorage$getItem;
9809
9503
  var initialState = {
9810
9504
  sidebarShow: "responsive",
@@ -10103,6 +9797,9 @@ var commonReducer$8 = createReducer(initialState$e, function (builder) {
10103
9797
  });
10104
9798
  });
10105
9799
 
9800
+ var setUserList = createAction("users/setUserList");
9801
+ var setStudentList = createAction("users/setStudentList");
9802
+
10106
9803
  var initialState$f = {
10107
9804
  userList: [],
10108
9805
  totalItems: 0,
@@ -10788,5 +10485,332 @@ var generateRandomString = (function () {
10788
10485
 
10789
10486
  var amplitudeClient = amplitude.getInstance();
10790
10487
 
10791
- export { ACCESS_TOKEN, ANSWER_EDITOR_HEIGHT, AcademicClassSelector, AddButton, BASE_URL, CHAT_CHANNEL, CategorySelector, CommonAlert, CommonHeader, CommonModal$1 as CommonModal, CreatableSelector, CustomPagination, CustomSelector, CustomTabs as CustomTab, DATE_FORMAT, DATE_RESULT, DEFAULT_FILTER, Dashboard, DeleteButtonIcon, DetailActionButtons, EMOTIONS, EditButtonIcon, EmailTemplateDetail, EmailTemplateList, EmptyDataAlert, ErrorHandler, FULL_DATE_RESULT, FaqList, InputFile as FileInput, GOOGLE_RECAPTCHA_KEY, GalleryList, INIT_AMPLITUDE_KEY_PROD, INIT_AMPLITUDE_KEY_STAGE, Images, LICENSE_AGGRID, LinkEditButton, Loading, Login, MediaList, NOTIFICATION_ALERT_KEY, NOTIFICATION_CHANNEL, NotFound, NotificationList, NotificationLogoutModal, NotificationModal, QUESTION_TYPES, QUESTION_TYPES_OPTIONS, QuestionCategorySelector, QuestionTypeSelector, QuitPrompt, ReactNotification, RequiredLabel$1 as RequiredLabel, SchoolList, ScrollToTop, SearchBox$1 as SearchBox, SearchBoxContainer, SkillList, StarRatingSelector, SuggestionCategorySelector, TAB_COLORS, TINY_MCE_API_KEY, TheContent$1 as TheContent, TheLayout, ToggleButton, UploadFileButton, UserDetail, UserList, addTab, amplitudeClient, answerQuestion, answerQuestionDataPlayer, api, apiUpload, canAccess as canAccessRoute, changeNote, changeTags, clearTab, closeTab, debounce, editTab, editorConfig, firstCheckToken, generateRandomString, getFileUrl, getInfo, getTextFromHTML, i18n, initAmplitude, isInViewport, isLocalhost, reset, setAlert, setAssessmentList, setAssignmentList, setAssistantList, setBadgeList, setBandScoreList, setCertificateList, setClassList, setConferenceRubricList, setConversationOneToOne, setCurrentStudentId, setCurrentStudentName, setCurrentStudentUserId, setCustomAlertList, setDataPlayer, setEditItemQuesion, setEnableIEP, setEnableSurvey, setFeedbackList, setFilterWidget, setGoalExampleList, setImproveMyClass, setLanguage, setLearningSupportCategoryList, setLoading, setMailCategory, setModal, setMoveItemQuestion, setMyStudent, setQuestionByCategory, setQuestionCateList, setQuestionList, setReflectionList, setReflectionResultList, setResetQuestionList, setSchoolBlankDayList, setSelectQuestion, setSemesterList, setSessionPlayer, setSessionTemplateGeneralClassList, setSessionTemplateList, setStartTime, setStrategyList, setStudentIdSelectedByTeacher, setStudentList, setSubjectList, setSuggestionList, setTurnOffPassWhenChangeMode, setTutorialScreenList, setUser, setUserList, showFontSize, showMenuBar, store, systemCertificateUpload, systemStudentBadge, uploadFile, useFilters, useGalleryList, utcToLocalTime };
10488
+ var USER_URL$2 = "/admin/user";
10489
+ var CREATE_USER_URL = "/admin/create-user";
10490
+ var TITLE$a = "User list";
10491
+ var HOMEPAGE_TEACHER$1 = "/home";
10492
+ var HOMEPAGE_STUDENT$1 = "/home";
10493
+ var HOMEPAGE_ADMIN$1 = "/admin/dashboard";
10494
+ var HOMEPAGE_PARENT$1 = "/parent";
10495
+ var HOMEPAGE_DISTRICT$1 = "/admin/schools";
10496
+ var HOMEPAGE_EDU_TEACHER$1 = "/list-student";
10497
+ var useUserList = function useUserList() {
10498
+ var history = useHistory();
10499
+ var query = new URLSearchParams(location.search);
10500
+ var queryName = query.get("query");
10501
+ var userList = useSelector(function (state) {
10502
+ return state.users.userList;
10503
+ });
10504
+ var totalItems = useSelector(function (state) {
10505
+ return state.users.totalItems;
10506
+ });
10507
+ var _useFilters = useFilters(),
10508
+ filters = _useFilters.filters,
10509
+ changeFilters = _useFilters.changeFilters;
10510
+ var _useState = useState(!!queryName ? queryName : ""),
10511
+ fullName = _useState[0],
10512
+ setFullName = _useState[1];
10513
+ var isDistrict = window.location.host.includes("-district");
10514
+ var dispatch = useDispatch();
10515
+ var getData = useCallback(function (fullName) {
10516
+ try {
10517
+ var _temp2 = function _temp2() {
10518
+ dispatch(setLoading(false));
10519
+ };
10520
+ dispatch(setLoading(true));
10521
+ var _temp = _catch(function () {
10522
+ return Promise.resolve(fullName ? get$5(_extends({}, filters, {
10523
+ searchString: fullName
10524
+ })) : get$5(filters)).then(function (res) {
10525
+ var _res$data = res.data,
10526
+ items = _res$data.items,
10527
+ totalItems = _res$data.totalItems;
10528
+ for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {
10529
+ var user = _step.value;
10530
+ user.roles = user.roles.includes("EduTeacher") ? [ROLES.EDUTEACHER] : user.roles;
10531
+ }
10532
+ dispatch(setUserList({
10533
+ userList: items,
10534
+ totalItems: totalItems
10535
+ }));
10536
+ });
10537
+ }, function (err) {
10538
+ var _err$response, _err$response$data;
10539
+ dispatch(setAlert({
10540
+ type: "danger",
10541
+ message: ((_err$response = err.response) === null || _err$response === void 0 ? void 0 : (_err$response$data = _err$response.data) === null || _err$response$data === void 0 ? void 0 : _err$response$data.title) || err.message
10542
+ }));
10543
+ });
10544
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
10545
+ } catch (e) {
10546
+ return Promise.reject(e);
10547
+ }
10548
+ }, [dispatch, filters]);
10549
+ useEffect(function () {
10550
+ document.title = TITLE$a;
10551
+ }, []);
10552
+ useEffect(function () {
10553
+ if (!!fullName) {
10554
+ getData(fullName);
10555
+ setFullName(null);
10556
+ } else {
10557
+ getData();
10558
+ }
10559
+ }, [filters]);
10560
+ var removeData = useCallback(function (id) {
10561
+ dispatch(setLoading(true));
10562
+ try {
10563
+ dispatch(setModal({
10564
+ isOpen: true,
10565
+ type: "warning",
10566
+ message: "Do you want to remove this user?",
10567
+ onConfirm: function () {
10568
+ try {
10569
+ return Promise.resolve(remove$3(id)).then(function () {
10570
+ dispatch(setAlert({
10571
+ type: "success",
10572
+ message: "Remove user successfully"
10573
+ }));
10574
+ changeFilters({
10575
+ currentPage: 1
10576
+ });
10577
+ });
10578
+ } catch (e) {
10579
+ return Promise.reject(e);
10580
+ }
10581
+ }
10582
+ }));
10583
+ } catch (err) {
10584
+ var _err$response2, _err$response2$data;
10585
+ dispatch(setAlert({
10586
+ type: "danger",
10587
+ message: ((_err$response2 = err.response) === null || _err$response2 === void 0 ? void 0 : (_err$response2$data = _err$response2.data) === null || _err$response2$data === void 0 ? void 0 : _err$response2$data.title) || err.message
10588
+ }));
10589
+ }
10590
+ dispatch(setLoading(false));
10591
+ }, [filters]);
10592
+ var redirectLoginUser = function redirectLoginUser(res) {
10593
+ var _res$data2 = res.data,
10594
+ token = _res$data2.token,
10595
+ id = _res$data2.id,
10596
+ firstName = _res$data2.firstName,
10597
+ lastName = _res$data2.lastName,
10598
+ roles = _res$data2.roles,
10599
+ email = _res$data2.email,
10600
+ profileImageFileName = _res$data2.profileImageFileName;
10601
+ localStorage.setItem(ACCESS_TOKEN, token);
10602
+ localStorage.removeItem(NOTIFICATION_ALERT_KEY);
10603
+ dispatch(setUser({
10604
+ id: id,
10605
+ firstName: firstName,
10606
+ lastName: lastName,
10607
+ roles: roles,
10608
+ email: email,
10609
+ profileImageFileName: profileImageFileName
10610
+ }));
10611
+ if (isDistrict) {
10612
+ history.push(HOMEPAGE_DISTRICT$1);
10613
+ } else if (roles.includes("Admin")) {
10614
+ history.push(HOMEPAGE_ADMIN$1);
10615
+ } else if (roles.includes("Teacher") || roles.includes("Assistant")) {
10616
+ history.push(HOMEPAGE_TEACHER$1);
10617
+ } else if (roles.includes("Student")) {
10618
+ history.push(HOMEPAGE_STUDENT$1);
10619
+ } else if (roles.includes("Parent")) {
10620
+ history.push(HOMEPAGE_PARENT$1);
10621
+ } else if (roles.includes("EduTeacher")) {
10622
+ history.push(HOMEPAGE_EDU_TEACHER$1);
10623
+ } else if (roles.includes("Counselor") || roles.includes("SecondaryTeacher")) {
10624
+ history.push(HOMEPAGE_TEACHER$1);
10625
+ }
10626
+ };
10627
+ var swicthUser = useCallback(function (id) {
10628
+ try {
10629
+ var _temp3 = _catch(function () {
10630
+ return Promise.resolve(switchAccountUser(id)).then(function (res) {
10631
+ var data = res.data;
10632
+ dispatch(setModal({
10633
+ isOpen: true,
10634
+ type: "warning",
10635
+ message: "Do you want to impersonate this user?",
10636
+ onConfirm: function () {
10637
+ try {
10638
+ var _temp5 = function _temp5() {
10639
+ dispatch(setLoading(false));
10640
+ };
10641
+ dispatch(setLoading(true));
10642
+ var _temp4 = _catch(function () {
10643
+ var req = {
10644
+ email: data.email,
10645
+ password: "default",
10646
+ accessToken: data.token
10647
+ };
10648
+ return Promise.resolve(logIn(req)).then(function (res) {
10649
+ localStorage.clear();
10650
+ redirectLoginUser(res);
10651
+ });
10652
+ }, function (err) {
10653
+ var _err$response3, _err$response3$data;
10654
+ setAlert({
10655
+ type: "danger",
10656
+ message: ((_err$response3 = err.response) === null || _err$response3 === void 0 ? void 0 : (_err$response3$data = _err$response3.data) === null || _err$response3$data === void 0 ? void 0 : _err$response3$data.title) || err.message
10657
+ });
10658
+ });
10659
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
10660
+ } catch (e) {
10661
+ return Promise.reject(e);
10662
+ }
10663
+ }
10664
+ }));
10665
+ });
10666
+ }, function (err) {
10667
+ var _err$response4, _err$response4$data;
10668
+ dispatch(setAlert({
10669
+ type: "danger",
10670
+ message: ((_err$response4 = err.response) === null || _err$response4 === void 0 ? void 0 : (_err$response4$data = _err$response4.data) === null || _err$response4$data === void 0 ? void 0 : _err$response4$data.title) || err.message
10671
+ }));
10672
+ });
10673
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(function () {}) : void 0);
10674
+ } catch (e) {
10675
+ return Promise.reject(e);
10676
+ }
10677
+ }, [filters]);
10678
+ var reDirectDetailPage = function reDirectDetailPage(id) {
10679
+ var url = !!id ? USER_URL$2 + "/" + id : CREATE_USER_URL;
10680
+ history.push(url);
10681
+ };
10682
+ return {
10683
+ userList: userList,
10684
+ totalItems: totalItems,
10685
+ filters: filters,
10686
+ queryName: queryName,
10687
+ getData: getData,
10688
+ removeData: removeData,
10689
+ changeFilters: changeFilters,
10690
+ reDirectDetailPage: reDirectDetailPage,
10691
+ swicthUser: swicthUser
10692
+ };
10693
+ };
10694
+
10695
+ var header$4 = "User";
10696
+ var UserList = function UserList() {
10697
+ var _useUserList = useUserList(),
10698
+ queryName = _useUserList.queryName,
10699
+ userList = _useUserList.userList,
10700
+ totalItems = _useUserList.totalItems,
10701
+ filters = _useUserList.filters,
10702
+ removeData = _useUserList.removeData,
10703
+ changeFilters = _useUserList.changeFilters,
10704
+ reDirectDetailPage = _useUserList.reDirectDetailPage,
10705
+ swicthUser = _useUserList.swicthUser;
10706
+ var _useTranslation = useTranslation(),
10707
+ t = _useTranslation.t;
10708
+ return React.createElement("div", {
10709
+ className: "fadeIn animated"
10710
+ }, React.createElement("h5", {
10711
+ className: "mb-2"
10712
+ }, t("" + header$4)), React.createElement(Row, {
10713
+ className: "my-2"
10714
+ }, React.createElement(Col, {
10715
+ md: 8
10716
+ }, React.createElement(SearchBoxContainer, {
10717
+ text: t("create_user"),
10718
+ onClick: function onClick() {
10719
+ return reDirectDetailPage();
10720
+ },
10721
+ initValue: !!queryName ? queryName : "",
10722
+ onSearch: function onSearch(searchString) {
10723
+ return changeFilters({
10724
+ searchString: searchString
10725
+ });
10726
+ },
10727
+ placeholder: t("type_something_to_search_by_user_name")
10728
+ })), React.createElement(Col, {
10729
+ md: 4,
10730
+ className: "d-flex justify-content-end align-items-center"
10731
+ }, t("total_of_users"), " : ", totalItems)), React.createElement(Row, {
10732
+ className: "mb-2"
10733
+ }, React.createElement(Col, {
10734
+ md: 12
10735
+ }, userList && userList.length > 0 ? React.createElement("div", null, React.createElement(Table, {
10736
+ bordered: true,
10737
+ hover: true,
10738
+ striped: true,
10739
+ responsive: true,
10740
+ size: "sm"
10741
+ }, React.createElement("thead", null, React.createElement("tr", null, React.createElement("th", {
10742
+ className: "align-top"
10743
+ }, t("name")), React.createElement("th", {
10744
+ className: "align-top"
10745
+ }, t("email")), React.createElement("th", {
10746
+ className: "align-top"
10747
+ }, t("age")), React.createElement("th", {
10748
+ className: "align-top"
10749
+ }, t("role")), React.createElement("th", {
10750
+ className: "align-top"
10751
+ }, t("active_status")), React.createElement("th", {
10752
+ className: "align-top"
10753
+ }, t("created_time")), React.createElement("th", {
10754
+ className: "text-center"
10755
+ }, t("action")))), React.createElement("tbody", null, userList.map(function (record) {
10756
+ return React.createElement("tr", {
10757
+ key: record.id
10758
+ }, React.createElement("td", {
10759
+ className: "align-middle"
10760
+ }, React.createElement(LinkEditButton, {
10761
+ label: "" + record.fullName,
10762
+ onClick: function onClick() {
10763
+ return reDirectDetailPage(record.id);
10764
+ }
10765
+ })), React.createElement("td", {
10766
+ className: "align-middle"
10767
+ }, record.email), React.createElement("td", {
10768
+ className: "align-middle"
10769
+ }, differenceInCalendarYears(new Date(), new Date(record.dateOfBirth))), React.createElement("td", {
10770
+ className: "align-middle"
10771
+ }, !!record.roles && record.roles.map(function (role) {
10772
+ return role === "SecondaryTeacher" ? "SupportTeacher" : role;
10773
+ }).join(", ")), React.createElement("td", {
10774
+ className: "align-middle"
10775
+ }, record.isActive ? t("active") : t("inactive")), React.createElement("td", {
10776
+ className: "align-middle"
10777
+ }, utcToLocalTime(record === null || record === void 0 ? void 0 : record.createTime, "yyyy-MM-DD HH:mm")), React.createElement("td", {
10778
+ className: "text-center align-middle"
10779
+ }, React.createElement(FaUsersCog, {
10780
+ style: {
10781
+ fontSize: "18px",
10782
+ marginRight: "10px",
10783
+ cursor: "pointer"
10784
+ },
10785
+ onClick: function onClick() {
10786
+ return swicthUser(record.id);
10787
+ }
10788
+ }), React.createElement(DeleteButtonIcon, {
10789
+ onClick: function onClick() {
10790
+ return removeData(record.id);
10791
+ }
10792
+ })));
10793
+ })))) : React.createElement(EmptyDataAlert, {
10794
+ label: t("user")
10795
+ })), React.createElement(Col, {
10796
+ md: 12
10797
+ }, React.createElement(CustomPagination, {
10798
+ filters: filters,
10799
+ totalRecordCount: totalItems,
10800
+ changePageSize: function changePageSize(pageSize) {
10801
+ return changeFilters({
10802
+ pageSize: pageSize
10803
+ });
10804
+ },
10805
+ changePage: function changePage(currentPage) {
10806
+ return changeFilters({
10807
+ currentPage: currentPage
10808
+ });
10809
+ }
10810
+ }))));
10811
+ };
10812
+
10813
+ var amplitudeClient$1 = amplitude.getInstance();
10814
+
10815
+ export { ACCESS_TOKEN, ANSWER_EDITOR_HEIGHT, AcademicClassSelector, AddButton, BASE_URL, CHAT_CHANNEL, CategorySelector, CommonAlert, CommonHeader, CommonModal$1 as CommonModal, CreatableSelector, CustomPagination, CustomSelector, CustomTabs as CustomTab, DATE_FORMAT, DATE_RESULT, DEFAULT_FILTER, Dashboard, DeleteButtonIcon, DetailActionButtons, EMOTIONS, EditButtonIcon, EmailTemplateDetail, EmailTemplateList, EmptyDataAlert, ErrorHandler, FULL_DATE_RESULT, FaqList, InputFile as FileInput, GOOGLE_RECAPTCHA_KEY, GalleryList, INIT_AMPLITUDE_KEY_PROD, INIT_AMPLITUDE_KEY_STAGE, Images, LICENSE_AGGRID, LinkEditButton, Loading, Login, MediaList, NOTIFICATION_ALERT_KEY, NOTIFICATION_CHANNEL, NotFound, NotificationList, NotificationLogoutModal, NotificationModal, QUESTION_TYPES, QUESTION_TYPES_OPTIONS, QuestionCategorySelector, QuestionTypeSelector, QuitPrompt, ReactNotification, RequiredLabel$1 as RequiredLabel, SchoolList, ScrollToTop, SearchBox$1 as SearchBox, SearchBoxContainer, SkillList, StarRatingSelector, SuggestionCategorySelector, TAB_COLORS, TINY_MCE_API_KEY, TheContent$1 as TheContent, TheLayout, ToggleButton, UploadFileButton, UserDetail, UserList, addTab, amplitudeClient$1 as amplitudeClient, answerQuestion, answerQuestionDataPlayer, api, apiUpload, canAccess as canAccessRoute, changeNote, changeTags, clearTab, closeTab, debounce, editTab, editorConfig, firstCheckToken, generateRandomString, getFileUrl, getInfo, getTextFromHTML, i18n, initAmplitude, isInViewport, isLocalhost, reset, setAlert, setAssessmentList, setAssignmentList, setAssistantList, setBadgeList, setBandScoreList, setCertificateList, setClassList, setConferenceRubricList, setConversationOneToOne, setCurrentStudentId, setCurrentStudentName, setCurrentStudentUserId, setCustomAlertList, setDataPlayer, setEditItemQuesion, setEnableIEP, setEnableSurvey, setFeedbackList, setFilterWidget, setGoalExampleList, setImproveMyClass, setLanguage, setLearningSupportCategoryList, setLoading, setMailCategory, setModal, setMoveItemQuestion, setMyStudent, setQuestionByCategory, setQuestionCateList, setQuestionList, setReflectionList, setReflectionResultList, setResetQuestionList, setSchoolBlankDayList, setSelectQuestion, setSemesterList, setSessionPlayer, setSessionTemplateGeneralClassList, setSessionTemplateList, setStartTime, setStrategyList, setStudentIdSelectedByTeacher, setStudentList, setSubjectList, setSuggestionList, setTurnOffPassWhenChangeMode, setTutorialScreenList, setUser, setUserList, showFontSize, showMenuBar, store, systemCertificateUpload, systemStudentBadge, uploadFile, useFilters, useGalleryList, utcToLocalTime };
10792
10816
  //# sourceMappingURL=index.modern.js.map