{"version":3,"sources":["webpack:///./app/javascript/store/reducers/eligibility-checker.js","webpack:///./app/javascript/splitTesting.js","webpack:///./app/javascript/packs/controllers/frontend/index.js","webpack:///./app/javascript/store/reducers/filter-controls.js","webpack:///./app/javascript/store/reducers/oca-verify.js","webpack:///./app/javascript/store/reducers/oca-bank-info.js","webpack:///./app/javascript/store/reducers/oca-company-info.js","webpack:///./app/javascript/store/reducers/oca-employment-info.js","webpack:///./app/javascript/store/reducers/oca-finances.js","webpack:///./app/javascript/store/reducers/oca-personal-info.js","webpack:///./app/javascript/store/reducers/oca-credit-check.js","webpack:///./app/javascript/store/reducers/oca-opt-out.js","webpack:///./app/javascript/store/reducers/deal.js","webpack:///./app/javascript/store/reducers/special-offers.js","webpack:///./app/javascript/store/reducers/index.js","webpack:///./app/javascript/store/store.js","webpack:///./app/javascript/packs/application.js","webpack:///./app/javascript/store/selectors.js","webpack:///./app/javascript/propTypes/elasticSearch.js","webpack:///./app/javascript/packs/patterns/mobile-drawer.js","webpack:///./app/javascript/utils/index.js","webpack:///./app/javascript/packs/controllers/shared/index.js","webpack:///./app/javascript/packs/patterns/main.js","webpack:///./app/javascript/packs/patterns/frontend.js","webpack:///./app/javascript/packs/patterns/drawer.js","webpack:///./app/javascript/packs/patterns/sticky.js"],"names":["SET_ELIGIBILITY_ANSWER","RESET_ELIGIBILITY","GO_TO_NEXT_ELIGIBILITY_STEP","GO_TO_PREVIOUS_ELIGIBILITY_STEP","GO_TO_ELIGIBILITY_STEP","initialState","currentStep","about_you","address_history","employment_status","employment_history","affordability","credit_history","setEligibilityAnswer","step","value","type","payload","goToNextStep","goToPreviousStep","eligibilityReducer","state","action","Math","min","max","stepNumber","ORIGINAL","SplitTestFeature","featureName","variants","this","variant","_getVariant","data","event","test_name","test_variant","dataLayer","push","cookieName","previousFeatureVariant","Cookies","get","floor","random","length","set","expires","sameSite","path","shouldShowFeature","splitTestName","window","application","Application","start","context","require","load","definitionsFromContext","isOpen","isVisible","isFixed","filters","totalCounts","theme","selectedDropdown","isVans","controller","sort_by","filtersUpdated","filterControls","newState","bodytypeCategories","includes","filter","category","newSelectedFilters","isFilterArray","item","indexOf","index","splice","hybrid_or_electric","email","OCAVerify","businessBankName","yearsWithBusinessBank","monthsWithBusinessBank","businessAccountHolder","businessAccountNumber","businessSortCode","OCABankInfo","businessName","businessType","businessEstablished","companyNumber","vatNumber","numberOfDirectors","businessEmail","companyPostcode","companyAddressLine1","companyAddressLine2","companyAddressLine3","companyTown","companyCounty","companyPropertyStatus","yearsAtCompanyAddress","monthsAtCompanyAddress","companyTelephone","previousCompanyPostcode","previousCompanyAddressLine1","previousCompanyAddressLine2","previousCompanyAddressLine3","previousCompanyTown","previousCompanyCounty","yearsAtPreviousCompanyAddress","monthsAtPreviousCompanyAddress","OCACompanyInfo","employmentStatus","employer","jobTitle","yearsAtEmployer","monthsAtEmployer","employerPostcode","employerAddressLine1","employerAddressLine2","employerAddressLine3","employerTown","employerCounty","employerTelephone","previousEmploymentStatus","previousEmployer","previousJobTitle","previousEmployerPostcode","previousEmployerAddressLine1","previousEmployerAddressLine2","previousEmployerAddressLine3","previousEmployerTown","previousEmployerCounty","previousEmployerTelephone","yearsAtPreviousEmployer","monthsAtPreviousEmployer","OCAEmploymentInfo","grossAnnualSalary","monthlyIncome","monthlyMortgageRent","monthlyCarPayments","monthlyOtherOutgoings","bankName","bankAddress","yearsWithBank","monthsWithBank","bankAccountName","bankAccountNumber","bankSortCode","OCAFinances","dealID","title","firstName","surname","dateOfBirth","telephone","maritalStatus","numberOfDependents","propertyStatus","primaryPostcode","primaryAddressLine1","primaryAddressLine2","primaryAddressLine3","primaryTown","primaryCounty","yearsAtPrimaryAddress","monthsAtPrimaryAddress","secondaryPostcode","secondaryAddressLine1","secondaryAddressLine2","secondaryAddressLine3","secondaryTown","secondaryCounty","yearsAtSecondaryAddress","monthsAtSecondaryAddress","OCAPersonalInfo","middleName","credit_check","OCACreditCheck","creditCheck","opt_out","OCAOptOut","optOut","fetched","annualMileage","contractLength","monthlyPrice","maintainedMonthlyPrice","initialPaymentPrice","maintainedInitialPaymentPrice","initialMonths","maintenanceSelected","isFinanceLease","selected","optionIds","actuallySelectedOptionIds","ruleIds","offerId","vehiclePriceId","maintainedOfferId","options","rules","categories","initialised","URLParamsInit","URLParamsApplied","isTurbolinksLoad","salesView","addOption","id","newActualOptionIds","unique","concat","newSelectedOptions","oneOfRules","getOneOfRulesForOption","otherOptionIdsInOneOfRules","map","without","flat","includedInRules","getRulesOfTypeForOption","forEach","primaryOptionId","getRulesForOptions","removeOption","newActualOptions","DealReducer","parseInt","mileage","term","derivativeId","dealId","isPersonal","lx_monthly_increase","pluginOrElectric","optionsIsPersonal","isStock","isFrozen","isAdmin","priceFrom","priceTo","dataInitialised","activeDataInitialised","specialOffers","rootReducer","combineReducers","Deal","eligibilityChecker","store","createStore","__REDUX_DEVTOOLS_EXTENSION__","document","addEventListener","sliderElement","querySelector","slider","ScrollSnapSlider","prev","next","updateArrows","classList","toggle","scrollLeft","offsetWidth","scrollWidth","slideTo","slide","IScroll","jQuery","$","tooltip","boundary","popover","componentRequireContext","ReactRailsUJS","useContext","detectEvents","Turbo","session","drive","areAllQuestionsAnswered","every","question","calculateCurrentScore","steps","maxScore","answerValue","name","selectedOption","find","option","score","elasticSearchPropsPropTypes","PropTypes","shape","oneOfType","string","number","count","any","label","prelabel","enabled","bool","removeSelectedFilters","func","selectedFilters","setSelectedBodytype","setSelectedFilter","setSelectedFilters","setSingleCheckboxFilter","allFiltersFor","availableFiltersFor","props","define","e","t","ontouchstart","s","init","windowWidth","width","extend","iscroll","mouseWheel","preventDefault","showOverlay","settings","events","opened","closed","dropdownEvents","nav","overlay","open","close","dropdown","each","n","r","refresh","call","addOverlay","on","iScroll","addClass","append","removeClass","drawerCallback","trigger","off","destroy","removeData","remove","fn","drawer","apply","Array","prototype","slice","arguments","error","convertSpaces","to","replace","match","getQueryStringParameters","location","search","substring","split","reduce","object","pair","decodeURIComponent","key","newObject","objectToQueryStringParameters","params","addParam","encodeURIComponent","Object","keys","join","formToQueryString","form","additionalParams","formData","querySelectorAll","field","nodeName","fieldName","curry","arity","$curry","args","bind","identity","x","contains","list","Set","all","some","intersection","list1","list2","lookupList","filteredList","formatPrice","parseFloat","toFixed","toString","currentChannelPath","channelPath","channelMatcher","matchedCurrentChannel","pathname","matchedPathChannel","onPageLoad","history","turbo","reload","modal","onSectionsLoad","$dealPhotos","$dealPhotosThumbs","$toolbar","$header","Waypoint","refreshAll","Sticky","element","stuckClass","wrapper","waypoint","direction","scrollTop","attr","offset","height","$filter_triggers","outerHeight","$anchored_nav","scrolling","hash","animate","top","select_anchored_nav_link","i","handler","$element","hasClass","pause","was_click_on_menu","click","target","is","parents","should_close","a","numTop","innerHeight","commaSeparateNumber","val","test","$this","countTo","countNum","text","duration","easing","complete","unbind","setTimeout","getAttribute","scrollIntoView","behavior","add","__sharethis__","config","href","getElementsByName","scrollBy","Constructor","Error","Tooltip","Default","customClass","_show","show","tip","getTipElement","scrollContainer","isUserScrolling","startAutoScroll","maxScrollLeft","clientWidth","stopAutoScroll","stop","observer","IntersectionObserver","entries","entry","isIntersecting","threshold","observe","_idx","truncateContainer","toggleButton","scrollRestoration","SCROLL_POSITION","PAGE_INVALIDATED","IS_TURBO_FRAME_UPDATE","beforeVisitHandler","url","detail","sessionStorage","setItem","JSON","stringify","scrollData","loadHandler","scrollPosition","parse","getItem","shouldScroll","savedElement","getElementById","scrollTo","scrollX","scrollY","removeItem","activeElement","fetchOptions","headers","tagName","togglePricing","body","isBusiness","cookie","Turbolinks","visit","Element","matches","msMatchesSelector","webkitMatchesSelector","closest","selector","el","nodeType","parentElement","parentNode","b","pop","anchorElement","origin","dataset","turbolinks","readyState","imgDefer","setAttribute","removeAttribute","subdrawer","closedrawer","hasdrawer","elements","$index","$overlay","createElement","className","appendChild","openDrawer","$drawer","style","display","closeDrawer","hasAttribute","$drawers","dispatchEvent","CustomEvent","closeAllDrawers","pastEdge","boundingClientRect","y","toggleOn","intersectionRatio"],"mappings":"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","file":"js/application~52c46853-71b890074fd9837acb95.chunk.js","sourcesContent":["// Action Types\nconst SET_ELIGIBILITY_ANSWER = 'SET_ELIGIBILITY_ANSWER';\nconst RESET_ELIGIBILITY = 'RESET_ELIGIBILITY';\nconst GO_TO_NEXT_ELIGIBILITY_STEP = 'GO_TO_NEXT_ELIGIBILITY_STEP';\nconst GO_TO_PREVIOUS_ELIGIBILITY_STEP = 'GO_TO_PREVIOUS_ELIGIBILITY_STEP';\nconst GO_TO_ELIGIBILITY_STEP = 'GO_TO_ELIGIBILITY_STEP';\n\n// Initial State\nconst initialState = {\n  currentStep: 0,\n  about_you: '',\n  address_history: '',\n  employment_status: '',\n  employment_history: '',\n  affordability: '',\n  credit_history: '',\n};\n\n// Reducer\n// eslint-disable-next-line default-param-last\nconst eligibilityReducer = (state = initialState, action) => {\n  switch (action.type) {\n    case SET_ELIGIBILITY_ANSWER:\n      return {\n        ...state,\n        [action.payload.step]: action.payload.value,\n      };\n    case RESET_ELIGIBILITY:\n      return initialState;\n    case GO_TO_NEXT_ELIGIBILITY_STEP:\n      return {\n        ...state,\n        currentStep: Math.min(state.currentStep + 1, 5),\n      };\n    case GO_TO_PREVIOUS_ELIGIBILITY_STEP:\n      return {\n        ...state,\n        currentStep: Math.max(state.currentStep - 1, 0),\n      };\n    case GO_TO_ELIGIBILITY_STEP:\n      return {\n        ...state,\n        currentStep: action.payload.stepNumber,\n      };\n    default:\n      return state;\n  }\n};\n\n// Action Creators\nexport const setEligibilityAnswer = (step, value) => ({\n  type: SET_ELIGIBILITY_ANSWER,\n  payload: { step, value },\n});\n\nexport const resetEligibility = () => ({\n  type: RESET_ELIGIBILITY,\n});\n\nexport const goToNextStep = () => ({\n  type: GO_TO_NEXT_ELIGIBILITY_STEP,\n});\n\nexport const goToPreviousStep = () => ({\n  type: GO_TO_PREVIOUS_ELIGIBILITY_STEP,\n});\n\nexport const goToSpecificStep = (stepNumber) => ({\n  type: GO_TO_ELIGIBILITY_STEP,\n  payload: { stepNumber },\n});\n\nexport default eligibilityReducer;\n","import Cookies from 'js-cookie';\n\nconst ORIGINAL = 'Original';\n\nexport class SplitTestFeature {\n  constructor(featureName, variants) {\n    this.featureName = featureName;\n    this.variants = [ORIGINAL, ...variants];\n    this.variant = this._getVariant();\n  }\n\n  start() {\n    const data = {\n      event: 'ab_test',\n      test_name: this.featureName,\n      test_variant: this.variant,\n    };\n\n    dataLayer.push(data);\n  }\n\n  _getVariant() {\n    const cookieName = `split-test-${this.featureName}`;\n    const previousFeatureVariant = Cookies.get(cookieName);\n\n    if (previousFeatureVariant) {\n      return previousFeatureVariant;\n    }\n\n    // pick variant from variants\n    const variant = this.variants[Math.floor(Math.random() * this.variants.length)];\n\n    // set cookie\n    Cookies.set(cookieName, variant, {\n      expires: 365,\n      sameSite: 'Lax',\n      path: '/',\n    });\n\n    return variant;\n  }\n}\n\nexport function shouldShowFeature(splitTestName) {\n  const hiddenVariant = 'Hidden';\n  const currentVariant = window[`split-test-${splitTestName}`];\n\n  return currentVariant !== hiddenVariant;\n}\n","import { Application } from '@hotwired/stimulus';\nimport { definitionsFromContext } from '@hotwired/stimulus-webpack-helpers';\n\nconst application = Application.start();\nconst context = require.context('controllers/frontend', true, /_controller\\.js$/);\napplication.load(definitionsFromContext(context));\n","import { isFilterArray } from '../../utils';\n\nconst initialState = {\n  isOpen: false,\n  isVisible: true,\n  isFixed: false,\n  filters: {},\n  totalCounts: {},\n  theme: null,\n  selectedDropdown: null,\n  isVans: null,\n  controller: null,\n  sort_by: null,\n  filtersUpdated: false,\n};\n\n// eslint-disable-next-line default-param-last\nconst filterControls = (state = initialState, action) => {\n  let newState;\n\n  if (action.type === 'INITIALISE_FILTERS') {\n    newState = { ...state };\n    newState.filters = {\n      ...action.payload,\n    };\n    newState.selectedDropdown = '';\n    return newState;\n  }\n\n  if (action.type === 'RESET_FILTERS') {\n    newState = { ...state };\n    newState.filters = {};\n    return newState;\n  }\n\n  if (action.type === 'SET_FILTERS') {\n    newState = { ...state };\n    newState.filters = {\n      ...action.payload,\n    };\n    return newState;\n  }\n\n  if (action.type === 'SET_BODYTYPE_FILTERS') {\n    newState = { ...state };\n    const bodytypeCategories = (newState && newState.filters && newState.filters['bodytype_categories[]']) || [];\n    if (bodytypeCategories.includes(action.payload)) {\n      newState.filters = {\n        ...newState.filters,\n        'bodytype_categories[]': bodytypeCategories.filter((category) => category !== action.payload),\n      };\n    } else {\n      newState.filters = {\n        ...newState.filters,\n        'bodytype_categories[]': [...bodytypeCategories, action.payload],\n      };\n    }\n    return newState;\n  }\n\n  if (action.type === 'SET_FILTER') {\n    newState = { ...state };\n\n    const newSelectedFilters = { ...newState.filters };\n\n    if (isFilterArray(action.payload.category)) {\n      if (action.payload.category === 'make[]' && newState.filters['make_model_range[]']) {\n        newSelectedFilters['make_model_range[]'] = newSelectedFilters['make_model_range[]'].filter((item) => {\n          return item.indexOf(action.payload.value) !== 0;\n        });\n      }\n\n      if (newSelectedFilters[action.payload.category].length === 1) {\n        delete newSelectedFilters[action.payload.category];\n\n        if (action.payload.category === 'make[]' && newState.filters['make_model_range[]']) {\n          delete newSelectedFilters['make_model_range[]'];\n        }\n      } else {\n        const index = newSelectedFilters[action.payload.category].indexOf(action.payload.value);\n        newSelectedFilters[action.payload.category].splice(index, 1);\n      }\n    } else {\n      delete newSelectedFilters[action.payload.category];\n    }\n\n    newState.filters = { ...newSelectedFilters };\n\n    return newState;\n  }\n\n  if (action.type === 'SET_SORT_BY') {\n    newState = { ...state };\n    newState.sort_by = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'TOTAL_COUNTS') {\n    newState = { ...state };\n    if (action.payload) {\n      newState.totalCounts = action.payload;\n    }\n\n    return newState;\n  }\n\n  if (action.type === 'SET_OPEN') {\n    newState = { ...state };\n    newState.isOpen = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_VISIBLE') {\n    newState = { ...state };\n    newState.isVisible = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_FIXED') {\n    newState = { ...state };\n    newState.isFixed = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_THEME') {\n    newState = { ...state };\n    newState.theme = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_IS_VANS') {\n    newState = { ...state };\n    newState.isVans = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_CONTROLLER') {\n    newState = { ...state };\n    newState.controller = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_FILTERS_UPDATED') {\n    newState = { ...state };\n    newState.filtersUpdated = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_ELECTRIC') {\n    newState = { ...state };\n    if (newState.filters.hybrid_or_electric) {\n      delete newState.filters.hybrid_or_electric;\n    } else {\n      newState.filters.hybrid_or_electric = 'true';\n    }\n    return newState;\n  }\n\n  if (action.type === 'SET_REMOVE_ELECTRIC') {\n    newState = { ...state };\n    delete newState.filters.hybrid_or_electric;\n    return newState;\n  }\n\n  if (action.type === 'SET_SELECTED_DROPDOWN') {\n    newState = { ...state };\n    if (newState.selectedDropdown === action.payload) {\n      newState.selectedDropdown = '';\n    } else {\n      newState.selectedDropdown = action.payload;\n    }\n    return newState;\n  }\n\n  return state;\n};\n\nexport default filterControls;\n","const initialState = {\n  // Verify Details\n  email: '',\n};\n\n// eslint-disable-next-line default-param-last\nconst OCAVerify = (state = initialState, action) => {\n  let newState;\n\n  if (action.type === 'RESET_OCA_VERIFY_STATE') {\n    return { ...initialState };\n  }\n\n  if (action.type === 'SET_OCA_VERIFY_EMAIL') {\n    newState = { ...state };\n    newState.email = action.payload;\n    return newState;\n  }\n\n  return state;\n};\n\nexport default OCAVerify;\n","const initialState = {\n  // Business Bank Details\n  businessBankName: '',\n  yearsWithBusinessBank: '',\n  monthsWithBusinessBank: '',\n  businessAccountHolder: '',\n  businessAccountNumber: '',\n  businessSortCode: '',\n};\n\n// eslint-disable-next-line default-param-last\nconst OCABankInfo = (state = initialState, action) => {\n  let newState;\n\n  if (action.type === 'RESET_OCA_BANK_INFO_STATE') {\n    return { ...initialState };\n  }\n\n  // Business Bank Details\n  if (action.type === 'SET_BUSINESS_BANK_NAME') {\n    newState = { ...state };\n    newState.businessBankName = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_YEARS_WITH_BUSINESS_BANK') {\n    newState = { ...state };\n    newState.yearsWithBusinessBank = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHS_WITH_BUSINESS_BANK') {\n    newState = { ...state };\n    newState.monthsWithBusinessBank = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_BUSINESS_ACCOUNT_HOLDER') {\n    newState = { ...state };\n    newState.businessAccountHolder = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_BUSINESS_ACCOUNT_NUMBER') {\n    newState = { ...state };\n    newState.businessAccountNumber = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_BUSINESS_SORT_CODE') {\n    newState = { ...state };\n    newState.businessSortCode = action.payload;\n    return newState;\n  }\n\n  return state;\n};\n\nexport default OCABankInfo;\n","const initialState = {\n  // Business Details\n  businessName: '',\n  businessType: '',\n  businessEstablished: '',\n  companyNumber: '',\n  vatNumber: '',\n  numberOfDirectors: '',\n  businessEmail: '',\n\n  // Business Premises Details\n  companyPostcode: '',\n  companyAddressLine1: '',\n  companyAddressLine2: '',\n  companyAddressLine3: '',\n  companyTown: '',\n  companyCounty: '',\n  companyPropertyStatus: 'Owned With Mortgage',\n  yearsAtCompanyAddress: '',\n  monthsAtCompanyAddress: '',\n  companyTelephone: '',\n\n  // Business Previous Premises Details\n  previousCompanyPostcode: '',\n  previousCompanyAddressLine1: '',\n  previousCompanyAddressLine2: '',\n  previousCompanyAddressLine3: '',\n  previousCompanyTown: '',\n  previousCompanyCounty: '',\n  yearsAtPreviousCompanyAddress: '',\n  monthsAtPreviousCompanyAddress: '',\n};\n\n// eslint-disable-next-line default-param-last\nconst OCACompanyInfo = (state = initialState, action) => {\n  let newState;\n\n  if (action.type === 'RESET_OCA_COMPANY_INFO_STATE') {\n    return { ...initialState };\n  }\n\n  // Business Details\n  if (action.type === 'SET_BUSINESS_NAME') {\n    newState = { ...state };\n    newState.businessName = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_BUSINESS_TYPE') {\n    newState = { ...state };\n    newState.businessType = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_DATE_BUSINESS_ESTABLISHED') {\n    newState = { ...state };\n    newState.businessEstablished = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_COMPANY_NUMBER') {\n    newState = { ...state };\n    newState.companyNumber = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_VAT_NUMBER') {\n    newState = { ...state };\n    newState.vatNumber = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_NUMBER_OF_DIRECTORS') {\n    newState = { ...state };\n    newState.numberOfDirectors = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_BUSINESS_EMAIL') {\n    newState = { ...state };\n    newState.businessEmail = action.payload;\n    return newState;\n  }\n\n  // Business Premises Details\n  if (action.type === 'SET_COMPANY_POSTCODE') {\n    newState = { ...state };\n    newState.companyPostcode = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_COMPANY_ADDRESS_LINE_1') {\n    newState = { ...state };\n    newState.companyAddressLine1 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_COMPANY_ADDRESS_LINE_2') {\n    newState = { ...state };\n    newState.companyAddressLine2 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_COMPANY_ADDRESS_LINE_3') {\n    newState = { ...state };\n    newState.companyAddressLine3 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_COMPANY_TOWN') {\n    newState = { ...state };\n    newState.companyTown = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_COMPANY_COUNTY') {\n    newState = { ...state };\n    newState.companyCounty = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_COMPANY_PROPERTY_STATUS') {\n    newState = { ...state };\n    newState.companyPropertyStatus = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_YEARS_AT_COMPANY_ADDRESS') {\n    newState = { ...state };\n    newState.yearsAtCompanyAddress = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHS_AT_COMPANY_ADDRESS') {\n    newState = { ...state };\n    newState.monthsAtCompanyAddress = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_COMPANY_TELEPHONE') {\n    newState = { ...state };\n    newState.companyTelephone = action.payload;\n    return newState;\n  }\n\n  // Business Previous Premises Details\n  if (action.type === 'SET_PREVIOUS_COMPANY_POSTCODE') {\n    newState = { ...state };\n    newState.previousCompanyPostcode = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_COMPANY_ADDRESS_LINE_1') {\n    newState = { ...state };\n    newState.previousCompanyAddressLine1 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_COMPANY_ADDRESS_LINE_2') {\n    newState = { ...state };\n    newState.previousCompanyAddressLine2 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_COMPANY_ADDRESS_LINE_3') {\n    newState = { ...state };\n    newState.previousCompanyAddressLine3 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_COMPANY_TOWN') {\n    newState = { ...state };\n    newState.previousCompanyTown = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_COMPANY_COUNTY') {\n    newState = { ...state };\n    newState.previousCompanyCounty = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_YEARS_AT_PREVIOUS_COMPANY_ADDRESS') {\n    newState = { ...state };\n    newState.yearsAtPreviousCompanyAddress = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHS_AT_PREVIOUS_COMPANY_ADDRESS') {\n    newState = { ...state };\n    newState.monthsAtPreviousCompanyAddress = action.payload;\n    return newState;\n  }\n\n  return state;\n};\n\nexport default OCACompanyInfo;\n","const initialState = {\n  // Employer Details\n  employmentStatus: '',\n  employer: '',\n  jobTitle: '',\n  yearsAtEmployer: '',\n  monthsAtEmployer: '',\n\n  // Employer Address\n  employerPostcode: '',\n  employerAddressLine1: '',\n  employerAddressLine2: '',\n  employerAddressLine3: '',\n  employerTown: '',\n  employerCounty: '',\n  employerTelephone: '',\n\n  // Previous employer Details\n  previousEmploymentStatus: '',\n  previousEmployer: '',\n  previousJobTitle: '',\n  previousEmployerPostcode: '',\n  previousEmployerAddressLine1: '',\n  previousEmployerAddressLine2: '',\n  previousEmployerAddressLine3: '',\n  previousEmployerTown: '',\n  previousEmployerCounty: '',\n  previousEmployerTelephone: '',\n  yearsAtPreviousEmployer: '',\n  monthsAtPreviousEmployer: '',\n};\n\n// eslint-disable-next-line default-param-last\nconst OCAEmploymentInfo = (state = initialState, action) => {\n  let newState;\n\n  if (action.type === 'RESET_OCA_EMPLOYMENT_INFO_STATE') {\n    return { ...initialState };\n  }\n\n  // Employer Details\n  if (action.type === 'SET_EMPLOYMENT_STATUS') {\n    newState = { ...state };\n    newState.employmentStatus = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_EMPLOYER') {\n    newState = { ...state };\n    newState.employer = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_JOB_TITLE') {\n    newState = { ...state };\n    newState.jobTitle = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_YEARS_AT_EMPLOYER') {\n    newState = { ...state };\n    newState.yearsAtEmployer = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHS_AT_EMPLOYER') {\n    newState = { ...state };\n    newState.monthsAtEmployer = action.payload;\n    return newState;\n  }\n\n  // Employer Address\n  if (action.type === 'SET_EMPLOYER_POSTCODE') {\n    newState = { ...state };\n    newState.employerPostcode = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_EMPLOYER_ADDRESS_LINE_1') {\n    newState = { ...state };\n    newState.employerAddressLine1 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_EMPLOYER_ADDRESS_LINE_2') {\n    newState = { ...state };\n    newState.employerAddressLine2 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_EMPLOYER_ADDRESS_LINE_3') {\n    newState = { ...state };\n    newState.employerAddressLine3 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_EMPLOYER_TOWN') {\n    newState = { ...state };\n    newState.employerTown = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_EMPLOYER_COUNTY') {\n    newState = { ...state };\n    newState.employerCounty = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_EMPLOYER_TELEPHONE') {\n    newState = { ...state };\n    newState.employerTelephone = action.payload;\n    return newState;\n  }\n\n  // Previous employer Details\n  if (action.type === 'SET_PREVIOUS_EMPLOYMENT_STATUS') {\n    newState = { ...state };\n    newState.previousEmploymentStatus = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_EMPLOYER') {\n    newState = { ...state };\n    newState.previousEmployer = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_JOB_TITLE') {\n    newState = { ...state };\n    newState.previousJobTitle = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_EMPLOYER_POSTCODE') {\n    newState = { ...state };\n    newState.previousEmployerPostcode = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_EMPLOYER_ADDRESS_LINE_1') {\n    newState = { ...state };\n    newState.previousEmployerAddressLine1 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_EMPLOYER_ADDRESS_LINE_2') {\n    newState = { ...state };\n    newState.previousEmployerAddressLine2 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_EMPLOYER_ADDRESS_LINE_3') {\n    newState = { ...state };\n    newState.previousEmployerAddressLine3 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_EMPLOYER_TOWN') {\n    newState = { ...state };\n    newState.previousEmployerTown = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_EMPLOYER_COUNTY') {\n    newState = { ...state };\n    newState.previousEmployerCounty = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PREVIOUS_EMPLOYER_TELEPHONE') {\n    newState = { ...state };\n    newState.previousEmployerTelephone = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_YEARS_AT_PREVIOUS_EMPLOYER') {\n    newState = { ...state };\n    newState.yearsAtPreviousEmployer = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHS_AT_PREVIOUS_EMPLOYER') {\n    newState = { ...state };\n    newState.monthsAtPreviousEmployer = action.payload;\n    return newState;\n  }\n\n  return state;\n};\n\nexport default OCAEmploymentInfo;\n","const initialState = {\n  // Payment Details\n  grossAnnualSalary: '',\n  monthlyIncome: '',\n  monthlyMortgageRent: '',\n  monthlyCarPayments: '',\n  monthlyOtherOutgoings: '',\n\n  // Bank Account Details\n  bankName: '',\n  bankAddress: '',\n  yearsWithBank: '',\n  monthsWithBank: '',\n  bankAccountName: '',\n  bankAccountNumber: '',\n  bankSortCode: '',\n};\n\n// eslint-disable-next-line default-param-last\nconst OCAFinances = (state = initialState, action) => {\n  let newState;\n\n  if (action.type === 'RESET_OCA_FINANCES_STATE') {\n    return { ...initialState };\n  }\n\n  // Payment Details\n  if (action.type === 'SET_GROSS_ANNUAL_SALARY') {\n    newState = { ...state };\n    newState.grossAnnualSalary = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHLY_INCOME') {\n    newState = { ...state };\n    newState.monthlyIncome = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHLY_MORTGAGE_RENT') {\n    newState = { ...state };\n    newState.monthlyMortgageRent = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHLY_CAR_PAYMENTS') {\n    newState = { ...state };\n    newState.monthlyCarPayments = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHLY_OTHER_OUTGOINGS') {\n    newState = { ...state };\n    newState.monthlyOtherOutgoings = action.payload;\n    return newState;\n  }\n\n  // Bank Account Details\n  if (action.type === 'SET_BANK_NAME') {\n    newState = { ...state };\n    newState.bankName = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_BANK_ADDRESS') {\n    newState = { ...state };\n    newState.bankAddress = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_YEARS_WITH_BANK') {\n    newState = { ...state };\n    newState.yearsWithBank = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHS_WITH_BANK') {\n    newState = { ...state };\n    newState.monthsWithBank = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_BANK_ACCOUNT_NAME') {\n    newState = { ...state };\n    newState.bankAccountName = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_BANK_ACCOUNT_NUMBER') {\n    newState = { ...state };\n    newState.bankAccountNumber = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_BANK_SORT_CODE') {\n    newState = { ...state };\n    newState.bankSortCode = action.payload;\n    return newState;\n  }\n\n  return state;\n};\n\nexport default OCAFinances;\n","const initialState = {\n  currentStep: 1,\n  dealID: '',\n\n  // Personal Details\n  title: '',\n  firstName: '',\n  surname: '',\n  dateOfBirth: '',\n  telephone: '',\n  email: '',\n  maritalStatus: '',\n  numberOfDependents: '',\n\n  // Accommodation History\n  propertyStatus: '',\n\n  // Primary Address\n  primaryPostcode: '',\n  primaryAddressLine1: '',\n  primaryAddressLine2: '',\n  primaryAddressLine3: '',\n  primaryTown: '',\n  primaryCounty: '',\n  yearsAtPrimaryAddress: '',\n  monthsAtPrimaryAddress: '',\n\n  // Secondary Address\n  secondaryPostcode: '',\n  secondaryAddressLine1: '',\n  secondaryAddressLine2: '',\n  secondaryAddressLine3: '',\n  secondaryTown: '',\n  secondaryCounty: '',\n  yearsAtSecondaryAddress: '',\n  monthsAtSecondaryAddress: '',\n};\n\n// eslint-disable-next-line default-param-last\nconst OCAPersonalInfo = (state = initialState, action) => {\n  let newState;\n\n  if (action.type === 'RESET_OCA_PERSONAL_INFO_STATE') {\n    return { ...initialState };\n  }\n\n  // Step Tracker\n  if (action.type === 'SET_DEAL_ID') {\n    newState = { ...state };\n    newState.dealID = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_OCA_CURRENT_STEP') {\n    newState = { ...state };\n    newState.currentStep = action.payload;\n    return newState;\n  }\n\n  // Personal Details\n  if (action.type === 'SET_TITLE') {\n    newState = { ...state };\n    newState.title = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_FIRST_NAME') {\n    newState = { ...state };\n    newState.firstName = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MIDDLE_NAME') {\n    newState = { ...state };\n    newState.middleName = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_SURNAME') {\n    newState = { ...state };\n    newState.surname = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_DATE_OF_BIRTH') {\n    newState = { ...state };\n    newState.dateOfBirth = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_TELEPHONE') {\n    newState = { ...state };\n    newState.telephone = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_EMAIL') {\n    newState = { ...state };\n    newState.email = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MARITAL_STATUS') {\n    newState = { ...state };\n    newState.maritalStatus = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_NUMBER_OF_DEPENDENTS') {\n    newState = { ...state };\n    newState.numberOfDependents = action.payload;\n    return newState;\n  }\n\n  // Accommodation History\n  if (action.type === 'SET_PROPERTY_STATUS') {\n    newState = { ...state };\n    newState.propertyStatus = action.payload;\n    return newState;\n  }\n\n  // Primary Address\n  if (action.type === 'SET_PRIMARY_POSTCODE') {\n    newState = { ...state };\n    newState.primaryPostcode = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PRIMARY_ADDRESS_LINE_1') {\n    newState = { ...state };\n    newState.primaryAddressLine1 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PRIMARY_ADDRESS_LINE_2') {\n    newState = { ...state };\n    newState.primaryAddressLine2 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PRIMARY_ADDRESS_LINE_3') {\n    newState = { ...state };\n    newState.primaryAddressLine3 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PRIMARY_TOWN') {\n    newState = { ...state };\n    newState.primaryTown = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_PRIMARY_COUNTY') {\n    newState = { ...state };\n    newState.primaryCounty = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_YEARS_AT_PRIMARY_ADDRESS') {\n    newState = { ...state };\n    newState.yearsAtPrimaryAddress = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHS_AT_PRIMARY_ADDRESS') {\n    newState = { ...state };\n    newState.monthsAtPrimaryAddress = action.payload;\n    return newState;\n  }\n\n  // Secondary Address\n  if (action.type === 'SET_SECONDARY_POSTCODE') {\n    newState = { ...state };\n    newState.secondaryPostcode = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_SECONDARY_ADDRESS_LINE_1') {\n    newState = { ...state };\n    newState.secondaryAddressLine1 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_SECONDARY_ADDRESS_LINE_2') {\n    newState = { ...state };\n    newState.secondaryAddressLine2 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_SECONDARY_ADDRESS_LINE_3') {\n    newState = { ...state };\n    newState.secondaryAddressLine3 = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_SECONDARY_TOWN') {\n    newState = { ...state };\n    newState.secondaryTown = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_SECONDARY_COUNTY') {\n    newState = { ...state };\n    newState.secondaryCounty = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_YEARS_AT_SECONDARY_ADDRESS') {\n    newState = { ...state };\n    newState.yearsAtSecondaryAddress = action.payload;\n    return newState;\n  }\n\n  if (action.type === 'SET_MONTHS_AT_SECONDARY_ADDRESS') {\n    newState = { ...state };\n    newState.monthsAtSecondaryAddress = action.payload;\n    return newState;\n  }\n\n  return state;\n};\n\nexport default OCAPersonalInfo;\n","const initialState = {\n  credit_check: false,\n};\n\n// eslint-disable-next-line default-param-last\nconst OCACreditCheck = (state = initialState, action) => {\n  let newState;\n\n  if (action.type === 'RESET_OCA_CREDIT_CHECK') {\n    return { ...initialState };\n  }\n\n  if (action.type === 'SET_CREDIT_CHECK') {\n    newState = { ...state };\n    newState.creditCheck = action.payload;\n    return newState;\n  }\n\n  return state;\n};\n\nexport default OCACreditCheck;\n","const initialState = {\n  opt_out: false,\n};\n\n// eslint-disable-next-line default-param-last\nconst OCAOptOut = (state = initialState, action) => {\n  let newState;\n\n  if (action.type === 'RESET_OCA_OPT_OUT') {\n    return { ...initialState };\n  }\n\n  if (action.type === 'SET_OPT_OUT') {\n    newState = { ...state };\n    newState.optOut = action.payload;\n    return newState;\n  }\n\n  return state;\n};\n\nexport default OCAOptOut;\n","import { unique, without } from '../../utils';\nimport { getRulesOfTypeForOption, getRulesForOptions, getOneOfRulesForOption } from '../../components/Deal/helpers';\n\nconst initialState = {\n  currentStep: 1,\n  fetched: false,\n  annualMileage: 5000,\n  contractLength: 48,\n  monthlyPrice: 0,\n  maintainedMonthlyPrice: 0,\n  initialPaymentPrice: 0,\n  maintainedInitialPaymentPrice: 0,\n  initialMonths: 9,\n  maintenanceSelected: false,\n  isFinanceLease: false,\n  selected: {\n    optionIds: [],\n    // ok this is dumb but for pricing purposes we need to know which options you actually selected\n    actuallySelectedOptionIds: [],\n    ruleIds: [],\n  },\n  offerId: null,\n  vehiclePriceId: null,\n  maintainedOfferId: null,\n  options: [],\n  rules: [],\n  categories: {},\n  initialised: false,\n  URLParamsInit: false,\n  URLParamsApplied: false,\n  isTurbolinksLoad: true,\n  salesView: true,\n};\n\n//    ACTIONS\n//    addOption :: (String, State) -> State\nconst addOption = (id, state) => {\n  let newActualOptionIds = unique(state.selected.actuallySelectedOptionIds.concat([id]));\n  let newSelectedOptions = unique(state.selected.optionIds.concat([id]));\n  const oneOfRules = getOneOfRulesForOption(id, state);\n\n  if (oneOfRules.length > 0) {\n    const otherOptionIdsInOneOfRules = oneOfRules.map(({ optionIds }) => without(id, optionIds)).flat();\n\n    newSelectedOptions = without(otherOptionIdsInOneOfRules, newSelectedOptions);\n    newActualOptionIds = without(otherOptionIdsInOneOfRules, newActualOptionIds);\n  }\n\n  const includedInRules = getRulesOfTypeForOption(id, 'IN', state);\n\n  if (includedInRules.length > 0) {\n    includedInRules.forEach(({ optionIds, primaryOptionId }) => {\n      if (primaryOptionId === id) {\n        newSelectedOptions = newSelectedOptions.concat(optionIds);\n      }\n    });\n  }\n\n  return {\n    ...state,\n    selected: {\n      ...state.selected,\n      optionIds: newSelectedOptions,\n      actuallySelectedOptionIds: newActualOptionIds,\n      ruleIds: getRulesForOptions(newSelectedOptions, state),\n    },\n  };\n};\n\n//    removeOption :: (String, State) -> State\nconst removeOption = (id, state) => {\n  const newActualOptions = without(id, state.selected.actuallySelectedOptionIds);\n  let newSelectedOptions = without(id, state.selected.optionIds);\n  const ruleIds = getRulesForOptions(newSelectedOptions, state);\n\n  const includedInRules = getRulesOfTypeForOption(id, 'IN', state);\n\n  if (includedInRules.length > 0) {\n    includedInRules.forEach(({ optionIds, primaryOptionId }) => {\n      if (primaryOptionId === id) {\n        newSelectedOptions = without(optionIds, newSelectedOptions);\n      }\n    });\n  }\n\n  return {\n    ...state,\n    selected: {\n      ...state.selected,\n      optionIds: newSelectedOptions,\n      actuallySelectedOptionIds: newActualOptions,\n      ruleIds,\n    },\n  };\n};\n\n// eslint-disable-next-line default-param-last\nconst DealReducer = (state = initialState, action) => {\n  switch (action.type) {\n    case 'RESET_DEAL_STATE':\n      return { ...initialState };\n    case 'INITIALISE':\n      return {\n        ...initialState,\n        ...action.payload,\n        initialised: true,\n      };\n    case 'SET_DEAL_CURRENT_STEP':\n      return {\n        ...state,\n        currentStep: action.payload,\n      };\n    case 'CLEAR_SELECTED_OPTIONS':\n      return {\n        ...state,\n        currentStep: 1,\n        selected: {\n          optionIds: [],\n          actuallySelectedOptionIds: [],\n          ruleIds: [],\n        },\n      };\n    case 'SET_INITIAL_VALUES':\n      return {\n        ...state,\n        annualMileage: parseInt(action.payload.mileage, 10),\n        contractLength: parseInt(action.payload.term, 10),\n      };\n    case 'STORE_INITIAL_PAYMENT':\n      return {\n        ...state,\n        initialPaymentPrice: action.payload,\n      };\n    case 'STORE_MONTHLY_PRICE':\n      return {\n        ...state,\n        monthlyPrice: action.payload,\n      };\n    case 'STORE_CONTRACT_LENGTH':\n      return {\n        ...state,\n        contractLength: action.payload,\n      };\n    case 'STORE_ANNUAL_MILEAGE':\n      return {\n        ...state,\n        annualMileage: action.payload,\n      };\n    case 'STORE_INITIAL_MONTHS':\n      return {\n        ...state,\n        initialMonths: action.payload,\n      };\n    case 'STORE_MAINTENANCE_SELECTED':\n      return {\n        ...state,\n        maintenanceSelected: action.payload,\n      };\n    case 'OFFER.SET_ID':\n      return {\n        ...state,\n        offerId: action.id,\n      };\n    case 'OFFER.DERIVATIVE_ID':\n      return {\n        ...state,\n        derivativeId: action.id,\n      };\n    case 'DEAL.SET_ID':\n      return {\n        ...state,\n        dealId: action.id,\n      };\n    case 'STORE_UPDATED_PRICE':\n      return {\n        ...state,\n        dealId: action.payload.dealId,\n        derivativeId: action.payload.derivativeId,\n        initialPaymentPrice: action.payload.initialPaymentPrice,\n        isPersonal: action.payload.isPersonal,\n        lx_monthly_increase: action.payload.lx_monthly_increase,\n        maintainedInitialPaymentPrice: action.payload.maintainedInitialPaymentPrice,\n        maintainedMonthlyPrice: action.payload.maintainedMonthlyPrice,\n        monthlyPrice: action.payload.monthlyPrice,\n        offerId: action.payload.offerId,\n        vehiclePriceId: action.payload.vehiclePriceId,\n        maintainedOfferId: action.payload.maintainedOfferId,\n        URLParamsApplied: !!(state.options && state.options.length),\n        pluginOrElectric: action.payload.pluginOrElectric,\n      };\n    case 'STORE_FINANCE_LEASE':\n      return {\n        ...state,\n        isFinanceLease: action.payload,\n      };\n    case 'OPTIONS.INIT':\n      return {\n        ...state,\n        optionsIsPersonal: action.isPersonal,\n        options: action.options,\n        rules: action.rules,\n        categories: action.categories,\n        isStock: action.isStock,\n        isFrozen: action.isFrozen,\n        isAdmin: action.isAdmin,\n        URLParamsApplied: false,\n      };\n    case 'OPTIONS.ADD':\n      return addOption(action.id, state);\n\n    case 'OPTIONS.REMOVE':\n      return removeOption(action.id, state);\n    case 'DEAL_URL_PARAMS_INIT':\n      return {\n        ...state,\n        URLParamsInit: true,\n        selected: {\n          ...state.selected,\n          actuallySelectedOptionIds: action.payload,\n        },\n      };\n    case 'SET_TURBOLINKS_LOAD':\n      return {\n        ...state,\n        isTurbolinksLoad: false,\n      };\n    case 'SET_DEAL_SALES_VIEW':\n      return {\n        ...state,\n        salesView: action.payload,\n      };\n    default:\n      return state;\n  }\n};\n\nexport default DealReducer;\n","const initialState = {\n  priceFrom: '',\n  priceTo: '',\n  dataInitialised: false,\n  activeDataInitialised: false,\n};\n\n// eslint-disable-next-line default-param-last\nconst specialOffers = (state = initialState, action) => {\n  let newState;\n\n  if (action.type === 'RESET_SPECIAL_OFFERS_STATE') {\n    return { ...initialState };\n  }\n\n  if (action.type === 'RESET_SPECIAL_OFFERS_BUDGET') {\n    newState = { ...state };\n    newState.priceFrom = '';\n    newState.priceTo = '';\n    return newState;\n  }\n\n  if (action.type === 'SET_PRICE_RANGE') {\n    newState = { ...state };\n    newState.priceFrom = action.payload[0];\n    newState.priceTo = action.payload[1];\n    return newState;\n  }\n\n  if (action.type === 'SET_DRAWER_INITIAL') {\n    newState = { ...state };\n    newState[action.payload] = false;\n    return newState;\n  }\n\n  if (action.type === 'SET_DRAWER_STATE') {\n    newState = { ...state };\n    newState[action.payload] = !newState[action.payload];\n    return newState;\n  }\n\n  if (action.type === 'SPECIAL_OFFERS_INITIALISE_DATA') {\n    newState = { ...state };\n    newState.dataInitialised = true;\n    return newState;\n  }\n\n  if (action.type === 'SPECIAL_OFFERS_INITIALISE_ACTIVE_DATA') {\n    newState = { ...state };\n    newState.activeDataInitialised = true;\n    return newState;\n  }\n\n  return state;\n};\n\nexport default specialOffers;\n","import { combineReducers } from 'redux';\n\n// Import other reducers\nimport filterControls from './filter-controls';\nimport eligibilityChecker from './eligibility-checker';\n\n// Online Credit Application\nimport OCAVerify from './oca-verify';\nimport OCABankInfo from './oca-bank-info';\nimport OCACompanyInfo from './oca-company-info';\nimport OCAEmploymentInfo from './oca-employment-info';\nimport OCAFinances from './oca-finances';\nimport OCAPersonalInfo from './oca-personal-info';\nimport OCACreditCheck from './oca-credit-check';\nimport OCAOptOut from './oca-opt-out';\nimport DealReducer from './deal';\nimport specialOffers from './special-offers';\n\n// Combine all reducers\nconst rootReducer = combineReducers({\n  OCAVerify,\n  OCABankInfo,\n  OCACompanyInfo,\n  OCAEmploymentInfo,\n  OCAFinances,\n  OCAPersonalInfo,\n  OCACreditCheck,\n  OCAOptOut,\n  Deal: DealReducer,\n  specialOffers,\n  filterControls,\n  eligibilityChecker,\n});\n\nexport default rootReducer;\n","import { createStore } from 'redux';\n\n// Import the Root Reducer\nimport rootReducer from './reducers/index';\n\nconst store = createStore(rootReducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());\n\nexport default store;\n","/* eslint-disable import/extensions */\n/* eslint-disable import/no-unresolved */\n// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nimport { Turbo } from '@hotwired/turbo-rails';\n\nimport 'core-js';\n\nimport 'scroll-snap-slider/src/scroll-snap-slider.css';\nimport { ScrollSnapSlider } from 'scroll-snap-slider/src/ScrollSnapSlider';\n\nimport './controllers/frontend';\nimport './controllers/shared';\n\nrequire('@rails/ujs').start();\nrequire('turbolinks').start(); // TODO look to remove this once Turbo is fully integrated\n\nrequire('@rails/activestorage').start();\n// eslint-disable-next-line import/no-unresolved\nrequire('channels');\n\ndocument.addEventListener('turbolinks:load', () => {\n  const sliderElement = document.querySelector('.scroll-snap-slider');\n\n  if (sliderElement) {\n    const slider = new ScrollSnapSlider(sliderElement);\n\n    const prev = document.querySelector('.indicators .arrow.prev');\n    const next = document.querySelector('.indicators .arrow.next');\n\n    const updateArrows = function () {\n      prev.classList.toggle('disabled', sliderElement.scrollLeft === 0);\n      next.classList.toggle(\n        'disabled',\n        sliderElement.scrollLeft + sliderElement.offsetWidth === sliderElement.scrollWidth,\n      );\n    };\n\n    prev.addEventListener('click', () => {\n      slider.slideTo(slider.slide - 1);\n    });\n\n    next.addEventListener('click', () => {\n      slider.slideTo(slider.slide + 1);\n    });\n\n    slider.addEventListener('slide-pass', updateArrows);\n    slider.addEventListener('slide-stop', updateArrows);\n\n    slider.slideTo(0);\n  }\n});\n\nwindow.IScroll = require('iscroll');\n// Import jQuery and expose jQuery keywords so they can be declared\nrequire('jquery');\n\nwindow.jQuery = $;\nwindow.$ = $;\n\n// Import Bootstrap, load styles and optionally load Tooltips and Popovers everywhere\nrequire('bootstrap');\n\ndocument.addEventListener('turbolinks:load', () => {\n  $(() => {\n    $('[data-toggle=\"tooltip\"]').tooltip({ boundary: 'window' });\n    $('[data-toggle=\"popover\"]').popover();\n  });\n});\n\nrequire('waypoints/lib/jquery.waypoints.min.js');\nrequire('waypoints/lib/shortcuts/sticky.min.js');\n\n// Cookies\nwindow.Cookies = require('js-cookie/src/js.cookie.js');\n\n// JS packs\nrequire('packs/patterns/main.js');\nrequire('packs/patterns/frontend.js');\nrequire('packs/patterns/drawer.js');\nrequire('packs/patterns/mobile-drawer.js');\nrequire('packs/patterns/sticky.js');\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\n// const images = require.context('../images', true)\n// const imagePath = (name) => images(name, true)\n// Support component names relative to this directory:\nconst componentRequireContext = require.context('components', true);\nconst ReactRailsUJS = require('react_ujs');\n\nReactRailsUJS.useContext(componentRequireContext);\nReactRailsUJS.detectEvents();\n\nTurbo.session.drive = false;\n","// Selector to check if all questions have been answered\nexport const areAllQuestionsAnswered = (state) => {\n  const questions = [\n    'about_you',\n    'address_history',\n    'employment_status',\n    'employment_history',\n    'affordability',\n    'credit_history',\n  ];\n  return questions.every((question) => state[question] !== '');\n};\n\n// Selector to calculate the current score based on the answers\nexport const calculateCurrentScore = (state, steps) => {\n  let maxScore = 1;\n  steps.forEach((step) => {\n    const answerValue = state[step.name];\n    if (answerValue) {\n      const selectedOption = step.options.find((option) => option.value === answerValue);\n      if (selectedOption && selectedOption.score > maxScore) {\n        maxScore = selectedOption.score;\n      }\n    }\n  });\n  return maxScore;\n};\n","import PropTypes from 'prop-types';\n\nexport const elasticSearchFilterOptionPropTypes = PropTypes.shape({\n  value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  count: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.any]),\n  label: PropTypes.string,\n  prelabel: PropTypes.string,\n  enabled: PropTypes.bool,\n});\n\nexport const elasticSearchPropsPropTypes = PropTypes.shape({\n  removeSelectedFilters: PropTypes.func,\n  selectedFilters: PropTypes.shape({}),\n  setSelectedBodytype: PropTypes.func,\n  setSelectedFilter: PropTypes.func,\n  setSelectedFilters: PropTypes.func,\n  setSingleCheckboxFilter: PropTypes.func,\n});\n\nexport const elasticSearchPropTypes = PropTypes.shape({\n  allFiltersFor: PropTypes.func,\n  availableFiltersFor: PropTypes.func,\n  props: elasticSearchPropsPropTypes,\n});\n","/* eslint-disable */\n/**\n * n.b. this plugin has been modified by us to fix a Safari resize bug\n * https://stackoverflow.com/questions/29940691/window-resize-in-safari-why-it-works-also-if-scroll-window-but-doesnt-r\n*/\n\n/*!\n * jquery-drawer v3.2.2\n * Flexible drawer menu using jQuery, iScroll and CSS.\n * http://git.blivesta.com/drawer\n * License : MIT\n * Author : blivesta <design@blivesta.com> (http://blivesta.com/)\n */\n\n!(function (e) {\n  typeof define === 'function' && define.amd\n    ? define(['jquery'], e)\n    : typeof exports === 'object'\n      ? (module.exports = e(require('jquery')))\n      : e(jQuery);\n}((e) => {\n  const t = void 0 !== document.ontouchstart;\n  var s = {\n    init(t) {\n      let windowWidth = $(window).width();\n\n      return (\n        (t = e.extend(\n          {\n            iscroll: { mouseWheel: !0, preventDefault: !1 },\n            showOverlay: !0,\n          },\n          t,\n        )),\n        (s.settings = {\n          state: !1,\n          events: { opened: 'drawer.opened', closed: 'drawer.closed' },\n          dropdownEvents: {\n            opened: 'shown.bs.dropdown',\n            closed: 'hidden.bs.dropdown',\n          },\n        }),\n        (s.settings.class = e.extend(\n          {\n            nav: 'drawer-nav',\n            toggle: 'drawer-toggle',\n            overlay: 'drawer-overlay',\n            open: 'drawer-open',\n            close: 'drawer-close',\n            dropdown: 'drawer-dropdown',\n          },\n          t.class,\n        )),\n        this.each(function () {\n          const n = this;\n          const r = e(this);\n          r.data('drawer')\n              || ((t = e.extend({}, t)),\n              r.data('drawer', { options: t }),\n              s.refresh.call(n),\n              t.showOverlay && s.addOverlay.call(n),\n              e(`.${s.settings.class.toggle}`).on('click.drawer', () => {\n                return s.toggle.call(n), n.iScroll.refresh();\n              }),\n              e(window).on('resize.drawer', () => {\n                if ($(window).width() !== windowWidth) {\n                  windowWidth = $(window).width();\n\n                  return s.close.call(n), n.iScroll.refresh();\n                }\n              }),\n              e(`.${s.settings.class.dropdown}`).on(\n                `${s.settings.dropdownEvents.opened\n                } ${\n                  s.settings.dropdownEvents.closed}`,\n                () => {\n                  return n.iScroll.refresh();\n                },\n              ));\n        })\n      );\n    },\n    refresh() {\n      this.iScroll = new IScroll(\n        `.${s.settings.class.nav}`,\n        e(this).data('drawer').options.iscroll,\n      );\n    },\n    addOverlay() {\n      const t = e(this);\n      const n = e('<div>').addClass(\n        `${s.settings.class.overlay} ${s.settings.class.toggle}`,\n      );\n      return t.append(n);\n    },\n    toggle() {\n      const e = this;\n      return s.settings.state ? s.close.call(e) : s.open.call(e);\n    },\n    open() {\n      const n = e(this);\n      return (\n        t,\n        n\n          .removeClass(s.settings.class.close)\n          .addClass(s.settings.class.open)\n          .drawerCallback(() => {\n            (s.settings.state = !0), n.trigger(s.settings.events.opened);\n          })\n      );\n    },\n    close() {\n      const n = e(this);\n      return (\n        t && n.off('touchmove.drawer'),\n        n\n          .removeClass(s.settings.class.open)\n          .addClass(s.settings.class.close)\n          .drawerCallback(() => {\n            (s.settings.state = !1), n.trigger(s.settings.events.closed);\n          })\n      );\n    },\n    destroy() {\n      return this.each(function () {\n        const t = this;\n        const n = e(this);\n        e(`.${s.settings.class.toggle}`).off('click.drawer'),\n        e(window).off('resize.drawer'),\n        e(`.${s.settings.class.dropdown}`).off(\n          `${s.settings.dropdownEvents.opened\n          } ${\n            s.settings.dropdownEvents.closed}`,\n        ),\n        t.iScroll.destroy(),\n        n\n          .removeData('drawer')\n          .find(`.${s.settings.class.overlay}`)\n          .remove();\n      });\n    },\n  };\n  (e.fn.drawerCallback = function (t) {\n    const s = 'transitionend webkitTransitionEnd';\n    return this.each(function () {\n      const n = e(this);\n      n.on(s, function () {\n        return n.off(s), t.call(this);\n      });\n    });\n  }),\n  (e.fn.drawer = function (t) {\n    return s[t]\n      ? s[t].apply(this, Array.prototype.slice.call(arguments, 1))\n      : typeof t !== 'object' && t\n        ? void e.error(`Method ${t} does not exist on jQuery.drawer`)\n        : s.init.apply(this, arguments);\n  });\n}));\n","export const convertSpaces = (string, to = '%20') => {\n  return to === '%20' ? string.replace(/\\+/g, to) : string.replace(/%20/g, to);\n};\n\nexport const isFilterArray = (string = '') => !!string.match(/\\[\\]$/);\n\nexport const getQueryStringParameters = () => {\n  if (window.location.search === '') return {};\n\n  const params = window.location.search.substring(1).split('&');\n  return params.reduce((object, pair) => {\n    // decodeURIComponent cannot be used directly to parse query parameters from a URL. [You need to replace the '+' with ' ']\n    // Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#decoding_query_parameters_from_a_url\n    const [key, value] = decodeURIComponent(convertSpaces(pair)).split('=');\n\n    // Handle array formatting in URL params e.g. make[]\n    if (isFilterArray(key)) {\n      if (key in object) {\n        const newObject = { ...object };\n        newObject[key].push(value);\n        return newObject;\n      }\n\n      return {\n        ...object,\n        [key]: [value],\n      };\n    }\n\n    return {\n      ...object,\n      [key]: value,\n    };\n  }, {});\n};\n\n// does the opposite of getQueryStringParameters by turning an object into an encoded querystring\nexport const objectToQueryStringParameters = (object) => {\n  const params = [];\n\n  const addParam = (key, value) => {\n    params.push(`${encodeURIComponent(key)}=${convertSpaces(encodeURIComponent(value), '+')}`);\n  };\n\n  Object.keys(object).forEach((key) => {\n    if (isFilterArray(key)) {\n      object[key].forEach((value) => {\n        addParam(key, value);\n      });\n    } else {\n      addParam(key, object[key]);\n    }\n  });\n\n  return params.join('&');\n};\n\nexport const formToQueryString = (form, additionalParams = {}) => {\n  let formData = {};\n\n  form.querySelectorAll('[name]').forEach((field) => {\n    if (field.nodeName !== 'BUTTON') {\n      formData[field.name] = field.value;\n    }\n  });\n\n  // let the additional params replace the form ones if needed\n  formData = { ...formData, ...additionalParams };\n\n  return Object.keys(formData)\n    .map((fieldName) => `${fieldName}=${formData[fieldName]}`)\n    .join('&');\n};\n\n//           curry :: (* → a) → (* → a)\nexport const curry = (fn) => {\n  const arity = fn.length;\n\n  return function $curry(...args) {\n    if (args.length < arity) {\n      return $curry.bind(null, ...args);\n    }\n\n    return fn.call(null, ...args);\n  };\n};\n\n//    identity :: x -> x\nconst identity = (x) => x;\n\n//           contains :: (x, [x]) -> Boolean\nexport const contains = (item, list) => list && list.indexOf(item) > -1;\n\n//           unique :: [x] -> [x]\nexport const unique = (list) => [...new Set(list)];\n\n//           without :: (x|[x], [x]) -> [x]\nexport const without = (item, list) => list.filter((x) => !contains(x, [item].flat()));\n\n//           all :: [x] -> Boolean\nexport const all = (list) => list.every(identity);\n\n//           any :: [x] -> Boolean\nexport const any = (list) => list.some(identity);\n\n//    safely return the property at a nested object path\n//    e.g. path([\"a\", \"b\", \"c\"], { a: { b: { c: \"foo\" } } }) => \"foo\"\n//           path :: ([String], object]) -> Any?\nexport const path = (props, object) => {\n  let currentProp = object;\n  let index = 0;\n\n  for (; index < props.length; ) {\n    if (currentProp == null) {\n      return;\n    }\n\n    currentProp = currentProp[props[index]];\n    index += 1;\n  }\n\n  return currentProp;\n};\n\n//    returns the list of elements found in both lists\n//           intersection :: -> ([x], [x]) -> [x]\nexport const intersection = (list1, list2) => {\n  const lookupList = list1.length > list2.length ? list1 : list2;\n  const filteredList = list1.length > list2.length ? list2 : list1;\n\n  return unique(filteredList.filter((x) => contains(x, lookupList)));\n};\n\n// the below two helpers are duplicates of methods from the Deal React files\n// we should remove that redundancy when we have some time\nexport const numberWithCommas = (n) => {\n  if (typeof n !== 'number' && typeof n !== 'string') return '';\n  return n.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\nexport const formatPrice = (value) => {\n  return `£${numberWithCommas(parseFloat(value).toFixed(2))}`;\n};\n\nexport const currentChannelPath = (channelPath) => {\n  const channelMatcher = /^\\/[a-z]+-leasing\\//;\n  const matchedCurrentChannel = window.location.pathname.match(channelMatcher);\n  const matchedPathChannel = channelPath.match(channelMatcher);\n  const defaultChannel = '/car-leasing/';\n\n  if (matchedPathChannel) {\n    return channelPath.replace(\n      matchedPathChannel[0],\n      matchedCurrentChannel ? matchedCurrentChannel[0] : defaultChannel,\n    );\n  }\n\n  return channelPath;\n};\n","import { Application } from '@hotwired/stimulus';\nimport { definitionsFromContext } from '@hotwired/stimulus-webpack-helpers';\n\nconst application = Application.start();\nconst context = require.context('controllers/shared', true, /_controller\\.js$/);\napplication.load(definitionsFromContext(context));\n","/* eslint-disable */\n\n// xs: 0,\n// sm: 576px,\n// md: 768px,\n// lg: 992px,\n// xl: 1200px,\n// xxl: 1500px\n\n(function () {\n  // Tell the browser not to handle scrolling when restoring via the history or\n  // when reloading\n  if ('scrollRestoration' in history) {\n    history.scrollRestoration = 'manual';\n  }\n\n  var SCROLL_POSITION = 'scroll-position';\n  var PAGE_INVALIDATED = 'page-invalidated';\n  var IS_TURBO_FRAME_UPDATE = false;\n\n  // Persist the scroll position on refresh\n  document.addEventListener('beforeunload', function () {\n    sessionStorage.setItem(SCROLL_POSITION, JSON.stringify(scrollData()));\n  });\n\n  // Invalidate the page when the next page is different from the current page\n  // Persist scroll information across pages\n  function beforeVisitHandler(event) {\n    var url;\n    if (event.type === 'turbolinks:before-visit') {\n      url = event.data.url;\n    } else if (event.type === 'turbo:before-visit') {\n      url = event.detail.url;\n    }\n\n    if (url !== location.href) {\n      sessionStorage.setItem(PAGE_INVALIDATED, 'true');\n    }\n    sessionStorage.setItem(SCROLL_POSITION, JSON.stringify(scrollData()));\n  }\n\n  document.addEventListener('turbolinks:before-visit', beforeVisitHandler);\n  document.addEventListener('turbo:before-visit', beforeVisitHandler);\n\n  // Track turbo frame updates\n  document.addEventListener('turbo:before-fetch-request', function (event) {\n    if (event.detail.fetchOptions.headers['Turbo-Frame']) {\n      IS_TURBO_FRAME_UPDATE = true;\n    }\n  });\n\n  // Prevent scrolling after turbo frame replacement\n  document.addEventListener('turbo:frame-render', function (event) {\n    if (event.target.tagName === 'TURBO-FRAME') {\n      event.preventDefault();\n      IS_TURBO_FRAME_UPDATE = true;\n    }\n  });\n\n  // When a page is fully loaded:\n  // 1. Get the persisted scroll position\n  // 2. If the locations match and the load did not originate from a page\n  // invalidation,\n  // 3. scroll to the persisted position if there, or to the top otherwise\n  // 4. Remove the persisted information\n  function loadHandler(event) {\n    var scrollPosition = JSON.parse(sessionStorage.getItem(SCROLL_POSITION));\n\n    if (scrollPosition && shouldScroll(scrollPosition)) {\n      var savedElement = document.getElementById(scrollPosition.key);\n\n      if (\n        !IS_TURBO_FRAME_UPDATE &&\n        savedElement &&\n        window.history.state &&\n        window.history.state.turbo\n      ) {\n        savedElement.scrollIntoView();\n      } else if (!IS_TURBO_FRAME_UPDATE) {\n        window.scrollTo(scrollPosition.scrollX, scrollPosition.scrollY);\n      }\n    }\n\n    sessionStorage.removeItem(PAGE_INVALIDATED);\n  }\n\n  document.addEventListener('turbolinks:load', loadHandler);\n  document.addEventListener('turbo:load', loadHandler);\n  document.addEventListener('turbo:render', loadHandler);\n\n  function shouldScroll(scrollPosition) {\n    return (\n      scrollPosition &&\n      scrollPosition.location === location.href &&\n      !JSON.parse(sessionStorage.getItem(PAGE_INVALIDATED))\n    );\n  }\n\n  function scrollData() {\n    var activeElement = document.querySelector('[data-key]:not([hidden])');\n    return {\n      scrollX: window.scrollX,\n      scrollY: window.scrollY,\n      location: location.href,\n      key: activeElement ? activeElement.getAttribute('id') : null,\n    };\n  }\n})();\n\nfunction onPageLoad() {\n  if (window.history.state && window.history.state.turbo) {\n    window.addEventListener('popstate', function () {\n      location.reload(true);\n    });\n  }\n  /* Only allow transition on anchors when the page has loaded */\n  $('body').removeClass('is-not-loaded');\n  /* On thank you pages, open the enquiry modal by default */\n  $('.p-thank-you-enquiry #modal-enquiry').modal('show');\n  /* Call the page initialise function to lazy load assets */\n}\n\ndocument.addEventListener('turbolinks:load', onPageLoad);\ndocument.addEventListener('turbo:load', onPageLoad);\ndocument.addEventListener('turbo:render', onPageLoad);\n\nfunction onSectionsLoad() {\n  /* SECTION 1: Waypoints & sticky navigation */\n  /* SECTION 2: Deal Page Photo Scroll Waypoint */\n  /* SECTION 3: Modals */\n  /* SECTION 4: Internal sales team dropdown */\n  /* SECTION 5: Counter up */\n  /* SECTION 6: Hero Content Toggle  - Moved to stimulus controller */\n  /* SECTION 7: FAQs Mobile Scrolling */\n  /* SECTION 8: Share This */\n  /* SECTION 9: Anchor Scroll to Section */\n  /* SECTION 10: Add tooltip custom class */\n\n  /* SECTION 1: Waypoints & Sticky Navigation */\n  (function () {\n    var $search = $('.g-search'),\n      $toolbar = $('.g-toolbar'),\n      $header = $('.g-header');\n\n    if ($header.length) {\n      // After the header has finished it's CSS transition, update Waypoints to ensure offsets are correct\n      $header.on(\n        'transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd',\n        function (e) {\n          Waypoint.refreshAll();\n        }\n      );\n\n      var stickyHeader = new Waypoint.Sticky({\n        element: $header[0],\n        stuckClass: 'is-fixed',\n        wrapper: \"<div class='sticky-wrapper sticky-wrapper--header' />\",\n      });\n\n      $toolbar.waypoint(\n        function (direction) {\n          if (direction === 'down' && $(window).scrollTop() > 0) {\n            if ($(window).width() > 992) {\n              $('.sticky-wrapper--header').attr('style', 'height:51px');\n            } else if ($(window).width() > 768) {\n              $('.sticky-wrapper--header').attr('style', 'height:54px');\n            } else {\n              $('.sticky-wrapper--header').attr('style', 'height:0px');\n            }\n            $('.g-search').addClass('is-fixed');\n            $('.g-main').addClass('has-fixed-search');\n          } else {\n            if ($(window).width() > 992) {\n              $('.sticky-wrapper--header').attr('style', 'height:94px');\n            } else if ($(window).width() > 768) {\n              $('.sticky-wrapper--header').attr('style', 'height:85px');\n            } else {\n              $('.sticky-wrapper--header').attr('style', 'height:62px');\n            }\n            $('.g-search').removeClass('is-fixed');\n            $('.g-main').removeClass('has-fixed-search');\n          }\n        },\n        {\n          offset: function () {\n            return -$toolbar.height();\n          },\n        }\n      );\n    }\n\n    var $filter_triggers = $('.c-filter-triggers');\n    if ($filter_triggers.length) {\n      var stickyTriggers = new Waypoint.Sticky({\n        element: $filter_triggers[0],\n        stuckClass: 'is-fixed',\n        wrapper: \"<div class='sticky-wrapper sticky-wrapper--filters' />\",\n        offset: function () {\n          return $header.outerHeight();\n        },\n      });\n    }\n\n    var $anchored_nav = $('.c-anchored-nav');\n    if ($anchored_nav.length) {\n      var anchored_nav = new Waypoint.Sticky({\n        element: $anchored_nav[0],\n        stuckClass: 'is-fixed',\n        wrapper: \"<div class='sticky-wrapper sticky-wrapper--anchored-nav' />\",\n        offset: function () {\n          return $header.outerHeight();\n        },\n      });\n\n      var scrolling = false;\n\n      $('.c-anchored-nav__link').on('click', function (e) {\n        if (this.hash !== '' && scrolling === false) {\n          e.preventDefault();\n          var hash = this.hash;\n          scrolling = true;\n          $('html, body').animate(\n            {\n              scrollTop: $(hash).offset().top,\n            },\n            800,\n            function () {\n              window.location.hash = hash;\n              scrolling = false;\n            }\n          );\n          select_anchored_nav_link($(this));\n        }\n      });\n\n      $('.c-anchored-nav__target').each(function (i, element) {\n        $(element).waypoint({\n          handler: function (direction) {\n            if (scrolling === false && direction === 'down') {\n              select_anchored_nav_link(\n                $(\n                  \".c-anchored-nav__link[href='\" +\n                    $(element).data('trigger') +\n                    \"']\"\n                )\n              );\n            }\n          },\n          offset: function () {\n            return $header.outerHeight() + $anchored_nav.outerHeight();\n          },\n        });\n        $(element).waypoint({\n          handler: function (direction) {\n            if (scrolling === false && direction === 'up') {\n              select_anchored_nav_link(\n                $(\n                  \".c-anchored-nav__link[href='\" +\n                    $(element).data('trigger') +\n                    \"']\"\n                )\n              );\n            }\n          },\n          offset: 'bottom-in-view',\n        });\n      });\n    }\n\n    function select_anchored_nav_link($element) {\n      $('.c-anchored-nav__link').removeClass('c-anchored-nav__link--selected');\n      $element.addClass('c-anchored-nav__link--selected');\n    }\n  })();\n\n  /* SECTION 2: Deal Page Photo Scroll Waypoint */\n  (function () {\n    var $dealPhotos = $('.g-deal-photos'),\n      $dealPhotosThumbs = $('.g-deal-photos__thumbs-inner'),\n      $dealPhotosThumbScroll = $('.g-deal-photos__thumbs-scroll');\n\n    $dealPhotosThumbScroll.waypoint(\n      function (direction) {\n        if (direction === 'down' && $dealPhotosThumbs.scrollTop() > 0) {\n          $dealPhotos.addClass('is-scrolled');\n        } else {\n          $dealPhotos.removeClass('is-scrolled');\n        }\n      },\n      {\n        context: $dealPhotosThumbs,\n        offset: 'bottom-in-view',\n      }\n    );\n  })();\n\n  /* SECTION 3: Modals */\n  (function () {\n    $(window)\n      .on('show.bs.modal', function (e) {\n        $('body').addClass('has-modal');\n      })\n      .on('hide.bs.modal', function (e) {\n        $('body').removeClass('has-modal');\n      });\n\n    $('.c-modal').on('hidden.bs.modal', function (e) {\n      Waypoint.refreshAll();\n    });\n\n    $('.c-modal--video').on('hidden.bs.modal', function () {\n      if (\n        !$('.c-modal--video').hasClass('show') &&\n        $('.c-modal').find('.c-video__asset').length > 0\n      ) {\n        $('.c-modal').find('.c-video__asset')[0].pause();\n      }\n    });\n  })();\n\n  /* SECTION 4: Internal sales team dropdown */\n  (function () {\n    $('.c-internal .dropdown').on({\n      'shown.bs.dropdown': function () {\n        this.was_click_on_menu = false;\n      },\n      click: function (event) {\n        if (\n          !$(event.target).is('a') &&\n          ($(event.target).hasClass('dropdown-menu') ||\n            $(event.target).parents('.dropdown-menu').length)\n        ) {\n          this.was_click_on_menu = true;\n        }\n      },\n      'hide.bs.dropdown': function () {\n        this.should_close = !this.was_click_on_menu;\n        this.was_click_on_menu = false;\n        return this.should_close;\n      },\n    });\n  })();\n\n  /* SECTION 5: Counter up */\n  (function () {\n    if ($('.totals-counter').length) {\n      let a = 0;\n      $(window).bind('scroll.total-counter', function () {\n        const numTop = $('.totals-counter').offset().top - window.innerHeight;\n        if (a == 0 && $(window).scrollTop() > numTop) {\n          $('.totals-counter').each(function () {\n            const $this = $(this),\n              countTo = $this.attr('data-count');\n\n            $({\n              countNum: $this.text(),\n            }).animate(\n              {\n                countNum: countTo,\n              },\n\n              {\n                duration: 2000,\n                easing: 'linear',\n                step: function () {\n                  $this.text(commaSeparateNumber(Math.floor(this.countNum)));\n                },\n                complete: function () {\n                  $this.text(commaSeparateNumber(this.countNum));\n                },\n              }\n            );\n          });\n\n          function commaSeparateNumber(val) {\n            while (/(\\d+)(\\d{3})/.test(val.toString())) {\n              val = val.toString().replace(/(\\d+)(\\d{3})/, '$1' + ',' + '$2');\n            }\n            return val;\n          }\n          a = 1;\n        }\n      });\n    } else {\n      $(window).unbind('scroll.total-counter');\n    }\n  })();\n\n  /* SECTION 7: FAQs Mobile Scrolling */\n  (function () {\n    if ($(window).width() < 768) {\n      $(\"[data-toggle='tab']\").on('click', function (event) {\n        setTimeout(function () {\n          const name = event.target.getAttribute('aria-controls');\n          const target = document.querySelector(`#${name}`);\n\n          target.scrollIntoView({ behavior: 'smooth' });\n\n          target\n            .querySelectorAll(`.c-accordian__card-content`)[0]\n            .classList.add('show');\n        });\n      });\n    }\n  })();\n\n  /* SECTION 8: Share This */\n  (function () {\n    if ($('.p-vehicle-options, .p-van-options').length) {\n      // Note: This is undocumented API for the sharethis widget. Reload the widget when we\n      // visit a new page after a turbolinks load event.\n      if (typeof __sharethis__ !== 'undefined' && __sharethis__.config) {\n        __sharethis__.href = document.location.href;\n        __sharethis__.init(__sharethis__.config);\n      }\n    }\n  })();\n\n  /* SECTION 9: Anchor Scroll to Section */\n  (function () {\n    $(document).on('click', 'a[data-section-scroll]', function (event) {\n      event.preventDefault();\n\n      const target = this.hash.split('#')[1],\n        element = document.getElementsByName(target);\n\n      if (element.length > 0) {\n        element[0].scrollIntoView(true);\n        window.scrollBy(0, -100);\n      }\n    });\n  })();\n\n  /* SECTION 10: Add tooltip custom class */\n  $(function () {\n    if (typeof $.fn.tooltip.Constructor === 'undefined') {\n      throw new Error('Bootstrap Tooltip must be included first!');\n    }\n    let Tooltip = $.fn.tooltip.Constructor;\n    // add customClass option to Bootstrap Tooltip\n    $.extend(Tooltip.Default, {\n      customClass: '',\n    });\n    let _show = Tooltip.prototype.show;\n    Tooltip.prototype.show = function () {\n      // invoke parent method\n      _show.apply(this, Array.prototype.slice.apply(arguments));\n      if (this.config.customClass) {\n        let tip = this.getTipElement();\n        $(tip).addClass(this.config.customClass);\n      }\n    };\n  });\n\n  /* SECTION 12: Badges auto-scroll */\n  $(function () {\n    const scrollContainer = $('.g-snap-carousel--autoscroll');\n    let isUserScrolling = false;\n\n    function startAutoScroll() {\n      const maxScrollLeft =\n        scrollContainer[0].scrollWidth - scrollContainer[0].clientWidth;\n\n      if (!isUserScrolling && scrollContainer.scrollLeft() < maxScrollLeft) {\n        scrollContainer.animate(\n          {\n            scrollLeft: maxScrollLeft,\n          },\n          30000,\n          'linear'\n        );\n      }\n    }\n\n    function stopAutoScroll() {\n      scrollContainer.stop();\n    }\n\n    let observer = new IntersectionObserver(\n      function (entries) {\n        entries.forEach(function (entry) {\n          if (entry.isIntersecting) {\n            // Start the auto-scroll after a delay when the container is in view\n            setTimeout(startAutoScroll, 1500);\n          } else {\n            // Stop the auto-scroll when the container is not in view\n            stopAutoScroll();\n          }\n        });\n      },\n      { threshold: 0.7 }\n    );\n\n    if (\n      document.querySelector('.g-snap-carousel.g-snap-carousel--autoscroll')\n    ) {\n      observer.observe(\n        document.querySelector('.g-snap-carousel.g-snap-carousel--autoscroll')\n      );\n    }\n\n    // Disable auto-scroll when user starts interacting with the container\n    scrollContainer.on('touchstart touchmove mouseenter wheel', function () {\n      isUserScrolling = true;\n      stopAutoScroll();\n    });\n  });\n\n  /* SECTION 13: Truncate content */\n  $(function () {\n    const truncateContainers = $('.truncate-content');\n    truncateContainers.each(function (_idx, truncateContainer) {\n      const toggleButton = $(truncateContainer).find(\n        '.truncate-content__toggle'\n      );\n      toggleButton.on('click', function () {\n        if ($(truncateContainer).hasClass('truncate-content--hidden')) {\n          $(truncateContainer).removeClass('truncate-content--hidden');\n          toggleButton.text('View less');\n        } else {\n          $(truncateContainer).addClass('truncate-content--hidden');\n          toggleButton.text('View more');\n        }\n      });\n    });\n  });\n}\n\ndocument.addEventListener('turbolinks:load', onSectionsLoad);\ndocument.addEventListener('turbo:load', onSectionsLoad);\ndocument.addEventListener('turbo:render', onSectionsLoad);\n","// polyfills:\n// Element.closest\nif (!Element.prototype.matches) {\n  Element.prototype.matches = (\n    Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector\n  );\n}\nif (!Element.prototype.closest) {\n  Element.prototype.closest = function(selector) {\n    let el = this;\n    while (el !== null && el.nodeType === 1) {\n      if (el.matches(selector)) {\n        return el;\n      }\n      el = el.parentElement || el.parentNode;\n    }\n    return null;\n  };\n}\n\n// javascript:\nfunction ready(fn) {\n  if (document.readyState !== 'loading') {\n    fn();\n  } else {\n    document.addEventListener('DOMContentLoaded', fn);\n  }\n}\n\nfunction togglePricing() {\n  document.body.classList.toggle('is-business');\n  const isBusiness = document.body.classList.contains('is-business');\n  if (isBusiness) {\n    document.cookie = 'pricing_type=is-business;path=/';\n  } else {\n    document.cookie = 'pricing_type=is-personal;path=/';\n  }\n  Turbolinks.visit(window.location);\n  // document.dispatchEvent(\n  //  new CustomEvent('pricing#typeChange', { detail: { isPersonal: !isBusiness } })\n  // );\n}\n\nfunction getCookie(key) {\n  const b = document.cookie.match(`(^|[^;]+)\\\\s*${key}\\\\s*=\\\\s*([^;]+)`);\n  return b ? b.pop() : '';\n}\n\nready(() => {\n  if (getCookie('pricing_type') === 'is-business') {\n    document.body.classList.add('is-business');\n  }\n\n  document.addEventListener('click', function(e) {\n    for (let { target } = e; target && target !== this; target = target.parentNode) {\n      if (target.matches('.c-price-switch__label')) {\n        e.preventDefault();\n        togglePricing.call(target, e);\n        break;\n      }\n    }\n  }, false);\n\n  document.addEventListener('turbolinks:click', (event) => {\n    const anchorElement = event.target;\n    const isSamePageAnchor = (\n      anchorElement.hash\n      && anchorElement.origin === window.location.origin\n      && anchorElement.pathname === window.location.pathname\n    );\n\n    if (isSamePageAnchor) {\n      event.target.dataset.turbolinks = 'false';\n    }\n  });\n});\n\nfunction lazyLoadImages() {\n  const imgDefer = document.querySelectorAll('img[data-src]');\n\n  for (let i = 0; i < imgDefer.length; i++) {\n    imgDefer[i].setAttribute('src', imgDefer[i].getAttribute('data-src'));\n    imgDefer[i].removeAttribute('data-src');\n  }\n}\n\ndocument.addEventListener('turbolinks:load', lazyLoadImages);\n","(function() {\n  const settings = {\n    class: {\n      subdrawer: 'g-drawer--sub',\n      closedrawer: 'g-drawer__close',\n      action: 'g-drawer__action',\n      overlay: 'drawer-overlay',\n      opened: 'drawer-open',\n      hasdrawer: 'has-drawer',\n    },\n  };\n\n  const elements = {\n    $index: null,\n    $overlay: null,\n  };\n\n  document.addEventListener('turbolinks:load', () => {\n    // create the overlay\n    const $overlay = document.createElement('div');\n    $overlay.className = settings.class.overlay;\n    document.body.appendChild($overlay);\n\n    // cache some elements\n    elements.$overlay = document.querySelector(`.${settings.class.overlay}`);\n    elements.$index = document.querySelector('.l-index');\n  });\n\n  const openDrawer = function($drawer) {\n    $drawer.classList.add(settings.class.opened);\n    elements.$index.classList.add(settings.class.hasdrawer);\n    elements.$overlay.style.display = 'block';\n  };\n\n  const closeDrawer = function($drawer) {\n    $drawer.classList.remove(settings.class.opened);\n\n    if (!$drawer.classList.contains(settings.class.subdrawer)) {\n      // only remove the overlay when the main drawer is closed\n      elements.$index.classList.remove(settings.class.hasdrawer);\n      elements.$overlay.style.display = 'none';\n    }\n  };\n\n  const closeAllDrawers = function() {\n    const $drawers = document.querySelectorAll(`.${settings.class.opened}`);\n\n    for (let i = 0; i < $drawers.length; i++) {\n      closeDrawer($drawers[i]);\n    }\n\n    // broadcast a message that is read by FilterDrawerItem so they can mop up after this action\n    window.dispatchEvent(new CustomEvent('scl:filters:close'));\n  };\n\n  // methods\n  document.addEventListener('click', (event) => {\n    const $element = event.target;\n\n    // handle opening drawers\n    if ($element.hasAttribute('data-drawer')) {\n      event.preventDefault();\n      openDrawer(document.querySelector($element.getAttribute('data-drawer')));\n    }\n\n    // element has parent with data-drawer\n    if ($element.closest('[data-drawer]')) {\n      event.preventDefault();\n      openDrawer(document.querySelector($element.closest('[data-drawer]').getAttribute('data-drawer')));\n    }\n\n    // handle closing this drawer with the X or the <\n    if ($element.classList.contains(settings.class.closedrawer)) {\n      const $drawer = $element.closest(`.${settings.class.opened}`);\n      event.preventDefault();\n      closeDrawer($drawer);\n    }\n\n    // handle closing all drawers by clicking on the overlay\n    // or clicking the button at the bottom of the drawer\n    if ($element.classList.contains(settings.class.overlay)\n      || $element.classList.contains(settings.class.action)\n      || $element.getAttribute('data-drawer-action') === 'close'\n    ) {\n      closeAllDrawers();\n    }\n  });\n}());\n","// eslint-disable-next-line func-names\n(function() {\n  document.addEventListener('turbolinks:load', () => {\n    const observer = new IntersectionObserver(\n      ([event]) => {\n        const element = event.target;\n        // the element may be configured to stick to the bottom or top of the page\n        const stickyBottom = element.getAttribute('data-sticky') === 'bottom';\n        // we don't want to say it's fixed if you have scrolled past where it stops\n        const pastEdge = stickyBottom\n          ? event.boundingClientRect.y > 0\n          : event.boundingClientRect.y < 0;\n        const toggleOn = (event.intersectionRatio < 1 && pastEdge);\n\n        // add/remove the class as needed\n        element.classList.toggle('is-fixed', toggleOn);\n\n        // the visible class is quite niche/specific and might not be used by every instance\n        // it only is added once; the first time\n        setTimeout(() => {\n          element.classList.add('is-visible');\n        }, 250);\n      },\n      { threshold: [1] },\n    );\n\n    const stickyElements = document.querySelectorAll('[data-sticky]');\n\n    stickyElements.forEach((element) => observer.observe(element));\n  });\n}());\n"],"sourceRoot":""}