{"version":3,"sources":["components/modal/Modal.tsx","components/Header.tsx","components/Copyright.tsx","components/Footer.tsx","components/Layout.tsx","components/MaterialTextField.tsx","hooks/useDisableContinue.ts","components/forms/LoginForm.tsx","components/StyledButton.tsx","components/forms/TwoFactorAuthForm.tsx","components/forms/ForgotPasswordForm.tsx","components/forms/LoginModel.ts","components/utils.ts","hooks/useAuthentication.ts","hooks/useResendPasscode.ts","components/modal/MaterialModal.tsx","components/modal/ModalContent.tsx","components/modal/ModalHeader.tsx","components/Login.tsx","hooks/useForgotPassword.tsx","components/MaterialDatePicker.tsx","components/forms/CustomerPortalLoginForm.tsx","hooks/useCustomerPortal.ts","components/forms/SetPasswordModels.ts","components/Error.tsx","hooks/useAxios.ts","components/Logout.tsx","components/forms/SetPasswordForm.tsx","components/SetPassword.tsx","App.tsx","serviceWorker.ts","theme.ts","index.tsx"],"names":["ModalWidth","useStyles","makeStyles","theme","link","margin","spacing","fontSize","fontFamily","toolbar","minHeight","maxWidth","width","breakpoints","down","nav","display","logo","flexGrow","height","verticalAlign","offset","Header","classes","AppBar","position","Toolbar","variant","className","src","alt","data-testid","createStyles","copyrightText","textAlign","color","lineHeight","Copyright","Typography","Date","getFullYear","footer","paddingTop","paddingBottom","marginTop","backgroundColor","footerLinksContainer","justifyContent","marginBottom","footerLink","palette","primary","main","Footer","useState","uinsureUrl","setUinsureUrl","useEffect","window","location","href","indexOf","process","Container","Grid","container","item","xs","Divider","id","underline","target","_","root","flexDirection","Layout","children","textField","styleProps","showLabel","text","transform","marginRight","textTransform","borderBottom","borderBottomColor","secondary","dark","labelRoot","MaterialTextField","field","form","touched","errors","props","get","o","path","split","reduce","key","touchedField","name","errorsField","label","TextField","fullWidth","helperText","error","Boolean","inputProps","maxLength","InputLabelProps","shrink","useDisableContinue","allowEmptyFields","useFormikContext","dirty","isValid","initialValues","isDisabled","setIsDisabled","flattened","Object","assign","_flatten","concat","keys","map","k","populatedInitialValues","values","filter","value","length","LoginForm","isLoading","noValidate","component","placeholder","type","direction","justify","alignItems","Button","disabled","CircularProgress","size","StyledButton","withStyles","LinkButton","padding","textDecoration","TwoFactorAuthForm","isWaiting2fa","resendClicked","timer","Box","px","onClick","ForgotPasswordForm","handleReturnToLoginClick","onReturnToLoginClick","mr","emailRegex","RegExp","safeAndSecureIdRegex","LoginInitial","EmailAddress","Password","Passcode","DateOfBirth","emailAddress","Yup","test","required","matches","passcode","dob","NaN","parse","LoginValidationSchema","TwoFactorAuthValidationSchema","DobAuthSchema","ForgotPasswordValidationSchema","ForgotPasswordEmailAddress","email","getQueryVariable","variable","vars","search","substring","i","pair","decodeURIComponent","useAuthentication","loginModel","results","setResults","loading","setLoading","setError","source","axios","CancelToken","a","returnUrl","body","JSON","stringify","username","password","dateofbirth","post","cancelToken","token","headers","response","status","data","message","fetchData","cancel","useResendPasscode","regenPasscodeRequest","regenLoading","setRegenLoading","regenError","setRegenError","regenResults","setRegenResults","sendRegenPasscodeRequest","modal","top","left","outline","paper","MaterialModal","open","onClose","disableBackdropClick","disableEscapeKeyDown","aria-labelledby","closeAfterTransition","BackdropComponent","Backdrop","BackdropProps","timeout","Fade","in","Paper","modalContent","centerContent","maxHeight","overflowY","overflowX","ModalContent","testId","modalHeader","closeButtonContainer","cursor","paddingLeft","content","centerTitle","ModalHeader","showClose","DirectLoginType","Modal","title","_520","style","baseFunctionsStagingUrl","REACT_APP_FUNCTION_BASE_STAGING_URL","useForgotPassword","isForgotPasswordRequest","onRequestFinished","result","setResult","undefined","isStaging","url","console","log","postPasswordReset","TextMaskCustom","inputRef","mask","other","maskPattern","Error","getMask","inputMask","ref","inputElement","guide","showMask","dateInputStyles","MaterialDateInput","rest","FormControl","clsx","visibleLabel","InputLabel","htmlFor","Input","inputComponent","FormHelperText","retrievePolicyButton","paddingRight","CustomerPortalLoginForm","pt","disableElevation","useCustomerPortal","payload","postcode","firstName","avatar","light","customerPortalAvatar","up","header","twoFaCopy","customerPortalGreeting","loginForm","invalidLogin","SetPasswordErrorCode","Login","displayError","setDisplayError","None","directLogin","setDirectLogin","submitLoginModel","setSubmitLoginModel","regenPasscode","setRegenPasscode","is2FA","setIS2FA","obfuscatedPhone","setObfuscatedPhone","isForgotPasswordOpen","setForgotPasswordOpen","setForgotPasswordRequest","forgotPasswordEmailAddress","setForgotPasswordEmailAddress","isForgotPasswordRequestFinished","setForgotPasswordRequestFinished","query","queryParams","URLSearchParams","unescape","hasReturnUrl","toLowerCase","postcodeResult","errorPostcode","forgotPasswordResult","isForgotPasswordLoading","forgotPasswordError","isCustomerPortal","Portal","Standard","isOk","redirectUrl","is2Fa","start2faTimer","obfuscatedPhoneNumber","handleSubmit","handleResend","handleForgotPasswordClose","setTimeout","hasChangedValues","setWaiting2fa","timer2fa","setTimer2fa","interval","setInterval","clearInterval","mb","Avatar","validationSchema","onSubmit","pb","disableRipple","PhoneNumber","sm","align","changed","dateOfBirthHasChanged","_560","mt","mx","useAxios","config","updateData","json","iframe","Logout","logoutIdQuery","withCredentials","postLogoutRedirectUri","signOutIFrameUrl","SetPasswordModelInitial","RetypedPassword","Code","NewPasswordModelSchema","min","oneOf","SetPasswordForm","isResetting","buttonText","SetPassword","resetting","ErrorCode","errorCode","setErrorCode","timeoutError","setTimeoutError","errorText","setErrorText","success","setSuccess","redirect","setRedirect","code","validateStatus","timeoutCheckResponse","hasTimedOut","to","setPassword","TimedOut","Exception","headerCopy","errorCopy","successCopy","toLocaleLowerCase","AlreadyUsed","ShouldShowErrorToUser","App","exact","render","hostname","match","createMuiTheme","MuiTextField","overrides","MuiAppBar","colorPrimary","MuiPaper","rounded","borderRadius","elevation4","boxShadow","MuiButton","outlined","borderColor","border","borderWidth","outlinedPrimary","contained","containedPrimary","containedSecondary","MuiInputBase","input","MuiInputLabel","MuiInput","formControl","borderBottomWidth","MuiFormHelperText","MuiFormLabel","MuiTypography","h1","h2","h3","body1","typography","join","red","A400","background","default","shape","md","lg","xl","baseUrl","document","getElementsByTagName","getAttribute","ReactDOM","StrictMode","ThemeProvider","CssBaseline","basename","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch"],"mappings":"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","file":"static/js/main.283dd5cd.chunk.js","sourcesContent":["import { Typography } from '@material-ui/core';\r\nimport React from 'react';\r\nimport MaterialModal from './MaterialModal';\r\nimport ModalContent from './ModalContent';\r\nimport ModalHeader from './ModalHeader';\r\n\r\ninterface ModalProps {\r\n open: boolean;\r\n showClose?: boolean;\r\n onClose: () => void;\r\n title?: string;\r\n testId?: string;\r\n children: JSX.Element | string;\r\n centerContent?: boolean;\r\n width?: ModalWidth;\r\n centerTitle?: boolean;\r\n disableBackdropClick?: boolean;\r\n disableEscapeKeyDown?: boolean;\r\n}\r\n\r\nexport enum ModalWidth {\r\n _460 = '460px',\r\n _520 = '520px',\r\n _560 = '560px',\r\n _800 = '800px',\r\n _1040 = '1040px',\r\n _1260 = '1260px',\r\n}\r\n\r\nconst Modal = ({\r\n open,\r\n showClose = true,\r\n onClose,\r\n title,\r\n children,\r\n centerContent = false,\r\n width = ModalWidth._520,\r\n centerTitle = false,\r\n disableBackdropClick = false,\r\n disableEscapeKeyDown = false,\r\n}: ModalProps) => {\r\n return (\r\n \r\n <>\r\n {title && (\r\n \r\n \r\n {title}\r\n \r\n \r\n )}\r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import { AppBar, makeStyles, Toolbar } from '@material-ui/core';\r\nimport React from 'react';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n link: {\r\n margin: theme.spacing(1, 2),\r\n fontSize: '0.8125rem',\r\n fontFamily: 'Spartan MB SemiBold',\r\n },\r\n toolbar: {\r\n minHeight: 104,\r\n margin: 'auto',\r\n maxWidth: '1060px',\r\n width: '100%',\r\n [theme.breakpoints.down(theme.breakpoints.width('md'))]: {\r\n minHeight: '88px',\r\n },\r\n },\r\n nav: {\r\n display: 'flex',\r\n },\r\n logo: {\r\n flexGrow: 1,\r\n '& img': {\r\n width: 130,\r\n height: 45,\r\n verticalAlign: 'middle',\r\n },\r\n },\r\n offset: {\r\n minHeight: 104,\r\n [theme.breakpoints.down(theme.breakpoints.width('md'))]: {\r\n minHeight: '88px',\r\n },\r\n },\r\n}));\r\n\r\nconst Header = () => {\r\n const classes = useStyles();\r\n return (\r\n <>\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default Header;\r\n","import Typography from '@material-ui/core/Typography';\r\nimport React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n copyrightText: {\r\n fontFamily: 'Spartan MB',\r\n fontSize: '0.6875rem',\r\n textAlign: 'center',\r\n color: '#666666',\r\n lineHeight: '1.7',\r\n [theme.breakpoints.down('sm')]: {\r\n textAlign: 'left',\r\n },\r\n },\r\n }),\r\n);\r\n\r\nconst Copyright = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n \r\n {'Copyright © '}\r\n {new Date().getFullYear()} Uinsure Ltd.\r\n \r\n \r\n Registered in England and Wales No. 06046870\r\n \r\n \r\n Uinsure Limited is Authorised and Regulated by the Financial Conduct Authority No.\r\n 463689\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Copyright;\r\n","import { Container, Divider, Grid, makeStyles } from '@material-ui/core';\r\nimport MuiLink from '@material-ui/core/Link';\r\nimport React, { useEffect, useState } from 'react';\r\nimport Copyright from './Copyright';\r\n\r\nconst brokerAppUrl = process.env.REACT_APP_BROKER_APP_URL || 'http://localhost:8000';\r\nconst brokerAppStagingUrl = process.env.REACT_APP_BROKER_APP_STAGING_URL || 'https://quotes.test.uinsure.co.uk';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n footer: {\r\n paddingTop: '2rem',\r\n paddingBottom: '4rem',\r\n marginTop: 'auto',\r\n backgroundColor: theme.footer.backgroundColor,\r\n textAlign: 'center',\r\n '& nav a': {\r\n margin: theme.spacing(1.5, 2.25),\r\n display: 'inline-block',\r\n },\r\n },\r\n footerLinksContainer: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'grid',\r\n marginBottom: '35px',\r\n marginTop: '40px',\r\n },\r\n },\r\n footerLink: {\r\n fontFamily: 'Spartan MB SemiBold',\r\n fontSize: '0.75rem',\r\n textAlign: 'center',\r\n color: theme.palette.primary.main,\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '7px 18px',\r\n },\r\n },\r\n}));\r\n\r\nconst Footer = () => {\r\n const classes = useStyles();\r\n const [uinsureUrl, setUinsureUrl] = useState('');\r\n\r\n\r\n useEffect(() => {\r\n if (window.location.href.indexOf(\"idp.test\") > 0) {\r\n setUinsureUrl(brokerAppStagingUrl);\r\n } else {\r\n setUinsureUrl(brokerAppUrl);\r\n }\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Footer;\r\n","import React from 'react';\r\nimport Header from './Header';\r\nimport Footer from './Footer';\r\nimport { makeStyles, Container } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles(_ => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n minHeight: '100vh',\r\n },\r\n}));\r\n\r\ninterface Props {\r\n children: JSX.Element | JSX.Element[];\r\n}\r\n\r\nexport const Layout = ({ children }: Props) => {\r\n const classes = useStyles();\r\n return (\r\n
\r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import { createStyles, makeStyles, TextField, Theme } from '@material-ui/core';\r\nimport { FieldProps } from 'formik';\r\nimport React from 'react';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n textField: (styleProps: any) => ({\r\n margin: styleProps.showLabel ? theme.spacing(2.5, 0) : theme.spacing(0, 0, 2.5),\r\n '& label.MuiFormLabel-root': {\r\n color: theme.palette.text.primary,\r\n fontFamily: 'Spartan MB SemiBold',\r\n fontSize: '1rem',\r\n transform: 'scale(1)',\r\n lineHeight: '1.25rem',\r\n marginTop: '0rem',\r\n marginRight: '48px',\r\n position: 'relative',\r\n },\r\n '& .MuiInput-formControl': {\r\n marginTop: '0px',\r\n },\r\n '& .MuiInput-input': {\r\n fontFamily: 'Spartan MB ',\r\n fontSize: '0.875rem',\r\n paddingBottom: 10,\r\n paddingTop: 12,\r\n textTransform: styleProps.textTransform || 'none',\r\n },\r\n '& .MuiInput-underline:before': {\r\n borderBottom: '2px solid #e5e5e5',\r\n },\r\n '& .MuiInput-underline': {\r\n '&:after, &:hover:before': {\r\n borderBottomColor: theme.palette.secondary.dark,\r\n },\r\n },\r\n '&::placeholder': {\r\n fontSize: '0.875rem',\r\n },\r\n }),\r\n labelRoot: {\r\n color: theme.palette.text.primary,\r\n },\r\n }),\r\n);\r\n\r\ninterface InputProps {\r\n textTransform: 'none' | 'uppercase' | 'capitalize';\r\n}\r\n\r\nconst MaterialTextField =

