mario-core 2.9.423-feedback → 2.9.424-feedback

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
@@ -41934,6 +41934,212 @@ var TheHeaderDropdown = function TheHeaderDropdown(_ref) {
41934
41934
  })), t("log_out")))));
41935
41935
  };
41936
41936
 
41937
+ var apiGetLanguage = function apiGetLanguage() {
41938
+ return api.get(BASE_URL + "/api/language");
41939
+ };
41940
+
41941
+ var apiUpdateLanguage = function apiUpdateLanguage(lang) {
41942
+ return api.put(BASE_URL + "/api/language?lang=" + lang);
41943
+ };
41944
+
41945
+ var LANGUAGE_SYSTEM = "LANGUAGE_SYSTEM";
41946
+
41947
+ var useLanguages = function useLanguages() {
41948
+ var dispatch = reactRedux.useDispatch();
41949
+
41950
+ var _useTranslation = reactI18next.useTranslation(),
41951
+ i18n = _useTranslation.i18n;
41952
+
41953
+ var language = reactRedux.useSelector(function (state) {
41954
+ return state.common.language;
41955
+ });
41956
+ var defaultLanguage = getCookieValue(LANGUAGE_SYSTEM) != null ? getCookieValue(LANGUAGE_SYSTEM) : DEFAULT_LANGUAGE_CODE;
41957
+
41958
+ var _useState = React.useState([]),
41959
+ languageList = _useState[0],
41960
+ setLanguageList = _useState[1];
41961
+
41962
+ var _useState2 = React.useState(false),
41963
+ dropdownOpen = _useState2[0],
41964
+ setDropdownOpen = _useState2[1];
41965
+
41966
+ var _useState3 = React.useState(defaultLanguage),
41967
+ currentLang = _useState3[0],
41968
+ setCurrentLang = _useState3[1];
41969
+
41970
+ var toggle = function toggle() {
41971
+ return setDropdownOpen(function (prevState) {
41972
+ return !prevState;
41973
+ });
41974
+ };
41975
+
41976
+ var changeLanguageApp = function changeLanguageApp(lang) {
41977
+ try {
41978
+ var _temp3 = function _temp3() {
41979
+ dispatch(setLoading(false));
41980
+ };
41981
+
41982
+ dispatch(setLoading(true));
41983
+
41984
+ var _temp4 = _catch(function () {
41985
+ return Promise.resolve(apiUpdateLanguage(lang)).then(function () {
41986
+ i18n.changeLanguage(lang);
41987
+ setCurrentLang(lang);
41988
+ dispatch(setLanguage(lang));
41989
+ });
41990
+ }, function (err) {
41991
+ var _err$response, _err$response$data;
41992
+
41993
+ dispatch(setAlert({
41994
+ type: "danger",
41995
+ 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
41996
+ }));
41997
+ });
41998
+
41999
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp3) : _temp3(_temp4));
42000
+ } catch (e) {
42001
+ return Promise.reject(e);
42002
+ }
42003
+ };
42004
+
42005
+ var getListLanguage = function getListLanguage() {
42006
+ try {
42007
+ var _temp6 = _catch(function () {
42008
+ return Promise.resolve(apiGetLanguage()).then(function (res) {
42009
+ setLanguageList(res.data);
42010
+ });
42011
+ }, function (err) {
42012
+ var _err$response2, _err$response2$data;
42013
+
42014
+ dispatch(setAlert({
42015
+ type: "danger",
42016
+ 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
42017
+ }));
42018
+ });
42019
+
42020
+ return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(function () {}) : void 0);
42021
+ } catch (e) {
42022
+ return Promise.reject(e);
42023
+ }
42024
+ };
42025
+
42026
+ React.useEffect(function () {
42027
+ defaultLanguage != language && changeLanguageApp(defaultLanguage);
42028
+ getListLanguage();
42029
+ }, []);
42030
+ return {
42031
+ languageList: languageList,
42032
+ toggle: toggle,
42033
+ dropdownOpen: dropdownOpen,
42034
+ currentLang: currentLang,
42035
+ changeLanguageApp: changeLanguageApp,
42036
+ setCurrentLang: setCurrentLang
42037
+ };
42038
+ };
42039
+
42040
+ var TheLanguageDropdown = function TheLanguageDropdown() {
42041
+ var _useLanguages = useLanguages(),
42042
+ languageList = _useLanguages.languageList,
42043
+ toggle = _useLanguages.toggle,
42044
+ dropdownOpen = _useLanguages.dropdownOpen,
42045
+ currentLang = _useLanguages.currentLang,
42046
+ changeLanguageApp = _useLanguages.changeLanguageApp;
42047
+
42048
+ var currentLanguage = React.useMemo(function () {
42049
+ var current = languageList.find(function (i) {
42050
+ return i.code === currentLang;
42051
+ });
42052
+ if (!current) return null;
42053
+ return React__default.createElement(React__default.Fragment, null, React__default.createElement("img", {
42054
+ className: "mr-2 " + styles['dropdown-menu-flag'],
42055
+ src: "" + getStaticFileUrl(current.image)
42056
+ }), " ", current.name);
42057
+ }, [currentLang, languageList]);
42058
+ return React__default.createElement(reactstrap.Dropdown, {
42059
+ isOpen: dropdownOpen,
42060
+ toggle: toggle,
42061
+ className: "" + styles["dropdown-menu"]
42062
+ }, React__default.createElement(reactstrap.DropdownToggle, {
42063
+ className: styles["header-avatar"] + " d-flex align-items-center"
42064
+ }, React__default.createElement("span", {
42065
+ style: {
42066
+ color: "#000",
42067
+ textTransform: "capitalize",
42068
+ display: 'flex',
42069
+ alignItems: 'center'
42070
+ }
42071
+ }, currentLanguage, React__default.createElement(bs.BsChevronDown, {
42072
+ className: "ml-2",
42073
+ style: {
42074
+ fontSize: '10px'
42075
+ }
42076
+ }))), React__default.createElement(reactstrap.DropdownMenu, {
42077
+ className: styles["dropdown-content-language"]
42078
+ }, !!languageList && languageList.length > 0 && languageList.map(function (lang, index) {
42079
+ return React__default.createElement(reactstrap.DropdownItem, {
42080
+ key: lang.code,
42081
+ className: styles["dropdown-change"] + " px-0 py-0 " + (index === languageList.length - 1 ? "pb-2" : "pt-2"),
42082
+ onClick: function onClick() {
42083
+ return changeLanguageApp(lang.code);
42084
+ }
42085
+ }, React__default.createElement("div", {
42086
+ className: styles["dropdown-item-language"] + " " + styles["item-logout"] + " " + (currentLang == lang.code ? styles['dropdown-item-language-active'] : "") + " d-flex align-items-center w-100"
42087
+ }, React__default.createElement("span", {
42088
+ className: "mr-2 d-flex hover-opacity"
42089
+ }, React__default.createElement("img", {
42090
+ style: {
42091
+ width: "30px",
42092
+ height: "25px",
42093
+ borderRadius: "5px"
42094
+ },
42095
+ src: getStaticFileUrl(lang.image)
42096
+ })), lang.name));
42097
+ })));
42098
+ };
42099
+
42100
+ var TheHeader = function TheHeader(_ref) {
42101
+ var onToggleModel = _ref.onToggleModel;
42102
+ var dispatch = reactRedux.useDispatch();
42103
+ var sidebarShow = reactRedux.useSelector(function (state) {
42104
+ return state.common.sidebarShow;
42105
+ });
42106
+
42107
+ var _useTranslation = reactI18next.useTranslation(),
42108
+ t = _useTranslation.t;
42109
+
42110
+ var toggleSidebarMobile = function toggleSidebarMobile() {
42111
+ var val = [false, "responsive"].includes(sidebarShow) ? true : "responsive";
42112
+ dispatch(setSidebar(val));
42113
+ };
42114
+
42115
+ var isDistrict = window.location.host.includes("-district");
42116
+ return React__default.createElement(react.CHeader, {
42117
+ withSubheader: true,
42118
+ className: "d-flex align-items-center justify-content-end"
42119
+ }, React__default.createElement(react.CToggler, {
42120
+ inHeader: true,
42121
+ className: "ml-md-3 d-lg-none",
42122
+ onClick: toggleSidebarMobile
42123
+ }), React__default.createElement(react.CHeaderBrand, {
42124
+ className: "mx-auto flex-grow-1 d-lg-none",
42125
+ to: "/"
42126
+ }, React__default.createElement("img", {
42127
+ src: getStaticFileUrl(Images.LOGO_HEADER),
42128
+ className: styles["header-logo"]
42129
+ })), React__default.createElement(react.CHeaderNav, {
42130
+ className: "pr-3"
42131
+ }, React__default.createElement(TheLanguageDropdown, null), React__default.createElement("a", {
42132
+ className: "mr-3",
42133
+ style: {
42134
+ color: '#000'
42135
+ },
42136
+ href: '/privacy-policy',
42137
+ target: "blank"
42138
+ }, t("privacy_policy")), !isDistrict && React__default.createElement(NotificationButton, null), React__default.createElement(TheHeaderDropdown, {
42139
+ onToggleModel: onToggleModel
42140
+ })));
42141
+ };
42142
+
41937
42143
  var TITLE$3 = "Not found";
