UNPKG

rap-react

Version:

To make it easy for you to get started with GitLab, here's a list of recommended next steps.

265 lines (260 loc) 9.16 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.UserProvider = void 0; var _react = _interopRequireWildcard(require("react")); var _LoaderContext = _interopRequireDefault(require("../loader/LoaderContext")); var _userContext = require("./userContext"); var _tokenService = require("../../services/tokenService"); var _jwtDecode = _interopRequireDefault(require("jwt-decode")); var _authService = require("../../services/authService"); var _permissionService = require("../../services/permissionService"); var _localstorageService = require("../../services/localstorageService"); var _entityService = require("../../services/entityService"); var _enums = require("../../constants/enums"); var _reactRouterDom = require("react-router-dom"); var _jsxRuntime = require("react/jsx-runtime"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const baseUserObject = { email: "", exp: 0, role: [], iat: 0, iss: "", jti: "", nbf: 0, sub: "", userProfile: null, linkData: null, privileges: null, distinctModules: [] }; const reducer = (state, _ref) => { let { type, payload } = _ref; switch (type === null || type === void 0 ? void 0 : type.toString().toLowerCase()) { case "login": { let userObject = { ...state.user, ...payload.decode }; let returned = { user: { ...userObject, isAuthenticated: true, userProfile: payload.userProfile, linkData: null, privileges: payload.privileges, role: payload.role, distinctModules: payload.distinctModules }, token: payload.token }; return returned; } case "clear": case "logout": { let userObject = { ...state.user, ...baseUserObject }; return { user: { ...userObject, isAuthenticated: false }, token: "" }; } default: return state; } }; const UserProvider = _ref2 => { let { children } = _ref2; const [waiting, setWaiting] = (0, _react.useState)(-1); const { updateLoaderStatus } = (0, _react.useContext)(_LoaderContext.default); const [state, dispatch] = (0, _react.useReducer)(reducer, { user: baseUserObject, token: null }); const loadScriptsAndStyles = clientName => { let id = "scriptContainer"; const container = document.getElementById(id); container.innerHTML = ""; const script = document.createElement("script"); script.type = "text/babel"; script.src = "../../styles/".concat(clientName, "/js/common.js"); script.onload = function () {}; script.onerror = function () {}; container.appendChild(script); }; const getProfileAndPrivileges = function (token, hasMultipleBrands, isPrimaryBrand, isSelf, corpBrandCode) { let callbackMethod = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; updateLoaderStatus(true); setWaiting(0); const decode = (0, _jwtDecode.default)(token); (0, _authService.UserProfile)(decode.email).then(userProfile => { if (userProfile === undefined || userProfile === null) { logout(); } else { (0, _authService.UserPrivileges)(userProfile.id).then(userPrivileges => { const set = () => { let role = decode["http://schemas.microsoft.com/ws/2008/06/identity/claims/role"]; let distinctModules = []; for (let c = 0; c < userPrivileges.length; c++) { let privilege = userPrivileges[c]; let moduleName = privilege.moduleName; let moduleDescription = privilege.moduleDescription; const existing = distinctModules.find(x => x.moduleName === moduleName); if (existing === null || existing === undefined) { distinctModules.push({ moduleName: moduleName, moduleDescription: moduleDescription }); } } userProfile.hasMultipleBrands = hasMultipleBrands; userProfile.isPrimaryBrand = isPrimaryBrand; userProfile.isSelf = isSelf; userProfile.corpBrandCode = corpBrandCode; let payload = { distinctModules: distinctModules, role: role, userProfile: userProfile, privileges: userPrivileges, token: token }; dispatch({ type: "login", payload: payload }); loadScriptsAndStyles(userProfile.brandID); if (callbackMethod !== null) { callbackMethod(); } updateLoaderStatus(false); setWaiting(1); }; set(); }, error => { updateLoaderStatus(false); setWaiting(1); }); } }, error => { updateLoaderStatus(false); setWaiting(1); }); }; const replaceUrl = function (dashboard) { let softReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; let entityName = null; switch (dashboard) { case _enums.dashboardNames.GROUPS: { entityName = _enums.entityNames.GROUPMANAGEMENT; break; } case _enums.dashboardNames.ROLES: { entityName = _enums.entityNames.ROLEMANAGEMENT; break; } case _enums.dashboardNames.USERS: { entityName = _enums.entityNames.USERMANAGEMENT; break; } case _enums.dashboardNames.HOURSOPERATION: { entityName = _enums.entityNames.HOURSOPERATION; break; } default: { entityName = ""; break; } } let url = (0, _entityService.getEntityUrl)(entityName); if (softReplace === false) { window.location.replace(url); } else { window.history.replaceState(null, "", url); } }; const removeAll = () => { /*dispatch({ type: "clear", payload: {} });*/ (0, _localstorageService.removeAccessToken)(); /* removeHasMultipleBrands(); removeIsPrimaryBrand(); removeIsSelf();*/ }; const navigate = (0, _reactRouterDom.useNavigate)(); const logout = function () { let redirect = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; removeAll(); //dispatch({ type: "logout", payload: {} }); updateLoaderStatus(false); if (redirect === true) { navigate("/logout"); } }; const getTokenDetails = () => { let token = (0, _tokenService.getStorageToken)(); let isInValid = false; let isExpired = false; let isExpiring = false; if ((0, _tokenService.isGivenTokenInvalid)(token) === true || (0, _tokenService.isGivenTokenEmpty)(token) === true) { isInValid = true; } else { isExpired = (0, _tokenService.isGivenTokenExpired)(token); isExpiring = (0, _tokenService.isGivenTokenExpiring)(token); } return { token, isInValid, isExpired, isExpiring }; }; const getBrandSpecificOptions = () => { let hasMultipleBrands = (0, _localstorageService.getHasMultipleBrands)(); let isPrimaryBrand = (0, _localstorageService.getIsPrimaryBrand)(); let isSelf = (0, _localstorageService.getIsSelf)(); let corpBrandCode = (0, _localstorageService.getCorpBrandCode)(); return { hasMultipleBrands, isPrimaryBrand, isSelf, corpBrandCode }; }; return /*#__PURE__*/(0, _jsxRuntime.jsx)(_userContext.UserContext.Provider, { value: { state, getProfileAndPrivileges, removeAll, logout, waiting, getTokenDetails, getBrandSpecificOptions, replaceUrl }, children: children }); }; exports.UserProvider = UserProvider;