{"version":3,"sources":["components/Form/Step3/Mayor/Invite/Invitation/FileUpload/FileUpload.module.scss","components/Form/Form.module.scss","components/shared/Icon/Icon.js","components/Introduction/Introduction.js","helpers/URLSearchParams.js","globalState/FormDataContext.js","components/shared/Errors/GenericError.js","components/shared/Button/Button.js","components/Form/useStepLogic.js","components/shared/FormElements/Radios/Radio/Radio.js","components/shared/FormElements/Radios/Radios.js","components/shared/InsetText/InsetText.js","components/Form/Step1/EnquirySelection.js","components/shared/SectionStepInfo/SectionStepInfo.js","components/Form/useFormData.js","components/Form/Step2/Mayor/EnquiryType.js","components/shared/FormElements/Input/Input.js","components/Form/Step3/Mayor/Invite/EventName/EventName.js","components/shared/FormElements/Date/DateInput.js/DateInput.js","components/shared/FormElements/Date/Date.js","components/shared/FormElements/Date/dateValidationHelpers.js","components/Form/Step3/Mayor/Invite/Date/Date.js","components/shared/FormElements/Input/textarea.js","components/Form/Step3/Mayor/Invite/Address/Address.js","components/Form/Step3/Mayor/Invite/Description/Description.js","components/Form/Step3/Mayor/Invite/Invitation/FileUpload/FileUpload.js","components/Form/Step3/Mayor/Invite/Invitation/Invitation.js","components/Form/Step3/Mayor/Invite/Event.js","components/Form/Shared/Name/NoFieldset/Name.js","components/Form/Step4/Mayor/Invite/Who.js","components/Form/useSubmitForm.js","components/shared/Table/Table.js","components/shared/Table/Table-2-col.js","components/shared/FormElements/Input/InputCheckbox.js","components/Form/StepConfirm/Mayor/Enquiry/StepConsentForm.js","components/Form/StepConfirm/Mayor/Enquiry/StepSummarySection.js","components/Form/StepConfirm/Mayor/Enquiry/StepConfirm.js","components/Form/StepConfirm/Mayor/Invite/StepConsentForm.js","components/Form/StepConfirm/Mayor/Invite/StepSummarySection.js","components/Form/StepConfirm/Mayor/Invite/StepConfirm.js","components/Form/Step2/Strategy/EnquiryType.js","components/Form/Step2/Other/EnquiryType.js","components/Form/Step3/Other/FOI/Foi.js","components/shared/Link/Link.js","components/Form/Step3/Other/Fraud/Fraud.js","components/Form/Step3/Other/Jobs/Jobs.js","components/Form/StepConfirm/General/StepConsentForm.js","components/Form/StepConfirm/General/StepSummarySection.js","components/Form/StepConfirm/General/StepConfirm.js","components/Form/StepConfirm/Strategy/StepConsentForm.js","components/Form/StepConfirm/Strategy/StepSummarySection.js","components/Form/StepConfirm/Strategy/StepConfirm.js","components/Form/StepConfirm/Other/Foi/StepConsentForm.js","components/Form/StepConfirm/Other/Foi/StepSummarySection.js","components/Form/StepConfirm/Other/Foi/StepConfirm.js","components/Form/StepConfirm/Other/Fraud/StepConsentForm.js","components/Form/StepConfirm/Other/Fraud/StepSummarySection.js","components/Form/StepConfirm/Other/Fraud/StepConfirm.js","components/Form/StepConfirm/Other/Jobs/StepConsentForm.js","components/Form/StepConfirm/Other/Jobs/StepSummarySection.js","components/Form/StepConfirm/Other/Jobs/StepConfirm.js","components/Form/Shared/Enquiry/Enquiry.js","components/Form/Shared/Contact/Contact.js","components/Form/Shared/Name/Fieldset/Name.js","components/Form/useTrackFormAbandonment.js","components/Form/Form.js","components/Form/SubmitConfirmation/Success.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","Icon","_ref","className","iconName","_jsx","children","xlinkHref","concat","href","defaultProps","Intro","setIsFormStarted","_jsxs","type","onClick","url","URL","window","location","getSearchParam","name","searchParams","get","FormDataContext","createContext","FormDataProvider","props","FirstName","LastName","UrlName","decodeURI","_decodeURI$split","split","_decodeURI$split2","_slicedToArray","initialState","currentStep","length","formData","Firstname","hasReachedConfirmation","_useReducer","useReducer","state","action","_objectSpread","payload","_useReducer2","formState","formDispatch","Provider","value","GenericError","Button","btnClass","disabled","iconLeft","iconRight","isActive","isFetching","text","title","iconClass","role","useStepLogic","formRef","_useFormContext","useFormContext","register","errors","trigger","getValues","_useContext","useContext","_useContext2","formDataState","formDataDispatch","_useState","useState","_useState2","isContinuePressed","setIsContinuePressed","setStep","step","handleSubmit","_asyncToGenerator","_regeneratorRuntime","mark","_callee","event","result","file","PhotoName","PhotoExtension","reader","wrap","_context","prev","next","preventDefault","sent","EnquiryType","Object","keys","includes","UploadInvitation","FileReader","readAsDataURL","onloadend","PhotoBase64","replace","scrollTo","current","offsetTop","stop","_x","apply","arguments","showGenericError","continueButton","sanitize","dompurify","Radio","fieldValidation","_Fragment","dangerouslySetInnerHTML","__html","ref","defaultChecked","Radios","classes","label","radios","message","map","radio","InsetText","content","EnquirySelection","extraInfo","useRef","_useStepLogic","MayorEnquiry","StrategyEnquiry","selectedOption","document","querySelector","onSubmit","autoComplete","required","SectionStepInfo","section","description","useFormData","_formDataState$formDa","Phone","ExistingUser","Input","autocomplete","inputmode","spellcheck","APIerrors","input","defaultValue","id","inputMode","spellCheck","htmlFor","EventName","DateInput","dateType","onChange","inputName","Date","autoCompletPrefix","_ref2","_ref3","stateYear","stateMonth","stateDay","day","setDay","_useState3","_useState4","month","setMonth","_useState5","_useState6","year","setYear","_useState7","_useState8","date","setDate","handleChange","e","target","useEffect","d","toISOString","slice","months","between","number","min","max","dateSplit","getDaysFromNow","fromNow","dateFromNow","getDate","dateValidationHelpers","dateRegex","validateDay","validateMonth","getDateFormatted","val","includeYear","undefined","daysFromNow","newDate","pastDate","yearsAgo","futureDate","DOB","dateValidation","pattern","validate","Textarea","Address","Description","FileUpload","isFileInputFocused","setIsFileInputFocused","fileName","setFileName","s","fileUploadLabelFocused","onBlur","onFocus","files","fileUpload","fileValidation","uploadedFiles","error","PhotoBase64Extension","size","fileUploadValidation","fileValid","Event","Invitation","Name","fNameLabel","lNameLabel","Who","useSubmitForm","setFormSubmitStatus","setIsFetching","APIErrorMessage","setAPIErrorMessage","OtherEnquiry","ContactEmail","ContactPhone","Enquiry","EventStartTime","EventDuration","DateOfEvent","AddressPostcode","EventDescription","Company","InformationRequested","ExtraDetails","AllegationDetails","ExtraAllegationDetails","JobsEnquiry","dataToSend","email","Email","Postcode","axios","method","process","data","JSON","stringify","to","body","from","subject","displayName","headers","then","response","status","config","dataLayer","push","eventCategory","eventAction","eventLabel","Message","Error","statusText","catch","errMsg","console","errorMessage","Table","caption","values","cellClasses","noHeadersClass","lenght","index","scope","line","lineIndex","col","InputCheckbox","labelValue","labelElement","StepConsentForm","checkBoxLabel","rel","policyCheckBoxLabel","checkboxValidation","shouldBeTrue","polictCheckboxValidation","StepSummarySection","MayorGeneralEnquiry","setStepInContext","st","dataLine1","dataLine2","dataLine3","enquiry","Table2","ConsentForm","StepConfirm","_useSubmitForm","SummarySection","EmailAlert","dataLine4","dataLine5","dataLine6","dataLine7","dataLine8","eventData","Step9ConsentForm","Foi","_useStepLogic2","Link","link","Fraud","Links","Jobs","mainTitle","infoRequested","extraIinfo","header","summary","legend","Contact","emailInput","phoneInput","_useContext3","MayorContactEmail","MayorContactPhone","emailLabel","emailValidation","toLowerCase","emailInputSrc","phoneInputSrc","emailOption","phoneOption","checked","useTrackFormAbandonment","formSubmitStatus","fieldsChanged","setFieldsChanged","form","lastChangedEle","_toConsumableArray","addEventListener","removeEventListener","formAbandoned","join","Form","isRecoverLinkPressed","scrollToTopOfSummary","useCallback","page","getElementsByClassName","pageOffset","scrollTop","formOffset","methods","useForm","mode","stepToGoTo","FormProvider","formWrapper","Step1Enquiry","MayorStep1Enquiry","SharedEnquiry","SharedName","SharedContact","MayorGeneralStep6Enquiry","MayorStep1Event","MayorStep4Event","MayorGeneralStep6Invite","GeneralConfirmation","StrategyEnquiryType","StrategyConfirmation","OtherEnquiryType","OtherFoi","OtherFoiConfirmation","OtherFraud","OtherFraudConfirmation","OtherJobs","OtherJobsConfirmation","Success","App","isFormStarted","setIsRecoverLinkPressed","SubmitSuccess","Boolean","hostname","match","ReactDOM","render","React","StrictMode","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.9ea60efd.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"fileUpload\":\"FileUpload_fileUpload__ktoox\",\"fileUploadLabelFocused\":\"FileUpload_fileUploadLabelFocused__24hNn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"formWrapper\":\"Form_formWrapper__1i880\",\"wmcadsMlxxl\":\"Form_wmcadsMlxxl__2mPgI\"};","import React from 'react';\nimport PropTypes from 'prop-types';\n\n// Due to weird Protocol errors with external SVGs the svg use doesn't work well with production builds\n// So we Ajax the SVG in with a snippet at the bottom of public/index.html\n\nconst Icon = ({ className, iconName }) => {\n return (\n \n \n \n );\n};\n\nIcon.propTypes = {\n iconName: PropTypes.string.isRequired,\n className: PropTypes.string,\n};\n\nIcon.defaultProps = {\n className: null,\n};\n\nexport default Icon;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\n// Import components\nimport Icon from '../shared/Icon/Icon';\n\nconst Intro = ({ setIsFormStarted }) => {\n const handleClick = () => {\n setIsFormStarted(true);\n };\n\n return (\n
\n

Contact us

\n

\n You’ll need to contact Transport for West Midlands if your enquiry is about information,\n journey planning and transport disruptions.\n

\n

\n You’ll need to contact your local council if your enquiry is about general council services.\n For example, bin collections and council tax.\n

\n\n

Find who you need to contact

\n

\n Answer questions and we'll direct you to the right team so we can respond to your query\n faster.\n

\n\n \n Start now\n \n \n
\n );\n};\nIntro.propTypes = {\n setIsFormStarted: PropTypes.func.isRequired,\n};\nexport default Intro;\n","const url = new URL(typeof window !== 'undefined' ? window.location.href : ''); // Set URL to current if browser window is detected\n\n// Function for getting the value of a search param in the URL\nconst getSearchParam = (name) => {\n return url.searchParams.get(name); // Get the search param value for name passed in, and return back\n};\n\n// Function for setting the value of a search param in the URL\nconst setSearchParam = (name, val) => {\n url.searchParams.set(name, val); // Set the search param with the name provided to the value provided\n window.history.pushState({}, '', url.href); // Then push the updated search params back to the URL\n};\n\n// Function for deleting a search param in the URL\nconst delSearchParam = (name) => {\n url.searchParams.delete(name); // Delete the search param for the name provided\n window.history.pushState({}, '', url.href); // Then push the updated search params back to the URL\n};\n\nexport { getSearchParam, setSearchParam, delSearchParam }; // Return functions, so they can be called independently\n","import React, { useReducer, createContext } from 'react';\nimport { getSearchParam } from 'helpers/URLSearchParams';\n\nexport const FormDataContext = createContext();\n\nexport const FormDataProvider = (props) => {\n const { children } = props || {};\n\n let FirstName = null;\n let LastName = null;\n const UrlName = getSearchParam('name');\n\n if (UrlName && decodeURI(UrlName)) {\n [FirstName, LastName] = decodeURI(UrlName).split(' ');\n }\n\n // Set intial state of when\n const initialState = {\n currentStep: getSearchParam('email') && getSearchParam('email').length > 0 ? 3 : 1,\n formData: {\n Firstname: FirstName,\n LastName,\n },\n hasReachedConfirmation: false,\n };\n\n // Set up a reducer so we can change state based on centralised logic here\n const reducer = (state, action) => {\n // Update the point to chosen\n switch (action.type) {\n // Remove the waypoint by the id\n case 'UPDATE_FORM_DATA': {\n return {\n ...state,\n formData: { ...state.formData, ...action.payload },\n };\n }\n\n // Remove the waypoint by the id\n case 'UPDATE_STEP': {\n return {\n ...state,\n currentStep: action.payload,\n };\n }\n\n case 'REACHED_CONFIRMATION': {\n return {\n ...state,\n hasReachedConfirmation: action.payload,\n };\n }\n\n // Default should return intial state if error\n default:\n return initialState;\n }\n };\n\n // Set up reducer using reducer logic and initialState by default\n const [formState, formDispatch] = useReducer(reducer, initialState);\n\n // Pass state and dispatch in context and make accessible to children it wraps\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\nimport Icon from '../Icon/Icon';\n\nconst GenericError = () => {\n return (\n
\n
\n \n

