{"version":3,"sources":["webpack:///./src/js/components/react/Dropdown.js","webpack:///./node_modules/react-intersection-observer-hook/dist/react-intersection-observer-hook.esm.js","webpack:///./node_modules/react-infinite-scroll-hook/dist/react-infinite-scroll-hook.esm.js","webpack:///./src/js/modules/locationsListing/components/LocationFacetList.js","webpack:///./src/js/modules/locationsListing/components/LocationCard.js","webpack:///./src/js/modules/locationsListing/hooks/useFetch.js","webpack:///./src/js/modules/locationsListing/index.js"],"names":["Dropdown","label","placeholder","selectedOption","options","onChange","disabled","compareAttr","style","useState","open","toggle","cursor","setCursor","guid","useRef","uuidv4","listboxGuid","nativeEl","dropdownEl","triggerEl","listingEl","useEffect","handleClickOutside","e","container","current","target","contains","document","addEventListener","removeEventListener","focus","index","findIndex","option","getDisplayLabel","className","htmlFor","isDevice","ref","id","find","value","Value","tabIndex","aria-label","map","i","key","role","type","aria-haspopup","aria-expanded","aria-controls","onClick","aria-activedescendant","onKeyDown","keyCode","preventDefault","length","aria-selected","handleOptionClick","propTypes","PropTypes","string","shape","oneOfType","number","bool","arrayOf","object","func","isRequired","DEFAULT_THRESHOLD","_extends","Object","assign","arguments","source","prototype","hasOwnProperty","call","apply","this","useTrackVisibility","args","_result$entry","_useIntersectionObser","_args$rootMargin","_args$threshold","rootMargin","threshold","nodeRef","rootRef","observerRef","_useState","entry","setEntry","unobserve","currentObserver","disconnect","observe","node","root","observer","IntersectionObserver","_ref","newEntry","initializeObserver","rootNode","useIntersectionObserver","result","isVisible","Boolean","isIntersecting","wasEverVisible","setWasEverVisible","loading","hasNextPage","onLoadMore","_ref$delayInMs","delayInMs","_useTrackVisibility","_useTrackVisibility$","shouldLoadMore","timer","setTimeout","clearTimeout","LocationFacetList","initialFacets","selectedFacets","onFiltersChange","onResetFilters","countryLabel","stateLabel","resetBtnLabel","dropdownDefaultLabel","getSelectedOption","facet","keyword","name","keys","class","array","LocationCard","phoneHref","imageUrlWebp","location","imageUrl","imageAlt","locationName","address","phone","fax","url","indexOf","CommonInnerMarkup","srcSet","src","alt","width","height","parse","href","viewBox","useFetch","endpoint","language","page","filters","results","setResults","totalPages","setTotalPages","facets","setFacets","setLoading","params","forEach","Axios","method","data","resultListing","totalResults","resultsPerPage","updatedFacets","Math","ceil","concat","console","log","fetchData","LocationsListing","noResultsLabel","setPage","setSelectedFacets","sentryRef","useInfiniteScroll","loc","React","memo"],"mappings":"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","file":"36.b15416b7c120a05130b7.js","sourcesContent":["import React, { useState, useEffect, useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { isDevice } from '../../helpers';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nconst Dropdown = ({\r\n  label,\r\n  placeholder,\r\n  selectedOption,\r\n  options = [],\r\n  onChange,\r\n  disabled = false,\r\n  compareAttr = 'value',\r\n  style\r\n}) => {\r\n  const [open, toggle] = useState(false);\r\n  const [cursor, setCursor] = useState(null);\r\n  const guid = useRef(uuidv4());\r\n  const listboxGuid = useRef(uuidv4());\r\n  const nativeEl = useRef(null);\r\n  const dropdownEl = useRef(null);\r\n  const triggerEl = useRef(null);\r\n  const listingEl = useRef(null);\r\n\r\n  useEffect(() => {\r\n    const handleClickOutside = e => {\r\n      const container = dropdownEl.current;\r\n\r\n      if (container) {\r\n        if (container !== e.target && !container.contains(e.target)) {\r\n          toggle(false);\r\n        }\r\n      }\r\n    };\r\n\r\n    document.addEventListener('click', handleClickOutside);\r\n\r\n    return () => {\r\n      document.removeEventListener('click', handleClickOutside);\r\n    };\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (open) {\r\n      listingEl.current.focus();\r\n    }\r\n  }, [open]);\r\n\r\n  useEffect(() => {\r\n    if (selectedOption) {\r\n      const index = options.findIndex(\r\n        option => option[compareAttr] === selectedOption[compareAttr]\r\n      );\r\n      setCursor(index);\r\n    } else {\r\n      setCursor(null);\r\n    }\r\n  }, [compareAttr, options, selectedOption]);\r\n\r\n  const handleTriggerClick = e => {\r\n    if (isDevice()) {\r\n      return;\r\n    }\r\n\r\n    toggle(!open);\r\n  };\r\n\r\n  const handleOptionClick = option => {\r\n    onChange(option);\r\n    toggle(false);\r\n  };\r\n\r\n  const handleOptionChange = e => {\r\n    const option = options.find(option => option.value === e.target.value);\r\n    onChange(option);\r\n    toggle(false);\r\n  };\r\n\r\n  const handleKeyDown = e => {\r\n    /* eslint-disable indent */\r\n    switch (e.keyCode) {\r\n      case 38: // up\r\n        e.preventDefault();\r\n        if (cursor) {\r\n          setCursor(cursor - 1);\r\n        } else {\r\n          setCursor(options.length - 1);\r\n        }\r\n        break;\r\n      case 40: // down\r\n        e.preventDefault();\r\n        if (cursor !== null && cursor < options.length - 1) {\r\n          setCursor(cursor + 1);\r\n        } else {\r\n          setCursor(0);\r\n        }\r\n        break;\r\n      case 27: // esc\r\n        e.preventDefault();\r\n        toggle(false);\r\n        triggerEl.current.focus();\r\n        break;\r\n      case 13: // enter\r\n        e.preventDefault();\r\n        if (cursor !== null) {\r\n          onChange(options[cursor]);\r\n        }\r\n        toggle(false);\r\n        triggerEl.current.focus();\r\n        break;\r\n      case 9: // tab\r\n        toggle(false);\r\n        break;\r\n    }\r\n    /* eslint-enable indent */\r\n  };\r\n\r\n  const getDisplayLabel = () => {\r\n    if (selectedOption) {\r\n      return `${selectedOption.label}`;\r\n    }\r\n    return placeholder || null;\r\n  };\r\n\r\n  return (\r\n    <div className={`form-group form-group--dropdown${disabled ? ' is-disabled' : ''}`}>\r\n      <label htmlFor={guid.current} className=\"form-label\">\r\n        {label}\r\n      </label>\r\n      <div\r\n        className={`dropdown${isDevice() ? ' dropdown--native' : ''}${\r\n          style ? ` dropdown--${style}` : ''\r\n        }`}\r\n        ref={dropdownEl}\r\n      >\r\n        <select\r\n          id={guid.current}\r\n          onChange={handleOptionChange}\r\n          value={selectedOption ? selectedOption.Value : ''}\r\n          tabIndex=\"-1\"\r\n          aria-label={`${label || ''} ${getDisplayLabel()}`}\r\n          ref={nativeEl}\r\n        >\r\n          {options.map((option, i) => {\r\n            return (\r\n              <option key={i} value={option.value}>\r\n                {typeof option === 'object' ? option.label : option}\r\n              </option>\r\n            );\r\n          })}\r\n        </select>\r\n        <button\r\n          className={`dropdown__trigger${selectedOption ? ' is-filled' : ''}`}\r\n          role=\"combobox\"\r\n          type=\"button\"\r\n          aria-label={`${label || ''} ${getDisplayLabel()}`}\r\n          aria-haspopup=\"listbox\"\r\n          aria-expanded={open}\r\n          aria-controls={listboxGuid.current}\r\n          onClick={handleTriggerClick}\r\n          disabled={disabled}\r\n          ref={triggerEl}\r\n        >\r\n          {getDisplayLabel()}\r\n        </button>\r\n        <ul\r\n          role=\"listbox\"\r\n          id={listboxGuid.current}\r\n          aria-activedescendant={\r\n            cursor !== null ? `${guid.current}-${cursor}` : null\r\n          }\r\n          tabIndex=\"-1\"\r\n          className=\"dropdown__list\"\r\n          ref={listingEl}\r\n          onKeyDown={handleKeyDown}\r\n        >\r\n          {options.map((option, i) => (\r\n            <li\r\n              role=\"option\"\r\n              key={i}\r\n              id={`${guid.current}-${i}`}\r\n              className=\"dropdown__item\"\r\n              aria-selected={cursor === i}\r\n              onClick={() => handleOptionClick(option)}\r\n            >\r\n              {typeof option === 'object' ? option.label : option}\r\n            </li>\r\n          ))}\r\n        </ul>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nDropdown.propTypes = {\r\n  label: PropTypes.string,\r\n  placeholder: PropTypes.string,\r\n  selectedOption: PropTypes.shape({\r\n    value: PropTypes.PropTypes.oneOfType([\r\n      PropTypes.string,\r\n      PropTypes.number,\r\n      PropTypes.bool\r\n    ]),\r\n    label: PropTypes.string\r\n  }),\r\n  options: PropTypes.arrayOf(PropTypes.object),\r\n  onChange: PropTypes.func.isRequired,\r\n  disabled: PropTypes.bool,\r\n  compareAttr: PropTypes.string,\r\n  style: PropTypes.string\r\n};\r\n\r\nexport default Dropdown;\r\n","import { useRef, useState, useCallback, useEffect } from 'react';\n\nvar DEFAULT_ROOT_MARGIN = '0px';\nvar DEFAULT_THRESHOLD = [0]; // For more info:\n// https://developers.google.com/web/updates/2016/04/intersectionobserver\n// https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n\nfunction useIntersectionObserver(args) {\n  var _args$rootMargin, _args$threshold;\n\n  var rootMargin = (_args$rootMargin = args == null ? void 0 : args.rootMargin) != null ? _args$rootMargin : DEFAULT_ROOT_MARGIN;\n  var threshold = (_args$threshold = args == null ? void 0 : args.threshold) != null ? _args$threshold : DEFAULT_THRESHOLD;\n  var nodeRef = useRef(null);\n  var rootRef = useRef(null);\n  var observerRef = useRef(null);\n\n  var _useState = useState(),\n      entry = _useState[0],\n      setEntry = _useState[1];\n\n  var unobserve = useCallback(function () {\n    // Disconnect the current observer (if there is one)\n    var currentObserver = observerRef.current;\n    currentObserver == null ? void 0 : currentObserver.disconnect();\n    observerRef.current = null;\n  }, []);\n  useEffect(function () {\n    return function () {\n      // We disconnect the observer on unmount to prevent memory leaks etc.\n      unobserve();\n    };\n  }, [unobserve]);\n  var observe = useCallback(function () {\n    var node = nodeRef.current;\n\n    if (node) {\n      var root = rootRef.current;\n      var options = {\n        root: root,\n        rootMargin: rootMargin,\n        threshold: threshold\n      }; // Create a observer for current \"node\" with given options.\n\n      var observer = new IntersectionObserver(function (_ref) {\n        var newEntry = _ref[0];\n        setEntry(newEntry);\n      }, options);\n      observer.observe(node);\n      observerRef.current = observer;\n    }\n  }, [rootMargin, threshold]);\n  var initializeObserver = useCallback(function () {\n    unobserve();\n    observe();\n  }, [observe, unobserve]);\n  var refCallback = useCallback(function (node) {\n    nodeRef.current = node;\n    initializeObserver();\n  }, [initializeObserver]);\n  var rootRefCallback = useCallback(function (rootNode) {\n    rootRef.current = rootNode;\n    initializeObserver();\n  }, [initializeObserver]);\n  return [refCallback, {\n    entry: entry,\n    rootRef: rootRefCallback\n  }];\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction useTrackVisibility(args) {\n  var _result$entry;\n\n  var _useIntersectionObser = useIntersectionObserver(args),\n      ref = _useIntersectionObser[0],\n      result = _useIntersectionObser[1];\n\n  var isVisible = Boolean((_result$entry = result.entry) == null ? void 0 : _result$entry.isIntersecting);\n\n  var _useState = useState(isVisible),\n      wasEverVisible = _useState[0],\n      setWasEverVisible = _useState[1];\n\n  useEffect(function () {\n    if (isVisible) {\n      setWasEverVisible(isVisible);\n    }\n  }, [isVisible]);\n  return [ref, _extends({}, result, {\n    isVisible: isVisible,\n    wasEverVisible: wasEverVisible\n  })];\n}\n\nexport { useIntersectionObserver, useTrackVisibility };\n//# sourceMappingURL=react-intersection-observer-hook.esm.js.map\n","import { useEffect } from 'react';\nimport { useTrackVisibility } from 'react-intersection-observer-hook';\n\nvar DEFAULT_DELAY_IN_MS = 100;\n\nfunction useInfiniteScroll(_ref) {\n  var loading = _ref.loading,\n      hasNextPage = _ref.hasNextPage,\n      onLoadMore = _ref.onLoadMore,\n      rootMargin = _ref.rootMargin,\n      disabled = _ref.disabled,\n      _ref$delayInMs = _ref.delayInMs,\n      delayInMs = _ref$delayInMs === void 0 ? DEFAULT_DELAY_IN_MS : _ref$delayInMs;\n\n  var _useTrackVisibility = useTrackVisibility({\n    rootMargin: rootMargin\n  }),\n      ref = _useTrackVisibility[0],\n      _useTrackVisibility$ = _useTrackVisibility[1],\n      rootRef = _useTrackVisibility$.rootRef,\n      isVisible = _useTrackVisibility$.isVisible;\n\n  var shouldLoadMore = !disabled && !loading && isVisible && hasNextPage; // eslint-disable-next-line consistent-return\n\n  useEffect(function () {\n    if (shouldLoadMore) {\n      // When we trigger 'onLoadMore' and new items are added to the list,\n      // right before they become rendered on the screen, 'loading' becomes false\n      // and 'isVisible' can be true for a brief time, based on the scroll position.\n      // So, it triggers 'onLoadMore' just after the first one is finished.\n      // We use a small delay here to prevent this kind of situations.\n      // It can be configured by hook args.\n      var timer = setTimeout(function () {\n        onLoadMore();\n      }, delayInMs);\n      return function () {\n        clearTimeout(timer);\n      };\n    }\n  }, [onLoadMore, shouldLoadMore, delayInMs]);\n  return [ref, {\n    rootRef: rootRef\n  }];\n}\n\nexport default useInfiniteScroll;\n//# sourceMappingURL=react-infinite-scroll-hook.esm.js.map\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Dropdown from '../../../../js/components/react/Dropdown';\r\n\r\nconst LocationFacetList = ({\r\n  initialFacets,\r\n  selectedFacets,\r\n  onFiltersChange,\r\n  onResetFilters,\r\n  countryLabel,\r\n  stateLabel,\r\n  resetBtnLabel,\r\n  dropdownDefaultLabel\r\n}) => {\r\n  const getSelectedOption = facet => {\r\n    if (selectedFacets[facet.keyword]) {\r\n      const option = facet.options.find(\r\n        option => option.value === selectedFacets[facet.keyword]\r\n      );\r\n\r\n      if (option) {\r\n        return {\r\n          ...option,\r\n          label: option.name\r\n        };\r\n      }\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div className=\"location-facet-list\">\r\n      {initialFacets.map(facet => (\r\n        <Dropdown\r\n          key={facet.keyword}\r\n          options={facet.options.map(option => ({\r\n            value: option.value,\r\n            label: option.name\r\n          }))}\r\n          placeholder={dropdownDefaultLabel}\r\n          selectedOption={getSelectedOption(facet)}\r\n          label={facet.keyword === 'countries' ? countryLabel : stateLabel}\r\n          onChange={e => {\r\n            onFiltersChange(facet.keyword, e.value);\r\n          }}\r\n          disabled={!facet.options.length}\r\n        />\r\n      ))}\r\n\r\n      {!!Object.keys(selectedFacets).length && (\r\n        <div className=\"location-facet-list__reset\">\r\n          <button class=\"btn-v2 btn--primary\" onClick={onResetFilters}>\r\n            <div className=\"btn-content\">{resetBtnLabel}</div>\r\n          </button>\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nLocationFacetList.propTypes = {\r\n  initialFacets: PropTypes.array,\r\n  resetBtnLabel: PropTypes.string\r\n};\r\n\r\nexport default LocationFacetList;\r\n","import React, { Fragment } from 'react';\r\nimport parse from 'html-react-parser';\r\n\r\nconst LocationCard = ({ location }) => {\r\n  const {\r\n    imageUrl,\r\n    imageAlt,\r\n    locationName,\r\n    address,\r\n    phone,\r\n    fax,\r\n    url\r\n  } = location;\r\n\r\n  let phoneHref, faxHref, imageUrlWebp;\r\n\r\n  if (phone) {\r\n    phoneHref = `tel:${phone}`;\r\n  }\r\n  if (fax) {\r\n    faxHref = `tel:${fax}`;\r\n  }\r\n\r\n  if (imageUrl) {\r\n    if (imageUrl.indexOf('?') !== -1) {\r\n      imageUrlWebp = `${imageUrl}&format=webp`;\r\n    } else {\r\n      imageUrlWebp = `${imageUrl}?format=webp`;\r\n    }\r\n  }\r\n  const CommonInnerMarkup = (\r\n    <Fragment>\r\n      {imageUrl && (\r\n        <picture className=\"location-card__image\">\r\n          <source srcSet={imageUrlWebp} type=\"image/webp\" />\r\n          <img src={imageUrl} alt={imageAlt} width=\"504\" height=\"238\" />\r\n        </picture>\r\n      )}\r\n      <div className=\"location-card__info\">\r\n        <h3 className=\"location-card__name\">{parse(locationName)}</h3>\r\n        {address && (\r\n          <p className=\"location-card__address\">{parse(address)}</p>\r\n        )}\r\n        {phone && (\r\n          <p className=\"location-card__phone\">\r\n            <span>Phone: </span>\r\n            <a href={phoneHref} className=\"arrow-link location-card__link\">\r\n              <span>{phone}</span>\r\n              <span class=\"arrow-link__icon\">\r\n                <svg viewBox=\"0 0 19 18\">\r\n                  <use href=\"#link-arrow-icon\" />\r\n                </svg>\r\n              </span>\r\n            </a>\r\n          </p>\r\n        )}\r\n        {\r\n        /*\r\n        Hide fax number from location listing cards - #200710\r\n        {fax && (\r\n          <p className=\"location-card__fax\">\r\n            <span>Fax: </span>\r\n            <a href={faxHref} className=\"arrow-link location-card__link\">\r\n              <span>{fax}</span>\r\n              <span className=\"arrow-link__icon\">\r\n                <svg viewBox=\"0 0 19 18\">\r\n                  <use href=\"#link-arrow-icon\"/>\r\n                </svg>\r\n              </span>\r\n            </a>\r\n          </p>\r\n        )}\r\n        */\r\n        }\r\n      </div>\r\n    </Fragment>\r\n  );\r\n\r\n  return (\r\n    <div className=\"location-card\">\r\n      {CommonInnerMarkup}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default LocationCard;\r\n","import { useState, useEffect } from 'react';\r\nimport Axios from 'axios';\r\n\r\nconst useFetch = (endpoint, language, page, filters) => {\r\n  const [results, setResults] = useState([]);\r\n  const [totalPages, setTotalPages] = useState(0);\r\n  const [facets, setFacets] = useState([]);\r\n  const [loading, setLoading] = useState(false);\r\n\r\n  useEffect(() => {\r\n    const fetchData = async () => {\r\n      setLoading(true);\r\n\r\n      const params = {};\r\n      if (language) {\r\n        params.language = language;\r\n      }\r\n\r\n      if (page) {\r\n        params.page = page;\r\n      }\r\n\r\n      if (filters) {\r\n        Object.keys(filters).forEach(key => {\r\n          if (filters[key] === '') {\r\n            params[key] = [];\r\n          } else {\r\n            params[key] = filters[key];\r\n          }\r\n        });\r\n      }\r\n\r\n      try {\r\n        const {\r\n          data: {\r\n            resultListing,\r\n            totalResults,\r\n            resultsPerPage,\r\n            facets: updatedFacets\r\n          }\r\n        } = await Axios({\r\n          method: 'POST',\r\n          url: endpoint,\r\n          data: params\r\n        });\r\n\r\n        setTotalPages(Math.ceil(totalResults / resultsPerPage));\r\n        setResults(page > 1 ? results.concat(resultListing) : resultListing);\r\n        setFacets(updatedFacets);\r\n      } catch (error) {\r\n        console.log(error);\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n\r\n    fetchData();\r\n  }, [endpoint, page, filters, language]);\r\n\r\n  return { totalPages, results, facets, loading };\r\n};\r\n\r\nexport default useFetch;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport useInfiniteScroll from 'react-infinite-scroll-hook';\r\n\r\nimport LocationFacetList from './components/LocationFacetList';\r\nimport LocationCard from './components/LocationCard';\r\n\r\nimport { useFetch } from './hooks';\r\n\r\nconst LocationsListing = ({\r\n  endpoint,\r\n  language,\r\n  noResultsLabel,\r\n  countryLabel,\r\n  stateLabel,\r\n  resetBtnLabel,\r\n  dropdownDefaultLabel\r\n}) => {\r\n  const [page, setPage] = useState(1);\r\n  const [selectedFacets, setSelectedFacets] = useState({});\r\n  const { totalPages, results, facets, loading } = useFetch(\r\n    endpoint,\r\n    language,\r\n    page,\r\n    selectedFacets\r\n  );\r\n\r\n  const [sentryRef] = useInfiniteScroll({\r\n    loading,\r\n    hasNextPage: page < totalPages,\r\n    onLoadMore: () => setPage(page + 1)\r\n  });\r\n\r\n  const handleReset = () => {\r\n    setSelectedFacets({});\r\n    setPage(1);\r\n  };\r\n\r\n  const handleFilters = (keyword, value) => {\r\n    const updatedFacets = {\r\n      ...selectedFacets,\r\n      [keyword]: value\r\n    };\r\n\r\n    if (keyword === 'countries') {\r\n      delete updatedFacets['states'];\r\n    }\r\n\r\n    setSelectedFacets(updatedFacets);\r\n    setPage(1);\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <div className=\"locations-listing__filters\">\r\n        <div className=\"small-card-title\">Filters</div>\r\n        <LocationFacetList\r\n          initialFacets={facets}\r\n          selectedFacets={selectedFacets}\r\n          onFiltersChange={handleFilters}\r\n          onResetFilters={handleReset}\r\n          countryLabel={countryLabel}\r\n          stateLabel={stateLabel}\r\n          resetBtnLabel={resetBtnLabel}\r\n          dropdownDefaultLabel={dropdownDefaultLabel}\r\n        />\r\n      </div>\r\n      <div>\r\n        {!loading && !results?.length ? (\r\n          <p>{noResultsLabel}</p>\r\n        ) : (\r\n          <div className=\"locations-listing__results\">\r\n            {results?.map((loc, i) => (\r\n              <LocationCard key={i} location={loc} />\r\n            ))}\r\n          </div>\r\n        )}\r\n        {loading ||\r\n          (page < totalPages && (\r\n            <div className=\"loading\" ref={sentryRef}></div>\r\n          ))}\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nLocationsListing.propTypes = {\r\n  endpoint: PropTypes.string.isRequired,\r\n  language: PropTypes.string.isRequired,\r\n  noResultsLabel: PropTypes.string.isRequired,\r\n  countryLabel: PropTypes.string.isRequired,\r\n  stateLabel: PropTypes.string.isRequired,\r\n  resetBtnLabel: PropTypes.string.isRequired,\r\n  dropdownDefaultLabel: PropTypes.string.isRequired\r\n};\r\n\r\nexport default React.memo(LocationsListing);\r\n"],"sourceRoot":""}