{"version":3,"sources":["webpack:///./app/javascript/components/ui/FilterDrawerItem.jsx","webpack:///./app/javascript/components/ui/Range.jsx","webpack:///./app/javascript/components/ui/FilterDrawerListItem.jsx","webpack:///./app/javascript/components/ui/FilterDrawerTrigger.jsx","webpack:///./app/javascript/components/ui/FilterOptionAll.jsx","webpack:///./app/javascript/components/scrollSnapSlider.js","webpack:///./app/javascript/components/ui/Button.jsx","webpack:///./app/javascript/components/ui/SortOption.jsx","webpack:///./app/javascript/components/ui/FilterList.jsx","webpack:///./app/javascript/components/SpecialistSearch/SpecialistSearch.jsx","webpack:///./app/javascript/components/ui/FilterDrawerSelectItem.jsx","webpack:///./app/javascript/components/ui/ToggleCheckbox.jsx","webpack:///./app/javascript/components/ui/FilterOption.jsx"],"names":["PRICE_FILTERS_COUNT","PRICE_FILTERS_SKIP_COUNT","FilterDrawerItem","allCount","isDesktop","name","count","disabled","options","excludeFromForm","title","allowAll","allText","elasticSearchProps","withoutButton","noWrap","selectedFilters","setSelectedFilter","removeSelectedFilters","totalCounts","useSelector","state","filterControls","checkboxOrRadio","isFilterArray","includes","replace","join","undefined","hasSelectedOptions","type","parentTitle","map","value","optionCount","label","prelabel","enabled","selected","indexOf","key","onSelect","id","defaultProps","Range","data","onChange","labels","classes","args","useState","setvalue","background","setBackground","input","useRef","className","classnames","useEffect","bgValue","current","min","max","ref","length","step","event","target","style","index","isFirst","isLast","labelClassName","Number","FilterDrawerListItem","children","dropdownRef","updatedRef","theme","selectedDropdown","isVans","controller","filtersUpdated","dispatch","useDispatch","submitForm","immediate","form","document","querySelector","setTimeout","dispatchEvent","Event","bubbles","cancelable","payload","handleOutsideClicks","window","innerWidth","dropdown","contains","stopPropagation","stopImmediatePropagation","removeEventListener","addEventListener","handleClick","open","onClick","role","tabIndex","onKeyDown","e","toLowerCase","replaceAll","toLocaleString","FilterDrawerTrigger","withCount","buttonRef","width","height","fill","xmlns","d","FilterOptionAll","checked","ScrollSnapSlider","slider","leftArrow","rightArrow","this","addEventListeners","scrollTo","updateArrows","bind","arrowOnClick","positions","getScrollSnapPositions","getCoordinates","x","scrollLeft","positionsLeft","positionsRight","toggleArrows","arrow","show","classList","toggle","direction","scrollSnapToNext","items","midpoint","threshold","lesser","greater","forEach","item","Math","abs","push","Button","variant","SortOption","htmlFor","FilterList","heading","ModelSearch","makesPath","makes","models","setState","makeRef","modelRef","axios","get","headers","Accept","then","response","getModels","make","slug","model","preventDefault","path","Turbolinks","visit","FilterDrawerSelectItem","dropdownOpen","setDropdownOpen","display","ToggleCheckbox","setSingleCheckboxFilter","labelPosition","greenToggle","isDesktopVersion","isDisabled","setIsDisabled","random","toString","substring","handleResize","windowWidth","appearance","persist","closest","FilterOption","safe_id","idToProcess"],"mappings":"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","file":"js/application~27a58e25-87863467a248b2b38068.chunk.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\n\nimport { isFilterArray } from '../../utils';\nimport { elasticSearchFilterOptionPropTypes, elasticSearchPropsPropTypes } from '../../propTypes/elasticSearch';\n\nimport FilterDrawerListItem from './FilterDrawerListItem';\nimport FilterOption from './FilterOption';\nimport FilterOptionAll from './FilterOptionAll';\n\nconst PRICE_FILTERS_COUNT = ['monthly_prices', 'funder'];\nconst PRICE_FILTERS_SKIP_COUNT = ['term', 'mileage', 'initial_payment'];\n\nconst FilterDrawerItem = ({\n  isDesktop,\n  name,\n  count,\n  disabled,\n  options,\n  excludeFromForm,\n  title,\n  allowAll,\n  allText,\n  elasticSearchProps,\n  withoutButton,\n  noWrap,\n}) => {\n  const { selectedFilters, setSelectedFilter, removeSelectedFilters } = elasticSearchProps;\n\n  const { totalCounts } = useSelector((state) => state.filterControls);\n\n  const checkboxOrRadio = isFilterArray(name) ? 'checkbox' : 'radio';\n  let allCount;\n\n  if (PRICE_FILTERS_COUNT.includes(name) && totalCounts[name.replace('[]', '')] > totalCounts.count) {\n    allCount = totalCounts.count;\n  } else if (PRICE_FILTERS_SKIP_COUNT.includes(name)) {\n    allCount = '';\n  } else {\n    allCount = totalCounts[name.replace('[]', '')];\n  }\n\n  if (!count) {\n    if (isFilterArray(name)) {\n      count = selectedFilters[name] ? selectedFilters[name].join(', ') : undefined;\n    } else {\n      count = selectedFilters[name] || undefined; // TODO: improve\n    }\n  }\n\n  return (\n    <FilterDrawerListItem\n      count={count}\n      title={title}\n      disabled={disabled}\n      isDesktop={isDesktop}\n      withoutButton={withoutButton}\n      hasSelectedOptions={!!selectedFilters[name]}\n      noWrap={noWrap}\n    >\n      {allowAll && (\n        <FilterOptionAll\n          type={checkboxOrRadio}\n          allText={allText}\n          allCount={allCount}\n          name={name}\n          selectedFilters={selectedFilters}\n          removeSelectedFilters={removeSelectedFilters}\n          parentTitle={title}\n        />\n      )}\n      {options.map(({ value, count: optionCount, label, prelabel, enabled }) => {\n        const selected = isFilterArray(name)\n          ? (selectedFilters[name] || []).indexOf(value) > -1\n          : selectedFilters[name] === value;\n\n        return (\n          <FilterOption\n            key={value}\n            type={checkboxOrRadio}\n            value={value}\n            count={optionCount || ''}\n            name={name}\n            excludeFromForm={excludeFromForm}\n            label={label}\n            prelabel={prelabel}\n            enabled={enabled}\n            selected={selected}\n            onSelect={setSelectedFilter}\n            parentTitle={title}\n            id={isDesktop ? `${name}-${value}-desktop` : `${name}-${value}-mobile`}\n          />\n        );\n      })}\n    </FilterDrawerListItem>\n  );\n};\n\nFilterDrawerItem.propTypes = {\n  isDesktop: PropTypes.bool,\n  name: PropTypes.string.isRequired,\n  count: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  disabled: PropTypes.bool,\n  options: PropTypes.arrayOf(elasticSearchFilterOptionPropTypes).isRequired,\n  excludeFromForm: PropTypes.bool,\n  title: PropTypes.string.isRequired,\n  allowAll: PropTypes.bool,\n  allText: PropTypes.string,\n  elasticSearchProps: elasticSearchPropsPropTypes.isRequired,\n  withoutButton: PropTypes.bool,\n  noWrap: PropTypes.bool,\n};\n\nFilterDrawerItem.defaultProps = {\n  isDesktop: false,\n  count: undefined,\n  disabled: false,\n  excludeFromForm: false,\n  allowAll: true,\n  allText: 'All',\n  withoutButton: false,\n  noWrap: false,\n};\n\nexport default FilterDrawerItem;\n","import React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst Range = ({ data, selected, onChange, labels = data, classes = '', ...args }) => {\n  const [value, setvalue] = useState(data.indexOf(selected) + 1);\n  const [background, setBackground] = useState('');\n  const input = useRef();\n\n  const className = classnames('drv-range', classes);\n\n  useEffect(() => {\n    const bgValue = ((value - input.current.min) / (input.current.max - input.current.min)) * 100;\n    setBackground(`linear-gradient(to right, #003765 0%, #003765 ${bgValue}%, #d1d1d1 ${bgValue}%, #d1d1d1 100%)`);\n\n    onChange(value);\n  }, [value]);\n\n  return (\n    <div className={className}>\n      <div className=\"drv-range__input-wrapper\">\n        <input\n          ref={input}\n          className=\"drv-range__input\"\n          type=\"range\"\n          min=\"1\"\n          value={value}\n          max={data.length}\n          step=\"1\"\n          data-ui-range-slider-target=\"input\"\n          data-action=\"ui-range-slider#update\"\n          onChange={(event) => setvalue(event.target.value)}\n          // eslint-disable-next-line react/jsx-props-no-spreading\n          {...args}\n        />\n        <div className=\"drv-range__bg\" style={{ background }} />\n        <ul className=\"drv-range__list\">\n          {labels.map((label, index) => {\n            const isFirst = index === 0;\n            const isLast = index === labels.length - 1;\n            const labelClassName = classnames('drv-range__option', {\n              'drv-range__option--first': isFirst,\n              'drv-range__option--last': isLast,\n              'drv-range__option--selected': Number(value) === index + 1,\n            });\n\n            return (\n              <li key={label} className={labelClassName}>\n                {(isFirst || isLast) && label}\n              </li>\n            );\n          })}\n        </ul>\n      </div>\n    </div>\n  );\n};\n\nRange.propTypes = {\n  data: PropTypes.arrayOf(PropTypes.number).isRequired,\n  selected: PropTypes.number,\n  onChange: PropTypes.func.isRequired,\n  // eslint-disable-next-line react/require-default-props\n  labels: PropTypes.arrayOf(PropTypes.number),\n  classes: PropTypes.string,\n};\n\nRange.defaultProps = {\n  selected: null,\n  classes: '',\n};\n\nexport default Range;\n","import React, { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector, useDispatch } from 'react-redux';\nimport classnames from 'classnames';\n\nimport FilterDrawerTrigger from './FilterDrawerTrigger';\n\nconst FilterDrawerListItem = ({\n  title,\n  count,\n  disabled,\n  isDesktop,\n  withoutButton,\n  children,\n  hasSelectedOptions,\n  noWrap,\n}) => {\n  const dropdownRef = useRef();\n  const updatedRef = useRef();\n  const { totalCounts, theme, selectedDropdown, isVans, controller, filtersUpdated } = useSelector(\n    (state) => state.filterControls,\n  );\n  const dispatch = useDispatch();\n\n  const submitForm = (immediate = false) => {\n    const form = document.querySelector(`#${controller}-filters`);\n    setTimeout(\n      () => {\n        if (updatedRef.current) {\n          form.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));\n          dispatch({ type: 'SET_FILTERS_UPDATED', payload: false });\n          if (immediate) {\n            dispatch({ type: 'SET_SELECTED_DROPDOWN', payload: '' });\n          }\n        }\n      },\n      immediate ? 0 : 1,\n    );\n  };\n\n  const handleOutsideClicks = (event) => {\n    if (window.innerWidth <= 1200 || selectedDropdown !== title) {\n      return;\n    }\n    const dropdown = dropdownRef.current;\n    if (!dropdown) return;\n\n    const isClickInside = dropdown.contains(event.target);\n    if (isClickInside) {\n      event.stopPropagation();\n      event.stopImmediatePropagation();\n    } else {\n      dispatch({ type: 'SET_SELECTED_DROPDOWN', payload: '' });\n      submitForm();\n    }\n  };\n\n  useEffect(() => {\n    if (isDesktop) {\n      document.removeEventListener('mousedown', handleOutsideClicks, true);\n      document.addEventListener('mousedown', handleOutsideClicks, true);\n      return () => {\n        document.removeEventListener('mousedown', handleOutsideClicks, true);\n      };\n    }\n  }, [selectedDropdown === title, title]);\n\n  const handleClick = () => {\n    if (selectedDropdown === title) {\n      submitForm();\n    }\n    dispatch({ type: 'SET_SELECTED_DROPDOWN', payload: title });\n  };\n\n  const handleButton = () => {\n    dispatch({ type: 'SET_SELECTED_DROPDOWN', payload: '' });\n    submitForm();\n  };\n\n  useEffect(() => {\n    updatedRef.current = filtersUpdated;\n  }, [filtersUpdated]);\n\n  return (\n    <li\n      className={classnames('drv-filter-drawer-list-item', {\n        'drv-filter-drawer-list-item--closed': selectedDropdown !== title,\n        'drv-filter-drawer-list-item--open': selectedDropdown === title,\n        'drv-filter-drawer-list-item--disabled': disabled,\n        'drv-filter-drawer-list-item--dropdown': isDesktop,\n        'drv-filter-drawer-list-item--selected': isDesktop && hasSelectedOptions,\n        [`drv-filter-drawer-list-item--${theme}`]: theme,\n      })}\n      ref={dropdownRef}\n    >\n      <FilterDrawerTrigger\n        title={title}\n        handleClick={handleClick}\n        open={selectedDropdown === title}\n        count={count}\n        disabled={disabled}\n        isDesktop={isDesktop}\n      />\n\n      <div\n        className={classnames('drv-filter-drawer-list-options-container drv-mb-1', {\n          'drv-filter-drawer-list-options-container--open': selectedDropdown === title,\n          'drv-filter-drawer-list-options-container--nowrap': noWrap,\n        })}\n      >\n        <div\n          className={classnames('drv-filter-drawer-list-options', {\n            'pb-2': withoutButton,\n          })}\n          onClick={() => {\n            if (withoutButton) submitForm(true);\n          }}\n          role=\"button\"\n          tabIndex={0}\n          onKeyDown={(e) => {\n            if (e.key === 'Enter' || e.key === ' ') {\n              submitForm(true);\n            }\n          }}\n        >\n          <ul>{children}</ul>\n        </div>\n        {isDesktop && !withoutButton && (\n          <div className=\"drv-filter-drawer-list-submit\">\n            <button\n              className=\"drv-button drv-button--blue\"\n              type=\"button\"\n              data-action=\"click->ga-filters#push\"\n              data-ga-filters-event-action=\"applied_filter_category_desktop\"\n              data-ga-filters-filter-name={title.toLowerCase().replaceAll(' ', '_')}\n              onClick={handleButton}\n            >\n              View {totalCounts.count && totalCounts.count.toLocaleString('en-GB')} {isVans ? 'vans' : 'cars'}\n            </button>\n          </div>\n        )}\n      </div>\n    </li>\n  );\n};\n\nFilterDrawerListItem.propTypes = {\n  title: PropTypes.string.isRequired,\n  count: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  disabled: PropTypes.bool,\n  isDesktop: PropTypes.bool.isRequired,\n  withoutButton: PropTypes.bool,\n  children: PropTypes.node.isRequired,\n  hasSelectedOptions: PropTypes.bool,\n  noWrap: PropTypes.bool,\n};\n\nFilterDrawerListItem.defaultProps = {\n  disabled: false,\n  hasSelectedOptions: false,\n  count: undefined,\n  withoutButton: false,\n  noWrap: false,\n};\n\nexport default FilterDrawerListItem;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\n\nconst FilterDrawerTrigger = ({ title, open, count, isDesktop, disabled, handleClick }) => {\n  const withCount = typeof count !== 'undefined';\n  const buttonRef = useRef();\n\n  const { theme } = useSelector((state) => state.filterControls);\n\n  return (\n    <button\n      ref={buttonRef}\n      type=\"button\"\n      onClick={(e) => handleClick(e.target)}\n      disabled={disabled}\n      className=\"drv-filter-drawer-trigger\"\n      data-action=\"ga-filters#push\"\n      data-ga-filters-event-action={open ? 'closed_filter_category' : 'expanded_filter_category'}\n      data-ga-filters-filter-name={title.toLowerCase().replaceAll(' ', '_')}\n    >\n      {title}\n      {!open && withCount && !isDesktop && (\n        <>\n          {count !== 'Not selected' && (\n            <svg\n              className=\"drv-filter-drawer-trigger__check\"\n              width=\"18\"\n              height=\"18\"\n              fill={theme === 'electric' ? '#002b49' : '#ac8c30'}\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M6.465 15.703a.83.83 0 001.156 0l9.188-9.187a.83.83 0 000-1.157l-1.125-1.125a.792.792 0 00-1.125 0l-7.5 7.5-3.531-3.5a.792.792 0 00-1.125 0L1.278 9.36a.83.83 0 000 1.157l5.187 5.187z\"\n                fill=\"#000\"\n              />\n              <path d=\"M6.465 15.703a.83.83 0 001.156 0l9.188-9.187a.83.83 0 000-1.157l-1.125-1.125a.792.792 0 00-1.125 0l-7.5 7.5-3.531-3.5a.792.792 0 00-1.125 0L1.278 9.36a.83.83 0 000 1.157l5.187 5.187z\" />\n            </svg>\n          )}\n          <span className=\"drv-filter-drawer-trigger__count\">({count})</span>\n        </>\n      )}\n    </button>\n  );\n};\n\nFilterDrawerTrigger.propTypes = {\n  title: PropTypes.string.isRequired,\n  open: PropTypes.bool,\n  count: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  isDesktop: PropTypes.bool,\n  disabled: PropTypes.bool,\n  handleClick: PropTypes.func.isRequired,\n};\n\nFilterDrawerTrigger.defaultProps = {\n  open: false,\n  count: undefined,\n  isDesktop: false,\n  disabled: false,\n};\n\nexport default FilterDrawerTrigger;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport FilterOption from './FilterOption';\n\nconst FilterOptionAll = ({ name, type, allText, allCount, selectedFilters, removeSelectedFilters, parentTitle }) => (\n  <FilterOption\n    key=\"all\"\n    id={`${name}-All`}\n    count={allCount !== 0 ? allCount : ''}\n    type={type}\n    value={allText}\n    enabled\n    selected={!selectedFilters[name]}\n    onSelect={(event) => {\n      if (event.target.checked) {\n        removeSelectedFilters(name);\n      }\n    }}\n    parentTitle={parentTitle}\n  />\n);\n\nFilterOptionAll.propTypes = {\n  name: PropTypes.string.isRequired,\n  type: PropTypes.string.isRequired,\n  allText: PropTypes.string,\n  allCount: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  selectedFilters: PropTypes.shape({}).isRequired,\n  removeSelectedFilters: PropTypes.func.isRequired,\n  parentTitle: PropTypes.string,\n};\n\nFilterOptionAll.defaultProps = {\n  allText: 'All',\n  allCount: 0,\n  parentTitle: '',\n};\n\nexport default FilterOptionAll;\n","import { scrollSnapToNext, getScrollSnapPositions } from 'scroll-snap-api';\n\nexport class ScrollSnapSlider {\n  constructor(slider, leftArrow, rightArrow) {\n    this.slider = slider;\n    this.leftArrow = leftArrow;\n    this.rightArrow = rightArrow;\n\n    this.addEventListeners();\n  }\n\n  addEventListeners() {\n    this.slider.scrollTo(0, 0);\n    this.slider.addEventListener('scroll', this.updateArrows.bind(this));\n\n    this.leftArrow.addEventListener('click', this.arrowOnClick.bind(this, 'left'));\n    this.rightArrow.addEventListener('click', this.arrowOnClick.bind(this, 'right'));\n  }\n\n  updateArrows() {\n    const positions = getScrollSnapPositions(this.slider);\n\n    const [positionsLeft, positionsRight] = this.getCoordinates(positions.x, this.slider.scrollLeft, 2);\n\n    this.toggleArrows(this.leftArrow, positionsLeft.length > 0);\n    this.toggleArrows(this.rightArrow, positionsRight.length > 0);\n  }\n\n  toggleArrows(arrow, show) {\n    if (arrow) {\n      arrow.classList.toggle('disabled', !show);\n    }\n  }\n\n  arrowOnClick(direction) {\n    scrollSnapToNext(this.slider, direction);\n  }\n\n  getCoordinates(items, midpoint, threshold) {\n    const lesser = [];\n    const greater = [];\n    items.forEach((item) => {\n      if (Math.abs(item - midpoint) <= threshold) {\n        return;\n      }\n      if (item < midpoint) {\n        lesser.push(item);\n      }\n      if (item > midpoint) {\n        greater.push(item);\n      }\n    });\n    return [lesser, greater];\n  }\n}\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst Button = ({ type, variant, children, classes, ...args }) => {\n  const className = classnames('drv-button', `drv-button--${variant || 'primary'}`, classes);\n\n  return (\n    <button className={className} type={type} {...args}>\n      {children}\n    </button>\n  );\n};\n\nButton.propTypes = {\n  type: PropTypes.oneOf(['button', 'submit', 'reset']),\n  children: PropTypes.node.isRequired,\n  variant: PropTypes.oneOf(['primary', 'gold', 'white', 'blue', 'electric', 'electric-dark']),\n  classes: PropTypes.string,\n};\n\nButton.defaultProps = {\n  type: 'button',\n  variant: 'primary',\n  classes: '',\n};\n\nexport default Button;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst SortOption = ({ name, value, id = `${name}-${value}`, label = value, enabled, type, selected, onSelect }) => {\n  return (\n    <li className=\"drv-sort-option\">\n      <input\n        type={type}\n        name={name}\n        id={id}\n        className={classnames('drv-checkbox', {\n          'drv-checkbox--radio': type === 'radio',\n        })}\n        data-action=\"ga-filters#push\"\n        data-ga-filters-event-action=\"sort_applied\"\n        data-ga-filters-sort-applied={label.toLowerCase().replaceAll(' ', '_')}\n        value={value}\n        checked={selected}\n        disabled={!enabled}\n        onChange={onSelect}\n      />\n\n      <label htmlFor={id} className=\"drv-sort-option__label drv-ml-1\">\n        {label}\n      </label>\n    </li>\n  );\n};\n\nSortOption.propTypes = {\n  id: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n  value: PropTypes.string.isRequired,\n  label: PropTypes.string.isRequired,\n  selected: PropTypes.bool.isRequired,\n  onSelect: PropTypes.func.isRequired,\n  enabled: PropTypes.bool,\n  type: PropTypes.string,\n};\n\nSortOption.defaultProps = {\n  enabled: true,\n  type: 'checkbox',\n};\n\nexport default SortOption;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst FilterList = ({ heading, isDesktop, children }) => {\n  if (isDesktop) {\n    return children;\n  }\n  return (\n    <>\n      {heading && <h3 className=\"drv-filter-list__heading drv-mt-4 drv-mb-4\">{heading}</h3>}\n\n      <ul className=\"drv-block drv-mb-4\">{children}</ul>\n    </>\n  );\n};\n\nFilterList.propTypes = {\n  heading: PropTypes.string,\n  isDesktop: PropTypes.bool.isRequired,\n  children: PropTypes.node.isRequired,\n};\n\nFilterList.defaultProps = {\n  heading: '',\n};\n\nexport default FilterList;\n","import React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport axios from 'axios';\n\nconst ModelSearch = ({ makesPath, id }) => {\n  const [state, setState] = useState({\n    makes: [],\n    models: [],\n  });\n\n  const makeRef = useRef(null);\n  const modelRef = useRef(null);\n\n  const getMakes = () => {\n    axios\n      .get('/car-leasing/bodytypes/specialist/makes.json', {\n        headers: {\n          'Content-Type': 'application/json',\n          Accept: 'application/json',\n        },\n      })\n      .then((response) => {\n        setState({ ...state, makes: response.data });\n      });\n  };\n\n  const getModels = (event) => {\n    axios\n      .get(`/car-leasing/bodytypes/specialist/makes/${event.target.value}/model_ranges.json`, {\n        headers: {\n          'Content-Type': 'application/json',\n          Accept: 'application/json',\n        },\n      })\n      .then((response) => {\n        setState({ ...state, models: response.data });\n      });\n  };\n\n  const handleSubmit = (event) => {\n    event.preventDefault();\n\n    let path = makesPath;\n\n    if (makeRef.current.value !== '' || modelRef.current.value !== '') {\n      path = `/car-leasing/${makeRef.current.value}${modelRef.current.value ? `/${modelRef.current.value}` : ''}`;\n    }\n\n    Turbolinks.visit(path);\n  };\n\n  useEffect(() => {\n    getMakes();\n  }, []);\n\n  return (\n    <>\n      <div className=\"b-form-group c-search__form-group c-search__form-group--manufacturer\">\n        <label className=\"sr-only\" htmlFor={`specialist-search-make-${id}`}>\n          Manufacturer\n        </label>\n        <select\n          className=\"c-search__form-control c-search__form-select\"\n          name={`specialist-search-make-${id}`}\n          id={`specialist-search-make-${id}`}\n          onChange={(event) => getModels(event)}\n          ref={makeRef}\n        >\n          <option value=\"\">Any make...</option>\n          {state.makes.map((make) => (\n            <option value={make.slug} key={make.id}>\n              {make.name}\n            </option>\n          ))}\n        </select>\n      </div>\n\n      <div className=\"b-form-group c-search__form-group c-search__form-group--model\">\n        <label className=\"sr-only\" htmlFor={`specialist-search-model-${id}`}>\n          Model\n        </label>\n        <select\n          className=\"c-search__form-control c-search__form-select\"\n          name={`specialist-search-model-${id}`}\n          id={`specialist-search-model-${id}`}\n          ref={modelRef}\n        >\n          <option value=\"\">Any model...</option>\n          {state.models.map((model) => (\n            <option value={model.slug} key={model.id}>\n              {model.name}\n            </option>\n          ))}\n        </select>\n      </div>\n\n      <div className=\"c-search__form-group c-search__form-group--submit\">\n        <button className=\"c-search__button\" onClick={handleSubmit}>\n          Search Cars\n        </button>\n      </div>\n    </>\n  );\n};\n\nModelSearch.propTypes = {\n  makesPath: PropTypes.string.isRequired,\n  id: PropTypes.string.isRequired,\n};\n\nexport default ModelSearch;\n","import React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\n\nconst FilterDrawerSelectItem = ({ title, disabled, children }) => {\n  const [dropdownOpen, setDropdownOpen] = useState(false);\n  const dropdownRef = useRef();\n\n  const handleOutsideClicks = (event) => {\n    if (dropdownOpen && dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n      setDropdownOpen(false);\n    }\n  };\n\n  useEffect(() => {\n    document.addEventListener('mousedown', handleOutsideClicks);\n    return () => {\n      document.removeEventListener('mousedown', handleOutsideClicks);\n    };\n  }, [dropdownOpen]);\n\n  const handleToggle = () => {\n    setDropdownOpen(!dropdownOpen);\n  };\n\n  return (\n    <div className=\"multiselect\" ref={dropdownRef}>\n      {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n      <div className=\"selectBox\" onClick={handleToggle} role=\"button\" tabIndex={0}>\n        <select disabled={disabled}>\n          <option>{title}</option>\n        </select>\n        <div className=\"overSelect\" />\n      </div>\n      <div className=\"filter-inner\" style={{ display: dropdownOpen && !disabled ? 'block' : 'none' }}>\n        <ul className=\"filter-checkboxes\">{children}</ul>\n        <button className=\"drv-button drv-button--gold\" type=\"button\">\n          View XX results\n        </button>\n      </div>\n    </div>\n  );\n};\n\nFilterDrawerSelectItem.propTypes = {\n  title: PropTypes.string.isRequired,\n  disabled: PropTypes.bool,\n  children: PropTypes.node.isRequired,\n};\n\nFilterDrawerSelectItem.defaultProps = {\n  disabled: false,\n};\n\nexport default FilterDrawerSelectItem;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nconst ToggleCheckbox = ({\n  id,\n  name,\n  value,\n  setSingleCheckboxFilter,\n  label,\n  labelPosition,\n  selectedFilters,\n  greenToggle,\n  isDesktopVersion,\n}) => {\n  const [isDisabled, setIsDisabled] = useState(false);\n\n  const onChange = (e) => {\n    e.persist();\n    setSingleCheckboxFilter(e);\n    setTimeout(() => {\n      e.target.closest('form').dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));\n    }, 1);\n  };\n\n  if (!id) id = (Math.random() + 1).toString(36).substring(2);\n\n  const selected = (selectedFilters[name] || []).indexOf(value) > -1 || selectedFilters[name] === value;\n\n  const updateCheckboxDisabledState = () => {\n    const windowWidth = window.innerWidth;\n    const breakpoint = 1200;\n    const isMobileView = windowWidth < breakpoint;\n\n    setIsDisabled(isMobileView ? isDesktopVersion : !isDesktopVersion);\n  };\n\n  useEffect(() => {\n    const handleResize = () => {\n      updateCheckboxDisabledState();\n    };\n\n    handleResize();\n    window.addEventListener('resize', handleResize);\n\n    return () => window.removeEventListener('resize', handleResize);\n  }, [isDesktopVersion]);\n\n  return (\n    <div className=\"c-checkbox__slider\">\n      {labelPosition === 'left' && (\n        <label className=\"c-checkbox__slider--label\" htmlFor={id}>\n          {label}\n        </label>\n      )}\n      {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n      <label className=\"c-checkbox__slider--switch\">\n        <input\n          style={{ appearance: 'auto' }}\n          type=\"checkbox\"\n          id={id}\n          name={name}\n          value={value}\n          onChange={onChange}\n          checked={selected}\n          disabled={isDisabled}\n        />\n        <span className={`c-checkbox__slider--slide ${greenToggle && 'c-checkbox__slider--slide-green'}`} />\n      </label>\n      {labelPosition !== 'left' && (\n        <label className=\"c-checkbox__slider--label\" htmlFor={id}>\n          {label}\n        </label>\n      )}\n    </div>\n  );\n};\n\nToggleCheckbox.propTypes = {\n  id: PropTypes.string,\n  name: PropTypes.string.isRequired,\n  value: PropTypes.string.isRequired,\n  setSingleCheckboxFilter: PropTypes.func.isRequired,\n  selectedFilters: PropTypes.shape({}).isRequired,\n  label: PropTypes.string.isRequired,\n  labelPosition: PropTypes.oneOf(['left', 'right']).isRequired,\n  isDesktopVersion: PropTypes.bool,\n  greenToggle: PropTypes.bool,\n};\n\nToggleCheckbox.defaultProps = {\n  id: null,\n  greenToggle: false,\n  isDesktopVersion: true,\n};\n\nexport default ToggleCheckbox;\n","/* eslint-disable react/require-default-props */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport classnames from 'classnames';\n\nconst FilterOption = ({\n  name,\n  value,\n  count,\n  id = `${name}-${value}`,\n  label = value,\n  prelabel,\n  enabled = true,\n  type = 'checkbox',\n  excludeFromForm = false,\n  selected,\n  onSelect,\n  parentTitle,\n}) => {\n  const dispatch = useDispatch();\n\n  const handleSelect = (event) => {\n    onSelect(event);\n    dispatch({ type: 'SET_FILTERS_UPDATED', payload: true });\n  };\n\n  const safe_id = (idToProcess) => {\n    return idToProcess.toLowerCase().replace(/[^a-z0-9]/g, '-');\n  };\n\n  return (\n    <li className=\"drv-filter-option\">\n      <input\n        type={type}\n        name={excludeFromForm ? null : name}\n        id={safe_id(id)}\n        className={classnames('drv-checkbox', {\n          'drv-checkbox--radio': type === 'radio',\n        })}\n        data-action=\"ga-filters#push\"\n        data-ga-filters-parent-title={parentTitle.toLowerCase().replaceAll(' ', '_')}\n        data-ga-filters-event-action={selected ? 'selected_filter_option' : 'deselected_filter_option'}\n        data-ga-filters-filter-option={value}\n        value={value}\n        checked={selected}\n        disabled={!enabled}\n        onChange={(e) => handleSelect(e)}\n      />\n\n      <label\n        htmlFor={safe_id(id)}\n        className={classnames('drv-filter-option__label drv-ml-1', {\n          'drv-filter-option__label--disabled': !enabled,\n        })}\n      >\n        {prelabel && <span className=\"drv-filter-option__pre-label\">{prelabel}</span>} {label}{' '}\n        {(count || count === 0) && (\n          <span className=\"drv-filter-option__post-label drv-ml-2\">({count.toLocaleString('en-GB')})</span>\n        )}\n      </label>\n    </li>\n  );\n};\n\nFilterOption.propTypes = {\n  id: PropTypes.string,\n  label: PropTypes.string,\n  name: PropTypes.string,\n  value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n  count: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.oneOf([null])]),\n  prelabel: PropTypes.string,\n  enabled: PropTypes.bool,\n  type: PropTypes.oneOf(['checkbox', 'radio']),\n  excludeFromForm: PropTypes.bool,\n  selected: PropTypes.bool.isRequired,\n  onSelect: PropTypes.func.isRequired,\n  parentTitle: PropTypes.string.isRequired,\n};\n\nexport default FilterOption;\n"],"sourceRoot":""}