{"version":3,"sources":["logo.svg","utils/apiClient.js","utils/authClient.js","context/AuthContext.js","context/UserContext.js","components/Alert.js","utils/portalPasswordsClient.js","components/SignIn/ForgottenPasswordForm.js","components/SignIn/useRecaptcha.js","components/SignIn/LoginForm.js","components/SignIn/SignIn.js","utils/loginClient.js","components/NavBar.js","components/PageNotFound.js","utils/microserviceInfoClient.js","utils/gridTranslateClient.js","components/Integration/Integration.js","components/Home/Home.js","utils/contentClient.js","utils/contactsConfigurationClient.js","utils/fileResourceTokenClient.js","components/FullPageProgress/FullPageProgress.js","components/MyAccount/MyAccount.js","utils/userPropertiesClient.js","utils/publicInfoClient.js","components/Communication/Public.js","components/Communication/Private.js","components/Communication/Loader.js","components/Communication/Demand.js","components/Communication/index.js","components/PublicLink/PublicLink.js","utils/portalFilesClient.js","components/File/File.js","components/OnDemand/OnDemand.js","components/SignIn/ResetPasswordForm.js","data/portalFiles.js","data/extensions.js","data/index.js","theme.js","components/ErrorPage/ErrorPage.js","App.js","serviceWorker.js","context/index.js","index.js"],"names":["module","exports","__webpack_require__","p","parseJSON","response","Promise","resolve","text","then","JSON","parse","json","status","ok","client","endpoint","_ref","arguments","length","undefined","body","customConfig","Object","objectWithoutProperties","token","window","localStorage","getItem","headers","Authorization","concat","btoa","FormData","url","options","config","objectSpread","method","credentials","stringify","process","reject","fetch","message","Message","catch","error","localStorageKey","handleUserError","header","ecrForceRedirect","location","href","getUser","logout","logoutRedirect","removeItem","AuthContext","React","createContext","AuthProvider","props","_React$useState","useState","_React$useState2","slicedToArray","firstAttemptFinished","setFirstAttemptFinished","_useAsync","useAsync","promiseFn","authClient","data","isRejected","isPending","isSettled","reload","useLayoutEffect","react_default","a","createElement","newUserName","URLSearchParams","search","get","finalData","LoginName","startsWith","DisplayName","Provider","assign","value","login","form","environment","username","password","Utils","request","useAuth","context","useContext","Error","UserContext","UserProvider","user","useUser","useStyles","makeStyles","theme","errorWrapper","backgroundColor","common","Alert","Wrapper","style","border","padding","children","_ref$align","align","classes","ThemeProvider","outerTheme","createMuiTheme","palette","main","textColor","colorTheme","className","Typography","variant","color","resetPasswordRequest","key","Password","Key","getPasswordPolicies","ForgottenPasswordForm","onClose","_useRecaptcha","_useState","_useState2","recaptcha","setRecaptcha","_useState3","_useState4","setError","useEffect","useRecaptcha","recaptchaValue","setRecaptchaValue","sent","email","state","setState","Fragment","lib","Dialog","hideCancelButton","submitAlign","submitLabel","onSuccess","windowProps","width","renderContent","onCancel","submittingLabel","onValidate","errors","Enabled","Environment","LoginUrl","origin","RecaptchaResponse","sendResetPasswordEmail","Fields","Text","required","name","label","esm","onChange","e","sitekey","SiteKey","LoginFormTheme","overrides","MuiOutlinedInput","input","MuiInputLabel","boxContainer","paddingLeft","paddingRight","container","margin","alertInfo","textAlign","button","textTransform","minWidth","borderRadius","withAuth","match","history","setAuth","setEnvironment","setUsername","_useState5","_useState6","setPassword","_useState7","_useState8","requestFailed","setRequestFailed","_useState9","_useState10","passwordDialog","setPasswordDialog","_useState11","_useState12","urlEnvironment","setUrlEnvironment","receivedEnvironment","decodeURIComponent","params","receivedUserName","handleSubmit","_ref2","asyncToGenerator","regenerator_default","mark","_callee","encodedEnvironment","wrap","_context","prev","next","preventDefault","encodeURIComponent","pathname","split","replace","push","t0","stop","_x","apply","this","react_document_title_default","title","Box","onSubmit","Grid","spacing","direction","item","TextField","id","fullWidth","size","target","type","autoComplete","Link","onClick","marginTop","justify","alignItems","Button","components_Alert","SignIn_ForgottenPasswordForm","media","marginLeft","SignIn","hasSSO","setHasSSO","searchParams","getSearchParams","_ref$userName","userName","loginClient","loginInfo","Page","Common","MuiPaper","root","MuiButton","outlined","contained","MuiIcon","fontSize","MuiAvatar","height","MuiCardContent","MuiCardHeader","MuiCard","MuiGrid","MuiChip","justifyContent","MuiListItemText","MuiMenuItem","MuiDivider","MuiFormControl","shrink","MuiTextField","minHeight","xs","sm","md","lg","Card","CardHeader","titleTypographyProps","paddingTop","CardContent","SignIn_LoginForm","toolbar","NavBar","maxHeight","boxShadow","logo","verticalAlign","userBox","&:hover","hoverBackground","&:focus, &:active","activeBackground","userBoxText","useHistory","displayName","drawerEntries","to","Toolbar","disableGutters","EnvironmentLogoUrl","src","alt","noWrap","UserComponent","userDisplayName","linkComponent","PageNotFound","components_NavBar","NotFound","hideNavBar","cache","errorCache","getData","appId","gridData","gridTranslateClient","IntegrationGrid","dataType","idKeyProp","IdSrc","dataProps","viewProps","hideModeSwitcher","styles","elevation","columns","Columns","map","column","Id","Name","formatter","_ref3","Integration_CellFormatter","serverSort","Sortable","CellFormatter","_ref4","getDotProp","Src","Component","_ref5","Formatter","FormatterType","ToSrc","openInNewTab","component","urlObj","hash","searchIdx","indexOf","hashIdx","substring","decomposeRelativeURL","from","RouterLink","formatterProps","FormatterProps","forEach","prop","Value","Integration","extensionType","sections","section","gutterBottom","Integration_IntegrationGrid","FrameBase","Home","customPins","setCustomPins","openSnackbar","setOpenSnackbar","userEnvironment","encodedUserEnvironment","toLowerCase","components_PageNotFound","activeTab","pinId","redirect","isMounted","microservices","pins","microservice","icon","iconURL","err","getPrettyError","customActiveTab","find","pin","documentTitle","toUpperCase","handleSnackbarClose","event","reason","sidebar","toConsumableArray","components_Integration_Integration","Snackbar","anchorOrigin","vertical","horizontal","open","autoHideDuration","action","getContactsForm","contactConfig","workspace","Form","Workspace","filePath","FilePath","res","DOMParser","parseFromString","downloadFile","path","publicAccessToken","resourceToken","getResourceToken","loadingIndicator","position","top","left","FullPageProgress","CircularProgress","clearDivider","opacity","changePassBtn","customTheme","&:focus","&.Mui-disabled","MyAccount","contactProperties","setContactProperties","passwordPolicies","setPasswordPolicies","policies","getPropertyValue","propertyName","contactProp","Contact","Properties","el","Type","moment","format","xmlDoc","categorizedProperties","Array","getElementsByTagName","filter","page","attributes","getNamedItem","pageName","categoryObj","childNodes","i","propertyLabel","propertyValue","categoryName","properties","loadData","Divider","Container","maxWidth","category","property","disabled","passwordConfirmation","newPassword","confirmPassword","errorMessage","firstPassword","test","currentPassword","oldPassword","components_FullPageProgress_FullPageProgress","publicId","getTagValue","file","tags","Tags","tag","t","Public","parameters","showToolbar","job","setJob","AccessToken","communicationId","File","jobId","contactId","contactIdParam","getContactId","isInIFrame","self","runProps","projectId","Run","JobDetails","Frame","onJobStarted","jobSummary","parent","postMessage","_unused","notifyOnSubmit","disableJobSaving","disableRepositoryAccess","Private","communicationName","Email","AccountId","UAID","JobName","projectName","Center","Loader","Loader_Center","defaultProps","DEFAULT_STATE","loading","Communication","Demand","communication","accessToken","setJobState","jobParameters","communicationRunOptions","contentType","JobParameters","Sync","communicationsOptions","comm","Communication_Loader","unsupportedFiles","getPublicInfo","publicInfoClient","fileName","auth","snackbarMessage","setSnackbarMessage","ready","setReady","parseUrl","keys","parseSearchParams","query","getExtension","extensionIndex","lastIndexOf","isCommunication","ToolBar","leftChildren","titleTag","getToolbarTitle","centerChildren","endsWith","startIcon","WorkspaceName","download","closeUrl","extension","includes","isPreviewable","right","bottom","getFileFromCommunicationName","hasAccess","accessResponse","setAccessResponse","setFile","isDownloadable","setIsDownloadable","hashParts","handleRequestError","fileTitle","urlTitle","getFileTitle","handleRequestSuccess","closeFile","previousLocation","fileCategory","categoryTag","getCategory","getFileFromJobId","getFileFromCommunicationId","getFileFromPath","OnDemand","setAccessToken","setFileCategory","asyncPromise","deferFn","run","ResetPasswordForm","resetToken","setPasswordConfirmation","requestSucceeded","setRequestSucceeded","validationMessage","validatePassword","abrupt","mt","getLinkLocation","removeUnnecessaryExtension","titleColumn","stringifySearchParams","descriptionColumn","lastModifiedColumn","LastModifiedUTC","portalFiles","forms","itemUrl","dataKey","jobs","JobStatus","Status","join","analytics","linkText","documents","_ref6","ContactId","SynchronizationId","custom","onBeforeRequest","_config$dataProps","_ref7","EXTENSIONS","src_data","extensions","deterministicClasses","ErrorPage","createBrowserHistory","App","shouldRender","setShouldRender","resetPasswordToken","sameUser","searchQuery","parameter","paramPrefix","splice","removeSearchParameter","serverURL","head","document","textContent","append","protocol","hostname","port","setItem","react_router","routes","RedirectComponent","Redirect","dataTypes","disableAuthRedirect","PublicLink","exact","render","SignIn_ResetPasswordForm","Boolean","AppProviders","ReactDOM","src_context","src_App","getElementById","navigator","serviceWorker","registration","unregister"],"mappings":"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","file":"static/js/main.45d8740b.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo.25bf045c.svg\";","function client(endpoint, { body, ...customConfig } = {}) {\r\n const token = window.localStorage.getItem('ECR.EOS.AccessToken');\r\n const headers = {};\r\n if (token) {\r\n headers.Authorization = `Basic ${btoa(token)}`;\r\n }\r\n\r\n // fetch can auto-fill the FormData content type\r\n if (!(body instanceof FormData)) {\r\n headers['content-type'] = 'application/json';\r\n }\r\n\r\n const config = {\r\n method: body ? 'POST' : 'GET',\r\n ...customConfig,\r\n credentials: 'include',\r\n headers: {\r\n ...headers,\r\n ...customConfig.headers,\r\n },\r\n };\r\n\r\n if (body) {\r\n config.body = body instanceof FormData ? body : JSON.stringify(body);\r\n }\r\n\r\n return request(\r\n `${process.env.REACT_APP_WEBSITE_URL}/backend/${endpoint}`,\r\n config\r\n );\r\n}\r\n\r\n/**\r\n * Parses the JSON returned by a network request\r\n * @param {object} response A response from a network request\r\n * @return {object} The parsed JSON, status from the response\r\n */\r\nfunction parseJSON(response) {\r\n return new Promise((resolve) =>\r\n response\r\n .text()\r\n .then((text) => {\r\n return text ? JSON.parse(text) : {};\r\n })\r\n .then((json) => {\r\n resolve({\r\n status: response.status,\r\n ok: response.ok,\r\n json,\r\n });\r\n })\r\n );\r\n}\r\n\r\n/**\r\n * Requests a URL, returning a promise\r\n * @param {string} url The URL we want to request\r\n * @param {object} [options] The options we want to pass to \"fetch\"\r\n * @return {Promise} The request promise\r\n */\r\nfunction request(url, options) {\r\n return new Promise((resolve, reject) => {\r\n fetch(url, options)\r\n .then(parseJSON)\r\n .then((response) => {\r\n if (response.ok) {\r\n return resolve(response.json);\r\n }\r\n // extract the error from the server's json\r\n return reject({\r\n message: response.json.Message || response.json.message || response.json,\r\n });\r\n })\r\n .catch((error) =>\r\n reject({\r\n message:\r\n 'The server could not be reached. Please contact customer support.',\r\n })\r\n );\r\n });\r\n}\r\n\r\nexport default client;\r\n","import client from './apiClient';\r\nimport { Utils } from 'ecrion-components';\r\n\r\nconst localStorageKey = 'ECR.EOS.AccessToken';\r\n\r\nconst handleUserError = (error) => {\r\n if (!error || !error.response || !error.response.header) throw error;\r\n\r\n const ecrForceRedirect = error.response.header['ecr_force_redirect'];\r\n if (!ecrForceRedirect) throw error;\r\n\r\n window.location.href = ecrForceRedirect;\r\n};\r\n\r\nfunction getUser() {\r\n return client('portaluserproperties').catch((error) => {\r\n logout();\r\n return Promise.reject(error);\r\n });\r\n}\r\n\r\nfunction login({ environment, username, password }) {\r\n const headers = {\r\n Authorization: 'Basic ' + btoa(`${environment}:${username}:${password}`),\r\n };\r\n\r\n return Utils.request({\r\n method: 'GET',\r\n url: `${process.env.REACT_APP_WEBSITE_URL}/backend/portalToken`,\r\n headers: headers,\r\n }).then(() => {}, handleUserError);\r\n}\r\n\r\nfunction logout() {\r\n return client(`portalToken`, {\r\n method: 'DELETE',\r\n }).then(\r\n (logoutRedirect) => {\r\n window.localStorage.removeItem(localStorageKey);\r\n return logoutRedirect;\r\n },\r\n () => {\r\n window.localStorage.removeItem(localStorageKey);\r\n }\r\n );\r\n}\r\n\r\nexport { login, logout, getUser };\r\n","// @ts-check\r\nimport React from 'react';\r\nimport * as authClient from '../utils/authClient';\r\nimport { useAsync } from 'react-async';\r\n\r\nconst AuthContext = React.createContext(null);\r\n\r\nfunction AuthProvider(props) {\r\n const [firstAttemptFinished, setFirstAttemptFinished] = React.useState(false);\r\n\r\n const { data, error, isRejected, isPending, isSettled, reload } = useAsync({\r\n promiseFn: authClient.getUser,\r\n });\r\n\r\n React.useLayoutEffect(() => {\r\n if (isSettled) {\r\n setFirstAttemptFinished(true);\r\n }\r\n }, [isSettled]);\r\n\r\n if (!firstAttemptFinished) {\r\n if (isPending) {\r\n return null; // don't show anything while validating the current token\r\n }\r\n if (isRejected) {\r\n return (\r\n
\r\n

A problem has occurred. Try refreshing the app.

\r\n
{error.message}
\r\n
\r\n );\r\n }\r\n }\r\n\r\n const login = (form) => authClient.login(form).then(reload);\r\n const logout = () =>\r\n authClient.logout().then((logoutRedirect) => {\r\n if (logoutRedirect) {\r\n window.location.href =\r\n process.env.REACT_APP_WEBSITE_URL + logoutRedirect;\r\n } else {\r\n reload();\r\n }\r\n });\r\n\r\n const newUserName = new URLSearchParams(window.location.search).get(\r\n 'userName'\r\n );\r\n\r\n let finalData = data || null;\r\n if (data && (data.LoginName.startsWith('PublicLogin') || !data.DisplayName))\r\n finalData = null;\r\n else if (newUserName && data && newUserName !== data.LoginName)\r\n finalData = null;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction useAuth() {\r\n const context = React.useContext(AuthContext);\r\n if (context === undefined)\r\n throw new Error('useAuth must be used within a AuthProvider');\r\n\r\n return context;\r\n}\r\n\r\nexport { AuthProvider, useAuth };\r\n","// @ts-check\r\nimport React from 'react';\r\nimport { useAuth } from './AuthContext';\r\n\r\nconst UserContext = React.createContext(null);\r\n\r\nfunction UserProvider(props) {\r\n const { data: user } = useAuth();\r\n return ;\r\n}\r\n\r\nfunction useUser() {\r\n const context = React.useContext(UserContext);\r\n if (context === undefined) {\r\n throw new Error(`useUser must be used within a UserProvider`);\r\n }\r\n return context;\r\n}\r\n\r\nexport { UserProvider, useUser };\r\n","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport {\r\n makeStyles,\r\n createMuiTheme,\r\n ThemeProvider,\r\n} from '@material-ui/core/styles';\r\n\r\nconst colorTheme = (outerTheme) =>\r\n createMuiTheme({\r\n palette: {\r\n error: { main: outerTheme.common.Alert.style.textColor },\r\n },\r\n });\r\n\r\nconst useStyles = makeStyles((theme) => {\r\n return {\r\n errorWrapper: {\r\n backgroundColor: theme.common.Alert.Wrapper.style.backgroundColor,\r\n border: theme.common.Alert.Wrapper.style.border,\r\n padding: theme.common.Alert.Wrapper.style.padding,\r\n },\r\n };\r\n});\r\n\r\nconst Alert = ({ children, align = 'left' }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n ({ ...outerTheme, ...colorTheme(outerTheme) })}\r\n >\r\n
\r\n \r\n {children}\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default Alert;\r\n","import client from './apiClient';\r\n\r\nfunction sendResetPasswordEmail(username, environment, recaptcha) {\r\n return client('portalPasswords', {\r\n body: {\r\n LoginName: username,\r\n Environment: environment,\r\n LoginUrl: `${window.location.origin}`,\r\n RecaptchaResponse: recaptcha,\r\n },\r\n });\r\n}\r\n\r\nfunction resetPasswordRequest(password, key) {\r\n return client('portalpasswords', {\r\n body: {\r\n Password: password,\r\n Key: key,\r\n },\r\n method: 'PUT',\r\n });\r\n}\r\n\r\nfunction getPasswordPolicies() {\r\n return client('domainpasswordpolicy');\r\n}\r\n\r\nexport { sendResetPasswordEmail, resetPasswordRequest, getPasswordPolicies };\r\n","import React, { useState } from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ReCAPTCHA from 'react-google-recaptcha';\r\nimport { Form, LocalTheme } from 'ecrion-components';\r\nimport { sendResetPasswordEmail } from '../../utils/portalPasswordsClient';\r\nimport useRecaptcha from './useRecaptcha';\r\n\r\nconst customTheme = {\r\n overrides:{\r\n MuiButton: {\r\n root: {\r\n backgroundColor: '#FF6633',\r\n color: 'white',\r\n '&:focus': {\r\n backgroundColor: '#FF6633',\r\n color: 'white'\r\n },\r\n '&:hover':{\r\n backgroundColor: '#FF9933',\r\n color: 'white'\r\n },\r\n '&.Mui-disabled':{\r\n color: 'white !important'\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst ForgottenPasswordForm = ({ onClose, environment }) => {\r\n const { recaptcha, error } = useRecaptcha();\r\n const [recaptchaValue, setRecaptchaValue] = useState(null);\r\n const [state, setState] = useState({sent: false, email: null});\r\n\r\n const onChange = (e) => {\r\n setRecaptchaValue(e);\r\n };\r\n\r\n return (\r\n <> \r\n {!state.sent ? ( \r\n {\r\n const errors = {};\r\n if (recaptcha && recaptcha.Enabled && !recaptchaValue) {\r\n errors.recaptcha = 'Please verify that you are a Human.';\r\n }\r\n return errors;\r\n }}\r\n onSuccess={(data) => {\r\n return sendResetPasswordEmail(\r\n data.username,\r\n environment ? environment : data.environment,\r\n recaptchaValue\r\n ).then(() => {\r\n setState({sent: true, email: data.username});\r\n });\r\n }}\r\n windowProps={{\r\n header: 'Forgot Password',\r\n style: { width: 600 },\r\n }}\r\n renderContent={() => (\r\n \r\n \r\n Enter your username (and environment if required) to reset the\r\n password.\r\n \r\n \r\n {!environment && (\r\n \r\n )}\r\n {error ? (\r\n \r\n Couldn't retrieve recaptcha settings, please contact customer\r\n support.\r\n \r\n ) : (\r\n <>\r\n {recaptcha && recaptcha.Enabled && (\r\n onChange(e)}\r\n align=\"center\"\r\n sitekey={recaptcha.SiteKey}\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 We've sent an email with a link to finish resetting your password at:\r\n \r\n \r\n {state.email}\r\n \r\n \r\n )}\r\n />\r\n )} \r\n \r\n );\r\n};\r\n\r\nexport default ForgottenPasswordForm;\r\n","import { useState, useEffect } from 'react';\r\nimport { Utils } from 'ecrion-components';\r\n\r\nexport default function useRecaptcha(props) {\r\n const [recaptcha, setRecaptcha] = useState(null);\r\n const [error, setError] = useState(null);\r\n\r\n useEffect(() => {\r\n function loadRecaptcha(response) {\r\n if (response) setRecaptcha(response);\r\n }\r\n\r\n function errorRecaptcha(response) {\r\n setError(response);\r\n }\r\n\r\n Utils.request({\r\n url: '/backend/recaptcha',\r\n })\r\n .then(loadRecaptcha)\r\n .catch(errorRecaptcha);\r\n }, []);\r\n\r\n return { recaptcha, error };\r\n}\r\n","import React, { useState } from 'react';\r\nimport {\r\n makeStyles,\r\n createMuiTheme,\r\n MuiThemeProvider,\r\n} from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport Box from '@material-ui/core/Box';\r\nimport Alert from '../Alert';\r\nimport ForgottenPasswordForm from './ForgottenPasswordForm';\r\nimport { useAuth } from '../../context/AuthContext';\r\nimport { withAuth } from 'ecrion-components';\r\nimport DocumentTitle from 'react-document-title';\r\nimport {Formatter } from \"ecrion-components\";\r\n\r\n//This theme is used to wrap the outlined textfields, as the ecrion components' theme\r\n//breaks some of their properties and needs to be revised\r\nconst LoginFormTheme = (outerTheme) =>\r\n createMuiTheme({\r\n ...outerTheme,\r\n overrides: {\r\n ...outerTheme.overrides,\r\n MuiOutlinedInput: {\r\n ...outerTheme.overrides.MuiOutlinedInput,\r\n input: null,\r\n },\r\n },\r\n props: {\r\n ...outerTheme.props,\r\n MuiInputLabel: null,\r\n },\r\n });\r\n\r\nconst useStyles = makeStyles({\r\n boxContainer: {\r\n paddingLeft: '24px',\r\n paddingRight: '24px',\r\n },\r\n container: {\r\n width: 300,\r\n margin: 'auto',\r\n },\r\n alertInfo: {\r\n textAlign: 'center',\r\n width: '100%',\r\n },\r\n button: {\r\n textTransform: 'none',\r\n minWidth: 80,\r\n borderRadius: \"6px\"\r\n },\r\n});\r\n\r\nconst LoginForm = ({ match, location, history, setAuth }) => {\r\n const [environment, setEnvironment] = useState('');\r\n const [username, setUsername] = useState('');\r\n const [password, setPassword] = useState('');\r\n const [requestFailed, setRequestFailed] = useState('');\r\n const [passwordDialog, setPasswordDialog] = useState(false);\r\n const [urlEnvironment, setUrlEnvironment] = useState(false);\r\n\r\n const { login } = useAuth();\r\n\r\n const receivedEnvironment = decodeURIComponent(\r\n match.params.environment || ''\r\n );\r\n\r\n React.useEffect(() => {\r\n if (receivedEnvironment) {\r\n setEnvironment(receivedEnvironment);\r\n setUrlEnvironment(true);\r\n }\r\n\r\n const urlParams = new URLSearchParams(location.search);\r\n const receivedUserName = urlParams.get('userName');\r\n if (receivedUserName) setUsername(receivedUserName);\r\n }, []);\r\n\r\n const classes = useStyles();\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n try {\r\n await login({ environment, username, password });\r\n setAuth({ token: localStorage.getItem('ECR.EOS.AccessToken') });\r\n const encodedEnvironment = encodeURIComponent(environment);\r\n\r\n if (\r\n location.pathname.split('/')[1] !== environment.replace(/&/g, '%26')\r\n ) {\r\n history.push(`/${encodedEnvironment}/forms`);\r\n }\r\n } catch (error) {\r\n setRequestFailed(error.message);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n
handleSubmit(e)}>\r\n \r\n \r\n {!urlEnvironment && (\r\n \r\n setEnvironment(e.target.value)}\r\n style={{backgroundColor: 'white'}}\r\n />\r\n \r\n )}\r\n \r\n setUsername(e.target.value)}\r\n style={{backgroundColor: 'white'}}\r\n />\r\n \r\n \r\n setPassword(e.target.value)}\r\n style={{backgroundColor: 'white'}}\r\n />\r\n \r\n\r\n \r\n setPasswordDialog(true)}\r\n title=\"Forgot password?\"\r\n />\r\n \r\n\r\n \r\n \r\n \r\n \r\n Sign In\r\n \r\n \r\n \r\n \r\n\r\n {requestFailed && (\r\n \r\n {requestFailed}\r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n \r\n {passwordDialog && (\r\n setPasswordDialog(false)}\r\n environment={receivedEnvironment}\r\n />\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withAuth(LoginForm);\r\n","import React, { useEffect, useState } from 'react';\r\nimport LoginForm from './LoginForm';\r\nimport * as loginClient from '../../utils/loginClient';\r\nimport { Utils, LocalTheme } from 'ecrion-components';\r\nimport {\r\n makeStyles,\r\n Grid,\r\n Card,\r\n CardContent,\r\n CardHeader,\r\n Typography,\r\n Chip,\r\n} from \"@material-ui/core\";\r\nimport mhcLogo from \"../../logo.svg\";\r\nconst useStyles = makeStyles((theme) => ({\r\n media: {\r\n width: \"100%\",\r\n marginLeft: \"-8px\",\r\n },\r\n}));\r\n\r\n\r\nconst SignIn = (props) => {\r\n const [hasSSO, setHasSSO] = useState();\r\n const classes = useStyles();\r\n const searchParams = Utils.url.getSearchParams(props.location.search);\r\nconst customTheme = {\r\n common: {\r\n Page: {\r\n /** Navigation bar on the top of the screen. */\r\n Common: {\r\n style: {\r\n backgroundColor: \"#E0E5EB\",\r\n },\r\n },\r\n },\r\n },\r\n overrides:{\r\n MuiPaper: {\r\n root: {\r\n backgroundColor: '#FFFFFF',\r\n },\r\n },\r\n MuiButton: {\r\n root: {\r\n minWidth: 120,\r\n borderRadius: \"6px\",\r\n padding: '4px 16px',\r\n },\r\n outlined: {\r\n padding: '4px 16px',\r\n },\r\n contained: {\r\n padding: '4px 16px',\r\n },\r\n },\r\n MuiIcon: {\r\n root: {\r\n fontSize: \"0.75em\",\r\n },\r\n },\r\n MuiAvatar: {\r\n root: {\r\n height: \"32px\",\r\n width: \"32px\",\r\n },\r\n },\r\n MuiCardContent: {\r\n root: {\r\n paddingLeft: \"46px\",\r\n paddingRight: \"46px\",\r\n },\r\n },\r\n MuiCardHeader: {\r\n root: {\r\n paddingLeft: \"46px\",\r\n paddingRight: \"46px\",\r\n },\r\n },\r\n MuiCard: {\r\n root: {\r\n minWidth: \"500px\",\r\n borderRadius: \"8px\",\r\n border: \"0.25pt solid #627383\",\r\n },\r\n },\r\n MuiGrid: {\r\n root: {\r\n padding: \"0px\",\r\n },\r\n },\r\n MuiChip: {\r\n root: {\r\n justifyContent: \"space-between\",\r\n width: \"100%\",\r\n },\r\n },\r\n MuiListItemText: {\r\n root: {\r\n padding: \"0px 4px\",\r\n },\r\n },\r\n MuiMenuItem: {\r\n root: {\r\n padding: \"0px 0px\",\r\n },\r\n },\r\n MuiDivider: {\r\n root: {\r\n marginTop: \"0px\",\r\n },\r\n }\r\n},\r\nprops: {\r\n MuiFormControl: {\r\n variant: \"filled\",\r\n },\r\n MuiInputLabel: {\r\n variant: \"filled\",\r\n shrink: false,\r\n },\r\n MuiTextField: {\r\n variant: \"filled\",\r\n },\r\n MuiButton: {\r\n color: \"primary\",\r\n },\r\n}\r\n}\r\n //TODO: implement no environment in URL\r\n\r\n useEffect(() => {\r\n if (!props.match.params.environment) {\r\n setHasSSO(false);\r\n return;\r\n }\r\n\r\n loginClient\r\n .getLoginInfo({\r\n environment: props.match.params.environment,\r\n userName: searchParams.userName,\r\n })\r\n .then((loginInfo) => {\r\n if (loginInfo) {\r\n setHasSSO(true);\r\n window.location.href = loginInfo.url;\r\n } else {\r\n setHasSSO(false);\r\n }\r\n })\r\n .catch(() => {\r\n setHasSSO(false);\r\n });\r\n }, []);\r\n\r\n if (hasSSO === undefined) return null;\r\n\r\n return
{!hasSSO && \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 SignIn;\r\n","import client from './apiClient';\r\n\r\nfunction getLoginInfo({ environment, userName = '' }) {\r\n return client(\r\n `portalloginurl/${environment}?userName=${encodeURIComponent(userName)}`\r\n );\r\n}\r\n\r\nexport { getLoginInfo };\r\n","//@ts-check\r\nimport React from 'react';\r\nimport { Link, useHistory } from 'react-router-dom';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { darken } from '@material-ui/core/styles/colorManipulator';\r\nimport { Page } from 'ecrion-components';\r\nimport { useAuth } from '../context/AuthContext';\r\nimport { useUser } from '../context/UserContext';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n toolbar: {\r\n backgroundColor: theme.common.Page.NavBar.style.backgroundColor,\r\n minHeight: theme.common.Page.NavBar.style.height,\r\n maxHeight: theme.common.Page.NavBar.style.height,\r\n boxShadow: theme.common.Page.NavBar.style.boxShadow\r\n },\r\n logo: {\r\n height: 24,\r\n width: 24,\r\n verticalAlign: 'middle',\r\n borderRadius: '50%',\r\n },\r\n userBox: {\r\n color: '#000000',\r\n height: theme.common.Page.NavBar.style.height,\r\n '&:hover': {\r\n backgroundColor:theme.common.Page.NavBar.style.hoverBackground\r\n },\r\n '&:focus, &:active':{\r\n backgroundColor:theme.common.Page.NavBar.style.activeBackground\r\n } \r\n },\r\n userBoxText: {\r\n color: '#000000',\r\n },\r\n}));\r\n\r\nconst NavBar = () => {\r\n const { logout } = useAuth();\r\n const user = useUser();\r\n const classes = useStyles();\r\n let history = useHistory();\r\n const environment = user.Environment;\r\n const encodedEnvironment = encodeURIComponent(environment);\r\n\r\n const displayName = user.DisplayName;\r\n\r\n const drawerEntries = [\r\n [\r\n {\r\n label: 'My Account',\r\n props: {\r\n to: `/${encodedEnvironment}/profile`,\r\n },\r\n },\r\n ],\r\n [\r\n {\r\n label: 'Logout',\r\n type: 'button',\r\n props: {\r\n onClick: logout,\r\n },\r\n },\r\n ],\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n history.push(`/${encodedEnvironment}/`)}\r\n className={`${classes.userBox} environment-button`}\r\n >\r\n \r\n {user.EnvironmentLogoUrl && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {environment}\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 NavBar;\r\n","import React from 'react';\r\nimport { Page } from 'ecrion-components';\r\nimport NavBar from './NavBar';\r\n\r\nconst PageNotFound = ({ history }) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n history.push('/')} />\r\n \r\n );\r\n};\r\n\r\nexport default PageNotFound;\r\n","import { Utils } from 'ecrion-components';\r\n\r\nlet cache = null;\r\n\r\nfunction getMicroservicesInfo(environment) {\r\n if (cache) return Promise.resolve(cache);\r\n\r\n return Utils.request({\r\n method: 'GET',\r\n url: `${process.env.REACT_APP_WEBSITE_URL}/backend/microserviceinfo?environmentName=${environment}`,\r\n }).then((microservices) => {\r\n cache = microservices;\r\n return microservices;\r\n });\r\n}\r\n\r\nexport { getMicroservicesInfo };\r\n","import client from './apiClient';\r\nconst cache = {};\r\nconst errorCache = {};\r\n\r\nfunction getData(appId, url) {\r\n if (errorCache[url] !== undefined) return Promise.reject(errorCache[url]);\r\n if (cache[url] !== undefined) return Promise.resolve(cache[url]);\r\n\r\n return client(\r\n `gridTranslate?RowLimit=0&appId=${encodeURIComponent(\r\n appId\r\n )}&url=${encodeURIComponent(url)}`\r\n ).then(\r\n (gridData) => {\r\n cache[url] = gridData;\r\n return gridData;\r\n },\r\n (error) => {\r\n errorCache[url] = error;\r\n return Promise.reject(error);\r\n }\r\n );\r\n}\r\nexport { getData };\r\n","import React from 'react';\r\nimport { Typography, Grid, Link } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { Frame, DataGrid, Utils, Formatter } from 'ecrion-components';\r\nimport * as gridTranslateClient from '../../utils/gridTranslateClient';\r\nimport { useAsync } from 'react-async';\r\n\r\nconst Integration = (props) => {\r\n const { appId, extensionType, url, sections } = props;\r\n\r\n return (\r\n
\r\n {extensionType === 'backend' && (\r\n \r\n {sections.map((section) => (\r\n \r\n \r\n {section.name}\r\n \r\n \r\n \r\n ))}\r\n \r\n )}\r\n {extensionType === 'frontend' && }\r\n
\r\n );\r\n};\r\n\r\nconst getData = ({ appId, url }) => {\r\n return gridTranslateClient.getData(appId, url);\r\n};\r\n\r\nconst IntegrationGrid = ({ appId, url, name }) => {\r\n const { data, error } = useAsync({\r\n promiseFn: getData,\r\n appId,\r\n url,\r\n });\r\n\r\n if (error)\r\n return (\r\n {error.message || error.Message}\r\n );\r\n\r\n return (\r\n <>\r\n {data && (\r\n ({\r\n id: column.Id,\r\n children: column.Name,\r\n formatter: ({ data }) => (\r\n \r\n ),\r\n serverSort: column.Sortable,\r\n }))}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst decomposeRelativeURL = (url) => {\r\n const urlObj = { pathname: '', search: '', hash: '' };\r\n const searchIdx = url.indexOf('?');\r\n const hashIdx = url.indexOf('#');\r\n\r\n if (searchIdx !== -1) {\r\n urlObj.pathname = url.substring(0, searchIdx);\r\n if (hashIdx !== -1) {\r\n urlObj.search = url.substring(searchIdx, hashIdx);\r\n urlObj.hash = url.substring(hashIdx);\r\n } else {\r\n urlObj.search = url.substring(searchIdx);\r\n }\r\n return urlObj;\r\n }\r\n\r\n if (hashIdx !== -1) {\r\n urlObj.pathname = url.substring(0, hashIdx);\r\n urlObj.hash = url.substring(hashIdx);\r\n return urlObj;\r\n }\r\n\r\n urlObj.pathname = url;\r\n return urlObj;\r\n};\r\n\r\nconst CellFormatter = ({ data, column }) => {\r\n let value = Utils.getDotProp(data, column.Src);\r\n\r\n let Component = ({ value }) => value;\r\n\r\n if (Formatter[column.FormatterType]) {\r\n Component = Formatter[column.FormatterType];\r\n }\r\n\r\n if (column.ToSrc) {\r\n const url = Utils.getDotProp(data, column.ToSrc);\r\n const isRelativeUrl =\r\n !url.startsWith('http://') && !value.startsWith('https://');\r\n\r\n if (!isRelativeUrl) {\r\n return (\r\n }\r\n value={url}\r\n to={url}\r\n component={Link}\r\n />\r\n );\r\n }\r\n\r\n const location = {\r\n ...decomposeRelativeURL(url),\r\n state: {\r\n from: {\r\n pathname: window.location.pathname,\r\n search: window.location.search,\r\n hash: window.location.hash,\r\n },\r\n },\r\n };\r\n return (\r\n }\r\n value={url}\r\n to={location}\r\n component={RouterLink}\r\n />\r\n );\r\n }\r\n\r\n const formatterProps = {};\r\n if (column.FormatterProps) {\r\n column.FormatterProps.forEach((prop) => {\r\n formatterProps[prop.Name] =\r\n prop.Value || Utils.getDotProp(data, prop.Src);\r\n });\r\n }\r\n\r\n return ;\r\n};\r\n\r\nexport default Integration;\r\n","import React, { useState } from 'react';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport NavBar from '../NavBar';\r\nimport { Page, DataGrid, Utils, Icon } from 'ecrion-components';\r\nimport DocumentTitle from 'react-document-title';\r\nimport PageNotFound from '../PageNotFound';\r\nimport { useUser } from '../../context/UserContext';\r\nimport { getMicroservicesInfo } from '../../utils/microserviceInfoClient';\r\nimport Integration from '../Integration';\r\n\r\nconst Home = ({ match, history, location }) => {\r\n const [customPins, setCustomPins] = useState([]);\r\n const [openSnackbar, setOpenSnackbar] = useState(false);\r\n const [error, setError] = useState('');\r\n\r\n const userEnvironment = useUser().Environment;\r\n const encodedUserEnvironment = encodeURIComponent(userEnvironment);\r\n\r\n let receivedEnvironment = decodeURIComponent(match.params.environment || '');\r\n if (receivedEnvironment && receivedEnvironment.toLowerCase() !== userEnvironment.toLowerCase()) {\r\n return ;\r\n }\r\n\r\n let activeTab = decodeURIComponent(match.params.pinId || '');\r\n\r\n React.useEffect(() => {\r\n let redirect = false;\r\n /** In the case of an environment containing '&' ~ 'RCS & RDS' ~\r\n * which in the URL should look like \"RCS%20%26%20RDS\",\r\n * location.pathname === \"RCS %26 RDS\" thus it is necessary to\r\n * replace '&' with '%26 in userEnvironment'\r\n */\r\n if (\r\n !location.pathname.startsWith(`/${userEnvironment.replace(/&/g, '%26')}`)\r\n )\r\n redirect = true;\r\n\r\n if (!activeTab || activeTab === 'Login') {\r\n activeTab = 'forms';\r\n redirect = true;\r\n }\r\n\r\n if (redirect) {\r\n history.replace(`/${encodedUserEnvironment}/${activeTab}`);\r\n }\r\n }, [location]);\r\n\r\n React.useEffect(() => {\r\n let isMounted = true;\r\n getMicroservicesInfo(userEnvironment)\r\n .then((microservices) => {\r\n const pins = microservices.map((microservice) => {\r\n return {\r\n label: microservice.name,\r\n icon: microservice.iconURL,\r\n value: microservice.name,\r\n data: microservice,\r\n };\r\n });\r\n if (isMounted) {\r\n setCustomPins(pins);\r\n if (error) setError('');\r\n }\r\n })\r\n .catch((err) => {\r\n if (isMounted) {\r\n setOpenSnackbar(true);\r\n setError(Utils.getPrettyError(err));\r\n }\r\n });\r\n\r\n return () => {\r\n isMounted = false;\r\n };\r\n }, []);\r\n\r\n const customActiveTab = customPins.find((pin) => pin.value === activeTab);\r\n let documentTitle = customActiveTab ? customActiveTab.label : activeTab;\r\n if (documentTitle)\r\n documentTitle = documentTitle[0].toUpperCase() + documentTitle.substring(1);\r\n\r\n const changeActiveTab = (value) => {\r\n history.push(`/${encodedUserEnvironment}/${value}`);\r\n };\r\n\r\n const handleSnackbarClose = (event, reason) => {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n setOpenSnackbar(false);\r\n };\r\n\r\n return (\r\n \r\n <>\r\n \r\n \r\n \r\n
\r\n changeActiveTab(options.value),\r\n }}\r\n >\r\n {activeTab === 'forms' && (\r\n \r\n \r\n Forms\r\n \r\n \r\n \r\n Your Requests\r\n \r\n \r\n \r\n )}\r\n {activeTab === 'documents' && (\r\n \r\n \r\n Documents\r\n \r\n \r\n \r\n )}\r\n {activeTab === 'dashboards' && (\r\n \r\n \r\n Analytics\r\n \r\n \r\n \r\n )}\r\n {customActiveTab && }\r\n {error && (\r\n }\r\n />\r\n )}\r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Home;\r\n","import { getContactsConfiguration } from './contactsConfigurationClient';\r\nimport { getResourceToken } from './fileResourceTokenClient';\r\nimport { Utils } from 'ecrion-components';\r\n\r\nfunction getContactsForm() {\r\n return getContactsConfiguration().then(contactConfig => {\r\n const workspace = contactConfig.Form && contactConfig.Form.Workspace;\r\n const filePath = contactConfig.Form && contactConfig.Form.FilePath;\r\n return Utils.request({\r\n method: 'GET',\r\n url: `${\r\n process.env.REACT_APP_WEBSITE_URL\r\n }/backend/content?workspace=${workspace}&path=${encodeURIComponent(\r\n filePath\r\n )}`,\r\n }).then(res => {\r\n return new window.DOMParser().parseFromString(res, 'text/xml');\r\n });\r\n });\r\n}\r\n\r\nfunction downloadFile(workspace, path, publicAccessToken = null) {\r\n return getResourceToken(workspace, path, publicAccessToken).then(\r\n resourceToken => {\r\n window.open(\r\n `${\r\n process.env.REACT_APP_WEBSITE_URL\r\n }/backend/content?resourceToken=${encodeURIComponent(\r\n resourceToken\r\n )}&workspace=${workspace}&path=${path}`,\r\n '_self'\r\n );\r\n }\r\n );\r\n}\r\n\r\nexport { getContactsForm, downloadFile };\r\n","import client from './apiClient';\r\n\r\nfunction getContactsConfiguration() {\r\n return client('contactsconfiguration');\r\n}\r\nexport { getContactsConfiguration };\r\n","import { Utils } from 'ecrion-components';\r\n\r\nfunction getResourceToken(workspace, path, publicAccessToken = null) {\r\n const headers = {};\r\n if (publicAccessToken)\r\n headers.Authorization = `Basic ${btoa(publicAccessToken)}`;\r\n\r\n return Utils.request({\r\n method: 'GET',\r\n url: `${process.env.REACT_APP_WEBSITE_URL}/backend/fileresourcetoken?workspace=${workspace}&filepath=${path}`,\r\n headers: headers,\r\n }).then(resourceToken => {\r\n return resourceToken;\r\n });\r\n}\r\n\r\nexport { getResourceToken };\r\n","import React from 'react';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n loadingIndicator: {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginLeft: '-25px',\r\n marginTop: '-25px',\r\n },\r\n});\r\n\r\nconst FullPageProgress = () => {\r\n const classes = useStyles();\r\n return ;\r\n};\r\n\r\nexport default FullPageProgress;\r\n","import React, { useState } from 'react';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport Container from '@material-ui/core/Container';\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Alert from '../Alert';\r\nimport { useUser } from '../../context/UserContext';\r\nimport NavBar from '../NavBar';\r\nimport { Page, Form, LocalTheme } from 'ecrion-components';\r\nimport DocumentTitle from 'react-document-title';\r\nimport { changePassword } from '../../utils/userPropertiesClient';\r\nimport { getContactsForm } from '../../utils/contentClient';\r\nimport PageNotFound from '../PageNotFound';\r\nimport FullPageProgress from '../FullPageProgress';\r\nimport moment from 'moment';\r\nimport { getPasswordPolicies } from '../../utils/portalPasswordsClient';\r\n\r\nconst useStyles = makeStyles({\r\n clearDivider: {\r\n opacity: 0,\r\n },\r\n alertInfo: {\r\n textAlign: 'center',\r\n width: '100%',\r\n },\r\n changePassBtn: {\r\n backgroundColor: '#FF6633',\r\n color: '#ffffff',\r\n minWidth: '80px',\r\n borderRadius: '6px',\r\n border: 0,\r\n boxShadow:\r\n 'rgba(0, 0, 0, 0.2) 0px 1px 3px 0px, rgba(0, 0, 0, 0.14) 0px 1px 1px 0px, rgba(0, 0, 0, 0.12) 0px 2px 1px -1px;',\r\n '&:hover': {\r\n backgroundColor: '#FF9933',\r\n },\r\n },\r\n});\r\n\r\nconst customTheme = {\r\n overrides: {\r\n MuiButton: {\r\n root: {\r\n borderRadius: '6px',\r\n backgroundColor: '#FF6633',\r\n color: 'white',\r\n '&:focus': {\r\n backgroundColor: '#FF6633',\r\n color: 'white',\r\n },\r\n '&:hover': {\r\n backgroundColor: '#FF9933',\r\n color: 'white',\r\n },\r\n '&.Mui-disabled': {\r\n color: 'white !important',\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nconst MyAccount = ({ match, history }) => {\r\n const [passwordDialog, setPasswordDialog] = useState(false);\r\n const [contactProperties, setContactProperties] = useState(null);\r\n const [error, setError] = useState(null);\r\n const user = useUser();\r\n const receivedEnvironment = decodeURIComponent(match.params.environment);\r\n if (receivedEnvironment !== user.Environment) {\r\n return ;\r\n }\r\n\r\n const classes = useStyles();\r\n\r\n const handlePasswordChange = () => {\r\n setPasswordDialog(true);\r\n };\r\n\r\n const loadData = () => {\r\n const getPropertyValue = (propertyName) => {\r\n const contactProp = user.Contact.Properties.find(\r\n (el) => el.Name === propertyName\r\n );\r\n if (!contactProp) return '';\r\n\r\n if (contactProp.Type === 4 && contactProp.Value) {\r\n return moment(contactProp.Value).format('MMM D YYYY');\r\n }\r\n return contactProp.Value ? contactProp.Value : '';\r\n };\r\n\r\n getContactsForm()\r\n .then((xmlDoc) => {\r\n const categorizedProperties = Array.from(\r\n xmlDoc.getElementsByTagName('page')\r\n )\r\n .filter((page) => {\r\n const pageName = page.attributes.getNamedItem('name').value;\r\n return pageName !== 'Sales';\r\n })\r\n .map((page) => {\r\n const pageName = page.attributes.getNamedItem('name').value;\r\n const categoryObj = [];\r\n const childNodes = page.childNodes;\r\n for (let i = 0; i < childNodes.length; i++) {\r\n const attributes = childNodes[i].attributes;\r\n if (!attributes) continue;\r\n\r\n const propertyName = attributes.getNamedItem('name').value;\r\n const propertyLabel = attributes.getNamedItem('caption').value;\r\n\r\n const propertyValue = getPropertyValue(propertyName);\r\n categoryObj.push({\r\n name: propertyName,\r\n label: propertyLabel,\r\n value: propertyValue,\r\n });\r\n }\r\n return { categoryName: pageName, properties: categoryObj };\r\n });\r\n setContactProperties(categorizedProperties);\r\n })\r\n .catch((e) => {\r\n setError(\r\n 'An error has occurred while loading the profile details. Error: ' +\r\n e.message\r\n );\r\n });\r\n };\r\n\r\n const [passwordPolicies, setPasswordPolicies] = useState(null);\r\n\r\n React.useEffect(() => {\r\n getPasswordPolicies().then((policies) => {\r\n setPasswordPolicies(policies);\r\n });\r\n }, []);\r\n\r\n function validatePassword(password, passwordConfirmation) {\r\n if (passwordPolicies['PasswordLength'] > password.length) {\r\n return {\r\n errorMessage: `Password must have at least ${passwordPolicies['PasswordLength']} characters`,\r\n firstPassword: 'true',\r\n };\r\n }\r\n\r\n if (passwordPolicies['UpperCase'] > 0 && !/[A-Z]/.test(password)) {\r\n return {\r\n errorMessage: 'Password must have at least one uppercase (A-Z)',\r\n firstPassword: 'true',\r\n };\r\n }\r\n\r\n if (passwordPolicies['LowerCase'] > 0 && !/[a-z]/.test(password)) {\r\n return {\r\n errorMessage: 'Password must have at least one lowercase (a-z)',\r\n firstPassword: 'true',\r\n };\r\n }\r\n\r\n if (passwordPolicies['Digit'] > 0 && !/[0-9]/.test(password)) {\r\n return {\r\n errorMessage: 'Password must have at least one digit (0-9)',\r\n firstPassword: 'true',\r\n };\r\n }\r\n\r\n if (\r\n passwordPolicies['Symbol'] > 0 &&\r\n !/[` !@$%^&*()_+\\-=[\\]{};'\"\\\\|,.<>/?~]/.test(password)\r\n ) {\r\n return {\r\n errorMessage:\r\n 'Password must have at least one symbol (`!@$%^&*()_+-=[]{};\\'\"\\\\|,.<>/?~)',\r\n firstPassword: 'true',\r\n };\r\n }\r\n\r\n if (passwordPolicies['BannedCharacters'] > 0 && /[:#]/.test(password)) {\r\n return {\r\n errorMessage: 'Password cannot contain \":\" or \"#\" characters',\r\n firstPassword: 'true',\r\n };\r\n }\r\n\r\n if (password !== passwordConfirmation) {\r\n return {\r\n errorMessage: 'Passwords do not match.',\r\n firstPassword: 'false',\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n React.useEffect(() => {\r\n loadData();\r\n }, []);\r\n\r\n return (\r\n \r\n <>\r\n \r\n \r\n \r\n {!contactProperties && !error ? (\r\n \r\n ) : (\r\n <>\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n My Account\r\n \r\n \r\n\r\n \r\n \r\n handlePasswordChange()}\r\n >\r\n Change Password\r\n \r\n \r\n {error ? (\r\n \r\n {error}\r\n \r\n ) : (\r\n contactProperties.map((category) => {\r\n return category.properties.map((property) => {\r\n return (\r\n \r\n \r\n \r\n {property.label}\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 {passwordDialog && (\r\n \r\n setPasswordDialog(false)}\r\n submitAlign=\"right\"\r\n submitLabel={'Save'}\r\n submittingLabel={'Saving...'}\r\n onValidate={(data) => {\r\n const errors = {};\r\n if (data.newPassword && data.confirmPassword) {\r\n var error = validatePassword(\r\n data.newPassword,\r\n data.confirmPassword\r\n );\r\n if (error != null) {\r\n if (error.firstPassword == 'true') {\r\n errors.newPassword = error.errorMessage;\r\n } else {\r\n errors.confirmPassword = error.errorMessage;\r\n }\r\n }\r\n }\r\n\r\n return errors;\r\n }}\r\n onSuccess={(data) => {\r\n return changePassword(\r\n data.oldPassword,\r\n data.newPassword\r\n ).then(() => setPasswordDialog(false));\r\n }}\r\n windowProps={{\r\n header: 'Change Password',\r\n style: { width: 600 },\r\n }}\r\n renderContent={() => (\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 MyAccount;\r\n","import client from './apiClient';\r\n\r\nfunction changePassword(currentPassword, newPassword) {\r\n return client('portaluserproperties', {\r\n body: {\r\n currentPassword: currentPassword,\r\n newPassword: newPassword,\r\n },\r\n method: 'PUT',\r\n });\r\n}\r\nexport { changePassword };\r\n","import client from './apiClient';\r\n\r\n/**\r\n * @param {string} publicId The public id of a resource\r\n * @param {string} environment The environment name where to find the resource\r\n * @returns {Promise}\r\n */\r\nfunction get(publicId, environment) {\r\n return client(`publicinfo?publicId=${publicId}&environment=${environment}`);\r\n}\r\n\r\nexport { get };\r\n","//@ts-check\r\nimport React from 'react';\r\nimport { Communication } from 'ecrion-components';\r\n\r\n/**\r\n * @param {import('../../utils/types').FileInfo} file\r\n * @param {string} name\r\n * @returns {string}\r\n */\r\nconst getTagValue = (file, name) => {\r\n const { Tags: tags } = file;\r\n if (!tags || !tags.length) return;\r\n\r\n const tag = tags.find((t) => t.Name === name);\r\n return tag && tag.Value;\r\n};\r\n\r\n/**\r\n * @param {Array} parameters\r\n */\r\nconst getContactId = (parameters) => {\r\n if (!parameters) return '';\r\n\r\n const contactIdParam = parameters.find(\r\n (p) => p.name.toLowerCase() === 'contactid'\r\n );\r\n\r\n return contactIdParam && contactIdParam.value;\r\n};\r\n\r\nconst notifyOnSubmit = () => {\r\n try {\r\n window.parent && window.parent.postMessage(['formSubmitted'], '*');\r\n } catch { }\r\n};\r\n\r\n/**\r\n * @param {import('./types').CommunicationProps} param\r\n */\r\nconst Public = ({ data, parameters, showToolbar }) => {\r\n const [job, setJob] = React.useState(null);\r\n\r\n const { AccessToken: token } = data;\r\n\r\n const communicationId = getTagValue(data.File, 'CommunicationId');\r\n const jobId = getTagValue(data.File, 'JobId');\r\n\r\n const contactId = getContactId(parameters);\r\n const isInIFrame = window.self !== window.top;\r\n\r\n const runProps = {\r\n projectId: communicationId,\r\n contactId,\r\n token,\r\n parameters,\r\n showToolbar: showToolbar && !isInIFrame,\r\n };\r\n const onJobStarted = (jobSummary) => {\r\n isInIFrame && notifyOnSubmit();\r\n\r\n setJob(\r\n jobSummary && { jobId: jobSummary.Id, workspace: jobSummary.Workspace }\r\n );\r\n };\r\n\r\n if (job)\r\n return (\r\n \r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default Public;\r\n","//@ts-check\r\nimport React from 'react';\r\nimport { Communication } from 'ecrion-components';\r\n\r\n/**\r\n * @param {import('./types').PrivateCommunicationProps} param\r\n */\r\nconst Private = ({\r\n title,\r\n onClose,\r\n communicationName,\r\n communicationId,\r\n jobId,\r\n user,\r\n}) => {\r\n const [job, setJob] = React.useState(null);\r\n\r\n const context = {};\r\n\r\n context['UserName'] = user.LoginName;\r\n context['Email'] = user.Email;\r\n context['AccountId'] = user.AccountId;\r\n context['UAID'] = user.Contact && user.Contact.UAID;\r\n\r\n const onJobStarted = (jobSummary) => {\r\n if (!jobSummary) return;\r\n\r\n const { Id, Workspace } = jobSummary;\r\n setJob({ jobId: Id, workspace: Workspace });\r\n };\r\n\r\n if (job)\r\n return (\r\n \r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Private;\r\n","//@ts-check\r\nimport React from 'react';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\nconst Center = ({ children }) => {\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nconst Loader = ({ children }) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nLoader.defaultProps = {\r\n children: null,\r\n};\r\n\r\nexport default Loader;\r\n","//@ts-check\r\nimport React from 'react';\r\nimport Loader from './Loader';\r\nimport Alert from '../Alert';\r\n\r\nimport { Utils, Communication } from 'ecrion-components';\r\n\r\nconst DEFAULT_STATE = {\r\n loading: true,\r\n error: '',\r\n job: { Workspace: '', Id: '' },\r\n communicationId: '',\r\n};\r\n\r\n/**\r\n * @param {import('./types').DemandCommunicationProps} param\r\n */\r\nconst Demand = ({ communication, parameters, accessToken }) => {\r\n const [state, setState] = React.useState(DEFAULT_STATE);\r\n const { loading, error, job, communicationId } = state;\r\n const setJobState = (error, job, communicationId) =>\r\n setState({ loading: false, error, job, communicationId });\r\n\r\n const jobParameters = parameters.map((p) => ({\r\n Name: p.name,\r\n Value: p.value,\r\n }));\r\n\r\n React.useEffect(() => {\r\n const communicationRunOptions = {\r\n method: 'POST',\r\n url: '/backend/communicationrun',\r\n contentType: 'json',\r\n data: { Name: communication, JobParameters: jobParameters, Sync: true },\r\n };\r\n\r\n const communicationsOptions = {\r\n url: `/backend/communications?name=${communication}`,\r\n };\r\n\r\n if (accessToken) {\r\n communicationRunOptions.headers = {\r\n Authorization: `Basic ${btoa(accessToken)}`,\r\n };\r\n communicationsOptions.headers = {\r\n Authorization: `Basic ${btoa(accessToken)}`,\r\n };\r\n }\r\n\r\n Utils.request(communicationRunOptions).then(\r\n (job) => {\r\n Utils.request(communicationsOptions).then(\r\n (comm) => {\r\n setJobState('', job, comm.Id);\r\n },\r\n (error) => {\r\n setJobState(Utils.getPrettyError(error), null);\r\n }\r\n );\r\n },\r\n (error) => {\r\n setJobState(Utils.getPrettyError(error), null);\r\n }\r\n );\r\n }, []);\r\n\r\n if (loading) return Generating documents....;\r\n\r\n if (error) return {error};\r\n\r\n if (job)\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default Demand;\r\n","import Public from './Public';\r\nimport Private from './Private';\r\nimport Demand from './Demand';\r\n\r\nexport default { Public, Private, Demand };\r\n","// @ts-check\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Page, Utils, DocumentPreview, Icon } from 'ecrion-components';\r\nimport { withAuth } from 'ecrion-components';\r\nimport { useAsync } from 'react-async';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport * as publicInfoClient from '../../utils/publicInfoClient';\r\nimport Alert from '../Alert';\r\nimport Communication from '../Communication';\r\nimport { downloadFile } from '../../utils/contentClient';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst unsupportedFiles = ['.wk4', '.ehtml', '.rules'];\r\n\r\nconst getPublicInfo = ({ publicId, environment }) => {\r\n return publicInfoClient.get(publicId, environment);\r\n};\r\n\r\nconst isCommunicationFile = (fileName) => {\r\n return fileName === 'communication.share' || fileName === 'job.share';\r\n};\r\n\r\nconst parseSearchParams = (searchParams) => {\r\n if (!searchParams) return [];\r\n\r\n return Object.keys(searchParams).map((key) => ({\r\n name: key,\r\n value: searchParams[key],\r\n }));\r\n};\r\n\r\nconst useStyles = makeStyles((theme) => {\r\n return {\r\n text: {\r\n margin: '16px',\r\n },\r\n };\r\n});\r\n\r\nconst PublicLink = ({ match, history, location, auth, setAuth }) => {\r\n const [openSnackbar, setOpenSnackbar] = useState(false);\r\n const [snackbarMessage, setSnackbarMessage] = useState('');\r\n const [ready, setReady] = useState(false);\r\n\r\n const url = Utils.url.parseUrl(location.search);\r\n const searchParams = Utils.url.getSearchParams(location.search);\r\n\r\n const classes = useStyles();\r\n const parameters = parseSearchParams(searchParams);\r\n const { data, error, isPending } = useAsync({\r\n promiseFn: getPublicInfo,\r\n publicId: url.query.publicId,\r\n environment: match.params.environment,\r\n });\r\n const showToolbar =\r\n url.query.showToolbar === undefined || url.query.showToolbar === 'true';\r\n\r\n const getToolbarTitle = () => {\r\n if (!data) return 'Invalid public link';\r\n\r\n const titleTag = data.File.Tags.find((tag) => tag.Name === 'Title');\r\n let title = titleTag ? titleTag.Value : data.File.Name;\r\n const extensionIndex = title.lastIndexOf('.');\r\n if (extensionIndex !== -1) title = title.substring(0, extensionIndex);\r\n\r\n return title;\r\n };\r\n\r\n const isDownloadable = () => {\r\n if (!data || !data.File) return false;\r\n if (\r\n data.File.Name.endsWith('.pdf') === true ||\r\n data.File.Name.endsWith('.docx') === true\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const download = () => {\r\n const filePath = data.File.FilePath;\r\n const workspaceName = data.File.WorkspaceName;\r\n const accessToken = data.AccessToken;\r\n downloadFile(workspaceName, filePath, accessToken).catch((err) => {\r\n setSnackbarMessage('Could not download file: ' + err.message);\r\n setOpenSnackbar(true);\r\n });\r\n };\r\n\r\n const handleSnackbarClose = (event, reason) => {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n setOpenSnackbar(false);\r\n };\r\n\r\n const getExtension = (fileName) => {\r\n const extensionIndex = fileName.lastIndexOf('.');\r\n if (extensionIndex === -1) return 'unknown';\r\n\r\n return fileName.substring(extensionIndex);\r\n };\r\n\r\n const isPreviewable = (fileName) => {\r\n const extension = getExtension(fileName);\r\n if (extension === 'unknown') return false;\r\n return !unsupportedFiles.includes(extension);\r\n };\r\n\r\n const isCommunication = data && isCommunicationFile(data.File.Name);\r\n\r\n useEffect(() => {\r\n if (!isCommunication && data && data.AccessToken)\r\n setAuth({ token: data.AccessToken });\r\n if (!isPending) setReady(true);\r\n }, [isPending, data, isCommunication]);\r\n\r\n return (\r\n
\r\n {showToolbar && !isPending && !isCommunication && ready && (\r\n }\r\n onClick={() => download()}\r\n >\r\n Download\r\n \r\n )\r\n }\r\n icon={\r\n url.query.closeUrl && {\r\n type: 'close',\r\n onClick: () => {\r\n window.location = url.query.closeUrl;\r\n },\r\n }\r\n }\r\n />\r\n )}\r\n\r\n {!isCommunication && (\r\n \r\n {error && The public link is no longer valid.}\r\n {data &&\r\n ready &&\r\n (isPreviewable(data.File.Name) ? (\r\n \r\n \r\n
\r\n ) : (\r\n \r\n {`Preview is not available for files of this format: \"${getExtension(\r\n data.File.Name\r\n )}\".`}\r\n \r\n ))}\r\n \r\n )}\r\n {isCommunication && (\r\n
\r\n \r\n
\r\n )}\r\n }\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default withAuth(PublicLink);\r\n","import { Utils } from 'ecrion-components';\r\n\r\nfunction getFileFromPath(path, workspace, publicId = '') {\r\n return Utils.request({\r\n method: 'GET',\r\n url: `${\r\n process.env.REACT_APP_WEBSITE_URL\r\n }/backend/portalfiles?path=${encodeURIComponent(\r\n path\r\n )}&workspace=${encodeURIComponent(workspace)}&publicId=${encodeURIComponent(\r\n publicId\r\n )}`,\r\n }).then((file) => {\r\n return file;\r\n });\r\n}\r\n\r\nfunction getFileFromJobId(jobId, communicationId, publicId = '') {\r\n return Utils.request({\r\n method: 'GET',\r\n url: `${\r\n process.env.REACT_APP_WEBSITE_URL\r\n }/backend/portalfiles?jobId=${encodeURIComponent(\r\n jobId\r\n )}&communicationId=${encodeURIComponent(\r\n communicationId\r\n )}&publicId=${encodeURIComponent(publicId)}`,\r\n }).then((file) => {\r\n return file;\r\n });\r\n}\r\n\r\nfunction getFileFromCommunicationId(communicationId, publicId = '') {\r\n return Utils.request({\r\n method: 'GET',\r\n url: `${\r\n process.env.REACT_APP_WEBSITE_URL\r\n }/backend/portalfiles?communicationId=${encodeURIComponent(\r\n communicationId\r\n )}&publicId=${encodeURIComponent(publicId)}`,\r\n }).then((file) => {\r\n return file;\r\n });\r\n}\r\n\r\nfunction getFileFromCommunicationName(communicationName, publicId = '') {\r\n return Utils.request({\r\n method: 'GET',\r\n url: `${\r\n process.env.REACT_APP_WEBSITE_URL\r\n }/backend/portalfiles?communicationName=${encodeURIComponent(\r\n communicationName\r\n )}&publicId=${encodeURIComponent(publicId)}`,\r\n }).then((file) => {\r\n return file;\r\n });\r\n}\r\n\r\nexport {\r\n getFileFromPath,\r\n getFileFromJobId,\r\n getFileFromCommunicationId,\r\n getFileFromCommunicationName,\r\n};\r\n","// @ts-check\r\nimport React, { useState } from 'react';\r\nimport { Page, DocumentPreview, Utils, Icon } from 'ecrion-components';\r\nimport DocumentTitle from 'react-document-title';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { useUser } from '../../context/UserContext';\r\nimport { downloadFile } from '../../utils/contentClient';\r\nimport {\r\n getFileFromPath,\r\n getFileFromJobId,\r\n getFileFromCommunicationId,\r\n getFileFromCommunicationName,\r\n} from '../../utils/portalFilesClient';\r\nimport Communication from '../Communication';\r\nimport PageNotFound from '../PageNotFound';\r\nimport Alert from '../Alert';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\nconst unsupportedFiles = ['.wk4', '.ehtml', '.rules'];\r\n\r\nconst useStyles = makeStyles((theme) => {\r\n return {\r\n text: {\r\n margin: '16px',\r\n },\r\n };\r\n});\r\n\r\nconst File = ({ match, history, location }) => {\r\n const [accessResponse, setAccessResponse] = useState({\r\n hasAccess: false,\r\n message: '',\r\n });\r\n const [file, setFile] = useState(null);\r\n const [isDownloadable, setIsDownloadable] = useState(false);\r\n const [openSnackbar, setOpenSnackbar] = useState(false);\r\n const [snackbarMessage, setSnackbarMessage] = useState('');\r\n const url = Utils.url.parseUrl(location.search);\r\n const hashParts = location.hash.split('/');\r\n\r\n const classes = useStyles();\r\n const user = useUser();\r\n const userEnvironment = user.Environment;\r\n const receivedEnvironment = decodeURIComponent(match.params.environment);\r\n const encodedUserEnvironment = encodeURIComponent(userEnvironment);\r\n\r\n const getExtension = (fileName) => {\r\n const extensionIndex = fileName.lastIndexOf('.');\r\n if (extensionIndex === -1) return 'unknown';\r\n\r\n return fileName.substring(extensionIndex);\r\n };\r\n\r\n const isPreviewable = (fileName) => {\r\n const extension = getExtension(fileName);\r\n if (extension === 'unknown') return false;\r\n return !unsupportedFiles.includes(extension);\r\n };\r\n\r\n const download = () => {\r\n downloadFile(hashParts[1], hashParts[2]).catch((err) => {\r\n setSnackbarMessage(\r\n 'Could not download file: ' + Utils.getPrettyError(err)\r\n );\r\n setOpenSnackbar(true);\r\n });\r\n };\r\n\r\n if (receivedEnvironment !== userEnvironment) {\r\n return ;\r\n }\r\n\r\n const handleSnackbarClose = (event, reason) => {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n setOpenSnackbar(false);\r\n };\r\n\r\n const handleRequestError = (err) => {\r\n setAccessResponse({ hasAccess: false, message: Utils.getPrettyError(err) });\r\n };\r\n\r\n const getCategory = (file) => {\r\n if (file != null) {\r\n const categoryTag = file.Tags.find(\r\n (tag) => tag.Name === 'Portal Category'\r\n );\r\n if (categoryTag) {\r\n const category = categoryTag.Value.toLowerCase();\r\n if (category === 'analytics') return 'dashboards';\r\n return category;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const getToolbarTitle = () => {\r\n if (fileTitle) return fileTitle;\r\n if (accessResponse.message) return 'Unknown Communication';\r\n return ;\r\n };\r\n\r\n const getFileTitle = (file) => {\r\n let urlTitle = '';\r\n if (\r\n url.query.jobId ||\r\n url.query.communicationId ||\r\n url.query.communication\r\n ) {\r\n urlTitle = url.query.title;\r\n } else {\r\n urlTitle = url.query.title || url.query.file;\r\n }\r\n\r\n if (urlTitle) {\r\n const extensionIndex = urlTitle.lastIndexOf('.');\r\n if (extensionIndex !== -1)\r\n urlTitle = urlTitle.substring(0, extensionIndex);\r\n return urlTitle;\r\n }\r\n\r\n if (file) {\r\n const titleTag = file.Tags.find((tag) => tag.Name === 'Title');\r\n if (titleTag) {\r\n return titleTag.Value;\r\n }\r\n }\r\n\r\n return '';\r\n };\r\n const fileTitle = getFileTitle(file);\r\n\r\n const handleRequestSuccess = (file) => {\r\n setFile(file);\r\n\r\n setAccessResponse({ hasAccess: true, message: '' });\r\n if (url.query.file) {\r\n setIsDownloadable(\r\n url.query.file.endsWith('.pdf') === true ||\r\n url.query.file.endsWith('.docx') === true\r\n );\r\n }\r\n };\r\n\r\n const getPreviousLocation = () => {\r\n if (location.state && location.state.from) {\r\n return {\r\n ...location.state.from,\r\n state: {},\r\n };\r\n }\r\n return null;\r\n };\r\n\r\n const closeFile = () => {\r\n const previousLocation = getPreviousLocation();\r\n if (previousLocation) {\r\n history.push(previousLocation);\r\n return;\r\n }\r\n\r\n const fileCategory = getCategory(file);\r\n if (fileCategory) {\r\n history.push(`/${encodedUserEnvironment}/${fileCategory}`);\r\n return;\r\n }\r\n\r\n history.push(`/`);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (hashParts[0] === '#workspace') {\r\n if (hashParts.length !== 3) return;\r\n\r\n const workspace = hashParts[1];\r\n const path = hashParts[2];\r\n\r\n getFileFromPath(path, workspace)\r\n .then((file) => handleRequestSuccess(file))\r\n .catch((err) => handleRequestError(err));\r\n\r\n return;\r\n }\r\n\r\n const communicationName = url.query.communication;\r\n if (communicationName) {\r\n getFileFromCommunicationName(communicationName)\r\n .then((file) => handleRequestSuccess(file))\r\n .catch((err) => handleRequestError(err));\r\n\r\n return;\r\n }\r\n\r\n const jobId = url.query.jobId;\r\n const communicationId = url.query.communicationId;\r\n\r\n if (jobId && communicationId) {\r\n getFileFromJobId(jobId, communicationId)\r\n .then((file) => handleRequestSuccess(file))\r\n .catch((err) => handleRequestError(err));\r\n\r\n return;\r\n }\r\n\r\n if (communicationId) {\r\n getFileFromCommunicationId(communicationId)\r\n .then((file) => handleRequestSuccess(file))\r\n .catch((err) => handleRequestError(err));\r\n return;\r\n }\r\n\r\n setAccessResponse({\r\n hasAccess: false,\r\n message: 'Could not access the file.',\r\n });\r\n }, []);\r\n\r\n if (\r\n !url.query.jobId &&\r\n !url.query.communicationId &&\r\n !url.query.communication\r\n )\r\n return (\r\n \r\n
\r\n }\r\n onClick={() => download()}\r\n >\r\n Download\r\n \r\n )\r\n }\r\n />\r\n {accessResponse.hasAccess ? (\r\n \r\n {\r\n <>\r\n {hashParts.length !== 3 ? (\r\n Could not preview the file.\r\n ) : isPreviewable(url.query.file) ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \r\n {`Preview is not available for files of this format: \"${getExtension(\r\n url.query.file\r\n )}\".`}\r\n \r\n )}\r\n \r\n }\r\n
\r\n ) : (\r\n accessResponse.message && {accessResponse.message}\r\n )}\r\n }\r\n />\r\n
\r\n
\r\n );\r\n\r\n return (\r\n
\r\n \r\n {accessResponse.hasAccess ? (\r\n \r\n ) : (\r\n <>\r\n \r\n {accessResponse.message && {accessResponse.message}}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default File;\r\n","// @ts-check\r\nimport React, { useState } from 'react';\r\nimport { Page, Utils } from 'ecrion-components';\r\nimport DocumentTitle from 'react-document-title';\r\nimport { useUser } from '../../context/UserContext';\r\nimport { useAsync } from 'react-async';\r\nimport * as publicInfoClient from '../../utils/publicInfoClient';\r\nimport { getFileFromCommunicationName } from '../../utils/portalFilesClient';\r\nimport PageNotFound from '../PageNotFound';\r\nimport Alert from '../Alert';\r\nimport Communication from '../Communication';\r\n\r\nconst parseSearchParams = (searchParams) => {\r\n if (!searchParams) return [];\r\n\r\n return Object.keys(searchParams).map((key) => ({\r\n name: key,\r\n value: searchParams[key],\r\n }));\r\n};\r\n\r\nconst getPublicInfo = ([publicId, environment]) => {\r\n return publicInfoClient.get(publicId, environment);\r\n};\r\n\r\nconst OnDemand = ({ match, history, location }) => {\r\n const [accessResponse, setAccessResponse] = useState({\r\n hasAccess: false,\r\n message: '',\r\n });\r\n const [accessToken, setAccessToken] = useState('');\r\n const [fileCategory, setFileCategory] = useState('');\r\n\r\n const url = Utils.url.parseUrl(location.search);\r\n const publicId = url.query.publicId;\r\n const communication = url.query.communication;\r\n const searchParams = Utils.url.getSearchParams(location.search);\r\n const parameters = parseSearchParams(searchParams);\r\n\r\n const urlEnvironment = match.params.environment;\r\n let userEnvironment = '';\r\n const user = useUser();\r\n if (user) userEnvironment = user.Environment;\r\n if (!publicId)\r\n if (decodeURIComponent(urlEnvironment) !== userEnvironment) {\r\n return ;\r\n }\r\n\r\n const asyncPromise = useAsync({\r\n deferFn: getPublicInfo,\r\n });\r\n\r\n const getCategory = (file) => {\r\n if (file != null) {\r\n const categoryTag = file.Tags.find(\r\n (tag) => tag.Name === 'Portal Category'\r\n );\r\n if (categoryTag) {\r\n return categoryTag.Value.toLowerCase();\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const getPreviousLocation = () => {\r\n if (location.state && location.state.from) {\r\n return {\r\n ...location.state.from,\r\n state: {},\r\n };\r\n }\r\n return null;\r\n };\r\n\r\n const closeFile = () => {\r\n const previousLocation = getPreviousLocation();\r\n if (previousLocation) {\r\n history.push(previousLocation);\r\n return;\r\n }\r\n\r\n if (fileCategory) {\r\n history.push(`/${encodeURIComponent(userEnvironment)}/${fileCategory}`);\r\n return;\r\n }\r\n\r\n history.push(`/`);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (publicId) asyncPromise.run(publicId, urlEnvironment);\r\n else\r\n getFileFromCommunicationName(url.query.communication, publicId)\r\n .then((file) => {\r\n const category = getCategory(file);\r\n category && setFileCategory(category);\r\n\r\n setAccessResponse({ hasAccess: true, message: '' });\r\n })\r\n .catch((err) => {\r\n setAccessResponse({\r\n hasAccess: false,\r\n message: Utils.getPrettyError(err),\r\n });\r\n });\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (asyncPromise.data) {\r\n setAccessToken(asyncPromise.data.AccessToken);\r\n setAccessResponse({ hasAccess: true, message: '' });\r\n }\r\n\r\n if (asyncPromise.error) {\r\n setAccessResponse({\r\n hasAccess: false,\r\n message: 'The public link is no longer valid.',\r\n });\r\n }\r\n }, [asyncPromise]);\r\n\r\n return (\r\n \r\n
\r\n \r\n {accessResponse.hasAccess ? (\r\n \r\n ) : (\r\n accessResponse.message && {accessResponse.message}\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default OnDemand;\r\n","import React, { useState, useEffect } from 'react';\r\nimport {\r\n makeStyles,\r\n createMuiTheme,\r\n MuiThemeProvider,\r\n} from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport Box from '@material-ui/core/Box';\r\nimport Alert from '../Alert';\r\nimport { resetPasswordRequest, getPasswordPolicies } from '../../utils/portalPasswordsClient';\r\nimport DocumentTitle from 'react-document-title';\r\nimport LoginForm from './LoginForm';\r\n\r\n//This theme is used to wrap the outlined textfields, as the ecrion components' theme\r\n//breaks some of their properties and needs to be revised\r\nconst LoginFormTheme = (outerTheme) =>\r\n createMuiTheme({\r\n ...outerTheme,\r\n overrides: {\r\n ...outerTheme.overrides,\r\n MuiOutlinedInput: {\r\n ...outerTheme.overrides.MuiOutlinedInput,\r\n input: null,\r\n },\r\n },\r\n props: {\r\n ...outerTheme.props,\r\n MuiInputLabel: null,\r\n },\r\n });\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: 300,\r\n margin: 'auto',\r\n },\r\n alertInfo: {\r\n textAlign: 'center',\r\n width: '100%',\r\n },\r\n button: {\r\n textTransform: 'none',\r\n },\r\n});\r\n\r\nfunction validatePassword(password, passwordConfirmation, policies) {\r\n if (policies['PasswordLength'] > password.length) {\r\n return `Password must have at least ${policies['PasswordLength']} characters`;\r\n }\r\n\r\n if (policies['UpperCase'] > 0 && !/[A-Z]/.test(password)) {\r\n return 'Password must have at least one uppercase (A-Z)'\r\n }\r\n\r\n if (policies['LowerCase'] > 0 && !/[a-z]/.test(password)) {\r\n return 'Password must have at least one lowercase (a-z)'\r\n }\r\n\r\n if (policies['Digit'] > 0 && !/[0-9]/.test(password)) {\r\n return 'Password must have at least one digit (0-9)'\r\n }\r\n\r\n if (policies['Symbol'] > 0 && !/[` !@$%^&*()_+\\-=[\\]{};'\"\\\\|,.<>/?~]/.test(password)) {\r\n return 'Password must have at least one symbol (`!@$%^&*()_+-=[]{};\\'\"\\\\|,.<>/?~)'\r\n }\r\n\r\n if (policies['BannedCharacters'] > 0 && /[:#]/.test(password)) {\r\n return 'Password cannot contain \":\" or \"#\" characters'\r\n }\r\n\r\n if (password !== passwordConfirmation) {\r\n return 'Passwords do not match.';\r\n }\r\n\r\n return '';\r\n};\r\n\r\nconst ResetPasswordForm = ({ match, location, history, resetToken, context }) => {\r\n const [password, setPassword] = useState('');\r\n const [passwordConfirmation, setPasswordConfirmation] = useState('');\r\n const [requestFailed, setRequestFailed] = useState('');\r\n const [requestSucceeded, setRequestSucceeded] = useState(false);\r\n const [passwordPolicies, setPasswordPolicies] = useState(null);\r\n\r\n useEffect(() => {\r\n getPasswordPolicies()\r\n .then((policies) => {\r\n setPasswordPolicies(policies);\r\n })\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (passwordPolicies && password) {\r\n const validationMessage = validatePassword(password, passwordConfirmation, passwordPolicies);\r\n\r\n setRequestFailed(validationMessage);\r\n }\r\n }, [password, passwordConfirmation, passwordPolicies]);\r\n\r\n const classes = useStyles();\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n if (requestFailed) return;\r\n\r\n resetPasswordRequest(password, resetToken)\r\n .then(() => {\r\n setRequestSucceeded(true);\r\n history.push(location.pathname);\r\n })\r\n .catch((error) => setRequestFailed(error.message));\r\n };\r\n\r\n if (requestSucceeded) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {context === 'passwordExpired' ?\r\n 'Your password has expired and must be changed' :\r\n 'Please change your password'\r\n }\r\n \r\n \r\n
handleSubmit(e)}>\r\n \r\n \r\n \r\n setPassword(e.target.value)}\r\n />\r\n \r\n \r\n setPasswordConfirmation(e.target.value)}\r\n />\r\n \r\n \r\n \r\n Reset password\r\n \r\n \r\n\r\n {requestFailed && (\r\n \r\n {requestFailed}\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 ResetPasswordForm;\r\n","import React from 'react';\r\nimport { Formatter, Utils } from 'ecrion-components';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport moment from 'moment';\r\nimport { useUser } from '../context/UserContext';\r\n\r\nconst getTagValue = (tags, name) => {\r\n const titleTag = tags.find((tag) => tag.Name === name);\r\n return titleTag ? titleTag.Value : undefined;\r\n};\r\n\r\nconst getLinkLocation = (pathname, search = '', hash = '') => {\r\n return {\r\n pathname: pathname,\r\n search: search,\r\n hash: hash,\r\n state: {\r\n from: {\r\n pathname: window.location.pathname,\r\n search: window.location.search,\r\n hash: window.location.hash,\r\n },\r\n },\r\n };\r\n};\r\n\r\nconst removeUnnecessaryExtension = (name) => {\r\n if (name.endsWith('.pdf') || name.endsWith('.docx')) return name;\r\n const extensionIndex = name.lastIndexOf('.');\r\n if (extensionIndex !== -1) return name.substring(0, extensionIndex);\r\n return name;\r\n};\r\nconst titleColumn = {\r\n id: 'Name',\r\n children: 'Name',\r\n serverSort: true,\r\n formatter: ({ data }) => {\r\n const title = removeUnnecessaryExtension(\r\n getTagValue(data.Tags, 'Title') || 'Unnamed'\r\n );\r\n const encodedEnvironment = encodeURIComponent(useUser().Environment);\r\n\r\n const params = {\r\n jobId: getTagValue(data.Tags, 'JobId'),\r\n communicationId: getTagValue(data.Tags, 'CommunicationId'),\r\n };\r\n\r\n const location = getLinkLocation(\r\n `/${encodedEnvironment}/File`,\r\n `?${Utils.url.stringifySearchParams(params)}`\r\n );\r\n return ;\r\n },\r\n width: {\r\n xs: '30%',\r\n },\r\n};\r\n\r\nconst descriptionColumn = {\r\n id: 'Description',\r\n children: 'Description',\r\n formatter: ({ data }) => getTagValue(data.Tags, 'Description') || null,\r\n width: {\r\n xs: '50%',\r\n },\r\n};\r\n\r\nconst lastModifiedColumn = {\r\n id: 'LastModifiedUTC',\r\n children: 'Last Updated',\r\n serverSort: true,\r\n formatter: ({ data }) =>\r\n moment(data.LastModifiedUTC).format('MM/DD/YYYY, h:mm:ss A'),\r\n width: {\r\n xs: '20%',\r\n },\r\n};\r\n\r\nconst FORMS = {\r\n data: {\r\n url: `${process.env.REACT_APP_WEBSITE_URL}/backend/portalfiles?category=forms&filter=communications`,\r\n itemUrl: '',\r\n dataKey: 'forms',\r\n idKeyProp: 'FilePath',\r\n },\r\n columns: [titleColumn, descriptionColumn, lastModifiedColumn],\r\n};\r\n\r\nconst JOBS = {\r\n data: {\r\n url: `${process.env.REACT_APP_WEBSITE_URL}/backend/portalfiles?category=forms&filter=jobs`,\r\n itemUrl: '',\r\n dataKey: 'jobs',\r\n idKeyProp: 'FilePath',\r\n },\r\n columns: [\r\n titleColumn,\r\n {\r\n id: 'Status',\r\n children: 'Status',\r\n formatter: ({ data }) => (\r\n \r\n ),\r\n width: {\r\n xs: '50%',\r\n },\r\n },\r\n lastModifiedColumn,\r\n ],\r\n};\r\n\r\nconst ANALYTICS = {\r\n data: {\r\n url: `${process.env.REACT_APP_WEBSITE_URL}/backend/portalfiles?category=analytics&filter=`,\r\n itemUrl: '',\r\n dataKey: 'analytics',\r\n idKeyProp: 'FilePath',\r\n },\r\n columns: [\r\n {\r\n id: 'Name',\r\n children: 'Name',\r\n serverSort: true,\r\n formatter: ({ data }) => {\r\n const encodedEnvironment = encodeURIComponent(useUser().Environment);\r\n\r\n const params = {\r\n title: getTagValue(data.Tags, 'Title') || data.Name,\r\n file: data.Name,\r\n };\r\n const linkText = removeUnnecessaryExtension(params.title);\r\n\r\n const location = getLinkLocation(\r\n `/${encodedEnvironment}/File`,\r\n `?${Utils.url.stringifySearchParams(params)}`,\r\n `#workspace/${data.WorkspaceName}/${data.FilePath}`\r\n );\r\n\r\n return (\r\n \r\n );\r\n },\r\n width: {\r\n xs: '30%',\r\n },\r\n },\r\n descriptionColumn,\r\n lastModifiedColumn,\r\n ],\r\n};\r\n\r\nconst DOCUMENTS = {\r\n data: {\r\n url: `${process.env.REACT_APP_WEBSITE_URL}/backend/portalfiles?category=documents&filter=`,\r\n itemUrl: '',\r\n dataKey: 'documents',\r\n idKeyProp: 'FilePath',\r\n },\r\n columns: [\r\n {\r\n id: 'Name',\r\n children: 'Name',\r\n serverSort: true,\r\n formatter: ({ data }) => {\r\n const params = {\r\n title: getTagValue(data.Tags, 'Title'),\r\n file: data.Name,\r\n };\r\n const communicationId = getTagValue(data.Tags, 'CommunicationId');\r\n const encodedEnvironment = encodeURIComponent(useUser().Environment);\r\n const linkText = removeUnnecessaryExtension(params.title || data.Name);\r\n\r\n let location = {};\r\n if (communicationId)\r\n location = getLinkLocation(\r\n `/${encodedEnvironment}/OnDemand`,\r\n `?${Utils.url.stringifySearchParams({\r\n communication: params.title,\r\n ContactId: useUser().Contact.SynchronizationId,\r\n })}`\r\n );\r\n else\r\n location = getLinkLocation(\r\n `/${encodedEnvironment}/File`,\r\n `?${Utils.url.stringifySearchParams(params)}`,\r\n `#workspace/${data.WorkspaceName}/${data.FilePath}`\r\n );\r\n\r\n return (\r\n <>\r\n {communicationId ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n },\r\n width: {\r\n xs: '30%',\r\n },\r\n },\r\n descriptionColumn,\r\n lastModifiedColumn,\r\n ],\r\n};\r\n\r\nconst CUSTOM = {\r\n data: {\r\n url: `${process.env.REACT_APP_WEBSITE_URL}/backend/portalfiles?category={category}&filter={filter}`,\r\n itemUrl: '',\r\n dataKey: 'customDocuments',\r\n idKeyProp: 'FilePath',\r\n onBeforeRequest: (config, request) => {\r\n if (!config.dataProps) return;\r\n if (request.type === 'loadView') {\r\n let {\r\n dataProps: { category, filter },\r\n } = config;\r\n let url = request.url;\r\n url = url.split('{category}').join(category);\r\n url = url.split('{filter}').join(filter);\r\n return {\r\n url,\r\n };\r\n }\r\n return;\r\n },\r\n },\r\n columns: [\r\n {\r\n id: 'Name',\r\n children: 'Name',\r\n serverSort: true,\r\n formatter: ({ data, config }) => {\r\n const params = {\r\n title: getTagValue(data.Tags, 'Title') || '',\r\n file: data.Name,\r\n jobId: getTagValue(data.Tags, 'JobId') || '',\r\n communicationId: getTagValue(data.Tags, 'CommunicationId') || '',\r\n };\r\n\r\n const encodedEnvironment = encodeURIComponent(useUser().Environment);\r\n const linkText = removeUnnecessaryExtension(params.title || data.Name);\r\n\r\n let location = '';\r\n if (params.communicationId) {\r\n if (\r\n data.Name !== 'communication.share' &&\r\n data.Name !== 'job.share'\r\n ) {\r\n location = getLinkLocation(\r\n `/${encodedEnvironment}/OnDemand`,\r\n `?${Utils.url.stringifySearchParams({\r\n communication: params.title,\r\n ContactId: useUser().Contact.SynchronizationId,\r\n })}`\r\n );\r\n return (\r\n \r\n );\r\n }\r\n\r\n location = getLinkLocation(\r\n `/${encodedEnvironment}/File`,\r\n `?${Utils.url.stringifySearchParams(params)}`,\r\n `#documents/${encodeURIComponent(params.title)}`\r\n );\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n location = getLinkLocation(\r\n `/${encodedEnvironment}/File`,\r\n `?${Utils.url.stringifySearchParams(params)}`,\r\n `#workspace/${data.WorkspaceName}/${data.FilePath}`\r\n );\r\n\r\n return (\r\n \r\n );\r\n },\r\n width: {\r\n xs: '30%',\r\n },\r\n },\r\n descriptionColumn,\r\n lastModifiedColumn,\r\n ],\r\n};\r\n\r\nexport default {\r\n forms: FORMS,\r\n jobs: JOBS,\r\n analytics: ANALYTICS,\r\n documents: DOCUMENTS,\r\n custom: CUSTOM,\r\n};\r\n","const EXTENSIONS = {\r\n data: {\r\n url: `${process.env.REACT_APP_WEBSITE_URL}/backend/gridTranslate`,\r\n itemUrl: '',\r\n dataKey: 'extensions',\r\n onBeforeRequest: (config, request) => {\r\n if (!config.dataProps) return;\r\n if (request.type === 'loadView') {\r\n return {\r\n query: config.dataProps,\r\n };\r\n }\r\n },\r\n },\r\n};\r\n\r\nexport default EXTENSIONS;\r\n","import portalFiles from './portalFiles';\r\nimport extensions from './extensions';\r\n\r\nexport default {\r\n ...portalFiles,\r\n extensions,\r\n};\r\n","//@ts-check\r\n\r\nconst theme = {\r\n deterministicClasses: true,\r\n common: {\r\n Page: {\r\n /** Navigation bar on the top of the screen. */\r\n Common: {\r\n style: {\r\n backgroundColor: '#ffffff',\r\n },\r\n },\r\n },\r\n Alert: {\r\n style: { textColor: '#a94442' },\r\n Wrapper: {\r\n style: {\r\n backgroundColor: 'rgb(242, 222, 222)',\r\n border: '1px solid rgb(235, 204, 209)',\r\n padding: '15px',\r\n },\r\n },\r\n },\r\n } \r\n};\r\n\r\nexport default theme;\r\n","import React from 'react';\r\nimport Alert from '../Alert';\r\nimport { Button, makeStyles } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n button: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n}));\r\n\r\nconst ErrorPage = ({ match, history }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n An error has occurred during authentication. Please contact customer\r\n support.\r\n history.push(`/${match.params.environment}`)}\r\n >\r\n Retry\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ErrorPage;\r\n","import React, { useState } from 'react';\r\nimport { EcrionProvider, Utils } from 'ecrion-components';\r\nimport { createBrowserHistory } from 'history';\r\nimport { Router } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport { useUser } from './context/UserContext';\r\nimport './App.css';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport SignIn from './components/SignIn';\r\nimport Home from './components/Home';\r\nimport MyAccount from './components/MyAccount';\r\nimport PublicLink from './components/PublicLink';\r\nimport File from './components/File';\r\nimport OnDemand from './components/OnDemand';\r\nimport PageNotFound from './components/PageNotFound';\r\nimport ResetPasswordForm from './components/SignIn/ResetPasswordForm';\r\nimport dataTypes from './data';\r\nimport theme from './theme';\r\nimport ErrorPage from './components/ErrorPage';\r\n\r\nconst history = createBrowserHistory();\r\nconst localStorageKey = 'ECRION.SERVER.URL';\r\n\r\nfunction App() {\r\n const [shouldRender, setShouldRender] = useState(false);\r\n\r\n const query = new URLSearchParams(window.location.search);\r\n const publicId = query.get('publicId');\r\n const resetPasswordToken = query.get('reset');\r\n const context = query.get('context');\r\n const user = useUser();\r\n\r\n React.useEffect(() => {\r\n let isMounted = true;\r\n /* When the current user has the same login name as the userName parameter from the url, remove the parameter*/\r\n const newUserName = new URLSearchParams(window.location.search).get(\r\n 'userName'\r\n );\r\n const sameUser = user && newUserName && newUserName === user.LoginName;\r\n\r\n if (user && sameUser)\r\n history.push(\r\n window.location.pathname +\r\n removeSearchParameter(window.location.search, 'userName') +\r\n window.location.hash\r\n );\r\n\r\n const token = window.localStorage.getItem('ECR.EOS.AccessToken');\r\n const serverURL = window.localStorage.getItem('ECRION.SERVER.URL');\r\n const headers = {};\r\n if (token) {\r\n headers.Authorization = `Basic ${btoa(token)}`;\r\n }\r\n\r\n if (user) {\r\n if (isMounted) setShouldRender(false);\r\n\r\n Utils.request({\r\n method: 'GET',\r\n url: `${serverURL}/backend/content?workspace=System&path=Portal/Themes/CustomStyle.css`,\r\n headers: headers,\r\n })\r\n .then((res) => {\r\n const head =\r\n document.head || document.getElementsByTagName('head')[0];\r\n const style = document.createElement('style');\r\n style.textContent = res;\r\n head.append(style);\r\n\r\n if (isMounted) setShouldRender(true);\r\n })\r\n .catch(() => {\r\n //render without custom css\r\n if (isMounted) setShouldRender(true);\r\n });\r\n }\r\n\r\n if (!user && isMounted) setShouldRender(true);\r\n\r\n return () => {\r\n if (shouldRender === false) setShouldRender(true);\r\n isMounted = false;\r\n };\r\n }, [user]);\r\n\r\n React.useEffect(() => {\r\n let serverURL = '';\r\n if (process.env.NODE_ENV === 'development')\r\n serverURL = process.env.REACT_APP_SERVER_URL;\r\n else {\r\n serverURL = `${window.location.protocol}//${window.location.hostname}`;\r\n const port = window.location.port;\r\n if (port) {\r\n serverURL = serverURL.concat(`:${port}`);\r\n }\r\n }\r\n if (!user) setShouldRender(true);\r\n window.localStorage.setItem(localStorageKey, serverURL);\r\n }, []);\r\n\r\n return (\r\n <>\r\n {shouldRender && (\r\n \r\n \r\n {user ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* TODO: in case of a login route redirect to root */}\r\n \r\n ) : (\r\n \r\n \r\n {publicId && (\r\n \r\n )}\r\n {resetPasswordToken && (\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\nfunction removeSearchParameter(searchQuery, parameter) {\r\n if (!searchQuery) return '';\r\n const searchString = searchQuery.substring(1);\r\n const params = searchString.split(/[&;]/g);\r\n const paramPrefix = parameter + '=';\r\n\r\n for (let i = 0; i < params.length; i++) {\r\n if (params[i].startsWith(paramPrefix)) {\r\n params.splice(i, 1);\r\n }\r\n }\r\n\r\n return params.length > 0 ? '?' + params.join('&') : '';\r\n}\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport { AuthProvider } from './AuthContext';\r\nimport { UserProvider } from './UserContext';\r\n\r\nfunction AppProviders({ children }) {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport default AppProviders;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport AppProviders from './context';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}