There is a problem

\n
\n\n
Please check your answers again.
\n
\n );\n};\n\nexport default GenericError;\n","// Import packages\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from 'components/shared/Icon/Icon';\n\nconst Button = ({\n btnClass,\n disabled,\n iconLeft,\n iconRight,\n isActive,\n isFetching,\n onClick,\n text,\n title,\n type,\n}) => {\n return (\n // eslint-disable-next-line react/button-has-type\n \n {/* If icon left is set then call icon component and inject correct svg */}\n {iconLeft ? : null}\n\n {/* button text will go here, if any */}\n {text}\n\n {/* If API is fetching show spinner on button */}\n {isFetching ? (\n \n

Content is loading...

\n \n ) : (\n /* If icon right is set then call icon component and inject correct svg */\n iconRight && (\n \n )\n )}\n \n );\n};\n\n// Set props\nButton.propTypes = {\n btnClass: PropTypes.string, // Set custom button classes, will default to wmcads-btn (primary btn)\n disabled: PropTypes.bool, // Sets if the button is disabled or not\n iconLeft: PropTypes.string, // Set icon left on button\n iconRight: PropTypes.string, // Set icon right on button\n isActive: PropTypes.bool, // If button is active, add active class\n isFetching: PropTypes.bool,\n onClick: PropTypes.func, // Set an onclick event\n text: PropTypes.string, // text inside button\n type: PropTypes.string, // button type, by default it is type=\"button\"\n title: PropTypes.string, // title on the button\n};\n\nButton.defaultProps = {\n btnClass: '',\n disabled: false,\n iconLeft: null,\n iconRight: null,\n isActive: false,\n isFetching: false,\n onClick: null,\n text: '',\n title: null,\n type: 'button',\n};\n\nexport default Button;\n","import React, { useState, useContext } from 'react';\nimport { useFormContext } from 'react-hook-form';\n// Import contexts\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Import components\nimport GenericError from 'components/shared/Errors/GenericError';\nimport Button from 'components/shared/Button/Button';\n\nconst useStepLogic = (formRef) => {\n const { register, errors, trigger, getValues } = useFormContext(); // Get useForm methods\n const [formDataState, formDataDispatch] = useContext(FormDataContext); // Get the state/dispatch of form data from FormDataContext\n const [isContinuePressed, setIsContinuePressed] = useState(false); // State for tracking if continue has been pressed\n\n // Function for setting the step of the form\n const setStep = (step) => {\n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: step,\n });\n };\n\n // Update the current step to the correct one depending on users selection\n const handleSubmit = async (event) => {\n event.preventDefault();\n const result = await trigger();\n setIsContinuePressed(true);\n // if no errors\n if (result) {\n if (formDataState.formData.EnquiryType === 'general') {\n // if general enquiry make step 5 the conform page\n setStep(formDataState.hasReachedConfirmation ? 5 : formDataState.currentStep + 1);\n } else {\n setStep(formDataState.hasReachedConfirmation ? 6 : formDataState.currentStep + 1);\n }\n\n if (Object.keys(getValues()).includes('UploadInvitation')) {\n const payload = getValues();\n\n // upload ticket key is no longer needed\n delete payload.UploadInvitation;\n\n const file = getValues('UploadInvitation')[0];\n\n const PhotoName = file.name;\n\n const PhotoExtension = file.type.split('/')[1]; // => image/png (split at '/' and grab second part 'png')\n // Start base64'n our uploaded image\n const reader = new FileReader(); // Start new file reader\n reader.readAsDataURL(file); // Read file as dataURL\n\n // When loaded\n reader.onloadend = () => {\n // Since it contains the Data URI, we should remove the prefix and keep only Base64 string\n const PhotoBase64 = reader.result.replace(/^data:.+;base64,/, '');\n\n // Update our formData with the base64Extension and Base64 photo\n formDataDispatch({\n type: 'UPDATE_FORM_DATA',\n payload: { ...payload, PhotoName, PhotoExtension, PhotoBase64 },\n });\n };\n }\n\n formDataDispatch({ type: 'UPDATE_FORM_DATA', payload: getValues() });\n }\n // else, errors are true...\n else {\n window.scrollTo(0, formRef.current.offsetTop); // Scroll to top of form\n }\n };\n\n // Continue button\n const continueButton = (isFetching) => (\n \n );\n\n // If errors object has any keys and continue button is pressed then we should show generic error component\n const showGenericError = Object.keys(errors).length > 0 && isContinuePressed && ;\n\n return {\n setStep,\n register,\n handleSubmit,\n showGenericError,\n continueButton,\n formDataState,\n formDataDispatch,\n };\n};\n\nexport default useStepLogic;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport dompurify from 'dompurify';\n// Import contexts\nimport { FormDataContext } from 'globalState/FormDataContext';\n\nconst { sanitize } = dompurify;\n\nconst Radio = ({ name, fieldValidation, text, value }) => {\n const [formDataState] = useContext(FormDataContext); // Get the state of form data from FormDataContext\n\n return (\n <>\n \n \n );\n};\n\n// PropTypes\nRadio.propTypes = {\n name: PropTypes.string.isRequired,\n fieldValidation: PropTypes.func,\n text: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n};\n\nRadio.defaultProps = {\n fieldValidation: null,\n};\n\nexport default Radio;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport dompurify from 'dompurify';\n// Import contexts\nimport { useFormContext } from 'react-hook-form';\n// Import components\nimport Radio from './Radio/Radio';\n\nconst { sanitize } = dompurify;\n\nconst Radios = ({ name, classes, label, radios, fieldValidation }) => {\n const { errors } = useFormContext();\n\n return (\n
\n
\n \n {label &&

{label}

}\n {/* If there is an error, show here */}\n {errors[name] && (\n \n )}\n
\n
\n {/* Loop through radios and display each radio button */}\n {radios.map((radio) => (\n \n ))}\n
\n
\n
\n );\n};\n\n// PropTypes\nRadios.propTypes = {\n fieldValidation: PropTypes.func,\n classes: PropTypes.string,\n name: PropTypes.string.isRequired,\n label: PropTypes.string,\n radios: PropTypes.arrayOf(PropTypes.objectOf(PropTypes.string, PropTypes.string)).isRequired,\n};\n\nRadios.defaultProps = {\n fieldValidation: null,\n classes: null,\n label: null,\n};\n\nexport default Radios;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction InsetText(props) {\n const { content, classes } = props;\n return
{content}
;\n}\n\nInsetText.propTypes = {\n content: PropTypes.string.isRequired,\n classes: PropTypes.string,\n};\nInsetText.defaultProps = {\n classes: null,\n};\n\nexport default InsetText;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useRef, useContext } from 'react';\n// Context\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport Radios from 'components/shared/FormElements/Radios/Radios';\nimport InsetText from 'components/shared/InsetText/InsetText';\n\nconst EnquirySelection = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register, handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n const radioButtons = [\n { text: 'The Mayor', value: 'mayor' },\n { text: 'A general enquiry', value: 'general' },\n { text: 'WMCA strategy', value: 'strategy' },\n { text: 'Freedom of information, whistleblowing and fraud, jobs at WMCA', value: 'other' },\n ];\n\n const [formDataState] = useContext(FormDataContext);\n const { EnquiryType } = formDataState.formData;\n const { MayorEnquiry } = formDataState.formData;\n const { StrategyEnquiry } = formDataState.formData;\n\n // Make mayor enquiry null so it hides event info on other paths\n if (EnquiryType !== 'mayor' && MayorEnquiry != null) {\n formDataState.formData.MayorEnquiry = null;\n }\n\n // Make strategy enquiry null so it hides on other paths\n if (EnquiryType !== 'strategy' && StrategyEnquiry != null) {\n formDataState.formData.StrategyEnquiry = null;\n }\n\n // Add InsetText with extra info when selected option is \"no\"\n let extraInfo;\n const selectedOption = document.querySelector(\n 'input.wmcads-fe-radios__input[name=\"Enquiry\"]:checked'\n );\n if (selectedOption && selectedOption.value === 'no') {\n extraInfo = (\n \n );\n }\n\n const title = 'What is your enquiry about?';\n\n return (\n
\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

{title}

\n
\n\n \n\n {extraInfo}\n
\n\n {/* Continue button */}\n {continueButton()}\n
\n );\n};\n\nexport default EnquirySelection;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction SectionStepInfo(props) {\n const { section, description } = props;\n return (\n
\n {section}\n

{description}

\n
\n );\n}\n\nSectionStepInfo.propTypes = {\n section: PropTypes.string.isRequired,\n description: PropTypes.string,\n};\n\nSectionStepInfo.defaultProps = {\n description: null,\n};\n\nexport default SectionStepInfo;\n","import { useContext } from 'react';\nimport { FormDataContext } from '../../globalState/FormDataContext';\n\nconst useFormData = () => {\n const [formDataState] = useContext(FormDataContext);\n\n const { Firstname, LastName, Phone } = formDataState.formData;\n return {\n Firstname,\n LastName,\n Phone,\n };\n};\n\nexport default useFormData;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport Radios from 'components/shared/FormElements/Radios/Radios';\nimport SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\nimport InsetText from 'components/shared/InsetText/InsetText';\nimport useFormData from '../../useFormData';\n\nconst MayorEnquiry = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register, handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n const radioButtons = [\n { text: 'An enquiry for the Mayor’s office', value: 'An enquiry for the Mayor’s office' },\n { text: 'Invite the Mayor to an event', value: 'Invite the Mayor to an event' },\n ];\n\n // Add InsetText with extra info when selected option is \"no\"\n let extraInfo;\n const selectedOption = document.querySelector(\n 'input.wmcads-fe-radios__input[name=\"MayorEnquiry\"]:checked'\n );\n if (selectedOption && selectedOption.value === 'no') {\n extraInfo = (\n \n );\n }\n\n // Check if it is an existing user already\n const { ExistingUser } = useFormData();\n const title = 'The Mayor';\n\n return (\n
\n {/* Subsection */}\n {!ExistingUser && }\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

{title}

