{"version":3,"sources":["components/common/loading.js","helpers/common/fetchApi.js","assets/brandMark.svg","assets/iconUser.svg","helpers/common/userIsAuthenticated.js","helpers/common/logOut.js","components/common/navigation.js","components/common/sessionModal.js","components/common/sessionTimer.js","containers/layout.js","components/common/loginRedirect.js","components/common/privateRoute.js","containers/app.js","helpers/common/createResponseInterceptor.js","index.js"],"names":["Loading","sx","position","width","height","minHeight","zIndex","component","visibility","size","top","left","marginTop","marginLeft","http","axios","create","adapter","cacheAdapterEnhancer","defaults","enabledByDefault","cacheFlag","fetchApi","method","url","data","useCache","accessToken","sessionStorage","getItem","Promise","resolve","reject","headers","Authorization","then","response","status","catch","error","module","exports","userIsAuthenticated","urlParams","URLSearchParams","window","location","search","get","username","refreshToken","referrer","setItem","logOut","hostname","indexOf","assign","clear","Navigation","props","brandMarkLink","links","firstName","lastName","useState","open","setOpen","handleDrawerClose","Box","flex","AppBar","id","square","elevation","background","display","justifyContent","padding","color","alignItems","style","textDecoration","to","bgcolor","fill","stroke","src","BrandMark","alt","Hidden","smDown","length","sort","a","b","order","map","link","key","title","className","href","marginRight","UserIcon","Typography","variant","IconButton","onClick","cursor","borderRadius","fontSize","fontWeight","outline","borderBottom","mdUp","Button","aria-label","aria-controls","edge","clsx","Drawer","anchor","onClose","SessionModal","counter","setCounter","counterStarted","setCounterStarted","useEffect","setTimeout","timeOutFunction","Dialog","maxWidth","fullWidth","onEnter","DialogTitle","disableTypography","tabIndex","DialogContent","p","handleModalAction","SessionTimer","sessionTime","sessionCallback","sessionStarted","setSessionStarted","callback","minutes","sessionTimer","setInterval","refreshSession","clearInterval","document","addEventListener","startSessionTimer","withRouter","loading","setLoading","setFirstName","setLastName","sessionModalOpen","setSessionModalOpen","console","log","api","CONFIG","COMMON_API_URL","fetchUserName","pathname","appName","AUTH_UI_URL","children","LoginRedirect","authPath","loadingComponent","APP_NAME","Grid","container","spacing","item","xs","PrivateRoute","Component","rest","temporary","render","AttritionScore","lazy","App","appSecret","interceptor","interceptors","use","eject","AUTH_API_URL","withCredentials","crossdomain","expiredAccessToken","AppName","AppSecret","expires","createResponseInterceptor","process","REACT_APP_CLIENT_ID","REACT_APP_CLIENT_SECRET","fallback","exact","path","require","theme","createTheme","palette","primary","main","light","secondary","contrastText","typography","fontFamily","join","MuiButtonBase","disableRipple","components","MuiAppBar","styleOverrides","root","flexDirection","colorDefault","backgroundColor","MuiDialogTitle","MuiTab","flexShrink","textTransform","minWidth","PrivateTabIndicator","bottom","MuiTypography","h1","h2","letterSpacing","body2","MuiChip","MuiTable","border","MuiTableCell","sizeSmall","MuiTableHead","MuiTableFooter","borderTop","MuiTablePagination","spacer","ThemeProvider","styles","css","getElementById"],"mappings":"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","file":"static/js/main.5821ef10.chunk.js","sourcesContent":["import React from \"react\";\r\n// Material-UI imports\r\nimport { Box, CircularProgress } from \"@mui/material\";\r\n\r\nexport default function Loading() {\r\n return (\r\n \r\n \r\n Loading...\r\n \r\n \r\n \r\n );\r\n}\r\n","import axios from \"axios\";\r\nimport { cacheAdapterEnhancer } from \"axios-extensions\";\r\n\r\nconst http = axios.create({\r\n adapter: cacheAdapterEnhancer(axios.defaults.adapter, {\r\n enabledByDefault: true,\r\n cacheFlag: \"useCache\"\r\n })\r\n});\r\n\r\nexport default function fetchApi(\r\n method,\r\n url,\r\n data = {},\r\n useCache = true,\r\n accessToken = sessionStorage.getItem(\"accessToken\")\r\n ? `Bearer ${sessionStorage.getItem(\"accessToken\")}`\r\n : null\r\n) {\r\n return new Promise((resolve, reject) => {\r\n const config = {\r\n method: method,\r\n url: url,\r\n data: data,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n Authorization: accessToken\r\n },\r\n useCache: useCache\r\n };\r\n http(config)\r\n .then(response => {\r\n if (response.status === 200) {\r\n resolve(response);\r\n } else {\r\n reject(response);\r\n }\r\n })\r\n .catch(error => {\r\n reject(error);\r\n });\r\n });\r\n}\r\n","module.exports = __webpack_public_path__ + \"static/media/brandMark.a9dd08a0.svg\";","module.exports = __webpack_public_path__ + \"static/media/iconUser.a52a755f.svg\";","export function userIsAuthenticated() {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const accessToken =\r\n urlParams.get(\"accesstoken\") || urlParams.get(\"accessToken\");\r\n const username = urlParams.get(\"username\") || urlParams.get(\"userName\");\r\n const refreshToken =\r\n urlParams.get(\"refreshtoken\") || urlParams.get(\"refreshToken\");\r\n const referrer = urlParams.get(\"referrer\");\r\n if (accessToken && refreshToken && username) {\r\n sessionStorage.setItem(\"accessToken\", accessToken);\r\n sessionStorage.setItem(\"userName\", username);\r\n sessionStorage.setItem(\"refreshToken\", refreshToken);\r\n sessionStorage.setItem(\"referrer\", referrer);\r\n return true;\r\n }\r\n if (\r\n sessionStorage.getItem(\"accessToken\") &&\r\n sessionStorage.getItem(\"userName\") &&\r\n sessionStorage.getItem(\"refreshToken\")\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n","export function logOut() {\r\n const hostname = window.location.hostname;\r\n\r\n if (sessionStorage.getItem(\"referrer\") === \"companyWebsite\") {\r\n // Use the Dev in dev & local environments\r\n if (\r\n hostname.indexOf(\"dev\") !== -1 ||\r\n hostname.indexOf(\"localhost\") !== -1\r\n ) {\r\n window.location.assign(\"https://dev.company.ghllc.com/HomeTab.aspx\");\r\n }\r\n // QA API in QA environment\r\n else if (hostname.indexOf(\"qa\") !== -1) {\r\n window.location.assign(\"https://qa.company.ghllc.com/HomeTab.aspx\");\r\n }\r\n //Test environment\r\n else if (hostname.indexOf(\"test\") !== -1) {\r\n window.location.assign(\"https://test.company.ghllc.com/HomeTab.aspx\");\r\n }\r\n // Prod\r\n else {\r\n window.location.assign(\"https://company.ghllc.com/HomeTab.aspx\");\r\n }\r\n } else {\r\n sessionStorage.clear();\r\n window.location.assign(\"/\");\r\n }\r\n}\r\n","import React, { Fragment, useState } from \"react\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\n// Material-UI imports\r\nimport {\r\n Typography,\r\n Button,\r\n AppBar,\r\n Hidden,\r\n Drawer,\r\n Box,\r\n IconButton\r\n} from \"@mui/material\";\r\nimport ChevronLeftOutlinedIcon from \"@mui/icons-material/ChevronLeftOutlined\";\r\nimport MenuOutlinedIcon from \"@mui/icons-material/MenuOutlined\";\r\nimport ExitToAppIcon from \"@mui/icons-material/ExitToApp\";\r\n// Custom imports\r\nimport { logOut } from \"../../helpers/common/logOut\";\r\nimport BrandMark from \"../../assets/brandMark.svg\";\r\nimport UserIcon from \"../../assets/iconUser.svg\";\r\n\r\nexport default function Navigation(props) {\r\n const { brandMarkLink, links, firstName, lastName } = props;\r\n\r\n const [open, setOpen] = useState(false);\r\n\r\n const handleDrawerClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const handleDrawer = () => {\r\n if (open) {\r\n setOpen(false);\r\n } else {\r\n setOpen(true);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \"Global\r\n \r\n \r\n \r\n \r\n {links.length > 0 &&\r\n links\r\n .sort((a, b) => {\r\n return a.order > b.order ? 1 : -1;\r\n })\r\n .map(link => {\r\n return (\r\n \r\n \r\n {link.title}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {sessionStorage.getItem(\"firstName\") || firstName}{\" \"}\r\n {sessionStorage.getItem(\"lastName\") || lastName}\r\n \r\n {sessionStorage.getItem(\"referrer\") !== \"companyWebsite\" && (\r\n \r\n {\" \"}\r\n {\" \"}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {links.length > 0 &&\r\n links\r\n .sort((a, b) => (a.order > b.order ? 1 : -1))\r\n .map(link => {\r\n return (\r\n
\r\n \r\n {link.title}\r\n \r\n
\r\n );\r\n })}\r\n {sessionStorage.getItem(\"referrer\") !== \"companyWebsite\" && (\r\n \r\n {\" \"}\r\n {\" \"}\r\n \r\n )}\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\n// Material-UI imports\r\nimport {\r\n Box,\r\n Dialog,\r\n DialogContent,\r\n DialogTitle,\r\n Typography,\r\n Button\r\n} from \"@mui/material\";\r\n//import { useTheme } from \"@mui/styles\";\r\n\r\nexport default function SessionModal(props) {\r\n //const classes = useStyles();\r\n //const theme = useTheme();\r\n //const fullScreen = useMediaQuery(theme.breakpoints.down(\"xs\"));\r\n const [counter, setCounter] = useState(props.counter);\r\n const [counterStarted, setCounterStarted] = useState(false);\r\n\r\n useEffect(() => {\r\n if (counterStarted && counter > 0) {\r\n setTimeout(() => setCounter(counter - 1), 1000);\r\n }\r\n }, [counter, counterStarted]);\r\n\r\n useEffect(() => {\r\n if(props.open) setCounterStarted(true);\r\n if (counter < 1) {\r\n props.timeOutFunction();\r\n }\r\n }, [counter, props]);\r\n\r\n return (\r\n {\r\n setCounter(props.counter);\r\n setCounterStarted(true);\r\n }}\r\n >\r\n \r\n \r\n Session Timeout\r\n \r\n \r\n \r\n \r\n \r\n Your session will expire in {counter} seconds\r\n \r\n \r\n {\r\n setCounterStarted(false);\r\n props.handleModalAction();\r\n }}\r\n >\r\n Continue Working\r\n \r\n \r\n \r\n );\r\n}\r\n\r\n/*const useStyles = makeStyles(theme => ({\r\n closeIcon: {\r\n cursor: \"pointer\",\r\n position: \"absolute\",\r\n top: theme.spacing(2.5),\r\n right: theme.spacing(2),\r\n \"&:hover\": {\r\n color: theme.palette.primary.main\r\n },\r\n \"&:focus\": {\r\n color: theme.palette.primary.main\r\n },\r\n margin: theme.spacing(-1.5, 0)\r\n },\r\n dialogContent: {\r\n display: \"flex\"\r\n },\r\n modalActionButton: {\r\n textTransform: \"uppercase\",\r\n marginLeft: theme.spacing(2),\r\n float: \"right\"\r\n }\r\n}));*/\r\n","import React, { useState, useEffect } from \"react\";\r\n\r\nexport default function SessionTimer(props) {\r\n const { sessionTime, sessionCallback } = props;\r\n const [sessionStarted, setSessionStarted] = useState(false);\r\n\r\n const startSessionTimer = (callback, minutes) => {\r\n // Start a timer\r\n let sessionTimer = window.setInterval(callback, minutes * 60 * 1000);\r\n // Function used to refresh the timer\r\n const refreshSession = function () {\r\n clearInterval(sessionTimer);\r\n sessionTimer = window.setInterval(callback, minutes * 60 * 1000);\r\n };\r\n // If user clicks something or presses a key reset the timer\r\n document.addEventListener(\"click\", refreshSession);\r\n document.addEventListener(\"keydown\", refreshSession);\r\n document.addEventListener(\"mousemove\", refreshSession);\r\n document.addEventListener(\"scroll\", refreshSession);\r\n };\r\n\r\n useEffect(() => {\r\n if (!sessionStarted) {\r\n startSessionTimer(() => {\r\n sessionCallback();\r\n }, sessionTime);\r\n setSessionStarted(true);\r\n }\r\n }, [sessionCallback, sessionStarted, sessionTime]);\r\n\r\n return
;\r\n}\r\n","import React, { Fragment, useState, useEffect } from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n// Material-UI imports\r\nimport { Box } from \"@mui/material\";\r\n// Custom imports\r\nimport { userIsAuthenticated } from \"../helpers/common/userIsAuthenticated\";\r\nimport { logOut } from \"../helpers/common/logOut\";\r\nimport fetchApi from \"../helpers/common/fetchApi\";\r\nimport Navigation from \"../components/common/navigation\";\r\nimport SessionModal from \"../components/common/sessionModal\";\r\nimport SessionTimer from \"../components/common/sessionTimer\";\r\n\r\nconst Layout = props => {\r\n //const classes = useStyles();\r\n const [loading, setLoading] = useState(true);\r\n const [firstName, setFirstName] = useState(\r\n sessionStorage.getItem(\"firstName\")\r\n );\r\n const [lastName, setLastName] = useState(sessionStorage.getItem(\"lastName\"));\r\n const [sessionModalOpen, setSessionModalOpen] = useState(false);\r\n\r\n const handleOpenSessionModal = () => {\r\n setSessionModalOpen(true);\r\n };\r\n\r\n const handleCloseSessionModal = () => {\r\n setSessionModalOpen(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (userIsAuthenticated()) {\r\n const fetchUserName = () => {\r\n console.log(\"fetching user\");\r\n const api = `\r\n ${window.CONFIG.COMMON_API_URL}/users/user`;\r\n fetchApi(\"GET\", api).then(response => {\r\n if (response.status === 200) {\r\n sessionStorage.setItem(\"firstName\", response.data.firstName);\r\n sessionStorage.setItem(\"lastName\", response.data.lastName);\r\n setFirstName(sessionStorage.firstName);\r\n setLastName(sessionStorage.lastName);\r\n setLoading(false);\r\n } else {\r\n setFirstName(\"\");\r\n setLastName(\"\");\r\n }\r\n });\r\n };\r\n if (\r\n !sessionStorage.getItem(\"firstName\") &&\r\n !sessionStorage.getItem(\"lastName\")\r\n ) {\r\n fetchUserName();\r\n } else {\r\n setLoading(false);\r\n }\r\n }\r\n }, [firstName, lastName]);\r\n\r\n if (!loading && userIsAuthenticated() && window.location.pathname !== \"/\") {\r\n return (\r\n <>\r\n \r\n \r\n {\r\n logOut(`${window.CONFIG.AUTH_UI_URL}/?referrer=UI.Attrition`);\r\n }}\r\n handleModalAction={handleCloseSessionModal}\r\n />\r\n {props.children}\r\n \r\n );\r\n } else {\r\n return {props.children};\r\n }\r\n};\r\n\r\nexport default withRouter(Layout);\r\n","import React, { useEffect } from \"react\";\r\nimport { Grid } from \"@mui/material\";\r\n// Custom imports\r\nimport { userIsAuthenticated } from \"../../helpers/common/userIsAuthenticated\";\r\n\r\nexport default function LoginRedirect(props) {\r\n const { authPath, loadingComponent: Loading } = props;\r\n\r\n useEffect(() => {\r\n if (userIsAuthenticated()) {\r\n window.location.assign(authPath);\r\n } else {\r\n window.location.assign(\r\n `${window.CONFIG.AUTH_UI_URL}/?referrer=${window.CONFIG.APP_NAME}`\r\n );\r\n }\r\n }, [authPath]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { Route } from \"react-router-dom\";\r\n// Custom imports\r\nimport { userIsAuthenticated } from \"../../helpers/common/userIsAuthenticated\";\r\nimport Loading from \"./loading\";\r\nimport LoginRedirect from \"./loginRedirect\";\r\n\r\nexport default function PrivateRoute(props) {\r\n const { component: Component, temporary: Temporary, ...rest } = props;\r\n\r\n return (\r\n \r\n userIsAuthenticated() ? (\r\n \r\n ) : (\r\n }\r\n />\r\n )\r\n }\r\n />\r\n );\r\n}\r\n","import React, { Suspense, lazy } from \"react\";\r\nimport { BrowserRouter as Router, Switch, Route } from \"react-router-dom\";\r\n// Custom imports\r\nimport Layout from \"./layout\";\r\nimport Loading from \"../components/common/loading\";\r\nimport LoginRedirect from \"../components/common/loginRedirect\";\r\nimport PrivateRoute from \"../components/common/privateRoute\";\r\n\r\nimport { createResponseInterceptor } from \"../helpers/common/createResponseInterceptor\";\r\n\r\nconst AttritionScore = lazy(() => import(\"./attritionScore\"));\r\n\r\nconst App = () => {\r\n createResponseInterceptor(\r\n process.env.REACT_APP_CLIENT_ID,\r\n process.env.REACT_APP_CLIENT_SECRET\r\n );\r\n return (\r\n }>\r\n \r\n \r\n \r\n }\r\n />\r\n (\r\n }\r\n />\r\n )}\r\n />\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n","import axios from \"axios\";\r\n\r\nexport function createResponseInterceptor(appName, appSecret) {\r\n const interceptor = axios.interceptors.response.use(\r\n // If the request succeeds, return the original response\r\n response => {\r\n return response;\r\n },\r\n // If there is an error, use the Interceptor to handle the error.\r\n error => {\r\n const status = error.response ? error.response.status : null;\r\n // Reject the Promise if the error is not a 401 error.\r\n if (status !== 401) {\r\n return Promise.reject(error);\r\n // When the response code is a 401, try to refresh the Bearer token.\r\n } else {\r\n // Eject the interceptor so it doesn't loop in case token refresh causes the 401 response\r\n axios.interceptors.response.eject(interceptor);\r\n // Post the refresh token to the API in order to receive a new Bearer token.\r\n const api = `${window.CONFIG.AUTH_API_URL}/auth/token`;\r\n return axios({\r\n method: \"POST\",\r\n url: api,\r\n withCredentials: true,\r\n crossdomain: true,\r\n data: {\r\n refreshToken: sessionStorage.getItem(\"refreshToken\"),\r\n expiredAccessToken: sessionStorage.getItem(\"accessToken\"),\r\n AppName: appName,\r\n AppSecret: appSecret\r\n }\r\n })\r\n .then(response => {\r\n // Save the new tokens and resolve the original Promise as true\r\n const { accessToken, expires, refreshToken } = response.data;\r\n sessionStorage.setItem(\"accessToken\", accessToken);\r\n sessionStorage.setItem(\"refreshToken\", refreshToken);\r\n sessionStorage.setItem(\"expires\", expires);\r\n return Promise.resolve(true);\r\n })\r\n .catch(error => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n }\r\n );\r\n}\r\n","import \"react-app-polyfill/ie9\";\r\nimport \"react-app-polyfill/stable\";\r\nimport React from \"react\";\r\nimport { render } from \"react-dom\";\r\nimport {\r\n createTheme,\r\n ThemeProvider,\r\n StyledEngineProvider\r\n} from \"@mui/material/styles\";\r\nimport { CssBaseline } from \"@mui/material\";\r\nimport App from \"./containers/app\";\r\nimport \"./styles.css\";\r\nimport { Global, css } from \"@emotion/react\";\r\n\r\nrequire(\"typeface-poppins\");\r\n\r\nconst theme = createTheme({\r\n palette: {\r\n primary: {\r\n main: \"#1373e6\",\r\n light: \"#fff\"\r\n },\r\n secondary: {\r\n main: \"#fff\",\r\n contrastText: \"#1373e6\"\r\n }\r\n },\r\n typography: {\r\n fontFamily: [\r\n \"Poppins\",\r\n \"-apple-system\",\r\n \"BlinkMacSystemFont\",\r\n '\"Segoe UI\"',\r\n \"Roboto\",\r\n '\"Helvetica Neue\"',\r\n \"Arial\",\r\n \"sans-serif\",\r\n '\"Apple Color Emoji\"',\r\n '\"Segoe UI Emoji\"',\r\n '\"Segoe UI Symbol\"'\r\n ].join(\",\")\r\n },\r\n props: {\r\n MuiButtonBase: {\r\n disableRipple: true\r\n }\r\n },\r\n components: {\r\n MuiAppBar: {\r\n styleOverrides: {\r\n root: {\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n padding: \"0 16px\",\r\n height: 60\r\n },\r\n colorDefault: {\r\n backgroundColor: \"#ffffff\"\r\n }\r\n }\r\n },\r\n MuiDialogTitle: {\r\n styleOverrides: {\r\n root: {\r\n padding: \"16px 40px\",\r\n borderBottom: \"1px solid #eee\"\r\n }\r\n }\r\n },\r\n MuiTab: {\r\n styleOverrides: {\r\n root: {\r\n flexShrink: 1,\r\n textTransform: \"none\",\r\n \"@media (min-width: 600px)\": {\r\n minWidth: \"80px\"\r\n }\r\n }\r\n }\r\n },\r\n PrivateTabIndicator: {\r\n styleOverrides: {\r\n root: {\r\n bottom: \"10px\",\r\n height: \"3px\"\r\n }\r\n }\r\n },\r\n MuiTypography: {\r\n styleOverrides: {\r\n h1: {\r\n fontSize: \"1.15rem\",\r\n fontWeight: \"600\",\r\n color: \"#888\"\r\n },\r\n h2: {\r\n fontSize: \"1rem\",\r\n fontWeight: \"600\",\r\n letterSpacing: \"-.03rem\"\r\n },\r\n body2: {\r\n fontSize: \"0.75rem\"\r\n }\r\n }\r\n },\r\n MuiChip: {\r\n styleOverrides: {\r\n root: {\r\n height: \"22px\"\r\n }\r\n }\r\n },\r\n MuiTable: {\r\n styleOverrides: {\r\n root: {\r\n border: \"1px solid #ddd\"\r\n }\r\n }\r\n },\r\n MuiTableCell: {\r\n styleOverrides: {\r\n root: {\r\n borderBottom: \"none\"\r\n },\r\n sizeSmall: {\r\n padding: \"4px 8px\"\r\n }\r\n }\r\n },\r\n MuiTableHead: {\r\n styleOverrides: {\r\n root: {\r\n borderBottom: \"1px solid #ddd\"\r\n }\r\n }\r\n },\r\n MuiTableFooter: {\r\n styleOverrides: {\r\n root: {\r\n borderTop: \"1px solid #ddd\"\r\n }\r\n }\r\n },\r\n MuiTablePagination: {\r\n styleOverrides: {\r\n spacer: {\r\n display: \"none\"\r\n }\r\n }\r\n }\r\n }\r\n});\r\nrender(\r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n"],"sourceRoot":""}