{"version":3,"sources":["webpack:///./app/javascript/components/ImageCard.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/CompanyInfo/CompanyInfo.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/BankInfo/BankInfo.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/PersonalInfo/partials/PropertyAddress.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/EmploymentInfo/EmploymentInfo.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/Finances/Finances.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/StepTrackerPage.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/StepTrackerControls.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/StepTrackerPagination.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/CompanyInfo/partials/BusinessDetails.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/CompanyInfo/partials/PremisesHistory.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/CompanyInfo/partials/PreviousPremisesAddress.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/BankInfo/partials/BankDetails.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/BankInfo/partials/BankAccountDetails.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/PersonalInfo/partials/PersonalDetails.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/PersonalInfo/partials/AccommodationHistory.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/EmploymentInfo/partials/EmployerDetails.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/EmploymentInfo/partials/EmployerAddress.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/EmploymentInfo/partials/PreviousEmployerDetails.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/Finances/partials/PaymentsDetails.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/Finances/partials/BankAccountDetails.jsx","webpack:///./app/javascript/components/InputSpinner/InputSpinner.jsx","webpack:///./app/javascript/components/ImageUploader.jsx","webpack:///./app/javascript/components/InspectCarForm/InspectCarForm.jsx","webpack:///./app/javascript/components/ModelSearch/ModelSearch.jsx","webpack:///./app/javascript/components/PersonalCreditApplication.jsx","webpack:///./app/javascript/components/RecommendFriendForm/RecommendFriendForm.jsx","webpack:///./app/javascript/components/RequestCallback/RequestCallback.jsx","webpack:///./app/javascript/components/SUVSearch/SUVSearch.jsx","webpack:///./app/javascript/components/SalarySacrifice/SalarySacrificeForm.jsx","webpack:///./app/javascript/components/SaturdayBanner/SaturdayBanner.jsx","webpack:///./app/javascript/components/SignUp/SignUp.jsx","webpack:///./app/javascript/components/SignUp/SignUpMobile.jsx","webpack:///./app/javascript/components/Recaptcha/Recaptcha.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/PersonalInfo/PersonalInfo.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/StepTracker.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/Verify/Verify.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/Finances/partials/CreditCheck.jsx","webpack:///./app/javascript/components/OnlineCreditApplication/steps/Finances/partials/OptOut.jsx"],"names":["ImageCard","image","classes","classNames","error","uploading","className","onClick","e","preventDefault","refresh","src","source","alt","name","size","remove","CompanyInfo","register","unregister","validationErrors","defaultProps","BankInfo","PropertyAddress","id","actionName","isValidated","dispatch","useDispatch","query","useSelector","state","OCAPersonalInfo","searchLabel","onChange","event","type","payload","target","value","ref","required","undefined","hasError","primaryPostcode","secondaryPostcode","labelText","placeholder","primaryAddressLine1","secondaryAddressLine1","primaryAddressLine2","secondaryAddressLine2","primaryAddressLine3","secondaryAddressLine3","pattern","primaryTown","secondaryTown","primaryCounty","secondaryCounty","yearsDispatch","monthsDispatch","yearsAtPrimaryAddress","yearsAtSecondaryAddress","monthsAtPrimaryAddress","monthsAtSecondaryAddress","EmploymentInfo","props","useState","isOpen","setIsOpen","OCAEmploymentInfo","employmentStatus","yearsAtEmployer","monthsAtEmployer","handleYearChange","buttonText","wasOpen","Finances","showOptOut","StepTrackerPage","heading","pages","postURL","channelID","initialPayment","offerId","derivativeId","term","mileage","optionIds","maintenanceSelected","verifyStep","verifyPostUrl","isFirst","isLast","jumpToStep","step","component","backDisabled","useForm","mode","reValidateMode","isSubmitting","formState","handleSubmit","errors","hasErrors","setHasErrors","emailVerificationError","setEmailVerificationError","isSubmitted","setIsSubmitted","verifyQuery","OCAVerify","personalQuery","financesQuery","OCAFinances","employmentQuery","companyQuery","OCACompanyInfo","bankQuery","OCABankInfo","creditCheckQuery","OCACreditCheck","optOutQuery","OCAOptOut","formRef","useRef","nextClicked","currentStep","window","scrollTo","handleFormSubmission","a","formData","axios","post","authenticity_token","document","getElementsByName","content","channel_id","offer_id","derivative_id","initial_payment","option_ids","maintenance_selected","then","response","data","length","Turbolinks","visit","successURL","get","headers","Accept","params","email","message","onSubmit","noValidate","React","cloneElement","backClicked","submitDisabled","StepTrackerControls","onKeyDown","evt","fn","which","disabled","style","margin","StepTrackerPagination","map","item","index","key","BusinessDetails","businessName","businessType","Option","groupText","dispatchAction","businessEstablished","companyNumber","vatNumber","min","numberOfDirectors","emailValidationRegex","businessEmail","PremisesHistory","companyPostcode","companyAddressLine1","companyAddressLine2","companyAddressLine3","companyTown","companyCounty","companyPropertyStatus","yearsAtCompanyAddress","monthsAtCompanyAddress","validate","isValidNumber","companyTelephone","PreviousPremisesAddress","previousCompanyPostcode","previousCompanyAddressLine1","previousCompanyAddressLine2","previousCompanyAddressLine3","previousCompanyTown","previousCompanyCounty","yearsAtPreviousCompanyAddress","monthsAtPreviousCompanyAddress","BankDetails","businessBankName","yearsWithBusinessBank","monthsWithBusinessBank","BankAccountDetails","businessAccountHolder","minLength","maxLength","businessAccountNumber","businessSortCode","PersonalDetails","title","firstName","middleName","surname","dateOfBirth","telephone","maritalStatus","max","slice","numberOfDependents","AccommodationDetails","propertyStatus","EmployerDetails","employer","jobTitle","EmployerAddress","employerPostcode","employerAddressLine1","employerAddressLine2","employerAddressLine3","employerTown","employerCounty","employerTelephone","PreviousEmployerDetails","previousEmploymentStatus","previousEmployer","previousJobTitle","previousEmployerPostcode","previousEmployerAddressLine1","previousEmployerAddressLine2","previousEmployerAddressLine3","previousEmployerTown","previousEmployerCounty","previousEmployerTelephone","yearsAtPreviousEmployer","monthsAtPreviousEmployer","PaymentsDetails","grossAnnualSalary","monthlyIncome","monthlyMortgageRent","monthlyCarPayments","monthlyOtherOutgoings","bankName","bankAddress","yearsWithBank","monthsWithBank","bankAccountName","bankAccountNumber","bankSortCode","InputSpinner","initialValue","updateValue","inputValue","setInputValue","dispatchValue","htmlFor","newValue","parseInt","Number","isNaN","dropzoneContent","border","backgroundColor","display","flexDirection","justifyContent","alignItems","padding","borderRadius","marginBottom","transition","dropzoneText","dropzoneIcon","alertList","listStyleType","alert","fontSize","color","ImageUploader","existingUploads","presentable","relationName","fileTypes","imageLimit","warnings","uploadError","setState","reorderImageInputs","images","signedId","split","imageSignedIdInput","querySelector","parentElement","removeChild","addBlobAsAttachment","signed_id","renderHeader","useCallback","openDialogue","isDrag","opacity","width","height","viewBox","fill","xmlns","fillRule","clipRule","d","href","dropzoneLink","role","accept","inOrder","rules","limit","onWarning","updatedWarnings","push","join","onError","action","initialState","JSON","parse","onDeleted","parentNode","removeDeletedImageData","customRequest","uid","file","onSuccess","DirectUpload","create","blob","blobUrlFor","header","warning","input","createElement","getElementsByClassName","appendChild","filename","InspectCarForm","lastName","postcode","vehicleRegistration","vehicleMake","vehicleModel","current","submit","method","first_name","hiddenLabel","last_name","contact_telephone","contact_email","rows","variant","defaultChecked","ModelSearch","channelSlug","makesPath","makes","grosvenor","models","setModels","controlHeld","setControlHeld","manufacturerRef","modelRef","handleKeyDown","handleKeyUp","useEffect","addEventListener","removeEventListener","make","slug","model","path","open","PersonalCreditApplication","postUrl","steps","store","RecommendFriendForm","yourName","yourEmail","yourPhoneNumber","theirName","theirEmail","theirPhoneNumber","inputClassName","your_name","your_email","your_phone_number","their_name","test","errorMessage","their_email","their_phone_number","RequestCallback","recaptcha","fullName","time","comments","completeRecaptcha","getValues","recaptchaRef","pushData","form_name","signup","user_data","phone_number","contact_name","contact_time","options","text","SUVSearch","toggleActive","makeRef","categoryRef","getModels","SalarySacrificeForm","fleetSize","company_name","contact_fleetSize","contact_message","lineHeight","on_dark","SaturdayBanner","telephone_number","bodyClasses","body","classList","showModal","modalRef","modalBodyRef","show","handleClose","Cookies","set","expires","saturdayBannerBackdrop","getElementById","handleClickOutside","contains","setTimeout","add","insertAdjacentHTML","SignUp","isFixed","VanLogo","CarLogo","full_name","SignUpMobile","Recaptcha","forwardRef","_","siteKey","sitekey","PersonalInfo","finalStep","StepTracker","resetReduxState","stepsArray","propSteps","i","pageURL","location","dealID","substring","lastIndexOf","showSteps","stepsNavigation","showNavigation","preventEnterSubmission","Verify","dispatchEmail","CreditCheck","credit_check","checkboxClasses","checked","creditCheck","OptOut","optOut","rel"],"mappings":"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","file":"js/application~eec2ed1b-207c7ddbbc1c740d6c4a.chunk.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\n// Style imports\nimport './ImageCard.scss';\n\nconst ImageCard = ({ image }) => {\n  const classes = classNames({\n    'c-image-upload c-image-upload--edit': true,\n    'c-image-upload--error': image.error,\n    'c-image-upload--progress': image.uploading,\n  });\n\n  return (\n    <div className={classes}>\n      <div className=\"c-image-upload__asset\">\n        {image.error && (\n          <button\n            className=\"c-image-upload__reload\"\n            onClick={(e) => {\n              e.preventDefault();\n              image.refresh();\n            }}\n          >\n            <span className=\"b-accessible\">Retry upload</span>\n          </button>\n        )}\n\n        <img className=\"c-image-upload__img\" src={image.source} alt=\"\" aria-hidden=\"true\" />\n      </div>\n\n      <div className=\"c-image-upload__meta\">\n        <p className=\"c-image-upload__name\">{image.name}</p>\n        <p className=\"c-image-upload__size\">{image.size}</p>\n      </div>\n\n      <button\n        className=\"c-image-upload__delete\"\n        onClick={(e) => {\n          e.preventDefault();\n          image.remove();\n        }}\n      >\n        <span className=\"b-accessible\">Remove image</span>\n      </button>\n\n      <span className=\"c-image-upload__reorder\" />\n    </div>\n  );\n};\n\nImageCard.propTypes = {\n  image: PropTypes.shape({\n    name: PropTypes.string,\n    size: PropTypes.string,\n    source: PropTypes.string,\n    uploading: PropTypes.bool,\n    error: PropTypes.bool,\n    refresh: PropTypes.func,\n    remove: PropTypes.func,\n  }).isRequired,\n};\n\nexport default ImageCard;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\n// Component Imports\nimport BusinessDetails from './partials/BusinessDetails';\nimport PremisesHistory from './partials/PremisesHistory';\n\nconst CompanyInfo = ({ register, unregister, validationErrors }) => {\n  return (\n    <div className=\"row\">\n      <div className=\"g-order__fields g-order__fields--primary\">\n        <BusinessDetails register={register} validationErrors={validationErrors} />\n      </div>\n\n      <div className=\"g-order__fields g-order__fields--secondary\">\n        <PremisesHistory register={register} unregister={unregister} validationErrors={validationErrors} />\n      </div>\n    </div>\n  );\n};\n\nCompanyInfo.propTypes = {\n  register: PropTypes.func,\n  unregister: PropTypes.func,\n  validationErrors: PropTypes.shape({\n    'business-name': PropTypes.shape({}),\n    'business-type': PropTypes.shape({}),\n    'company-number': PropTypes.shape({}),\n    'vat-number': PropTypes.shape({}),\n    'number-of-directors': PropTypes.shape({}),\n    'business-email': PropTypes.shape({}),\n    'company-postcode': PropTypes.shape({}),\n    'company-address-line-1': PropTypes.shape({}),\n    'company-town': PropTypes.shape({}),\n    'company-county': PropTypes.shape({}),\n    'company-property-status': PropTypes.shape({}),\n    'time-at-company-address': PropTypes.shape({}),\n    'company-telephone': PropTypes.shape({}),\n  }),\n};\n\nCompanyInfo.defaultProps = {\n  register: null,\n  unregister: null,\n  validationErrors: null,\n};\n\nexport default CompanyInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\n// Component Imports\nimport BankDetails from './partials/BankDetails';\nimport BankAccountDetails from './partials/BankAccountDetails';\n\nconst BankInfo = ({ register, validationErrors }) => {\n  return (\n    <div className=\"row\">\n      <div className=\"g-order__fields g-order__fields--primary\">\n        <BankDetails register={register} validationErrors={validationErrors} />\n      </div>\n\n      <div className=\"g-order__fields g-order__fields--secondary\">\n        <BankAccountDetails register={register} validationErrors={validationErrors} />\n      </div>\n    </div>\n  );\n};\n\nBankInfo.propTypes = {\n  register: PropTypes.func,\n  validationErrors: PropTypes.shape({\n    'business-bank-name': PropTypes.shape({}),\n    'time-with-business-bank': PropTypes.shape({}),\n    'business-account-holder': PropTypes.shape({}),\n    'business-account-number': PropTypes.shape({}),\n    'business-sort-code': PropTypes.shape({}),\n  }),\n};\n\nBankInfo.defaultProps = {\n  register: null,\n  validationErrors: null,\n};\n\nexport default BankInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Component Imports\nimport InputField from '../../../../Forms/InputField';\nimport TimeSelector from '../../../../Forms/TimeSelector';\nimport AddressLookup from '../../../../Forms/AddressLookup';\n\nconst PropertyAddress = ({ id, actionName, isValidated, unregister, register, validationErrors }) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCAPersonalInfo);\n\n  // Unregister specific accordion required fields if user selects over 5 years\n  const handleYearChange = (event) => {\n    if (event.target.value >= 5) {\n      unregister([\n        'postcode-secondary-address',\n        'address-line-1-secondary-address',\n        'town-secondary-address',\n        'county-secondary-address',\n        'years-at-secondary-address',\n        'months-at-secondary-address',\n      ]);\n    }\n  };\n\n  return (\n    <>\n      <AddressLookup\n        searchLabel=\"Postcode\"\n        id={`postcode-${id}`}\n        onChange={(event) => dispatch({ type: `SET_${actionName}_POSTCODE`, payload: event.target.value })}\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? !!validationErrors[`postcode-${id}`] : undefined}\n        value={actionName === 'PRIMARY' ? query.primaryPostcode : query.secondaryPostcode}\n        actionName={actionName}\n      />\n\n      <InputField\n        labelText=\"Address line 1\"\n        id={`address-line-1-${id}`}\n        placeholder=\"Address line 1\"\n        onChange={(event) => dispatch({ type: `SET_${actionName}_ADDRESS_LINE_1`, payload: event.target.value })}\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? !!validationErrors[`address-line-1-${id}`] : undefined}\n        value={actionName === 'PRIMARY' ? query.primaryAddressLine1 : query.secondaryAddressLine1}\n      />\n\n      <InputField\n        labelText=\"Address line 2\"\n        id={`address-line-2-${id}`}\n        placeholder=\"Address line 2\"\n        onChange={(event) => dispatch({ type: `SET_${actionName}_ADDRESS_LINE_2`, payload: event.target.value })}\n        value={actionName === 'PRIMARY' ? query.primaryAddressLine2 : query.secondaryAddressLine2}\n      />\n\n      <InputField\n        labelText=\"Address line 3\"\n        id={`address-line-3-${id}`}\n        placeholder=\"Address line 3\"\n        onChange={(event) => dispatch({ type: `SET_${actionName}_ADDRESS_LINE_3`, payload: event.target.value })}\n        value={actionName === 'PRIMARY' ? query.primaryAddressLine3 : query.secondaryAddressLine3}\n      />\n\n      <InputField\n        labelText=\"Town\"\n        id={`town-${id}`}\n        placeholder=\"Town\"\n        onChange={(event) => dispatch({ type: `SET_${actionName}_TOWN`, payload: event.target.value })}\n        ref={isValidated ? register({ required: true, pattern: /^[A-Za-z\\s-]+$/i }) : undefined}\n        hasError={isValidated ? !!validationErrors[`town-${id}`] : undefined}\n        value={actionName === 'PRIMARY' ? query.primaryTown : query.secondaryTown}\n      />\n\n      <InputField\n        labelText=\"County\"\n        id={`county-${id}`}\n        placeholder=\"County\"\n        onChange={(event) => dispatch({ type: `SET_${actionName}_COUNTY`, payload: event.target.value })}\n        ref={isValidated ? register({ required: true, pattern: /^[A-Za-z\\s-]+$/i }) : undefined}\n        hasError={isValidated ? !!validationErrors[`county-${id}`] : undefined}\n        value={actionName === 'PRIMARY' ? query.primaryCounty : query.secondaryCounty}\n      />\n\n      <TimeSelector\n        labelText=\"Time at address\"\n        id={id}\n        yearsDispatch={`SET_YEARS_AT_${actionName}_ADDRESS`}\n        monthsDispatch={`SET_MONTHS_AT_${actionName}_ADDRESS`}\n        required\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? validationErrors : undefined}\n        value={[\n          actionName === 'PRIMARY' ? query.yearsAtPrimaryAddress : query.yearsAtSecondaryAddress,\n          actionName === 'PRIMARY' ? query.monthsAtPrimaryAddress : query.monthsAtSecondaryAddress,\n        ]}\n        onChange={actionName === 'PRIMARY' ? handleYearChange : undefined}\n      />\n    </>\n  );\n};\n\nPropertyAddress.propTypes = {\n  id: PropTypes.string.isRequired,\n  isValidated: PropTypes.bool.isRequired,\n  actionName: PropTypes.string,\n  register: PropTypes.func.isRequired,\n  unregister: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({}).isRequired,\n};\n\nPropertyAddress.defaultProps = {\n  actionName: '',\n};\n\nexport default PropertyAddress;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\n\n// Component Imports\nimport Accordion from '../../../Accordion/Accordion';\nimport TimeSelector from '../../../Forms/TimeSelector';\n\n// Partial Imports\nimport EmployerDetails from './partials/EmployerDetails';\nimport EmployerAddress from './partials/EmployerAddress';\nimport PreviousEmployerDetails from './partials/PreviousEmployerDetails';\n\nconst EmploymentInfo = (props) => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  // React Redux hooks\n  const query = useSelector((state) => state.OCAEmploymentInfo);\n\n  const toggleAccordion = (event) => {\n    event.preventDefault();\n    setIsOpen((wasOpen) => !wasOpen);\n  };\n\n  // Unregister specific accordion required fields if user selects over 5 years\n  const handleYearChange = (event) => {\n    if (event.target.value >= 5) {\n      props.unregister([\n        'previous-employment-status',\n        'previous-employer',\n        'previous-job-title',\n        'previous-employer-postcode',\n        'previous-employer-address-line-1',\n        'previous-employer-town',\n        'previous-employer-county',\n        'previous-employer-telephone',\n        'years-at-previous-employer',\n        'months-at-previous-employer',\n      ]);\n    }\n  };\n\n  return (\n    <div className=\"row\">\n      <div className=\"g-order__fields g-order__fields--primary\">\n        <EmployerDetails register={props.register} validationErrors={props.validationErrors} />\n\n        {query.employmentStatus !== 'Retired' && (\n          <EmployerAddress register={props.register} validationErrors={props.validationErrors} />\n        )}\n      </div>\n\n      <div className=\"g-order__fields g-order__fields--secondary\">\n        <TimeSelector\n          labelText={query.employmentStatus !== 'Retired' ? 'Time at employer' : 'Length of Time Retired'}\n          id=\"time-at-current-employer\"\n          yearsDispatch=\"SET_YEARS_AT_EMPLOYER\"\n          monthsDispatch=\"SET_MONTHS_AT_EMPLOYER\"\n          required\n          ref={props.register({ required: true })}\n          hasError={props.validationErrors['time-at-current-employer']}\n          value={[query.yearsAtEmployer, query.monthsAtEmployer]}\n          onChange={(event) => handleYearChange(event)}\n        />\n\n        <Accordion\n          id=\"five-years-employment-or-less\"\n          buttonText=\"If less than 5 years, please add previous employer\"\n          isOpen={isOpen || (query.yearsAtEmployer !== '' && query.yearsAtEmployer < 5)}\n          onClick={toggleAccordion}\n        >\n          <PreviousEmployerDetails\n            isValidated={query.yearsAtEmployer !== '' && query.yearsAtEmployer < 5}\n            register={props.register}\n            validationErrors={props.validationErrors}\n          />\n        </Accordion>\n      </div>\n    </div>\n  );\n};\n\nEmploymentInfo.propTypes = {\n  register: PropTypes.func,\n  unregister: PropTypes.func,\n  validationErrors: PropTypes.shape({\n    'time-at-current-employer': PropTypes.shape({}),\n    'employment-status': PropTypes.shape({}),\n    employer: PropTypes.shape({}),\n    'job-title': PropTypes.shape({}),\n    'employer-postcode': PropTypes.shape({}),\n    'employer-address-line-1': PropTypes.shape({}),\n    'employer-town': PropTypes.shape({}),\n    'employer-county': PropTypes.shape({}),\n    'employer-telephone': PropTypes.shape({}),\n    'previous-employment-status': PropTypes.shape({}),\n    'previous-employer': PropTypes.shape({}),\n    'previous-job-title': PropTypes.shape({}),\n    'previous-employer-postcode': PropTypes.shape({}),\n    'previous-employer-address-line-1': PropTypes.shape({}),\n    'previous-employer-town': PropTypes.shape({}),\n    'previous-employer-county': PropTypes.shape({}),\n    'previous-employer-telephone': PropTypes.shape({}),\n  }),\n};\n\nEmploymentInfo.defaultProps = {\n  register: null,\n  unregister: null,\n  validationErrors: {},\n};\n\nexport default EmploymentInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\n// Component Imports\nimport PaymentsDetails from './partials/PaymentsDetails';\nimport BankAccountDetails from './partials/BankAccountDetails';\nimport CreditCheck from './partials/CreditCheck';\nimport OptOut from './partials/OptOut';\n\nconst Finances = ({ showOptOut, register, validationErrors }) => {\n  return (\n    <>\n      <div className=\"row\">\n        <div className=\"g-order__fields g-order__fields--primary\">\n          <PaymentsDetails register={register} validationErrors={validationErrors} />\n        </div>\n\n        <div className=\"g-order__fields g-order__fields--secondary\">\n          <BankAccountDetails register={register} validationErrors={validationErrors} />\n        </div>\n      </div>\n      <div className=\"row\">\n        <div className=\"g-order__check\">\n          <CreditCheck register={register} validationErrors={validationErrors} />\n        </div>\n        {showOptOut && (\n          <div className=\"g-order__check\">\n            <OptOut register={register} validationErrors={validationErrors} />\n          </div>\n        )}\n      </div>\n    </>\n  );\n};\n\nFinances.propTypes = {\n  showOptOut: PropTypes.bool,\n  register: PropTypes.func,\n  validationErrors: PropTypes.shape({\n    'gross-annual-salary': PropTypes.shape({}),\n    'monthly-income': PropTypes.shape({}),\n    'monthly-mortgage-rent': PropTypes.shape({}),\n    'monthly-car-payments': PropTypes.shape({}),\n    'monthly-other-outgoings': PropTypes.shape({}),\n    'bank-name': PropTypes.shape({}),\n    'bank-address': PropTypes.shape({}),\n    'time-with-bank': PropTypes.shape({}),\n    'bank-account-name': PropTypes.shape({}),\n    'bank-account-number': PropTypes.shape({}),\n    'bank-sort-code': PropTypes.shape({}),\n    credit_check: PropTypes.shape({}),\n  }),\n};\n\nFinances.defaultProps = {\n  showOptOut: false,\n  register: null,\n  validationErrors: {},\n};\n\nexport default Finances;\n","import React, { useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useForm } from 'react-hook-form';\nimport axios from 'axios';\n\n// Component Imports\nimport StepTrackerControls from './StepTrackerControls';\nimport StepTrackerPagination from './StepTrackerPagination';\n\nconst StepTrackerPage = ({\n  heading,\n  pages,\n  postURL,\n  channelID,\n  initialPayment,\n  offerId,\n  derivativeId,\n  term,\n  mileage,\n  optionIds,\n  maintenanceSelected,\n  verifyStep,\n  verifyPostUrl,\n  isFirst,\n  isLast,\n  jumpToStep,\n  step,\n  component,\n  backDisabled,\n}) => {\n  const {\n    formState: { isSubmitting },\n    register,\n    handleSubmit,\n    errors,\n    unregister,\n  } = useForm({\n    mode: 'onBlur',\n    reValidateMode: 'onBlur',\n  });\n\n  const [hasErrors, setHasErrors] = useState(false);\n  const [emailVerificationError, setEmailVerificationError] = useState('');\n  const [isSubmitted, setIsSubmitted] = useState(false);\n\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const verifyQuery = useSelector((state) => state.OCAVerify);\n  const personalQuery = useSelector((state) => state.OCAPersonalInfo);\n  const financesQuery = useSelector((state) => state.OCAFinances);\n  const employmentQuery = useSelector((state) => state.OCAEmploymentInfo);\n  const companyQuery = useSelector((state) => state.OCACompanyInfo);\n  const bankQuery = useSelector((state) => state.OCABankInfo);\n  const creditCheckQuery = useSelector((state) => state.OCACreditCheck);\n  const optOutQuery = useSelector((state) => state.OCAOptOut);\n\n  const formRef = useRef(null);\n\n  const nextClicked = () => {\n    jumpToStep(step + 1);\n\n    dispatch({\n      type: 'SET_OCA_CURRENT_STEP',\n      payload: !isLast ? personalQuery.currentStep + 1 : personalQuery.currentStep,\n    });\n\n    window.scrollTo(0, 0);\n  };\n\n  const handleFormSubmission = async () => {\n    if (isLast) {\n      if (isSubmitting) return;\n\n      const formData = {\n        personalQuery,\n        financesQuery,\n        employmentQuery,\n        companyQuery,\n        bankQuery,\n        creditCheckQuery,\n        optOutQuery,\n      };\n\n      await axios\n        .post(postURL, {\n          formData,\n          authenticity_token: document.getElementsByName('csrf-token')[0].content,\n          channel_id: channelID,\n          offer_id: offerId,\n          derivative_id: derivativeId,\n          term,\n          mileage,\n          initial_payment: initialPayment,\n          option_ids: optionIds,\n          maintenance_selected: maintenanceSelected,\n        })\n        .then((response) => {\n          if (response.data.errors && response.data.errors.length > 0) {\n            setHasErrors(true);\n          } else {\n            setIsSubmitted(true);\n            Turbolinks.visit(response.data.successURL);\n          }\n        });\n    } else if (isFirst && verifyStep) {\n      await axios\n        .get(verifyPostUrl, {\n          headers: {\n            'Content-Type': 'application/json',\n            Accept: 'application/json',\n          },\n          params: {\n            email: verifyQuery.email,\n          },\n        })\n        .then(() => {\n          nextClicked();\n        })\n        .catch((error) => {\n          setEmailVerificationError(error.response.data.message);\n        });\n    } else {\n      nextClicked();\n    }\n  };\n\n  const backClicked = () => {\n    jumpToStep(step - 1);\n\n    dispatch({\n      type: 'SET_OCA_CURRENT_STEP',\n      payload: personalQuery.currentStep - 1,\n    });\n\n    window.scrollTo(0, 0);\n  };\n\n  return (\n    <>\n      <StepTrackerPagination pages={pages} />\n\n      <div className=\"g-order__header\">\n        <h1 className=\"g-order__title\">{heading}</h1>\n        <p className=\"g-order__subtitle\">\n          Before we can begin processing your order, we&apos;ll need to take some details. This should only take a few\n          minutes.\n        </p>\n      </div>\n\n      <form onSubmit={handleSubmit(handleFormSubmission)} ref={formRef} noValidate>\n        <div className=\"step-tracker__step\">\n          {React.cloneElement(component, {\n            register,\n            unregister,\n            validationErrors: errors,\n            verifyQuery,\n          })}\n        </div>\n\n        <StepTrackerControls\n          isLast={isLast}\n          pages={pages}\n          step={step}\n          backClicked={backClicked}\n          backDisabled={backDisabled}\n          hasErrors={hasErrors}\n          emailVerificationError={verifyStep && emailVerificationError}\n          submitDisabled={isSubmitting || isSubmitted}\n        />\n      </form>\n    </>\n  );\n};\n\nStepTrackerPage.propTypes = {\n  heading: PropTypes.string.isRequired,\n  isFirst: PropTypes.bool.isRequired,\n  isLast: PropTypes.bool.isRequired,\n  step: PropTypes.number.isRequired,\n  component: PropTypes.node.isRequired,\n  pages: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      heading: PropTypes.string,\n      component: PropTypes.node,\n    }),\n  ).isRequired,\n  backDisabled: PropTypes.bool,\n  postURL: PropTypes.string.isRequired,\n  channelID: PropTypes.string.isRequired,\n  initialPayment: PropTypes.string.isRequired,\n  jumpToStep: PropTypes.func,\n  offerId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n  derivativeId: PropTypes.number.isRequired,\n  term: PropTypes.number.isRequired,\n  mileage: PropTypes.number.isRequired,\n  optionIds: PropTypes.arrayOf(PropTypes.string),\n  maintenanceSelected: PropTypes.bool.isRequired,\n  verifyStep: PropTypes.bool.isRequired,\n  verifyPostUrl: PropTypes.string.isRequired,\n};\n\nStepTrackerPage.defaultProps = {\n  backDisabled: false,\n  jumpToStep: null,\n  optionIds: null,\n};\n\nexport default StepTrackerPage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst StepTrackerControls = ({\n  isLast,\n  step,\n  backDisabled,\n  submitDisabled,\n  pages,\n  backClicked,\n  hasErrors,\n  emailVerificationError,\n}) => {\n  const handleEnterPress = (event, fn) => {\n    if (event.which === 13) {\n      fn();\n    }\n  };\n\n  const renderSubmitLabel = () => {\n    if (isLast && submitDisabled) {\n      return 'Submitting...';\n    }\n\n    if (isLast) {\n      return 'Submit Details';\n    }\n\n    return (\n      <>\n        Next <span>{pages[step + 1].name}</span>\n      </>\n    );\n  };\n\n  return (\n    <div className=\"g-order__actions\">\n      {!!hasErrors && (\n        <div className=\"row\">\n          <div className=\"g-order__error\">\n            <p className=\"c-alert c-alert--warning\">Sorry, but something went wrong, please try again</p>\n          </div>\n        </div>\n      )}\n      <div className=\"row\">\n        <div className=\"g-order__action g-order__action--previous\">\n          <button\n            className=\"back-button\"\n            onKeyDown={(evt) => handleEnterPress(evt, backClicked)}\n            onClick={(event) => {\n              event.preventDefault();\n              backClicked();\n            }}\n            disabled={step === 0 || backDisabled}\n            type=\"button\"\n          >\n            <strong>Back</strong>\n            <span>Your info will be saved</span>\n          </button>\n        </div>\n\n        <div className=\"g-order__action g-order__action--next\">\n          <button className=\"forward-button\" disabled={submitDisabled}>\n            {renderSubmitLabel()}\n          </button>\n        </div>\n      </div>\n\n      {emailVerificationError && (\n        <p className=\"c-alert c-alert--warning\" style={{ margin: '20px 15px 0' }}>\n          {emailVerificationError}\n        </p>\n      )}\n    </div>\n  );\n};\n\nStepTrackerControls.propTypes = {\n  isLast: PropTypes.bool,\n  step: PropTypes.number.isRequired,\n  backClicked: PropTypes.func.isRequired,\n  backDisabled: PropTypes.bool.isRequired,\n  submitDisabled: PropTypes.bool.isRequired,\n  pages: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      heading: PropTypes.string,\n      component: PropTypes.node,\n    }),\n  ).isRequired,\n  hasErrors: PropTypes.bool.isRequired,\n  emailVerificationError: PropTypes.string.isRequired,\n};\n\nStepTrackerControls.defaultProps = {\n  isLast: false,\n};\n\nexport default StepTrackerControls;\n","/* eslint-disable react/no-array-index-key */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\n\nconst StepTrackerPagination = ({ pages }) => {\n  // React Redux hooks\n  const query = useSelector((state) => state.OCAPersonalInfo);\n\n  return (\n    <div className=\"g-order__progress\">\n      {pages &&\n        pages.map((item, index) => {\n          const classes = classNames({\n            'g-order__step': true,\n            'g-order__step--active': query.currentStep - 1 === index,\n          });\n\n          return (\n            <div className={classes} key={index}>\n              <span>{index + 1}</span>\n              {item.name}\n            </div>\n          );\n        })}\n    </div>\n  );\n};\n\nStepTrackerPagination.propTypes = {\n  pages: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n    }),\n  ).isRequired,\n};\n\nexport default StepTrackerPagination;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Component Imports\nimport InputField from '../../../../Forms/InputField';\nimport InputSelect from '../../../../Forms/InputSelect';\nimport DateSelector from '../../../../Forms/DateSelector';\nimport { emailValidationRegex } from '../../../../Forms/utils';\n\nconst BusinessDetails = (props) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCACompanyInfo);\n\n  return (\n    <>\n      <InputField\n        labelText=\"Business name\"\n        id=\"business-name\"\n        placeholder=\"Business name\"\n        onChange={(event) => dispatch({ type: 'SET_BUSINESS_NAME', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['business-name']}\n        value={query.businessName}\n      />\n\n      <div className=\"b-form-group\">\n        <InputSelect\n          labelText=\"Select business type\"\n          id=\"business-type\"\n          onChange={(event) => dispatch({ type: 'SET_BUSINESS_TYPE', payload: event.target.value })}\n          ref={props.register({ required: true })}\n          hasError={!!props.validationErrors['business-type']}\n          value={query.businessType}\n        >\n          <InputSelect.Option value=\"\">Select business type...</InputSelect.Option>\n          <InputSelect.Option value=\"Limited Company\">Limited Company</InputSelect.Option>\n          <InputSelect.Option value=\"Sole Trader\">Sole Trader</InputSelect.Option>\n          <InputSelect.Option value=\"Partnership Four Partners\">Partnership (4+ partners)</InputSelect.Option>\n          <InputSelect.Option value=\"Partnership Two Three Partners\">Partnership (2-3 partners)</InputSelect.Option>\n          <InputSelect.Option value=\"Limited Liability Partnership\">Limited Liability Partnership</InputSelect.Option>\n          <InputSelect.Option value=\"PLC\">PLC</InputSelect.Option>\n        </InputSelect>\n      </div>\n\n      <DateSelector\n        id=\"business-established\"\n        groupText=\"Date established\"\n        dispatchAction=\"SET_DATE_BUSINESS_ESTABLISHED\"\n        required\n        ref={props.register({ required: true })}\n        hasError={props.validationErrors}\n        value={query.businessEstablished}\n      />\n\n      <InputField\n        labelText=\"Company number\"\n        id=\"company-number\"\n        placeholder=\"Company number\"\n        onChange={(event) => dispatch({ type: 'SET_COMPANY_NUMBER', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['company-number']}\n        value={query.companyNumber}\n      />\n\n      <InputField\n        labelText=\"VAT number\"\n        id=\"vat-number\"\n        placeholder=\"VAT number\"\n        onChange={(event) => dispatch({ type: 'SET_VAT_NUMBER', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['vat-number']}\n        value={query.vatNumber}\n      />\n\n      <InputField\n        type=\"number\"\n        min=\"0\"\n        labelText=\"Number of directors\"\n        id=\"number-of-directors\"\n        placeholder=\"Number of directors\"\n        onChange={(event) => dispatch({ type: 'SET_NUMBER_OF_DIRECTORS', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['number-of-directors']}\n        value={query.numberOfDirectors}\n      />\n\n      <InputField\n        type=\"email\"\n        labelText=\"Email\"\n        id=\"business-email\"\n        placeholder=\"Email\"\n        onChange={(event) => dispatch({ type: 'SET_BUSINESS_EMAIL', payload: event.target.value })}\n        ref={props.register({\n          required: true,\n          pattern: emailValidationRegex,\n        })}\n        hasError={!!props.validationErrors['business-email']}\n        value={query.businessEmail}\n      />\n    </>\n  );\n};\n\nBusinessDetails.propTypes = {\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'business-name': PropTypes.shape({}),\n    'business-type': PropTypes.shape({}),\n    'company-number': PropTypes.shape({}),\n    'vat-number': PropTypes.shape({}),\n    'number-of-directors': PropTypes.shape({}),\n    'business-email': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default BusinessDetails;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { isValidNumber } from 'libphonenumber-js';\n\n// Component Import\nimport Accordion from '../../../../Accordion/Accordion';\nimport InputField from '../../../../Forms/InputField';\nimport InputSelect from '../../../../Forms/InputSelect';\nimport AddressLookup from '../../../../Forms/AddressLookup';\nimport TimeSelector from '../../../../Forms/TimeSelector';\nimport PreviousPremisesAddress from './PreviousPremisesAddress';\n\nconst PremisesHistory = (props) => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCACompanyInfo);\n\n  const toggleAccordion = (event) => {\n    event.preventDefault();\n    setIsOpen((wasOpen) => !wasOpen);\n  };\n\n  // Unregister specific accordion required fields if user selects over 5 years\n  const handleYearChange = (event) => {\n    if (event.target.value >= 5) {\n      props.unregister([\n        'previous-company-postcode',\n        'previous-company-address-line-1',\n        'previous-company-town',\n        'previous-company-county',\n        'years-at-time-at-previous-company-address',\n        'months-at-time-at-previous-company-address',\n      ]);\n    }\n  };\n\n  return (\n    <>\n      <span className=\"md-font-size-normal sm-font-size-normal\">Company address *</span>\n      <AddressLookup\n        searchLabel=\"Company Postcode\"\n        id=\"company-postcode\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_COMPANY_POSTCODE',\n            payload: event.target.value,\n          })\n        }\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['company-postcode']}\n        value={query.companyPostcode}\n        actionName=\"COMPANY\"\n      />\n\n      <InputField\n        labelText=\"Address line 1\"\n        id=\"company-address-line-1\"\n        placeholder=\"Address line 1\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_COMPANY_ADDRESS_LINE_1',\n            payload: event.target.value,\n          })\n        }\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['company-address-line-1']}\n        value={query.companyAddressLine1}\n      />\n\n      <InputField\n        labelText=\"Address line 2\"\n        id=\"company-address-line-2\"\n        placeholder=\"Address line 2\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_COMPANY_ADDRESS_LINE_2',\n            payload: event.target.value,\n          })\n        }\n        value={query.companyAddressLine2}\n      />\n\n      <InputField\n        labelText=\"Address line 3\"\n        id=\"company-address-line-3\"\n        placeholder=\"Address line 3\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_COMPANY_ADDRESS_LINE_3',\n            payload: event.target.value,\n          })\n        }\n        value={query.companyAddressLine3}\n      />\n\n      <InputField\n        labelText=\"Town\"\n        id=\"company-town\"\n        placeholder=\"Town\"\n        onChange={(event) => dispatch({ type: 'SET_COMPANY_TOWN', payload: event.target.value })}\n        ref={props.register({ required: true, pattern: /^[A-Za-z\\s-]+$/i })}\n        hasError={!!props.validationErrors['company-town']}\n        value={query.companyTown}\n      />\n\n      <InputField\n        labelText=\"County\"\n        id=\"company-county\"\n        placeholder=\"County\"\n        onChange={(event) => dispatch({ type: 'SET_COMPANY_COUNTY', payload: event.target.value })}\n        ref={props.register({ required: true, pattern: /^[A-Za-z\\s-]+$/i })}\n        hasError={!!props.validationErrors['company-county']}\n        value={query.companyCounty}\n      />\n\n      <div className=\"b-form-group\">\n        <InputSelect\n          labelText=\"Select Property Status\"\n          id=\"company-property-status\"\n          onChange={(event) =>\n            dispatch({\n              type: 'SET_COMPANY_PROPERTY_STATUS',\n              payload: event.target.value,\n            })\n          }\n          ref={props.register({ required: true })}\n          hasError={!!props.validationErrors['company-property-status']}\n          value={query.companyPropertyStatus}\n        >\n          <InputSelect.Option value=\"Owned Outright\">Owned Outright</InputSelect.Option>\n          <InputSelect.Option value=\"Owned With Mortgage\">Owned with Mortgage</InputSelect.Option>\n          <InputSelect.Option value=\"Rented\">Rented</InputSelect.Option>\n        </InputSelect>\n      </div>\n\n      <TimeSelector\n        labelText=\"Time at address\"\n        id=\"time-at-company-address\"\n        yearsDispatch=\"SET_YEARS_AT_COMPANY_ADDRESS\"\n        monthsDispatch=\"SET_MONTHS_AT_COMPANY_ADDRESS\"\n        required\n        ref={props.register({ required: true })}\n        hasError={props.validationErrors['time-at-company-address']}\n        value={[query.yearsAtCompanyAddress, query.monthsAtCompanyAddress]}\n        onChange={(event) => handleYearChange(event)}\n      />\n\n      <InputField\n        type=\"tel\"\n        labelText=\"Telephone\"\n        id=\"company-telephone\"\n        placeholder=\"Telephone\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_COMPANY_TELEPHONE',\n            payload: event.target.value,\n          })\n        }\n        ref={props.register({\n          required: true,\n          validate: (value) => isValidNumber(value, 'GB'),\n        })}\n        hasError={!!props.validationErrors['company-telephone']}\n        value={query.companyTelephone}\n      />\n\n      <Accordion\n        id=\"five-years-premises-or-less\"\n        buttonText=\"If less than 5 years, please add previous address\"\n        isOpen={isOpen || (query.yearsAtCompanyAddress !== '' && query.yearsAtCompanyAddress < 5)}\n        onClick={toggleAccordion}\n      >\n        <PreviousPremisesAddress\n          isValidated={query.yearsAtCompanyAddress !== '' && query.yearsAtCompanyAddress < 5}\n          register={props.register}\n          validationErrors={props.validationErrors}\n        />\n      </Accordion>\n    </>\n  );\n};\n\nPremisesHistory.propTypes = {\n  register: PropTypes.func.isRequired,\n  unregister: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'company-postcode': PropTypes.shape({}),\n    'company-address-line-1': PropTypes.shape({}),\n    'company-town': PropTypes.shape({}),\n    'company-county': PropTypes.shape({}),\n    'company-property-status': PropTypes.shape({}),\n    'time-at-company-address': PropTypes.shape({}),\n    'company-telephone': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default PremisesHistory;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Component Imports\nimport InputField from '../../../../Forms/InputField';\nimport TimeSelector from '../../../../Forms/TimeSelector';\nimport AddressLookup from '../../../../Forms/AddressLookup';\n\nconst PreviousPremisesAddress = ({ isValidated, register, validationErrors }) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCACompanyInfo);\n\n  return (\n    <>\n      <AddressLookup\n        searchLabel=\"Postcode\"\n        id=\"previous-company-postcode\"\n        onChange={(event) => dispatch({ type: 'SET_PREVIOUS_COMPANY_POSTCODE', payload: event.target.value })}\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? !!validationErrors['previous-company-postcode'] : undefined}\n        value={query.previousCompanyPostcode}\n        actionName=\"PREVIOUS_COMPANY\"\n      />\n\n      <InputField\n        labelText=\"Address line 1\"\n        id=\"previous-company-address-line-1\"\n        placeholder=\"Address line 1\"\n        onChange={(event) => dispatch({ type: 'SET_PREVIOUS_COMPANY_ADDRESS_LINE_1', payload: event.target.value })}\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? !!validationErrors['previous-company-address-line-1'] : undefined}\n        value={query.previousCompanyAddressLine1}\n      />\n\n      <InputField\n        labelText=\"Address line 2\"\n        id=\"previous-company-address-line-2\"\n        placeholder=\"Address line 2\"\n        onChange={(event) => dispatch({ type: 'SET_PREVIOUS_COMPANY_ADDRESS_LINE_2', payload: event.target.value })}\n        value={query.previousCompanyAddressLine2}\n      />\n\n      <InputField\n        labelText=\"Address line 3\"\n        id=\"previous-company-address-line-3\"\n        placeholder=\"Address line 3\"\n        onChange={(event) => dispatch({ type: 'SET_PREVIOUS_COMPANY_ADDRESS_LINE_3', payload: event.target.value })}\n        value={query.previousCompanyAddressLine3}\n      />\n\n      <InputField\n        labelText=\"Town\"\n        id=\"previous-company-town\"\n        placeholder=\"Town\"\n        onChange={(event) => dispatch({ type: 'SET_PREVIOUS_COMPANY_TOWN', payload: event.target.value })}\n        ref={isValidated ? register({ required: true, pattern: /^[A-Za-z\\s-]+$/i }) : undefined}\n        hasError={isValidated ? !!validationErrors['previous-company-town'] : undefined}\n        value={query.previousCompanyTown}\n      />\n\n      <InputField\n        labelText=\"County\"\n        id=\"previous-company-county\"\n        placeholder=\"County\"\n        onChange={(event) => dispatch({ type: 'SET_PREVIOUS_COMPANY_COUNTY', payload: event.target.value })}\n        ref={isValidated ? register({ required: true, pattern: /^[A-Za-z\\s-]+$/i }) : undefined}\n        hasError={isValidated ? !!validationErrors['previous-company-county'] : undefined}\n        value={query.previousCompanyCounty}\n      />\n\n      <TimeSelector\n        labelText=\"Time at address\"\n        id=\"time-at-previous-company-address\"\n        yearsDispatch=\"SET_YEARS_AT_PREVIOUS_COMPANY_ADDRESS\"\n        monthsDispatch=\"SET_MONTHS_AT_PREVIOUS_COMPANY_ADDRESS\"\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? validationErrors : undefined}\n        value={[query.yearsAtPreviousCompanyAddress, query.monthsAtPreviousCompanyAddress]}\n      />\n    </>\n  );\n};\n\nPreviousPremisesAddress.propTypes = {\n  isValidated: PropTypes.bool.isRequired,\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'previous-company-postcode': PropTypes.shape({}),\n    'previous-company-address-line-1': PropTypes.shape({}),\n    'previous-company-town': PropTypes.shape({}),\n    'previous-company-county': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default PreviousPremisesAddress;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Component Imports\nimport InputField from '../../../../Forms/InputField';\nimport TimeSelector from '../../../../Forms/TimeSelector';\n\nconst BankDetails = (props) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCABankInfo);\n\n  return (\n    <>\n      <InputField\n        labelText=\"Bank name\"\n        id=\"business-bank-name\"\n        placeholder=\"Bank name\"\n        onChange={(event) => dispatch({ type: 'SET_BUSINESS_BANK_NAME', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['business-bank-name']}\n        value={query.businessBankName}\n      />\n\n      <TimeSelector\n        labelText=\"Time with bank\"\n        id=\"time-with-business-bank\"\n        yearsDispatch=\"SET_YEARS_WITH_BUSINESS_BANK\"\n        monthsDispatch=\"SET_MONTHS_WITH_BUSINESS_BANK\"\n        required\n        ref={props.register({ required: true })}\n        hasError={props.validationErrors['time-with-business-bank']}\n        value={[query.yearsWithBusinessBank, query.monthsWithBusinessBank]}\n      />\n    </>\n  );\n};\n\nBankDetails.propTypes = {\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'business-bank-name': PropTypes.shape({}),\n    'time-with-business-bank': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default BankDetails;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Component Imports\nimport InputField from '../../../../Forms/InputField';\n\nconst BankAccountDetails = (props) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCABankInfo);\n\n  return (\n    <>\n      <InputField\n        labelText=\"Account Holder Name\"\n        id=\"business-account-holder\"\n        placeholder=\"Account Holder Name\"\n        onChange={(event) => dispatch({ type: 'SET_BUSINESS_ACCOUNT_HOLDER', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['business-account-holder']}\n        value={query.businessAccountHolder}\n      />\n\n      <InputField\n        type=\"number\"\n        labelText=\"Account Number\"\n        id=\"business-account-number\"\n        placeholder=\"Account Number\"\n        onChange={(event) => dispatch({ type: 'SET_BUSINESS_ACCOUNT_NUMBER', payload: event.target.value })}\n        ref={props.register({ required: true, minLength: 7, maxLength: 12 })}\n        hasError={!!props.validationErrors['business-account-number']}\n        value={query.businessAccountNumber}\n      />\n\n      <InputField\n        type=\"number\"\n        labelText=\"Sort Code\"\n        id=\"business-sort-code\"\n        placeholder=\"Sort Code\"\n        onChange={(event) => dispatch({ type: 'SET_BUSINESS_SORT_CODE', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['business-sort-code']}\n        value={query.businessSortCode}\n      />\n    </>\n  );\n};\n\nBankAccountDetails.propTypes = {\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'business-account-holder': PropTypes.shape({}),\n    'business-account-number': PropTypes.shape({}),\n    'business-sort-code': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default BankAccountDetails;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { isValidNumber } from 'libphonenumber-js';\n\n// Component Imports\nimport InputSelect from '../../../../Forms/InputSelect';\nimport InputField from '../../../../Forms/InputField';\nimport DateSelector from '../../../../Forms/DateSelector';\nimport { emailValidationRegex } from '../../../../Forms/utils';\n\nconst PersonalDetails = (props) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCAPersonalInfo);\n\n  return (\n    <>\n      <div className=\"b-form-group\">\n        <p className=\"g-order__note\">\n          All given names must <strong>match</strong> your driving license.\n        </p>\n      </div>\n\n      <div className=\"b-form-group\">\n        <InputSelect\n          labelText=\"Select title\"\n          id=\"customer-title\"\n          onChange={(event) => dispatch({ type: 'SET_TITLE', payload: event.target.value })}\n          ref={props.register({ required: true })}\n          hasError={!!props.validationErrors['customer-title']}\n          value={query.title}\n        >\n          <InputSelect.Option value=\"\">Select title</InputSelect.Option>\n          <InputSelect.Option value=\"Mr.\">Mr</InputSelect.Option>\n          <InputSelect.Option value=\"Mrs.\">Mrs</InputSelect.Option>\n          <InputSelect.Option value=\"Ms.\">Ms</InputSelect.Option>\n          <InputSelect.Option value=\"Miss.\">Miss</InputSelect.Option>\n          <InputSelect.Option value=\"Dr.\">Dr</InputSelect.Option>\n          <InputSelect.Option value=\"Rev.\">Rev</InputSelect.Option>\n        </InputSelect>\n      </div>\n\n      <InputField\n        labelText=\"First name\"\n        id=\"customer-first-name\"\n        placeholder=\"First name\"\n        onChange={(event) => dispatch({ type: 'SET_FIRST_NAME', payload: event.target.value })}\n        ref={props.register({ required: true, pattern: /^[A-Za-z\\s-]+$/i })}\n        hasError={!!props.validationErrors['customer-first-name']}\n        value={query.firstName}\n      />\n\n      <InputField\n        labelText=\"Middle name\"\n        id=\"customer-middle-name\"\n        placeholder=\"Middle name\"\n        onChange={(event) => dispatch({ type: 'SET_MIDDLE_NAME', payload: event.target.value })}\n        ref={props.register()}\n        hasError={!!props.validationErrors['customer-middle-name']}\n        value={query.middleName}\n      />\n\n      <InputField\n        labelText=\"Surname\"\n        id=\"customer-surname\"\n        placeholder=\"Surname\"\n        onChange={(event) => dispatch({ type: 'SET_SURNAME', payload: event.target.value })}\n        ref={props.register({ required: true, pattern: /^[A-Za-z\\s-]+$/i })}\n        hasError={!!props.validationErrors['customer-surname']}\n        value={query.surname}\n      />\n\n      <DateSelector\n        id=\"customer-dob\"\n        groupText=\"Date of birth\"\n        dispatchAction=\"SET_DATE_OF_BIRTH\"\n        required\n        ref={props.register({ required: true })}\n        hasError={props.validationErrors}\n        value={query.dateOfBirth}\n      />\n\n      <InputField\n        type=\"tel\"\n        labelText=\"Telephone\"\n        id=\"customer-telephone\"\n        placeholder=\"Telephone\"\n        onChange={(event) => dispatch({ type: 'SET_TELEPHONE', payload: event.target.value })}\n        ref={props.register({\n          required: true,\n          validate: (value) => isValidNumber(value, 'GB'),\n        })}\n        hasError={!!props.validationErrors['customer-telephone']}\n        value={query.telephone}\n      />\n\n      <InputField\n        type=\"email\"\n        labelText=\"Email\"\n        id=\"customer-email\"\n        placeholder=\"Email\"\n        disabled={!!props.verifyQuery.email}\n        onChange={(event) => dispatch({ type: 'SET_EMAIL', payload: event.target.value })}\n        ref={props.register({\n          required: true,\n          pattern: emailValidationRegex,\n        })}\n        hasError={!!props.validationErrors['customer-email']}\n        value={props.verifyQuery.email || query.email}\n      />\n\n      <div className=\"b-form-group\">\n        <InputSelect\n          labelText=\"Select Marital Status\"\n          id=\"customer-marital\"\n          onChange={(event) =>\n            dispatch({\n              type: 'SET_MARITAL_STATUS',\n              payload: event.target.value,\n            })\n          }\n          ref={props.register({ required: true })}\n          hasError={!!props.validationErrors['customer-marital']}\n          value={query.maritalStatus}\n        >\n          <InputSelect.Option value=\"\">Select Marital Status</InputSelect.Option>\n          <InputSelect.Option value=\"Married\">Married</InputSelect.Option>\n          <InputSelect.Option value=\"Single\">Single</InputSelect.Option>\n          <InputSelect.Option value=\"LivingWithPartner\">Living with partner</InputSelect.Option>\n          <InputSelect.Option value=\"Divorced\">Divorced</InputSelect.Option>\n        </InputSelect>\n      </div>\n\n      <InputField\n        type=\"number\"\n        min=\"0\"\n        max=\"99\"\n        labelText=\"Number of dependents\"\n        id=\"customer-dependents\"\n        placeholder=\"Number of dependents\"\n        onChange={(event) => {\n          const value = event.target.value.slice(0, 2);\n          dispatch({\n            type: 'SET_NUMBER_OF_DEPENDENTS',\n            payload: value,\n          });\n        }}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['customer-dependents']}\n        value={query.numberOfDependents}\n      />\n    </>\n  );\n};\n\nPersonalDetails.propTypes = {\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'customer-title': PropTypes.shape({}),\n    'customer-first-name': PropTypes.shape({}),\n    'customer-middle-name': PropTypes.shape({}),\n    'customer-surname': PropTypes.shape({}),\n    'customer-telephone': PropTypes.shape({}),\n    'customer-email': PropTypes.shape({}),\n    'customer-marital': PropTypes.shape({}),\n    'customer-dependents': PropTypes.shape({}),\n  }).isRequired,\n  verifyQuery: PropTypes.shape({\n    email: PropTypes.string,\n  }).isRequired,\n};\n\nexport default PersonalDetails;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector, useDispatch } from 'react-redux';\n\n// Component Imports\nimport InputSelect from '../../../../Forms/InputSelect';\nimport PropertyAddress from './PropertyAddress';\nimport Accordion from '../../../../Accordion/Accordion';\n\nconst AccommodationDetails = (props) => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCAPersonalInfo);\n\n  const toggleAccordion = (event) => {\n    event.preventDefault();\n    setIsOpen((wasOpen) => !wasOpen);\n  };\n\n  return (\n    <>\n      <div className=\"b-form-group\">\n        <InputSelect\n          labelText=\"Select Property Status\"\n          id=\"property-status\"\n          onChange={(event) => dispatch({ type: 'SET_PROPERTY_STATUS', payload: event.target.value })}\n          ref={props.register({ required: true })}\n          hasError={!!props.validationErrors['property-status']}\n          value={query.propertyStatus}\n        >\n          <InputSelect.Option value=\"\">Select Property Status</InputSelect.Option>\n          <InputSelect.Option value=\"Owned Outright\">Owned Outright</InputSelect.Option>\n          <InputSelect.Option value=\"Owned With Mortgage\">Owned with Mortgage</InputSelect.Option>\n          <InputSelect.Option value=\"Rented\">Rented</InputSelect.Option>\n          <InputSelect.Option value=\"Living With Parents\">Living with parents</InputSelect.Option>\n        </InputSelect>\n      </div>\n\n      <PropertyAddress\n        id=\"primary-address\"\n        actionName=\"PRIMARY\"\n        isValidated\n        register={props.register}\n        unregister={props.unregister}\n        validationErrors={props.validationErrors}\n      />\n\n      <Accordion\n        id=\"five-years-living-or-less\"\n        buttonText=\"If less than 5 years, please add previous address\"\n        isOpen={isOpen || (query.yearsAtPrimaryAddress !== '' && query.yearsAtPrimaryAddress < 5)}\n        onClick={toggleAccordion}\n      >\n        <PropertyAddress\n          id=\"secondary-address\"\n          actionName=\"SECONDARY\"\n          isValidated={query.yearsAtPrimaryAddress !== '' && query.yearsAtPrimaryAddress < 5}\n          register={props.register}\n          unregister={props.unregister}\n          validationErrors={props.validationErrors}\n        />\n      </Accordion>\n    </>\n  );\n};\n\nAccommodationDetails.propTypes = {\n  register: PropTypes.func.isRequired,\n  unregister: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'property-status': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default AccommodationDetails;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Component Imports\nimport InputSelect from '../../../../Forms/InputSelect';\nimport InputField from '../../../../Forms/InputField';\n\nconst EmployerDetails = (props) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCAEmploymentInfo);\n\n  return (\n    <>\n      <div className=\"b-form-group\">\n        <InputSelect\n          labelText=\"Employment status\"\n          id=\"employment-status\"\n          onChange={(event) =>\n            dispatch({\n              type: 'SET_EMPLOYMENT_STATUS',\n              payload: event.target.value,\n            })\n          }\n          ref={props.register({ required: true })}\n          hasError={!!props.validationErrors['employment-status']}\n          value={query.employmentStatus}\n        >\n          <InputSelect.Option value=\"\">Employment status</InputSelect.Option>\n          <InputSelect.Option value=\"Employed\">Employed</InputSelect.Option>\n          <InputSelect.Option value=\"Self Employed\">Self Employed</InputSelect.Option>\n          <InputSelect.Option value=\"Part time\">Part Time</InputSelect.Option>\n          <InputSelect.Option value=\"Retired\">Retired</InputSelect.Option>\n        </InputSelect>\n      </div>\n\n      {query.employmentStatus !== 'Retired' && (\n        <>\n          <InputField\n            labelText=\"Employer\"\n            id=\"employer\"\n            placeholder=\"Employer\"\n            onChange={(event) => dispatch({ type: 'SET_EMPLOYER', payload: event.target.value })}\n            ref={props.register({ required: true })}\n            hasError={!!props.validationErrors.employer}\n            value={query.employer}\n          />\n\n          <InputField\n            labelText=\"Job title\"\n            id=\"job-title\"\n            placeholder=\"Job title\"\n            onChange={(event) => dispatch({ type: 'SET_JOB_TITLE', payload: event.target.value })}\n            ref={props.register({ required: true })}\n            hasError={!!props.validationErrors['job-title']}\n            value={query.jobTitle}\n          />\n        </>\n      )}\n    </>\n  );\n};\n\nEmployerDetails.propTypes = {\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'employment-status': PropTypes.shape({}),\n    employer: PropTypes.shape({}),\n    'job-title': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default EmployerDetails;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { isValidNumber } from 'libphonenumber-js';\n\n// Component Imports\nimport InputField from '../../../../Forms/InputField';\nimport AddressLookup from '../../../../Forms/AddressLookup';\n\nconst EmployerAddress = (props) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCAEmploymentInfo);\n\n  return (\n    <>\n      <AddressLookup\n        searchLabel=\"Employer Postcode\"\n        id=\"employer-postcode\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_EMPLOYER_POSTCODE',\n            payload: event.target.value,\n          })\n        }\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['employer-postcode']}\n        value={query.employerPostcode}\n        actionName=\"EMPLOYER\"\n      />\n\n      <InputField\n        labelText=\"Employer Address line 1\"\n        id=\"employer-address-line-1\"\n        placeholder=\"Employer Address line 1\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_EMPLOYER_ADDRESS_LINE_1',\n            payload: event.target.value,\n          })\n        }\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['employer-address-line-1']}\n        value={query.employerAddressLine1}\n      />\n\n      <InputField\n        labelText=\"Employer Address line 2\"\n        id=\"employer-address-line-2\"\n        placeholder=\"Employer Address line 2\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_EMPLOYER_ADDRESS_LINE_2',\n            payload: event.target.value,\n          })\n        }\n        value={query.employerAddressLine2}\n      />\n\n      <InputField\n        labelText=\"Employer Address line 3\"\n        id=\"employer-address-line-3\"\n        placeholder=\"Employer Address line 3\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_EMPLOYER_ADDRESS_LINE_3',\n            payload: event.target.value,\n          })\n        }\n        value={query.employerAddressLine3}\n      />\n\n      <InputField\n        labelText=\"Employer Town\"\n        id=\"employer-town\"\n        placeholder=\"Employer Town\"\n        onChange={(event) => dispatch({ type: 'SET_EMPLOYER_TOWN', payload: event.target.value })}\n        ref={props.register({ required: true, pattern: /^[A-Za-z\\s-]+$/i })}\n        hasError={!!props.validationErrors['employer-town']}\n        value={query.employerTown}\n      />\n\n      <InputField\n        labelText=\"Employer County\"\n        id=\"employer-county\"\n        placeholder=\"Employer County\"\n        onChange={(event) => dispatch({ type: 'SET_EMPLOYER_COUNTY', payload: event.target.value })}\n        ref={props.register({ required: true, pattern: /^[A-Za-z\\s-]+$/i })}\n        hasError={!!props.validationErrors['employer-county']}\n        value={query.employerCounty}\n      />\n\n      <InputField\n        type=\"tel\"\n        labelText=\"Employer Telephone\"\n        id=\"employer-telephone\"\n        placeholder=\"Employer Telephone\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_EMPLOYER_TELEPHONE',\n            payload: event.target.value,\n          })\n        }\n        ref={props.register({\n          required: true,\n          validate: (value) => isValidNumber(value, 'GB'),\n        })}\n        hasError={!!props.validationErrors['employer-telephone']}\n        value={query.employerTelephone}\n      />\n    </>\n  );\n};\n\nEmployerAddress.propTypes = {\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'employer-postcode': PropTypes.shape({}),\n    'employer-address-line-1': PropTypes.shape({}),\n    'employer-town': PropTypes.shape({}),\n    'employer-county': PropTypes.shape({}),\n    'employer-telephone': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default EmployerAddress;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { isValidNumber } from 'libphonenumber-js';\n\n// Component Imports\nimport InputField from '../../../../Forms/InputField';\nimport InputSelect from '../../../../Forms/InputSelect';\nimport TimeSelector from '../../../../Forms/TimeSelector';\nimport AddressLookup from '../../../../Forms/AddressLookup';\n\nconst PreviousEmployerDetails = ({ isValidated, register, validationErrors }) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCAEmploymentInfo);\n\n  return (\n    <>\n      <div className=\"b-form-group\">\n        <InputSelect\n          labelText=\"Previous employment status\"\n          id=\"previous-employment-status\"\n          onChange={(event) =>\n            dispatch({\n              type: 'SET_PREVIOUS_EMPLOYMENT_STATUS',\n              payload: event.target.value,\n            })\n          }\n          ref={isValidated ? register({ required: true }) : undefined}\n          hasError={isValidated ? !!validationErrors['previous-employment-status'] : undefined}\n          value={query.previousEmploymentStatus}\n        >\n          <InputSelect.Option value=\"\">Select Previous employment status</InputSelect.Option>\n          <InputSelect.Option value=\"Employed\">Employed</InputSelect.Option>\n          <InputSelect.Option value=\"Self Employed\">Self Employed</InputSelect.Option>\n          <InputSelect.Option value=\"Part time\">Part Time</InputSelect.Option>\n          <InputSelect.Option value=\"Retired\">Retired</InputSelect.Option>\n        </InputSelect>\n      </div>\n\n      <InputField\n        labelText=\"Previous employer\"\n        id=\"previous-employer\"\n        placeholder=\"Previous employer\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_PREVIOUS_EMPLOYER',\n            payload: event.target.value,\n          })\n        }\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? !!validationErrors['previous-employer'] : undefined}\n        value={query.previousEmployer}\n      />\n\n      <InputField\n        labelText=\"Job title\"\n        id=\"previous-job-title\"\n        placeholder=\"Job title\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_PREVIOUS_JOB_TITLE',\n            payload: event.target.value,\n          })\n        }\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? !!validationErrors['previous-job-title'] : undefined}\n        value={query.previousJobTitle}\n      />\n\n      <AddressLookup\n        searchLabel=\"Employer Postcode\"\n        id=\"previous-employer-postcode\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_PREVIOUS_EMPLOYER_POSTCODE',\n            payload: event.target.value,\n          })\n        }\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? !!validationErrors['previous-employer-postcode'] : undefined}\n        value={query.previousEmployerPostcode}\n        actionName=\"PREVIOUS_EMPLOYER\"\n      />\n\n      <InputField\n        labelText=\"Employer Address line 1\"\n        id=\"previous-employer-address-line-1\"\n        placeholder=\"Employer Address line 1\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_PREVIOUS_EMPLOYER_ADDRESS_LINE_1',\n            payload: event.target.value,\n          })\n        }\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? !!validationErrors['previous-employer-address-line-1'] : undefined}\n        value={query.previousEmployerAddressLine1}\n      />\n\n      <InputField\n        labelText=\"Employer Address line 2\"\n        id=\"previous-employer-address-line-2\"\n        placeholder=\"Employer Address line 2\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_PREVIOUS_EMPLOYER_ADDRESS_LINE_2',\n            payload: event.target.value,\n          })\n        }\n        value={query.previousEmployerAddressLine2}\n      />\n\n      <InputField\n        labelText=\"Employer Address line 3\"\n        id=\"previous-employer-address-line-3\"\n        placeholder=\"Employer Address line 3\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_PREVIOUS_EMPLOYER_ADDRESS_LINE_3',\n            payload: event.target.value,\n          })\n        }\n        value={query.previousEmployerAddressLine3}\n      />\n\n      <InputField\n        labelText=\"Employer Town\"\n        id=\"previous-employer-town\"\n        placeholder=\"Employer Town\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_PREVIOUS_EMPLOYER_TOWN',\n            payload: event.target.value,\n          })\n        }\n        ref={isValidated ? register({ required: true, pattern: /^[A-Za-z\\s-]+$/i }) : undefined}\n        hasError={isValidated ? !!validationErrors['previous-employer-town'] : undefined}\n        value={query.previousEmployerTown}\n      />\n\n      <InputField\n        labelText=\"Employer County\"\n        id=\"previous-employer-county\"\n        placeholder=\"Employer County\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_PREVIOUS_EMPLOYER_COUNTY',\n            payload: event.target.value,\n          })\n        }\n        ref={isValidated ? register({ required: true, pattern: /^[A-Za-z\\s-]+$/i }) : undefined}\n        hasError={isValidated ? !!validationErrors['previous-employer-county'] : undefined}\n        value={query.previousEmployerCounty}\n      />\n\n      <InputField\n        type=\"tel\"\n        labelText=\"Employer Telephone\"\n        id=\"previous-employer-telephone\"\n        placeholder=\"Employer Telephone\"\n        onChange={(event) =>\n          dispatch({\n            type: 'SET_PREVIOUS_EMPLOYER_TELEPHONE',\n            payload: event.target.value,\n          })\n        }\n        ref={\n          isValidated\n            ? register({\n                required: true,\n                validate: (value) => isValidNumber(value, 'GB'),\n              })\n            : undefined\n        }\n        hasError={isValidated ? !!validationErrors['previous-employer-telephone'] : undefined}\n        value={query.previousEmployerTelephone}\n      />\n\n      <TimeSelector\n        labelText=\"Time at employer\"\n        id=\"previous-employer\"\n        yearsDispatch=\"SET_YEARS_AT_PREVIOUS_EMPLOYER\"\n        monthsDispatch=\"SET_MONTHS_AT_PREVIOUS_EMPLOYER\"\n        required\n        ref={isValidated ? register({ required: true }) : undefined}\n        hasError={isValidated ? validationErrors['previous-employer'] : undefined}\n        value={[query.yearsAtPreviousEmployer, query.monthsAtPreviousEmployer]}\n      />\n    </>\n  );\n};\n\nPreviousEmployerDetails.propTypes = {\n  isValidated: PropTypes.bool.isRequired,\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'previous-employment-status': PropTypes.shape({}),\n    'previous-employer': PropTypes.shape({}),\n    'previous-job-title': PropTypes.shape({}),\n    'previous-employer-postcode': PropTypes.shape({}),\n    'previous-employer-address-line-1': PropTypes.shape({}),\n    'previous-employer-town': PropTypes.shape({}),\n    'previous-employer-county': PropTypes.shape({}),\n    'previous-employer-telephone': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default PreviousEmployerDetails;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Component Imports\nimport InputField from '../../../../Forms/InputField';\n\nconst PaymentsDetails = (props) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCAFinances);\n\n  return (\n    <>\n      <InputField\n        type=\"number\"\n        min=\"0\"\n        labelText=\"Gross annual salary\"\n        id=\"gross-annual-salary\"\n        placeholder=\"Gross annual salary\"\n        onChange={(event) => dispatch({ type: 'SET_GROSS_ANNUAL_SALARY', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['gross-annual-salary']}\n        value={query.grossAnnualSalary}\n      />\n\n      <InputField\n        type=\"number\"\n        min=\"0\"\n        labelText=\"Monthly income\"\n        id=\"monthly-income\"\n        placeholder=\"Monthly income\"\n        onChange={(event) => dispatch({ type: 'SET_MONTHLY_INCOME', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['monthly-income']}\n        value={query.monthlyIncome}\n      />\n\n      <InputField\n        type=\"number\"\n        min=\"0\"\n        labelText=\"Monthly Mortgage/Rent\"\n        id=\"monthly-mortgage-rent\"\n        placeholder=\"Monthly Mortgage/Rent\"\n        onChange={(event) => dispatch({ type: 'SET_MONTHLY_MORTGAGE_RENT', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['monthly-mortgage-rent']}\n        value={query.monthlyMortgageRent}\n      />\n\n      <InputField\n        type=\"number\"\n        min=\"0\"\n        labelText=\"Monthly Car payments\"\n        id=\"monthly-car-payments\"\n        placeholder=\"Monthly Car payments\"\n        onChange={(event) => dispatch({ type: 'SET_MONTHLY_CAR_PAYMENTS', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['monthly-car-payments']}\n        value={query.monthlyCarPayments}\n      />\n\n      <InputField\n        type=\"number\"\n        min=\"0\"\n        labelText=\"Other monthly outgoings\"\n        id=\"monthly-other-outgoings\"\n        placeholder=\"Other monthly outgoings\"\n        onChange={(event) => dispatch({ type: 'SET_MONTHLY_OTHER_OUTGOINGS', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['monthly-other-outgoings']}\n        value={query.monthlyOtherOutgoings}\n      />\n    </>\n  );\n};\n\nPaymentsDetails.propTypes = {\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'gross-annual-salary': PropTypes.shape({}),\n    'monthly-income': PropTypes.shape({}),\n    'monthly-mortgage-rent': PropTypes.shape({}),\n    'monthly-car-payments': PropTypes.shape({}),\n    'monthly-other-outgoings': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default PaymentsDetails;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Component Imports\nimport InputField from '../../../../Forms/InputField';\nimport TimeSelector from '../../../../Forms/TimeSelector';\n\nconst BankAccountDetails = (props) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCAFinances);\n\n  return (\n    <>\n      <InputField\n        labelText=\"Bank name\"\n        id=\"bank-name\"\n        placeholder=\"Bank name\"\n        onChange={(event) => dispatch({ type: 'SET_BANK_NAME', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['bank-name']}\n        value={query.bankName}\n      />\n\n      <InputField\n        labelText=\"Bank address\"\n        id=\"bank-address\"\n        placeholder=\"Bank address\"\n        onChange={(event) => dispatch({ type: 'SET_BANK_ADDRESS', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['bank-address']}\n        value={query.bankAddress}\n      />\n\n      <TimeSelector\n        labelText=\"Time with bank\"\n        id=\"time-with-bank\"\n        yearsDispatch=\"SET_YEARS_WITH_BANK\"\n        monthsDispatch=\"SET_MONTHS_WITH_BANK\"\n        required\n        ref={props.register({ required: true })}\n        hasError={props.validationErrors['time-with-bank']}\n        value={[query.yearsWithBank, query.monthsWithBank]}\n      />\n\n      <InputField\n        labelText=\"Account name\"\n        id=\"bank-account-name\"\n        placeholder=\"Account name\"\n        onChange={(event) => dispatch({ type: 'SET_BANK_ACCOUNT_NAME', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['bank-account-name']}\n        value={query.bankAccountName}\n      />\n\n      <InputField\n        type=\"number\"\n        labelText=\"Account number\"\n        id=\"bank-account-number\"\n        placeholder=\"Account number\"\n        onChange={(event) => dispatch({ type: 'SET_BANK_ACCOUNT_NUMBER', payload: event.target.value })}\n        ref={props.register({ required: true, minLength: 7, maxLength: 12 })}\n        hasError={!!props.validationErrors['bank-account-number']}\n        value={query.bankAccountNumber}\n      />\n\n      <InputField\n        type=\"number\"\n        labelText=\"Sortcode\"\n        id=\"bank-sort-code\"\n        placeholder=\"Sortcode\"\n        onChange={(event) => dispatch({ type: 'SET_BANK_SORT_CODE', payload: event.target.value })}\n        ref={props.register({ required: true })}\n        hasError={!!props.validationErrors['bank-sort-code']}\n        value={query.bankSortCode}\n      />\n    </>\n  );\n};\n\nBankAccountDetails.propTypes = {\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    'bank-name': PropTypes.shape({}),\n    'bank-address': PropTypes.shape({}),\n    'time-with-bank': PropTypes.shape({}),\n    'bank-account-name': PropTypes.shape({}),\n    'bank-account-number': PropTypes.shape({}),\n    'bank-sort-code': PropTypes.shape({}),\n  }).isRequired,\n};\n\nexport default BankAccountDetails;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\n\n// Component Imports\nimport './InputSpinner.scss';\n\nconst InputSpinner = ({ id, labelText, initialValue, min, max, step, updateValue }) => {\n  const [inputValue, setInputValue] = useState(initialValue || 0);\n\n  // React Redux hooks\n  const dispatch = useDispatch();\n\n  const dispatchValue = (value) => {\n    dispatch({\n      type: updateValue,\n      payload: value,\n    });\n  };\n\n  const decreaseValue = (event) => {\n    event.preventDefault();\n\n    const newValue = inputValue - step;\n\n    if (newValue <= min) {\n      setInputValue(min);\n      dispatchValue(min);\n    } else {\n      setInputValue(newValue);\n      dispatchValue(newValue);\n    }\n  };\n\n  const increaseValue = (event) => {\n    event.preventDefault();\n\n    const newValue = inputValue + step;\n\n    if (newValue >= max) {\n      setInputValue(max);\n      dispatchValue(max);\n    } else {\n      setInputValue(newValue);\n      dispatchValue(newValue);\n    }\n  };\n\n  const handleChange = (event) => {\n    const value = parseInt(event.target.value);\n\n    const newValue = Number.isNaN(value) ? '' : value;\n\n    if (newValue <= max) {\n      setInputValue(newValue);\n      dispatchValue(newValue === '' ? 0 : newValue);\n    } else {\n      setInputValue(max);\n      dispatchValue(max);\n    }\n  };\n\n  return (\n    <div className=\"input-spinner\">\n      <label className=\"input-spinner__label\" htmlFor={id}>\n        {labelText}\n      </label>\n\n      <div className=\"input-spinner__controls\">\n        <button className=\"input-spinner__button\" onClick={decreaseValue} aria-controls={id}>\n          <span className=\"sr-only\">Decrease value</span>\n        </button>\n\n        <input\n          className=\"input-spinner__input\"\n          id={id}\n          name={id}\n          type=\"number\"\n          value={inputValue}\n          min={min}\n          max={max}\n          step={step}\n          onChange={handleChange}\n        />\n\n        <button\n          className=\"input-spinner__button input-spinner__button--plus\"\n          onClick={increaseValue}\n          aria-controls={id}\n        >\n          <span className=\"sr-only\">Increase value</span>\n        </button>\n      </div>\n    </div>\n  );\n};\n\nInputSpinner.propTypes = {\n  id: PropTypes.string.isRequired,\n  labelText: PropTypes.string.isRequired,\n  initialValue: PropTypes.number.isRequired,\n  min: PropTypes.number.isRequired,\n  max: PropTypes.number.isRequired,\n  step: PropTypes.number.isRequired,\n  updateValue: PropTypes.string.isRequired,\n};\n\nexport default InputSpinner;\n","import React, { useCallback, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { DirectUpload } from '@rails/activestorage';\nimport RUG, { DropArea, DragArea } from 'react-upload-gallery';\n\n// Component imports\nimport ImageCard from './ImageCard';\n\nconst style = {\n  dropzoneContent: {\n    border: '1px dashed #AC8C30',\n    backgroundColor: '#fff',\n    display: 'flex',\n    flexDirection: 'column',\n    justifyContent: 'center',\n    alignItems: 'center',\n    padding: '95px 18px',\n    borderRadius: '5px',\n    marginBottom: '24px',\n    transition: 'background-color ease .3s, border-style ease .3s, opacity ease .3s',\n  },\n  dropzoneText: {\n    margin: 0,\n  },\n  dropzoneIcon: {\n    marginBottom: '8px',\n  },\n  alertList: {\n    listStyleType: 'none',\n    padding: 0,\n    margin: 0,\n  },\n  alert: {\n    borderRadius: '5px',\n    fontSize: '16px',\n    padding: '12px 18px',\n    color: '#CA2323',\n    backgroundColor: '#FCF4F4',\n    marginBottom: '16px',\n    border: '1px solid #ca232333',\n  },\n};\n\nconst ImageUploader = ({ existingUploads, presentable, relationName, fileTypes, imageLimit }) => {\n  const [state, setState] = useState({\n    warnings: [],\n    uploadError: false,\n  });\n\n  const handleWarning = (type, rules) => {\n    const updatedWarnings = [...state.warnings];\n\n    switch (type) {\n      case 'accept':\n        updatedWarnings.push(`Image uploads must be one of the following types: ${rules.accept.join(', ')}`);\n        break;\n\n      case 'limit':\n        updatedWarnings.push(`You are only allowed to upload a maximum of ${rules.limit} images`);\n        break;\n\n      case 'size':\n        updatedWarnings.push(`Images must have a file size below ${rules.size}KB`);\n        break;\n\n      case 'minWidth':\n      case 'minHeight':\n        updatedWarnings.push(`Images must be at least ${rules.width.min}x${rules.height.min}`);\n        break;\n\n      case 'maxWidth':\n      case 'maxHeight':\n        updatedWarnings.push(`Images must not be larger than ${rules.width.max}x${rules.height.max}`);\n        break;\n\n      default:\n    }\n\n    setState({ ...state, warnings: updatedWarnings });\n  };\n\n  const handleError = () => {\n    setState({ ...state, uploadError: true });\n  };\n\n  const customRequest = ({ uid, file, action, onSuccess, onError }) => {\n    const upload = new DirectUpload(file, action);\n\n    upload.create((error, blob) => {\n      if (error) {\n        onError(uid, { action, error });\n      } else {\n        // Create the input that the form will submit the blob signed it with\n        ImageUploader.addBlobAsAttachment(blob, presentable, relationName);\n\n        // Let the uploader show the uploaded asset\n        onSuccess(uid, { source: ImageUploader.blobUrlFor(blob) });\n      }\n    });\n\n    return {};\n  };\n\n  const removeDeletedImageData = (image) => {\n    const signedId = image.source.split('/')[5];\n    const imageSignedIdInput = document.querySelector(`input[value='${signedId}']`);\n\n    return imageSignedIdInput.parentNode.removeChild(imageSignedIdInput);\n  };\n\n  const reorderImageInputs = (images) => {\n    for (const image of images) {\n      const signedId = image.source.split('/')[5];\n      const imageSignedIdInput = document.querySelector(`input[value='${signedId}']`);\n\n      if (imageSignedIdInput) {\n        imageSignedIdInput.parentElement.removeChild(imageSignedIdInput);\n        ImageUploader.addBlobAsAttachment({ signed_id: signedId }, presentable, relationName);\n      }\n    }\n  };\n\n  const renderHeader = useCallback(\n    ({ openDialogue }) => (\n      <DropArea>\n        {(isDrag) => (\n          <div style={{ ...style.dropzoneContent, ...(isDrag ? { border: '1px solid #AC8C30', opacity: '0.5' } : {}) }}>\n            <svg\n              style={style.dropzoneIcon}\n              width=\"43\"\n              height=\"28\"\n              viewBox=\"0 0 43 28\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                fillRule=\"evenodd\"\n                clipRule=\"evenodd\"\n                d=\"M34.5 28L11 28V27.9531C10.6711 27.9841 10.3375 28 10 28C4.47715 28 0 23.7467 0 18.5C0 13.904 3.43553 10.0702 8.00002 9.19003L8 9.17241C8 4.10663 12.2533 0 17.5 0C21.4795 0 24.8876 2.36254 26.3016 5.7142C27.2718 5.25614 28.356 5 29.5 5C33.5924 5 36.9193 8.27774 36.9986 12.3512C40.4736 13.3555 43 16.4001 43 20C43 24.2603 39.4617 27.7428 35 27.9864V28L34.5 28Z\"\n                fill=\"#9A8340\"\n              />\n              <path\n                d=\"M20.364 9.29289C20.7545 8.90237 21.3876 8.90237 21.7782 9.29289L27.1421 14.6569L25.7279 16L22.0711 12.4142V23H20.0711L20.0711 12.4142L16.4142 15.9142L15 14.5L20.364 9.29289Z\"\n                fill=\"white\"\n              />\n            </svg>\n            <p style={style.dropzoneText}>Drop files here or</p>\n            <a\n              href=\"/\"\n              style={style.dropzoneLink}\n              onClick={(e) => {\n                e.preventDefault();\n                openDialogue();\n              }}\n              role=\"button\"\n            >\n              Browse to choose files\n            </a>\n          </div>\n        )}\n      </DropArea>\n    ),\n    [],\n  );\n\n  return (\n    <RUG\n      accept={fileTypes}\n      inOrder\n      rules={{ limit: imageLimit }}\n      onWarning={handleWarning}\n      onError={handleError}\n      action=\"/rails/active_storage/direct_uploads\"\n      initialState={existingUploads ? JSON.parse(existingUploads) : undefined}\n      onChange={(images) => reorderImageInputs(images)}\n      onDeleted={(image) => removeDeletedImageData(image)}\n      customRequest={customRequest}\n      header={renderHeader}\n    >\n      {state.warnings.length > 0 && (\n        <ul style={style.alertList}>\n          {state.warnings.map((warning) => (\n            <li style={style.alert} key={warning}>\n              {warning}\n            </li>\n          ))}\n        </ul>\n      )}\n\n      {state.uploadError && <p style={style.alert}>Image(s) failed to upload - please retry.</p>}\n\n      <DragArea>{(image) => <ImageCard image={image} />}</DragArea>\n    </RUG>\n  );\n};\n\nImageUploader.addBlobAsAttachment = (blob, presentable, relationName) => {\n  const signedId = blob.signed_id;\n\n  if (document.querySelector(`input[value='${signedId}']`)) return;\n\n  const input = document.createElement('input');\n\n  input.type = 'hidden';\n  input.name = `${presentable}[${relationName}][]`;\n  input.id = `${presentable}_${relationName}`;\n  input.value = signedId;\n\n  document.getElementsByClassName('alternate-images-inputs')[0].appendChild(input);\n\n  return input;\n};\n\nImageUploader.blobUrlFor = (blob) => {\n  return `/rails/active_storage/blobs/${blob.signed_id}/${blob.filename}`;\n};\n\nImageUploader.propTypes = {\n  existingUploads: PropTypes.string,\n  presentable: PropTypes.string,\n  relationName: PropTypes.string,\n  fileTypes: PropTypes.arrayOf(PropTypes.string),\n  imageLimit: PropTypes.number,\n};\n\nImageUploader.defaultProps = {\n  fileTypes: ['jpg', 'jpeg', 'png', 'gif'],\n  imageLimit: 100,\n  existingUploads: '',\n  presentable: '',\n  relationName: '',\n};\n\nexport default ImageUploader;\n","import React, { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useForm } from 'react-hook-form';\nimport { isValidNumber } from 'libphonenumber-js';\n\n// Component Imports\nimport InputField from '../Forms/InputField';\n\nimport { emailValidationRegex } from '../Forms/utils';\n\nconst InspectCarForm = ({ postURL, channelID }) => {\n  const [state, setState] = useState({\n    firstName: '',\n    lastName: '',\n    telephone: '',\n    email: '',\n    postcode: '',\n    vehicleRegistration: '',\n    vehicleMake: '',\n    vehicleModel: '',\n    message: '',\n    authenticity_token: '',\n    disabled: false,\n  });\n\n  const { register, handleSubmit, errors } = useForm({\n    mode: 'onBlur',\n    reValidateMode: 'onBlur',\n  });\n\n  const formRef = useRef(null);\n\n  const handleFormSubmission = () => {\n    if (state.disabled) {\n      return;\n    }\n\n    setState({\n      ...state,\n      disabled: true,\n      authenticity_token: document.querySelector('[name=csrf-token]').content,\n    });\n    formRef.current.submit();\n  };\n\n  return (\n    <form onSubmit={handleSubmit(handleFormSubmission)} noValidate ref={formRef} action={postURL} method=\"post\">\n      <input type=\"hidden\" name=\"authenticity_token\" value={state.authenticity_token} />\n      <input type=\"hidden\" name=\"channel_id\" value={channelID} />\n\n      <div className=\"row\">\n        <div className=\"g-inspection__primary\">\n          <InputField\n            labelText=\"First Name\"\n            placeholder=\"First Name\"\n            id=\"first_name\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, firstName: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors.first_name}\n            value={state.firstName}\n            hiddenLabel={false}\n          />\n\n          <InputField\n            labelText=\"Last Name\"\n            placeholder=\"Last Name\"\n            id=\"last_name\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, lastName: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors.last_name}\n            value={state.lastName}\n            hiddenLabel={false}\n          />\n\n          <InputField\n            labelText=\"Phone\"\n            placeholder=\"Phone\"\n            id=\"contact_telephone\"\n            type=\"tel\"\n            onChange={(event) => setState({ ...state, telephone: event.target.value })}\n            ref={register({\n              required: true,\n              validate: (value) => isValidNumber(value, 'GB'),\n            })}\n            hasError={!!errors.contact_telephone}\n            value={state.telephone}\n            hiddenLabel={false}\n          />\n\n          <InputField\n            type=\"email\"\n            labelText=\"Email\"\n            id=\"contact_email\"\n            placeholder=\"Email\"\n            onChange={(event) => setState({ ...state, email: event.target.value })}\n            ref={register({\n              required: true,\n              pattern: emailValidationRegex,\n            })}\n            hasError={!!errors.contact_email}\n            value={state.email}\n            hiddenLabel={false}\n          />\n\n          <InputField\n            labelText=\"Postcode\"\n            placeholder=\"Postcode\"\n            id=\"postcode\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, postcode: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors.postcode}\n            value={state.postcode}\n            hiddenLabel={false}\n          />\n        </div>\n\n        <div className=\"g-inspection__secondary\">\n          <InputField\n            labelText=\"Vehicle Registration\"\n            placeholder=\"Vehicle Registration\"\n            id=\"vehicle-registration\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, vehicleRegistration: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors['vehicle-registration']}\n            value={state.vehicleRegistration}\n            hiddenLabel={false}\n          />\n\n          <InputField\n            labelText=\"Make of Vehicle\"\n            placeholder=\"Make of Vehicle\"\n            id=\"vehicle-make\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, vehicleMake: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors['vehicle-make']}\n            value={state.vehicleMake}\n            hiddenLabel={false}\n          />\n\n          <InputField\n            labelText=\"Model of Vehicle\"\n            placeholder=\"Model of Vehicle\"\n            id=\"vehicle-model\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, vehicleModel: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors['vehicle-model']}\n            value={state.vehicleModel}\n            hiddenLabel={false}\n          />\n\n          <InputField\n            labelText=\"Any notes or comments\"\n            placeholder=\"Any notes or comments\"\n            rows=\"4\"\n            id=\"notes\"\n            onChange={(event) => setState({ ...state, message: event.target.value })}\n            value={state.message}\n            variant=\"textarea\"\n          />\n        </div>\n      </div>\n\n      <div className=\"row\">\n        <div className=\"col-lg-6\">\n          <div className=\"b-form-group\">\n            <div className=\"form-check-inline\">\n              <label className=\"form-check-label\">\n                <input type=\"radio\" className=\"form-check-input\" name=\"bookenquire\" value=\"1\" defaultChecked />\n                Make a booking\n              </label>\n            </div>\n\n            <div className=\"form-check-inline\">\n              <label className=\"form-check-label\">\n                <input type=\"radio\" className=\"form-check-input\" name=\"bookenquire\" value=\"2\" />\n                Make an enquiry\n              </label>\n            </div>\n          </div>\n        </div>\n\n        <div className=\"col-lg-6\">\n          <div className=\"b-form-group\">\n            <button className=\"b-btn b-btn-block b-btn-green\" type=\"submit\" disabled={state.disabled}>\n              {state.disabled ? 'Sending...' : 'Submit'}\n            </button>\n          </div>\n        </div>\n      </div>\n    </form>\n  );\n};\n\nInspectCarForm.propTypes = {\n  postURL: PropTypes.string.isRequired,\n  channelID: PropTypes.string.isRequired,\n};\n\nexport default InspectCarForm;\n","import React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport axios from 'axios';\nimport classNames from 'classnames';\n\nconst ModelSearch = ({ channelSlug, makesPath, makes, grosvenor, id }) => {\n  const [models, setModels] = useState([]);\n  const [controlHeld, setControlHeld] = useState(false);\n\n  const manufacturerRef = useRef(null);\n  const modelRef = useRef(null);\n\n  id = grosvenor ? 'grosvenor' : id;\n\n  const handleManufacturerChange = (event) => {\n    axios\n      .get(`/${channelSlug}/${event.target.value}`, {\n        headers: {\n          'Content-Type': 'application/json',\n          Accept: 'application/json',\n        },\n      })\n      .then((response) => {\n        setModels(response.data);\n      });\n  };\n\n  const handleSubmit = (event) => {\n    event.preventDefault();\n\n    let path = '';\n\n    if (manufacturerRef.current.value === '' && modelRef.current.value === '') {\n      path = makesPath;\n    } else {\n      path = `/${channelSlug}/${manufacturerRef.current.value}${modelRef.current.value ? `/${modelRef.current.value}` : ''}`;\n    }\n\n    if (controlHeld) {\n      window.open(`${path}`);\n    } else if (!controlHeld) {\n      Turbolinks.visit(path);\n    }\n  };\n\n  const handleKeyDown = (event) => {\n    // Check if Control or Apple Cmd key is being held\n    if (event.which === 17 || event.which === 224 || event.which === 91 || event.which === 93) {\n      setControlHeld(true);\n    }\n  };\n\n  const handleKeyUp = (event) => {\n    if (event.which === 17 || event.which === 224 || event.which === 91 || event.which === 93) {\n      setControlHeld(false);\n    }\n  };\n\n  useEffect(() => {\n    document.addEventListener('keydown', handleKeyDown);\n    document.addEventListener('keyup', handleKeyUp);\n\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n      document.removeEventListener('keyup', handleKeyUp);\n    };\n  }, []);\n\n  return (\n    <>\n      <div\n        className={classNames('b-form-group', {\n          'c-search__form-group c-search__form-group--manufacturer': !grosvenor,\n        })}\n      >\n        <label className=\"sr-only\" htmlFor={`model-search-manufacturer-${id}`}>\n          Manufacturer\n        </label>\n        <select\n          className=\"c-search__form-control c-search__form-select\"\n          name={`model-search-manufacturer-${id}`}\n          id={`model-search-manufacturer-${id}`}\n          onChange={handleManufacturerChange}\n          ref={manufacturerRef}\n        >\n          <option value=\"\">Any make...</option>\n          {makes &&\n            makes.map((make) => (\n              <option value={make.slug} key={make.slug}>\n                {make.name}\n              </option>\n            ))}\n        </select>\n      </div>\n\n      <div className={classNames('b-form-group', { 'c-search__form-group c-search__form-group--model': !grosvenor })}>\n        <label className=\"sr-only\" htmlFor={`model-search-model-${id}`}>\n          Model\n        </label>\n        <select\n          className=\"c-search__form-control c-search__form-select\"\n          name={`model-search-model-${id}`}\n          id={`model-search-model-${id}`}\n          ref={modelRef}\n        >\n          <option value=\"\">Any model...</option>\n          {models &&\n            models.map((model) => (\n              <option value={model.slug} key={model.slug}>\n                {model.name}\n              </option>\n            ))}\n        </select>\n      </div>\n\n      <div\n        className={classNames({\n          'c-search__form-group c-search__form-group--submit': !grosvenor,\n          'c-grosvenor-search-module__btn': grosvenor,\n        })}\n      >\n        <button\n          className={classNames({\n            'c-search__button': !grosvenor,\n            'b-btn b-btn-block b-btn-shadowless b-btn-green': grosvenor,\n          })}\n          onClick={handleSubmit}\n        >\n          Search {channelSlug === 'car-leasing' ? 'Cars' : 'Vans'}\n        </button>\n      </div>\n    </>\n  );\n};\n\nModelSearch.propTypes = {\n  id: PropTypes.string.isRequired,\n  channelSlug: PropTypes.string.isRequired,\n  makes: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      slug: PropTypes.string,\n    }),\n  ).isRequired,\n  makesPath: PropTypes.string.isRequired,\n  grosvenor: PropTypes.bool,\n};\n\nModelSearch.defaultProps = {\n  grosvenor: false,\n};\n\nexport default ModelSearch;\n","/* eslint-disable react/require-default-props */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\n// Redux\nimport { Provider } from 'react-redux';\nimport store from '../store/store';\n\n// Component Imports\nimport StepTracker from './OnlineCreditApplication/StepTracker';\n\n// Step Tracker Steps\n// Personal\nimport Verify from './OnlineCreditApplication/steps/Verify/Verify';\nimport PersonalInfo from './OnlineCreditApplication/steps/PersonalInfo/PersonalInfo';\nimport EmploymentInfo from './OnlineCreditApplication/steps/EmploymentInfo/EmploymentInfo';\nimport Finances from './OnlineCreditApplication/steps/Finances/Finances';\n\nconst PersonalCreditApplication = ({\n  postUrl,\n  channelID,\n  offerId,\n  derivativeId,\n  term,\n  mileage,\n  initialPayment,\n  optionIds,\n  maintenanceSelected,\n  verifyStep,\n  verifyPostUrl,\n}) => {\n  const heading = 'Online Credit Application';\n\n  const steps =\n    verifyStep === false\n      ? [\n          { name: 'Your info', heading, component: <PersonalInfo /> },\n          { name: 'Employment info', heading, component: <EmploymentInfo /> },\n          { name: 'Finances', heading, component: <Finances showOptOut /> },\n        ]\n      : [\n          { name: 'Verify', heading, component: <Verify /> },\n          { name: 'Your info', heading, component: <PersonalInfo /> },\n          { name: 'Employment info', heading, component: <EmploymentInfo /> },\n          { name: 'Finances', heading, component: <Finances /> },\n        ];\n\n  return (\n    <Provider store={store}>\n      <StepTracker\n        steps={steps}\n        postURL={postUrl}\n        channelID={channelID}\n        offerId={offerId}\n        derivativeId={derivativeId}\n        term={term}\n        mileage={mileage}\n        initialPayment={initialPayment}\n        optionIds={optionIds}\n        maintenanceSelected={maintenanceSelected}\n        verifyStep={verifyStep}\n        verifyPostUrl={verifyPostUrl}\n      />\n    </Provider>\n  );\n};\n\nPersonalCreditApplication.propTypes = {\n  postUrl: PropTypes.string,\n  channelID: PropTypes.string.isRequired,\n  offerId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  derivativeId: PropTypes.number,\n  term: PropTypes.number,\n  mileage: PropTypes.number,\n  initialPayment: PropTypes.string,\n  optionIds: PropTypes.arrayOf(PropTypes.string),\n  maintenanceSelected: PropTypes.bool,\n  verifyStep: PropTypes.bool,\n  verifyPostUrl: PropTypes.string,\n};\n\nexport default PersonalCreditApplication;\n","import React, { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useForm } from 'react-hook-form';\nimport { isValidNumber } from 'libphonenumber-js';\n\n// Component Imports\nimport ContactField from '../CmsContactUs/ContactField';\n\nimport { emailValidationRegex } from '../Forms/utils';\n\nconst RecommendFriendForm = ({ postURL, channelID }) => {\n  const [state, setState] = useState({\n    yourName: '',\n    yourEmail: '',\n    yourPhoneNumber: '',\n    theirName: '',\n    theirEmail: '',\n    theirPhoneNumber: '',\n    authenticity_token: '',\n    disabled: false,\n  });\n\n  const { register, handleSubmit, errors } = useForm({\n    mode: 'onBlur',\n    reValidateMode: 'onBlur',\n  });\n\n  const formRef = useRef(null);\n\n  const handleFormSubmission = () => {\n    if (state.disabled) {\n      return;\n    }\n\n    setState({\n      ...state,\n      disabled: true,\n      authenticity_token: document.querySelector('[name=csrf-token]').content,\n    });\n    formRef.current.submit();\n  };\n\n  return (\n    <form\n      className=\"c-form-simple\"\n      onSubmit={handleSubmit(handleFormSubmission)}\n      noValidate\n      ref={formRef}\n      action={postURL}\n      method=\"post\"\n    >\n      <input type=\"hidden\" name=\"authenticity_token\" value={state.authenticity_token} />\n      <input type=\"hidden\" name=\"channel_id\" value={channelID} />\n\n      <div className=\"g-contact-form__content\">\n        <div className=\"b-form-group-modern\">\n          <h2 className=\"c-intro__sub-heading pb-4\">Your details</h2>\n          <ContactField\n            inputClassName=\"b-form-control-modern\"\n            labelText=\"Your name\"\n            id=\"your_name\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, yourName: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors.your_name}\n            value={state.yourName}\n            hiddenLabel={false}\n          />\n\n          <ContactField\n            inputClassName=\"b-form-control-modern\"\n            type=\"email\"\n            labelText=\"Your email address\"\n            id=\"your_email\"\n            onChange={(event) => setState({ ...state, yourEmail: event.target.value })}\n            ref={register({\n              required: true,\n              pattern: emailValidationRegex,\n            })}\n            hasError={!!errors.your_email}\n            value={state.yourEmail}\n            hiddenLabel={false}\n          />\n\n          <ContactField\n            inputClassName=\"b-form-control-modern\"\n            type=\"tel\"\n            labelText=\"Your phone number\"\n            id=\"your_phone_number\"\n            onChange={(event) => setState({ ...state, yourPhoneNumber: event.target.value })}\n            ref={register({\n              required: true,\n              validate: (value) => isValidNumber(value, 'GB'),\n            })}\n            hasError={!!errors.your_phone_number}\n            value={state.yourPhoneNumber}\n            hiddenLabel={false}\n          />\n        </div>\n\n        <div className=\"b-form-group-modern\">\n          <h2 className=\"c-intro__sub-heading pb-4\">Friend&apos;s Details</h2>\n\n          <ContactField\n            inputClassName=\"b-form-control-modern\"\n            labelText=\"Friend's name\"\n            id=\"their_name\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, theirName: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors.their_name}\n            value={state.theirName}\n            hiddenLabel={false}\n          />\n\n          <ContactField\n            inputClassName=\"b-form-control-modern\"\n            type=\"email\"\n            labelText=\"Friend's email address\"\n            id=\"their_email\"\n            onChange={(event) => setState({ ...state, theirEmail: event.target.value })}\n            ref={register({\n              validate: {\n                required: (value) => {\n                  if (value === '' && state.theirPhoneNumber === '') {\n                    return \"Enter friend's email or phone number.\";\n                  }\n                  return true;\n                },\n                pattern: (value) => {\n                  return value === '' || emailValidationRegex.test(value) || 'Invalid email address';\n                },\n              },\n            })}\n            errorMessage={errors.their_email?.message}\n            hasError={!!errors.their_email}\n            value={state.theirEmail}\n            hiddenLabel={false}\n          />\n\n          <ContactField\n            inputClassName=\"b-form-control-modern\"\n            type=\"tel\"\n            labelText=\"Friend's phone number\"\n            id=\"their_phone_number\"\n            onChange={(event) => setState({ ...state, theirPhoneNumber: event.target.value })}\n            ref={register({\n              validate: {\n                required: (value) => {\n                  if (value === '' && state.theirEmail === '') {\n                    return \"Enter friend's phone number or email.\";\n                  }\n                  return true;\n                },\n                isValidNumber: (value) => {\n                  return value === '' || isValidNumber(value, 'GB') || 'Invalid phone number';\n                },\n              },\n            })}\n            errorMessage={errors.their_phone_number?.message}\n            hasError={!!errors.their_phone_number}\n            value={state.theirPhoneNumber}\n            hiddenLabel={false}\n          />\n        </div>\n      </div>\n\n      <div className=\"g-form__footer\">\n        <p className=\"g-form__asterix\">\n          *Amazon.co.uk is not a sponsor of this promotion. Amazon.co.uk Gift Cards (&quot;GCs&quot;) may be redeemed on\n          the Amazon.co.uk website towards the purchase of eligible products available on www.amazon.co.uk. GCs cannot\n          be reloaded, resold, transferred for value, redeemed for cash or applied to any other account. Amazon.co.uk is\n          not responsible if a GC is lost, stolen, destroyed or used without permission. See www.amazon.co.uk/gc-legal\n          for complete terms and conditions. GCs are issued by Amazon EU S.a.r.l. All Amazon (reg), TM &amp; C are IP of\n          Amazon.com. Inc or its affiliates.\n        </p>\n      </div>\n\n      <div className=\"b-form-group\">\n        <button className=\"g-contact-form__submit g-contact-form__submit--gold\" type=\"submit\" disabled={state.disabled}>\n          {state.disabled ? 'Sending...' : 'Submit'}\n        </button>\n      </div>\n    </form>\n  );\n};\n\nRecommendFriendForm.propTypes = {\n  postURL: PropTypes.string.isRequired,\n  channelID: PropTypes.string.isRequired,\n};\n\nexport default RecommendFriendForm;\n","import React, { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useForm } from 'react-hook-form';\nimport { isValidNumber } from 'libphonenumber-js';\n\n// Component Imports\nimport FormField from '../Forms/FormField';\nimport OptOut from '../Forms/OptOut';\nimport Recaptcha from '../Recaptcha/Recaptcha';\n\nimport { pushData } from '../../ga/form_ga_data';\nimport { emailValidationRegex } from '../Forms/utils';\n\nconst RequestCallback = ({ postURL, channelID, recaptcha }) => {\n  const [state, setState] = useState({\n    fullName: '',\n    time: '',\n    email: '',\n    telephone: '',\n    comments: '',\n    completeRecaptcha: false,\n    authenticity_token: '',\n    disabled: false,\n  });\n\n  const { register, handleSubmit, errors, getValues } = useForm({\n    mode: 'onBlur',\n    reValidateMode: 'onBlur',\n  });\n\n  const formRef = useRef(null);\n  const recaptchaRef = useRef(null);\n\n  const handleFormSubmission = () => {\n    if (recaptcha) {\n      if (state.disabled) {\n        return;\n      }\n\n      if (recaptchaRef.current.value !== '') {\n        setState({\n          ...state,\n          disabled: true,\n          authenticity_token: document.querySelector('[name=csrf-token]').content,\n        });\n        formRef.current.submit();\n      } else {\n        setState({ ...state, completeRecaptcha: true });\n      }\n    } else {\n      setState({\n        ...state,\n        disabled: true,\n        authenticity_token: document.querySelector('[name=csrf-token]').content,\n      });\n      formRef.current.submit();\n    }\n\n    pushData({\n      form_name: 'Request Callback',\n      signup: !getValues('contact_opt_out'),\n      user_data: {\n        email: getValues('contact_email'),\n        phone_number: getValues('contact_telephone'),\n      },\n    });\n  };\n\n  return (\n    <form\n      onSubmit={handleSubmit(handleFormSubmission)}\n      noValidate\n      ref={formRef}\n      action={postURL}\n      method=\"post\"\n      className=\"c-callback-form\"\n    >\n      <input type=\"hidden\" name=\"authenticity_token\" value={state.authenticity_token} />\n      <input type=\"hidden\" name=\"channel_id\" value={channelID} />\n\n      <div className=\"row\">\n        <FormField\n          labelText=\"Full name *\"\n          placeholder=\"Full name\"\n          id=\"contact_name\"\n          type=\"text\"\n          onChange={(event) => setState({ ...state, fullName: event.target.value })}\n          ref={register({ required: true })}\n          hasError={!!errors.contact_name}\n          value={state.fullName}\n        />\n\n        <FormField\n          labelText=\"Preferred contact time\"\n          id=\"contact_time\"\n          onChange={(event) => setState({ ...state, time: event.target.value })}\n          ref={register({ required: false })}\n          hasError={!!errors.contact_time}\n          value={state.time}\n          variant=\"select\"\n          options={[\n            { value: '', text: 'Select contact time' },\n            { value: 'Any', text: 'Any' },\n            { value: 'Morning', text: 'Morning' },\n            { value: 'Afternoon', text: 'Afternoon' },\n            { value: 'After 6pm', text: 'After 6pm' },\n          ]}\n        />\n      </div>\n\n      <div className=\"row\">\n        <FormField\n          labelText=\"Email *\"\n          placeholder=\"Email\"\n          id=\"contact_email\"\n          type=\"email\"\n          onChange={(event) => setState({ ...state, email: event.target.value })}\n          ref={register({\n            required: true,\n            pattern: emailValidationRegex,\n          })}\n          hasError={!!errors.contact_email}\n          value={state.email}\n        />\n\n        <FormField\n          labelText=\"Telephone *\"\n          placeholder=\"Telephone\"\n          id=\"contact_telephone\"\n          type=\"tel\"\n          onChange={(event) => setState({ ...state, telephone: event.target.value })}\n          ref={register({\n            required: true,\n            validate: (value) => isValidNumber(value, 'GB'),\n          })}\n          hasError={!!errors.contact_telephone}\n          value={state.telephone}\n        />\n      </div>\n\n      <div className=\"row\">\n        <FormField\n          labelText=\"Comments\"\n          id=\"contact_comments\"\n          placeholder=\"Comments\"\n          onChange={(event) => setState({ ...state, comments: event.target.value })}\n          value={state.comments}\n          variant=\"textarea\"\n        />\n\n        <div className=\"b-form-group col-12 col-sm-6\">\n          {recaptcha && (\n            <>\n              <Recaptcha ref={recaptchaRef} />\n\n              {state.completeRecaptcha && (\n                <div className=\"invalid-feedback\" style={{ display: 'block' }}>\n                  Please complete reCaptcha\n                </div>\n              )}\n            </>\n          )}\n        </div>\n      </div>\n\n      <div className=\"row\">\n        <div className=\"c-callback-form__action form-group col-12\">\n          <button className=\"b-btn b-btn-green b-btn-block b-btn-shadowless\" type=\"submit\" disabled={state.disabled}>\n            {state.disabled ? 'Sending...' : 'Request a callback'}\n          </button>\n        </div>\n      </div>\n\n      <OptOut ref={register({ required: false })} />\n    </form>\n  );\n};\n\nRequestCallback.propTypes = {\n  postURL: PropTypes.string.isRequired,\n  channelID: PropTypes.string.isRequired,\n  recaptcha: PropTypes.bool,\n};\n\nRequestCallback.defaultProps = {\n  recaptcha: false,\n};\n\nexport default RequestCallback;\n","import React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport axios from 'axios';\n\nconst SUVSearch = ({ channelSlug, makesPath }) => {\n  const [state, setState] = useState({\n    toggleActive: false,\n    makes: [],\n    models: [],\n  });\n\n  const makeRef = useRef(null);\n  const modelRef = useRef(null);\n  const categoryRef = useRef(null);\n\n  const toggleSlider = () => {\n    setState({ ...state, toggleActive: !state.toggleActive });\n  };\n\n  const getMakes = () => {\n    axios\n      .get('/car-leasing/bodytypes/suv/makes.json', {\n        headers: {\n          'Content-Type': 'application/json',\n          Accept: 'application/json',\n        },\n      })\n      .then((response) => {\n        setState({ ...state, makes: response.data });\n      });\n  };\n\n  const getModels = (event) => {\n    axios\n      .get(`/car-leasing/bodytypes/suv/makes/${event.target.value}/model_ranges.json`, {\n        headers: {\n          'Content-Type': 'application/json',\n          Accept: 'application/json',\n        },\n      })\n      .then((response) => {\n        setState({ ...state, models: response.data });\n      });\n  };\n\n  const handleSubmit = (event) => {\n    event.preventDefault();\n\n    let path = makesPath;\n\n    if (state.toggleActive) {\n      if (categoryRef.current.value === '') {\n        path = '/car-leasing/bodytypes/suv';\n      } else {\n        path = `/car-leasing/bodytypes/${categoryRef.current.value}`;\n      }\n    } else if (makeRef.current.value !== '' || modelRef.current.value !== '') {\n      path = `/${channelSlug}/${makeRef.current.value}${modelRef.current.value ? `/${modelRef.current.value}` : ''}`;\n    }\n\n    Turbolinks.visit(path);\n  };\n\n  useEffect(() => {\n    getMakes();\n  }, []);\n\n  return (\n    <div className=\"c-search-module__wrap\">\n      <h3 className=\"c-search-module__heading\">Quick Search</h3>\n\n      <div className=\"c-search-module__form\">\n        <div className=\"c-suv-switch\">\n          <label className=\"c-suv-switch__label\">\n            <span className=\"c-suv-switch__option\">By make/model</span>\n            <span className=\"c-suv-switch__toggler\">\n              <input className=\"c-suv-switch__input\" type=\"checkbox\" name=\"suvmakes\" onChange={toggleSlider} />\n              <span className={`c-suv-switch__slider${state.toggleActive ? ' c-suv-switch__slider--active' : ''}`} />\n            </span>\n            <span className=\"c-suv-switch__option\">By type</span>\n          </label>\n        </div>\n\n        {!state.toggleActive ? (\n          <>\n            <div className=\"b-form-group\">\n              <label className=\"b-form-label\" htmlFor=\"make\">\n                Manufacturer\n              </label>\n              <select className=\"b-form-select\" name=\"make\" onChange={(event) => getModels(event)} ref={makeRef}>\n                <option value=\"\">Select manufacturer...</option>\n                {state.makes.map((make) => (\n                  <option value={make.slug} key={make.id}>\n                    {make.name}\n                  </option>\n                ))}\n              </select>\n            </div>\n            <div className=\"b-form-group\">\n              <label className=\"b-form-label\" htmlFor=\"model\">\n                Model\n              </label>\n              <select className=\"b-form-select suvmodel\" name=\"model\" ref={modelRef}>\n                <option value=\"\">Any model</option>\n                {state.models.map((model) => (\n                  <option value={model.slug} key={model.id}>\n                    {model.name}\n                  </option>\n                ))}\n              </select>\n            </div>\n          </>\n        ) : (\n          <div className=\"b-form-group\">\n            <label className=\"b-form-label\" htmlFor=\"suvcategory\">\n              Category\n            </label>\n            <select className=\"b-form-select\" name=\"suvcategory\" ref={categoryRef}>\n              <option value=\"\">Select Category...</option>\n              <option value=\"small-suv-or-crossover\">Small SUV</option>\n              <option value=\"medium-suv\">Medium SUV</option>\n              <option value=\"large-suv\">Large SUV</option>\n              <option value=\"luxury-suv\">Luxury SUV</option>\n              <option value=\"7-seater-suv\">7 Seater SUV</option>\n              <option value=\"sport-suv\">Sport SUV</option>\n            </select>\n          </div>\n        )}\n        <button className=\"b-btn b-btn-green b-btn-block suv-model\" onClick={handleSubmit}>\n          Search\n        </button>\n      </div>\n    </div>\n  );\n};\n\nSUVSearch.propTypes = {\n  channelSlug: PropTypes.string.isRequired,\n  makesPath: PropTypes.string.isRequired,\n};\n\nexport default SUVSearch;\n","import React, { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useForm } from 'react-hook-form';\nimport { isValidNumber } from 'libphonenumber-js';\n\n// Component Imports\nimport ContactField from '../ContactUs/ContactField';\nimport OptOut from '../Forms/OptOut';\n\nconst SalarySacrificeForm = ({ postURL, channelID, fleetSize }) => {\n  const [state, setState] = useState({\n    first_name: '',\n    last_name: '',\n    company_name: '',\n    email: '',\n    telephone: '',\n    fleetSize: '',\n    message: '',\n    authenticity_token: '',\n    disabled: false,\n  });\n\n  const { register, handleSubmit, errors } = useForm({\n    mode: 'onBlur',\n    reValidateMode: 'onBlur',\n  });\n\n  const formRef = useRef(null);\n\n  const handleFormSubmission = () => {\n    if (state.disabled) {\n      return;\n    }\n\n    setState({\n      ...state,\n      disabled: true,\n      authenticity_token: document.querySelector('[name=csrf-token]').content,\n    });\n    formRef.current.submit();\n  };\n\n  return (\n    <form\n      className=\"c-form-contact-footer bootstrap-form\"\n      onSubmit={handleSubmit(handleFormSubmission)}\n      noValidate\n      ref={formRef}\n      action={postURL}\n      method=\"post\"\n    >\n      <input type=\"hidden\" name=\"authenticity_token\" value={state.authenticity_token} />\n      <input type=\"hidden\" name=\"channel_id\" value={channelID} />\n      <div className=\"row\">\n        <div className=\"col-12 col-xl-6\">\n          <ContactField\n            labelText=\"First name *\"\n            id=\"first_name\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, first_name: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors.first_name}\n            value={state.first_name}\n          />\n        </div>\n        <div className=\"col-12 col-xl-6\">\n          <ContactField\n            labelText=\"Last name *\"\n            id=\"last_name\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, last_name: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors.last_name}\n            value={state.last_name}\n          />\n        </div>\n      </div>\n      <div className=\"row\">\n        <div className=\"col-12 col-xl-6\">\n          <ContactField\n            labelText=\"Business name *\"\n            id=\"company_name\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, company_name: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors.company_name}\n            value={state.company_name}\n          />\n\n          <ContactField\n            labelText=\"Email *\"\n            id=\"contact_email\"\n            type=\"email\"\n            onChange={(event) => setState({ ...state, email: event.target.value })}\n            ref={register({\n              required: true,\n              pattern:\n                /^(([^<>()[\\]\\\\.,;:\\s@']+(\\.[^<>()[\\]\\\\.,;:\\s@']+)*)|('.+'))@(([[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n            })}\n            hasError={!!errors.contact_email}\n            value={state.email}\n          />\n\n          <ContactField\n            labelText=\"Telephone *\"\n            id=\"contact_telephone\"\n            type=\"tel\"\n            onChange={(event) => setState({ ...state, telephone: event.target.value })}\n            ref={register({\n              required: true,\n              validate: (value) => isValidNumber(value, 'GB'),\n            })}\n            hasError={!!errors.contact_telephone}\n            value={state.telephone}\n          />\n        </div>\n        <div className=\"col-12 col-xl-6\">\n          {fleetSize && (\n            <ContactField\n              labelText=\"Employee size *\"\n              id=\"contact_fleet_size\"\n              onChange={(event) => setState({ ...state, fleetSize: event.target.value })}\n              ref={register({ required: true })}\n              hasError={!!errors.contact_fleetSize}\n              value={state.fleetSize}\n              variant=\"select\"\n              options={[\n                { value: '', text: 'Select employee size' },\n                { value: '1-49', text: '1-49' },\n                { value: '50-250', text: '50-250' },\n                { value: '251+', text: '251+' },\n              ]}\n            />\n          )}\n\n          <ContactField\n            labelText=\"Comments\"\n            rows={fleetSize ? 5 : 8}\n            id=\"contact_message\"\n            onChange={(event) => setState({ ...state, message: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors.contact_message}\n            value={state.message}\n            errorMessage=\"Please send us a message!\"\n            variant=\"textarea\"\n            style={fleetSize ? { lineHeight: 1.3 } : {}}\n          />\n        </div>\n      </div>\n      <div className=\"c-form-contact-footer__form-group\">\n        <button className=\"c-form-contact-footer__btn\" type=\"submit\" disabled={state.disabled}>\n          {state.disabled ? 'Sending...' : 'Send message'}\n        </button>\n      </div>\n      <OptOut on_dark={false} ref={register({ required: false })} />\n    </form>\n  );\n};\n\nSalarySacrificeForm.propTypes = {\n  postURL: PropTypes.string.isRequired,\n  channelID: PropTypes.string.isRequired,\n  fleetSize: PropTypes.bool,\n};\n\nSalarySacrificeForm.defaultProps = {\n  fleetSize: false,\n};\n\nexport default SalarySacrificeForm;\n","import React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Cookies from 'js-cookie';\nimport classNames from 'classnames';\n\nconst SaturdayBanner = ({ telephone_number }) => {\n  const bodyClasses = document.body.classList;\n\n  const [state, setState] = useState({\n    showModal: false,\n  });\n\n  const modalRef = useRef(null);\n  const modalBodyRef = useRef(null);\n\n  const classes = classNames({\n    'modal fade c-modal c-modal-saturday-banner modal-open': true,\n    show: state.showModal,\n  });\n\n  const handleClose = (event) => {\n    event.preventDefault();\n\n    Cookies.set('saturday_banner_shown', 'true', { expires: 365 });\n\n    // Hide modal\n    setState({ ...state, showModal: false });\n    modalRef.current.style.display = 'none';\n\n    const saturdayBannerBackdrop = document.getElementById('saturday-banner-backdrop');\n    saturdayBannerBackdrop && saturdayBannerBackdrop.remove();\n\n    bodyClasses.remove('has-modal', 'modal-open');\n\n    // Remove event listeners\n    // eslint-disable-next-line no-use-before-define\n    document.removeEventListener('mousedown', handleClickOutside);\n  };\n\n  const handleClickOutside = (event) => {\n    if (modalBodyRef && modalBodyRef.current && !modalBodyRef.current.contains(event.target)) {\n      handleClose(event);\n    }\n  };\n\n  const handleOpen = () => {\n    if (Cookies.get('saturday_banner_shown') === 'false') {\n      setTimeout(\n        () => {\n          setState({ ...state, showModal: true });\n          bodyClasses.add('has-modal', 'modal-open');\n          document.body.insertAdjacentHTML(\n            'beforeend',\n            '<div class=\"modal-backdrop fade show\" id=\"saturday-banner-backdrop\"></div>',\n          );\n        },\n        0,\n        (modalRef.current.style.display = 'block'),\n      );\n      document.addEventListener('mousedown', handleClickOutside);\n    } else {\n      document.removeEventListener('mousedown', handleClickOutside);\n      setState({ ...state, showModal: false });\n    }\n  };\n\n  useEffect(() => {\n    handleOpen();\n  }, []);\n\n  return (\n    <div className={classes} role=\"dialog\" aria-labelledby=\"saturday-banner-heading\" ref={modalRef}>\n      <div className=\"modal-dialog modal-lg modal-dialog-centered\" role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"c-modal-saturday-banner__actions\">\n            <button\n              type=\"button\"\n              className=\"close c-modal-saturday-banner__close\"\n              aria-label=\"Close\"\n              onClick={handleClose}\n            >\n              Close <span aria-hidden=\"true\">&times;</span>\n            </button>\n          </div>\n          <div className=\"c-modal-saturday-banner__body\" ref={modalBodyRef}>\n            <h2 className=\"c-modal-saturday-banner__heading\">We are open today for new enquiries</h2>\n            <p className=\"c-modal-saturday-banner__info\">For anything else please call Mon to Fri 09.00 - 18.00</p>\n            <p className=\"c-modal-saturday-banner__telephone\">\n              Simply give us a call on <a href=\"tel:{telephone_number}\">{telephone_number}</a>\n            </p>\n          </div>\n          <div className=\"c-modal-saturday-banner__image\">&nbsp;</div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nSaturdayBanner.propTypes = {\n  telephone_number: PropTypes.string.isRequired,\n};\n\nexport default SaturdayBanner;\n","import React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useForm } from 'react-hook-form';\nimport Cookies from 'js-cookie';\n\n// Component Imports\nimport InputField from '../Forms/InputField';\n\n// Asset Imports\nimport CarLogo from '../../../assets/images/sign-up-bar-car.png';\nimport VanLogo from '../../../assets/images/sign-up-bar-van.png';\n\nimport { emailValidationRegex } from '../Forms/utils';\n\nconst SignUp = ({ postURL, channelID }) => {\n  const [state, setState] = useState({\n    fullName: '',\n    email: '',\n    authenticity_token: '',\n    isFixed: false,\n    disabled: false,\n  });\n\n  const { register, handleSubmit, errors } = useForm({\n    mode: 'onBlur',\n    reValidateMode: 'onBlur',\n  });\n\n  const formRef = useRef(null);\n\n  const handleFormSubmission = () => {\n    if (state.disabled) {\n      return;\n    }\n\n    setState({ ...state, disabled: true, authenticity_token: document.querySelector('[name=csrf-token]').content });\n    Cookies.set('hide_sign_up', 'true');\n    formRef.current.submit();\n  };\n\n  const handleCookies = () => {\n    setTimeout(() => {\n      if (Cookies.get('hide_sign_up') === 'false') {\n        setState({ ...state, isFixed: true });\n      } else {\n        document.body.classList.add('has-no-bar');\n      }\n    }, 2000);\n  };\n\n  const handleClose = (event) => {\n    event.preventDefault();\n\n    Cookies.set('hide_sign_up', 'true');\n    setState({ ...state, isFixed: false });\n  };\n\n  useEffect(() => {\n    handleCookies();\n  }, []);\n\n  return (\n    <section className={`g-sign-up-bar${state.isFixed ? ' is-fixed' : ''}`}>\n      <div className=\"l-container-mark\">\n        <div className=\"row justify-content-between\">\n          <div className=\"g-sign-up-bar__primary\">\n            <div className=\"g-sign-up-bar__icon\">\n              <img src={channelID === 'van-leasing' ? VanLogo : CarLogo} alt=\"\" />\n            </div>\n\n            <header className=\"g-sign-up-bar__header\">\n              <h3>\n                Get our latest deals\n                <br />\n                straight to your inbox\n              </h3>\n            </header>\n\n            <form\n              className=\"g-sign-up-bar__form bootstrap-form\"\n              onSubmit={handleSubmit(handleFormSubmission)}\n              noValidate\n              ref={formRef}\n              action={postURL}\n              method=\"post\"\n            >\n              <input type=\"hidden\" name=\"authenticity_token\" value={state.authenticity_token} />\n              <input type=\"hidden\" name=\"channel_id\" value={channelID} />\n\n              <div className=\"b-form-row\">\n                <InputField\n                  labelText=\"Full name\"\n                  placeholder=\"Full name\"\n                  id=\"full_name\"\n                  type=\"text\"\n                  onChange={(event) => setState({ ...state, fullName: event.target.value })}\n                  ref={register({ required: true })}\n                  hasError={!!errors.full_name}\n                  value={state.fullName}\n                />\n\n                <InputField\n                  type=\"email\"\n                  labelText=\"Email\"\n                  id=\"email\"\n                  placeholder=\"Email address\"\n                  onChange={(event) => setState({ ...state, email: event.target.value })}\n                  ref={register({\n                    required: true,\n                    pattern: emailValidationRegex,\n                  })}\n                  hasError={!!errors.email}\n                  value={state.email}\n                />\n\n                <div className=\"b-form-group\">\n                  <button type=\"submit\" disabled={state.disabled}>\n                    {state.disabled ? 'Sending...' : 'Sign up'}\n                  </button>\n                </div>\n              </div>\n            </form>\n\n            {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n            <a\n              className=\"g-sign-up-bar__trigger\"\n              role=\"button\"\n              data-path=\"/newsletter-signup\"\n              data-action=\"modal#load\"\n              data-target=\"newsletter-signup\"\n            >\n              Get Latest Deals\n            </a>\n            <span\n              className=\"b-info b-info--gold\"\n              data-toggle=\"tooltip\"\n              data-custom-class=\"tooltip--white\"\n              data-placement=\"top\"\n              title=\"\"\n              data-original-title=\"Please refer to our privacy policy page for more information.\"\n            />\n          </div>\n          <div className=\"g-sign-up-bar__secondary\">\n            <a\n              href={channelID === 'van-leasing' ? '/van-leasing/special-offers' : '/special-offers'}\n              className=\"g-sign-up-bar__forward\"\n            >\n              View Lease Deals\n            </a>\n            {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n            <a className=\"g-sign-up-bar__close\" href=\"#\" onClick={handleClose}>\n              Close\n            </a>\n          </div>\n        </div>\n      </div>\n    </section>\n  );\n};\n\nSignUp.propTypes = {\n  postURL: PropTypes.string.isRequired,\n  channelID: PropTypes.string.isRequired,\n};\n\nexport default SignUp;\n","import React, { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useForm } from 'react-hook-form';\nimport Cookies from 'js-cookie';\n\n// Component Imports\nimport InputField from '../Forms/InputField';\n\nimport { emailValidationRegex } from '../Forms/utils';\n\nconst SignUpMobile = ({ postURL, channelID }) => {\n  const [state, setState] = useState({\n    fullName: '',\n    email: '',\n    authenticity_token: '',\n  });\n\n  const {\n    formState: { isSubmitting },\n    register,\n    handleSubmit,\n    errors,\n  } = useForm({\n    mode: 'onBlur',\n    reValidateMode: 'onBlur',\n  });\n\n  const formRef = useRef(null);\n\n  const handleFormSubmission = () => {\n    setState({\n      ...state,\n      authenticity_token: document.querySelector('[name=csrf-token]').content,\n    });\n    Cookies.set('hide_sign_up', 'true', { expires: 7 });\n    formRef.current.submit();\n  };\n\n  return (\n    <form\n      className=\"bootstrap-form\"\n      onSubmit={handleSubmit(handleFormSubmission)}\n      noValidate\n      ref={formRef}\n      action={postURL}\n      method=\"post\"\n    >\n      <input type=\"hidden\" name=\"authenticity_token\" value={state.authenticity_token} />\n      <input type=\"hidden\" name=\"channel_id\" value={channelID} />\n\n      <div className=\"row\">\n        <div className=\"col-12 col-sm-6\">\n          <InputField\n            labelText=\"Full name *\"\n            placeholder=\"Full name\"\n            id=\"full_name\"\n            type=\"text\"\n            onChange={(event) => setState({ ...state, fullName: event.target.value })}\n            ref={register({ required: true })}\n            hasError={!!errors.full_name}\n            value={state.fullName}\n            hiddenLabel={false}\n          />\n        </div>\n\n        <div className=\"col-12 col-sm-6\">\n          <InputField\n            type=\"email\"\n            labelText=\"Email *\"\n            id=\"email\"\n            placeholder=\"Email address\"\n            onChange={(event) => setState({ ...state, email: event.target.value })}\n            ref={register({\n              required: true,\n              pattern: emailValidationRegex,\n            })}\n            hasError={!!errors.email}\n            value={state.email}\n            hiddenLabel={false}\n          />\n        </div>\n\n        <div className=\"col-12\">\n          <p className=\"b-text-xs\">\n            <span className=\"b-info\" />\n            By completing this form you are agreeing to receive marketing communication from us (relating to our car\n            tips, special offers, news, and vehicle reviews, and other relevant information), and if you have previously\n            unsubscribed, you are allowing us to resubscribe you to the newsletter. Please see our data privacy policy{' '}\n            <a href=\"/privacy-policy\">here</a>.\n          </p>\n        </div>\n      </div>\n\n      <div className=\"row\">\n        <div className=\"form-group col-12\">\n          <button type=\"submit\" className=\"b-btn b-btn-green b-btn-block\" disabled={isSubmitting}>\n            {isSubmitting ? 'Loading...' : 'Sign up'}\n          </button>\n        </div>\n      </div>\n    </form>\n  );\n};\n\nSignUpMobile.propTypes = {\n  postURL: PropTypes.string.isRequired,\n  channelID: PropTypes.string.isRequired,\n};\n\nexport default SignUpMobile;\n","import React, { forwardRef, useState } from 'react';\nimport ReCAPTCHA from 'react-google-recaptcha';\n\nconst Recaptcha = forwardRef((_, ref) => {\n  // TODO: Add real siteKey\n  const [state, setState] = useState({\n    siteKey: '6LdSQuwUAAAAAHd1q52y5tO_GqsUlBjR1KdZdxez',\n    value: '',\n  });\n\n  const handleChange = (value) => {\n    setState({ ...state, value: value !== null ? value : '' });\n  };\n\n  return (\n    <>\n      <input type=\"hidden\" name=\"recaptcha-token\" value={state.value} data-recaptcha-value={state.value} ref={ref} />\n\n      <ReCAPTCHA style={{ display: 'inline-block' }} sitekey={state.siteKey} onChange={handleChange} />\n    </>\n  );\n});\n\nexport default Recaptcha;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\n// Component Imports\nimport PersonalDetails from './partials/PersonalDetails';\nimport AccommodationHistory from './partials/AccommodationHistory';\nimport CreditCheck from '../Finances/partials/CreditCheck';\nimport OptOut from '../Finances/partials/OptOut';\n\nconst PersonalInfo = ({ finalStep, showOptOut, register, unregister, validationErrors, verifyQuery }) => {\n  return (\n    <>\n      <div className=\"row\">\n        <div className=\"g-order__fields g-order__fields--primary\">\n          <PersonalDetails register={register} validationErrors={validationErrors} verifyQuery={verifyQuery} />\n        </div>\n\n        <div className=\"g-order__fields g-order__fields--secondary\">\n          <AccommodationHistory register={register} unregister={unregister} validationErrors={validationErrors} />\n        </div>\n      </div>\n      {finalStep && (\n        <div className=\"row\">\n          <div className=\"g-order__check\">\n            <CreditCheck register={register} validationErrors={validationErrors} />\n          </div>\n          {showOptOut && (\n            <div className=\"g-order__check\">\n              <OptOut register={register} validationErrors={validationErrors} />\n            </div>\n          )}\n        </div>\n      )}\n    </>\n  );\n};\n\nPersonalInfo.propTypes = {\n  showOptOut: PropTypes.bool,\n  finalStep: PropTypes.bool,\n  register: PropTypes.func,\n  unregister: PropTypes.func,\n  validationErrors: PropTypes.shape({\n    'customer-title': PropTypes.shape({}),\n    'customer-first-name': PropTypes.shape({}),\n    'customer-surname': PropTypes.shape({}),\n    'customer-telephone': PropTypes.shape({}),\n    'customer-email': PropTypes.shape({}),\n    'customer-marital': PropTypes.shape({}),\n    'customer-dependents': PropTypes.shape({}),\n    'property-status': PropTypes.shape({}),\n    credit_check: PropTypes.shape({}),\n  }),\n  verifyQuery: PropTypes.shape({\n    email: PropTypes.string,\n  }),\n};\n\nPersonalInfo.defaultProps = {\n  showOptOut: false,\n  finalStep: false,\n  register: null,\n  unregister: null,\n  validationErrors: null,\n  verifyQuery: null,\n};\n\nexport default PersonalInfo;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport StepZilla from 'react-stepzilla';\nimport { useDispatch } from 'react-redux';\n\n// Component Imports\nimport StepTrackerPage from './StepTrackerPage';\n\nconst StepTracker = ({\n  steps,\n  postURL,\n  channelID,\n  offerId,\n  initialPayment,\n  optionIds,\n  derivativeId,\n  term,\n  mileage,\n  maintenanceSelected,\n  verifyStep,\n  verifyPostUrl,\n}) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n\n  const resetReduxState = () => {\n    dispatch({ type: 'RESET_OCA_VERIFY_STATE' });\n    dispatch({ type: 'RESET_OCA_CREDIT_CHECK' });\n    dispatch({ type: 'RESET_OCA_PERSONAL_INFO_STATE' });\n    dispatch({ type: 'RESET_OCA_FINANCES_STATE' });\n    dispatch({ type: 'RESET_OCA_EMPLOYMENT_INFO_STATE' });\n    dispatch({ type: 'RESET_OCA_COMPANY_INFO_STATE' });\n    dispatch({ type: 'RESET_OCA_BANK_INFO_STATE' });\n  };\n\n  useEffect(() => {\n    document.addEventListener('turbolinks:load', resetReduxState());\n\n    return () => {\n      document.removeEventListener('turbolinks:load', resetReduxState());\n    };\n  }, []);\n\n  const stepsArray = [];\n  const propSteps = steps;\n\n  for (let i = 0; i < propSteps.length; i += 1) {\n    const step = {\n      name: propSteps[i].name,\n      component: (\n        <StepTrackerPage\n          step={i}\n          component={propSteps[i].component}\n          backDisabled={propSteps[i].backDisabled}\n          isLast={i === propSteps.length - 1}\n          isFirst={i === 0}\n          heading={propSteps[i].heading}\n          pages={steps}\n          postURL={postURL}\n          channelID={channelID}\n          offerId={offerId}\n          derivativeId={derivativeId}\n          term={term}\n          mileage={mileage}\n          initialPayment={initialPayment}\n          optionIds={optionIds}\n          maintenanceSelected={maintenanceSelected}\n          verifyStep={verifyStep}\n          verifyPostUrl={verifyPostUrl}\n        />\n      ),\n    };\n\n    stepsArray.push(step);\n  }\n\n  useEffect(() => {\n    const pageURL = window.location.href;\n    const dealID = pageURL.substring(pageURL.lastIndexOf('/') + 1);\n\n    dispatch({\n      type: 'SET_DEAL_ID',\n      payload: dealID,\n    });\n  }, [dispatch]);\n\n  return (\n    <div className=\"application g-order__form bootstrap-form\">\n      <StepZilla\n        showSteps={false}\n        steps={stepsArray}\n        stepsNavigation={false}\n        showNavigation={false}\n        preventEnterSubmission\n      />\n    </div>\n  );\n};\n\nStepTracker.propTypes = {\n  steps: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      heading: PropTypes.string,\n      component: PropTypes.node,\n    }),\n  ).isRequired,\n  offerId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n  derivativeId: PropTypes.number.isRequired,\n  term: PropTypes.number.isRequired,\n  mileage: PropTypes.number.isRequired,\n  optionIds: PropTypes.arrayOf(PropTypes.string),\n  maintenanceSelected: PropTypes.bool.isRequired,\n  initialPayment: PropTypes.string.isRequired,\n  postURL: PropTypes.string.isRequired,\n  channelID: PropTypes.string.isRequired,\n  verifyStep: PropTypes.bool.isRequired,\n  verifyPostUrl: PropTypes.string.isRequired,\n};\n\nStepTracker.defaultProps = {\n  optionIds: [],\n};\n\nexport default StepTracker;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Component Imports\nimport InputField from '../../../Forms/InputField';\n\nimport { emailValidationRegex } from '../../../Forms/utils';\n\nconst Verify = ({ register, validationErrors }) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCAVerify);\n\n  const dispatchEmail = (event) => {\n    dispatch({ type: 'SET_OCA_VERIFY_EMAIL', payload: event.target.value });\n    dispatch({ type: 'SET_EMAIL', payload: event.target.value });\n  };\n\n  return (\n    <div className=\"row\">\n      <div className=\"g-order__fields g-order__fields--primary\">\n        <InputField\n          type=\"email\"\n          labelText=\"Email\"\n          id=\"verify-email\"\n          placeholder=\"Enter email so we can check for you in our system\"\n          onChange={(event) => dispatchEmail(event)}\n          ref={register({\n            required: true,\n            pattern: emailValidationRegex,\n          })}\n          hasError={validationErrors['verify-email']}\n          value={query.email}\n        />\n      </div>\n    </div>\n  );\n};\n\nVerify.propTypes = {\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({ 'verify-email': PropTypes.shape({}) }).isRequired,\n};\n\nexport default Verify;\n","import classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nconst CreditCheck = (props) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCACreditCheck);\n\n  const hasError = !!props.validationErrors && !!props.validationErrors.credit_check;\n\n  const checkboxClasses = classNames({\n    'custom-checkbox': true,\n    'is-invalid': hasError,\n  });\n\n  return (\n    <>\n      <p>\n        Please check your quotation carefully to ensure you are happy with the product, price, and fees. This will also\n        be set out clearly within the Order Form you will receive once you have been approved for finance.\n      </p>\n\n      <div className={checkboxClasses}>\n        <input\n          className=\"custom-control-input\"\n          type=\"checkbox\"\n          id=\"credit-check\"\n          name=\"credit_check\"\n          onChange={(event) =>\n            dispatch({\n              type: 'SET_CREDIT_CHECK',\n              payload: event.target.checked,\n            })\n          }\n          ref={props.register({ required: true })}\n          checked={query.creditCheck}\n        />\n        <label className=\"custom-control-label\" htmlFor=\"credit-check\">\n          By ticking this box you are acknowledging the following:\n          <br />\n          <br />\n          You confirm that you understand the quote and the associated costs and that there isn’t anything that we\n          should account for that could affect your understanding.\n          <br />\n          <br />\n          You are not aware of any reason why your circumstances may change affecting your ability to repay.\n          <br />\n          <br />\n          You confirm your consent that as your Credit Broker we will receive commissions as disclosed from the Finance\n          Company and 3rd Parties.\n          <br />\n          <br />\n          Prior to application for Credit, we may check your credit eligibility with Experian by performing a soft\n          credit search, which will have no impact on your Credit File. Subject to the outcome of any eligibility check,\n          we may contact you for further information prior to proceeding with a full Credit Application. <br />\n          <br />\n          You are consenting to your details being passed to 3rd party credit reference agency to conduct a credit\n          search and you have permission from all named parties on the credit application. If you have any questions,\n          please speak to your Leasing Consultant before proceeding with the credit application.\n          <br />\n          <br />\n          You have read and understood our{' '}\n          <a href=\"/initial-disclosure-document\" target=\"_blank\">\n            Initial Disclosure Document\n          </a>\n          ,{' '}\n          <a href=\"/fair-processing-notice-and-consumer-credit-act-statement\" target=\"_blank\">\n            Fair Processing Notice\n          </a>{' '}\n          and{' '}\n          <a href=\"/terms-and-conditions\" target=\"_blank\">\n            Terms and Conditions\n          </a>\n          .\n        </label>\n      </div>\n      <div className=\"invalid-feedback\">You need to agree to our terms and conditions.</div>\n    </>\n  );\n};\n\nCreditCheck.propTypes = {\n  register: PropTypes.func.isRequired,\n  validationErrors: PropTypes.shape({\n    credit_check: PropTypes.shape({}),\n  }),\n};\n\nCreditCheck.defaultProps = {\n  validationErrors: null,\n};\n\nexport default CreditCheck;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\nconst OptOut = (props) => {\n  // React Redux hooks\n  const dispatch = useDispatch();\n  const query = useSelector((state) => state.OCAOptOut);\n\n  return (\n    <div className=\"custom-checkbox\">\n      <input\n        className=\"custom-control-input\"\n        type=\"checkbox\"\n        id=\"opt-out\"\n        name=\"opt_out\"\n        onChange={(event) => dispatch({ type: 'SET_OPT_OUT', payload: event.target.checked })}\n        ref={props.register()}\n        checked={query.optOut}\n      />\n      <label className=\"custom-control-label\" htmlFor=\"opt-out\">\n        We will sometimes send you emails about our very latest offers and relevant news, in accordance with{' '}\n        <a\n          href=\"https://ico.org.uk/media/for-organisations/documents/1555/direct-marketing-guidance.pdf\"\n          target=\"_blank\"\n          rel=\"noreferrer\"\n        >\n          ICO P&ECR\n        </a>{' '}\n        soft opt in rules & our{' '}\n        <a href=\"/privacy-policy\" target=\"_blank\">\n          privacy policy\n        </a>\n        . Simply tick the box if you do not wish to receive them.\n      </label>\n    </div>\n  );\n};\n\nOptOut.propTypes = {\n  register: PropTypes.func.isRequired,\n};\n\nexport default OptOut;\n"],"sourceRoot":""}