\n
\n\n \n\n {extraInfo}\n
\n\n {/* Continue button */}\n {continueButton()}\n \n );\n};\n\nexport default MayorEnquiry;\n","import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport dompurify from 'dompurify';\n// Import contexts\nimport { useFormContext } from 'react-hook-form';\nimport { FormDataContext } from 'globalState/FormDataContext';\n\nconst { sanitize } = dompurify;\n\nconst Input = ({\n autocomplete,\n className,\n fieldValidation,\n inputmode,\n label,\n name,\n spellcheck,\n type,\n APIerrors,\n}) => {\n const [formDataState] = useContext(FormDataContext); // Get the state of form data from FormDataContext\n const { errors } = useFormContext();\n // Set input to render below\n const input = (\n <>\n \n \n );\n\n return (\n
\n {label && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n \n )}\n {/* If there is an API error, show here */}\n {APIerrors}\n\n {/* If there is an error (and error is a string) show here */}\n {errors[name] && typeof errors[name].message === 'string' && (\n \n )}\n {/* If there is an error (and error is a react element) show here */}\n {errors[name] && typeof errors[name].message !== 'string' && errors[name].message}\n\n {/* If className then wrap just input with the className else, just show input as usual */}\n {className ?
{input}
: input}\n
\n );\n};\n\nInput.propTypes = {\n autocomplete: PropTypes.string,\n className: PropTypes.string,\n fieldValidation: PropTypes.func,\n inputmode: PropTypes.string,\n label: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n spellcheck: PropTypes.bool,\n type: PropTypes.string,\n APIerrors: PropTypes.element,\n};\n\nInput.defaultProps = {\n autocomplete: null,\n className: '',\n fieldValidation: null,\n inputmode: 'text',\n spellcheck: false,\n type: 'text',\n APIerrors: null,\n};\n\nexport default Input;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport Input from 'components/shared/FormElements/Input/Input';\n\nconst EventName = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n const label = 'Name of event';\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n return (\n \n );\n};\n\nexport default EventName;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n// Import contexts\nimport { useFormContext } from 'react-hook-form';\n\nconst DateInput = ({ autoComplete, dateType, defaultValue, fieldValidation, onChange, name }) => {\n const { errors } = useFormContext();\n const inputName = name + dateType;\n\n return (\n <>\n \n \n \n );\n};\n\nDateInput.propTypes = {\n autoComplete: PropTypes.string,\n dateType: PropTypes.string.isRequired,\n defaultValue: PropTypes.string,\n fieldValidation: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n name: PropTypes.string.isRequired,\n};\n\nDateInput.defaultProps = {\n autoComplete: null,\n defaultValue: '',\n fieldValidation: null,\n};\n\nexport default DateInput;\n","import React, { useState, useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\n// Import contexts\nimport { useFormContext } from 'react-hook-form';\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Import components\nimport DateInput from './DateInput.js/DateInput';\n\nconst Date = ({ autoCompletPrefix, fieldValidation, name, label }) => {\n const [formDataState] = useContext(FormDataContext); // Get the state/dispatch of form data from FormDataContext\n const { errors, trigger } = useFormContext();\n\n const [stateYear, stateMonth, stateDay] = formDataState.formData[name]\n ? formDataState.formData[name].split('-')\n : ['', '', ''];\n\n // State used for capturing date fields onChange below (we use these to validate against below)\n const [day, setDay] = useState(stateDay);\n const [month, setMonth] = useState(stateMonth);\n const [year, setYear] = useState(stateYear);\n const [date, setDate] = useState(formDataState.formData[name]);\n\n const handleChange = (e) => {\n const { value } = e.target;\n\n // Switch on the input name, depending on name then update the relevant var\n switch (e.target.name) {\n case `${name}Day`:\n // If value is less than ten and greater than 0 (1-9) and is only 1 in length (so not 08)\n if (value < 10 && value > 0 && value.length === 1) {\n setDay(0 + value); // Then prepend a 0 to it to make it a valid day\n } else {\n setDay(value);\n }\n break;\n case `${name}Month`:\n // If value is less than ten and greater than 0 (1-9) and is only 1 in length (so not 08)\n if (value < 10 && value > 0 && value.length === 1) {\n setMonth(0 + value); // Then prepend a 0 to it to make it a valid month\n } else {\n setMonth(value);\n }\n break;\n default:\n setYear(value);\n }\n };\n\n useEffect(() => {\n if (year && month && day) {\n setDate(`${year}-${month}-${day}`);\n } // Set date state to current yyyy-mm-dd set by user (would do it in handleChange event but it falls out of sync)\n }, [day, month, year, setDate]);\n\n // Trigger validation every time date has been updated\n useEffect(() => {\n if (date) trigger();\n }, [date, trigger]);\n\n return (\n <>\n {/* If there is an error, show here */}\n {errors[name] && {errors[name].message}}\n\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n \n );\n};\n\nDate.propTypes = {\n autoCompletPrefix: PropTypes.string,\n fieldValidation: PropTypes.func,\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n};\n\nDate.defaultProps = {\n autoCompletPrefix: '',\n fieldValidation: null,\n};\n\nexport default Date;\n","const d = new Date().toISOString().slice(0, 10); // Set todays date as yyyy-mm-dd\n\nconst dateRegex =\n /^((((19[0-9][0-9])|(2[0-9][0-9][0-9]))([-])(0[13578]|10|12)([-])(0[1-9]|[12][0-9]|3[01]))|(((19[0-9][0-9])|(2[0-9][0-9][0-9]))([-])(0[469]|11)([-])([0][1-9]|[12][0-9]|30))|(((19[0-9][0-9])|(2[0-9][0-9][0-9]))([-])(02)([-])(0[1-9]|1[0-9]|2[0-8]))|(([02468][048]00)([-])(02)([-])(29))|(([13579][26]00)([-])(02)([-])(29))|(([0-9][0-9][0][48])([-])(02)([-])(29))|(([0-9][0-9][2468][048])([-])(02)([-])(29))|(([0-9][0-9][13579][26])([-])(02)([-])(29)))$/; // Date regex http://regexlib.com/REDetails.aspx?regexp_id=1850\n\nconst months = {\n '01': 'January',\n '02': 'February',\n '03': 'March',\n '04': 'April',\n '05': 'May',\n '06': 'June',\n '07': 'July',\n '08': 'August',\n '09': 'September',\n 10: 'October',\n 11: 'November',\n 12: 'December',\n};\n\n// determine if number is between two values\nconst between = (number, min, max) => number >= min && number <= max;\n\n// return date as an array [yyyy, mm, dd]\nconst dateSplit = (date) => date.split('-');\n\n// make sure day entry is valid\nconst validateDay = (value) => between(dateSplit(value)[2], 1, 31);\n\n// make sure month entry is between 1 & 12\nconst validateMonth = (value) => between(dateSplit(value)[1], 1, 12);\n\n// check if date is in the past (years ago)\nconst pastDate = (value, yearsAgo = 0) =>\n d > value && dateSplit(value)[0] <= dateSplit(d)[0] - yearsAgo;\n\n// check if date is in the future (years)\nconst futureDate = (value, yearsAgo = 0) =>\n d < value && dateSplit(value)[0] >= dateSplit(d)[0] - yearsAgo;\n\nconst getDaysFromNow = (fromNow) => {\n const dateFromNow = new Date(); // Now\n const newDate = () => dateFromNow.toISOString().slice(0, 10);\n dateFromNow.setDate(dateFromNow.getDate() + fromNow);\n return newDate();\n};\n\nconst daysFromNow = (value, fromNow) => {\n const newDate = getDaysFromNow(fromNow);\n return fromNow < 0 ? value >= newDate : value <= newDate;\n};\n\nconst getDateFormatted = (val, includeYear = true) => {\n const date = val.split('-');\n\n return includeYear ? `${date[2]} ${months[date[1]]} ${date[0]}` : `${date[2]} ${months[date[1]]}`;\n};\n\nconst dateValidationHelpers = {\n dateRegex,\n validateDay,\n validateMonth,\n getDateFormatted,\n daysFromNow,\n getDaysFromNow,\n pastDate,\n futureDate,\n months,\n};\n\nexport default dateValidationHelpers;\n","import React from 'react';\n// Import contexts\nimport { useFormContext } from 'react-hook-form';\n// Import components\nimport DateInput from 'components/shared/FormElements/Date/Date';\nimport Input from 'components/shared/FormElements/Input/Input';\nimport Radios from 'components/shared/FormElements/Radios/Radios';\n// Import helper functions\nimport dateValidationHelpers from 'components/shared/FormElements/Date/dateValidationHelpers';\n\nconst DOB = () => {\n const { register } = useFormContext(); // Custom hook for handling validation (errors etc)\n\n const { dateRegex, futureDate } = dateValidationHelpers;\n\n const dateValidation = register({\n required: 'Enter a Date of event',\n pattern: {\n value: dateRegex,\n message: 'Enter Date of event in the correct format, for example 18 03 2020',\n },\n validate: {\n futureDate: (value) => futureDate(value, 10) || 'Date of event must be in the future',\n },\n });\n\n const radioButtons = [\n { text: '30 Minutes', value: '30 Minutes' },\n { text: '45 Minutes', value: '45 Minutes' },\n { text: '60 Minutes', value: '60 Minutes' },\n { text: 'Other', value: 'Other' },\n ];\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n return (\n <>\n \n \n \n \n );\n};\n\nexport default DOB;\n","import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport dompurify from 'dompurify';\n// Import contexts\nimport { useFormContext } from 'react-hook-form';\nimport { FormDataContext } from 'globalState/FormDataContext';\n\nconst { sanitize } = dompurify;\n\nconst Textarea = ({\n className,\n fieldValidation,\n inputmode,\n label,\n name,\n spellcheck,\n type,\n APIerrors,\n}) => {\n const [formDataState] = useContext(FormDataContext); // Get the state of form data from FormDataContext\n const { errors } = useFormContext();\n // Set input to render below\n const input = (\n <>\n \n \n );\n\n return (\n
\n {label && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n \n )}\n {/* If there is an API error, show here */}\n {APIerrors}\n\n {/* If there is an error (and error is a string) show here */}\n {errors[name] && typeof errors[name].message === 'string' && (\n \n )}\n {/* If there is an error (and error is a react element) show here */}\n {errors[name] && typeof errors[name].message !== 'string' && errors[name].message}\n\n {/* If className then wrap just input with the className else, just show input as usual */}\n {className ?
{input}
: input}\n
\n );\n};\n\nTextarea.propTypes = {\n className: PropTypes.string,\n fieldValidation: PropTypes.func,\n inputmode: PropTypes.string,\n label: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n spellcheck: PropTypes.bool,\n type: PropTypes.string,\n APIerrors: PropTypes.element,\n};\n\nTextarea.defaultProps = {\n className: '',\n fieldValidation: null,\n inputmode: 'text',\n spellcheck: false,\n type: 'text',\n APIerrors: null,\n};\n\nexport default Textarea;\n","import React from 'react';\n// Import contexts\nimport { useFormContext } from 'react-hook-form';\n// Import components\nimport Input from 'components/shared/FormElements/Input/Input';\nimport Textarea from 'components/shared/FormElements/Input/textarea';\n\nconst Address = () => {\n const { register } = useFormContext(); // Custom hook for handling validation (errors etc)\n\n const postcodeRegex =\n /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/;\n\n return (\n
\n {/* Address */}\n \n\n {/* Postcode */}\n \n
\n );\n};\n\nexport default Address;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport Input from 'components/shared/FormElements/Input/textarea';\n\nconst Description = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n const label = 'Short description of event';\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n return (\n \n );\n};\n\nexport default Description;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n// Import components\nimport Icon from 'components/shared/Icon/Icon';\n// Import contexts\nimport { useFormContext } from 'react-hook-form';\n// Import styles\nimport s from './FileUpload.module.scss';\n\nconst FileUpload = ({ name, fieldValidation }) => {\n const { errors } = useFormContext();\n\n // Local state for controlling file upload\n const [isFileInputFocused, setIsFileInputFocused] = useState(false); // This is used to emulate the input focus class on the label\n const [fileName, setFileName] = useState('Upload photo'); // Used to change the name of the input/label button to the users file name\n\n const handleChange = (e) => {\n const file = e.target.files[0];\n\n // If a file exists (user hasn't clicked cancel button or something)\n if (file) {\n setFileName(file.name); // Set file name that the user has chosen (this will display in our label)\n }\n };\n\n // HandleFocus (when user joins input)\n const handleFocus = () => {\n setIsFileInputFocused(true); // Set input to focus\n };\n\n // Handleblur (when user leaves input), set input to unfocus\n const handleBlur = () => setIsFileInputFocused(false);\n\n return (\n
\n \n

Attach formal invitation

\n

The file must be a JPG, PNG or PDF.

\n
\n
\n {/* If there is an error, show here */}\n {errors[name] && {errors[name].message}}\n \n {fileName}\n \n \n \n
\n
\n );\n};\n\nFileUpload.propTypes = {\n name: PropTypes.string.isRequired,\n fieldValidation: PropTypes.func,\n};\n\nFileUpload.defaultProps = {\n fieldValidation: null,\n};\n\nexport default FileUpload;\n","import React from 'react';\n// Import components\nimport { useFormContext } from 'react-hook-form';\nimport FileUpload from './FileUpload/FileUpload';\n\nconst UploadInvitation = () => {\n const { register } = useFormContext();\n\n const fileValidation = (uploadedFiles) => {\n let error;\n\n const file = uploadedFiles[0];\n\n // If a file exists (user hasn't clicked cancel button or something)\n if (file) {\n const PhotoBase64Extension = file.type.split('/')[1]; // => image/png (split at '/' and grab second part 'png')\n\n if (\n PhotoBase64Extension !== 'png' &&\n PhotoBase64Extension !== 'jpg' &&\n PhotoBase64Extension !== 'jpeg' &&\n PhotoBase64Extension !== 'pdf'\n ) {\n error = 'The selected file must be a JPG, PNG or PDF';\n } else if (file.size > 4194304) {\n error = 'The selected file must be smaller than 4MB';\n }\n }\n\n return error;\n };\n\n const fileUploadValidation = register({\n required: 'Select a photo',\n validate: {\n fileValid: (value) => fileValidation(value) && fileValidation(value),\n },\n });\n\n return (\n <>\n \n \n );\n};\n\nexport default UploadInvitation;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\nimport useFormData from '../../../useFormData';\nimport EventName from './EventName/EventName';\nimport Date from './Date/Date';\nimport Address from './Address/Address';\nimport Description from './Description/Description';\nimport Invitation from './Invitation/Invitation';\n\nconst Event = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Check it we are facing an existing user\n const { ExistingUser } = useFormData();\n\n return (\n
\n {/* Subsection */}\n {!ExistingUser && }\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

What event would you like to invite the Mayor to?

\n
\n\n \n \n
\n \n \n
\n\n {/* Continue button */}\n {continueButton()}\n \n );\n};\n\nexport default Event;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport Input from 'components/shared/FormElements/Input/Input';\n\nconst Name = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register, showGenericError } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Labels used on inputs and for validation\n const fNameLabel = 'First name';\n const lNameLabel = 'Last name';\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n return (\n
\n {/* Show generic error message */}\n {showGenericError}\n\n \n \n
\n );\n};\n\nexport default Name;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport Input from 'components/shared/FormElements/Input/Input';\nimport SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\nimport useFormData from '../../../useFormData';\nimport Name from '../../../Shared/Name/NoFieldset/Name';\n\nconst Who = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register, handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Check it we are facing an existing user\n const { ExistingUser } = useFormData();\n\n // Labels used on inputs and for validation\n const label = 'Company name';\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n return (\n
\n {/* Subsection */}\n {!ExistingUser && }\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

Who is inviting the Mayor?

