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
package/dist/index.js CHANGED
@@ -34,6 +34,7 @@ var Creatable = _interopDefault(require('react-select/creatable'));
34
34
  var ReactNotification$1 = _interopDefault(require('react-notifications-component'));
35
35
  require('react-notifications-component/dist/theme.css');
36
36
  var ai = require('react-icons/ai');
37
+ require('symbol-observable');
37
38
 
38
39
  var dashboard = "Dashboard";
39
40
  var user = "User";
@@ -2763,7 +2764,7 @@ function _catch(body, recover) {
2763
2764
  return result;
2764
2765
  }
2765
2766
 
2766
- 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"};
2767
+ 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"};
2767
2768
 
2768
2769
  var style = {
2769
2770
  fontSize: "0.85rem"
@@ -2999,6 +3000,16 @@ var ROLES = {
2999
3000
  SECONDARY_TEACHER: "SecondaryTeacher"
3000
3001
  };
3001
3002
  var NOTIFICATION_ALERT_KEY = "NOTIFICATION_ALERT_KEY";
3003
+ var handleUserRole = function handleUserRole(userRoles) {
3004
+ if (userRoles !== null && userRoles !== void 0 && userRoles.includes("Teacher") && userRoles !== null && userRoles !== void 0 && userRoles.includes("Assistant")) {
3005
+ var roles = userRoles.filter(function (r) {
3006
+ return r !== "Teacher" && r !== "Assistant";
3007
+ });
3008
+ roles.push("Teacher/Assistant");
3009
+ return roles;
3010
+ }
3011
+ return userRoles;
3012
+ };
3002
3013
 
3003
3014
  var getAccessToken = (function () {
3004
3015
  try {
@@ -3619,7 +3630,7 @@ var BlockLogin = function BlockLogin(_ref) {
3619
3630
  }, React__default.createElement("div", {
3620
3631
  className: "" + styles["block-form"]
3621
3632
  }, React__default.createElement("img", {
3622
- src: "/images/main-blue-logo.svg",
3633
+ src: "/images/horizontal-logo-blue.svg",
3623
3634
  className: "" + styles["img-login-rectangle"]
3624
3635
  }), React__default.createElement("p", {
3625
3636
  className: "" + styles["title-login"]
@@ -4139,7 +4150,7 @@ var Dashboard = function Dashboard() {
4139
4150
  href: "/",
4140
4151
  className: "" + styles["logo-home"]
4141
4152
  }, React__default.createElement("img", {
4142
- src: "/images/logo-v2.svg",
4153
+ src: "/images/horizontal-logo-white.svg",
4143
4154
  alt: "mario"
4144
4155
  })), React__default.createElement(gi.GiHamburgerMenu, {
4145
4156
  onClick: toggle,
@@ -4372,21 +4383,23 @@ var DEFAULT_USER_AVATAR = "/avatars/default-avatar.png";
4372
4383
  var ADMIN_ROLE = "Admin";
4373
4384
  var TEACHER_ROLE = "Teacher";
4374
4385
  var USER_DETAIL_URL = "/admin/user";
4375
- var TheHeaderDropdown = function TheHeaderDropdown() {
4386
+ var TheHeaderDropdown = function TheHeaderDropdown(_ref) {
4387
+ var _handleUserRole;
4388
+ var onToggleModel = _ref.onToggleModel;
4376
4389
  var user = reactRedux.useSelector(function (state) {
4377
4390
  return state.common.user;
4378
4391
  });
4379
4392
  var dispatch = reactRedux.useDispatch();
4393
+ var location = reactRouterDom.useLocation();
4380
4394
  var history = reactRouterDom.useHistory();
4395
+ var params = new URLSearchParams(location.search);
4396
+ var isReadOnly = params.get("isReadOnly");
4381
4397
  var email = user.email,
4382
4398
  profileImageFileName = user.profileImageFileName,
4383
4399
  roles = user.roles,
4384
4400
  id = user.id;
4385
4401
  var isAdmin = roles.includes(ADMIN_ROLE);
4386
4402
  var isTeacher = roles.includes(TEACHER_ROLE);
4387
- var goToTeacherPanel = React.useCallback(function () {
4388
- isTeacher && history.push("/home");
4389
- }, [isTeacher, history]);
4390
4403
  var signOut = React.useCallback(function () {
4391
4404
  localStorage.removeItem(ACCESS_TOKEN);
4392
4405
  dispatch(reset());
@@ -4424,20 +4437,20 @@ var TheHeaderDropdown = function TheHeaderDropdown() {
4424
4437
  className: styles["content-text"]
4425
4438
  }, React__default.createElement("h5", null, user.firstName + " " + user.lastName), React__default.createElement("span", {
4426
4439
  className: "block"
4427
- }, email), !isDistrict && React__default.createElement(reactstrap.NavLink, null, isTeacher && React__default.createElement(reactRouterDom.Link, {
4428
- to: "/my-profile"
4429
- }, "Edit profile"), isAdmin && React__default.createElement(reactRouterDom.Link, {
4430
- to: USER_DETAIL_URL + "/" + id
4431
- }, "Edit profile")))), isTeacher && React__default.createElement(reactstrap.DropdownItem, {
4432
- onClick: goToTeacherPanel,
4440
+ }, email), !isDistrict && React__default.createElement(reactstrap.NavLink, null, (isAdmin || isTeacher) && React__default.createElement(reactRouterDom.Link, {
4441
+ to: "" + (isAdmin ? USER_DETAIL_URL + "/" + id : "/my-profile")
4442
+ }, "Edit profile")))), ((_handleUserRole = handleUserRole((user === null || user === void 0 ? void 0 : user.roles) || [])) === null || _handleUserRole === void 0 ? void 0 : _handleUserRole.length) > 1 && !isReadOnly && React__default.createElement(reactstrap.DropdownItem, {
4443
+ onClick: function onClick() {
4444
+ onToggleModel === null || onToggleModel === void 0 ? void 0 : onToggleModel();
4445
+ },
4433
4446
  className: styles["dropdown-change"] + " px-0"
4434
4447
  }, React__default.createElement("div", {
4435
- className: styles["item-address"] + " d-flex align-items-center w-100"
4448
+ className: styles["item-address"] + " d-flex align-items-center w-100 text-uppercase mb-2"
4436
4449
  }, React__default.createElement("span", {
4437
4450
  className: "mr-2"
4438
4451
  }, React__default.createElement("i", {
4439
4452
  className: "fas fa-cogs h6 mb-0"
4440
- })), "GO TO TEACHER PANEL")), React__default.createElement(reactstrap.DropdownItem, {
4453
+ })), "Role change")), React__default.createElement(reactstrap.DropdownItem, {
4441
4454
  onClick: signOut,
4442
4455
  className: styles["dropdown-change"] + " px-0"
4443
4456
  }, React__default.createElement("div", {
@@ -4518,7 +4531,8 @@ var TheLanguageDropdown = function TheLanguageDropdown() {
4518
4531
  })), "United States"))));
4519
4532
  };
4520
4533
 
4521
- var TheHeader = function TheHeader() {
4534
+ var TheHeader = function TheHeader(_ref) {
4535
+ var onToggleModel = _ref.onToggleModel;
4522
4536
  var dispatch = reactRedux.useDispatch();
4523
4537
  var sidebarShow = reactRedux.useSelector(function (state) {
4524
4538
  return state.common.sidebarShow;
@@ -4550,7 +4564,9 @@ var TheHeader = function TheHeader() {
4550
4564
  },
4551
4565
  href: '/privacy-policy',
4552
4566
  target: "blank"
4553
- }, "Privacy Policy"), !isDistrict && React__default.createElement(NotificationButton, null), React__default.createElement(TheHeaderDropdown, null)));
4567
+ }, "Privacy Policy"), !isDistrict && React__default.createElement(NotificationButton, null), React__default.createElement(TheHeaderDropdown, {
4568
+ onToggleModel: onToggleModel
4569
+ })));
4554
4570
  };
4555
4571
 
4556
4572
  var TITLE$2 = "Not found";
@@ -4657,6 +4673,54 @@ var canAccess = function canAccess(userRoles, componentRoles) {
4657
4673
  return true;
4658
4674
  };
4659
4675
 
4676
+ var ModelSelectRole = function ModelSelectRole(_ref) {
4677
+ var _handleUserRole;
4678
+ var open = _ref.open,
4679
+ onToggleModel = _ref.onToggleModel;
4680
+ var dispatch = reactRedux.useDispatch();
4681
+ var history = reactRouterDom.useHistory();
4682
+ var pathname = window.location.pathname;
4683
+ var user = reactRedux.useSelector(function (state) {
4684
+ return state.common.user;
4685
+ });
4686
+ var roles = user === null || user === void 0 ? void 0 : user.roles;
4687
+ var handleSelectUserRoles = function handleSelectUserRoles(roles) {
4688
+ if (roles.includes("Admin")) {
4689
+ dispatch(setLoading(true));
4690
+ return history.push("/admin/dashboard");
4691
+ }
4692
+ var roleSelect = roles.includes("Teacher/Assistant") ? ["Teacher", "Assistant"] : roles;
4693
+ dispatch(setUser(_extends({}, user, {
4694
+ roles: roleSelect
4695
+ })));
4696
+ localStorage.setItem("ROLES", roleSelect.toString());
4697
+ onToggleModel();
4698
+ if (roles.includes("Parent")) {
4699
+ history.push("/parent");
4700
+ } else {
4701
+ pathname !== "/home" ? history.push("/home") : window.location.reload();
4702
+ }
4703
+ };
4704
+ return React__default.createElement(reactstrap.Modal, {
4705
+ isOpen: open,
4706
+ toggle: function toggle() {
4707
+ return onToggleModel();
4708
+ },
4709
+ className: "" + styles["model-switch-roles"],
4710
+ centered: true
4711
+ }, React__default.createElement("p", {
4712
+ className: "" + styles["title"]
4713
+ }, "Continue as:"), React__default.createElement("div", null, (_handleUserRole = handleUserRole(user === null || user === void 0 ? void 0 : user.roles)) === null || _handleUserRole === void 0 ? void 0 : _handleUserRole.map(function (r) {
4714
+ return React__default.createElement("p", {
4715
+ key: r,
4716
+ 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" : ""],
4717
+ onClick: function onClick() {
4718
+ return handleSelectUserRoles([r]);
4719
+ }
4720
+ }, r == "SecondaryTeacher" ? "Support Teacher" : r);
4721
+ })));
4722
+ };
4723
+
4660
4724
  var TheLayout = function TheLayout(_ref) {
4661
4725
  var routes = _ref.routes,
4662
4726
  navigation = _ref.navigation;
@@ -4668,11 +4732,17 @@ var TheLayout = function TheLayout(_ref) {
4668
4732
  var language = reactRedux.useSelector(function (state) {
4669
4733
  return state.common.language;
4670
4734
  });
4735
+ var _useState = React.useState(false),
4736
+ openModelSelectRole = _useState[0],
4737
+ setOpenModelSelectRole = _useState[1];
4671
4738
  var _useTranslation = reactI18next.useTranslation(),
4672
4739
  t = _useTranslation.t;
4673
4740
  var location = reactRouterDom.useLocation();
4674
4741
  var isNotification = location.pathname.includes("notifications");
4675
4742
  var isDistrict = window.location.host.includes("-district");
4743
+ var handleToggleModel = function handleToggleModel() {
4744
+ setOpenModelSelectRole(!openModelSelectRole);
4745
+ };
4676
4746
  var authRoutes = React.useMemo(function () {
4677
4747
  return routes.filter(function (route) {
4678
4748
  return canAccess(user === null || user === void 0 ? void 0 : user.roles, route.roles);
@@ -4738,11 +4808,16 @@ var TheLayout = function TheLayout(_ref) {
4738
4808
  navigation: authNavigations
4739
4809
  }), React__default.createElement("div", {
4740
4810
  className: "c-wrapper"
4741
- }, !isNotification && React__default.createElement(TheHeader, null), React__default.createElement("div", {
4811
+ }, !isNotification && React__default.createElement(TheHeader, {
4812
+ onToggleModel: handleToggleModel
4813
+ }), React__default.createElement("div", {
4742
4814
  className: "c-body bg-white"
4743
4815
  }, React__default.createElement(TheContent$1, {
4744
4816
  routes: authRoutes
4745
- }))));
4817
+ }))), React__default.createElement(ModelSelectRole, {
4818
+ open: openModelSelectRole,
4819
+ onToggleModel: handleToggleModel
4820
+ }));
4746
4821
  };
