{"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":""}