mario-core 2.9.313-release → 2.9.315-lang

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.
package/dist/index.js CHANGED
@@ -38413,6 +38413,7 @@ var useLogin = function useLogin() {
38413
38413
  var params = new URLSearchParams(location.search);
38414
38414
  var loginClassLink = params.get("type") === "classlink";
38415
38415
  var tokenClassLink = params.get("token");
38416
+ var isAdminUser = params.get("isAdminUser");
38416
38417
 
38417
38418
  var _useState4 = React.useState(false),
38418
38419
  openModelAssign = _useState4[0];
@@ -38446,12 +38447,16 @@ var useLogin = function useLogin() {
38446
38447
  localStorage.setItem(ACCESS_TOKEN, authToken);
38447
38448
  document.cookie = "auth-token=;domain=" + (domain.includes("localhost") ? domain : ".marioforme.com") + "; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
38448
38449
  document.cookie = "redirect-uri=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
38450
+
38451
+ if (!!isAdminUser) {
38452
+ return history.push("/admin/home");
38453
+ }
38449
38454
  }
38450
38455
 
38451
38456
  var token = getAccessToken();
38452
38457
  if (!!token) history.push("/");
38453
38458
  getInfoGoogle();
38454
- }, []);
38459
+ }, [isAdminUser]);
38455
38460
 
38456
38461
  var handleCancelModelAssign = function handleCancelModelAssign() {
38457
38462
  localStorage.removeItem(ACCESS_TOKEN);
@@ -39721,6 +39726,212 @@ var TheHeaderDropdown = function TheHeaderDropdown(_ref) {
39721
39726
  })), t("log_out")))));
39722
39727
  };
39723
39728
 