\n
\n\n \n\n \n
\n\n {/* Continue button */}\n {continueButton()}\n \n );\n};\n\nexport default Who;\n","import { useState, useContext } from 'react';\nimport axios from 'axios';\nimport { useFormContext } from 'react-hook-form';\n// Import contexts\nimport { FormDataContext } from 'globalState/FormDataContext';\n\nconst useSubmitForm = (setFormSubmitStatus) => {\n const [formDataState] = useContext(FormDataContext); // Get the state/dispatch of form data from FormDataContext\n const { trigger } = useFormContext(); // Get useForm methods\n const [isFetching, setIsFetching] = useState(false);\n const [APIErrorMessage, setAPIErrorMessage] = useState(null);\n\n // Destructure values from our formDataState (get all users values)\n const {\n EnquiryType,\n MayorEnquiry,\n StrategyEnquiry,\n OtherEnquiry,\n ContactEmail,\n ContactPhone,\n Firstname,\n LastName,\n Enquiry,\n EventName,\n EventStartTime,\n EventDuration,\n DateOfEvent,\n Address,\n AddressPostcode,\n EventDescription,\n Company,\n InformationRequested,\n ExtraDetails,\n AllegationDetails,\n ExtraAllegationDetails,\n JobsEnquiry,\n PhotoName,\n PhotoBase64,\n } = formDataState.formData;\n\n // Map all destructured vals above to an object we will send to API\n let dataToSend = {};\n let file = [];\n let email = 3;\n // eslint-disable-next-line\n if (EnquiryType === 'general') {\n dataToSend = {\n 'First Name': Firstname,\n 'Last Name': LastName,\n Email: ContactEmail,\n 'Phone Number': ContactPhone,\n 'Enquiry Type': EnquiryType,\n Enquiry,\n };\n // eslint-disable-next-line\n } else if (EnquiryType === 'strategy') {\n dataToSend = {\n 'First Name': Firstname,\n 'Last Name': LastName,\n Email: ContactEmail,\n 'Phone Number': ContactPhone,\n 'Enquiry Type': EnquiryType,\n 'Strategy Enquiry': StrategyEnquiry,\n Enquiry,\n };\n } else if (\n // eslint-disable-next-line\n EnquiryType === 'mayor' &&\n MayorEnquiry === 'An enquiry for the Mayor’s office'\n ) {\n dataToSend = {\n 'First Name': Firstname,\n 'Last Name': LastName,\n Email: ContactEmail,\n 'Phone Number': ContactPhone,\n 'Enquiry Type': EnquiryType,\n 'Mayor Enquiry': MayorEnquiry,\n Enquiry,\n };\n // eslint-disable-next-line\n } else if (EnquiryType === 'mayor' && MayorEnquiry === 'Invite the Mayor to an event') {\n dataToSend = {\n 'First Name': Firstname,\n 'Last Name': LastName,\n Email: ContactEmail,\n 'Phone Number': ContactPhone,\n 'Enquiry Type': EnquiryType,\n 'Mayor Enquiry': MayorEnquiry,\n 'Event Name': EventName,\n 'Date of event': DateOfEvent,\n 'Event Start Time': EventStartTime,\n 'Event Duration': EventDuration,\n Address,\n Postcode: AddressPostcode,\n 'Event Description': EventDescription,\n Company,\n };\n file = [{ name: PhotoName, content: PhotoBase64 }];\n email = 11;\n // eslint-disable-next-line\n } else if (EnquiryType === 'other' && OtherEnquiry === 'Freedom of information request') {\n dataToSend = {\n 'First Name': Firstname,\n 'Last Name': LastName,\n Email: ContactEmail,\n 'Phone Number': ContactPhone,\n 'Enquiry Type': EnquiryType,\n 'Other Enquiry': OtherEnquiry,\n 'Information Requested': InformationRequested,\n 'Extra Details': ExtraDetails,\n };\n email = 10;\n // eslint-disable-next-line\n } else if (EnquiryType === 'other' && OtherEnquiry === 'Whistleblowing and fraud') {\n dataToSend = {\n 'First Name': Firstname,\n 'Last Name': LastName,\n Email: ContactEmail,\n 'Phone Number': ContactPhone,\n 'Enquiry Type': EnquiryType,\n 'Other Enquiry': OtherEnquiry,\n 'Allegation Details': AllegationDetails,\n 'Extra Allegation Details': ExtraAllegationDetails,\n };\n email = 17;\n // eslint-disable-next-line\n } else if (EnquiryType === 'other' && OtherEnquiry === 'Jobs at the WMCA') {\n dataToSend = {\n 'First Name': Firstname,\n 'Last Name': LastName,\n Email: ContactEmail,\n 'Phone Number': ContactPhone,\n 'Enquiry Type': EnquiryType,\n 'Other Enquiry': OtherEnquiry,\n 'Jobs Enquiry': JobsEnquiry,\n };\n } else {\n dataToSend = {\n 'First Name': Firstname,\n 'Last Name': LastName,\n Email: ContactEmail,\n 'Phone Number': ContactPhone,\n 'Enquiry Type': EnquiryType,\n 'Strategy Enquiry': StrategyEnquiry,\n 'Other Enquiry': OtherEnquiry,\n 'Jobs Enquiry': JobsEnquiry,\n Enquiry,\n 'Allegation Details': AllegationDetails,\n 'Extra Allegation Details': ExtraAllegationDetails,\n 'Information Requested': InformationRequested,\n 'Extra Details': ExtraDetails,\n 'Event Name': EventName,\n 'Date Of Event': DateOfEvent,\n 'Event Start Time': EventStartTime,\n 'Event Duration': EventDuration,\n Address,\n Postcode: AddressPostcode,\n 'Event Description': EventDescription,\n Company,\n };\n email = 3;\n }\n\n // axios.interceptors.request.use((request) => {\n // console.log('Starting Request', JSON.stringify(request, null, 2));\n // return request;\n // });\n\n const handleSubmit = async (event) => {\n event.preventDefault(); // Prevent default form submission method\n // Validation\n const result = await trigger();\n // if no errors\n if (result) {\n // Start submitting API\n setIsFetching(true); // Set this so we can put loading state on button\n\n // Go hit the API with the data\n axios({\n method: 'post',\n url: `${process.env.REACT_APP_API_HOST}/emails/api/email`,\n data: JSON.stringify({\n to: email,\n body: JSON.stringify(dataToSend),\n from: `${ContactEmail}`,\n subject: `WMCA Contact Form: ${EnquiryType}`,\n files: file,\n displayName: `${Firstname} ${LastName}`,\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n .then((response) => {\n // If the response is successful(200: OK) or error with validation message(400)\n if (response.status === 200 || response.status === 400) {\n const payload = response.config.data;\n\n // Log event to analytics/tag manager\n window.dataLayer.push({\n event: 'formAbandonment',\n eventCategory: 'wmca-contact-us',\n eventAction: 'form submitted: success',\n eventLabel: 'success',\n });\n setIsFetching(false); // set to false as we are done fetching now\n if (payload.Message) {\n setAPIErrorMessage(payload.Message);\n } else {\n setFormSubmitStatus(true); // Set form status to success\n window.scrollTo(0, 0); // Scroll to top of page\n // set success page\n }\n return true;\n }\n throw new Error(response.statusText, response.Message); // Else throw error and go to our catch below\n })\n\n // If formsubmission errors\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error({ error });\n let errMsg;\n\n if (error.text) {\n error.text().then((errorMessage) => {\n errMsg = errorMessage;\n });\n } else {\n errMsg = error;\n }\n\n // Log event to analytics/tag manager\n window.dataLayer.push({\n event: 'formAbandonment',\n eventCategory: 'wmca-contact-us',\n eventAction: 'form submitted: error',\n eventLabel: errMsg,\n });\n setIsFetching(false); // set to false as we are done fetching now\n setFormSubmitStatus(false); // Set form status to error\n window.scrollTo(0, 0); // Scroll to top of page\n // set error message\n });\n }\n };\n\n // Return handleSubmit and isFetching so it can be used by form\n return {\n handleSubmit,\n isFetching,\n APIErrorMessage,\n };\n};\n\nexport default useSubmitForm;\n","/* eslint-disable react/no-array-index-key */\nimport React from 'react';\nimport PropTypes, { arrayOf } from 'prop-types';\n\nfunction Table({ title, caption, headers, values, classes, cellClasses }) {\n const noHeadersClass = headers && headers.lenght > 0 ? '' : 'wmcads-table--without-header';\n\n return (\n <>\n {title &&