41938
42144
 
41939
42145
  var NotFound = function NotFound() {
@@ -41991,25 +42197,277 @@ var TheContent = function TheContent(_ref) {
41991
42197
 
41992
42198
  var TheContent$1 = React__default.memo(TheContent);
41993
42199
 
41994
- var buttonTextStyle = {
41995
- fontWeight: 500
42200
+ var loadingStyle = {
42201
+ minWidth: "100vw",
42202
+ minHeight: "100vh",
42203
+ position: "fixed",
42204
+ top: 0,
42205
+ left: 0,
42206
+ zIndex: 999999999,
42207
+ backgroundColor: "rgba(0, 0, 0, 0.4)",
42208
+ display: "flex",
42209
+ justifyContent: "center",
42210
+ alignItems: "center"
41996
42211
  };
41997
- var buttonStyle = {
41998
- height: 38
42212
+
42213
+ var Loading = function Loading() {
42214
+ var isLoading = reactRedux.useSelector(function (state) {
42215
+ return state.common.isLoading;
42216
+ });
42217
+ localStorage.setItem("LAST_TIME_REQUETST", moment().utc().format("YYYY-MM-DD HH:mm:ss"));
42218
+ return isLoading ? React__default.createElement("div", {
42219
+ style: loadingStyle
42220
+ }, React__default.createElement("div", {
42221
+ className: "spinner-border text-secondary",
42222
+ role: "status"
42223
+ }, React__default.createElement("span", {
42224
+ className: "sr-only"
42225
+ }, "Loading..."))) : null;
41999
42226
  };
42000
42227
 
42001
- var AddButton = function AddButton(_ref) {
42002
- var text = _ref.text,
42003
- onClick = _ref.onClick;
42004
- return React__default.createElement(reactstrap.Button, {
42005
- onClick: onClick,
42006
- color: 'success',
42007
- style: buttonStyle,
42008
- className: 'd-flex align-items-center'
42009
- }, React__default.createElement(fa.FaPlus, null), React__default.createElement("span", {
42010
- className: 'ml-2',
42011
- style: buttonTextStyle
42012
- }, text));
42228
+ var firstCheckToken = function firstCheckToken() {
42229
+ return Promise.resolve(_catch(function () {
42230
+ var token = getAccessToken();
42231
+ return token ? Promise.resolve(checkToken(token)).then(function (tokenStatus) {
42232
+ return tokenStatus.data ? true : false;
42233
+ }) : false;
42234
+ }, function () {
42235
+ return false;
42236
+ }));
42237
+ };
42238
+
42239
+ var canAccess = function canAccess(userRoles, componentRoles) {
42240
+ if (!Array.isArray(userRoles)) {
42241
+ return false;
42242
+ }
42243
+
42244
+ if (Array.isArray(componentRoles)) {
42245
+ var intersects = userRoles.filter(function (i) {
42246
+ return componentRoles.includes(i);
42247
+ });
42248
+ return intersects.length > 0;
42249
+ }
42250
+
42251
+ return true;
42252
+ };
42253
+
42254
+ var ModelSelectRole = function ModelSelectRole(_ref) {
42255
+ var _handleUserRole;
42256
+
42257
+ var open = _ref.open,
42258
+ onToggleModel = _ref.onToggleModel;
42259
+ var dispatch = reactRedux.useDispatch();
42260
+
42261
+ var _useTranslation = reactI18next.useTranslation(),
42262
+ t = _useTranslation.t;
42263
+
42264
+ var history = reactRouterDom.useHistory();
42265
+ var pathname = window.location.pathname;
42266
+ var user = reactRedux.useSelector(function (state) {
42267
+ return state.common.user;
42268
+ });
42269
+ var roles = user === null || user === void 0 ? void 0 : user.roles;
42270
+
42271
+ var handleSelectUserRoles = function handleSelectUserRoles(roles) {
42272
+ dispatch(setLoading(true));
42273
+ var roleSelect = roles.includes("Teacher/Assistant") ? ["Teacher", "Assistant"] : roles;
42274
+ dispatch(setUser(_extends({}, user, {
42275
+ roles: roleSelect
42276
+ })));
42277
+ localStorage.setItem("ROLES", roleSelect.toString());
42278
+ onToggleModel();
42279
+
42280
+ if (roles.includes("Parent")) {
42281
+ history.push("/parent");
42282
+ } else if (roles.includes("Admin")) {
42283
+ history.push("/admin/home");
42284
+ } else {
42285
+ pathname !== "/home" ? history.push("/home") : window.location.reload();
42286
+ }
42287
+ };
42288
+
42289
+ return React__default.createElement(reactstrap.Modal, {
42290
+ isOpen: open,
42291
+ toggle: function toggle() {
42292
+ return onToggleModel();
42293
+ },
42294
+ className: "" + styles["model-switch-roles"],
42295
+ centered: true
42296
+ }, React__default.createElement("p", {
42297
+ className: "" + styles["title"]
42298
+ }, 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) {
42299
+ return React__default.createElement("p", {
42300
+ key: r,
42301
+ 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" : ""],
42302
+ onClick: function onClick() {
42303
+ return handleSelectUserRoles([r]);
42304
+ }
42305
+ }, r == "SecondaryTeacher" ? "Support Teacher" : r);
42306
+ })));
42307
+ };
42308
+
42309
+ var TheLayout = function TheLayout(_ref) {
42310
+ var routes = _ref.routes,
42311
+ navigation = _ref.navigation;
42312
+ var history = reactRouterDom.useHistory();
42313
+ var dispatch = reactRedux.useDispatch();
42314
+ var user = reactRedux.useSelector(function (state) {
42315
+ return state.common.user;
42316
+ });
42317
+ var language = reactRedux.useSelector(function (state) {
42318
+ return state.common.language;
42319
+ });
42320
+
42321
+ var _useState = React.useState(false),
42322
+ openModelSelectRole = _useState[0],
42323
+ setOpenModelSelectRole = _useState[1];
42324
+
42325
+ var _useTranslation = reactI18next.useTranslation(),
42326
+ t = _useTranslation.t;
42327
+
42328
+ var location = reactRouterDom.useLocation();
42329
+ var isNotification = location.pathname.includes("notifications");
42330
+ var isDistrict = window.location.host.includes("-district");
42331
+
42332
+ var handleToggleModel = function handleToggleModel() {
42333
+ setOpenModelSelectRole(!openModelSelectRole);
42334
+ };
42335
+
42336
+ var authRoutes = React.useMemo(function () {
42337
+ return routes.filter(function (route) {
42338
+ return canAccess(user === null || user === void 0 ? void 0 : user.roles, route.roles);
42339
+ }).filter(function (route) {
42340
+ return !!route.isDistrict === isDistrict;
42341
+ });
42342
+ }, [user, language]);
42343
+ var authNavigations = React.useMemo(function () {
42344
+ return navigation.map(function (item) {
42345
+ var _item$_children, _item$_children2;
42346
+
42347
+ return _extends({}, item, {
42348
+ name: t(item.name),
42349
+ _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) {
42350
+ return _extends({}, x, {
42351
+ name: t(x.name)
42352
+ });
42353
+ }) : undefined
42354
+ });
42355
+ }).filter(function (nav) {
42356
+ return canAccess(user === null || user === void 0 ? void 0 : user.roles, nav.roles);
42357
+ }).filter(function (nav) {
42358
+ return !!nav.isDistrict === isDistrict;
42359
+ });
42360
+ }, [user, language]);
42361
+
42362
+ var getInformationSetting = function getInformationSetting() {
42363
+ try {
42364
+ var _temp2 = _catch(function () {
42365
+ return Promise.resolve(getSchoolSettings()).then(function (res) {
42366
+ dispatch(setSandboxMode(res.data.isSandboxMode));
42367
+ });
42368
+ }, function (err) {
42369
+ console.error(err);
42370
+ });
42371
+
42372
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
42373
+ } catch (e) {
42374
+ return Promise.reject(e);
42375
+ }
42376
+ };
42377
+
42378
+ React.useEffect(function () {
42379
+ checkAuthentication();
42380
+ }, []);
42381
+ React.useEffect(function () {
42382
+ getInformationSetting();
42383
+ }, [location.pathname]);
42384
+
42385
+ var checkAuthentication = function checkAuthentication() {
42386
+ try {
42387
+ var _temp4 = _catch(function () {
42388
+ return Promise.resolve(firstCheckToken()).then(function (tokenStatus) {
42389
+ tokenStatus ? loadInfo() : resetAuth();
42390
+ });
42391
+ }, function () {
42392
+ resetAuth();
42393
+ });
42394
+
42395
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(function () {}) : void 0);
42396
+ } catch (e) {
42397
+ return Promise.reject(e);
42398
+ }
42399
+ };
42400
+
42401
+ var loadInfo = function loadInfo() {
42402
+ try {
42403
+ var _temp6 = _catch(function () {
42404
+ return Promise.resolve(getInfo()).then(function (info) {
42405
+ var _info$data, _info$data$roles;
42406
+
42407
+ 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"))) {
42408
+ resetAuth();
42409
+ }
42410
+
42411
+ dispatch(setUser(info.data));
42412
+ });
42413
+ }, function () {
42414
+ resetAuth();
42415
+ });
42416
+
42417
+ return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(function () {}) : void 0);
42418
+ } catch (e) {
42419
+ return Promise.reject(e);
42420
+ }
42421
+ };
42422
+
42423
+ var resetAuth = function resetAuth() {
42424
+ localStorage.removeItem(ACCESS_TOKEN);
42425
+ sessionStorage.removeItem(ACCESS_TOKEN);
42426
+ localStorage.removeItem("ROLES");
42427
+ history.push("/");
42428
+ };
42429
+
42430
+ if (!user) {
42431
+ return React__default.createElement(Loading, null);
42432
+ }
42433
+
42434
+ return React__default.createElement("div", {
42435
+ className: "c-app c-default-layout"
42436
+ }, !isNotification && React__default.createElement(TheSidebar, {
42437
+ navigation: authNavigations
42438
+ }), React__default.createElement("div", {
42439
+ className: "c-wrapper"
42440
+ }, !isNotification && React__default.createElement(TheHeader, {
42441
+ onToggleModel: handleToggleModel
42442
+ }), React__default.createElement("div", {
42443
+ className: "c-body bg-white"
42444
+ }, React__default.createElement(TheContent$1, {
42445
+ routes: authRoutes
42446
+ }))), React__default.createElement(ModelSelectRole, {
42447
+ open: openModelSelectRole,
42448
+ onToggleModel: handleToggleModel
42449
+ }));
42450
+ };
42451
+
42452
+ var buttonTextStyle = {
42453
+ fontWeight: 500
42454
+ };
42455
+ var buttonStyle = {
42456
+ height: 38
42457
+ };
42458
+
42459
+ var AddButton = function AddButton(_ref) {
42460
+ var text = _ref.text,
42461
+ onClick = _ref.onClick;
42462
+ return React__default.createElement(reactstrap.Button, {
42463
+ onClick: onClick,
42464
+ color: 'success',
42465
+ style: buttonStyle,
42466
+ className: 'd-flex align-items-center'
42467
+ }, React__default.createElement(fa.FaPlus, null), React__default.createElement("span", {
42468
+ className: 'ml-2',
42469
+ style: buttonTextStyle
42470
+ }, text));
42013
42471
  };