39729
+ var apiGetLanguage = function apiGetLanguage() {
39730
+ return api.get(BASE_URL + "/api/language");
39731
+ };
39732
+
39733
+ var apiUpdateLanguage = function apiUpdateLanguage(lang) {
39734
+ return api.put(BASE_URL + "/api/language?lang=" + lang);
39735
+ };
39736
+
39737
+ var LANGUAGE_SYSTEM = "LANGUAGE_SYSTEM";
39738
+
39739
+ var useLanguages = function useLanguages() {
39740
+ var dispatch = reactRedux.useDispatch();
39741
+
39742
+ var _useTranslation = reactI18next.useTranslation(),
39743
+ i18n = _useTranslation.i18n;
39744
+
39745
+ var language = reactRedux.useSelector(function (state) {
39746
+ return state.common.language;
39747
+ });
39748
+ var defaultLanguage = getCookieValue(LANGUAGE_SYSTEM) != null ? getCookieValue(LANGUAGE_SYSTEM) : DEFAULT_LANGUAGE_CODE;
39749
+
39750
+ var _useState = React.useState([]),
39751
+ languageList = _useState[0],
39752
+ setLanguageList = _useState[1];
39753
+
39754
+ var _useState2 = React.useState(false),
39755
+ dropdownOpen = _useState2[0],
39756
+ setDropdownOpen = _useState2[1];
39757
+
39758
+ var _useState3 = React.useState(defaultLanguage),
39759
+ currentLang = _useState3[0],
39760
+ setCurrentLang = _useState3[1];
39761
+
39762
+ var toggle = function toggle() {
39763
+ return setDropdownOpen(function (prevState) {
39764
+ return !prevState;
39765
+ });
39766
+ };
39767
+
39768
+ var changeLanguageApp = function changeLanguageApp(lang) {
39769
+ try {
39770
+ var _temp3 = function _temp3() {
39771
+ dispatch(setLoading(false));
39772
+ };
39773
+
39774
+ dispatch(setLoading(true));
39775
+
39776
+ var _temp4 = _catch(function () {
39777
+ return Promise.resolve(apiUpdateLanguage(lang)).then(function () {
39778
+ i18n.changeLanguage(lang);
39779
+ setCurrentLang(lang);
39780
+ dispatch(setLanguage(lang));
39781
+ });
39782
+ }, function (err) {
39783
+ var _err$response, _err$response$data;
39784
+
39785
+ dispatch(setAlert({
39786
+ type: "danger",
39787
+ 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
39788
+ }));
39789
+ });
39790
+
39791
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp3) : _temp3(_temp4));
39792
+ } catch (e) {
39793
+ return Promise.reject(e);
39794
+ }
39795
+ };
39796
+
39797
+ var getListLanguage = function getListLanguage() {
39798
+ try {
39799
+ var _temp6 = _catch(function () {
39800
+ return Promise.resolve(apiGetLanguage()).then(function (res) {
39801
+ setLanguageList(res.data);
39802
+ });
39803
+ }, function (err) {
39804
+ var _err$response2, _err$response2$data;
39805
+
39806
+ dispatch(setAlert({
39807
+ type: "danger",
39808
+ 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
39809
+ }));
39810
+ });
39811
+
39812
+ return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(function () {}) : void 0);
39813
+ } catch (e) {
39814
+ return Promise.reject(e);
39815
+ }
39816
+ };
39817
+
39818
+ React.useEffect(function () {
39819
+ defaultLanguage != language && changeLanguageApp(defaultLanguage);
39820
+ getListLanguage();
39821
+ }, []);
39822
+ return {
39823
+ languageList: languageList,
39824
+ toggle: toggle,
39825
+ dropdownOpen: dropdownOpen,
39826
+ currentLang: currentLang,
39827
+ changeLanguageApp: changeLanguageApp,
39828
+ setCurrentLang: setCurrentLang
39829
+ };
39830
+ };
39831
+
39832
+ var TheLanguageDropdown = function TheLanguageDropdown() {
39833
+ var _useLanguages = useLanguages(),
39834
+ languageList = _useLanguages.languageList,
39835
+ toggle = _useLanguages.toggle,
39836
+ dropdownOpen = _useLanguages.dropdownOpen,
39837
+ currentLang = _useLanguages.currentLang,
39838
+ changeLanguageApp = _useLanguages.changeLanguageApp;
39839
+
39840
+ var currentLanguage = React.useMemo(function () {
39841
+ var current = languageList.find(function (i) {
39842
+ return i.code === currentLang;
39843
+ });
39844
+ if (!current) return null;
39845
+ return React__default.createElement(React__default.Fragment, null, React__default.createElement("img", {
39846
+ className: "mr-2 " + styles['dropdown-menu-flag'],
39847
+ src: "" + getStaticFileUrl(current.image)
39848
+ }), " ", current.name);
39849
+ }, [currentLang, languageList]);
39850
+ return React__default.createElement(reactstrap.Dropdown, {
39851
+ isOpen: dropdownOpen,
39852
+ toggle: toggle,
39853
+ className: "" + styles["dropdown-menu"]
39854
+ }, React__default.createElement(reactstrap.DropdownToggle, {
39855
+ className: styles["header-avatar"] + " d-flex align-items-center"
39856
+ }, React__default.createElement("span", {
39857
+ style: {
39858
+ color: "#000",
39859
+ textTransform: "capitalize",
39860
+ display: 'flex',
39861
+ alignItems: 'center'
39862
+ }
39863
+ }, currentLanguage, React__default.createElement(bs.BsChevronDown, {
39864
+ className: "ml-2",
39865
+ style: {
39866
+ fontSize: '10px'
39867
+ }
39868
+ }))), React__default.createElement(reactstrap.DropdownMenu, {
39869
+ className: styles["dropdown-content-language"]
39870
+ }, !!languageList && languageList.length > 0 && languageList.map(function (lang, index) {
39871
+ return React__default.createElement(reactstrap.DropdownItem, {
39872
+ key: lang.code,
39873
+ className: styles["dropdown-change"] + " px-0 py-0 " + (index === languageList.length - 1 ? "pb-2" : "pt-2"),
39874
+ onClick: function onClick() {
39875
+ return changeLanguageApp(lang.code);
39876
+ }
39877
+ }, React__default.createElement("div", {
39878
+ className: styles["dropdown-item-language"] + " " + styles["item-logout"] + " " + (currentLang == lang.code ? styles['dropdown-item-language-active'] : "") + " d-flex align-items-center w-100"
39879
+ }, React__default.createElement("span", {
39880
+ className: "mr-2 d-flex hover-opacity"
39881
+ }, React__default.createElement("img", {
39882
+ style: {
39883
+ width: "30px",
39884
+ height: "25px",
39885
+ borderRadius: "5px"
39886
+ },
39887
+ src: getStaticFileUrl(lang.image)
39888
+ })), lang.name));
39889
+ })));
39890
+ };
39891
+
39892
+ var TheHeader = function TheHeader(_ref) {
39893
+ var onToggleModel = _ref.onToggleModel;
39894
+ var dispatch = reactRedux.useDispatch();
39895
+ var sidebarShow = reactRedux.useSelector(function (state) {
39896
+ return state.common.sidebarShow;
39897
+ });
39898
+
39899
+ var _useTranslation = reactI18next.useTranslation(),
39900
+ t = _useTranslation.t;
39901
+
39902
+ var toggleSidebarMobile = function toggleSidebarMobile() {
39903
+ var val = [false, "responsive"].includes(sidebarShow) ? true : "responsive";
39904
+ dispatch(setSidebar(val));
39905
+ };
39906
+
39907
+ var isDistrict = window.location.host.includes("-district");
39908
+ return React__default.createElement(react.CHeader, {
39909
+ withSubheader: true,
39910
+ className: "d-flex align-items-center justify-content-end"
39911
+ }, React__default.createElement(react.CToggler, {
39912
+ inHeader: true,
39913
+ className: "ml-md-3 d-lg-none",
39914
+ onClick: toggleSidebarMobile
39915
+ }), React__default.createElement(react.CHeaderBrand, {
39916
+ className: "mx-auto flex-grow-1 d-lg-none",
39917
+ to: "/"
39918
+ }, React__default.createElement("img", {
39919
+ src: getStaticFileUrl(Images.LOGO_HEADER),
39920
+ className: styles["header-logo"]
39921
+ })), React__default.createElement(react.CHeaderNav, {
39922
+ className: "pr-3"
39923
+ }, React__default.createElement(TheLanguageDropdown, null), React__default.createElement("a", {
39924
+ className: "mr-3",
39925
+ style: {
39926
+ color: '#000'
39927
+ },
39928
+ href: '/privacy-policy',
39929
+ target: "blank"
39930
+ }, t("privacy_policy")), !isDistrict && React__default.createElement(NotificationButton, null), React__default.createElement(TheHeaderDropdown, {
39931
+ onToggleModel: onToggleModel
39932
+ })));
39933
+ };
39934
+
39724
39935
  var TITLE$3 = "Not found";
39725
39936
 