{title}

}\n \n {caption && }\n {headers && headers.lenght > 0 && (\n \n \n {headers.map((value, index) => {\n return (\n \n );\n })}\n \n \n )}\n\n {values && (\n \n {values.map((line, lineIndex) => {\n return (\n \n {line.map((col, index) => {\n if (index === 0)\n return (\n \n {col}\n \n );\n return (\n \n );\n })}\n \n );\n })}\n \n )}\n
{caption}
\n {value}\n
\n {col}\n
\n \n );\n}\n\nTable.propTypes = {\n title: PropTypes.string,\n caption: PropTypes.string,\n headers: PropTypes.arrayOf(PropTypes.element),\n values: PropTypes.arrayOf(arrayOf(PropTypes.element)),\n classes: PropTypes.string,\n cellClasses: PropTypes.arrayOf(PropTypes.string),\n};\nTable.defaultProps = {\n headers: [],\n values: [[]],\n title: null,\n caption: null,\n classes: null,\n cellClasses: null,\n};\n\nexport default Table;\n","/* eslint-disable react/no-array-index-key */\nimport React from 'react';\nimport PropTypes, { arrayOf } from 'prop-types';\n\nfunction Table({ title, caption, headers, values, classes, cellClasses }) {\n const noHeadersClass = headers && headers.lenght > 0 ? '' : 'wmcads-table--without-header';\n\n return (\n <>\n {title &&

{title}

}\n \n {caption && }\n {headers && headers.lenght > 0 && (\n \n \n {headers.map((value, index) => {\n return (\n \n );\n })}\n \n \n )}\n\n {values && (\n \n {values.map((line, lineIndex) => {\n return (\n \n {line.map((col, index) => {\n if (index === 0)\n return (\n \n {col}\n \n );\n return (\n \n );\n })}\n \n );\n })}\n \n )}\n
{caption}
\n {value}\n
\n {col}\n
\n \n );\n}\n\nTable.propTypes = {\n title: PropTypes.string,\n caption: PropTypes.string,\n headers: PropTypes.arrayOf(PropTypes.element),\n values: PropTypes.arrayOf(arrayOf(PropTypes.element)),\n classes: PropTypes.string,\n cellClasses: PropTypes.arrayOf(PropTypes.string),\n};\nTable.defaultProps = {\n headers: [],\n values: [[]],\n title: null,\n caption: null,\n classes: null,\n cellClasses: null,\n};\n\nexport default Table;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport dompurify from 'dompurify';\n\n// Import contexts\nimport { useFormContext } from 'react-hook-form';\nimport { FormDataContext } from 'globalState/FormDataContext';\n\nimport Icon from '../../Icon/Icon';\n\nconst { sanitize } = dompurify;\n\nconst InputCheckbox = ({\n fieldValidation,\n name,\n labelValue,\n handleChange,\n labelElement,\n classes,\n}) => {\n const [formDataState] = useContext(FormDataContext); // Get the state of form data from FormDataContext\n const { errors } = useFormContext();\n // Set input to render below\n\n return (\n
\n {errors[name] && (\n \n )}\n\n \n
\n );\n};\n\nInputCheckbox.propTypes = {\n labelValue: PropTypes.string,\n fieldValidation: PropTypes.func,\n handleChange: PropTypes.func,\n name: PropTypes.string.isRequired,\n classes: PropTypes.string,\n labelElement: PropTypes.element,\n};\n\nInputCheckbox.defaultProps = {\n labelValue: null,\n labelElement: null,\n handleChange: null,\n fieldValidation: null,\n classes: null,\n};\n\nexport default InputCheckbox;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport InputCheckbox from '../../../../shared/FormElements/Input/InputCheckbox';\n\nconst StepConsentForm = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Labels used on inputs and for validation\n const checkBoxLabel = (\n <>\n Agree to the  \n \n terms and conditions\n \n  \n \n );\n const policyCheckBoxLabel = (\n <>\n Agree to the  \n \n privacy policy\n \n  \n \n );\n\n // Logic used to validate the terms field\n const checkboxValidation = register({\n required: 'Agree to terms and conditions before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to terms and conditions before continue',\n },\n });\n // Logic used to validate the policy field\n const polictCheckboxValidation = register({\n required: 'Agree to privacy policy before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to privacy policy before continue',\n },\n });\n\n return (\n
\n \n \n
\n );\n};\n\nexport default StepConsentForm;\n","import React, { useContext } from 'react';\n// Hooks\n\n// Context\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Components\nimport Table from 'components/shared/Table/Table';\nimport Table2 from 'components/shared/Table/Table-2-col';\nimport ConsentForm from './StepConsentForm';\n\nfunction StepSummarySection() {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n const { Firstname, LastName, MayorGeneralEnquiry, ContactEmail, ContactPhone, Phone } =\n formDataState.formData;\n\n const setStepInContext = (st) => {\n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: st,\n });\n };\n\n const title = 'Check your answers';\n\n /* Table Data */\n\n // enquiry\n const dataLine1 = [];\n if (MayorGeneralEnquiry) {\n dataLine1.push({MayorGeneralEnquiry});\n dataLine1.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n }\n\n // name\n const dataLine2 = [];\n dataLine2.push(Name);\n dataLine2.push({`${Firstname} ${LastName}`});\n dataLine2.push(\n {\n setStepInContext(4);\n }}\n >\n Change\n \n );\n\n // contact information\n const dataLine3 = [];\n dataLine3.push(How would you like to be contacted?);\n if (ContactEmail !== null && ContactPhone === null) {\n dataLine3.push(\n \n Email\n
{ContactEmail}\n
\n );\n } else if (ContactEmail === null && ContactPhone) {\n dataLine3.push(\n \n Phone\n
{ContactPhone}\n
\n );\n } else if (ContactEmail && ContactPhone) {\n dataLine3.push(\n
\n \n Email\n
{ContactEmail}\n
\n
\n
\n \n Phone\n
{ContactPhone}\n
\n
\n );\n }\n\n dataLine3.push(\n {\n setStepInContext(5);\n }}\n >\n Change\n \n );\n\n /* End of Table Data */\n\n const enquiry = [dataLine1];\n const data = [dataLine2, dataLine3];\n\n if (Phone) {\n data.push(dataLine3);\n }\n\n return (\n <>\n
\n

{title}

\n \n\n \n\n

Now send your enquiry

\n

\n By submitting this enquiry you are confirming that, to the best of your knowledge, the\n details you are providing are correct.\n

\n \n
\n \n );\n}\n\nexport default StepSummarySection;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\n// Import custom hooks\nimport useSubmitForm from '../../../useSubmitForm';\nimport SummarySection from './StepSummarySection';\nimport StepConsentForm from './StepConsentForm';\nimport { FormDataContext } from '../../../../../globalState/FormDataContext';\nimport Button from '../../../../shared/Button/Button';\n\nfunction StepConfirm({ setFormSubmitStatus }) {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n // Get handleSubmit fn and isFetching from custom hook which handles submitting data to API (this is used in the last step[4])\n const { handleSubmit, isFetching, APIErrorMessage } = useSubmitForm(setFormSubmitStatus);\n useEffect(() => {\n if (formDataState.currentStep === 6) {\n formDataDispatch({\n type: 'REACHED_CONFIRMATION',\n payload: true,\n });\n }\n }, [formDataDispatch, formDataState.currentStep]);\n\n return (\n
\n {/* If we get any errors back from the server, show here */}\n {APIErrorMessage && {APIErrorMessage}}\n \n\n
\n {formDataState.formData.EmailAlert === 'yes' && !formDataState.formData.ExistingUser && (\n \n )}\n \n
\n \n );\n}\n\nStepConfirm.propTypes = {\n setFormSubmitStatus: PropTypes.func.isRequired,\n};\n\nexport default StepConfirm;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport InputCheckbox from '../../../../shared/FormElements/Input/InputCheckbox';\n\nconst StepConsentForm = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Labels used on inputs and for validation\n const checkBoxLabel = (\n <>\n Agree to the  \n \n terms and conditions\n \n  \n \n );\n const policyCheckBoxLabel = (\n <>\n Agree to the  \n \n privacy policy\n \n  \n \n );\n\n // Logic used to validate the terms field\n const checkboxValidation = register({\n required: 'Agree to terms and conditions before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to terms and conditions before continue',\n },\n });\n // Logic used to validate the policy field\n const polictCheckboxValidation = register({\n required: 'Agree to privacy policy before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to privacy policy before continue',\n },\n });\n\n return (\n
\n \n \n
\n );\n};\n\nexport default StepConsentForm;\n","import React, { useContext } from 'react';\n// Hooks\n\n// Context\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Components\nimport Table from 'components/shared/Table/Table';\nimport ConsentForm from './StepConsentForm';\n\nfunction StepSummarySection() {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n const {\n Firstname,\n LastName,\n Company,\n ContactEmail,\n ContactPhone,\n Phone,\n EventName,\n DateOfEvent,\n Address,\n AddressPostcode,\n EventDescription,\n } = formDataState.formData;\n\n const setStepInContext = (st) => {\n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: st,\n });\n };\n\n const title = 'Check your answers';\n\n /* Table Data */\n\n // name\n const dataLine1 = [];\n dataLine1.push(Name);\n dataLine1.push({`${Firstname} ${LastName}`});\n dataLine1.push(\n {\n setStepInContext(4);\n }}\n >\n Change\n \n );\n\n // contact information\n const dataLine2 = [];\n dataLine2.push(How would you like to be contacted?);\n if (ContactEmail !== null && ContactPhone === null) {\n dataLine2.push(\n \n Email\n
{ContactEmail}\n
\n );\n } else if (ContactEmail === null && ContactPhone) {\n dataLine2.push(\n \n Phone\n
{ContactPhone}\n
\n );\n } else if (ContactEmail && ContactPhone) {\n dataLine2.push(\n
\n \n Email\n
{ContactEmail}\n
\n
\n
\n \n Phone\n
{ContactPhone}\n
\n
\n );\n }\n\n dataLine2.push(\n {\n setStepInContext(5);\n }}\n >\n Change\n \n );\n\n const dataLine3 = [];\n dataLine3.push(Company);\n dataLine3.push({Company});\n dataLine3.push(\n {\n setStepInContext(5);\n }}\n >\n Change\n \n );\n\n const dataLine4 = [];\n dataLine4.push(Event Name);\n dataLine4.push({EventName});\n dataLine4.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n\n const dataLine5 = [];\n dataLine5.push(Date);\n dataLine5.push({DateOfEvent});\n dataLine5.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n\n const dataLine6 = [];\n dataLine6.push(Location);\n dataLine6.push({Address});\n dataLine6.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n\n const dataLine7 = [];\n dataLine7.push(Postcode);\n dataLine7.push({AddressPostcode});\n dataLine7.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n\n const dataLine8 = [];\n dataLine8.push(Description);\n dataLine8.push({EventDescription});\n dataLine8.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n\n /* End of Table Data */\n\n const data = [dataLine1, dataLine2, dataLine3];\n const eventData = [dataLine4, dataLine5, dataLine6, dataLine7, dataLine8];\n\n if (Phone) {\n data.push(dataLine2);\n }\n\n return (\n <>\n
\n

{title}

\n \n\n \n\n

Now send your enquiry

\n

\n By submitting this enquiry you are confirming that, to the best of your knowledge, the\n details you are providing are correct.\n

\n \n
\n \n );\n}\n\nexport default StepSummarySection;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\n// Import custom hooks\nimport useSubmitForm from '../../../useSubmitForm';\nimport SummarySection from './StepSummarySection';\nimport Step9ConsentForm from './StepConsentForm';\nimport { FormDataContext } from '../../../../../globalState/FormDataContext';\nimport Button from '../../../../shared/Button/Button';\n\nfunction StepConfirm({ setFormSubmitStatus }) {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n // Get handleSubmit fn and isFetching from custom hook which handles submitting data to API (this is used in the last step[4])\n const { handleSubmit, isFetching, APIErrorMessage } = useSubmitForm(setFormSubmitStatus);\n useEffect(() => {\n if (formDataState.currentStep === 6) {\n formDataDispatch({\n type: 'REACHED_CONFIRMATION',\n payload: true,\n });\n }\n }, [formDataDispatch, formDataState.currentStep]);\n\n return (\n
\n {/* If we get any errors back from the server, show here */}\n {APIErrorMessage && {APIErrorMessage}}\n \n\n
\n {formDataState.formData.EmailAlert === 'yes' && !formDataState.formData.ExistingUser && (\n \n )}\n \n
\n \n );\n}\n\nStepConfirm.propTypes = {\n setFormSubmitStatus: PropTypes.func.isRequired,\n};\n\nexport default StepConfirm;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport Radios from 'components/shared/FormElements/Radios/Radios';\nimport SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\nimport InsetText from 'components/shared/InsetText/InsetText';\nimport useFormData from '../../useFormData';\n\nconst EnquiryType = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register, handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n const radioButtons = [\n { text: 'Culture and Digital', value: 'Culture and Digital' },\n { text: 'Economy and Innovation', value: 'Economy and Innovation' },\n { text: 'Environment and Energy', value: 'Environment and Energy' },\n { text: 'Housing and Land', value: 'Housing and Land' },\n { text: 'Inclusive Communities', value: 'Inclusive Communities' },\n { text: 'Productivity and Skills', value: 'Productivity and Skills' },\n { text: 'Transport', value: 'Transport' },\n { text: 'Wellbeing', value: 'Wellbeing' },\n ];\n\n // Add InsetText with extra info when selected option is \"no\"\n let extraInfo;\n const selectedOption = document.querySelector(\n 'input.wmcads-fe-radios__input[name=\"MayorEnquiry\"]:checked'\n );\n if (selectedOption && selectedOption.value === 'no') {\n extraInfo = (\n \n );\n }\n\n // Check if it is an existing user already\n const { ExistingUser } = useFormData();\n const title = 'What area of WMCA strategy is your enquiry about?';\n\n return (\n
\n {/* Subsection */}\n {!ExistingUser && }\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

{title}

\n
\n\n \n\n {extraInfo}\n
\n\n {/* Continue button */}\n {continueButton()}\n \n );\n};\n\nexport default EnquiryType;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport Radios from 'components/shared/FormElements/Radios/Radios';\nimport SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\nimport InsetText from 'components/shared/InsetText/InsetText';\nimport useFormData from '../../useFormData';\n\nconst Enquiry = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register, handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n const radioButtons = [\n { text: 'Freedom of information request', value: 'Freedom of information request' },\n { text: 'Whistleblowing and fraud', value: 'Whistleblowing and fraud' },\n { text: 'Jobs at the WMCA', value: 'Jobs at the WMCA' },\n ];\n\n // Add InsetText with extra info when selected option is \"no\"\n let extraInfo;\n const selectedOption = document.querySelector(\n 'input.wmcads-fe-radios__input[name=\"MayorEnquiry\"]:checked'\n );\n if (selectedOption && selectedOption.value === 'no') {\n extraInfo = (\n \n );\n }\n\n // Check if it is an existing user already\n const { ExistingUser } = useFormData();\n const title = 'What is your enquiry about?';\n\n return (\n
\n {/* Subsection */}\n {!ExistingUser && }\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

{title}