4747
4822
 
4748
4823
  var buttonTextStyle = {
@@ -6826,8 +6901,80 @@ var SkillList = function SkillList() {
6826
6901
  }))));
6827
6902
  };
6828
6903
 
6829
- var setUserList = toolkit.createAction("users/setUserList");
6830
- var setStudentList = toolkit.createAction("users/setStudentList");
6904
+ var MAX_FILE_SIZE = 20097152;
6905
+ var UploadFileButton = function UploadFileButton(_ref) {
6906
+ var fileName = _ref.fileName,
6907
+ maxWidth = _ref.maxWidth,
6908
+ maxHeight = _ref.maxHeight,
6909
+ setFile = _ref.setFile,
6910
+ canDelete = _ref.canDelete,
6911
+ onDelete = _ref.onDelete,
6912
+ isCheckFeedBack = _ref.isCheckFeedBack,
6913
+ onAddImage = _ref.onAddImage;
6914
+ var dispatch = reactRedux.useDispatch();
6915
+ var _useState = React.useState(""),
6916
+ imagePreviewUrl = _useState[0],
6917
+ setImagePreviewUrl = _useState[1];
6918
+ var imageStyle = {
6919
+ maxWidth: maxWidth || "100%",
6920
+ maxHeight: maxHeight || "100%"
6921
+ };
6922
+ var imageSrc = imagePreviewUrl || getFileUrl(fileName);
6923
+ var handleImageChange = function handleImageChange(e) {
6924
+ e.preventDefault();
6925
+ var reader = new FileReader();
6926
+ var newFile = e.target.files[0];
6927
+ if (newFile.size > MAX_FILE_SIZE) {
6928
+ dispatch(setAlert({
6929
+ type: "danger",
6930
+ message: "File can't be larger than 2MB"
6931
+ }));
6932
+ return;
6933
+ }
6934
+ reader.onloadend = function () {
6935
+ setFile(newFile);
6936
+ setImagePreviewUrl(reader.result);
6937
+ };
6938
+ if (newFile) {
6939
+ reader.readAsDataURL(newFile);
6940
+ }
6941
+ !!onAddImage && onAddImage();
6942
+ };
6943
+ var imagePreviewContainer = imagePreviewUrl || fileName ? React__default.createElement("img", {
6944
+ style: imageStyle,
6945
+ src: imageSrc,
6946
+ alt: "image"
6947
+ }) : null;
6948
+ return React__default.createElement("div", {
6949
+ className: "mb-2"
6950
+ }, React__default.createElement(reactstrap.Form, {
6951
+ className: "mb-2"
6952
+ }, React__default.createElement(reactstrap.Input, {
6953
+ className: "d-none",
6954
+ type: "file",
6955
+ id: "uploadFile",
6956
+ onChange: handleImageChange,
6957
+ accept: "image/*"
6958
+ }), React__default.createElement("div", {
6959
+ className: "d-flex align-items-center"
6960
+ }, React__default.createElement(reactstrap.Label, {
6961
+ htmlFor: "uploadFile",
6962
+ role: "button",
6963
+ tabIndex: 0,
6964
+ className: styles["input-file-label"]
6965
+ }, isCheckFeedBack == true ? React__default.createElement(md.MdAttachFile, null) : React__default.createElement(React__default.Fragment, null, React__default.createElement("i", {
6966
+ className: "fa fa-paperclip mr-1",
6967
+ "aria-hidden": "true"
6968
+ }), imagePreviewUrl || fileName ? "Change file" : "Choose file")), canDelete && imagePreviewContainer && React__default.createElement(reactstrap.Button, {
6969
+ size: "sm",
6970
+ color: "danger",
6971
+ className: styles["delete-avatar-button"] + " ml-2 d-flex align-items-center justify-content-center",
6972
+ onClick: function onClick() {
6973
+ setImagePreviewUrl(null);
6974
+ onDelete && onDelete();
6975
+ }
6976
+ }, React__default.createElement(fa.FaTrashAlt, null)))), imagePreviewContainer);
6977
+ };
6831
6978
 
6832
6979
  var USER_URL$1 = BASE_URL + "/api/user";
6833
6980
  var CHANGE_PASSWORD = BASE_URL + "/api/Account/changePassword";
@@ -6860,54 +7007,65 @@ var switchAccountUser = function switchAccountUser(id) {
6860
7007
  return api.post(EDU_USER_URL + "/switch-user/" + id);
6861
7008
  };
6862
7009
 