42014
42472
 
42015
42473
  var DeleteButtonIcon = function DeleteButtonIcon(_ref) {
@@ -51371,42 +51829,14 @@ var UserDetail = function UserDetail() {
51371
51829
  });
51372
51830
  };
51373
51831
 
51374
- var loadingStyle = {
51375
- minWidth: "100vw",
51376
- minHeight: "100vh",
51377
- position: "fixed",
51378
- top: 0,
51379
- left: 0,
51380
- zIndex: 999999999,
51381
- backgroundColor: "rgba(0, 0, 0, 0.4)",
51382
- display: "flex",
51383
- justifyContent: "center",
51384
- alignItems: "center"
51385
- };
51386
-
51387
- var Loading = function Loading() {
51388
- var isLoading = reactRedux.useSelector(function (state) {
51389
- return state.common.isLoading;
51390
- });
51391
- localStorage.setItem("LAST_TIME_REQUETST", moment().utc().format("YYYY-MM-DD HH:mm:ss"));
51392
- return isLoading ? React__default.createElement("div", {
51393
- style: loadingStyle
51394
- }, React__default.createElement("div", {
51395
- className: "spinner-border text-secondary",
51396
- role: "status"
51397
- }, React__default.createElement("span", {
51398
- className: "sr-only"
51399
- }, "Loading..."))) : null;
51400
- };
51401
-
51402
- var ScrollToTop = function ScrollToTop() {
51403
- var _useLocation = reactRouterDom.useLocation(),
51404
- pathname = _useLocation.pathname;
51405
-
51406
- React.useEffect(function () {
51407
- window.scrollTo(0, 0);
51408
- }, [pathname]);
51409
- return null;
51832
+ var ScrollToTop = function ScrollToTop() {
51833
+ var _useLocation = reactRouterDom.useLocation(),
51834
+ pathname = _useLocation.pathname;
51835
+
51836
+ React.useEffect(function () {
51837
+ window.scrollTo(0, 0);
51838
+ }, [pathname]);
51839
+ return null;
51410
51840
  };
51411
51841
 
51412
51842
  var modalInfo = function modalInfo(type) {
@@ -51506,7 +51936,12 @@ var CommonHeader = function CommonHeader(_ref) {
51506
51936
  }, header))));