\n
\n\n \n\n {extraInfo}\n
\n\n {/* Continue button */}\n {continueButton()}\n \n );\n};\n\nexport default Enquiry;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\nimport Input from 'components/shared/FormElements/Input/textarea';\nimport useFormData from '../../../useFormData';\n\nconst Foi = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n const { handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Check it we are facing an existing user\n const { ExistingUser } = useFormData();\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n return (\n
\n {/* Subsection */}\n {!ExistingUser && (\n \n )}\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

What is your freedom of information request?

\n
\n\n \n\n \n
\n\n {/* Continue button */}\n {continueButton()}\n \n );\n};\n\nexport default Foi;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from 'components/shared/Icon/Icon';\n\nfunction Link(props) {\n const { link, text, classes, target } = props;\n const icon = 'general-chevron-right';\n return (\n \n {text}\n \n \n );\n}\n\nLink.propTypes = {\n link: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n classes: PropTypes.string,\n target: PropTypes.string,\n};\nLink.defaultProps = {\n classes: null,\n target: '_self',\n};\n\nexport default Link;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\nimport Input from 'components/shared/FormElements/Input/textarea';\nimport useFormData from '../../../useFormData';\nimport Links from '../../../../shared/Link/Link';\n\nconst Fraud = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n const { handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Check it we are facing an existing user\n const { ExistingUser } = useFormData();\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n return (\n
\n {/* Subsection */}\n {!ExistingUser && (\n \n )}\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

Whistleblowing and fraud?

\n
\n\n \n
\n \n\n \n\n \n
\n\n {/* Continue button */}\n {continueButton()}\n \n );\n};\n\nexport default Fraud;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\nimport Input from 'components/shared/FormElements/Input/textarea';\nimport useFormData from '../../../useFormData';\nimport Links from '../../../../shared/Link/Link';\n\nconst Jobs = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n const { handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Check it we are facing an existing user\n const { ExistingUser } = useFormData();\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n return (\n
\n {/* Subsection */}\n {!ExistingUser && (\n \n )}\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

What is your enquiry regarding jobs at the WMCA?

\n
\n\n \n\n \n
\n\n {/* Continue button */}\n {continueButton()}\n \n );\n};\n\nexport default Jobs;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport InputCheckbox from '../../../shared/FormElements/Input/InputCheckbox';\n\nconst StepConsentForm = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Labels used on inputs and for validation\n const checkBoxLabel = (\n <>\n Agree to the  \n \n terms and conditions\n \n  \n \n );\n const policyCheckBoxLabel = (\n <>\n Agree to the  \n \n privacy policy\n \n  \n \n );\n\n // Logic used to validate the terms field\n const checkboxValidation = register({\n required: 'Agree to terms and conditions before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to terms and conditions before continue',\n },\n });\n // Logic used to validate the policy field\n const polictCheckboxValidation = register({\n required: 'Agree to privacy policy before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to privacy policy before continue',\n },\n });\n\n return (\n
\n \n \n
\n );\n};\n\nexport default StepConsentForm;\n","import React, { useContext } from 'react';\n// Hooks\n\n// Context\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Components\nimport Table from 'components/shared/Table/Table';\nimport Table2 from 'components/shared/Table/Table-2-col';\nimport ConsentForm from './StepConsentForm';\n\nfunction StepSummarySection() {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n const { Firstname, LastName, Enquiry, ContactEmail, ContactPhone, Phone } =\n formDataState.formData;\n\n const setStepInContext = (st) => {\n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: st,\n });\n };\n\n const title = 'Check your answers';\n\n /* Table Data */\n\n // enquiry\n const dataLine1 = [];\n if (Enquiry) {\n dataLine1.push({Enquiry});\n dataLine1.push(\n {\n setStepInContext(2);\n }}\n >\n Change\n \n );\n }\n\n // name\n const dataLine2 = [];\n dataLine2.push(Name);\n dataLine2.push({`${Firstname} ${LastName}`});\n dataLine2.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n\n // contact information\n const dataLine3 = [];\n dataLine3.push(How would you like to be contacted?);\n if (ContactEmail !== null && ContactPhone === null) {\n dataLine3.push(\n \n Email\n
{ContactEmail}\n
\n );\n } else if (ContactEmail === null && ContactPhone) {\n dataLine3.push(\n \n Phone\n
{ContactPhone}\n
\n );\n } else if (ContactEmail && ContactPhone) {\n dataLine3.push(\n
\n \n Email\n
{ContactEmail}\n
\n
\n
\n \n Phone\n
{ContactPhone}\n
\n
\n );\n }\n\n dataLine3.push(\n {\n setStepInContext(4);\n }}\n >\n Change\n \n );\n\n /* End of Table Data */\n\n const enquiry = [dataLine1];\n const data = [dataLine2, dataLine3];\n\n if (Phone) {\n data.push(dataLine3);\n }\n\n return (\n <>\n
\n

{title}

\n \n\n \n\n

Now send your enquiry

\n

\n By submitting this enquiry you are confirming that, to the best of your knowledge, the\n details you are providing are correct.\n

\n \n
\n \n );\n}\n\nexport default StepSummarySection;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\n// Import custom hooks\nimport useSubmitForm from '../../useSubmitForm';\nimport SummarySection from './StepSummarySection';\nimport Step9ConsentForm from './StepConsentForm';\nimport { FormDataContext } from '../../../../globalState/FormDataContext';\nimport Button from '../../../shared/Button/Button';\n\nfunction StepConfirm({ setFormSubmitStatus }) {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n // Get handleSubmit fn and isFetching from custom hook which handles submitting data to API (this is used in the last step[4])\n const { handleSubmit, isFetching, APIErrorMessage } = useSubmitForm(setFormSubmitStatus);\n useEffect(() => {\n if (formDataState.currentStep === 5) {\n formDataDispatch({\n type: 'REACHED_CONFIRMATION',\n payload: true,\n });\n }\n }, [formDataDispatch, formDataState.currentStep]);\n\n return (\n
\n {/* If we get any errors back from the server, show here */}\n {APIErrorMessage && {APIErrorMessage}}\n \n\n
\n {formDataState.formData.EmailAlert === 'yes' && !formDataState.formData.ExistingUser && (\n \n )}\n \n
\n \n );\n}\n\nStepConfirm.propTypes = {\n setFormSubmitStatus: PropTypes.func.isRequired,\n};\n\nexport default StepConfirm;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport InputCheckbox from '../../../shared/FormElements/Input/InputCheckbox';\n\nconst StepConsentForm = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Labels used on inputs and for validation\n const checkBoxLabel = (\n <>\n Agree to the  \n \n terms and conditions\n \n  \n \n );\n const policyCheckBoxLabel = (\n <>\n Agree to the  \n \n privacy policy\n \n  \n \n );\n\n // Logic used to validate the terms field\n const checkboxValidation = register({\n required: 'Agree to terms and conditions before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to terms and conditions before continue',\n },\n });\n // Logic used to validate the policy field\n const polictCheckboxValidation = register({\n required: 'Agree to privacy policy before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to privacy policy before continue',\n },\n });\n\n return (\n
\n \n \n
\n );\n};\n\nexport default StepConsentForm;\n","import React, { useContext } from 'react';\n// Context\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Components\nimport Table from 'components/shared/Table/Table';\nimport Table2 from 'components/shared/Table/Table-2-col';\nimport ConsentForm from './StepConsentForm';\n\nfunction StepSummarySection() {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n const { StrategyEnquiry } = formDataState.formData;\n\n const { Firstname, LastName, Enquiry, ContactEmail, ContactPhone, Phone } =\n formDataState.formData;\n\n const setStepInContext = (st) => {\n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: st,\n });\n };\n\n const title = 'Check your answers';\n\n /* Table Data */\n\n // enquiry\n const dataLine1 = [];\n if (Enquiry) {\n dataLine1.push({Enquiry});\n dataLine1.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n }\n\n // name\n const dataLine2 = [];\n dataLine2.push(Name);\n dataLine2.push({`${Firstname} ${LastName}`});\n dataLine2.push(\n {\n setStepInContext(4);\n }}\n >\n Change\n \n );\n\n // contact information\n const dataLine3 = [];\n dataLine3.push(How would you like to be contacted?);\n if (ContactEmail !== null && ContactPhone === null) {\n dataLine3.push(\n \n Email\n
{ContactEmail}\n
\n );\n } else if (ContactEmail === null && ContactPhone) {\n dataLine3.push(\n \n Phone\n
{ContactPhone}\n
\n );\n } else if (ContactEmail && ContactPhone) {\n dataLine3.push(\n
\n \n Email\n
{ContactEmail}\n
\n
\n
\n \n Phone\n
{ContactPhone}\n
\n
\n );\n }\n\n dataLine3.push(\n {\n setStepInContext(5);\n }}\n >\n Change\n \n );\n\n /* End of Table Data */\n\n const enquiry = [dataLine1];\n const data = [dataLine2, dataLine3];\n\n if (Phone) {\n data.push(dataLine3);\n }\n\n const mainTitle = `About your ${StrategyEnquiry} strategy enquiry`;\n\n return (\n <>\n
\n

{title}

\n \n\n \n\n

Now send your enquiry

\n

\n By submitting this enquiry you are confirming that, to the best of your knowledge, the\n details you are providing are correct.\n

\n \n
\n \n );\n}\n\nexport default StepSummarySection;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\n// Import custom hooks\nimport useSubmitForm from '../../useSubmitForm';\nimport SummarySection from './StepSummarySection';\nimport Step9ConsentForm from './StepConsentForm';\nimport { FormDataContext } from '../../../../globalState/FormDataContext';\nimport Button from '../../../shared/Button/Button';\n\nfunction StepConfirm({ setFormSubmitStatus }) {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n // Get handleSubmit fn and isFetching from custom hook which handles submitting data to API (this is used in the last step[4])\n const { handleSubmit, isFetching, APIErrorMessage } = useSubmitForm(setFormSubmitStatus);\n useEffect(() => {\n if (formDataState.currentStep === 6) {\n formDataDispatch({\n type: 'REACHED_CONFIRMATION',\n payload: true,\n });\n }\n }, [formDataDispatch, formDataState.currentStep]);\n\n return (\n
\n {/* If we get any errors back from the server, show here */}\n {APIErrorMessage && {APIErrorMessage}}\n \n\n
\n {formDataState.formData.EmailAlert === 'yes' && !formDataState.formData.ExistingUser && (\n \n )}\n \n
\n \n );\n}\n\nStepConfirm.propTypes = {\n setFormSubmitStatus: PropTypes.func.isRequired,\n};\n\nexport default StepConfirm;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport InputCheckbox from '../../../../shared/FormElements/Input/InputCheckbox';\n\nconst StepConsentForm = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Labels used on inputs and for validation\n const checkBoxLabel = (\n <>\n Agree to the  \n \n terms and conditions\n \n  \n \n );\n const policyCheckBoxLabel = (\n <>\n Agree to the  \n \n privacy policy\n \n  \n \n );\n\n // Logic used to validate the terms field\n const checkboxValidation = register({\n required: 'Agree to terms and conditions before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to terms and conditions before continue',\n },\n });\n // Logic used to validate the policy field\n const polictCheckboxValidation = register({\n required: 'Agree to privacy policy before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to privacy policy before continue',\n },\n });\n\n return (\n
\n \n \n
\n );\n};\n\nexport default StepConsentForm;\n","import React, { useContext } from 'react';\n// Context\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Components\nimport Table from 'components/shared/Table/Table';\nimport ConsentForm from './StepConsentForm';\n\nfunction StepSummarySection() {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n\n const {\n Firstname,\n LastName,\n OtherEnquiry,\n InformationRequested,\n ExtraDetails,\n ContactEmail,\n ContactPhone,\n Phone,\n } = formDataState.formData;\n\n const setStepInContext = (st) => {\n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: st,\n });\n };\n\n const title = 'Check your answers';\n\n /* Table Data */\n\n // enquiry\n const infoRequested = [];\n if (InformationRequested) {\n infoRequested.push(Information Requested);\n infoRequested.push({InformationRequested});\n infoRequested.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n }\n\n const extraIinfo = [];\n if (ExtraDetails) {\n extraIinfo.push(Supporting Information);\n extraIinfo.push({ExtraDetails});\n extraIinfo.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n }\n\n // name\n const dataLine2 = [];\n dataLine2.push(Name);\n dataLine2.push({`${Firstname} ${LastName}`});\n dataLine2.push(\n {\n setStepInContext(4);\n }}\n >\n Change\n \n );\n\n // contact information\n const dataLine3 = [];\n dataLine3.push(How would you like to be contacted?);\n if (ContactEmail !== null && ContactPhone === null) {\n dataLine3.push(\n \n Email\n
{ContactEmail}\n
\n );\n } else if (ContactEmail === null && ContactPhone) {\n dataLine3.push(\n \n Phone\n
{ContactPhone}\n
\n );\n } else if (ContactEmail && ContactPhone) {\n dataLine3.push(\n
\n \n Email\n
{ContactEmail}\n
\n
\n
\n \n Phone\n
{ContactPhone}\n
\n
\n );\n }\n\n dataLine3.push(\n {\n setStepInContext(5);\n }}\n >\n Change\n \n );\n\n /* End of Table Data */\n\n const enquiry = [infoRequested, extraIinfo];\n const data = [dataLine2, dataLine3];\n\n if (Phone) {\n data.push(dataLine3);\n }\n\n const mainTitle = `About your ${OtherEnquiry} enquiry`;\n\n return (\n <>\n
\n

{title}

\n \n\n \n\n

Now send your enquiry

\n

\n By submitting this enquiry you are confirming that, to the best of your knowledge, the\n details you are providing are correct.\n

\n \n
\n \n );\n}\n\nexport default StepSummarySection;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\n// Import custom hooks\nimport useSubmitForm from '../../../useSubmitForm';\nimport SummarySection from './StepSummarySection';\nimport Step9ConsentForm from './StepConsentForm';\nimport { FormDataContext } from '../../../../../globalState/FormDataContext';\nimport Button from '../../../../shared/Button/Button';\n\nfunction StepConfirm({ setFormSubmitStatus }) {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n // Get handleSubmit fn and isFetching from custom hook which handles submitting data to API (this is used in the last step[4])\n const { handleSubmit, isFetching, APIErrorMessage } = useSubmitForm(setFormSubmitStatus);\n useEffect(() => {\n if (formDataState.currentStep === 6) {\n formDataDispatch({\n type: 'REACHED_CONFIRMATION',\n payload: true,\n });\n }\n }, [formDataDispatch, formDataState.currentStep]);\n\n return (\n
\n {/* If we get any errors back from the server, show here */}\n {APIErrorMessage && {APIErrorMessage}}\n \n\n
\n {formDataState.formData.EmailAlert === 'yes' && !formDataState.formData.ExistingUser && (\n \n )}\n \n
\n \n );\n}\n\nStepConfirm.propTypes = {\n setFormSubmitStatus: PropTypes.func.isRequired,\n};\n\nexport default StepConfirm;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport InputCheckbox from '../../../../shared/FormElements/Input/InputCheckbox';\n\nconst StepConsentForm = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Labels used on inputs and for validation\n const checkBoxLabel = (\n <>\n Agree to the  \n \n terms and conditions\n \n  \n \n );\n const policyCheckBoxLabel = (\n <>\n Agree to the  \n \n privacy policy\n \n  \n \n );\n\n // Logic used to validate the terms field\n const checkboxValidation = register({\n required: 'Agree to terms and conditions before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to terms and conditions before continue',\n },\n });\n // Logic used to validate the policy field\n const polictCheckboxValidation = register({\n required: 'Agree to privacy policy before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to privacy policy before continue',\n },\n });\n\n return (\n
\n \n \n
\n );\n};\n\nexport default StepConsentForm;\n","import React, { useContext } from 'react';\n// Context\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Components\nimport Table from 'components/shared/Table/Table';\nimport ConsentForm from './StepConsentForm';\n\nfunction StepSummarySection() {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n\n const {\n Firstname,\n LastName,\n OtherEnquiry,\n AllegationDetails,\n ExtraAllegationDetails,\n ContactEmail,\n ContactPhone,\n Phone,\n } = formDataState.formData;\n\n const setStepInContext = (st) => {\n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: st,\n });\n };\n\n const title = 'Check your answers';\n\n /* Table Data */\n\n // enquiry\n const infoRequested = [];\n if (AllegationDetails) {\n infoRequested.push(Allegation Details);\n infoRequested.push({AllegationDetails});\n infoRequested.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n }\n\n const extraIinfo = [];\n if (ExtraAllegationDetails) {\n extraIinfo.push(Supporting Information);\n extraIinfo.push({ExtraAllegationDetails});\n extraIinfo.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n }\n\n // name\n const dataLine2 = [];\n dataLine2.push(Name);\n dataLine2.push({`${Firstname} ${LastName}`});\n dataLine2.push(\n {\n setStepInContext(4);\n }}\n >\n Change\n \n );\n\n // contact information\n const dataLine3 = [];\n dataLine3.push(How would you like to be contacted?);\n if (ContactEmail !== null && ContactPhone === null) {\n dataLine3.push(\n \n Email\n
{ContactEmail}\n
\n );\n } else if (ContactEmail === null && ContactPhone) {\n dataLine3.push(\n \n Phone\n
{ContactPhone}\n
\n );\n } else if (ContactEmail && ContactPhone) {\n dataLine3.push(\n
\n \n Email\n
{ContactEmail}\n
\n
\n
\n \n Phone\n
{ContactPhone}\n
\n
\n );\n }\n\n dataLine3.push(\n {\n setStepInContext(5);\n }}\n >\n Change\n \n );\n\n /* End of Table Data */\n\n const enquiry = [infoRequested, extraIinfo];\n const data = [dataLine2, dataLine3];\n\n if (Phone) {\n data.push(dataLine3);\n }\n\n const mainTitle = `About your ${OtherEnquiry} enquiry`;\n\n return (\n <>\n
\n

{title}

\n \n\n \n\n

Now send your enquiry

\n

\n By submitting this enquiry you are confirming that, to the best of your knowledge, the\n details you are providing are correct.\n

\n \n
\n \n );\n}\n\nexport default StepSummarySection;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\n// Import custom hooks\nimport useSubmitForm from '../../../useSubmitForm';\nimport SummarySection from './StepSummarySection';\nimport Step9ConsentForm from './StepConsentForm';\nimport { FormDataContext } from '../../../../../globalState/FormDataContext';\nimport Button from '../../../../shared/Button/Button';\n\nfunction StepConfirm({ setFormSubmitStatus }) {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n // Get handleSubmit fn and isFetching from custom hook which handles submitting data to API (this is used in the last step[4])\n const { handleSubmit, isFetching, APIErrorMessage } = useSubmitForm(setFormSubmitStatus);\n useEffect(() => {\n if (formDataState.currentStep === 6) {\n formDataDispatch({\n type: 'REACHED_CONFIRMATION',\n payload: true,\n });\n }\n }, [formDataDispatch, formDataState.currentStep]);\n\n return (\n
\n {/* If we get any errors back from the server, show here */}\n {APIErrorMessage && {APIErrorMessage}}\n \n\n
\n {formDataState.formData.EmailAlert === 'yes' && !formDataState.formData.ExistingUser && (\n \n )}\n \n
\n \n );\n}\n\nStepConfirm.propTypes = {\n setFormSubmitStatus: PropTypes.func.isRequired,\n};\n\nexport default StepConfirm;\n","import React, { useRef } from 'react';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport InputCheckbox from '../../../../shared/FormElements/Input/InputCheckbox';\n\nconst StepConsentForm = () => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n\n // Labels used on inputs and for validation\n const checkBoxLabel = (\n <>\n Agree to the  \n \n terms and conditions\n \n  \n \n );\n const policyCheckBoxLabel = (\n <>\n Agree to the  \n \n privacy policy\n \n  \n \n );\n\n // Logic used to validate the terms field\n const checkboxValidation = register({\n required: 'Agree to terms and conditions before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to terms and conditions before continue',\n },\n });\n // Logic used to validate the policy field\n const polictCheckboxValidation = register({\n required: 'Agree to privacy policy before continue',\n validate: {\n shouldBeTrue: (val) => val === true || 'Agree to privacy policy before continue',\n },\n });\n\n return (\n
\n \n \n
\n );\n};\n\nexport default StepConsentForm;\n","import React, { useContext } from 'react';\n// Context\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Components\nimport Table from 'components/shared/Table/Table';\nimport ConsentForm from './StepConsentForm';\n\nfunction StepSummarySection() {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n\n const { Firstname, LastName, OtherEnquiry, JobsEnquiry, ContactEmail, ContactPhone, Phone } =\n formDataState.formData;\n\n const setStepInContext = (st) => {\n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: st,\n });\n };\n\n const title = 'Check your answers';\n\n /* Table Data */\n\n // enquiry\n const infoRequested = [];\n if (JobsEnquiry) {\n infoRequested.push(Enquiry);\n infoRequested.push({JobsEnquiry});\n infoRequested.push(\n {\n setStepInContext(3);\n }}\n >\n Change\n \n );\n }\n\n // name\n const dataLine2 = [];\n dataLine2.push(Name);\n dataLine2.push({`${Firstname} ${LastName}`});\n dataLine2.push(\n {\n setStepInContext(4);\n }}\n >\n Change\n \n );\n\n // contact information\n const dataLine3 = [];\n dataLine3.push(How would you like to be contacted?);\n if (ContactEmail !== null && ContactPhone === null) {\n dataLine3.push(\n \n Email\n
{ContactEmail}\n
\n );\n } else if (ContactEmail === null && ContactPhone) {\n dataLine3.push(\n \n Phone\n
{ContactPhone}\n
\n );\n } else if (ContactEmail && ContactPhone) {\n dataLine3.push(\n
\n \n Email\n
{ContactEmail}\n
\n
\n
\n \n Phone\n
{ContactPhone}\n
\n
\n );\n }\n\n dataLine3.push(\n {\n setStepInContext(5);\n }}\n >\n Change\n \n );\n\n /* End of Table Data */\n\n const enquiry = [infoRequested];\n const data = [dataLine2, dataLine3];\n\n if (Phone) {\n data.push(dataLine3);\n }\n\n const mainTitle = `About your ${OtherEnquiry} enquiry`;\n\n return (\n <>\n
\n

{title}

\n \n\n \n\n

Now send your enquiry

\n

\n By submitting this enquiry you are confirming that, to the best of your knowledge, the\n details you are providing are correct.\n

\n \n
\n \n );\n}\n\nexport default StepSummarySection;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\n// Import custom hooks\nimport useSubmitForm from '../../../useSubmitForm';\nimport SummarySection from './StepSummarySection';\nimport Step9ConsentForm from './StepConsentForm';\nimport { FormDataContext } from '../../../../../globalState/FormDataContext';\nimport Button from '../../../../shared/Button/Button';\n\nfunction StepConfirm({ setFormSubmitStatus }) {\n const [formDataState, formDataDispatch] = useContext(FormDataContext);\n // Get handleSubmit fn and isFetching from custom hook which handles submitting data to API (this is used in the last step[4])\n const { handleSubmit, isFetching, APIErrorMessage } = useSubmitForm(setFormSubmitStatus);\n useEffect(() => {\n if (formDataState.currentStep === 6) {\n formDataDispatch({\n type: 'REACHED_CONFIRMATION',\n payload: true,\n });\n }\n }, [formDataDispatch, formDataState.currentStep]);\n\n return (\n
\n {/* If we get any errors back from the server, show here */}\n {APIErrorMessage && {APIErrorMessage}}\n \n\n
\n {formDataState.formData.EmailAlert === 'yes' && !formDataState.formData.ExistingUser && (\n \n )}\n \n
\n \n );\n}\n\nStepConfirm.propTypes = {\n setFormSubmitStatus: PropTypes.func.isRequired,\n};\n\nexport default StepConfirm;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport Input from 'components/shared/FormElements/Input/textarea';\n// import SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\n// import useFormData from '../../useFormData';\n\nconst Enquiry = (props) => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register, handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n const { section, header, summary, legend } = props;\n\n // Check it we are facing an existing user\n // const { ExistingUser } = useFormData();\n\n // Labels used on inputs and for validation\n const label = 'Your enquiry';\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n return (\n
\n {/* Subsection */}\n
\n {section}\n