6863
- var USER_URL$2 = "/admin/user";
6864
- var CREATE_USER_URL = "/admin/create-user";
6865
- var TITLE$7 = "User list";
6866
- var HOMEPAGE_TEACHER$1 = "/home";
6867
- var HOMEPAGE_STUDENT$1 = "/home";
6868
- var HOMEPAGE_ADMIN$1 = "/admin/dashboard";
6869
- var HOMEPAGE_PARENT$1 = "/parent";
6870
- var HOMEPAGE_DISTRICT$1 = "/admin/schools";
6871
- var HOMEPAGE_EDU_TEACHER$1 = "/list-student";
6872
- var useUserList = function useUserList() {
6873
- var history = reactRouterDom.useHistory();
6874
- var query = new URLSearchParams(location.search);
6875
- var queryName = query.get("query");
6876
- var userList = reactRedux.useSelector(function (state) {
6877
- return state.users.userList;
6878
- });
6879
- var totalItems = reactRedux.useSelector(function (state) {
6880
- return state.users.totalItems;
6881
- });
6882
- var _useFilters = useFilters(),
6883
- filters = _useFilters.filters,
6884
- changeFilters = _useFilters.changeFilters;
6885
- var _useState = React.useState(!!queryName ? queryName : ""),
6886
- fullName = _useState[0],
6887
- setFullName = _useState[1];
6888
- var isDistrict = window.location.host.includes("-district");
7010
+ var initValue$3 = {
7011
+ id: "",
7012
+ firstName: "",
7013
+ lastName: "",
7014
+ email: "",
7015
+ dateOfBirth: "",
7016
+ roles: [],
7017
+ isActive: true,
7018
+ profileImageFileName: ""
7019
+ };
7020
+ var USER_LIST_URL = "/admin/user";
7021
+ var TITLE$7 = "User detail";
7022
+ var useUserDetail = function useUserDetail(id) {
6889
7023
  var dispatch = reactRedux.useDispatch();
6890
- var getData = React.useCallback(function (fullName) {
7024
+ var history = reactRouterDom.useHistory();
7025
+ var _useState = React.useState(initValue$3),
7026
+ userDetail = _useState[0],
7027
+ setUserDetail = _useState[1];
7028
+ var _useState2 = React.useState(null),
7029
+ file = _useState2[0],
7030
+ setFile = _useState2[1];
7031
+ var _useState3 = React.useState(false),
7032
+ edited = _useState3[0],
7033
+ setEdited = _useState3[1];
7034
+ var setEditedTrue = function setEditedTrue() {
7035
+ try {
7036
+ localStorage.setItem(window.location.href, "true");
7037
+ setEdited(true);
7038
+ return Promise.resolve();
7039
+ } catch (e) {
7040
+ return Promise.reject(e);
7041
+ }
7042
+ };
7043
+ var _useState4 = React.useState([]),
7044
+ currentRoles = _useState4[0],
7045
+ setCurrentRoles = _useState4[1];
7046
+ React.useEffect(function () {
7047
+ document.title = TITLE$7;
7048
+ setEdited(false);
7049
+ if (!!localStorage.getItem(window.location.href)) localStorage.removeItem(window.location.href);
7050
+ }, []);
7051
+ React.useEffect(function () {
7052
+ !!id && getData();
7053
+ }, [id]);
7054
+ var getData = React.useCallback(function () {
6891
7055
  try {
6892
7056
  var _temp2 = function _temp2() {
6893
7057
  dispatch(setLoading(false));
6894
7058
  };
6895
7059
  dispatch(setLoading(true));
6896
7060
  var _temp = _catch(function () {
6897
- return Promise.resolve(fullName ? get$5(_extends({}, filters, {
6898
- searchString: fullName
6899
- })) : get$5(filters)).then(function (res) {
6900
- var _res$data = res.data,
6901
- items = _res$data.items,
6902
- totalItems = _res$data.totalItems;
6903
- for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {
6904
- var user = _step.value;
6905
- user.roles = user.roles.includes("EduTeacher") ? [ROLES.EDUTEACHER] : user.roles;
6906
- }
6907
- dispatch(setUserList({
6908
- userList: items,
6909
- totalItems: totalItems
7061
+ return Promise.resolve(getById$3(id)).then(function (res) {
7062
+ var _res$data$roles, _res$data, _res$data2;
7063
+ setUserDetail(_extends({}, res.data, {
7064
+ dateOfBirth: dateFns.format(new Date(res.data.dateOfBirth), DATE_FORMAT),
7065
+ roles: res.data.roles.includes("EduTeacher") ? [ROLES.EDUTEACHER] : res.data.roles
6910
7066
  }));
7067
+ 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 : []);
7068
+ document.title = (_res$data2 = res.data) === null || _res$data2 === void 0 ? void 0 : _res$data2.fullName;
6911
7069
  });
6912
7070
  }, function (err) {
6913
7071
  var _err$response, _err$response$data;
@@ -6920,664 +7078,184 @@ var useUserList = function useUserList() {
6920
7078
  } catch (e) {
6921
7079
  return Promise.reject(e);
6922
7080
  }
6923
- }, [dispatch, filters]);
6924
- React.useEffect(function () {
6925
- document.title = TITLE$7;
7081
+ }, [id]);
7082
+ var backToList = React.useCallback(function (user) {
7083
+ !!user && typeof user === "string" ? history.push(USER_LIST_URL + ("?query=" + user)) : history.push(USER_LIST_URL);
6926
7084
  }, []);
6927
- React.useEffect(function () {
6928
- if (!!fullName) {
6929
- getData(fullName);
6930
- setFullName(null);
6931
- } else {
6932
- getData();
6933
- }
6934
- }, [filters]);
6935
- var removeData = React.useCallback(function (id) {
6936
- dispatch(setLoading(true));
7085
+ var confirmData = React.useCallback(function (data) {
6937
7086
  try {
6938
- dispatch(setModal({
6939
- isOpen: true,
6940
- type: "warning",
6941
- message: "Do you want to remove this user?",
6942
- onConfirm: function () {
6943
- try {
6944
- return Promise.resolve(remove$3(id)).then(function () {
6945
- dispatch(setAlert({
6946
- type: "success",
6947
- message: "Remove user successfully"
6948
- }));
6949
- changeFilters({
6950
- currentPage: 1
7087
+ var _temp6 = function _temp6() {
7088
+ dispatch(setLoading(false));
7089
+ };
7090
+ dispatch(setLoading(true));
7091
+ var _temp5 = _catch(function () {
7092
+ function _temp4() {
7093
+ var next = !!id ? update$5 : create$5;
7094
+ !id && delete data.id;
7095
+ return Promise.resolve(next(data)).then(function (result) {
7096
+ if (!!result) {
7097
+ getById$3(result.data.id).then(function (e) {
7098
+ backToList(e.data.fullName);
6951
7099
  });
6952
- });
6953
- } catch (e) {
6954
- return Promise.reject(e);
6955
- }
7100
+ }
7101
+ if (!id) {
7102
+ alert("Password of " + result.data.email + " is " + ("\"" + result.data.password + "\""));
7103
+ }
7104
+ dispatch(setAlert({
7105
+ type: "success",
7106
+ message: (!!id ? "Update" : "Create") + " user successfully"
7107
+ }));
7108
+ });
6956
7109
  }
6957
- }));
6958
- } catch (err) {
6959
- var _err$response2, _err$response2$data;
6960
- dispatch(setAlert({
6961
- type: "danger",
6962
- 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
6963
- }));
7110
+ var _temp3 = function () {
7111
+ if (!!file) {
7112
+ var formData = new FormData();
7113
+ var name = file.name;
7114
+ formData.append("file", file, name);
7115
+ return Promise.resolve(systemProfileUpload(formData)).then(function (res) {
7116
+ var _res$data3;
7117
+ var imageUrl = res === null || res === void 0 ? void 0 : (_res$data3 = res.data) === null || _res$data3 === void 0 ? void 0 : _res$data3.key;
7118
+ data.profileImageFileName = imageUrl;
7119
+ });
7120
+ }
7121
+ }();
7122
+ return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
7123
+ }, function (err) {
7124
+ var _err$response2, _err$response2$data;
7125
+ dispatch(setAlert({
7126
+ type: "danger",
7127
+ 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
7128
+ }));
7129
+ });
7130
+ return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
7131
+ } catch (e) {
7132
+ return Promise.reject(e);
6964
7133
  }
6965
- dispatch(setLoading(false));
6966
- }, [filters]);
6967
- var redirectLoginUser = function redirectLoginUser(res) {
6968
- var _res$data2 = res.data,
6969
- token = _res$data2.token,
6970
- id = _res$data2.id,
6971
- firstName = _res$data2.firstName,
6972
- lastName = _res$data2.lastName,
6973
- roles = _res$data2.roles,
6974
- email = _res$data2.email,
6975
- profileImageFileName = _res$data2.profileImageFileName;
6976
- localStorage.setItem(ACCESS_TOKEN, token);
6977
- localStorage.removeItem(NOTIFICATION_ALERT_KEY);
6978
- dispatch(setUser({
6979
- id: id,
6980
- firstName: firstName,
6981
- lastName: lastName,
6982
- roles: roles,
6983
- email: email,
6984
- profileImageFileName: profileImageFileName
6985
- }));
6986
- if (isDistrict) {
6987
- history.push(HOMEPAGE_DISTRICT$1);
6988
- } else if (roles.includes("Admin")) {
6989
- history.push(HOMEPAGE_ADMIN$1);
6990
- } else if (roles.includes("Teacher") || roles.includes("Assistant")) {
6991
- history.push(HOMEPAGE_TEACHER$1);
6992
- } else if (roles.includes("Student")) {
6993
- history.push(HOMEPAGE_STUDENT$1);
6994
- } else if (roles.includes("Parent")) {
6995
- history.push(HOMEPAGE_PARENT$1);
6996
- } else if (roles.includes("EduTeacher")) {
6997
- history.push(HOMEPAGE_EDU_TEACHER$1);
6998
- } else if (roles.includes("Counselor") || roles.includes("SecondaryTeacher")) {
6999
- history.push(HOMEPAGE_TEACHER$1);
7134
+ }, [id, file]);
7135
+ var handleDisableRoles = function handleDisableRoles(currentRoles) {
7136
+ return ["Student", "Parent", "EduTeacher"].includes(currentRoles);
7137
+ };
7138
+ var confirmChangePassword = function confirmChangePassword(data) {
7139
+ try {
7140
+ var _temp8 = function _temp8() {
7141
+ dispatch(setLoading(false));
7142
+ };
7143
+ dispatch(setLoading(true));
7144
+ var _temp7 = _catch(function () {
7145
+ return Promise.resolve(changePassword(data)).then(function () {
7146
+ dispatch(setAlert({
7147
+ type: "success",
7148
+ message: "Change password successfully"
7149
+ }));
7150
+ });
7151
+ }, function (e) {
7152
+ var _e$response, _e$response$data;
7153
+ dispatch(setAlert({
7154
+ type: "danger",
7155
+ 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
7156
+ }));
7157
+ });
7158
+ return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7));
7159
+ } catch (e) {
7160
+ return Promise.reject(e);
7000
7161
  }
7001
7162
  };
7002
- var swicthUser = React.useCallback(function (id) {
7163
+ var forgotPasswordRequest = React.useCallback(function (data) {
7003
7164
  try {
7004
- var _temp3 = _catch(function () {
7005
- return Promise.resolve(switchAccountUser(id)).then(function (res) {
7006
- var data = res.data;
7007
- dispatch(setModal({
7008
- isOpen: true,
7009
- type: "warning",
7010
- message: "Do you want to impersonate this user?",
7011
- onConfirm: function () {
7012
- try {
7013
- var _temp5 = function _temp5() {
7014
- dispatch(setLoading(false));
7015
- };
7016
- dispatch(setLoading(true));
7017
- var _temp4 = _catch(function () {
7018
- var req = {
7019
- email: data.email,
7020
- password: "default",
7021
- accessToken: data.token
7022
- };
7023
- return Promise.resolve(logIn(req)).then(function (res) {
7024
- localStorage.clear();
7025
- redirectLoginUser(res);
7026
- });
7027
- }, function (err) {
7028
- var _err$response3, _err$response3$data;
7029
- setAlert({
7030
- type: "danger",
7031
- 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
7032
- });
7033
- });
7034
- return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
7035
- } catch (e) {
7036
- return Promise.reject(e);
7037
- }
7038
- }
7165
+ var _temp10 = function _temp10() {
7166
+ dispatch(setLoading(false));
7167
+ };
7168
+ dispatch(setLoading(true));
7169
+ var _temp9 = _catch(function () {
7170
+ return Promise.resolve(forgotChangePassword(data)).then(function () {
7171
+ dispatch(setAlert({
7172
+ type: "success",
7173
+ message: "Send forgot password link successfully"
7039
7174
  }));
7040
7175
  });
7041
7176
  }, function (err) {
7042
- var _err$response4, _err$response4$data;
7177
+ var _err$response3, _err$response3$data;
7043
7178
  dispatch(setAlert({
7044
7179
  type: "danger",
7045
- 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
7180
+ 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"
7046
7181
  }));
7047
7182
  });
7048
- return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(function () {}) : void 0);
7183
+ return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9));
7049
7184
  } catch (e) {
7050
7185
  return Promise.reject(e);
7051
7186
  }
7052
- }, [filters]);
7053
- var reDirectDetailPage = function reDirectDetailPage(id) {
7054
- var url = !!id ? USER_URL$2 + "/" + id : CREATE_USER_URL;
7055
- history.push(url);
7056
- };
7187
+ }, []);
7057
7188
  return {
7058
- userList: userList,
7059
- totalItems: totalItems,
7060
- filters: filters,
7061
- queryName: queryName,
7062
- getData: getData,
7063
- removeData: removeData,
7064
- changeFilters: changeFilters,
7065
- reDirectDetailPage: reDirectDetailPage,
7066
- swicthUser: swicthUser
7189
+ userDetail: userDetail,
7190
+ backToList: backToList,
7191
+ confirmData: confirmData,
7192
+ file: file,
7193
+ setFile: setFile,
7194
+ edited: edited,
7195
+ setEdited: setEdited,
7196
+ setEditedTrue: setEditedTrue,
7197
+ confirmChangePassword: confirmChangePassword,
7198
+ forgotPasswordRequest: forgotPasswordRequest,
7199
+ currentRoles: currentRoles,
7200
+ handleDisableRoles: handleDisableRoles
7067
7201
  };
7068
7202
  };
7069
7203
 
7070
- var SearchBox = function SearchBox(_ref) {
7071
- var initValue = _ref.initValue,
7072
- onSearch = _ref.onSearch,
7073
- placeholder = _ref.placeholder,
7074
- className = _ref.className,
7075
- style = _ref.style;
7076
- var _useState = React.useState(initValue),
7077
- searchString = _useState[0],
7078
- setSearchString = _useState[1];
7079
- React.useEffect(function () {
7080
- setSearchString(initValue);
7081
- }, [initValue]);
7082
- var onKeyUp = React.useCallback(function (e) {
7083
- e.key === "Enter" && onSearch(searchString);
7084
- }, [searchString, onSearch]);
7085
- return React__default.createElement(reactstrap.Input, {
7086
- placeholder: placeholder,
7087
- value: searchString,
7088
- onChange: function onChange(e) {
7089
- return setSearchString(e.target.value);
7090
- },
7091
- onKeyUp: onKeyUp,
7092
- className: className,
7093
- style: style
7094
- });
7095
- };
7096
- SearchBox.defaultProps = {
7097
- placeholder: "Type something to search",
7098
- className: "",
7099
- style: {}
7100
- };
7101
- var SearchBox$1 = React.memo(SearchBox);
7102
-
7103
- var searchInputStyle = {
7104
- height: 38
7105
- };
7106
- var SearchBoxContainer = function SearchBoxContainer(_ref) {
7107
- var text = _ref.text,
7108
- initValue = _ref.initValue,
7109
- onClick = _ref.onClick,
7110
- onSearch = _ref.onSearch,
7111
- placeholder = _ref.placeholder;
7112
- return React__default.createElement("div", {
7113
- className: "d-flex align-items-center"
7114
- }, React__default.createElement("div", null, React__default.createElement(AddButton, {
7115
- text: text,
7116
- onClick: onClick
7117
- })), React__default.createElement("div", {
7118
- className: "flex-grow-1 ml-2"
7119
- }, React__default.createElement(SearchBox$1, {
7120
- initValue: initValue,
7121
- onSearch: onSearch,
7122
- placeholder: placeholder,
7123
- style: searchInputStyle
7124
- })));
7125
- };
7126
- SearchBoxContainer.defaultProps = {
7127
- placeholder: "Type something to search"
7128
- };
7204
+ var userSchema = yup.object({
7205
+ firstName: yup.string().required("First name is required"),
7206
+ lastName: yup.string().required("Last name is required"),
7207
+ dateOfBirth: yup.string().required("Date of birth is required"),
7208
+ email: yup.string().email("Email is invalid").required("Email is required"),
7209
+ roles: yup.array().of(yup.string()).min(1, "Role is required")
7210
+ });
7129
7211
 
7130
- var utcToLocalTime = (function (time, FORMAT) {
7131
- if (time === DATE_MIN_VALUE) return "";
7132
- try {
7133
- return moment.utc(time).local().format(FORMAT || "yyyy-MM-DD");
7134
- } catch (_unused) {
7135
- return "";
7136
- }
7212
+ var changePasswordSchema = yup.object({
7213
+ oldPassword: yup.string().required("Current password is required"),
7214
+ newPassword: yup.string().required("New password is required"),
7215
+ confirmedNewPassword: yup.string().required("Confirm password is required")
7137
7216
  });
7138
7217
 
7139
- var header$2 = "User";
7140
- var UserList = function UserList() {
7141
- var _useUserList = useUserList(),
7142
- queryName = _useUserList.queryName,
7143
- userList = _useUserList.userList,
7144
- totalItems = _useUserList.totalItems,
7145
- filters = _useUserList.filters,
7146
- removeData = _useUserList.removeData,
7147
- changeFilters = _useUserList.changeFilters,
7148
- reDirectDetailPage = _useUserList.reDirectDetailPage,
7149
- swicthUser = _useUserList.swicthUser;
7150
- var _useTranslation = reactI18next.useTranslation(),
7151
- t = _useTranslation.t;
7152
- return React__default.createElement("div", {
7153
- className: "fadeIn animated"
7154
- }, React__default.createElement("h5", {
7155
- className: "mb-2"
7156
- }, t("" + header$2)), React__default.createElement(reactstrap.Row, {
7157
- className: "my-2"
7158
- }, React__default.createElement(reactstrap.Col, {
7159
- md: 8
7160
- }, React__default.createElement(SearchBoxContainer, {
7161
- text: t("create_user"),
7162
- onClick: function onClick() {
7163
- return reDirectDetailPage();
7164
- },
7165
- initValue: !!queryName ? queryName : "",
7166
- onSearch: function onSearch(searchString) {
7167
- return changeFilters({
7168
- searchString: searchString
7169
- });
7170
- },
7171
- placeholder: t("type_something_to_search_by_user_name")
7172
- })), React__default.createElement(reactstrap.Col, {
7173
- md: 4,
7174
- className: "d-flex justify-content-end align-items-center"
7175
- }, t("total_of_users"), " : ", totalItems)), React__default.createElement(reactstrap.Row, {
7176
- className: "mb-2"
7177
- }, React__default.createElement(reactstrap.Col, {
7178
- md: 12
7179
- }, userList && userList.length > 0 ? React__default.createElement("div", null, React__default.createElement(reactstrap.Table, {
7180
- bordered: true,
7181
- hover: true,
7182
- striped: true,
7183
- responsive: true,
7184
- size: "sm"
7185
- }, React__default.createElement("thead", null, React__default.createElement("tr", null, React__default.createElement("th", {
7186
- className: "align-top"
7187
- }, t("name")), React__default.createElement("th", {
7188
- className: "align-top"
7189
- }, t("email")), React__default.createElement("th", {
7190
- className: "align-top"
7191
- }, t("age")), React__default.createElement("th", {
7192
- className: "align-top"
7193
- }, t("role")), React__default.createElement("th", {
7194
- className: "align-top"
7195
- }, t("active_status")), React__default.createElement("th", {
7196
- className: "align-top"
7197
- }, t("created_time")), React__default.createElement("th", {
7198
- className: "text-center"
7199
- }, t("action")))), React__default.createElement("tbody", null, userList.map(function (record) {
7200
- return React__default.createElement("tr", {
7201
- key: record.id
7202
- }, React__default.createElement("td", {
7203
- className: "align-middle"
7204
- }, React__default.createElement(LinkEditButton, {
7205
- label: "" + record.fullName,
7206
- onClick: function onClick() {
7207
- return reDirectDetailPage(record.id);
7208
- }
7209
- })), React__default.createElement("td", {
7210
- className: "align-middle"
7211
- }, record.email), React__default.createElement("td", {
7212
- className: "align-middle"
7213
- }, differenceInCalendarYears(new Date(), new Date(record.dateOfBirth))), React__default.createElement("td", {
7214
- className: "align-middle"
7215
- }, !!record.roles && record.roles.map(function (role) {
7216
- return role === "SecondaryTeacher" ? "SupportTeacher" : role;
7217
- }).join(", ")), React__default.createElement("td", {
7218
- className: "align-middle"
7219
- }, record.isActive ? t("active") : t("inactive")), React__default.createElement("td", {
7220
- className: "align-middle"
7221
- }, utcToLocalTime(record === null || record === void 0 ? void 0 : record.createTime, "yyyy-MM-DD HH:mm")), React__default.createElement("td", {
7222
- className: "text-center align-middle"
7223
- }, React__default.createElement(fa.FaUsersCog, {
7224
- style: {
7225
- fontSize: "18px",
7226
- marginRight: "10px",
7227
- cursor: "pointer"
7228
- },
7229
- onClick: function onClick() {
7230
- return swicthUser(record.id);
7231
- }
7232
- }), React__default.createElement(DeleteButtonIcon, {
7233
- onClick: function onClick() {
7234
- return removeData(record.id);
7235
- }
7236
- })));
7237
- })))) : React__default.createElement(EmptyDataAlert, {
7238
- label: t("user")
7239
- })), React__default.createElement(reactstrap.Col, {
7240
- md: 12
7241
- }, React__default.createElement(CustomPagination, {
7242
- filters: filters,
7243
- totalRecordCount: totalItems,
7244
- changePageSize: function changePageSize(pageSize) {
7245
- return changeFilters({
7246
- pageSize: pageSize
7247
- });
7248
- },
7249
- changePage: function changePage(currentPage) {
7250
- return changeFilters({
7251
- currentPage: currentPage
7252
- });
7253
- }
7254
- }))));
7255
- };
7256
-
7257
- var MAX_FILE_SIZE = 20097152;
7258
- var UploadFileButton = function UploadFileButton(_ref) {
7259
- var fileName = _ref.fileName,
7260
- maxWidth = _ref.maxWidth,
7261
- maxHeight = _ref.maxHeight,
7262
- setFile = _ref.setFile,
7263
- canDelete = _ref.canDelete,
7264
- onDelete = _ref.onDelete,
7265
- isCheckFeedBack = _ref.isCheckFeedBack,
7266
- onAddImage = _ref.onAddImage;
7267
- var dispatch = reactRedux.useDispatch();
7268
- var _useState = React.useState(""),
7269
- imagePreviewUrl = _useState[0],
7270
- setImagePreviewUrl = _useState[1];
7271
- var imageStyle = {
7272
- maxWidth: maxWidth || "100%",
7273
- maxHeight: maxHeight || "100%"
7218
+ var CREATE_USER = "create_user";
7219
+ var EDIT_USER_HEADER = "edit_user";
7220
+ var CHANGE_PASSWORD$1 = "change_password";
7221
+ var UserDetail = function UserDetail() {
7222
+ var _useParams = reactRouterDom.useParams(),
7223
+ id = _useParams.id;
7224
+ var user = reactRedux.useSelector(function (state) {
7225
+ return state.common.user;
7226
+ });
7227
+ var _useTranslation = reactI18next.useTranslation(),
7228
+ t = _useTranslation.t;
7229
+ var _useUserDetail = useUserDetail(id),
7230
+ userDetail = _useUserDetail.userDetail,
7231
+ backToList = _useUserDetail.backToList,
7232
+ confirmData = _useUserDetail.confirmData,
7233
+ file = _useUserDetail.file,
7234
+ setFile = _useUserDetail.setFile,
7235
+ edited = _useUserDetail.edited,
7236
+ setEdited = _useUserDetail.setEdited,
7237
+ setEditedTrue = _useUserDetail.setEditedTrue,
7238
+ confirmChangePassword = _useUserDetail.confirmChangePassword,
7239
+ forgotPasswordRequest = _useUserDetail.forgotPasswordRequest,
7240
+ currentRoles = _useUserDetail.currentRoles,
7241
+ handleDisableRoles = _useUserDetail.handleDisableRoles;
7242
+ var initialValueForm = {
7243
+ oldPassword: "",
7244
+ newPassword: "",
7245
+ confirmedNewPassword: ""
7274
7246
  };
7275
- var imageSrc = imagePreviewUrl || getFileUrl(fileName);
7276
- var handleImageChange = function handleImageChange(e) {
7277
- e.preventDefault();
7278
- var reader = new FileReader();
7279
- var newFile = e.target.files[0];
7280
- if (newFile.size > MAX_FILE_SIZE) {
7281
- dispatch(setAlert({
7282
- type: "danger",
7283
- message: "File can't be larger than 2MB"
7284
- }));
7285
- return;
7286
- }
7287
- reader.onloadend = function () {
7288
- setFile(newFile);
7289
- setImagePreviewUrl(reader.result);
7290
- };
7291
- if (newFile) {
7292
- reader.readAsDataURL(newFile);
7293
- }
7294
- !!onAddImage && onAddImage();
7247
+ var header = !!id ? t("" + EDIT_USER_HEADER) : t("" + CREATE_USER);
7248
+ var confirmText = !!id ? t("update") : t("create");
7249
+ var getFile = function getFile() {
7250
+ var url = window.location.origin + "/api/ExportDataUser/" + id;
7251
+ window.open(url);
7295
7252
  };
7296
- var imagePreviewContainer = imagePreviewUrl || fileName ? React__default.createElement("img", {
7297
- style: imageStyle,
7298
- src: imageSrc,
7299
- alt: "image"
7300
- }) : null;
7301
- return React__default.createElement("div", {
7302
- className: "mb-2"
7303
- }, React__default.createElement(reactstrap.Form, {
7304
- className: "mb-2"
7305
- }, React__default.createElement(reactstrap.Input, {
7306
- className: "d-none",
7307
- type: "file",
7308
- id: "uploadFile",
7309
- onChange: handleImageChange,
7310
- accept: "image/*"
7311
- }), React__default.createElement("div", {
7312
- className: "d-flex align-items-center"
7313
- }, React__default.createElement(reactstrap.Label, {
7314
- htmlFor: "uploadFile",
7315
- role: "button",
7316
- tabIndex: 0,
7317
- className: styles["input-file-label"]
7318
- }, isCheckFeedBack == true ? React__default.createElement(md.MdAttachFile, null) : React__default.createElement(React__default.Fragment, null, React__default.createElement("i", {
7319
- className: "fa fa-paperclip mr-1",
7320
- "aria-hidden": "true"
7321
- }), imagePreviewUrl || fileName ? "Change file" : "Choose file")), canDelete && imagePreviewContainer && React__default.createElement(reactstrap.Button, {
7322
- size: "sm",
7323
- color: "danger",
7324
- className: styles["delete-avatar-button"] + " ml-2 d-flex align-items-center justify-content-center",
7325
- onClick: function onClick() {
7326
- setImagePreviewUrl(null);
7327
- onDelete && onDelete();
7328
- }
7329
- }, React__default.createElement(fa.FaTrashAlt, null)))), imagePreviewContainer);
7330
- };
7331
-
7332
- var initValue$3 = {
7333
- id: "",
7334
- firstName: "",
7335
- lastName: "",
7336
- email: "",
7337
- dateOfBirth: "",
7338
- roles: [],
7339
- isActive: true,
7340
- profileImageFileName: ""
7341
- };
7342
- var USER_LIST_URL = "/admin/user";
7343
- var TITLE$8 = "User detail";
7344
- var useUserDetail = function useUserDetail(id) {
7345
- var dispatch = reactRedux.useDispatch();
7346
- var history = reactRouterDom.useHistory();
7347
- var _useState = React.useState(initValue$3),
7348
- userDetail = _useState[0],
7349
- setUserDetail = _useState[1];
7350
- var _useState2 = React.useState(null),
7351
- file = _useState2[0],
7352
- setFile = _useState2[1];
7353
- var _useState3 = React.useState(false),
7354
- edited = _useState3[0],
7355
- setEdited = _useState3[1];
7356
- var setEditedTrue = function setEditedTrue() {
7253
+ var onResetPw = function onResetPw(email) {
7357
7254
  try {
7358
- localStorage.setItem(window.location.href, "true");
7359
- setEdited(true);
7360
- return Promise.resolve();
7361
- } catch (e) {
7362
- return Promise.reject(e);
7363
- }
7364
- };
7365
- var _useState4 = React.useState([]),
7366
- currentRoles = _useState4[0],
7367
- setCurrentRoles = _useState4[1];
7368
- React.useEffect(function () {
7369
- document.title = TITLE$8;
7370
- setEdited(false);
7371
- if (!!localStorage.getItem(window.location.href)) localStorage.removeItem(window.location.href);
7372
- }, []);
7373
- React.useEffect(function () {
7374
- !!id && getData();
7375
- }, [id]);
7376
- var getData = React.useCallback(function () {
7377
- try {
7378
- var _temp2 = function _temp2() {
7379
- dispatch(setLoading(false));
7380
- };
7381
- dispatch(setLoading(true));
7382
- var _temp = _catch(function () {
7383
- return Promise.resolve(getById$3(id)).then(function (res) {
7384
- var _res$data$roles, _res$data, _res$data2;
7385
- setUserDetail(_extends({}, res.data, {
7386
- dateOfBirth: dateFns.format(new Date(res.data.dateOfBirth), DATE_FORMAT),
7387
- roles: res.data.roles.includes("EduTeacher") ? [ROLES.EDUTEACHER] : res.data.roles
7388
- }));
7389
- 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 : []);
7390
- document.title = (_res$data2 = res.data) === null || _res$data2 === void 0 ? void 0 : _res$data2.fullName;
7391
- });
7392
- }, function (err) {
7393
- var _err$response, _err$response$data;
7394
- dispatch(setAlert({
7395
- type: "danger",
7396
- 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
7397
- }));
7398
- });
7399
- return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
7400
- } catch (e) {
7401
- return Promise.reject(e);
7402
- }
7403
- }, [id]);
7404
- var backToList = React.useCallback(function (user) {
7405
- !!user && typeof user === "string" ? history.push(USER_LIST_URL + ("?query=" + user)) : history.push(USER_LIST_URL);
7406
- }, []);
7407
- var confirmData = React.useCallback(function (data) {
7408
- try {
7409
- var _temp6 = function _temp6() {
7410
- dispatch(setLoading(false));
7411
- };
7412
- dispatch(setLoading(true));
7413
- var _temp5 = _catch(function () {
7414
- function _temp4() {
7415
- var next = !!id ? update$5 : create$5;
7416
- !id && delete data.id;
7417
- return Promise.resolve(next(data)).then(function (result) {
7418
- if (!!result) {
7419
- getById$3(result.data.id).then(function (e) {
7420
- backToList(e.data.fullName);
7421
- });
7422
- }
7423
- if (!id) {
7424
- alert("Password of " + result.data.email + " is " + ("\"" + result.data.password + "\""));
7425
- }
7426
- dispatch(setAlert({
7427
- type: "success",
7428
- message: (!!id ? "Update" : "Create") + " user successfully"
7429
- }));
7430
- });
7431
- }
7432
- var _temp3 = function () {
7433
- if (!!file) {
7434
- var formData = new FormData();
7435
- var name = file.name;
7436
- formData.append("file", file, name);
7437
- return Promise.resolve(systemProfileUpload(formData)).then(function (res) {
7438
- var _res$data3;
7439
- var imageUrl = res === null || res === void 0 ? void 0 : (_res$data3 = res.data) === null || _res$data3 === void 0 ? void 0 : _res$data3.key;
7440
- data.profileImageFileName = imageUrl;
7441
- });
7442
- }
7443
- }();
7444
- return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
7445
- }, function (err) {
7446
- var _err$response2, _err$response2$data;
7447
- dispatch(setAlert({
7448
- type: "danger",
7449
- 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
7450
- }));
7451
- });
7452
- return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
7453
- } catch (e) {
7454
- return Promise.reject(e);
7455
- }
7456
- }, [id, file]);
7457
- var handleDisableRoles = function handleDisableRoles(currentRoles) {
7458
- return ["Student", "Parent", "EduTeacher"].includes(currentRoles);
7459
- };
7460
- var confirmChangePassword = function confirmChangePassword(data) {
7461
- try {
7462
- var _temp8 = function _temp8() {
7463
- dispatch(setLoading(false));
7464
- };
7465
- dispatch(setLoading(true));
7466
- var _temp7 = _catch(function () {
7467
- return Promise.resolve(changePassword(data)).then(function () {
7468
- dispatch(setAlert({
7469
- type: "success",
7470
- message: "Change password successfully"
7471
- }));
7472
- });
7473
- }, function (e) {
7474
- var _e$response, _e$response$data;
7475
- dispatch(setAlert({
7476
- type: "danger",
7477
- 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
7478
- }));
7479
- });
7480
- return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7));
7481
- } catch (e) {
7482
- return Promise.reject(e);
7483
- }
7484
- };
7485
- var forgotPasswordRequest = React.useCallback(function (data) {
7486
- try {
7487
- var _temp10 = function _temp10() {
7488
- dispatch(setLoading(false));
7489
- };
7490
- dispatch(setLoading(true));
7491
- var _temp9 = _catch(function () {
7492
- return Promise.resolve(forgotChangePassword(data)).then(function () {
7493
- dispatch(setAlert({
7494
- type: "success",
7495
- message: "Send forgot password link successfully"
7496
- }));
7497
- });
7498
- }, function (err) {
7499
- var _err$response3, _err$response3$data;
7500
- dispatch(setAlert({
7501
- type: "danger",
7502
- 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"
7503
- }));
7504
- });
7505
- return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(_temp10) : _temp10(_temp9));
7506
- } catch (e) {
7507
- return Promise.reject(e);
7508
- }
7509
- }, []);
7510
- return {
7511
- userDetail: userDetail,
7512
- backToList: backToList,
7513
- confirmData: confirmData,
7514
- file: file,
7515
- setFile: setFile,
7516
- edited: edited,
7517
- setEdited: setEdited,
7518
- setEditedTrue: setEditedTrue,
7519
- confirmChangePassword: confirmChangePassword,
7520
- forgotPasswordRequest: forgotPasswordRequest,
7521
- currentRoles: currentRoles,
7522
- handleDisableRoles: handleDisableRoles
7523
- };
7524
- };
7525
-
7526
- var userSchema = yup.object({
7527
- firstName: yup.string().required("First name is required"),
7528
- lastName: yup.string().required("Last name is required"),
7529
- dateOfBirth: yup.string().required("Date of birth is required"),
7530
- email: yup.string().email("Email is invalid").required("Email is required"),
7531
- roles: yup.array().of(yup.string()).min(1, "Role is required")
7532
- });
7533
-
7534
- var changePasswordSchema = yup.object({
7535
- oldPassword: yup.string().required("Current password is required"),
7536
- newPassword: yup.string().required("New password is required"),
7537
- confirmedNewPassword: yup.string().required("Confirm password is required")
7538
- });
7539
-
7540
- var CREATE_USER = "create_user";
7541
- var EDIT_USER_HEADER = "edit_user";
7542
- var CHANGE_PASSWORD$1 = "change_password";
7543
- var UserDetail = function UserDetail() {
7544
- var _useParams = reactRouterDom.useParams(),
7545
- id = _useParams.id;
7546
- var user = reactRedux.useSelector(function (state) {
7547
- return state.common.user;
7548
- });
7549
- var _useTranslation = reactI18next.useTranslation(),
7550
- t = _useTranslation.t;
7551
- var _useUserDetail = useUserDetail(id),
7552
- userDetail = _useUserDetail.userDetail,
7553
- backToList = _useUserDetail.backToList,
7554
- confirmData = _useUserDetail.confirmData,
7555
- file = _useUserDetail.file,
7556
- setFile = _useUserDetail.setFile,
7557
- edited = _useUserDetail.edited,
7558
- setEdited = _useUserDetail.setEdited,
7559
- setEditedTrue = _useUserDetail.setEditedTrue,
7560
- confirmChangePassword = _useUserDetail.confirmChangePassword,
7561
- forgotPasswordRequest = _useUserDetail.forgotPasswordRequest,
7562
- currentRoles = _useUserDetail.currentRoles,
7563
- handleDisableRoles = _useUserDetail.handleDisableRoles;
7564
- var initialValueForm = {
7565
- oldPassword: "",
7566
- newPassword: "",
7567
- confirmedNewPassword: ""
7568
- };
7569
- var header = !!id ? t("" + EDIT_USER_HEADER) : t("" + CREATE_USER);
7570
- var confirmText = !!id ? t("update") : t("create");
7571
- var getFile = function getFile() {
7572
- var url = window.location.origin + "/api/ExportDataUser/" + id;
7573
- window.open(url);
7574
- };
7575
- var onResetPw = function onResetPw(email) {
7576
- try {
7577
- var data = {
7578
- email: email
7579
- };
7580
- forgotPasswordRequest(data);
7255
+ var data = {
7256
+ email: email
7257
+ };
7258
+ forgotPasswordRequest(data);
7581
7259
  return Promise.resolve();
7582
7260
  } catch (e) {
7583
7261
  return Promise.reject(e);
@@ -7963,6 +7641,15 @@ var CommonHeader = function CommonHeader(_ref) {
7963
7641
  }, header))));
7964
7642
  };
7965
7643
 
7644
+ var utcToLocalTime = (function (time, FORMAT) {
7645
+ if (time === DATE_MIN_VALUE) return "";
7646
+ try {
7647
+ return moment.utc(time).local().format(FORMAT || "yyyy-MM-DD");
7648
+ } catch (_unused) {
7649
+ return "";
7650
+ }
7651
+ });
7652
+
7966
7653
  var NotificationLogoutModal = function NotificationLogoutModal() {
7967
7654
  var _useState = React.useState(false),
7968
7655
  isOpen = _useState[0],
@@ -8050,6 +7737,39 @@ var CreatableSelector = function CreatableSelector(props) {
8050
7737
  });
8051
7738
  };
8052
7739
 
7740
+ var SearchBox = function SearchBox(_ref) {
7741
+ var initValue = _ref.initValue,
7742
+ onSearch = _ref.onSearch,
7743
+ placeholder = _ref.placeholder,
7744
+ className = _ref.className,
7745
+ style = _ref.style;
7746
+ var _useState = React.useState(initValue),
7747
+ searchString = _useState[0],
7748
+ setSearchString = _useState[1];
7749
+ React.useEffect(function () {
7750
+ setSearchString(initValue);
7751
+ }, [initValue]);
7752
+ var onKeyUp = React.useCallback(function (e) {
7753
+ e.key === "Enter" && onSearch(searchString);
7754
+ }, [searchString, onSearch]);
7755
+ return React__default.createElement(reactstrap.Input, {
7756
+ placeholder: placeholder,
7757
+ value: searchString,
7758
+ onChange: function onChange(e) {
7759
+ return setSearchString(e.target.value);
7760
+ },
7761
+ onKeyUp: onKeyUp,
7762
+ className: className,
7763
+ style: style
7764
+ });
7765
+ };
7766
+ SearchBox.defaultProps = {
7767
+ placeholder: "Type something to search",
7768
+ className: "",
7769
+ style: {}
7770
+ };
7771
+ var SearchBox$1 = React.memo(SearchBox);
7772
+
8053
7773
  var QuestionTypeSelector = function QuestionTypeSelector(props) {
8054
7774
  var id = props.id;
8055
7775
  var initValue = !!id ? QUESTION_TYPES_OPTIONS.find(function (option) {
@@ -8381,7 +8101,7 @@ var defaultFilters = {
8381
8101
  searchString: "",
8382
8102
  isRead: false
8383
8103
  };
8384
- var TITLE$9 = "Notification list";
8104
+ var TITLE$8 = "Notification list";
8385
8105
  var NOTIFICATION_CHANNEL$1 = "NOTIFICATION_CHANNEL";
8386
8106
  var NEW_NOTIFICATION$1 = "NEW_NOTIFICATION";
8387
8107
  var useNotificationList = function useNotificationList() {
@@ -8496,7 +8216,7 @@ var useNotificationList = function useNotificationList() {
8496
8216
  }
8497
8217
  }, [filters]);
8498
8218
  React.useEffect(function () {
8499
- document.title = TITLE$9;
8219
+ document.title = TITLE$8;
8500
8220
  }, []);
8501
8221
  React.useEffect(function () {
8502
8222
  getData();
@@ -8578,7 +8298,7 @@ var useNotificationList = function useNotificationList() {
8578
8298
  };
8579
8299
  };
8580
8300
 
8581
- var header$3 = "Notification list";
8301
+ var header$2 = "Notification list";
8582
8302
  var ICON_SIZE = 20;
8583
8303
  var NotificationList = function NotificationList() {
8584
8304
  var _useNotificationList = useNotificationList(),
@@ -8597,7 +8317,7 @@ var NotificationList = function NotificationList() {
8597
8317
  }
8598
8318
  }, React__default.createElement("h5", {
8599
8319
  className: "mb-2"
8600
- }, header$3), React__default.createElement(reactstrap.Row, {
8320
+ }, header$2), React__default.createElement(reactstrap.Row, {
8601
8321
  className: "my-2"
8602
8322
  }, React__default.createElement(reactstrap.Col, {
8603
8323
  md: 8
@@ -8697,12 +8417,39 @@ var NotificationList = function NotificationList() {
8697
8417
  }))));
8698
8418
  };
8699
8419
 
8700
- var CustomTabs = function CustomTabs(props) {
8701
- var history = reactRouterDom.useHistory();
8702
- var location = reactRouterDom.useLocation();
8703
- var pathname = location.pathname;
8704
- var tabs = props.tabs,
8705
- title = props.title;
8420
+ var searchInputStyle = {
8421
+ height: 38
8422
+ };
8423
+ var SearchBoxContainer = function SearchBoxContainer(_ref) {
8424
+ var text = _ref.text,
8425
+ initValue = _ref.initValue,
8426
+ onClick = _ref.onClick,
8427
+ onSearch = _ref.onSearch,
8428
+ placeholder = _ref.placeholder;
8429
+ return React__default.createElement("div", {
8430
+ className: "d-flex align-items-center"
8431
+ }, React__default.createElement("div", null, React__default.createElement(AddButton, {
8432
+ text: text,
8433
+ onClick: onClick
8434
+ })), React__default.createElement("div", {
8435
+ className: "flex-grow-1 ml-2"
8436
+ }, React__default.createElement(SearchBox$1, {
8437
+ initValue: initValue,
8438
+ onSearch: onSearch,
8439
+ placeholder: placeholder,
8440
+ style: searchInputStyle
8441
+ })));
8442
+ };
8443
+ SearchBoxContainer.defaultProps = {
8444
+ placeholder: "Type something to search"
8445
+ };
8446
+
8447
+ var CustomTabs = function CustomTabs(props) {
8448
+ var history = reactRouterDom.useHistory();
8449
+ var location = reactRouterDom.useLocation();
8450
+ var pathname = location.pathname;
8451
+ var tabs = props.tabs,
8452
+ title = props.title;
8706
8453
  var toggle = function toggle(path) {
8707
8454
  history.push(path);
8708
8455
  };
@@ -9068,7 +8815,7 @@ var get$8 = function get(filter) {
9068
8815
  });
9069
8816
  };
9070
8817
 
9071
- var TITLE$a = "Gallery";
8818
+ var TITLE$9 = "Gallery";
9072
8819
  var defaultFilter = {
9073
8820
  searchString: ""
9074
8821
  };
@@ -9277,7 +9024,7 @@ var useGalleryList = function useGalleryList(isLibrary) {
9277
9024
  }
9278
9025
  }, [dispatch, filters]);
9279
9026
  React.useEffect(function () {
9280
- document.title = TITLE$a;
9027
+ document.title = TITLE$9;
9281
9028
  dispatch(setTargetMedia({
9282
9029
  targetMedia: undefined
9283
9030
  }));
@@ -9457,7 +9204,7 @@ var MediaDetail = function MediaDetail(_ref) {
9457
9204
  };
9458
9205
  var MediaDetail$1 = React__default.memo(MediaDetail);
9459
9206
 
9460
- var header$4 = "Gallery";
9207
+ var header$3 = "Gallery";
9461
9208
  var GalleryList = function GalleryList(_ref) {
9462
9209
  var isLibrary = _ref.isLibrary;
9463
9210
  var targetMedia = reactRedux.useSelector(function (state) {
@@ -9467,7 +9214,7 @@ var GalleryList = function GalleryList(_ref) {
9467
9214
  className: "fadeIn animated"
9468
9215
  }, !isLibrary && React__default.createElement("h5", {
9469
9216
  className: "mb-2"
9470
- }, header$4), React__default.createElement(reactstrap.Row, {
9217
+ }, header$3), React__default.createElement(reactstrap.Row, {
9471
9218
  className: "mb-2"
9472
9219
  }, React__default.createElement(reactstrap.Col, {
9473
9220
  md: 8
@@ -9545,17 +9292,6 @@ var reduxLogger = createCommonjsModule(function (module, exports) {
9545
9292
 
9546
9293
  var logger = unwrapExports(reduxLogger);
9547
9294
 
9548
- /**
9549
- * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js
9550
- *
9551
- * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes
9552
- * during build.
9553
- * @param {number} code
9554
- */
9555
- function formatProdErrorMessage(code) {
9556
- 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. ';
9557
- }
9558
-
9559
9295
  /**
9560
9296
  * These are private action types reserved by Redux.
9561
9297
  * For any unknown actions, you must return the current state.
@@ -9589,65 +9325,6 @@ function isPlainObject(obj) {
9589
9325
  return Object.getPrototypeOf(obj) === proto;
9590
9326
  }
9591
9327
 
9592
- // Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of
9593
- function miniKindOf(val) {
9594
- if (val === void 0) return 'undefined';
9595
- if (val === null) return 'null';
9596
- var type = typeof val;
9597
-
9598
- switch (type) {
9599
- case 'boolean':
9600
- case 'string':
9601
- case 'number':
9602
- case 'symbol':
9603
- case 'function':
9604
- {
9605
- return type;
9606
- }
9607
- }
9608
-
9609
- if (Array.isArray(val)) return 'array';
9610
- if (isDate(val)) return 'date';
9611
- if (isError(val)) return 'error';
9612
- var constructorName = ctorName(val);
9613
-
9614
- switch (constructorName) {
9615
- case 'Symbol':
9616
- case 'Promise':
9617
- case 'WeakMap':
9618
- case 'WeakSet':
9619
- case 'Map':
9620
- case 'Set':
9621
- return constructorName;
9622
- } // other
9623
-
9624
-
9625
- return type.slice(8, -1).toLowerCase().replace(/\s/g, '');
9626
- }
9627
-
9628
- function ctorName(val) {
9629
- return typeof val.constructor === 'function' ? val.constructor.name : null;
9630
- }
9631
-
9632
- function isError(val) {
9633
- return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';
9634
- }
9635
-
9636
- function isDate(val) {
9637
- if (val instanceof Date) return true;
9638
- return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';
9639
- }
9640
-
9641
- function kindOf(val) {
9642
- var typeOfVal = typeof val;
9643
-
9644
- if (process.env.NODE_ENV !== 'production') {
9645
- typeOfVal = miniKindOf(val);
9646
- }
9647
-
9648
- return typeOfVal;
9649
- }
9650
-
9651
9328
  /**
9652
9329
  * Prints a warning in the console if it exists.
9653
9330
  *
@@ -9671,6 +9348,12 @@ function warning(message) {
9671
9348
 
9672
9349
  }
9673
9350
 
9351
+ function getUndefinedStateErrorMessage(key, action) {
9352
+ var actionType = action && action.type;
9353
+ var actionDescription = actionType && "action \"" + String(actionType) + "\"" || 'an action';
9354
+ 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.";
9355
+ }
9356
+
9674
9357
  function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {
9675
9358
  var reducerKeys = Object.keys(reducers);
9676
9359
  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';
@@ -9680,7 +9363,7 @@ function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, une
9680
9363
  }
9681
9364
 
9682
9365
  if (!isPlainObject(inputState)) {
9683
- return "The " + argumentName + " has unexpected type of \"" + kindOf(inputState) + "\". Expected argument to be an object with the following " + ("keys: \"" + reducerKeys.join('", "') + "\"");
9366
+ 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('", "') + "\"");
9684
9367
  }
9685
9368
 
9686
9369
  var unexpectedKeys = Object.keys(inputState).filter(function (key) {
@@ -9704,13 +9387,13 @@ function assertReducerShape(reducers) {
9704
9387
  });
9705
9388
 
9706
9389
  if (typeof initialState === 'undefined') {
9707
- 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.");
9390
+ 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.");
9708
9391
  }
9709
9392
 
9710
9393
  if (typeof reducer(undefined, {
9711
9394
  type: ActionTypes.PROBE_UNKNOWN_ACTION()
9712
9395
  }) === 'undefined') {
9713
- 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.");
9396
+ 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.");
9714
9397
  }
9715
9398
  });
9716
9399
  }
@@ -9794,8 +9477,8 @@ function combineReducers(reducers) {
9794
9477
  var nextStateForKey = reducer(previousStateForKey, action);
9795
9478
 
9796
9479
  if (typeof nextStateForKey === 'undefined') {
9797
- var actionType = action && action.type;
9798
- 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.");
9480
+ var errorMessage = getUndefinedStateErrorMessage(_key, action);
9481
+ throw new Error(errorMessage);
9799
9482
  }
9800
9483
 
9801
9484
  nextState[_key] = nextStateForKey;
@@ -9807,6 +9490,17 @@ function combineReducers(reducers) {
9807
9490
  };
9808
9491
  }
9809
9492
 
9493
+ /*
9494
+ * This is a dummy function to check if the function name has been altered by minification.
9495
+ * If the function has been minified and NODE_ENV !== 'production', warn the user.
9496
+ */
9497
+
9498
+ function isCrushed() {}
9499
+
9500
+ if (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {
9501
+ 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.');
9502
+ }
9503
+
9810
9504
  var _localStorage$getItem;
9811
9505
  var initialState = {
9812
9506
  sidebarShow: "responsive",
@@ -10105,6 +9799,9 @@ var commonReducer$8 = toolkit.createReducer(initialState$e, function (builder) {
10105
9799
  });
10106
9800
  });
10107
9801
 
9802
+ var setUserList = toolkit.createAction("users/setUserList");
9803
+ var setStudentList = toolkit.createAction("users/setStudentList");
9804
+
10108
9805
  var initialState$f = {
10109
9806
  userList: [],
10110
9807
  totalItems: 0,
@@ -10790,6 +10487,333 @@ var generateRandomString = (function () {
10790
10487
 
10791
10488
  var amplitudeClient = amplitude.getInstance();
10792
10489
 
10490
+ var USER_URL$2 = "/admin/user";
10491
+ var CREATE_USER_URL = "/admin/create-user";
10492
+ var TITLE$a = "User list";
10493
+ var HOMEPAGE_TEACHER$1 = "/home";
10494
+ var HOMEPAGE_STUDENT$1 = "/home";
10495
+ var HOMEPAGE_ADMIN$1 = "/admin/dashboard";
10496
+ var HOMEPAGE_PARENT$1 = "/parent";
10497
+ var HOMEPAGE_DISTRICT$1 = "/admin/schools";
10498
+ var HOMEPAGE_EDU_TEACHER$1 = "/list-student";
10499
+ var useUserList = function useUserList() {
10500
+ var history = reactRouterDom.useHistory();
10501
+ var query = new URLSearchParams(location.search);
10502
+ var queryName = query.get("query");
10503
+ var userList = reactRedux.useSelector(function (state) {
10504
+ return state.users.userList;
10505
+ });
10506
+ var totalItems = reactRedux.useSelector(function (state) {
10507
+ return state.users.totalItems;
10508
+ });
10509
+ var _useFilters = useFilters(),
10510
+ filters = _useFilters.filters,
10511
+ changeFilters = _useFilters.changeFilters;
10512
+ var _useState = React.useState(!!queryName ? queryName : ""),
10513
+ fullName = _useState[0],
10514
+ setFullName = _useState[1];
10515
+ var isDistrict = window.location.host.includes("-district");
10516
+ var dispatch = reactRedux.useDispatch();
10517
+ var getData = React.useCallback(function (fullName) {
10518
+ try {
10519
+ var _temp2 = function _temp2() {
10520
+ dispatch(setLoading(false));
10521
+ };
10522
+ dispatch(setLoading(true));
10523
+ var _temp = _catch(function () {
10524
+ return Promise.resolve(fullName ? get$5(_extends({}, filters, {
10525
+ searchString: fullName
10526
+ })) : get$5(filters)).then(function (res) {
10527
+ var _res$data = res.data,
10528
+ items = _res$data.items,
10529
+ totalItems = _res$data.totalItems;
10530
+ for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {
10531
+ var user = _step.value;
10532
+ user.roles = user.roles.includes("EduTeacher") ? [ROLES.EDUTEACHER] : user.roles;
10533
+ }
10534
+ dispatch(setUserList({
10535
+ userList: items,
10536
+ totalItems: totalItems
10537
+ }));
10538
+ });
10539
+ }, function (err) {
10540
+ var _err$response, _err$response$data;
10541
+ dispatch(setAlert({
10542
+ type: "danger",
10543
+ 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
10544
+ }));
10545
+ });
10546
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
10547
+ } catch (e) {
10548
+ return Promise.reject(e);
10549
+ }
10550
+ }, [dispatch, filters]);
10551
+ React.useEffect(function () {
10552
+ document.title = TITLE$a;
10553
+ }, []);
10554
+ React.useEffect(function () {
10555
+ if (!!fullName) {
10556
+ getData(fullName);
10557
+ setFullName(null);
10558
+ } else {
10559
+ getData();
10560
+ }
10561
+ }, [filters]);
10562
+ var removeData = React.useCallback(function (id) {
10563
+ dispatch(setLoading(true));
10564
+ try {
10565
+ dispatch(setModal({
10566
+ isOpen: true,
10567
+ type: "warning",
10568
+ message: "Do you want to remove this user?",
10569
+ onConfirm: function () {
10570
+ try {
10571
+ return Promise.resolve(remove$3(id)).then(function () {
10572
+ dispatch(setAlert({
10573
+ type: "success",
10574
+ message: "Remove user successfully"
10575
+ }));
10576
+ changeFilters({
10577
+ currentPage: 1
10578
+ });
10579
+ });
10580
+ } catch (e) {
10581
+ return Promise.reject(e);
10582
+ }
10583
+ }
10584
+ }));
10585
+ } catch (err) {
10586
+ var _err$response2, _err$response2$data;
10587
+ dispatch(setAlert({
10588
+ type: "danger",
10589
+ 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
10590
+ }));
10591
+ }
10592
+ dispatch(setLoading(false));
10593
+ }, [filters]);
10594
+ var redirectLoginUser = function redirectLoginUser(res) {
10595
+ var _res$data2 = res.data,
10596
+ token = _res$data2.token,
10597
+ id = _res$data2.id,
10598
+ firstName = _res$data2.firstName,
10599
+ lastName = _res$data2.lastName,
10600
+ roles = _res$data2.roles,
10601
+ email = _res$data2.email,
10602
+ profileImageFileName = _res$data2.profileImageFileName;
10603
+ localStorage.setItem(ACCESS_TOKEN, token);
10604
+ localStorage.removeItem(NOTIFICATION_ALERT_KEY);
10605
+ dispatch(setUser({
10606
+ id: id,
10607
+ firstName: firstName,
10608
+ lastName: lastName,
10609
+ roles: roles,
10610
+ email: email,
10611
+ profileImageFileName: profileImageFileName
10612
+ }));
10613
+ if (isDistrict) {
10614
+ history.push(HOMEPAGE_DISTRICT$1);
10615
+ } else if (roles.includes("Admin")) {
10616
+ history.push(HOMEPAGE_ADMIN$1);
10617
+ } else if (roles.includes("Teacher") || roles.includes("Assistant")) {
10618
+ history.push(HOMEPAGE_TEACHER$1);
10619
+ } else if (roles.includes("Student")) {
10620
+ history.push(HOMEPAGE_STUDENT$1);
10621
+ } else if (roles.includes("Parent")) {
10622
+ history.push(HOMEPAGE_PARENT$1);
10623
+ } else if (roles.includes("EduTeacher")) {
10624
+ history.push(HOMEPAGE_EDU_TEACHER$1);
10625
+ } else if (roles.includes("Counselor") || roles.includes("SecondaryTeacher")) {
10626
+ history.push(HOMEPAGE_TEACHER$1);
10627
+ }
10628
+ };
10629
+ var swicthUser = React.useCallback(function (id) {
10630
+ try {
10631
+ var _temp3 = _catch(function () {
10632
+ return Promise.resolve(switchAccountUser(id)).then(function (res) {
10633
+ var data = res.data;
10634
+ dispatch(setModal({
10635
+ isOpen: true,
10636
+ type: "warning",
10637
+ message: "Do you want to impersonate this user?",
10638
+ onConfirm: function () {
10639
+ try {
10640
+ var _temp5 = function _temp5() {
10641
+ dispatch(setLoading(false));
10642
+ };
10643
+ dispatch(setLoading(true));
10644
+ var _temp4 = _catch(function () {
10645
+ var req = {
10646
+ email: data.email,
10647
+ password: "default",
10648
+ accessToken: data.token
10649
+ };
10650
+ return Promise.resolve(logIn(req)).then(function (res) {
10651
+ localStorage.clear();
10652
+ redirectLoginUser(res);
10653
+ });
10654
+ }, function (err) {
10655
+ var _err$response3, _err$response3$data;
10656
+ setAlert({
10657
+ type: "danger",
10658
+ 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
10659
+ });
10660
+ });
10661
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
10662
+ } catch (e) {
10663
+ return Promise.reject(e);
10664
+ }
10665
+ }
10666
+ }));
10667
+ });
10668
+ }, function (err) {
10669
+ var _err$response4, _err$response4$data;
10670
+ dispatch(setAlert({
10671
+ type: "danger",
10672
+ 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
10673
+ }));
10674
+ });
10675
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(function () {}) : void 0);
10676
+ } catch (e) {
10677
+ return Promise.reject(e);
10678
+ }
10679
+ }, [filters]);
10680
+ var reDirectDetailPage = function reDirectDetailPage(id) {
10681
+ var url = !!id ? USER_URL$2 + "/" + id : CREATE_USER_URL;
10682
+ history.push(url);
10683
+ };
10684
+ return {
10685
+ userList: userList,
10686
+ totalItems: totalItems,
10687
+ filters: filters,
10688
+ queryName: queryName,
10689
+ getData: getData,
10690
+ removeData: removeData,
10691
+ changeFilters: changeFilters,
10692
+ reDirectDetailPage: reDirectDetailPage,
10693
+ swicthUser: swicthUser
10694
+ };
10695
+ };
10696
+
10697
+ var header$4 = "User";
10698
+ var UserList = function UserList() {
10699
+ var _useUserList = useUserList(),
10700
+ queryName = _useUserList.queryName,
10701
+ userList = _useUserList.userList,
10702
+ totalItems = _useUserList.totalItems,
10703
+ filters = _useUserList.filters,
10704
+ removeData = _useUserList.removeData,
10705
+ changeFilters = _useUserList.changeFilters,
10706
+ reDirectDetailPage = _useUserList.reDirectDetailPage,
10707
+ swicthUser = _useUserList.swicthUser;
10708
+ var _useTranslation = reactI18next.useTranslation(),
10709
+ t = _useTranslation.t;
10710
+ return React__default.createElement("div", {
10711
+ className: "fadeIn animated"
10712
+ }, React__default.createElement("h5", {
10713
+ className: "mb-2"
10714
+ }, t("" + header$4)), React__default.createElement(reactstrap.Row, {
10715
+ className: "my-2"
10716
+ }, React__default.createElement(reactstrap.Col, {
10717
+ md: 8
10718
+ }, React__default.createElement(SearchBoxContainer, {
10719
+ text: t("create_user"),
10720
+ onClick: function onClick() {
10721
+ return reDirectDetailPage();
10722
+ },
10723
+ initValue: !!queryName ? queryName : "",
10724
+ onSearch: function onSearch(searchString) {
10725
+ return changeFilters({
10726
+ searchString: searchString
10727
+ });
10728
+ },
10729
+ placeholder: t("type_something_to_search_by_user_name")
10730
+ })), React__default.createElement(reactstrap.Col, {
10731
+ md: 4,
10732
+ className: "d-flex justify-content-end align-items-center"
10733
+ }, t("total_of_users"), " : ", totalItems)), React__default.createElement(reactstrap.Row, {
10734
+ className: "mb-2"
10735
+ }, React__default.createElement(reactstrap.Col, {
10736
+ md: 12
10737
+ }, userList && userList.length > 0 ? React__default.createElement("div", null, React__default.createElement(reactstrap.Table, {
10738
+ bordered: true,
10739
+ hover: true,
10740
+ striped: true,
10741
+ responsive: true,
10742
+ size: "sm"
10743
+ }, React__default.createElement("thead", null, React__default.createElement("tr", null, React__default.createElement("th", {
10744
+ className: "align-top"
10745
+ }, t("name")), React__default.createElement("th", {
10746
+ className: "align-top"
10747
+ }, t("email")), React__default.createElement("th", {
10748
+ className: "align-top"
10749
+ }, t("age")), React__default.createElement("th", {
10750
+ className: "align-top"
10751
+ }, t("role")), React__default.createElement("th", {
10752
+ className: "align-top"
10753
+ }, t("active_status")), React__default.createElement("th", {
10754
+ className: "align-top"
10755
+ }, t("created_time")), React__default.createElement("th", {
10756
+ className: "text-center"
10757
+ }, t("action")))), React__default.createElement("tbody", null, userList.map(function (record) {
10758
+ return React__default.createElement("tr", {
10759
+ key: record.id
10760
+ }, React__default.createElement("td", {
10761
+ className: "align-middle"
10762
+ }, React__default.createElement(LinkEditButton, {
10763
+ label: "" + record.fullName,
10764
+ onClick: function onClick() {
10765
+ return reDirectDetailPage(record.id);
10766
+ }
10767
+ })), React__default.createElement("td", {
10768
+ className: "align-middle"
10769
+ }, record.email), React__default.createElement("td", {
10770
+ className: "align-middle"
10771
+ }, differenceInCalendarYears(new Date(), new Date(record.dateOfBirth))), React__default.createElement("td", {
10772
+ className: "align-middle"
10773
+ }, !!record.roles && record.roles.map(function (role) {
10774
+ return role === "SecondaryTeacher" ? "SupportTeacher" : role;
10775
+ }).join(", ")), React__default.createElement("td", {
10776
+ className: "align-middle"
10777
+ }, record.isActive ? t("active") : t("inactive")), React__default.createElement("td", {
10778
+ className: "align-middle"
10779
+ }, utcToLocalTime(record === null || record === void 0 ? void 0 : record.createTime, "yyyy-MM-DD HH:mm")), React__default.createElement("td", {
10780
+ className: "text-center align-middle"
10781
+ }, React__default.createElement(fa.FaUsersCog, {
10782
+ style: {
10783
+ fontSize: "18px",
10784
+ marginRight: "10px",
10785
+ cursor: "pointer"
10786
+ },
10787
+ onClick: function onClick() {
10788
+ return swicthUser(record.id);
10789
+ }
10790
+ }), React__default.createElement(DeleteButtonIcon, {
10791
+ onClick: function onClick() {
10792
+ return removeData(record.id);
10793
+ }
10794
+ })));
10795
+ })))) : React__default.createElement(EmptyDataAlert, {
10796
+ label: t("user")
10797
+ })), React__default.createElement(reactstrap.Col, {
10798
+ md: 12
10799
+ }, React__default.createElement(CustomPagination, {
10800
+ filters: filters,
10801
+ totalRecordCount: totalItems,
10802
+ changePageSize: function changePageSize(pageSize) {
10803
+ return changeFilters({
10804
+ pageSize: pageSize
10805
+ });
10806
+ },
10807
+ changePage: function changePage(currentPage) {
10808
+ return changeFilters({
10809
+ currentPage: currentPage
10810
+ });
10811
+ }
10812
+ }))));
10813
+ };
10814
+
10815
+ var amplitudeClient$1 = amplitude.getInstance();
10816
+
10793
10817
  Object.defineProperty(exports, 'I18nextProvider', {
10794
10818
  enumerable: true,
10795
10819
  get: function () {
@@ -10870,7 +10894,7 @@ exports.UploadFileButton = UploadFileButton;
10870
10894
  exports.UserDetail = UserDetail;
10871
10895
  exports.UserList = UserList;
10872
10896
  exports.addTab = addTab;
10873
- exports.amplitudeClient = amplitudeClient;
10897
+ exports.amplitudeClient = amplitudeClient$1;
10874
10898
  exports.answerQuestion = answerQuestion;
10875
10899
  exports.answerQuestionDataPlayer = answerQuestionDataPlayer;
10876
10900
  exports.api = api;