({\r\n textTransform = 'none',\r\n field,\r\n form: { touched, errors },\r\n ...props\r\n}: FieldProps

& InputProps) => {\r\n const get = (o: any, path: string) =>\r\n path.split('.').reduce((o: any = {}, key: string) => o[key], o);\r\n\r\n const touchedField = get(touched, field.name);\r\n const errorsField = get(errors, field.name);\r\n const showLabel = !!({ ...props } as any).label;\r\n\r\n const classes = useStyles({ showLabel, textTransform });\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default MaterialTextField;\r\n","import { useFormikContext } from 'formik';\r\nimport { useEffect, useState } from 'react';\r\n\r\nconst useDisableContinue = (allowEmptyFields: boolean = false) => {\r\n const { dirty, isValid, errors, initialValues } = useFormikContext();\r\n const [isDisabled, setIsDisabled] = useState(true);\r\n\r\n useEffect(() => {\r\n const flattened = Object.assign(\r\n {},\r\n ...(function _flatten(o: any): any {\r\n return [].concat(\r\n ...Object.keys(o).map(k =>\r\n typeof o[k] === 'object' ? _flatten(o[k]) : { [k]: o[k] },\r\n ),\r\n );\r\n })(initialValues),\r\n );\r\n\r\n // If any the initial values are populated, then the form must have been submitted succesfully\r\n // at some point, and therefore must contain valid values.\r\n const populatedInitialValues = Object.values(flattened as any).filter((value: any) => {\r\n return value && value.length > 0 ? true : false;\r\n });\r\n\r\n if (\r\n (dirty || populatedInitialValues.length > 0 || allowEmptyFields) &&\r\n isValid &&\r\n Object.values(errors).length === 0\r\n ) {\r\n setIsDisabled(false);\r\n } else {\r\n setIsDisabled(true);\r\n }\r\n }, [dirty, isValid, errors]);\r\n\r\n return { isDisabled };\r\n};\r\n\r\nexport default useDisableContinue;\r\n","import { Button, CircularProgress, Grid } from '@material-ui/core';\r\nimport { Field, Form } from 'formik';\r\nimport React from 'react';\r\nimport MaterialTextField from '../MaterialTextField';\r\nimport useDisableContinue from '../../hooks/useDisableContinue';\r\n\r\ninterface Props {\r\n isLoading: boolean;\r\n}\r\n\r\nconst LoginForm = ({ isLoading }: Props) => {\r\n const { isDisabled } = useDisableContinue();\r\n\r\n return (\r\n

\r\n \r\n \r\n \r\n \r\n \r\n <>Sign in  {isLoading && }\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LoginForm;\r\n","import { withStyles, Button, Theme } from '@material-ui/core';\r\n\r\nconst StyledButton = withStyles({\r\n root: {\r\n fontFamily: 'Spartan MB Semibold',\r\n fontSize: '0.8125rem',\r\n },\r\n})(Button);\r\n\r\nexport const LinkButton = withStyles((theme: Theme) => ({\r\n root: {\r\n color: theme.palette.primary.main,\r\n fontFamily: 'Spartan MB Semibold',\r\n fontSize: '0.8125rem',\r\n padding: 0,\r\n '&:focus, &:hover': {\r\n textDecoration: 'underline',\r\n backgroundColor: '#ffffff00',\r\n },\r\n },\r\n}))(Button);\r\n\r\nexport default StyledButton;\r\n","import { Box, Button, CircularProgress, Grid } from '@material-ui/core';\r\nimport { Field, Form } from 'formik';\r\nimport React, { useEffect, useState } from 'react';\r\nimport useDisableContinue from '../../hooks/useDisableContinue';\r\nimport MaterialTextField from '../MaterialTextField';\r\nimport { LinkButton } from '../StyledButton';\r\n\r\ninterface Props {\r\n isLoading: boolean;\r\n isWaiting2fa: boolean;\r\n timer: number;\r\n resendClicked: () => void;\r\n}\r\n\r\nconst TwoFactorAuthForm = ({ isLoading, isWaiting2fa, resendClicked, timer }: Props) => {\r\n const { isDisabled } = useDisableContinue();\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n <>Submit  {isLoading && }\r\n \r\n \r\n \r\n \r\n \r\n {`Not received a code? Click to resend ${timer > 0 ? `(${timer})` : ''}`}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TwoFactorAuthForm;\r\n","import { Box, CircularProgress, Grid } from '@material-ui/core';\r\nimport { Field, Form } from 'formik';\r\nimport React from 'react';\r\nimport useDisableContinue from '../../hooks/useDisableContinue';\r\nimport MaterialTextField from '../MaterialTextField';\r\nimport StyledButton from '../StyledButton';\r\n\r\ninterface Props {\r\n isLoading: boolean;\r\n onReturnToLoginClick: () => void;\r\n}\r\n\r\nconst ForgotPasswordForm = ({\r\n isLoading,\r\n onReturnToLoginClick: handleReturnToLoginClick,\r\n}: Props) => {\r\n const { isDisabled } = useDisableContinue();\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n Send verification email  \r\n {isLoading && }\r\n \r\n \r\n \r\n \r\n \r\n \r\n Return to login page\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ForgotPasswordForm;\r\n","import * as Yup from 'yup';\r\nconst emailRegex = new RegExp(/^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]+)$/, 'i');\r\nconst safeAndSecureIdRegex = new RegExp(/^\\d+$/);\r\n\r\nexport interface LoginModel {\r\n EmailAddress: string;\r\n Password: string;\r\n Passcode?: string;\r\n DateOfBirth?: string;\r\n}\r\n\r\nexport const LoginInitial: LoginModel = {\r\n EmailAddress: '',\r\n Password: '',\r\n Passcode: '',\r\n DateOfBirth: '',\r\n};\r\n\r\nconst emailAddress = Yup.lazy((value: string) => {\r\n if (safeAndSecureIdRegex.test(value)) {\r\n return Yup.string().required().length(6, 'Please enter a valid email address');\r\n } else {\r\n return Yup.string().matches(emailRegex, 'Please enter a valid email address').required('Email address is required');\r\n }\r\n});\r\n\r\nconst passcode = Yup.lazy(() => {\r\n return Yup.string().required().length(6, 'Passcode must be 6 digits');\r\n});\r\n\r\nconst dob = Yup.lazy(() => {\r\n return Yup.string()\r\n .required('Date of birth is required')\r\n .test('test-minimum-age', 'Must be a valid date', (value) => {\r\n const dob = Date.parse(value);\r\n return dob !== NaN;\r\n });\r\n});\r\n\r\nexport const LoginValidationSchema = Yup.object({\r\n EmailAddress: emailAddress,\r\n Password: Yup.string().required('Password is required'),\r\n});\r\n\r\nexport const TwoFactorAuthValidationSchema = Yup.object({\r\n Passcode: passcode,\r\n});\r\n\r\nexport const DobAuthSchema = Yup.object({\r\n DateOfBirth: dob,\r\n});\r\n\r\nexport const ForgotPasswordValidationSchema = Yup.object({\r\n ForgotPasswordEmailAddress: Yup.string()\r\n .email('Please enter a valid email address')\r\n .required('Email address is required'),\r\n});\r\n","const getQueryVariable = (variable: string) => {\r\n const query = window.location.search.substring(1);\r\n const vars = query.split('&');\r\n for (let i = 0; i < vars.length; i++) {\r\n let pair = vars[i].split('=');\r\n if (decodeURIComponent(pair[0]) == variable) {\r\n return decodeURIComponent(pair[1]);\r\n }\r\n }\r\n};\r\n\r\nexport { getQueryVariable };\r\n","import axios from 'axios';\r\nimport { useEffect, useState } from 'react';\r\nimport { LoginModel } from '../components/forms/LoginModel';\r\nimport { getQueryVariable } from '../components/utils';\r\n\r\ninterface AuthenticationResponse {\r\n isOk: boolean;\r\n is2Fa: boolean;\r\n obfuscatedPhoneNumber: string;\r\n redirectUrl: string;\r\n}\r\n\r\nconst useAuthentication = (loginModel: LoginModel) => {\r\n const [results, setResults] = useState();\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(false);\r\n const cancelToken = axios.CancelToken;\r\n const source = cancelToken.source();\r\n\r\n useEffect(() => {\r\n async function fetchData(values: LoginModel) {\r\n try {\r\n const returnUrl = getQueryVariable('ReturnUrl');\r\n setLoading(true);\r\n setError(false);\r\n\r\n const url = 'api/authenticate';\r\n\r\n const body = JSON.stringify({\r\n username: values.EmailAddress,\r\n password: values.Password,\r\n passcode: values.Passcode,\r\n dateofbirth: values.DateOfBirth,\r\n returnUrl,\r\n });\r\n\r\n const response = await axios.post(url, body, {\r\n cancelToken: source.token,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n if (response.status == 200) {\r\n setResults(response.data);\r\n setLoading(false);\r\n } else {\r\n setResults(response.data);\r\n setLoading(false);\r\n setError(true);\r\n }\r\n\r\n return response;\r\n } catch (error) {\r\n if (error.message != 'Operation canceled by the user.') {\r\n setLoading(false);\r\n }\r\n setError(true);\r\n }\r\n }\r\n\r\n if (loginModel.EmailAddress !== '' && loginModel.Password !== '') {\r\n fetchData(loginModel);\r\n }\r\n\r\n return function cleanup() {\r\n source.cancel('Operation canceled by the user.');\r\n setLoading(false);\r\n };\r\n }, [loginModel]);\r\n\r\n return { results, loading, error };\r\n};\r\n\r\nexport default useAuthentication;\r\n","import axios from 'axios';\r\nimport { useEffect, useState } from 'react';\r\nimport { LoginModel } from '../components/forms/LoginModel';\r\nimport { TwoFactorAuthResultEnum } from '../components/enums';\r\nimport { getQueryVariable } from '../components/utils'\r\n\r\ninterface RegenPasscodeResponse {\r\n regenResult: TwoFactorAuthResultEnum;\r\n}\r\n\r\nconst useResendPasscode = (loginModel: LoginModel, regenPasscodeRequest: Boolean) => {\r\n const [regenLoading, setRegenLoading] = useState(false);\r\n const [regenError, setRegenError] = useState(false);\r\n const [regenResults, setRegenResults] = useState();\r\n const cancelToken = axios.CancelToken;\r\n const source = cancelToken.source();\r\n\r\n useEffect(() => {\r\n async function sendRegenPasscodeRequest(values: LoginModel) {\r\n try {\r\n setRegenLoading(true);\r\n\r\n const returnUrl = getQueryVariable('ReturnUrl');\r\n\r\n const url = 'api/authenticate/RegenPasscode';\r\n\r\n const body = JSON.stringify({\r\n username: values.EmailAddress,\r\n password: values.Password,\r\n returnUrl,\r\n });\r\n\r\n const response = await axios.post(url, body, {\r\n cancelToken: source.token,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n if (response.status == 200) {\r\n setRegenResults(response.data);\r\n setRegenLoading(false);\r\n } else {\r\n setRegenResults(response.data);\r\n setRegenLoading(false);\r\n setRegenError(true);\r\n }\r\n\r\n return response;\r\n\r\n } catch (error) {\r\n if (error.message != 'Regen Passcode operation canceled by the user.') {\r\n setRegenLoading(false);\r\n }\r\n setRegenError(true);\r\n }\r\n }\r\n\r\n if (loginModel.EmailAddress !== '' && loginModel.Password !== '') {\r\n sendRegenPasscodeRequest(loginModel);\r\n }\r\n\r\n return function cleanup() {\r\n source.cancel('Operation canceled by the user.');\r\n setRegenLoading(false);\r\n };\r\n }, [regenPasscodeRequest]);\r\n\r\n return { regenResults, regenLoading, regenError };\r\n};\r\n\r\nexport default useResendPasscode;\r\n","import { Backdrop, createStyles, Fade, makeStyles, Modal, Paper, Theme } from '@material-ui/core';\r\nimport React from 'react';\r\nimport { ModalWidth } from './Modal';\r\n\r\ninterface Props {\r\n children: JSX.Element | JSX.Element[];\r\n open: boolean;\r\n onClose?: (_: React.MouseEvent) => void;\r\n width: ModalWidth;\r\n disableBackdropClick?: boolean;\r\n disableEscapeKeyDown?: boolean;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n modal: (styleProps: any) => ({\r\n position: 'absolute',\r\n maxWidth: styleProps.width,\r\n width: '95%',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n '&:focus': {\r\n outline: 'none',\r\n },\r\n }),\r\n paper: {\r\n margin: theme.spacing(2),\r\n },\r\n })\r\n);\r\n\r\nconst MaterialModal = ({\r\n children,\r\n open,\r\n width,\r\n onClose,\r\n disableBackdropClick = false,\r\n disableEscapeKeyDown = false,\r\n}: Props) => {\r\n const classes = useStyles({ width });\r\n return (\r\n \r\n \r\n
\r\n {children}\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default MaterialModal;\r\n","import { createStyles, makeStyles, Theme } from '@material-ui/core';\r\nimport React from 'react';\r\n\r\ninterface Props {\r\n centerContent?: boolean;\r\n testId?: string;\r\n children: JSX.Element | JSX.Element[] | string;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n modalContent: (styleProps: any) => ({\r\n padding: theme.spacing(0, 2, 4, 2),\r\n textAlign: styleProps.centerContent ? 'center' : 'left',\r\n maxHeight: '70vh',\r\n overflowY: 'auto',\r\n overflowX: 'hidden',\r\n }),\r\n }),\r\n);\r\n\r\nconst ModalContent = ({ children, testId, centerContent }: Props) => {\r\n const classes = useStyles({ centerContent });\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n};\r\n\r\nexport default ModalContent;\r\n","import { Box, createStyles, Grid, makeStyles, Theme } from '@material-ui/core';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport React from 'react';\r\n\r\ninterface Props {\r\n showClose?: boolean;\r\n children: JSX.Element;\r\n onClick?: (_: React.MouseEvent) => void;\r\n centerTitle?: boolean;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n modalHeader: {\r\n borderBottom: '1px solid #d3d3d3',\r\n padding: theme.spacing(2, 4),\r\n },\r\n closeButtonContainer: {\r\n cursor: 'pointer',\r\n color: '#e1e1e1',\r\n paddingLeft: theme.spacing(1),\r\n },\r\n content: (styleProps: any) => ({\r\n textAlign: styleProps.centerTitle ? 'center' : 'left',\r\n color: theme.palette.text.primary,\r\n }),\r\n })\r\n);\r\n\r\nconst ModalHeader = ({ showClose, onClick, children, centerTitle = false }: Props) => {\r\n const classes = useStyles({ centerTitle });\r\n return (\r\n
\r\n \r\n \r\n {children}\r\n \r\n {showClose && (\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 ModalHeader;\r\n","import { Avatar } from '@material-ui/core';\r\nimport Container from '@material-ui/core/Container';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport MuiLink from '@material-ui/core/Link';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\r\nimport { Formik, FormikProps } from 'formik';\r\nimport React, { useEffect, useState } from 'react';\r\nimport LoginForm from './forms/LoginForm';\r\nimport TwoFactorAuthForm from './forms/TwoFactorAuthForm';\r\nimport ForgotPasswordForm from './forms/ForgotPasswordForm';\r\nimport {\r\n LoginModel,\r\n LoginValidationSchema,\r\n LoginInitial,\r\n TwoFactorAuthValidationSchema,\r\n ForgotPasswordValidationSchema,\r\n DobAuthSchema,\r\n} from './forms/LoginModel';\r\nimport useAuthentication from '../hooks/useAuthentication';\r\nimport useResendPasscode from '../hooks/useResendPasscode';\r\nimport { Box } from '@material-ui/core';\r\nimport Modal, { ModalWidth } from './modal/Modal';\r\nimport useForgotPassword from '../hooks/useForgotPassword';\r\nimport StyledButton, { LinkButton } from './StyledButton';\r\nimport CustomerPortalLoginForm from './forms/CustomerPortalLoginForm';\r\nimport useCustomerPortal from '../hooks/useCustomerPortal';\r\nimport HomeIcon from '@material-ui/icons/Home';\r\n\r\nconst brokerAppUrl = process.env.REACT_APP_BROKER_APP_URL || 'http://localhost:8000';\r\nconst brokerAppStagingUrl = process.env.REACT_APP_BROKER_APP_STAGING_URL || 'https://quotes.test.uinsure.co.uk';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n paper: {\r\n paddingBottom: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n marginTop: theme.spacing(8),\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n customerPortalAvatar: {\r\n margin: theme.spacing(3.5, 0, 5.5),\r\n width: '150px',\r\n height: '150px',\r\n [theme.breakpoints.up('sm')]: {\r\n margin: theme.spacing(7.5),\r\n width: '40px',\r\n height: '40px',\r\n },\r\n padding: theme.spacing(6),\r\n boxShadow: '0px 4px 4px 0px #00000040',\r\n background: `linear-gradient(80deg, ${theme.palette.secondary.main}, ${theme.palette.primary.light})`,\r\n '& svg': {\r\n fontSize: '6rem',\r\n [theme.breakpoints.up('sm')]: {\r\n fontSize: '4rem',\r\n }\r\n },\r\n },\r\n header: {\r\n margin: 0,\r\n },\r\n twoFaCopy: {\r\n margin: theme.spacing(1, 0),\r\n },\r\n customerPortalGreeting: {\r\n margin: theme.spacing(1, 0),\r\n paddingBottom: theme.spacing(4),\r\n [theme.breakpoints.up('sm')]: {\r\n paddingBottom: theme.spacing(8.5),\r\n }\r\n },\r\n loginForm: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n invalidLogin: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n link: {\r\n margin: theme.spacing(1, 2),\r\n fontSize: '0.8125rem',\r\n fontFamily: 'Spartan MB SemiBold',\r\n },\r\n}));\r\n\r\nenum DirectLoginType {\r\n None,\r\n Standard,\r\n Portal,\r\n}\r\n\r\nconst Login = () => {\r\n const classes = useStyles();\r\n const [displayError, setDisplayError] = useState(false);\r\n const [directLogin, setDirectLogin] = useState(DirectLoginType.None);\r\n const [submitLoginModel, setSubmitLoginModel] = useState(LoginInitial);\r\n const [regenPasscode, setRegenPasscode] = useState(false);\r\n const [is2FA, setIS2FA] = useState(false);\r\n const [obfuscatedPhone, setObfuscatedPhone] = useState('');\r\n const [isForgotPasswordOpen, setForgotPasswordOpen] = useState(false);\r\n const [isForgotPasswordRequest, setForgotPasswordRequest] = useState(false);\r\n const [forgotPasswordEmailAddress, setForgotPasswordEmailAddress] = useState('');\r\n const [isForgotPasswordRequestFinished, setForgotPasswordRequestFinished] = useState(false);\r\n\r\n const query = window.location.search;\r\n const queryParams = new URLSearchParams(unescape(window.location.search));\r\n const hasReturnUrl = query && query.toLowerCase().indexOf('?returnurl=') == 0;\r\n const { results, loading, error } = useAuthentication(submitLoginModel);\r\n const { result: postcodeResult, error: errorPostcode } = useCustomerPortal(\r\n queryParams.get('portalcode'),\r\n submitLoginModel,\r\n );\r\n const { regenResults, regenLoading, regenError } = useResendPasscode(submitLoginModel, regenPasscode);\r\n const {\r\n result: forgotPasswordResult,\r\n isLoading: isForgotPasswordLoading,\r\n error: forgotPasswordError,\r\n } = useForgotPassword(forgotPasswordEmailAddress, isForgotPasswordRequest, () => {\r\n setForgotPasswordRequestFinished(true);\r\n });\r\n const isCustomerPortal = directLogin === DirectLoginType.Portal;\r\n\r\n if (query.indexOf('payload') > 0) {\r\n if (directLogin === DirectLoginType.None) {\r\n setDirectLogin(DirectLoginType.Standard);\r\n setSubmitLoginModel({ EmailAddress: 'directlogin', Password: 'directlogin' });\r\n }\r\n }\r\n\r\n if (query.indexOf('portalcode') > 0) {\r\n if (directLogin === DirectLoginType.None) {\r\n setDirectLogin(DirectLoginType.Portal);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (results) {\r\n if (results.isOk && results.redirectUrl) window.location.href = results.redirectUrl;\r\n else if (results.is2Fa) {\r\n setIS2FA(true);\r\n start2faTimer();\r\n setObfuscatedPhone(results.obfuscatedPhoneNumber);\r\n }\r\n }\r\n }, [results]);\r\n\r\n useEffect(() => {\r\n if (!hasReturnUrl) {\r\n if (window.location.href.indexOf('idp.test') > 0) {\r\n window.location.href = brokerAppStagingUrl;\r\n } else {\r\n window.location.href = brokerAppUrl;\r\n }\r\n }\r\n }, []);\r\n\r\n const handleSubmit = (values: LoginModel) => {\r\n setSubmitLoginModel(values);\r\n };\r\n\r\n const handleForgotPasswordSubmit = (emailAddress: string) => {\r\n setForgotPasswordEmailAddress(emailAddress);\r\n setForgotPasswordRequest(true);\r\n };\r\n\r\n const handleResend = () => {\r\n setRegenPasscode(!regenPasscode);\r\n start2faTimer();\r\n };\r\n\r\n const handleForgotPasswordClose = () => {\r\n if (!isForgotPasswordLoading) {\r\n setForgotPasswordOpen(false);\r\n setTimeout(() => {\r\n setForgotPasswordRequest(false);\r\n setForgotPasswordRequestFinished(false);\r\n }, 100);\r\n }\r\n };\r\n\r\n const handleForgotPasswordClick = () => {\r\n setForgotPasswordEmailAddress('');\r\n setForgotPasswordOpen(true);\r\n };\r\n\r\n const hasChangedValues = (values: LoginModel) => {\r\n if (submitLoginModel.EmailAddress !== values.EmailAddress || submitLoginModel.Password !== values.Password) {\r\n setDisplayError(false);\r\n return false;\r\n }\r\n return false;\r\n };\r\n\r\n const dateOfBirthHasChanged = (values: LoginModel) => {\r\n const changed = values.DateOfBirth !== submitLoginModel.DateOfBirth;\r\n if (changed) {\r\n setDisplayError(false);\r\n }\r\n return changed;\r\n };\r\n\r\n useEffect(() => {\r\n if (error || errorPostcode) {\r\n setDisplayError(true);\r\n }\r\n }, [error, errorPostcode]);\r\n\r\n const [isWaiting2fa, setWaiting2fa] = useState(false);\r\n const [timer2fa, setTimer2fa] = useState(0);\r\n\r\n useEffect(() => {\r\n let interval: any = null;\r\n if (isWaiting2fa) {\r\n interval = setInterval(() => {\r\n setTimer2fa((timer2fa) => timer2fa - 1);\r\n }, 1000);\r\n } else {\r\n if (interval != null) {\r\n clearInterval(interval);\r\n }\r\n }\r\n\r\n if (timer2fa <= 0) {\r\n setWaiting2fa(false);\r\n setTimer2fa(0);\r\n }\r\n\r\n return () => clearInterval(interval);\r\n }, [isWaiting2fa, timer2fa]);\r\n\r\n const start2faTimer = () => {\r\n setTimer2fa(10);\r\n setWaiting2fa(true);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {hasReturnUrl && (\r\n \r\n
\r\n {!isCustomerPortal && (\r\n <>\r\n \r\n \r\n \r\n \r\n Login\r\n \r\n \r\n )}\r\n {directLogin === DirectLoginType.None && !is2FA && (\r\n <>\r\n {\r\n handleSubmit(values);\r\n }}\r\n >\r\n {({ values }: FormikProps) => (\r\n <>\r\n \r\n \r\n \r\n {displayError && !hasChangedValues(values) && (\r\n \r\n \r\n \r\n Invalid login credentials\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n Forgot password?\r\n \r\n \r\n \r\n \r\n Don't have an account? Sign Up\r\n \r\n \r\n \r\n \r\n )}\r\n {directLogin === DirectLoginType.None && is2FA && (\r\n <>\r\n \r\n You will shortly receive a 6 digit passcode by SMS to the telephone number\r\n below.\r\n \r\n \r\n If you dont receive a code within 60 seconds request another code below. If you\r\n have any issues please contact 0344 844 3844.\r\n \r\n {\r\n handleSubmit(values);\r\n }}\r\n >\r\n {({ values }: FormikProps) => (\r\n <>\r\n \r\n \r\n \r\n {displayError && !hasChangedValues(values) && (\r\n \r\n \r\n \r\n Passcode incorrect\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n )}\r\n {isCustomerPortal && (\r\n <>\r\n \r\n Access your renewal documents online\r\n \r\n \r\n \r\n \r\n \r\n \r\n Hello {postcodeResult?.firstName}, we just need a few details to\r\n retrieve your renewal for {postcodeResult.postcode}.\r\n \r\n {\r\n handleSubmit({\r\n ...values,\r\n EmailAddress: 'portallogin',\r\n Password: 'portallogin',\r\n });\r\n }}\r\n >\r\n {({ values }: FormikProps) => (\r\n <>\r\n \r\n {displayError && !dateOfBirthHasChanged(values) && (\r\n \r\n \r\n \r\n Date of birth is incorrect\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 {isForgotPasswordRequestFinished ? (\r\n forgotPasswordResult && !forgotPasswordError ? (\r\n <>\r\n \r\n \r\n If your email address is linked to an account you will shortly receive an email with\r\n a link to reset your password.\r\n \r\n \r\n \r\n \r\n Return to login page\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n \r\n Unable to submit request. Call us on 0344 844 3844 if you require further\r\n assistance.\r\n \r\n \r\n \r\n \r\n Return to login page\r\n \r\n \r\n \r\n )\r\n ) : (\r\n <>\r\n \r\n \r\n \r\n To reset your password please enter your email address below.\r\n \r\n \r\n \r\n \r\n You should receive an email within the next 10 minutes.\r\n \r\n \r\n {\r\n handleForgotPasswordSubmit(values.ForgotPasswordEmailAddress);\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 Login;\r\n","import axios from 'axios';\r\nimport { useEffect, useState } from 'react';\r\n\r\ninterface ForgotPasswordResponse {\r\n Success: boolean;\r\n}\r\n\r\nconst baseFunctionsUrl = process.env.REACT_APP_FUNCTION_BASE_URL || 'http://localhost:7071';\r\nconst baseFunctionsStagingUrl =\r\n process.env.REACT_APP_FUNCTION_BASE_STAGING_URL ||\r\n 'https://uinsureapifunctionsqa.azurewebsites.net';\r\n\r\nconst useForgotPassword = (\r\n emailAddress: string,\r\n isForgotPasswordRequest: boolean,\r\n onRequestFinished: Function,\r\n) => {\r\n const [isLoading, setLoading] = useState(false);\r\n const [error, setError] = useState(false);\r\n const [result, setResult] = useState();\r\n const cancelToken = axios.CancelToken;\r\n const source = cancelToken.source();\r\n\r\n useEffect(() => {\r\n async function postPasswordReset(emailAddress: string) {\r\n try {\r\n setResult(undefined);\r\n setError(false);\r\n setLoading(true);\r\n\r\n const isStaging = window.location.href.indexOf('idp.test') > 0;\r\n const url = `${\r\n isStaging ? baseFunctionsStagingUrl : baseFunctionsUrl\r\n }/api/forgotpassword`;\r\n\r\n const body = JSON.stringify({\r\n EmailAddress: emailAddress,\r\n });\r\n\r\n const response = await axios.post(url, body, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n cancelToken: source.token,\r\n });\r\n\r\n if (response.status === 200) {\r\n setResult(response.data);\r\n setLoading(false);\r\n }\r\n\r\n return response;\r\n } catch (error) {\r\n if (error.message !== 'Operation canceled by the user.') {\r\n setLoading(false);\r\n }\r\n setError(true);\r\n console.log(error);\r\n } finally {\r\n onRequestFinished();\r\n }\r\n }\r\n\r\n if (emailAddress && isForgotPasswordRequest) {\r\n postPasswordReset(emailAddress);\r\n }\r\n\r\n return function cleanup() {\r\n source.cancel('Operation canceled by the user.');\r\n setLoading(false);\r\n };\r\n }, [isForgotPasswordRequest, emailAddress]);\r\n\r\n return { result, isLoading, error };\r\n};\r\n\r\nexport default useForgotPassword;\r\n","import {\r\n createStyles,\r\n FormControl,\r\n FormHelperText,\r\n Input,\r\n InputLabel,\r\n makeStyles,\r\n Theme,\r\n WithStyles,\r\n} from '@material-ui/core';\r\nimport { FieldProps } from 'formik';\r\nimport React from 'react';\r\nimport MaskedInput from 'react-text-mask';\r\nimport clsx from 'clsx';\r\n\r\nconst get = (o: any, path: string) => path.split('.').reduce((o: any = {}, key: string) => o[key], o);\r\n\r\nexport type Mask = string | RegExp;\r\nexport type DateMask = 'yyyy' | 'dd / mm / yyyy';\r\n\r\ninterface MaskAndPlaceHolder {\r\n mask: Mask[];\r\n placeholder: string;\r\n}\r\nconst getMask = (mask?: DateMask): MaskAndPlaceHolder => {\r\n const maskPattern = mask || 'dd / mm / yyyy';\r\n if (maskPattern === 'dd / mm / yyyy') {\r\n return {\r\n mask: [/\\d/, /\\d/, ' ', '/', ' ', /\\d/, /\\d/, ' ', '/', ' ', /\\d/, /\\d/, /\\d/, /\\d/],\r\n placeholder: 'DD / MM / YYYY',\r\n };\r\n } else if (maskPattern === 'yyyy') {\r\n return {\r\n mask: [/\\d/, /\\d/, /\\d/, /\\d/],\r\n placeholder: 'yyyy',\r\n };\r\n }\r\n\r\n throw new Error('Masking pattern not identified');\r\n};\r\n\r\ninterface TextMaskCustomProps {\r\n inputRef: (ref: HTMLInputElement | null) => void;\r\n mask?: DateMask;\r\n}\r\n\r\nconst TextMaskCustom = (props: TextMaskCustomProps) => {\r\n const { inputRef, mask, ...other } = props;\r\n const { mask: inputMask, placeholder } = getMask(mask);\r\n return (\r\n {\r\n inputRef(ref ? ref.inputElement : null);\r\n }}\r\n mask={inputMask}\r\n guide={false}\r\n showMask\r\n placeholder={placeholder}\r\n />\r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme: Theme) => dateInputStyles(theme));\r\n\r\nconst dateInputStyles = (theme: Theme) =>\r\n createStyles({\r\n textField: (styleProps: any) => ({\r\n margin: styleProps.showLabel ? theme.spacing(2.5, 0) : theme.spacing(0, 0, 2.5),\r\n '& label.MuiFormLabel-root': {\r\n color: theme.palette.primary.main,\r\n fontFamily: 'Spartan MB SemiBold',\r\n fontSize: '1rem',\r\n transform: 'scale(1)',\r\n lineHeight: '1.25rem',\r\n marginTop: '0rem',\r\n marginRight: '48px',\r\n position: 'relative',\r\n },\r\n '& .MuiInput-formControl': {\r\n marginTop: '0px',\r\n },\r\n '& .MuiInput-input': {\r\n fontFamily: 'Spartan MB ',\r\n fontSize: '1rem',\r\n paddingBottom: 10,\r\n paddingTop: 12,\r\n },\r\n '& .MuiInput-underline:before': {\r\n borderBottom: '2px solid #e5e5e5',\r\n },\r\n '& .MuiInput-underline': {\r\n '&:after, &:hover:before': {\r\n borderBottomColor: theme.palette.secondary.dark,\r\n },\r\n },\r\n '&::placeholder': {\r\n fontSize: '1rem',\r\n },\r\n }),\r\n labelRoot: {\r\n color: theme.palette.primary.main,\r\n },\r\n });\r\n\r\ninterface Props {\r\n label: string;\r\n mask?: Mask[];\r\n placeholder?: string;\r\n}\r\n\r\nconst MaterialDateInput =

({\r\n field,\r\n form: { touched, errors },\r\n mask,\r\n placeholder,\r\n ...props\r\n}: FieldProps

& Props & WithStyles) => {\r\n const touchedField = get(touched, field.name);\r\n const errorsField = get(errors, field.name);\r\n const showLabel = !!props.label;\r\n const inputProps = (props as any).inputProps || {};\r\n\r\n const rest: any = { ...props };\r\n const testId = inputProps['data-testid'];\r\n rest['data-testid'] = `${rest['data-testid']}-inner`;\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {props.label && (\r\n \r\n {props.label}\r\n \r\n )}\r\n \r\n {touchedField && errorsField && (\r\n \r\n {errorsField}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default MaterialDateInput;","import { Box, Button, CircularProgress, Grid, makeStyles } from '@material-ui/core';\r\nimport { Field, Form } from 'formik';\r\nimport React from 'react';\r\nimport useDisableContinue from '../../hooks/useDisableContinue';\r\nimport MaterialDateInput from '../MaterialDatePicker';\r\n\r\ninterface Props {\r\n isLoading: boolean;\r\n}\r\nconst useStyles = makeStyles((theme) => ({\r\n retrievePolicyButton: {\r\n paddingLeft: theme.spacing(5),\r\n paddingRight: theme.spacing(5),\r\n '&:not(.Mui-disabled)': {\r\n color: theme.palette.primary.main,\r\n },\r\n },\r\n}));\r\n\r\nconst CustomerPortalLoginForm = ({ isLoading }: Props) => {\r\n const classes = useStyles();\r\n const { isDisabled } = useDisableContinue();\r\n\r\n return (\r\n

\r\n \r\n \r\n \r\n \r\n \r\n <>Retrieve policy  {isLoading && }\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CustomerPortalLoginForm;\r\n","import axios from 'axios';\r\nimport { useEffect, useState } from 'react';\r\nimport {LoginModel} from \"../components/forms/LoginModel\";\r\n\r\nconst useCustomerPortal = (payload: string | null, loginModel: LoginModel) => {\r\n const [result, setResult] = useState({\r\n postcode: '',\r\n firstName: '',\r\n });\r\n const [error, setError] = useState(false);\r\n\r\n const cancelToken = axios.CancelToken;\r\n const source = cancelToken.source();\r\n\r\n useEffect(() => {\r\n async function fetchData(payload: string) {\r\n try {\r\n const url = 'api/customerportal/postcode';\r\n const body = JSON.stringify({\r\n payload: payload,\r\n });\r\n\r\n const response = await axios.post(url, body, {\r\n cancelToken: source.token,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n if (response.status === 200) {\r\n if (response.data === null) {\r\n setError(true);\r\n } else {\r\n setResult(response.data);\r\n }\r\n } else {\r\n setError(true);\r\n }\r\n } catch (error) {\r\n if (error.message !== 'Operation canceled by the user.') {\r\n }\r\n setError(true);\r\n }\r\n }\r\n\r\n if (payload !== '' && payload !== null) {\r\n fetchData(payload);\r\n }\r\n\r\n return function cleanup() {\r\n source.cancel('Operation canceled by the user.');\r\n };\r\n }, [payload, loginModel]);\r\n\r\n return { result, error };\r\n};\r\n\r\nexport default useCustomerPortal;\r\n","import * as Yup from 'yup';\r\n\r\nexport interface SetPasswordModel {\r\n Password: string;\r\n RetypedPassword: string;\r\n Code: string;\r\n}\r\n\r\nexport const SetPasswordModelInitial: SetPasswordModel = {\r\n Password: '',\r\n RetypedPassword: '',\r\n Code: '',\r\n};\r\n\r\nexport interface ErrorResponse {\r\n errorCode: SetPasswordErrorCode;\r\n message: string;\r\n}\r\n\r\nexport interface TimeoutCheckResponse {\r\n hasTimedOut: boolean;\r\n message: string;\r\n}\r\n\r\nexport enum SetPasswordErrorCode {\r\n None = 0,\r\n TimedOut = 10,\r\n AlreadyUsed = 20,\r\n InputSquaredError = 30,\r\n Exception = 40,\r\n}\r\n\r\nexport const NewPasswordModelSchema = Yup.object({\r\n Password: Yup.string()\r\n .required('Password is required')\r\n .min(8, 'Password is too short - should be 8 chars minimum.')\r\n .matches(/([A-Z])+/g, 'Must contain at least 1 capital')\r\n .matches(/([a-zA-Z])+/g, 'Must have a mixture of letters and numbers')\r\n .matches(/([0-9])+/g, 'Must have a mixture of letters and numbers'),\r\n RetypedPassword: Yup.string()\r\n .required('Please confirm your password')\r\n .oneOf([Yup.ref('Password'), null], 'Passwords must match'),\r\n});\r\n","import { Avatar, Box, Button } from '@material-ui/core';\r\nimport Container from '@material-ui/core/Container';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\r\nimport React from 'react';\r\n\r\nconst brokerAppUrl = process.env.REACT_APP_BROKER_APP_URL || 'http://localhost:8000';\r\nconst brokerAppStagingUrl =\r\n process.env.REACT_APP_BROKER_APP_STAGING_URL || 'https://quotes.test.uinsure.co.uk';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n paper: {\r\n paddingBottom: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n marginTop: theme.spacing(8),\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n header: {\r\n margin: 0,\r\n },\r\n}));\r\n\r\nconst Error = () => {\r\n const classes = useStyles();\r\n\r\n const handleLogin = () => {\r\n if (window.location.href.indexOf('idp.test') > 0) {\r\n window.location.href = brokerAppStagingUrl;\r\n } else {\r\n window.location.href = brokerAppUrl;\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n There has been a error.\r\n \r\n \r\n \r\n Please try to login again by clicking below.\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Error;\r\n","import { useState, useEffect } from 'react';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\n\r\nconst useAxios = (url: string, config: AxiosRequestConfig | undefined) => {\r\n const [data, updateData] = useState(undefined);\r\n\r\n useEffect(() => {\r\n async function fetchData() {\r\n const response = await axios.get(url, config);\r\n const json = await response.data;\r\n updateData(json);\r\n }\r\n fetchData();\r\n }, [url]);\r\n\r\n return data;\r\n};\r\n\r\nexport default useAxios;\r\n","import { Avatar, Box, Button } from '@material-ui/core';\r\nimport Container from '@material-ui/core/Container';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ExitToAppIcon from '@material-ui/icons/ExitToApp';\r\nimport React, { useEffect } from 'react';\r\nimport useAxios from '../hooks/useAxios';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n paper: {\r\n paddingBottom: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n marginTop: theme.spacing(8),\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n header: {\r\n margin: 0,\r\n },\r\n iframe: {\r\n display: 'none',\r\n },\r\n}));\r\n\r\nconst Logout = () => {\r\n const classes = useStyles();\r\n const query = window.location.search;\r\n const logoutIdQuery = query && query.toLowerCase().indexOf('?logoutid=') == 0 && query;\r\n const url = `/api/authenticate/logout${logoutIdQuery}`;\r\n\r\n const data = useAxios(url, { withCredentials: true }) as any;\r\n\r\n const handleLogin = () => {\r\n if (data && data.postLogoutRedirectUri) window.location.href = data.postLogoutRedirectUri;\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n You have been logged out successfully.\r\n \r\n \r\n Click below to login.\r\n \r\n \r\n
\r\n {data && data.signOutIFrameUrl && (\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default Logout;\r\n","import { Box, Button, CircularProgress, Grid } from '@material-ui/core';\r\nimport { Field, Form } from 'formik';\r\nimport React from 'react';\r\nimport MaterialTextField from '../MaterialTextField';\r\nimport useDisableContinue from '../../hooks/useDisableContinue';\r\n\r\ninterface Props {\r\n isLoading: boolean;\r\n isResetting: boolean;\r\n}\r\n\r\nconst SetPasswordForm = ({ isLoading, isResetting }: Props) => {\r\n const { isDisabled } = useDisableContinue();\r\n\r\n const buttonText = isResetting ? 'Reset password' : 'Activate account';\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
  • Must contain at least 1 capital
  • \r\n
  • Must have a minimum of 8 characters
  • \r\n
  • Must have a mixture of letters and numbers
  • \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <>\r\n {buttonText}  \r\n {isLoading && }\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default SetPasswordForm;\r\n","import { Box, Button } from '@material-ui/core';\r\nimport Container from '@material-ui/core/Container';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport axios from 'axios';\r\nimport { Formik } from 'formik';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport {\r\n SetPasswordErrorCode as ErrorCode,\r\n SetPasswordModel,\r\n SetPasswordModelInitial,\r\n NewPasswordModelSchema,\r\n ErrorResponse,\r\n TimeoutCheckResponse,\r\n} from './forms/SetPasswordModels';\r\nimport SetPasswordForm from './forms/SetPasswordForm';\r\nimport Modal from './modal/Modal';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n paper: {\r\n paddingBottom: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n marginTop: theme.spacing(8),\r\n },\r\n header: {\r\n margin: 0,\r\n color: '#291B44',\r\n },\r\n error: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n}));\r\n\r\nfunction ShouldShowErrorToUser(error: ErrorCode) {\r\n return error === ErrorCode.AlreadyUsed || error === ErrorCode.TimedOut;\r\n}\r\n\r\nconst SetPassword = (props: any) => {\r\n const classes = useStyles();\r\n const [isResetting] = useState(props.resetting);\r\n const [loading, setLoading] = useState(false);\r\n const [errorCode, setErrorCode] = useState(ErrorCode.None);\r\n const [timeoutError, setTimeoutError] = useState(false);\r\n const [errorText, setErrorText] = useState('');\r\n const [success, setSuccess] = useState(false);\r\n const [redirect, setRedirect] = useState(false);\r\n\r\n const code = new URLSearchParams(window.location.search).get('code');\r\n\r\n useEffect(() => {\r\n (async function checkTimeout() {\r\n try {\r\n const url = 'api/SetPassword/timeoutCheck';\r\n const body = JSON.stringify({ code: code });\r\n const response = await axios.post(url, body, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n validateStatus: () => true,\r\n });\r\n if (response.status === 200) {\r\n const timeoutCheckResponse = response.data as TimeoutCheckResponse;\r\n setTimeoutError(timeoutCheckResponse.hasTimedOut);\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n })();\r\n }, [code]);\r\n\r\n if (redirect) {\r\n return ;\r\n }\r\n\r\n const setPassword = async (values: SetPasswordModel) => {\r\n values.Code = code!;\r\n try {\r\n setLoading(true);\r\n const url = 'api/SetPassword';\r\n const body = JSON.stringify(values);\r\n const response = await axios.post(url, body, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n validateStatus: () => true,\r\n });\r\n\r\n if (response.status >= 200 || response.status < 300) {\r\n setSuccess(true);\r\n setLoading(false);\r\n setErrorCode(ErrorCode.None);\r\n setErrorText('');\r\n } else {\r\n const error = response.data as ErrorResponse;\r\n setSuccess(false);\r\n setLoading(false);\r\n setErrorCode(error.errorCode);\r\n setErrorText(error.message);\r\n if (error.errorCode === ErrorCode.TimedOut) {\r\n setTimeoutError(true);\r\n }\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n setSuccess(false);\r\n setLoading(false);\r\n setErrorCode(ErrorCode.Exception);\r\n setErrorText(error);\r\n }\r\n };\r\n\r\n const headerCopy = isResetting ? 'Reset Password' : 'Activate your account';\r\n const errorCopy = isResetting ? 'Password is not reset' : 'Account is not activated';\r\n const successCopy = isResetting\r\n ? 'Your password has been successfully reset.'\r\n : 'Your account has been successfully activated.';\r\n\r\n const error = !code || timeoutError;\r\n\r\n return (\r\n \r\n \r\n Uinsure\r\n \r\n \r\n {headerCopy}\r\n \r\n \r\n {error ? (\r\n \r\n \r\n There was an error during the attempt to {headerCopy.toLocaleLowerCase()}.\r\n \r\n {timeoutError && (\r\n \r\n One time link has expired.\r\n \r\n )}\r\n \r\n Call us on 0344 844 3844 if you require further assistance.\r\n \r\n \r\n ) : (\r\n {\r\n setPassword(values);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n\r\n setErrorCode(ErrorCode.None)}\r\n open={errorCode !== ErrorCode.None}\r\n >\r\n \r\n \r\n \r\n \r\n Error\r\n \r\n \r\n \r\n {errorCopy}\r\n \r\n {ShouldShowErrorToUser(errorCode) && (\r\n \r\n {errorText}\r\n \r\n )}\r\n \r\n \r\n Call us on 0344 844 3844 if you require further assistance\r\n \r\n \r\n \r\n setErrorCode(ErrorCode.None)}\r\n fullWidth\r\n >\r\n Okay\r\n \r\n \r\n \r\n \r\n \r\n\r\n setRedirect(true)} open={success}>\r\n \r\n \r\n \r\n \r\n Success\r\n \r\n \r\n \r\n {successCopy}\r\n \r\n \r\n \r\n To log in and access the Uinsure platform, please click below\r\n \r\n \r\n \r\n setRedirect(true)}\r\n fullWidth\r\n >\r\n Continue\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SetPassword;\r\n","import React from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport './App.css';\r\nimport { Layout } from './components/Layout';\r\nimport Login from './components/Login';\r\nimport Error from './components/Error';\r\nimport Logout from './components/Logout';\r\nimport SetPassword from './components/SetPassword';\r\n\r\nfunction App() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n } />\r\n \r\n );\r\n}\r\n\r\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\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: 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(\r\n process.env.PUBLIC_URL,\r\n window.location.href\r\n );\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: string, config?: 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: string, config?: 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\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import { red } from '@material-ui/core/colors';\r\nimport { createMuiTheme } from '@material-ui/core/styles';\r\n\r\ndeclare module '@material-ui/core/styles/createMuiTheme' {\r\n interface Theme {\r\n footer: {\r\n backgroundColor: string;\r\n };\r\n }\r\n interface ThemeOptions {\r\n footer?: {\r\n backgroundColor?: string;\r\n };\r\n }\r\n}\r\n\r\n// A custom theme for this app\r\nconst theme = createMuiTheme({\r\n props: {\r\n MuiTextField: {\r\n margin: 'normal',\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n },\r\n },\r\n overrides: {\r\n MuiAppBar: {\r\n colorPrimary: {\r\n backgroundColor: '#291b44',\r\n },\r\n },\r\n MuiPaper: {\r\n root: {},\r\n rounded: {\r\n borderRadius: 5,\r\n },\r\n elevation4: {\r\n filter: 'drop-shadow(0px 9px 8px rgba(152,184,190,0.31))',\r\n boxShadow: 'none',\r\n },\r\n },\r\n MuiButton: {\r\n root: {\r\n color: '#9d9d9d',\r\n fontFamily: 'Spartan MB Bold',\r\n fontSize: '1rem',\r\n textTransform: 'none',\r\n },\r\n outlined: {\r\n borderColor: '#e5e5e5',\r\n border: 'solid',\r\n borderWidth: 2,\r\n padding: '9px 15px',\r\n },\r\n outlinedPrimary: {\r\n color: '#00c9af',\r\n },\r\n contained: {\r\n padding: 11,\r\n boxShadow: '0px 9px 8px rgba(0,201,175,0.22)',\r\n '&:focus, &:hover': {\r\n boxShadow: '0px 9px 8px rgba(0,201,175,0.22)',\r\n },\r\n },\r\n containedPrimary: {\r\n backgroundColor: '#00c9af',\r\n '&:focus, &:hover': {\r\n backgroundColor: '#00c9af',\r\n },\r\n },\r\n containedSecondary: {\r\n backgroundColor: '#291b44',\r\n color: '#ffffff',\r\n '&:focus, &:hover': {\r\n backgroundColor: '#291b44',\r\n },\r\n },\r\n text: {\r\n //padding: \"6px 50px\",\r\n },\r\n },\r\n MuiInputBase: {\r\n root: {\r\n fontSize: '1rem',\r\n lineHeight: '1.875rem',\r\n },\r\n input: {\r\n padding: '12px 0 10px',\r\n },\r\n },\r\n MuiInputLabel: {\r\n shrink: {\r\n transform: 'scale(1)',\r\n },\r\n },\r\n MuiInput: {\r\n formControl: {\r\n marginTop: 32, //theme.spacing(2)\r\n fontSize: '0.875rem',\r\n },\r\n underline: {\r\n '&:before': {\r\n borderBottomWidth: 2,\r\n borderBottomColor: '#e5e5e5',\r\n },\r\n //focused\r\n // '&:after': {\r\n // borderBottomWidth: 2,\r\n // borderBottomColor: 'black',\r\n // }\r\n },\r\n },\r\n MuiFormHelperText: {\r\n root: {\r\n error: {\r\n fontSize: '1rem',\r\n color: '#f30a2f',\r\n },\r\n },\r\n },\r\n MuiFormLabel: {\r\n root: {\r\n fontFamily: 'Spartan MB SemiBold',\r\n fontSize: '1rem',\r\n lineHeight: '1.25rem',\r\n color: '#000000',\r\n // '&.Mui-focused': {\r\n // color: 'black'\r\n // }\r\n },\r\n },\r\n MuiTypography: {\r\n h1: {\r\n margin: '40px 0 18px',\r\n fontFamily: 'Spartan MB ExtraBold',\r\n fontSize: '1.875rem',\r\n lineHeight: '40px',\r\n textAlign: 'center',\r\n color: '#291b44',\r\n },\r\n h2: {\r\n margin: '8px',\r\n fontFamily: 'Spartan MB SemiBold',\r\n fontSize: '1rem',\r\n lineHeight: '20px',\r\n textAlign: 'center',\r\n },\r\n h3: {\r\n fontSize: '1.25rem',\r\n fontFamily: 'Spartan MB Bold',\r\n margin: '8px 0',\r\n },\r\n body1: {\r\n fontSize: '0.9375rem',\r\n },\r\n },\r\n },\r\n typography: {\r\n fontSize: 16,\r\n fontFamily: ['Spartan MB', 'Roboto', 'Helvetica', 'Arial', 'sans-serif'].join(','),\r\n },\r\n palette: {\r\n primary: {\r\n light: '#D2BEEF',\r\n main: '#291b44',\r\n },\r\n secondary: {\r\n light: '#00c9af',\r\n main: '#98DBCE',\r\n dark: '#19857b',\r\n },\r\n error: {\r\n main: red.A400,\r\n },\r\n background: {\r\n default: '#f8f8f8',\r\n },\r\n },\r\n shape: {\r\n borderRadius: 25,\r\n },\r\n footer: {\r\n backgroundColor: 'transparent',\r\n },\r\n breakpoints: {\r\n values: {\r\n xs: 0,\r\n sm: 600,\r\n md: 960,\r\n lg: 1108, // originally was 1280\r\n xl: 1920,\r\n },\r\n },\r\n});\r\n\r\nexport default theme;\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport 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 { BrowserRouter } from 'react-router-dom';\r\nimport theme from './theme';\r\nimport { ThemeProvider, CssBaseline } from '@material-ui/core';\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \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":""}