{header}

\n
\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

{legend}

\n

{summary}

\n
\n\n \n
\n {/* Continue button */}\n {continueButton()}\n
\n );\n};\n\nEnquiry.propTypes = {\n summary: PropTypes.string,\n section: PropTypes.string.isRequired,\n header: PropTypes.string.isRequired,\n legend: PropTypes.string.isRequired,\n};\n\nEnquiry.defaultProps = {\n summary: '',\n};\n\nexport default Enquiry;\n","import React, { useRef, useContext } from 'react';\nimport PropTypes from 'prop-types';\n// Context\nimport { FormDataContext } from 'globalState/FormDataContext';\n// Import components\nimport InputCheckbox from 'components/shared/FormElements/Input/InputCheckbox';\nimport Input from 'components/shared/FormElements/Input/Input';\n// import SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n\nconst Contact = (props) => {\n const [, formDispatch] = useContext(FormDataContext); // Get the state of form data from FormDataContext\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register, handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n const { section, header, summary } = props;\n\n const [formDataState] = useContext(FormDataContext);\n const { MayorContactEmail } = formDataState.formData;\n const { MayorContactPhone } = formDataState.formData;\n\n // Labels used on inputs and for validation\n const checkBoxEmail = 'Email';\n const emailLabel = 'Email address';\n // Logic used to validate the email field\n const emailRegex =\n /^[\\w!#$%&'*+\\-/=?^_`{|}~]+(\\.[\\w!#$%&'*+\\-/=?^_`{|}~]+)*@((([-\\w]+\\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\\.){3}[0-9]{1,3}))$/; // Matches email regex on server\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n // email validation\n const emailValidation = register({\n required: `${emailLabel} is required`,\n pattern: {\n value: emailRegex,\n message: `Enter an ${emailLabel.toLowerCase()} in the correct format`,\n },\n });\n\n // email input src\n const emailInputSrc = (\n
\n For example, name@example.com\"\n autocomplete=\"given-name\"\n fieldValidation={emailValidation}\n />\n
\n );\n\n // phone input src\n const phoneInputSrc = (\n
\n For example, 07700900457\"\n autocomplete=\"given-name\"\n fieldValidation={fieldValidation('Phone number')}\n />\n
\n );\n\n // Add email input when email if true\n let emailInput;\n const emailOption = document.querySelector(\n 'input.wmcads-fe-checkboxes__input[name=\"MayorContactEmail\"]:checked'\n );\n\n if ((emailOption && emailOption.value !== null) || MayorContactEmail === true) {\n emailInput = emailInputSrc;\n }\n\n // Add phone input if true\n let phoneInput;\n const phoneOption = document.querySelector(\n 'input.wmcads-fe-checkboxes__input[name=\"MayorContactPhone\"]:checked'\n );\n if ((phoneOption && phoneOption.value !== null) || MayorContactPhone === true) {\n phoneInput = phoneInputSrc;\n }\n\n // set the email checkbox to form data\n const emailCheck = (e) =>\n formDispatch({\n type: 'UPDATE_FORM_DATA',\n payload: { MayorContactEmail: e.target.checked },\n });\n\n // set the phone checkbox to form data\n const phoneCheck = (e) =>\n formDispatch({\n type: 'UPDATE_FORM_DATA',\n payload: { MayorContactPhone: e.target.checked },\n });\n\n // clear email if unchecked\n if (MayorContactEmail === false) {\n formDataState.formData.ContactEmail = null;\n }\n\n // clear phone if unchecked\n if (MayorContactPhone === false) {\n formDataState.formData.ContactPhone = null;\n }\n\n return (\n
\n {/* Subsection */}\n
\n {section}\n

{header}

\n
\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n
\n

How would you like to be contacted?

\n

{summary}

\n
\n \n {emailInput}\n \n {phoneInput}\n
\n\n {/* Continue button */}\n {continueButton()}\n
\n );\n};\n\nContact.propTypes = {\n summary: PropTypes.string,\n section: PropTypes.string.isRequired,\n header: PropTypes.string.isRequired,\n};\n\nContact.defaultProps = {\n summary: '',\n};\n\nexport default Contact;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\nimport React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\n// Import custom hooks\nimport useStepLogic from 'components/Form/useStepLogic';\n// Import components\nimport Input from 'components/shared/FormElements/Input/Input';\n// import SectionStepInfo from 'components/shared/SectionStepInfo/SectionStepInfo';\n\nconst Name = (props) => {\n const formRef = useRef(); // Used so we can keep track of the form DOM element\n const { register, handleSubmit, showGenericError, continueButton } = useStepLogic(formRef); // Custom hook for handling continue button (validation, errors etc)\n const { section, header, summary } = props;\n\n // Labels used on inputs and for validation\n const fNameLabel = 'First name';\n const lNameLabel = 'Last name';\n\n // Logic used to validate fields\n const fieldValidation = (name) => {\n return register({ required: `${name} is required` });\n };\n\n return (\n
\n {/* Subsection */}\n
\n {section}\n

{header}

\n
\n\n {/* Show generic error message */}\n {showGenericError}\n\n
\n \n

What is your name?

\n

{summary}