51507
51937
  };
51508
51938
 
51939
+ var IDLE_MINUTES_WARNING = 13;
51940
+ var AUTO_LOGOUT_MINUTES = 15;
51941
+
51509
51942
  var NotificationLogoutModal = function NotificationLogoutModal() {
51943
+ var history = reactRouterDom.useHistory();
51944
+
51510
51945
  var _useState = React.useState(false),
51511
51946
  isOpen = _useState[0],
51512
51947
  setIsOpen = _useState[1];
@@ -51518,37 +51953,65 @@ var NotificationLogoutModal = function NotificationLogoutModal() {
51518
51953
  objTime = _useState2[0],
51519
51954
  setObjTime = _useState2[1];
51520
51955
 
51956
+ var getLastActivity = function getLastActivity() {
51957
+ try {
51958
+ var _localStorage$getItem, _localStorage, _localStorage$getItem2;
51959
+
51960
+ return (_localStorage$getItem = (_localStorage = localStorage) === null || _localStorage === void 0 ? void 0 : (_localStorage$getItem2 = _localStorage.getItem) === null || _localStorage$getItem2 === void 0 ? void 0 : _localStorage$getItem2.call(_localStorage, "LAST_ACTIVITY_TIME")) != null ? _localStorage$getItem : null;
51961
+ } catch (_unused) {
51962
+ return null;
51963
+ }
51964
+ };
51965
+
51966
+ var doLogout = function doLogout() {
51967
+ localStorage.removeItem(ACCESS_TOKEN);
51968
+ sessionStorage.removeItem(ACCESS_TOKEN);
51969
+ localStorage.removeItem("ROLES");
51970
+ localStorage.removeItem("LAST_ACTIVITY_TIME");
51971
+ setIsOpen(false);
51972
+ history.replace("/login");
51973
+ };
51974
+
51521
51975
  var checkOpenModalLogout = function checkOpenModalLogout() {
51522
- var lastTimeOut = localStorage.getItem("LAST_TIME_REQUETST");
51523
- var timeMoment = moment(lastTimeOut, "YYYY-MM-DD HH:mm");
51976
+ var accessToken = getAccessToken();
51977
+ if (!accessToken) return;
51978
+ var lastActivity = getLastActivity();
51979
+
51980
+ if (!lastActivity) {
51981
+ var _localStorage2, _localStorage2$setIte;
51982
+
51983
+ (_localStorage2 = localStorage) === null || _localStorage2 === void 0 ? void 0 : (_localStorage2$setIte = _localStorage2.setItem) === null || _localStorage2$setIte === void 0 ? void 0 : _localStorage2$setIte.call(_localStorage2, "LAST_ACTIVITY_TIME", new Date().toISOString());
51984
+ return;
51985
+ }
51986
+
51987
+ var timeMoment = moment(lastActivity, "YYYY-MM-DD HH:mm");
51524
51988
  var currentTime = moment(moment().utc().format("YYYY-MM-DD HH:mm"));
51525
51989
  var minutes = currentTime.diff(timeMoment, "minutes");
51526
- var timeLogout = utcToLocalTime(currentTime.add(16 - minutes, 'minutes').format("YYYY-MM-DD HH:mm"), "HH:mm");
51527
51990
 
51528
- if (minutes == 13) {
51529
- var dataTime = {
51991
+ if (minutes >= AUTO_LOGOUT_MINUTES) {
51992
+ doLogout();
51993
+ return;
51994
+ }
51995
+
51996
+ var timeLogout = utcToLocalTime(currentTime.add(AUTO_LOGOUT_MINUTES - minutes, 'minutes').format("YYYY-MM-DD HH:mm"), "HH:mm");
51997
+
51998
+ if (minutes >= IDLE_MINUTES_WARNING) {
51999
+ setObjTime({
51530
52000
  minutes: minutes,
51531
52001
  timeLogout: timeLogout
51532
- };
51533
- setObjTime(dataTime);
51534
- onToggle();
52002
+ });
52003
+ setIsOpen(true);
51535
52004
  }
51536
52005
  };
51537
52006
 
51538
52007
  React.useEffect(function () {
51539
- var accessToken = getAccessToken();
51540
-
51541
- if (accessToken) {
51542
- var interval = setInterval(function () {
51543
- checkOpenModalLogout();
51544
- }, 60 * 1000);
51545
- return function () {
51546
- return clearInterval(interval);
51547
- };
51548
- }
51549
-
51550
- return;
51551
- }, [location.href]);
52008
+ var interval = setInterval(function () {
52009
+ checkOpenModalLogout();
52010
+ }, 60 * 1000);
52011
+ return function () {
52012
+ return clearInterval(interval);
52013
+ };
52014
+ }, []);
51552
52015
 
51553
52016
  var onToggle = function onToggle() {
51554
52017
  setIsOpen(!isOpen);
@@ -51560,7 +52023,7 @@ var NotificationLogoutModal = function NotificationLogoutModal() {
51560
52023
  size: "xs"
51561
52024
  }, React__default.createElement(reactstrap.ModalHeader, {
51562
52025
  toggle: onToggle
51563
- }, "Notification Logout"), React__default.createElement(reactstrap.ModalBody, null, "Are you still here? You have had no action for " + (objTime === null || objTime === void 0 ? void 0 : objTime.minutes) + " mins. \n Your account could be log out after " + (15 - (objTime === null || objTime === void 0 ? void 0 : objTime.minutes)) + " mins at " + (objTime === null || objTime === void 0 ? void 0 : objTime.timeLogout) + " if you don't action."), React__default.createElement(reactstrap.ModalFooter, {
52026
+ }, "Notification Logout"), React__default.createElement(reactstrap.ModalBody, null, "Are you still here? You have had no action for " + (objTime === null || objTime === void 0 ? void 0 : objTime.minutes) + " mins. \n Your account could be log out after " + (AUTO_LOGOUT_MINUTES - (objTime === null || objTime === void 0 ? void 0 : objTime.minutes)) + " mins at " + (objTime === null || objTime === void 0 ? void 0 : objTime.timeLogout) + " if you don't action."), React__default.createElement(reactstrap.ModalFooter, {
51564
52027
  className: "text-right"
51565
52028
  }, React__default.createElement(reactstrap.Button, {
51566
52029
  color: "primary",
@@ -54422,32 +54885,6 @@ var store = toolkit.configureStore({
54422
54885
  }
54423
54886
  });
54424
54887
 
54425
- var firstCheckToken = function firstCheckToken() {
54426
- return Promise.resolve(_catch(function () {
54427
- var token = getAccessToken();
54428
- return token ? Promise.resolve(checkToken(token)).then(function (tokenStatus) {
54429
- return tokenStatus.data ? true : false;
54430
- }) : false;
54431
- }, function () {
54432
- return false;
54433
- }));
54434
- };
54435
-
54436
- var canAccess = function canAccess(userRoles, componentRoles) {
54437
- if (!Array.isArray(userRoles)) {
54438
- return false;
54439
- }
54440
-
54441
- if (Array.isArray(componentRoles)) {
54442
- var intersects = userRoles.filter(function (i) {
54443
- return componentRoles.includes(i);
54444
- });
54445
- return intersects.length > 0;
54446
- }
54447
-
54448
- return true;
54449
- };
54450
-
54451
54888
  var isInViewport = function isInViewport(el) {
54452
54889
  var rect = el === null || el === void 0 ? void 0 : el.getBoundingClientRect();
54453
54890
  return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);
@@ -54481,410 +54918,6 @@ var generateRandomString = (function () {
54481
54918
  return (Math.random() + 1).toString(36).substring(7);
54482
54919
  });
54483
54920
 
54484
- var apiGetLanguage = function apiGetLanguage() {
54485
- return api.get(BASE_URL + "/api/language");
54486
- };
54487
-
54488
- var apiUpdateLanguage = function apiUpdateLanguage(lang) {
54489
- return api.put(BASE_URL + "/api/language?lang=" + lang);
54490
- };
54491
-
54492
- var LANGUAGE_SYSTEM = "LANGUAGE_SYSTEM";
54493
-
54494
- var useLanguages = function useLanguages() {
54495
- var dispatch = reactRedux.useDispatch();
54496
-
54497
- var _useTranslation = reactI18next.useTranslation(),
54498
- i18n = _useTranslation.i18n;
54499
-
54500
- var language = reactRedux.useSelector(function (state) {
54501
- return state.common.language;
54502
- });
54503
- var defaultLanguage = getCookieValue(LANGUAGE_SYSTEM) != null ? getCookieValue(LANGUAGE_SYSTEM) : DEFAULT_LANGUAGE_CODE;
54504
-
54505
- var _useState = React.useState([]),
54506
- languageList = _useState[0],
54507
- setLanguageList = _useState[1];
54508
-
54509
- var _useState2 = React.useState(false),
54510
- dropdownOpen = _useState2[0],
54511
- setDropdownOpen = _useState2[1];
54512
-
54513
- var _useState3 = React.useState(defaultLanguage),
54514
- currentLang = _useState3[0],
54515
- setCurrentLang = _useState3[1];
54516
-
54517
- var toggle = function toggle() {
54518
- return setDropdownOpen(function (prevState) {
54519
- return !prevState;
54520
- });
54521
- };
54522
-
54523
- var changeLanguageApp = function changeLanguageApp(lang) {
54524
- try {
54525
- var _temp3 = function _temp3() {
54526
- dispatch(setLoading(false));
54527
- };
54528
-
54529
- dispatch(setLoading(true));
54530
-
54531
- var _temp4 = _catch(function () {
54532
- return Promise.resolve(apiUpdateLanguage(lang)).then(function () {
54533
- i18n.changeLanguage(lang);
54534
- setCurrentLang(lang);
54535
- dispatch(setLanguage(lang));
54536
- });
54537
- }, function (err) {
54538
- var _err$response, _err$response$data;
54539
-
54540
- dispatch(setAlert({
54541
- type: "danger",
54542
- 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
54543
- }));
54544
- });
54545
-
54546
- return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp3) : _temp3(_temp4));
54547
- } catch (e) {
54548
- return Promise.reject(e);
54549
- }
54550
- };
54551
-
54552
- var getListLanguage = function getListLanguage() {
54553
- try {
54554
- var _temp6 = _catch(function () {
54555
- return Promise.resolve(apiGetLanguage()).then(function (res) {
54556
- setLanguageList(res.data);
54557
- });
54558
- }, function (err) {
54559
- var _err$response2, _err$response2$data;
54560
-
54561
- dispatch(setAlert({
54562
- type: "danger",
54563
- 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
54564
- }));
54565
- });
54566
-
54567
- return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(function () {}) : void 0);
54568
- } catch (e) {
54569
- return Promise.reject(e);
54570
- }
54571
- };
54572
-
54573
- React.useEffect(function () {
54574
- defaultLanguage != language && changeLanguageApp(defaultLanguage);
54575
- getListLanguage();
54576
- }, []);
54577
- return {
54578
- languageList: languageList,
54579
- toggle: toggle,
54580
- dropdownOpen: dropdownOpen,
54581
- currentLang: currentLang,
54582
- changeLanguageApp: changeLanguageApp,
54583
- setCurrentLang: setCurrentLang
54584
- };
54585
- };
54586
-
54587
- var TheLanguageDropdown = function TheLanguageDropdown() {
54588
- var _useLanguages = useLanguages(),
54589
- languageList = _useLanguages.languageList,
54590
- toggle = _useLanguages.toggle,
54591
- dropdownOpen = _useLanguages.dropdownOpen,
54592
- currentLang = _useLanguages.currentLang,
54593
- changeLanguageApp = _useLanguages.changeLanguageApp;
54594
-
54595
- var currentLanguage = React.useMemo(function () {
54596
- var current = languageList.find(function (i) {
54597
- return i.code === currentLang;
54598
- });
54599
- if (!current) return null;
54600
- return React__default.createElement(React__default.Fragment, null, React__default.createElement("img", {
54601
- className: "mr-2 " + styles['dropdown-menu-flag'],
54602
- src: "" + getStaticFileUrl(current.image)
54603
- }), " ", current.name);
54604
- }, [currentLang, languageList]);
54605
- return React__default.createElement(reactstrap.Dropdown, {
54606
- isOpen: dropdownOpen,
54607
- toggle: toggle,
54608
- className: "" + styles["dropdown-menu"]
54609
- }, React__default.createElement(reactstrap.DropdownToggle, {
54610
- className: styles["header-avatar"] + " d-flex align-items-center"
54611
- }, React__default.createElement("span", {
54612
- style: {
54613
- color: "#000",
54614
- textTransform: "capitalize",
54615
- display: 'flex',
54616
- alignItems: 'center'
54617
- }
54618
- }, currentLanguage, React__default.createElement(bs.BsChevronDown, {
54619
- className: "ml-2",
54620
- style: {
54621
- fontSize: '10px'
54622
- }
54623
- }))), React__default.createElement(reactstrap.DropdownMenu, {
54624
- className: styles["dropdown-content-language"]
54625
- }, !!languageList && languageList.length > 0 && languageList.map(function (lang, index) {
54626
- return React__default.createElement(reactstrap.DropdownItem, {
54627
- key: lang.code,
54628
- className: styles["dropdown-change"] + " px-0 py-0 " + (index === languageList.length - 1 ? "pb-2" : "pt-2"),
54629
- onClick: function onClick() {
54630
- return changeLanguageApp(lang.code);
54631
- }
54632
- }, React__default.createElement("div", {
54633
- className: styles["dropdown-item-language"] + " " + styles["item-logout"] + " " + (currentLang == lang.code ? styles['dropdown-item-language-active'] : "") + " d-flex align-items-center w-100"
54634
- }, React__default.createElement("span", {
54635
- className: "mr-2 d-flex hover-opacity"
54636
- }, React__default.createElement("img", {
54637
- style: {
54638
- width: "30px",
54639
- height: "25px",
54640
- borderRadius: "5px"
54641
- },
54642
- src: getStaticFileUrl(lang.image)
54643
- })), lang.name));
54644
- })));
54645
- };
54646
-
54647
- var TheHeader = function TheHeader(_ref) {
54648
- var onToggleModel = _ref.onToggleModel;
54649
- var dispatch = reactRedux.useDispatch();
54650
- var sidebarShow = reactRedux.useSelector(function (state) {
54651
- return state.common.sidebarShow;
54652
- });
54653
-
54654
- var _useTranslation = reactI18next.useTranslation(),
54655
- t = _useTranslation.t;
54656
-
54657
- var toggleSidebarMobile = function toggleSidebarMobile() {
54658
- var val = [false, "responsive"].includes(sidebarShow) ? true : "responsive";
54659
- dispatch(setSidebar(val));
54660
- };
54661
-
54662
- var isDistrict = window.location.host.includes("-district");
54663
- return React__default.createElement(react.CHeader, {
54664
- withSubheader: true,
54665
- className: "d-flex align-items-center justify-content-end"
54666
- }, React__default.createElement(react.CToggler, {
54667
- inHeader: true,
54668
- className: "ml-md-3 d-lg-none",
54669
- onClick: toggleSidebarMobile
54670
- }), React__default.createElement(react.CHeaderBrand, {
54671
- className: "mx-auto flex-grow-1 d-lg-none",
54672
- to: "/"
54673
- }, React__default.createElement("img", {
54674
- src: getStaticFileUrl(Images.LOGO_HEADER),
54675
- className: styles["header-logo"]
54676
- })), React__default.createElement(react.CHeaderNav, {
54677
- className: "pr-3"
54678
- }, React__default.createElement(TheLanguageDropdown, null), React__default.createElement("a", {
54679
- className: "mr-3",
54680
- style: {
54681
- color: '#000'
54682
- },
54683
- href: '/privacy-policy',
54684
- target: "blank"
54685
- }, t("privacy_policy")), !isDistrict && React__default.createElement(NotificationButton, null), React__default.createElement(TheHeaderDropdown, {
54686
- onToggleModel: onToggleModel
54687
- })));
54688
- };
54689
-
54690
- var ModelSelectRole = function ModelSelectRole(_ref) {
54691
- var _handleUserRole;
54692
-
54693
- var open = _ref.open,
54694
- onToggleModel = _ref.onToggleModel;
54695
- var dispatch = reactRedux.useDispatch();
54696
-
54697
- var _useTranslation = reactI18next.useTranslation(),
54698
- t = _useTranslation.t;
54699
-
54700
- var history = reactRouterDom.useHistory();
54701
- var pathname = window.location.pathname;
54702
- var user = reactRedux.useSelector(function (state) {
54703
- return state.common.user;
54704
- });
54705
- var roles = user === null || user === void 0 ? void 0 : user.roles;
54706
-
54707
- var handleSelectUserRoles = function handleSelectUserRoles(roles) {
54708
- dispatch(setLoading(true));
54709
- var roleSelect = roles.includes("Teacher/Assistant") ? ["Teacher", "Assistant"] : roles;
54710
- dispatch(setUser(_extends({}, user, {
54711
- roles: roleSelect
54712
- })));
54713
- localStorage.setItem("ROLES", roleSelect.toString());
54714
- onToggleModel();
54715
-
54716
- if (roles.includes("Parent")) {
54717
- history.push("/parent");
54718
- } else if (roles.includes("Admin")) {
54719
- history.push("/admin/home");
54720
- } else {
54721
- pathname !== "/home" ? history.push("/home") : window.location.reload();
54722
- }
54723
- };
54724
-
54725
- return React__default.createElement(reactstrap.Modal, {
54726
- isOpen: open,
54727
- toggle: function toggle() {
54728
- return onToggleModel();
54729
- },
54730
- className: "" + styles["model-switch-roles"],
54731
- centered: true
54732
- }, React__default.createElement("p", {
54733
- className: "" + styles["title"]
54734
- }, 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) {
54735
- return React__default.createElement("p", {
54736
- key: r,
54737
- 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" : ""],
54738
- onClick: function onClick() {
54739
- return handleSelectUserRoles([r]);
54740
- }
54741
- }, r == "SecondaryTeacher" ? "Support Teacher" : r);
54742
- })));
54743
- };
54744
-
54745
- var TheLayout = function TheLayout(_ref) {
54746
- var routes = _ref.routes,
54747
- navigation = _ref.navigation;
54748
- var history = reactRouterDom.useHistory();
54749
- var dispatch = reactRedux.useDispatch();
54750
- var user = reactRedux.useSelector(function (state) {
54751
- return state.common.user;
54752
- });
54753
- var language = reactRedux.useSelector(function (state) {
54754
- return state.common.language;
54755
- });
54756
-
54757
- var _useState = React.useState(false),
54758
- openModelSelectRole = _useState[0],
54759
- setOpenModelSelectRole = _useState[1];
54760
-
54761
- var _useTranslation = reactI18next.useTranslation(),
54762
- t = _useTranslation.t;
54763
-
54764
- var location = reactRouterDom.useLocation();
54765
- var isNotification = location.pathname.includes("notifications");
54766
- var isDistrict = window.location.host.includes("-district");
54767
-
54768
- var handleToggleModel = function handleToggleModel() {
54769
- setOpenModelSelectRole(!openModelSelectRole);
54770
- };
54771
-
54772
- var authRoutes = React.useMemo(function () {
54773
- return routes.filter(function (route) {
54774
- return canAccess(user === null || user === void 0 ? void 0 : user.roles, route.roles);
54775
- }).filter(function (route) {
54776
- return !!route.isDistrict === isDistrict;
54777
- });
54778
- }, [user, language]);
54779
- var authNavigations = React.useMemo(function () {
54780
- return navigation.map(function (item) {
54781
- var _item$_children, _item$_children2;
54782
-
54783
- return _extends({}, item, {
54784
- name: t(item.name),
54785
- _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) {
54786
- return _extends({}, x, {
54787
- name: t(x.name)
54788
- });
54789
- }) : undefined
54790
- });
54791
- }).filter(function (nav) {
54792
- return canAccess(user === null || user === void 0 ? void 0 : user.roles, nav.roles);
54793
- }).filter(function (nav) {
54794
- return !!nav.isDistrict === isDistrict;
54795
- });
54796
- }, [user, language]);
54797
-
54798
- var getInformationSetting = function getInformationSetting() {
54799
- try {
54800
- var _temp2 = _catch(function () {
54801
- return Promise.resolve(getSchoolSettings()).then(function (res) {
54802
- dispatch(setSandboxMode(res.data.isSandboxMode));
54803
- });
54804
- }, function (err) {
54805
- console.error(err);
54806
- });
54807
-
54808
- return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
54809
- } catch (e) {
54810
- return Promise.reject(e);
54811
- }
54812
- };
54813
-
54814
- React.useEffect(function () {
54815
- checkAuthentication();
54816
- }, []);
54817
- React.useEffect(function () {
54818
- getInformationSetting();
54819
- }, [location.pathname]);
54820
-
54821
- var checkAuthentication = function checkAuthentication() {
54822
- try {
54823
- var _temp4 = _catch(function () {
54824
- return Promise.resolve(firstCheckToken()).then(function (tokenStatus) {
54825
- tokenStatus ? loadInfo() : resetAuth();
54826
- });
54827
- }, function () {
54828
- resetAuth();
54829
- });
54830
-
54831
- return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(function () {}) : void 0);
54832
- } catch (e) {
54833
- return Promise.reject(e);
54834
- }
54835
- };
54836
-
54837
- var loadInfo = function loadInfo() {
54838
- try {
54839
- var _temp6 = _catch(function () {
54840
- return Promise.resolve(getInfo()).then(function (info) {
54841
- var _info$data, _info$data$roles;
54842
-
54843
- 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"))) {
54844
- resetAuth();
54845
- }
54846
-
54847
- dispatch(setUser(info.data));
54848
- });
54849
- }, function () {
54850
- resetAuth();
54851
- });
54852
-
54853
- return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(function () {}) : void 0);
54854
- } catch (e) {
54855
- return Promise.reject(e);
54856
- }
54857
- };
54858
-
54859
- var resetAuth = function resetAuth() {
54860
- localStorage.removeItem(ACCESS_TOKEN);
54861
- sessionStorage.removeItem(ACCESS_TOKEN);
54862
- localStorage.removeItem("ROLES");
54863
- history.push("/");
54864
- };
54865
-
54866
- if (!user) {
54867
- return React__default.createElement(Loading, null);
54868
- }
54869
-
54870
- return React__default.createElement("div", {
54871
- className: "c-app c-default-layout"
54872
- }, !isNotification && React__default.createElement(TheSidebar, {
54873
- navigation: authNavigations
54874
- }), React__default.createElement("div", {
54875
- className: "c-wrapper"
54876
- }, !isNotification && React__default.createElement(TheHeader, {
54877
- onToggleModel: handleToggleModel
54878
- }), React__default.createElement("div", {
54879
- className: "c-body bg-white"
54880
- }, React__default.createElement(TheContent$1, {
54881
- routes: authRoutes
54882
- }))), React__default.createElement(ModelSelectRole, {
54883
- open: openModelSelectRole,
54884
- onToggleModel: handleToggleModel
54885
- }));
54886
- };
54887
-
54888
54921
  var amplitudeClient = amplitude;
54889
54922
 
54890
54923
  Object.defineProperty(exports, 'I18nextProvider', {
@@ -54989,6 +55022,7 @@ exports.editTab = editTab;
54989
55022
  exports.editorConfig = editorConfig;
54990
55023
  exports.firstCheckToken = firstCheckToken;
54991
55024
  exports.generateRandomString = generateRandomString;
55025
+ exports.getAccessToken = getAccessToken;
54992
55026
  exports.getCookieValue = getCookieValue;
54993
55027
  exports.getFileUrl = getFileUrl;
54994
55028
  exports.getInfo = getInfo;