{"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'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'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 ("GCs") 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 & 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\">×</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\"> </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":""}