\n
\n\n \n \n
\n\n {/* Continue button */}\n {continueButton()}\n
\n );\n};\n\nName.propTypes = {\n summary: PropTypes.string,\n section: PropTypes.string.isRequired,\n header: PropTypes.string.isRequired,\n};\n\nName.defaultProps = {\n summary: '',\n};\n\nexport default Name;\n","// Form abandonment tracking (https://www.simoahava.com/analytics/track-form-abandonment-with-google-tag-manager/)\nimport { useEffect, useState } from 'react';\n// Import contexts\n\nconst useTrackFormAbandonment = (currentStep, formSubmitStatus) => {\n const [fieldsChanged, setFieldsChanged] = useState([]); // Track fields the user has touched/changed\n\n window.dataLayer = window.dataLayer || []; // Set datalayer (GA thing)\n\n // This useEffect is used to track form changes and update the fieldsChanged state as the user progresses\n useEffect(() => {\n const form = document.querySelector('form'); // Get DOM node of form\n // Function to work out last changed element in form\n const lastChangedEle = (e) => {\n // Update fields changed array with step number and last changed field name i.e. Step1: CustomerType > Step3: CardNumber\n setFieldsChanged([...fieldsChanged, `Step${currentStep}: ${e.target.name}`]);\n };\n // Listen to changes in form and run above function\n if (form) form.addEventListener('change', lastChangedEle);\n // On unmount, remove listener\n return () => {\n if (form) form.removeEventListener('change', lastChangedEle);\n };\n }, [currentStep, fieldsChanged]);\n\n // Used to update Google Tag Manager\n useEffect(() => {\n // Function for updating datalayer with correct data\n const formAbandoned = () => {\n // If there is a current step and no form submit status then it means the user is still in progress of filling in the form, so we can log that as a true abandonment\n if (currentStep && !formSubmitStatus) {\n // Push abandoned event to GA/Tag Manager\n window.dataLayer.push({\n event: 'formAbandonment',\n eventCategory: 'wmca-contact-us',\n eventAction: 'form abandonded',\n eventLabel: fieldsChanged\n ? fieldsChanged.join(' > ')\n : 'Clicked start, but abandoned straight away.', // If fieldsChanged (set in first useEffect) is available then use that and join with ' > ' so it logs as 'Step1: ... > Step2: ... >' ELSE the user must of abandoned without updating the form in step 1 so log message\n });\n }\n };\n\n window.addEventListener('beforeunload', formAbandoned); // Run above function only when the user is leaving the page\n\n // On unmount, remove listener\n return () => {\n window.removeEventListener('beforeunload', formAbandoned);\n };\n }, [currentStep, fieldsChanged, formSubmitStatus]);\n\n // Sends a form started to analytics\n useEffect(() => {\n if (currentStep) {\n window.dataLayer.push({\n event: 'formAbandonment',\n eventCategory: 'wmca-contact-us',\n eventAction: 'form started',\n eventLabel: true,\n });\n }\n }, [currentStep]);\n};\n\nexport default useTrackFormAbandonment;\n","import React, { useContext, useEffect, useRef, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { useForm, FormProvider } from 'react-hook-form';\n// Import contexts\nimport { FormDataContext } from 'globalState/FormDataContext';\n\n// Import components\nimport Step1Enquiry from './Step1/EnquirySelection';\n// Import mayor steps\nimport MayorStep1Enquiry from './Step2/Mayor/EnquiryType';\nimport MayorStep1Event from './Step3/Mayor/Invite/Event';\nimport MayorStep4Event from './Step4/Mayor/Invite/Who';\nimport MayorGeneralStep6Enquiry from './StepConfirm/Mayor/Enquiry/StepConfirm';\nimport MayorGeneralStep6Invite from './StepConfirm/Mayor/Invite/StepConfirm';\n\n// Strategy\nimport StrategyEnquiryType from './Step2/Strategy/EnquiryType';\n\n// Other\nimport OtherEnquiryType from './Step2/Other/EnquiryType';\nimport OtherFoi from './Step3/Other/FOI/Foi';\nimport OtherFraud from './Step3/Other/Fraud/Fraud';\nimport OtherJobs from './Step3/Other/Jobs/Jobs';\n\n// confirmations\nimport GeneralConfirmation from './StepConfirm/General/StepConfirm';\nimport StrategyConfirmation from './StepConfirm/Strategy/StepConfirm';\nimport OtherFoiConfirmation from './StepConfirm/Other/Foi/StepConfirm';\nimport OtherFraudConfirmation from './StepConfirm/Other/Fraud/StepConfirm';\nimport OtherJobsConfirmation from './StepConfirm/Other/Jobs/StepConfirm';\n\n// shared\nimport SharedEnquiry from './Shared/Enquiry/Enquiry';\nimport SharedContact from './Shared/Contact/Contact';\nimport SharedName from './Shared/Name/Fieldset/Name';\n\n// Custom Hooks\nimport useTrackFormAbandonment from './useTrackFormAbandonment';\n// Import styling\nimport s from './Form.module.scss';\n\nconst Form = ({ formSubmitStatus, setFormSubmitStatus, isRecoverLinkPressed }) => {\n // Handle scrolling to the top of the summary page\n const formRef = useRef();\n const scrollToTopOfSummary = useCallback(() => {\n const page = document.getElementsByClassName('wmcads-html')[0];\n const pageOffset = page.scrollTop;\n const formOffset = formRef.current.offsetTop;\n if (formOffset >= pageOffset) return;\n page.scrollTo(0, formOffset - 20);\n }, []);\n\n const [formDataState, formDataDispatch] = useContext(FormDataContext); // Get the state/dispatch of form data from FormDataContext\n const { currentStep } = formDataState; // Destructure step from state\n const { EnquiryType, StrategyEnquiry, MayorEnquiry, OtherEnquiry } = formDataState.formData;\n const methods = useForm({\n mode: 'onBlur',\n }); // Trigger validation onBlur events (config for react hook form lib)\n\n useEffect(() => {\n if (currentStep === 9) scrollToTopOfSummary();\n }, [currentStep, scrollToTopOfSummary]);\n\n useEffect(() => {\n if (isRecoverLinkPressed) {\n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: 0,\n });\n }\n }, [formDataDispatch, isRecoverLinkPressed]);\n\n useTrackFormAbandonment(currentStep, formSubmitStatus);\n\n // Show debug options for below (this should be deleted on release)\n const debugStepOptions = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n\n let stepToGoTo;\n\n if (currentStep > 1 && currentStep < 6) {\n stepToGoTo = currentStep - 1;\n }\n\n // Run! Like go get some data from an API.\n return (\n <>\n {/* pass all methods into the context */}\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n
\n {stepToGoTo && (\n
\n \n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: stepToGoTo,\n })\n }\n >\n < Back\n \n
\n )}\n\n \n {/* Start of form */}\n {currentStep === 1 && }\n\n {/* Mayor enquiry type */}\n {currentStep === 2 && EnquiryType === 'mayor' && }\n\n {/* Mayor general enquiry */}\n {currentStep === 3 && MayorEnquiry === 'An enquiry for the Mayor’s office' && (\n \n )}\n {currentStep === 4 && MayorEnquiry === 'An enquiry for the Mayor’s office' && (\n \n )}\n {currentStep === 5 && MayorEnquiry === 'An enquiry for the Mayor’s office' && (\n \n )}\n {currentStep === 6 && MayorEnquiry === 'An enquiry for the Mayor’s office' && (\n \n )}\n\n {/* Mayor event invite */}\n {currentStep === 3 && MayorEnquiry === 'Invite the Mayor to an event' && (\n \n )}\n {currentStep === 4 && MayorEnquiry === 'Invite the Mayor to an event' && (\n \n )}\n {currentStep === 5 && MayorEnquiry === 'Invite the Mayor to an event' && (\n \n )}\n {currentStep === 6 && MayorEnquiry === 'Invite the Mayor to an event' && (\n \n )}\n\n {/* General enquiry */}\n {currentStep === 2 && EnquiryType === 'general' && (\n \n )}\n {currentStep === 3 && EnquiryType === 'general' && (\n \n )}\n {currentStep === 4 && EnquiryType === 'general' && (\n \n )}\n {currentStep === 5 && EnquiryType === 'general' && (\n \n )}\n\n {/* Strategy */}\n {currentStep === 2 && EnquiryType === 'strategy' && }\n {currentStep === 3 && StrategyEnquiry === 'Culture and Digital' && (\n \n )}\n {currentStep === 3 && StrategyEnquiry === 'Economy and Innovation' && (\n \n )}\n {currentStep === 3 && StrategyEnquiry === 'Environment and Energy' && (\n \n )}\n {currentStep === 3 && StrategyEnquiry === 'Housing and Land' && (\n \n )}\n {currentStep === 3 && StrategyEnquiry === 'Inclusive Communities' && (\n \n )}\n {currentStep === 3 && StrategyEnquiry === 'Productivity and Skills' && (\n \n )}\n {currentStep === 3 && StrategyEnquiry === 'Transport' && (\n \n )}\n {currentStep === 3 && StrategyEnquiry === 'Wellbeing' && (\n \n )}\n {currentStep === 4 && EnquiryType === 'strategy' && (\n \n )}\n {currentStep === 5 && EnquiryType === 'strategy' && (\n \n )}\n {currentStep === 6 && EnquiryType === 'strategy' && (\n \n )}\n\n {/* Other enquiry type */}\n {currentStep === 2 && EnquiryType === 'other' && }\n\n {/* Foi */}\n {currentStep === 3 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Freedom of information request' && }\n {currentStep === 4 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Freedom of information request' && (\n \n )}\n {currentStep === 5 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Freedom of information request' && (\n \n )}\n {currentStep === 6 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Freedom of information request' && (\n \n )}\n\n {/* Fraud */}\n {currentStep === 3 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Whistleblowing and fraud' && }\n {currentStep === 4 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Whistleblowing and fraud' && (\n \n )}\n {currentStep === 5 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Whistleblowing and fraud' && (\n \n )}\n {currentStep === 6 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Whistleblowing and fraud' && (\n \n )}\n\n {/* Jobs */}\n {currentStep === 3 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Jobs at the WMCA' && }\n {currentStep === 4 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Jobs at the WMCA' && (\n \n )}\n {currentStep === 5 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Jobs at the WMCA' && (\n \n )}\n {currentStep === 6 &&\n EnquiryType === 'other' &&\n OtherEnquiry === 'Jobs at the WMCA' && (\n \n )}\n\n {/* for testing only */}\n {/* {currentStep === 10 && }\n {currentStep === 11 && } */}\n
\n \n {/* If in development based on envs then show form debugging */}\n {process.env.NODE_ENV !== 'production' && (\n \n
{JSON.stringify(formDataState, null, 2)}
\n
\n
\n Select step: {}\n \n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: +e.target.value,\n })\n }\n onBlur={(e) =>\n formDataDispatch({\n type: 'UPDATE_STEP',\n payload: +e.target.value,\n })\n }\n value={currentStep}\n >\n {debugStepOptions.map((option) => (\n \n ))}\n \n
\n \n )}\n
\n \n );\n};\n\nForm.propTypes = {\n formSubmitStatus: PropTypes.bool,\n setFormSubmitStatus: PropTypes.func.isRequired,\n setIsFormStarted: PropTypes.func.isRequired,\n isRecoverLinkPressed: PropTypes.bool,\n setIsRecoverLinkPressed: PropTypes.func.isRequired,\n};\n\nForm.defaultProps = {\n formSubmitStatus: null,\n isRecoverLinkPressed: false,\n};\n\nexport default Form;\n","import React from 'react';\n\nfunction Success() {\n // eslint-disable-next-line no-unused-vars\n\n const title = 'We’ve received your enquiry';\n\n return (\n
\n
\n
\n

{title}

\n
\n\n
\n

What happens next

\n

Thank you for contacting the West Midlands Combined Authority.

\n

\n We will acknowledge your query and keep you updated on progress until it is resolved.\n

\n

\n Our Customer Services Centre aim to respond to enquiries within 10 working days.\n However, there may be occasions where this takes longer, as we may need to liase with a\n third party.\n

\n

\n If you have not received a response within 10 working ddays, please contact our Customer\n Services team.\n

\n\n

Give us a call

\n
\n West Midlands Combined Authority Customer Services\n
\n Phone: 0345 303 6760\n
\n
\n Mondays, Tuesdays, Thursdays and Fridays, 8am to 6pm\n
\n Wednesdays, 10am to 6pm\n
\n Saturdays, 9am to 1pm\n
\n Sundays and Bank Holidays, Closed\n
\n
\n
\n
\n );\n}\n\nexport default Success;\n","import React, { useState } from 'react';\nimport Intro from './components/Introduction/Introduction';\nimport Form from './components/Form/Form';\n// Import contexts\nimport { FormDataProvider } from './globalState/FormDataContext';\n\nimport SubmitSuccess from './components/Form/SubmitConfirmation/Success';\n\nfunction App() {\n const [isFormStarted, setIsFormStarted] = useState(true);\n const [isRecoverLinkPressed, setIsRecoverLinkPressed] = useState(false);\n const [formSubmitStatus, setFormSubmitStatus] = useState(null);\n\n return (\n <>\n
\n {!isFormStarted ? (\n \n ) : (\n \n {isFormStarted && formSubmitStatus === null && (\n \n )}\n\n {formSubmitStatus && }\n \n )}\n
\n \n );\n}\n\nexport default App;\n","/* eslint-disable no-console */\n\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","// IE 11 support\nimport 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\n// React\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n// Components\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}