39726
39937
  var NotFound = function NotFound() {
@@ -39778,33 +39989,285 @@ var TheContent = function TheContent(_ref) {
39778
39989
 
39779
39990
  var TheContent$1 = React__default.memo(TheContent);
39780
39991
 
39781
- var buttonTextStyle = {
39782
- fontWeight: 500
39783
- };
39784
- var buttonStyle = {
39785
- height: 38
39992
+ var loadingStyle = {
39993
+ minWidth: "100vw",
39994
+ minHeight: "100vh",
39995
+ position: "fixed",
39996
+ top: 0,
39997
+ left: 0,
39998
+ zIndex: 999999999,
39999
+ backgroundColor: "rgba(0, 0, 0, 0.4)",
40000
+ display: "flex",
40001
+ justifyContent: "center",
40002
+ alignItems: "center"
39786
40003
  };
39787
40004
 
39788
- var AddButton = function AddButton(_ref) {
39789
- var text = _ref.text,
39790
- onClick = _ref.onClick;
39791
- return React__default.createElement(reactstrap.Button, {
39792
- onClick: onClick,
39793
- color: 'success',
39794
- style: buttonStyle,
39795
- className: 'd-flex align-items-center'
39796
- }, React__default.createElement(fa.FaPlus, null), React__default.createElement("span", {
39797
- className: 'ml-2',
39798
- style: buttonTextStyle
39799
- }, text));
40005
+ var Loading = function Loading() {
40006
+ var isLoading = reactRedux.useSelector(function (state) {
40007
+ return state.common.isLoading;
40008
+ });
40009
+ localStorage.setItem("LAST_TIME_REQUETST", moment().utc().format("YYYY-MM-DD HH:mm:ss"));
40010
+ return isLoading ? React__default.createElement("div", {
40011
+ style: loadingStyle
40012
+ }, React__default.createElement("div", {
40013
+ className: "spinner-border text-secondary",
40014
+ role: "status"
40015
+ }, React__default.createElement("span", {
40016
+ className: "sr-only"
40017
+ }, "Loading..."))) : null;
39800
40018
  };
39801
40019
 
39802
- var DeleteButtonIcon = function DeleteButtonIcon(_ref) {
39803
- var onClick = _ref.onClick;
39804
- return React__default.createElement("div", {
39805
- className: "d-inline text-center cursor-pointer hover-opacity",
39806
- title: "Delete",
39807
- onClick: onClick
40020
+ var firstCheckToken = function firstCheckToken() {
40021
+ return Promise.resolve(_catch(function () {
40022
+ var token = getAccessToken();
40023
+ return token ? Promise.resolve(checkToken(token)).then(function (tokenStatus) {
40024
+ return tokenStatus.data ? true : false;
40025
+ }) : false;
40026
+ }, function () {
40027
+ return false;
40028
+ }));
40029
+ };
40030
+
40031
+ var canAccess = function canAccess(userRoles, componentRoles) {
40032
+ if (!Array.isArray(userRoles)) {
40033
+ return false;
40034
+ }
40035
+
40036
+ if (Array.isArray(componentRoles)) {
40037
+ var intersects = userRoles.filter(function (i) {
40038
+ return componentRoles.includes(i);
40039
+ });
40040
+ return intersects.length > 0;
40041
+ }
40042
+
40043
+ return true;
40044
+ };
40045
+
40046
+ var ModelSelectRole = function ModelSelectRole(_ref) {
40047
+ var _handleUserRole;
40048
+
40049
+ var open = _ref.open,
40050
+ onToggleModel = _ref.onToggleModel;
40051
+ var dispatch = reactRedux.useDispatch();
40052
+
40053
+ var _useTranslation = reactI18next.useTranslation(),
40054
+ t = _useTranslation.t;
40055
+
40056
+ var history = reactRouterDom.useHistory();
40057
+ var pathname = window.location.pathname;
40058
+ var user = reactRedux.useSelector(function (state) {
40059
+ return state.common.user;
40060
+ });
40061
+ var roles = user === null || user === void 0 ? void 0 : user.roles;
40062
+
40063
+ var handleSelectUserRoles = function handleSelectUserRoles(roles) {
40064
+ dispatch(setLoading(true));
40065
+ var roleSelect = roles.includes("Teacher/Assistant") ? ["Teacher", "Assistant"] : roles;
40066
+ dispatch(setUser(_extends({}, user, {
40067
+ roles: roleSelect
40068
+ })));
40069
+ localStorage.setItem("ROLES", roleSelect.toString());
40070
+ onToggleModel();
40071
+
40072
+ if (roles.includes("Parent")) {
40073
+ history.push("/parent");
40074
+ } else if (roles.includes("Admin")) {
40075
+ history.push("/admin/home");
40076
+ } else {
40077
+ pathname !== "/home" ? history.push("/home") : window.location.reload();
40078
+ }
40079
+ };
40080
+
40081
+ return React__default.createElement(reactstrap.Modal, {
40082
+ isOpen: open,
40083
+ toggle: function toggle() {
40084
+ return onToggleModel();
40085
+ },
40086
+ className: "" + styles["model-switch-roles"],
40087
+ centered: true
40088
+ }, React__default.createElement("p", {
40089
+ className: "" + styles["title"]
40090
+ }, t("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) {
40091
+ return React__default.createElement("p", {
40092
+ key: r,
40093
+ 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" : ""],
40094
+ onClick: function onClick() {
40095
+ return handleSelectUserRoles([r]);
40096
+ }
40097
+ }, r == "SecondaryTeacher" ? "Support Teacher" : r);
40098
+ })));
40099
+ };
40100
+
40101
+ var TheLayout = function TheLayout(_ref) {
40102
+ var routes = _ref.routes,
40103
+ navigation = _ref.navigation;
40104
+ var history = reactRouterDom.useHistory();
40105
+ var dispatch = reactRedux.useDispatch();
40106
+ var user = reactRedux.useSelector(function (state) {
40107
+ return state.common.user;
40108
+ });
40109
+ var language = reactRedux.useSelector(function (state) {
40110
+ return state.common.language;
40111
+ });
40112
+
40113
+ var _useState = React.useState(false),
40114
+ openModelSelectRole = _useState[0],
40115
+ setOpenModelSelectRole = _useState[1];
40116
+
40117
+ var _useTranslation = reactI18next.useTranslation(),
40118
+ t = _useTranslation.t;
40119
+
40120
+ var location = reactRouterDom.useLocation();
40121
+ var isNotification = location.pathname.includes("notifications");
40122
+ var isDistrict = window.location.host.includes("-district");
40123
+
40124
+ var handleToggleModel = function handleToggleModel() {
40125
+ setOpenModelSelectRole(!openModelSelectRole);
40126
+ };
40127
+
40128
+ var authRoutes = React.useMemo(function () {
40129
+ return routes.filter(function (route) {
40130
+ return canAccess(user === null || user === void 0 ? void 0 : user.roles, route.roles);
40131
+ }).filter(function (route) {
40132
+ return !!route.isDistrict === isDistrict;
40133
+ });
40134
+ }, [user, language]);
40135
+ var authNavigations = React.useMemo(function () {
40136
+ return navigation.map(function (item) {
40137
+ var _item$_children, _item$_children2;
40138
+
40139
+ return _extends({}, item, {
40140
+ name: t(item.name),
40141
+ _children: item !== null && item !== void 0 && (_item$_children = item._children) !== null && _item$_children !== void 0 && _item$_children.length ? item === null || item === void 0 ? void 0 : (_item$_children2 = item._children) === null || _item$_children2 === void 0 ? void 0 : _item$_children2.map(function (x) {
40142
+ return _extends({}, x, {
40143
+ name: t(x.name)
40144
+ });
40145
+ }) : undefined
40146
+ });
40147
+ }).filter(function (nav) {
40148
+ return canAccess(user === null || user === void 0 ? void 0 : user.roles, nav.roles);
40149
+ }).filter(function (nav) {
40150
+ return !!nav.isDistrict === isDistrict;
40151
+ });
40152
+ }, [user, language]);
40153
+
40154
+ var getInformationSetting = function getInformationSetting() {
40155
+ try {
40156
+ var _temp2 = _catch(function () {
40157
+ return Promise.resolve(getSchoolSettings()).then(function (res) {
40158
+ dispatch(setSandboxMode(res.data.isSandboxMode));
40159
+ });
40160
+ }, function (err) {
40161
+ console.error(err);
40162
+ });
40163
+
40164
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
40165
+ } catch (e) {
40166
+ return Promise.reject(e);
40167
+ }
40168
+ };
40169
+
40170
+ React.useEffect(function () {
40171
+ checkAuthentication();
40172
+ }, []);
40173
+ React.useEffect(function () {
40174
+ getInformationSetting();
40175
+ }, [location.pathname]);
40176
+
40177
+ var checkAuthentication = function checkAuthentication() {
40178
+ try {
40179
+ var _temp4 = _catch(function () {
40180
+ return Promise.resolve(firstCheckToken()).then(function (tokenStatus) {
40181
+ tokenStatus ? loadInfo() : resetAuth();
40182
+ });
40183
+ }, function () {
40184
+ resetAuth();
40185
+ });
40186
+
40187
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(function () {}) : void 0);
40188
+ } catch (e) {
40189
+ return Promise.reject(e);
40190
+ }
40191
+ };
40192
+
40193
+ var loadInfo = function loadInfo() {
40194
+ try {
40195
+ var _temp6 = _catch(function () {
40196
+ return Promise.resolve(getInfo()).then(function (info) {
40197
+ var _info$data, _info$data$roles;
40198
+
40199
+ if (!info || !(info !== null && info !== void 0 && (_info$data = info.data) !== null && _info$data !== void 0 && (_info$data$roles = _info$data.roles) !== null && _info$data$roles !== void 0 && _info$data$roles.includes("Admin"))) {
40200
+ resetAuth();
40201
+ }
40202
+
40203
+ dispatch(setUser(info.data));
40204
+ });
40205
+ }, function () {
40206
+ resetAuth();
40207
+ });
40208
+
40209
+ return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(function () {}) : void 0);
40210
+ } catch (e) {
40211
+ return Promise.reject(e);
40212
+ }
40213
+ };
40214
+
40215
+ var resetAuth = function resetAuth() {
40216
+ localStorage.removeItem(ACCESS_TOKEN);
40217
+ sessionStorage.removeItem(ACCESS_TOKEN);
40218
+ localStorage.removeItem("ROLES");
40219
+ history.push("/");
40220
+ };
40221
+
40222
+ if (!user) {
40223
+ return React__default.createElement(Loading, null);
40224
+ }
40225
+
40226
+ return React__default.createElement("div", {
40227
+ className: "c-app c-default-layout"
40228
+ }, !isNotification && React__default.createElement(TheSidebar, {
40229
+ navigation: authNavigations
40230
+ }), React__default.createElement("div", {
40231
+ className: "c-wrapper"
40232
+ }, !isNotification && React__default.createElement(TheHeader, {
40233
+ onToggleModel: handleToggleModel
40234
+ }), React__default.createElement("div", {
40235
+ className: "c-body bg-white"
40236
+ }, React__default.createElement(TheContent$1, {
40237
+ routes: authRoutes
40238
+ }))), React__default.createElement(ModelSelectRole, {
40239
+ open: openModelSelectRole,
40240
+ onToggleModel: handleToggleModel
40241
+ }));
40242
+ };
40243
+
40244
+ var buttonTextStyle = {
40245
+ fontWeight: 500
40246
+ };
40247
+ var buttonStyle = {
40248
+ height: 38
40249
+ };
40250
+
40251
+ var AddButton = function AddButton(_ref) {
40252
+ var text = _ref.text,
40253
+ onClick = _ref.onClick;
40254
+ return React__default.createElement(reactstrap.Button, {
40255
+ onClick: onClick,
40256
+ color: 'success',
40257
+ style: buttonStyle,
40258
+ className: 'd-flex align-items-center'
40259
+ }, React__default.createElement(fa.FaPlus, null), React__default.createElement("span", {
40260
+ className: 'ml-2',
40261
+ style: buttonTextStyle
40262
+ }, text));
40263
+ };
40264
+
40265
+ var DeleteButtonIcon = function DeleteButtonIcon(_ref) {
40266
+ var onClick = _ref.onClick;
40267
+ return React__default.createElement("div", {
40268
+ className: "d-inline text-center cursor-pointer hover-opacity",
40269
+ title: "Delete",
40270
+ onClick: onClick
39808
40271
  }, React__default.createElement(fa.FaTrashAlt, null));
39809
40272
  };
39810
40273
 
@@ -44675,7 +45138,7 @@ var initValue$3 = {
44675
45138
  roles: [],
44676
45139
  isActive: true,
44677
45140
  profileImageFileName: "",
44678
- teacherUserId: ""
45141
+ teacherUserId: []
44679
45142
  };
44680
45143
  var USER_LIST_URL = "/admin/users/user-list";
44681
45144
  var TITLE$9 = "User detail";
@@ -45555,34 +46018,6 @@ var UserDetail = function UserDetail() {
45555
46018
  });
45556
46019
  };
45557
46020
 
45558
- var loadingStyle = {
45559
- minWidth: "100vw",
45560
- minHeight: "100vh",
45561
- position: "fixed",
45562
- top: 0,
45563
- left: 0,
45564
- zIndex: 999999999,
45565
- backgroundColor: "rgba(0, 0, 0, 0.4)",
45566
- display: "flex",
45567
- justifyContent: "center",
45568
- alignItems: "center"
45569
- };
45570
-
45571
- var Loading = function Loading() {
45572
- var isLoading = reactRedux.useSelector(function (state) {
45573
- return state.common.isLoading;
45574
- });
45575
- localStorage.setItem("LAST_TIME_REQUETST", moment().utc().format("YYYY-MM-DD HH:mm:ss"));
45576
- return isLoading ? React__default.createElement("div", {
45577
- style: loadingStyle
45578
- }, React__default.createElement("div", {
45579
- className: "spinner-border text-secondary",
45580
- role: "status"
45581
- }, React__default.createElement("span", {
45582
- className: "sr-only"
45583
- }, "Loading..."))) : null;
45584
- };
45585
-
45586
46021
  var ScrollToTop = function ScrollToTop() {
45587
46022
  var _useLocation = reactRouterDom.useLocation(),
45588
46023
  pathname = _useLocation.pathname;
@@ -47628,6 +48063,7 @@ var initialState = {
47628
48063
  isLoginGoogle: false,
47629
48064
  inforUserGoogle: null,
47630
48065
  language: DEFAULT_LANGUAGE_CODE,
48066
+ rtl: false,
47631
48067
  amplitude: {
47632
48068
  user_id: "",
47633
48069
  status: "",
@@ -47680,7 +48116,8 @@ var commonReducer = toolkit.createReducer(initialState, function (builder) {
47680
48116
  }).addCase(setConversationOneToOne, function (state, action) {
47681
48117
  state.isConversationOneToOne = action.payload;
47682
48118
  }).addCase(setLanguage, function (state, action) {
47683
- state.language = action.payload;
48119
+ state.language = action.payload.language;
48120
+ state.rtl = action.payload.rtl;
47684
48121
  }).addCase(showFontSize, function (state, action) {
47685
48122
  state.defaultFontSize = action.payload;
47686
48123
  }).addCase(setSandboxMode, function (state, action) {
@@ -48602,32 +49039,6 @@ var store = toolkit.configureStore({
48602
49039
  }
48603
49040
  });
48604
49041
 
48605
- var firstCheckToken = function firstCheckToken() {
48606
- return Promise.resolve(_catch(function () {
48607
- var token = getAccessToken();
48608
- return token ? Promise.resolve(checkToken(token)).then(function (tokenStatus) {
48609
- return tokenStatus.data ? true : false;
48610
- }) : false;
48611
- }, function () {
48612
- return false;
48613
- }));
48614
- };
48615
-
48616
- var canAccess = function canAccess(userRoles, componentRoles) {
48617
- if (!Array.isArray(userRoles)) {
48618
- return false;
48619
- }
48620
-
48621
- if (Array.isArray(componentRoles)) {
48622
- var intersects = userRoles.filter(function (i) {
48623
- return componentRoles.includes(i);
48624
- });
48625
- return intersects.length > 0;
48626
- }
48627
-
48628
- return true;
48629
- };
48630
-
48631
49042
  var isInViewport = function isInViewport(el) {
48632
49043
  var rect = el === null || el === void 0 ? void 0 : el.getBoundingClientRect();
48633
49044
  return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);
@@ -48663,412 +49074,6 @@ var generateRandomString = (function () {
48663
49074
 
48664
49075
  var amplitudeClient = amplitude.getInstance();
48665
49076
 
48666
- var apiGetLanguage = function apiGetLanguage() {
48667
- return api.get(BASE_URL + "/api/language");
48668
- };
48669
-
48670
- var apiUpdateLanguage = function apiUpdateLanguage(lang) {
48671
- return api.put(BASE_URL + "/api/language?lang=" + lang);
48672
- };
48673
-
48674
- var LANGUAGE_SYSTEM = "LANGUAGE_SYSTEM";
48675
-
48676
- var useLanguages = function useLanguages() {
48677
- var dispatch = reactRedux.useDispatch();
48678
-
48679
- var _useTranslation = reactI18next.useTranslation(),
48680
- i18n = _useTranslation.i18n;
48681
-
48682
- var language = reactRedux.useSelector(function (state) {
48683
- return state.common.language;
48684
- });
48685
- var defaultLanguage = getCookieValue(LANGUAGE_SYSTEM) != null ? getCookieValue(LANGUAGE_SYSTEM) : DEFAULT_LANGUAGE_CODE;
48686
-
48687
- var _useState = React.useState([]),
48688
- languageList = _useState[0],
48689
- setLanguageList = _useState[1];
48690
-
48691
- var _useState2 = React.useState(false),
48692
- dropdownOpen = _useState2[0],
48693
- setDropdownOpen = _useState2[1];
48694
-
48695
- var _useState3 = React.useState(defaultLanguage),
48696
- currentLang = _useState3[0],
48697
- setCurrentLang = _useState3[1];
48698
-
48699
- var toggle = function toggle() {
48700
- return setDropdownOpen(function (prevState) {
48701
- return !prevState;
48702
- });
48703
- };
48704
-
48705
- var changeLanguageApp = function changeLanguageApp(lang) {
48706
- try {
48707
- var _temp3 = function _temp3() {
48708
- dispatch(setLoading(false));
48709
- };
48710
-
48711
- dispatch(setLoading(true));
48712
-
48713
- var _temp4 = _catch(function () {
48714
- return Promise.resolve(apiUpdateLanguage(lang)).then(function () {
48715
- i18n.changeLanguage(lang);
48716
- setCurrentLang(lang);
48717
- dispatch(setLanguage(lang));
48718
- });
48719
- }, function (err) {
48720
- var _err$response, _err$response$data;
48721
-
48722
- dispatch(setAlert({
48723
- type: "danger",
48724
- 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
48725
- }));
48726
- });
48727
-
48728
- return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp3) : _temp3(_temp4));
48729
- } catch (e) {
48730
- return Promise.reject(e);
48731
- }
48732
- };
48733
-
48734
- var getListLanguage = function getListLanguage() {
48735
- try {
48736
- var _temp6 = _catch(function () {
48737
- return Promise.resolve(apiGetLanguage()).then(function (res) {
48738
- setLanguageList(res.data);
48739
- });
48740
- }, function (err) {
48741
- var _err$response2, _err$response2$data;
48742
-
48743
- dispatch(setAlert({
48744
- type: "danger",
48745
- 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
48746
- }));
48747
- });
48748
-
48749
- return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(function () {}) : void 0);
48750
- } catch (e) {
48751
- return Promise.reject(e);
48752
- }
48753
- };
48754
-
48755
- React.useEffect(function () {
48756
- defaultLanguage != language && changeLanguageApp(defaultLanguage);
48757
- getListLanguage();
48758
- }, []);
48759
- return {
48760
- languageList: languageList,
48761
- toggle: toggle,
48762
- dropdownOpen: dropdownOpen,
48763
- currentLang: currentLang,
48764
- changeLanguageApp: changeLanguageApp,
48765
- setCurrentLang: setCurrentLang
48766
- };
48767
- };
48768
-
48769
- var TheLanguageDropdown = function TheLanguageDropdown() {
48770
- var _useLanguages = useLanguages(),
48771
- languageList = _useLanguages.languageList,
48772
- toggle = _useLanguages.toggle,
48773
- dropdownOpen = _useLanguages.dropdownOpen,
48774
- currentLang = _useLanguages.currentLang,
48775
- changeLanguageApp = _useLanguages.changeLanguageApp;
48776
-
48777
- var currentLanguage = React.useMemo(function () {
48778
- var current = languageList.find(function (i) {
48779
- return i.code === currentLang;
48780
- });
48781
- if (!current) return null;
48782
- return React__default.createElement(React__default.Fragment, null, React__default.createElement("img", {
48783
- className: "mr-2 " + styles['dropdown-menu-flag'],
48784
- src: "" + getStaticFileUrl(current.image)
48785
- }), " ", current.name);
48786
- }, [currentLang, languageList]);
48787
- return React__default.createElement(reactstrap.Dropdown, {
48788
- isOpen: dropdownOpen,
48789
- toggle: toggle,
48790
- className: "" + styles["dropdown-menu"]
48791
- }, React__default.createElement(reactstrap.DropdownToggle, {
48792
- className: styles["header-avatar"] + " d-flex align-items-center"
48793
- }, React__default.createElement("span", {
48794
- style: {
48795
- color: "#000",
48796
- textTransform: "capitalize",
48797
- display: 'flex',
48798
- alignItems: 'center'
48799
- }
48800
- }, currentLanguage, React__default.createElement(bs.BsChevronDown, {
48801
- className: "ml-2",
48802
- style: {
48803
- fontSize: '10px'
48804
- }
48805
- }))), React__default.createElement(reactstrap.DropdownMenu, {
48806
- className: styles["dropdown-content-language"]
48807
- }, !!languageList && languageList.length > 0 && languageList.map(function (lang, index) {
48808
- return React__default.createElement(reactstrap.DropdownItem, {
48809
- key: lang.code,
48810
- className: styles["dropdown-change"] + " px-0 py-0 " + (index === languageList.length - 1 ? "pb-2" : "pt-2"),
48811
- onClick: function onClick() {
48812
- return changeLanguageApp(lang.code);
48813
- }
48814
- }, React__default.createElement("div", {
48815
- className: styles["dropdown-item-language"] + " " + styles["item-logout"] + " " + (currentLang == lang.code ? styles['dropdown-item-language-active'] : "") + " d-flex align-items-center w-100"
48816
- }, React__default.createElement("span", {
48817
- className: "mr-2 d-flex hover-opacity"
48818
- }, React__default.createElement("img", {
48819
- style: {
48820
- width: "30px",
48821
- height: "25px",
48822
- borderRadius: "5px"
48823
- },
48824
- src: getStaticFileUrl(lang.image)
48825
- })), lang.name));
48826
- })));
48827
- };
48828
-
48829
- var TheHeader = function TheHeader(_ref) {
48830
- var onToggleModel = _ref.onToggleModel;
48831
- var dispatch = reactRedux.useDispatch();
48832
- var sidebarShow = reactRedux.useSelector(function (state) {
48833
- return state.common.sidebarShow;
48834
- });
48835
-
48836
- var _useTranslation = reactI18next.useTranslation(),
48837
- t = _useTranslation.t;
48838
-
48839
- var toggleSidebarMobile = function toggleSidebarMobile() {
48840
- var val = [false, "responsive"].includes(sidebarShow) ? true : "responsive";
48841
- dispatch(setSidebar(val));
48842
- };
48843
-
48844
- var isDistrict = window.location.host.includes("-district");
48845
- return React__default.createElement(react.CHeader, {
48846
- withSubheader: true,
48847
- className: "d-flex align-items-center justify-content-end"
48848
- }, React__default.createElement(react.CToggler, {
48849
- inHeader: true,
48850
- className: "ml-md-3 d-lg-none",
48851
- onClick: toggleSidebarMobile
48852
- }), React__default.createElement(react.CHeaderBrand, {
48853
- className: "mx-auto flex-grow-1 d-lg-none",
48854
- to: "/"
48855
- }, React__default.createElement("img", {
48856
- src: getStaticFileUrl(Images.LOGO_HEADER),
48857
- className: styles["header-logo"]
48858
- })), React__default.createElement(react.CHeaderNav, {
48859
- className: "pr-3"
48860
- }, React__default.createElement(TheLanguageDropdown, null), React__default.createElement("a", {
48861
- className: "mr-3",
48862
- style: {
48863
- color: '#000'
48864
- },
48865
- href: '/privacy-policy',
48866
- target: "blank"
48867
- }, t("privacy_policy")), !isDistrict && React__default.createElement(NotificationButton, null), React__default.createElement(TheHeaderDropdown, {
48868
- onToggleModel: onToggleModel
48869
- })));
48870
- };
48871
-
48872
- var ModelSelectRole = function ModelSelectRole(_ref) {
48873
- var _handleUserRole;
48874
-
48875
- var open = _ref.open,
48876
- onToggleModel = _ref.onToggleModel;
48877
- var dispatch = reactRedux.useDispatch();
48878
-
48879
- var _useTranslation = reactI18next.useTranslation(),
48880
- t = _useTranslation.t;
48881
-
48882
- var history = reactRouterDom.useHistory();
48883
- var pathname = window.location.pathname;
48884
- var user = reactRedux.useSelector(function (state) {
48885
- return state.common.user;
48886
- });
48887
- var roles = user === null || user === void 0 ? void 0 : user.roles;
48888
-
48889
- var handleSelectUserRoles = function handleSelectUserRoles(roles) {
48890
- dispatch(setLoading(true));
48891
- var roleSelect = roles.includes("Teacher/Assistant") ? ["Teacher", "Assistant"] : roles;
48892
- dispatch(setUser(_extends({}, user, {
48893
- roles: roleSelect
48894
- })));
48895
- localStorage.setItem("ROLES", roleSelect.toString());
48896
- onToggleModel();
48897
-
48898
- if (roles.includes("Parent")) {
48899
- history.push("/parent");
48900
- } else if (roles.includes("Admin")) {
48901
- history.push("/admin/home");
48902
- } else {
48903
- pathname !== "/home" ? history.push("/home") : window.location.reload();
48904
- }
48905
- };
48906
-
48907
- return React__default.createElement(reactstrap.Modal, {
48908
- isOpen: open,
48909
- toggle: function toggle() {
48910
- return onToggleModel();
48911
- },
48912
- className: "" + styles["model-switch-roles"],
48913
- centered: true
48914
- }, React__default.createElement("p", {
48915
- className: "" + styles["title"]
48916
- }, t("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) {
48917
- return React__default.createElement("p", {
48918
- key: r,
48919
- 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" : ""],
48920
- onClick: function onClick() {
48921
- return handleSelectUserRoles([r]);
48922
- }
48923
- }, r == "SecondaryTeacher" ? "Support Teacher" : r);
48924
- })));
48925
- };
48926
-
48927
- var TheLayout = function TheLayout(_ref) {
48928
- var routes = _ref.routes,
48929
- navigation = _ref.navigation;
48930
- var history = reactRouterDom.useHistory();
48931
- var dispatch = reactRedux.useDispatch();
48932
- var user = reactRedux.useSelector(function (state) {
48933
- return state.common.user;
48934
- });
48935
- var language = reactRedux.useSelector(function (state) {
48936
- return state.common.language;
48937
- });
48938
-
48939
- var _useState = React.useState(false),
48940
- openModelSelectRole = _useState[0],
48941
- setOpenModelSelectRole = _useState[1];
48942
-
48943
- var _useTranslation = reactI18next.useTranslation(),
48944
- t = _useTranslation.t;
48945
-
48946
- var location = reactRouterDom.useLocation();
48947
- var isNotification = location.pathname.includes("notifications");
48948
- var isDistrict = window.location.host.includes("-district");
48949
-
48950
- var handleToggleModel = function handleToggleModel() {
48951
- setOpenModelSelectRole(!openModelSelectRole);
48952
- };
48953
-
48954
- var authRoutes = React.useMemo(function () {
48955
- return routes.filter(function (route) {
48956
- return canAccess(user === null || user === void 0 ? void 0 : user.roles, route.roles);
48957
- }).filter(function (route) {
48958
- return !!route.isDistrict === isDistrict;
48959
- });
48960
- }, [user, language]);
48961
- var authNavigations = React.useMemo(function () {
48962
- return navigation.map(function (item) {
48963
- var _item$_children, _item$_children2;
48964
-
48965
- return _extends({}, item, {
48966
- name: t(item.name),
48967
- _children: item !== null && item !== void 0 && (_item$_children = item._children) !== null && _item$_children !== void 0 && _item$_children.length ? item === null || item === void 0 ? void 0 : (_item$_children2 = item._children) === null || _item$_children2 === void 0 ? void 0 : _item$_children2.map(function (x) {
48968
- return _extends({}, x, {
48969
- name: t(x.name)
48970
- });
48971
- }) : undefined
48972
- });
48973
- }).filter(function (nav) {
48974
- return canAccess(user === null || user === void 0 ? void 0 : user.roles, nav.roles);
48975
- }).filter(function (nav) {
48976
- return !!nav.isDistrict === isDistrict;
48977
- });
48978
- }, [user, language]);
48979
-
48980
- var getInformationSetting = function getInformationSetting() {
48981
- try {
48982
- var _temp2 = _catch(function () {
48983
- return Promise.resolve(getSchoolSettings()).then(function (res) {
48984
- dispatch(setSandboxMode(res.data.isSandboxMode));
48985
- });
48986
- }, function (err) {
48987
- console.error(err);
48988
- });
48989
-
48990
- return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
48991
- } catch (e) {
48992
- return Promise.reject(e);
48993
- }
48994
- };
48995
-
48996
- React.useEffect(function () {
48997
- checkAuthentication();
48998
- }, []);
48999
- React.useEffect(function () {
49000
- getInformationSetting();
49001
- }, [location.pathname]);
49002
-
49003
- var checkAuthentication = function checkAuthentication() {
49004
- try {
49005
- var _temp4 = _catch(function () {
49006
- return Promise.resolve(firstCheckToken()).then(function (tokenStatus) {
49007
- tokenStatus ? loadInfo() : resetAuth();
49008
- });
49009
- }, function () {
49010
- resetAuth();
49011
- });
49012
-
49013
- return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(function () {}) : void 0);
49014
- } catch (e) {
49015
- return Promise.reject(e);
49016
- }
49017
- };
49018
-
49019
- var loadInfo = function loadInfo() {
49020
- try {
49021
- var _temp6 = _catch(function () {
49022
- return Promise.resolve(getInfo()).then(function (info) {
49023
- var _info$data, _info$data$roles;
49024
-
49025
- if (!info || !(info !== null && info !== void 0 && (_info$data = info.data) !== null && _info$data !== void 0 && (_info$data$roles = _info$data.roles) !== null && _info$data$roles !== void 0 && _info$data$roles.includes("Admin"))) {
49026
- resetAuth();
49027
- }
49028
-
49029
- dispatch(setUser(info.data));
49030
- });
49031
- }, function () {
49032
- resetAuth();
49033
- });
49034
-
49035
- return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(function () {}) : void 0);
49036
- } catch (e) {
49037
- return Promise.reject(e);
49038
- }
49039
- };
49040
-
49041
- var resetAuth = function resetAuth() {
49042
- localStorage.removeItem(ACCESS_TOKEN);
49043
- sessionStorage.removeItem(ACCESS_TOKEN);
49044
- localStorage.removeItem("ROLES");
49045
- history.push("/");
49046
- };
49047
-
49048
- if (!user) {
49049
- return React__default.createElement(Loading, null);
49050
- }
49051
-
49052
- return React__default.createElement("div", {
49053
- className: "c-app c-default-layout"
49054
- }, !isNotification && React__default.createElement(TheSidebar, {
49055
- navigation: authNavigations
49056
- }), React__default.createElement("div", {
49057
- className: "c-wrapper"
49058
- }, !isNotification && React__default.createElement(TheHeader, {
49059
- onToggleModel: handleToggleModel
49060
- }), React__default.createElement("div", {
49061
- className: "c-body bg-white"
49062
- }, React__default.createElement(TheContent$1, {
49063
- routes: authRoutes
49064
- }))), React__default.createElement(ModelSelectRole, {
49065
- open: openModelSelectRole,
49066
- onToggleModel: handleToggleModel
49067
- }));
49068
- };
49069
-
49070
- var amplitudeClient$1 = amplitude.getInstance();
49071
-
49072
49077
  Object.defineProperty(exports, 'I18nextProvider', {
49073
49078
  enumerable: true,
49074
49079
  get: function () {
@@ -49156,7 +49161,7 @@ exports.UserContainer = UserContainer;
49156
49161
  exports.UserDetail = UserDetail;
49157
49162
  exports.UserList = UserList;
49158
49163
  exports.addTab = addTab;
49159
- exports.amplitudeClient = amplitudeClient$1;
49164
+ exports.amplitudeClient = amplitudeClient;
49160
49165
  exports.answerQuestion = answerQuestion;
49161
49166
  exports.answerQuestionDataPlayer = answerQuestionDataPlayer;
49162
49167
  exports.api = api;