{"version":3,"sources":["webpack:///./src/js/components/react/Dropdown.js","webpack:///./src/js/components/react/Pagination.js","webpack:///./src/js/helpers/reactHooks/useParams.js","webpack:///./src/js/helpers/reactHooks/useFetch.js","webpack:///./src/js/components/react/SearchBar.js","webpack:///./src/js/components/react/Button.js","webpack:///./src/js/helpers/reactHooks/useExpandCollapse.js","webpack:///./src/js/components/react/filters/FilterItem.js","webpack:///./src/js/components/react/filters/FilterList.js","webpack:///./src/js/components/react/card-listing/ClientCard.js","webpack:///./src/js/components/react/card-listing/ResourceCard.js","webpack:///./src/js/components/react/CardListing.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","Pagination","currentPage","totalPages","onNavigate","resultsPerPage","pagesArr","push","CurrentPage","InnerPagination","PaginationEllipsis","href","viewBox","xlinkHref","useParams","updateQs","useMemo","qs","parse","location","search","ignoreQueryPrefix","query","page","sort","currentContent","filters","Object","keys","forEach","filter","dates","params","setParams","qsParams","qsValue","stringify","encode","encodeValuesOnly","arrayFormat","newUrl","protocol","host","pathname","history","pushState","buildQueryString","handlePopState","window","useFetch","endpoint","language","results","setResults","loading","setLoading","Axios","method","url","data","console","log","fetchData","SearchBar","searchLabel","onClear","onSearch","initialQuery","endpointSuggestions","setQuery","component","searchForm","suggestions","setSuggestions","suggestionsOpen","setSuggestionsOpen","selectedSuggestion","setSelectedSuggestion","suggestionsList","element","display","close","list","selected","querySelector","offsetHeight","scrollTop","offsetTop","classList","add","remove","handleSubmit","item","handleLoadSuggestions","q","aria-owns","autoComplete","onSubmit","name","which","UP","DOWN","RETURN","ESC","onFocus","onBlur","handleSelectedOption","Button","theme","clickAction","onDarkBg","small","iconLeft","iconRight","icons","download","join","useExpandCollapse","trigger","setAttribute","visibility","parentNode","onComplete","height","FilterItem","onFilterChange","breakpoint","matchMedia","keyword","matches","setDisplay","listRef","triggerRef","selectedCount","setSelectedCount","count","opt","listener","debounce","aria-labelledby","aria-hidden","data-list-from","checked","includes","selectedClone","splice","indexOf","array","FilterList","selectedFilters","onFiltersChange","onResetFilters","resetBtnLabel","filterHeading","filterListTrigger","filterLists","displayFilters","setDisplayFilters","ClientCard","cardData","cardType","headline","imageAlt","imageUrl","isExternal","subHeadline","title","date","CARD_TYPE","client","src","alt","ResourceCard","description","trackId","hitId","hitType","data-trackid","data-hitid","fetch","slice","split","resource","leader","event","CardListing","suggestionLabel","noResultsLabel","subTitle","hasFilters","hasSearchBar","hasSortBy","initialLoad","setInitialLoad","cardTypeName","setPage","setSort","setFilters","facets","featuredLinks","resultListing","resultsInfo","sortOptions","totalResults","resultsSummary","didYouMean","anchorRef","link","text","getCardComponent","Number","Math","ceil","scrollIntoView","handlePaginate","prototype","React","memo"],"mappings":"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","file":"6.378a18d71ec2eca1bf06.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 React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst Pagination = ({\r\n  currentPage,\r\n  totalPages,\r\n  onNavigate,\r\n  resultsPerPage\r\n}) => {\r\n  const pagesArr = [];\r\n\r\n  for (let i = 0; i < totalPages; i++) {\r\n    pagesArr.push(\r\n      <li key={i + 1}>\r\n        <button\r\n          type=\"button\"\r\n          className={i + 1 === currentPage ? 'pagination-btn current' : 'pagination-btn'}\r\n          onClick={() => {\r\n            onNavigate(i + 1);\r\n          }}\r\n        >\r\n          {i + 1}\r\n        </button>\r\n      </li>\r\n    );\r\n  }\r\n\r\n  const CurrentPage = () => {\r\n    return (\r\n      <>\r\n        <li>\r\n          <button\r\n            type=\"button\"\r\n            className='pagination-btn current'\r\n            onClick={() => {\r\n              onNavigate(currentPage);\r\n            }}\r\n          >\r\n            {currentPage}\r\n          </button>\r\n        </li>\r\n      </>\r\n    );\r\n  };\r\n\r\n  const InnerPagination = () => {\r\n    return (\r\n      <>\r\n        {currentPage === totalPages && (\r\n          <li>\r\n            <button\r\n              type=\"button\"\r\n              className='pagination-btn'\r\n              onClick={() => {\r\n                onNavigate(totalPages - 2);\r\n              }}\r\n            >\r\n              {totalPages - 2}\r\n            </button>\r\n          </li>\r\n        )}\r\n        {((currentPage === 3) || (currentPage >= 3 && currentPage > totalPages - 2)) && (\r\n          <li>\r\n            <button\r\n              type=\"button\"\r\n              className='pagination-btn'\r\n              onClick={() => {\r\n                onNavigate(currentPage - 1);\r\n              }}\r\n            >\r\n              {currentPage - 1}\r\n            </button>\r\n          </li>\r\n        )}\r\n        <CurrentPage />\r\n        {((currentPage >= totalPages - 2 && currentPage < totalPages - 1) || currentPage < 3) && (\r\n          <li>\r\n            <button\r\n              type=\"button\"\r\n              className='pagination-btn'\r\n              onClick={() => {\r\n                onNavigate(currentPage + 1);\r\n              }}\r\n            >\r\n              {currentPage + 1}\r\n            </button>\r\n          </li>\r\n        )}\r\n        {currentPage === 1 && (\r\n          <li>\r\n            <button\r\n              type=\"button\"\r\n              className='pagination-btn'\r\n              onClick={() => {\r\n                onNavigate(currentPage + 2);\r\n              }}\r\n            >\r\n              {currentPage + 2}\r\n            </button>\r\n          </li>\r\n        )}\r\n      </>\r\n    );\r\n  };\r\n\r\n  const PaginationEllipsis = () => {\r\n    return (\r\n      <>\r\n        {currentPage > 1 && (\r\n          <li className=\"first-page\">\r\n            <button\r\n              href={1}\r\n              type=\"button\"\r\n              className='pagination-btn'\r\n              onClick={() => {\r\n                onNavigate(1);\r\n              }}\r\n            >\r\n              {1}\r\n            </button>\r\n          </li>\r\n        )}\r\n        {currentPage > 3 && <li className=\"ellipsis\">...</li>}\r\n        <InnerPagination />\r\n        {currentPage <= totalPages - 3 && <li className=\"ellipsis\">...</li>}\r\n        {currentPage < totalPages && (\r\n          <li className=\"last-page\">\r\n            <button\r\n              type=\"button\"\r\n              className='pagination-btn'\r\n              onClick={() => {\r\n                onNavigate(totalPages);\r\n              }}\r\n            >\r\n              {totalPages}\r\n            </button>\r\n          </li>\r\n        )}\r\n      </>\r\n    );\r\n  };\r\n\r\n  return (\r\n    <div className=\"pagination\">\r\n      {resultsPerPage && (\r\n        <>\r\n          {pagesArr.length > 5 && (\r\n            <button\r\n              className=\"pagination-btn pagination--prev\"\r\n              role=\"button\"\r\n              type=\"button\"\r\n              aria-label=\"Previous page\"\r\n              onClick={() => {\r\n                onNavigate(currentPage - 1);\r\n              }}\r\n              disabled={currentPage === 1}\r\n            >\r\n              <span className=\"cta-decorator-v2 cta-decorator-v2--internal\">\r\n                <svg viewBox=\"0 0 18 18\">\r\n                  <use xlinkHref=\"#link-arrow-right-icon\"/>\r\n                </svg>\r\n              </span>\r\n            </button>\r\n          )}\r\n          {totalPages > 1 && (\r\n            <ul className=\"pagination-pages\">\r\n              {pagesArr.length <= 5 ? pagesArr : <PaginationEllipsis />}\r\n            </ul>\r\n          )}\r\n          {totalPages > 5 && (\r\n            <button\r\n              className=\"pagination-btn pagination--next\"\r\n              role=\"button\"\r\n              type=\"button\"\r\n              aria-label=\"Next page\"\r\n              onClick={() => {\r\n                onNavigate(currentPage + 1);\r\n              }}\r\n              disabled={currentPage === totalPages}\r\n            >\r\n              <span className=\"cta-decorator-v2 cta-decorator-v2--internal\">\r\n                <svg viewBox=\"0 0 18 18\">\r\n                  <use xlinkHref=\"#link-arrow-right-icon\"/>\r\n                </svg>\r\n              </span>\r\n            </button>\r\n          )}\r\n        </>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nPagination.propTypes = {\r\n  currentPage: PropTypes.number.isRequired,\r\n  totalPages: PropTypes.number.isRequired,\r\n  onNavigate: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Pagination;\r\n","import { useRef, useMemo, useState, useEffect } from 'react';\r\nimport qs from 'qs';\r\n\r\nconst useParams = () => {\r\n  const updateQs = useRef(false);\r\n  const { query, page, sort, currentContent, ...filters } = useMemo(() => {\r\n    const {\r\n      query,\r\n      page,\r\n      sort,\r\n      currentContent,\r\n      ...filters\r\n    } = qs.parse(location.search, { ignoreQueryPrefix: true });\r\n\r\n    Object.keys(filters).forEach(filter => {\r\n      if (typeof filters[filter] === 'string') {\r\n        filters[filter] = [filters[filter]];\r\n      }\r\n    });\r\n\r\n    filters.dates = ['Upcoming'];\r\n\r\n    return { query, page, sort, currentContent, ...filters };\r\n  }, []);\r\n\r\n  const [params, setParams] = useState({\r\n    query: query || '',\r\n    page: page || 1,\r\n    sort,\r\n    filters,\r\n    currentContent\r\n  });\r\n\r\n  useEffect(() => {\r\n    const buildQueryString = () => {\r\n      const qsParams = {};\r\n\r\n      if (params.query) {\r\n        qsParams.query = params.query;\r\n      }\r\n\r\n      if (params.page && params.page > 1) {\r\n        qsParams.page = params.page;\r\n      }\r\n\r\n      if (params.sort) {\r\n        qsParams.sort = params.sort;\r\n      }\r\n\r\n      if (params.filters) {\r\n        Object.keys(params.filters).forEach(key => {\r\n          qsParams[key] = params.filters[key];\r\n        });\r\n      }\r\n\r\n      if (params.currentContent) {\r\n        qsParams.currentContent = params.currentContent;\r\n      }\r\n\r\n      const qsValue = qs.stringify(qsParams, {\r\n        encode: false,\r\n        encodeValuesOnly: true,\r\n        arrayFormat: 'repeat'\r\n      });\r\n\r\n      const newUrl = `${location.protocol}//${location.host}${\r\n        location.pathname\r\n      }${qsValue ? `?${qsValue}` : ''}`;\r\n      history.pushState({}, '', newUrl);\r\n    };\r\n\r\n    if (updateQs.current) {\r\n      buildQueryString();\r\n    } else {\r\n      updateQs.current = true;\r\n    }\r\n  }, [params]);\r\n\r\n  useEffect(() => {\r\n    const handlePopState = () => {\r\n      const qsParams = qs.parse(location.search, { ignoreQueryPrefix: true });\r\n      updateQs.current = false;\r\n\r\n      setParams({\r\n        query: qsParams.query || '',\r\n        page: qsParams.page || 1,\r\n        sort: qsParams.sort,\r\n        filters: qsParams.filters,\r\n        currentContent: qsParams.currentContent\r\n      });\r\n    };\r\n\r\n    window.addEventListener('popstate', handlePopState);\r\n    return () => window.removeEventListener('popstate', handlePopState);\r\n  }, []);\r\n\r\n  const setQuery = query => {\r\n    setParams({ ...params, query, page: 1 });\r\n  };\r\n\r\n  const setPage = page => {\r\n    setParams({ ...params, page });\r\n  };\r\n\r\n  const setSort = sort => {\r\n    setParams({ ...params, sort, page: 1 });\r\n  };\r\n\r\n  const setFilters = filters => {\r\n    setParams({ ...params, filters });\r\n  };\r\n\r\n  const setCurrentContent = currentContent => {\r\n    setParams({ ...params, currentContent });\r\n  };\r\n\r\n  return [params, setQuery, setPage, setSort, setFilters, setCurrentContent];\r\n};\r\n\r\nexport default useParams;\r\n","import { useState, useEffect } from 'react';\r\nimport Axios from 'axios';\r\n\r\nconst useFetch = (\r\n  endpoint,\r\n  { query, page, sort, filters, currentContent, language }\r\n) => {\r\n  const [results, setResults] = useState({});\r\n  const [loading, setLoading] = useState(false);\r\n\r\n  useEffect(() => {\r\n    const fetchData = async () => {\r\n      const params = {\r\n        query\r\n      };\r\n\r\n      if (page) {\r\n        params.page = page;\r\n      }\r\n\r\n      if (sort) {\r\n        params.sort = sort;\r\n      }\r\n\r\n      if (filters) {\r\n        Object.keys(filters).forEach(key => {\r\n          params[key] = filters[key];\r\n        });\r\n      }\r\n\r\n      if (currentContent) {\r\n        params.currentContent = currentContent;\r\n      }\r\n\r\n      if (language) {\r\n        params.language = language;\r\n      }\r\n\r\n      try {\r\n        setLoading(true);\r\n        const { data } = await Axios({\r\n          method: 'POST',\r\n          url: endpoint,\r\n          data: params\r\n        });\r\n\r\n        setResults(data);\r\n      } catch (error) {\r\n        console.log(error);\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n    fetchData();\r\n  }, [endpoint, query, page, sort, filters, currentContent]);\r\n\r\n  return { results, loading };\r\n};\r\n\r\nexport default useFetch;\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport PropTypes from 'prop-types';\r\nimport { keyCode, open, close } from '../../helpers/index';\r\nimport Axios from 'axios';\r\n\r\nconst SearchBar = ({\r\n  searchLabel,\r\n  onClear,\r\n  onSearch,\r\n  language,\r\n  initialQuery,\r\n  endpointSuggestions\r\n}) => {\r\n  const [query, setQuery] = useState(initialQuery || '');\r\n  const component = useRef(null);\r\n  const searchForm = useRef(null);\r\n  const [suggestions, setSuggestions] = useState([]);\r\n  const [suggestionsOpen, setSuggestionsOpen] = useState(false);\r\n  const [selectedSuggestion, setSelectedSuggestion] = useState(null);\r\n  const suggestionsList = useRef(null);\r\n\r\n  useEffect(() => {\r\n    if (suggestionsList.current) {\r\n      if (suggestionsOpen) {\r\n        open({ element: suggestionsList.current });\r\n        suggestionsList.current.style.display = 'block';\r\n      } else {\r\n        close({ element: suggestionsList.current });\r\n        suggestionsList.current.style.display = 'none';\r\n      }\r\n    }\r\n  }, [suggestionsList, suggestionsOpen]);\r\n\r\n  useEffect(() => {\r\n    if (initialQuery) {\r\n      setQuery(initialQuery);\r\n    }\r\n  }, [initialQuery]);\r\n\r\n  useEffect(() => {\r\n    if (suggestionsList.current && selectedSuggestion !== null) {\r\n      const list = suggestionsList.current;\r\n      const selected = list.querySelector('[aria-selected=\"true\"');\r\n      const position = list.offsetHeight - list.scrollTop;\r\n\r\n      if (selected && selected.offsetTop > list.offsetHeight) {\r\n        list.scrollTop =\r\n          selected.offsetTop - list.offsetHeight + selected.offsetHeight;\r\n      } else if (list.scrollTop !== 0) {\r\n        list.scrollTop = 0;\r\n      }\r\n    }\r\n  }, [suggestionsList, selectedSuggestion]);\r\n\r\n  useEffect(() => {\r\n    const handleClickOutside = e => {\r\n      const container = component.current;\r\n\r\n      if (container) {\r\n        if (container !== e.target && !container.contains(e.target)) {\r\n          setSuggestionsOpen(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 (query.length > 0) {\r\n      searchForm.current.classList.add('is-filled');\r\n    } else {\r\n      searchForm.current.classList.remove('is-filled');\r\n    }\r\n  }, [query]);\r\n\r\n  const handleTextChange = e => {\r\n    e.preventDefault();\r\n    const value = e.target.value;\r\n    handleLoadSuggestions(value);\r\n    setQuery(value);\r\n  };\r\n\r\n  const handleSubmit = (e, item) => {\r\n    e.preventDefault();\r\n    onSearch(item || query);\r\n    setSuggestionsOpen(false);\r\n  };\r\n\r\n  const handleClear = () => {\r\n    setQuery('');\r\n    searchForm.current.classList.remove('is-focused');\r\n    searchForm.current.classList.remove('is-filled');\r\n    setSuggestions([]);\r\n    onClear();\r\n  };\r\n\r\n  const handleFocus = () => {\r\n    searchForm.current.classList.add('is-focused');\r\n  };\r\n\r\n  const handleBlur = () => {\r\n    searchForm.current.classList.remove('is-focused');\r\n  };\r\n\r\n  const handleLoadSuggestions = async value => {\r\n    if (value.length > 2) {\r\n      const { data } = await Axios({\r\n        url: endpointSuggestions,\r\n        params: { q: value, language }\r\n      });\r\n      setSuggestions(data.suggestions);\r\n\r\n      if (data.suggestions.length) {\r\n        setSuggestionsOpen(true);\r\n      } else {\r\n        setSuggestionsOpen(false);\r\n      }\r\n    } else {\r\n      setSuggestions(null);\r\n      setSuggestionsOpen(false);\r\n    }\r\n  };\r\n\r\n  const handleKeyDown = e => {\r\n    const key = e.which || e.keyCode;\r\n    let selected = null;\r\n\r\n    if (!suggestions) return;\r\n\r\n    switch (key) {\r\n      case keyCode.UP:\r\n        e.preventDefault();\r\n        if (selectedSuggestion !== null && selectedSuggestion > 0) {\r\n          selected = selectedSuggestion - 1;\r\n        } else {\r\n          selected = suggestions.length - 1;\r\n        }\r\n        setQuery(suggestions[selected]);\r\n        setSelectedSuggestion(selected);\r\n        break;\r\n\r\n      case keyCode.DOWN:\r\n        e.preventDefault();\r\n\r\n        if (\r\n          selectedSuggestion !== null &&\r\n          selectedSuggestion < suggestions.length - 1\r\n        ) {\r\n          selected = selectedSuggestion + 1;\r\n        } else {\r\n          selected = 0;\r\n        }\r\n\r\n        setQuery(suggestions[selected]);\r\n        setSelectedSuggestion(selected);\r\n        break;\r\n\r\n      case keyCode.RETURN:\r\n        setSuggestions([]);\r\n        setSuggestionsOpen(false);\r\n        break;\r\n\r\n      case keyCode.ESC:\r\n        setQuery('');\r\n        setSuggestionsOpen(false);\r\n        break;\r\n    }\r\n  };\r\n\r\n  const handleInputFocus = e => {\r\n    if (query.length > 2 && suggestions.length) {\r\n      setSuggestionsOpen(true);\r\n    }\r\n  };\r\n\r\n  const handleSelectedOption = (e, item) => {\r\n    e.preventDefault();\r\n\r\n    setQuery(item);\r\n    setSuggestions([]);\r\n    setSuggestionsOpen(false);\r\n    handleSubmit(e, item);\r\n  };\r\n\r\n  return (\r\n    <div\r\n      className=\"search\"\r\n      aria-owns=\"options-list\"\r\n      ref={component}\r\n    >\r\n      <form autoComplete=\"off\" className=\"search__form\" onSubmit={handleSubmit} ref={searchForm}>\r\n        <label className=\"search__label\">{searchLabel}</label>\r\n        <input\r\n          type=\"text\"\r\n          name=\"q\"\r\n          value={query}\r\n          onChange={handleTextChange}\r\n          onKeyDown={handleKeyDown}\r\n          onFocus={handleFocus}\r\n          onBlur={handleBlur}\r\n          className=\"search__input\"\r\n          aria-label=\"Search Box\"\r\n          autoComplete=\"off\"\r\n        />\r\n        {!!query && (\r\n          <button\r\n            type=\"button\"\r\n            className=\"search__clear\"\r\n            style={{ display: 'block' }}\r\n            onClick={handleClear}\r\n          >\r\n            <svg viewBox=\"0 0 60 60\">\r\n              <use xlinkHref=\"#close-icon-rebrand\" />\r\n            </svg>\r\n          </button>\r\n        )}\r\n      </form>\r\n      {suggestions && (\r\n        <ul\r\n          id=\"options-list\"\r\n          className=\"search-results__suggestions-list\"\r\n          ref={suggestionsList}\r\n        >\r\n          {suggestions.map((item, index) => (\r\n            <li\r\n              key={index}\r\n              className=\"search-results__suggestions-item\"\r\n              role=\"option\"\r\n              aria-selected={selectedSuggestion === index}\r\n              onClick={e => handleSelectedOption(e, item)}\r\n            >\r\n              {item}\r\n            </li>\r\n          ))}\r\n        </ul>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nSearchBar.propTypes = {\r\n  initialQuery: PropTypes.string,\r\n  searchLabel: PropTypes.string.isRequired,\r\n  onClear: PropTypes.func.isRequired,\r\n  onSearch: PropTypes.func.isRequired,\r\n  language: PropTypes.string.isRequired\r\n};\r\n\r\nexport default SearchBar;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst Button = ({\r\n  label,\r\n  theme,\r\n  clickAction,\r\n  onDarkBg,\r\n  small,\r\n  iconLeft,\r\n  iconRight\r\n}) => {\r\n  const icons = {\r\n    download: '#download-icon-rebrand',\r\n    close: '#close-icon-rebrand',\r\n    'down arrow': '#down-arrow-icon',\r\n    'up arrow': '#up-arrow-icon',\r\n    'show more': '#show-more-icon-rebrand'\r\n  };\r\n\r\n  return (\r\n    <button\r\n      className={[\r\n        'btn-v2',\r\n        `btn--${theme}`,\r\n        onDarkBg ? 'bg-dark' : '',\r\n        small ? 'btn--small' : ''\r\n      ].join(' ')}\r\n      onClick={clickAction}\r\n    >\r\n      <div className=\"btn-content\">\r\n        {iconLeft && (\r\n          <svg viewBox=\"0 0 60 60\">\r\n            <use xlinkHref={`${icons[iconLeft]}`} />\r\n          </svg>\r\n        )}\r\n        <span>{label}</span>\r\n        {iconRight && (\r\n          <svg viewBox=\"0 0 60 60\">\r\n            <use xlinkHref={`${icons[iconRight]}`}/>\r\n          </svg>\r\n        )}\r\n      </div>\r\n    </button>\r\n  );\r\n};\r\n\r\nButton.propTypes = {\r\n  label: PropTypes.string.isRequired,\r\n  theme: PropTypes.string.isRequired,\r\n  clickAction: PropTypes.func.isRequired,\r\n  onDarkBg: PropTypes.bool,\r\n  small: PropTypes.bool,\r\n  iconLeft: PropTypes.string,\r\n  iconRight: PropTypes.string\r\n};\r\n\r\nexport default Button;\r\n","import { useEffect } from 'react'\r\nimport { close, open } from '../index'\r\n\r\nconst useExpandCollapse = (display, trigger, container) => {\r\n  useEffect(() => {\r\n    if (display) {\r\n      trigger.current.setAttribute('aria-expanded', true);\r\n      container.current.style.visibility = 'visible';\r\n      trigger.current.parentNode.classList.add('accordion__item--expanded');\r\n      trigger.current.parentNode.classList.remove('accordion__item--collapsed');\r\n      open({\r\n        element: container.current,\r\n        onComplete: () => {\r\n          container.current.setAttribute('aria-hidden', false);\r\n          container.current.style.height = 'auto';\r\n        }\r\n      });\r\n\r\n    } else {\r\n      trigger.current.setAttribute('aria-expanded', false);\r\n      trigger.current.parentNode.classList.remove('accordion__item--expanded');\r\n      trigger.current.parentNode.classList.add('accordion__item--collapsed');\r\n      close({\r\n        element: container.current,\r\n        onComplete: () => {\r\n          container.current.setAttribute('aria-hidden', true);\r\n          container.current.style.visibility = 'hidden';\r\n        }\r\n      });\r\n    }\r\n  }, [display]);\r\n};\r\n\r\nexport default useExpandCollapse;\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport PropTypes from 'prop-types';\r\nimport { debounce } from '../../../helpers'\r\nimport useExpandCollapse from '../../../helpers/reactHooks/useExpandCollapse'\r\n\r\nconst FilterItem = ({\r\n  filter,\r\n  selected,\r\n  onFilterChange\r\n}) => {\r\n  const breakpoint = window.matchMedia('(max-width: 1280px)');\r\n  const { keyword, name } = filter;\r\n  const [display, setDisplay] = useState(!breakpoint.matches);\r\n  const listRef = useRef(null);\r\n  const triggerRef = useRef(null);\r\n  const [selectedCount, setSelectedCount] = useState(0);\r\n\r\n  useExpandCollapse(display, triggerRef, listRef);\r\n\r\n  const handleSelect = value => {\r\n    const selectedClone = [...selected];\r\n\r\n    if (selectedClone.includes(value)) {\r\n      selectedClone.splice(selectedClone.indexOf(value), 1);\r\n    } else {\r\n      selectedClone.push(value);\r\n    }\r\n\r\n    const filterItems = {\r\n      name: keyword,\r\n      options: selectedClone\r\n    };\r\n\r\n    onFilterChange(filterItems);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (filter) {\r\n      let count = 0;\r\n      filter.options.forEach(opt => {\r\n        if (opt.selected) {\r\n          count += 1;\r\n        }\r\n      })\r\n      setSelectedCount(count)\r\n    }\r\n  }, [filter]);\r\n\r\n  useEffect(() => {\r\n    const listener = () => {\r\n      if (breakpoint.matches) {\r\n        setDisplay(false);\r\n      } else {\r\n        setDisplay(true);\r\n      }\r\n    };\r\n\r\n    debounce(window.addEventListener('resize', listener), 500);\r\n    return () => window.removeEventListener('resize', listener);\r\n  }, []);\r\n\r\n  return (\r\n    <div className=\"accordion__item\">\r\n      <button\r\n        className=\"accordion__item-trigger\"\r\n        aria-expanded=\"false\"\r\n        aria-controls={`${name}List`}\r\n        ref={triggerRef}\r\n        onClick={() => setDisplay(!display)}\r\n      >\r\n        <div className=\"small-card-title\">\r\n          {name}\r\n          {selectedCount > 0 && (<span> ({selectedCount})</span>)}\r\n        </div>\r\n        <span className=\"accordion__item-icon cta-decorator-v2\">\r\n          <svg viewBox=\"0 0 64 64\">\r\n            <use xlinkHref={display ? '#minus-icon-rebrand' : '#plus-icon-rebrand'}/>\r\n          </svg>\r\n        </span>\r\n      </button>\r\n\r\n      <div\r\n        role=\"region\"\r\n        id={`${name}List`}\r\n        className=\"accordion__item-content\"\r\n        aria-labelledby={`${name}List`}\r\n        aria-hidden=\"true\"\r\n        data-list-from={keyword}\r\n        ref={listRef}\r\n      >\r\n        <div className=\"accordion__item-inner\">\r\n          {filter.options.map((option, i) => (\r\n            <div key={i} className=\"filter-item__option\">\r\n              <label>\r\n                <input\r\n                  type=\"checkbox\"\r\n                  name={option.name}\r\n                  id={option.name}\r\n                  checked={option.selected || selected.includes(option.value)}\r\n                  onChange={() => handleSelect(option.name)}\r\n                />\r\n                <span className=\"checkmark\"></span>\r\n                <span>{option.name}</span>\r\n                <span>{option.matches}</span>\r\n              </label>\r\n            </div>\r\n          ))}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nFilterItem.propTypes = {\r\n  filter: PropTypes.object,\r\n  selected: PropTypes.array,\r\n  onFilterChange: PropTypes.func\r\n};\r\n\r\nexport default FilterItem;\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport PropTypes from 'prop-types';\r\nimport { debounce } from '../../../helpers/index'\r\nimport Button from '../Button'\r\nimport FilterItem from './FilterItem'\r\nimport useExpandCollapse from '../../../helpers/reactHooks/useExpandCollapse'\r\n\r\nconst FilterList = ({\r\n  filters,\r\n  selectedFilters,\r\n  onFiltersChange,\r\n  onResetFilters,\r\n  resetBtnLabel,\r\n  loading,\r\n  filterHeading\r\n}) => {\r\n  const breakpoint = window.matchMedia('(min-width: 1280px)');\r\n  const filterListTrigger = useRef(null);\r\n  const filterLists = useRef(null);\r\n  const [displayFilters, setDisplayFilters] = useState(breakpoint.matches);\r\n\r\n  useExpandCollapse(displayFilters, filterListTrigger, filterLists);\r\n\r\n  useEffect(() => {\r\n    const listener = () => {\r\n      if (breakpoint.matches) {\r\n        setDisplayFilters(true);\r\n      } else {\r\n        setDisplayFilters(false);\r\n      }\r\n    };\r\n\r\n    debounce(window.addEventListener('resize', listener), 500);\r\n    return () => window.removeEventListener('resize', listener);\r\n  }, []);\r\n\r\n  const onCleanFilters = () => {\r\n    onResetFilters();\r\n  };\r\n\r\n  return (\r\n    <div className=\"filter-list\">\r\n      {loading && <div className=\"loading\"></div>}\r\n\r\n      {filterHeading && <h4 className=\"filter-list__heading\">{filterHeading}</h4> }\r\n\r\n      {Object.keys(selectedFilters).length ? (\r\n        <div className=\"filter-list__clear-button\">\r\n          <Button\r\n            theme=\"secondary\"\r\n            label={resetBtnLabel}\r\n            clickAction={onCleanFilters}\r\n            small\r\n          />\r\n        </div>\r\n      ) : (\r\n        ''\r\n      )}\r\n\r\n      {filters && (\r\n        <div className=\"accordion__item filter-list__main accordion__item--collapsed\">\r\n          <button\r\n            className=\"accordion__item-trigger filter-list__main-button\"\r\n            aria-expanded=\"false\"\r\n            aria-controls=\"filtersList\"\r\n            ref={filterListTrigger}\r\n            onClick={() => setDisplayFilters(!displayFilters)}\r\n          >\r\n            <div className=\"small-card-title\">{displayFilters ? 'Hide Filters' : 'Show Filters'}</div>\r\n            <span className=\"accordion__item-icon cta-decorator-v2\">\r\n              <svg viewBox=\"0 0 64 64\">\r\n                <use xlinkHref={displayFilters ? '#minus-icon-rebrand' : '#plus-icon-rebrand'}/>\r\n              </svg>\r\n            </span>\r\n          </button>\r\n\r\n          <div\r\n            role=\"region\"\r\n            id=\"filtersList\"\r\n            className=\"accordion__item-content\"\r\n            aria-labelledby=\"filtersList\"\r\n            aria-hidden=\"true\"\r\n            ref={filterLists}\r\n          >\r\n            <div className=\"accordion__item-inner\">\r\n              <div className=\"accordion filter-list__inner\">\r\n                <div className=\"accordion__items\">\r\n                  {filters.map((filter, index) => (\r\n                    <FilterItem\r\n                      key={index}\r\n                      filter={filter}\r\n                      selected={selectedFilters[filter.keyword] || []}\r\n                      onFilterChange={onFiltersChange}\r\n                    />\r\n                  ))}\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nFilterList.propTypes = {\r\n  filters: PropTypes.array,\r\n  selectedFilters: PropTypes.object,\r\n  onFiltersChange: PropTypes.func,\r\n  onResetFilters: PropTypes.func,\r\n  resetBtnLabel: PropTypes.string\r\n};\r\n\r\nexport default FilterList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport parse from 'html-react-parser'\r\nimport { CARD_TYPE } from '../CardListing';\r\n\r\nconst ClientCard = ({ cardData, cardType }) => {\r\n  const {\r\n    headline,\r\n    imageAlt,\r\n    imageUrl,\r\n    isExternal,\r\n    subHeadline,  // CARD_TYPE.client\r\n    title,        // CARD_TYPE.leader\r\n    location,     // CARD_TYPE.event\r\n    date,         // CARD_TYPE.event\r\n    url\r\n  } = cardData;\r\n\r\n  return (\r\n    <a href={url} target={isExternal ? '_blank' : '_self'} className=\"client-card\">\r\n      {imageUrl && (\r\n        <picture className={`client-card__image ${cardType !== CARD_TYPE.client ? 'client-card__image-cover' : ''}`}>\r\n          <img src={imageUrl} alt={imageAlt} loading=\"lazy\"/>\r\n        </picture>\r\n      )}\r\n      <div className=\"client-card__content\">\r\n        <div className=\"client-card__headline\">\r\n          <h4 className=\"client-card__name\">{parse(headline)}</h4>\r\n          <span className={`cta-decorator-v2 cta-decorator-v2--${isExternal ? 'external' : 'internal'} bg-dark`}>\r\n            <svg viewBox={isExternal ? '0 0 19 18' : '0 0 18 18'}>\r\n              <use xlinkHref={isExternal ? '#link-arrow-icon' : '#link-arrow-right-icon'}/>\r\n            </svg>\r\n          </span>\r\n        </div>\r\n        <div className=\"client-card__description\">\r\n          <p>\r\n            {subHeadline && parse(subHeadline)}\r\n            {title && parse(title)}\r\n            {date && parse(date)}\r\n            {date && location && <br/>}\r\n            {location && parse(location)}\r\n          </p>\r\n        </div>\r\n      </div>\r\n    </a>\r\n  );\r\n};\r\n\r\nClientCard.propTypes = {\r\n  cardData: PropTypes.object.isRequired\r\n};\r\n\r\nexport default ClientCard;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport parse from 'html-react-parser';\r\n\r\nconst ResourceCard = ({ cardData }) => {\r\n  const {\r\n    headline,\r\n    description,\r\n    isExternal,\r\n    url,\r\n    trackId,\r\n    hitId,\r\n    hitType\r\n  } = cardData;\r\n\r\n  const trackClick = () => {\r\n    console.log('Clicked!');\r\n    fetch(`/SiteSearchApi/Track/?query=${window.location.href.slice(window.location.href.indexOf('=') + 1).split('&')[0]}&hitId=${hitType}/${hitId}&trackId=${trackId}`, { method: 'GET' });\r\n  }\r\n\r\n  return (\r\n    <a href={url} target={isExternal ? '_blank' : '_self'} data-trackid={trackId} data-hitid={`${hitType}/${hitId}`} onClick = {e => trackClick(e)} className=\"resource-card\">\r\n      <div className=\"resource-card__headline\">\r\n        <h4>{parse(headline)}</h4>\r\n        <span className={`cta-decorator-v2 cta-decorator-v2--${isExternal ? 'external' : 'internal'} bg-dark`}>\r\n          <svg viewBox={isExternal ? '0 0 19 18' : '0 0 18 18'}>\r\n            <use xlinkHref={isExternal ? '#link-arrow-icon' : '#link-arrow-right-icon'}/>\r\n          </svg>\r\n        </span>\r\n      </div>\r\n      {description && (\r\n        <div className=\"resource-card__description\">\r\n          <p>{parse(description)}</p>\r\n        </div>\r\n      )}\r\n    </a>\r\n  );\r\n};\r\n\r\nResourceCard.propTypes = {\r\n  cardData: PropTypes.object.isRequired\r\n};\r\n\r\nexport default ResourceCard;\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport PropTypes from 'prop-types';\r\nimport { useFetch, useParams } from '../../helpers/reactHooks'\r\nimport SearchBar from './SearchBar'\r\nimport Pagination from './Pagination'\r\nimport FilterList from './filters/FilterList'\r\nimport Dropdown from './Dropdown'\r\nimport ClientCard from './card-listing/ClientCard'\r\nimport ResourceCard from './card-listing/ResourceCard'\r\n\r\nexport const CARD_TYPE = {\r\n  client: 'client',\r\n  resource: 'resource',\r\n  leader: 'leader',\r\n  event: 'event'\r\n};\r\n\r\nconst CardListing = ({\r\n  endpoint,\r\n  language,\r\n  suggestionLabel,\r\n  searchLabel,\r\n  noResultsLabel,\r\n  subTitle,\r\n  resetBtnLabel,\r\n  currentContent,\r\n  endpointSuggestions,\r\n  cardType,\r\n  hasFilters,\r\n  hasSearchBar,\r\n  hasSortBy\r\n}) => {\r\n  const [initialLoad, setInitialLoad] = useState(true);\r\n\r\n  const cardTypeName = CARD_TYPE[cardType] || CARD_TYPE.resource;\r\n\r\n  const [\r\n    { query, page, sort, filters },\r\n    setQuery,\r\n    setPage,\r\n    setSort,\r\n    setFilters\r\n  ] = useParams();\r\n\r\n  const { results, loading } = useFetch(endpoint, {\r\n    query,\r\n    page,\r\n    sort,\r\n    filters,\r\n    currentContent,\r\n    language\r\n  });\r\n\r\n  const {\r\n    facets,\r\n    featuredLinks,\r\n    resultListing,\r\n    resultsInfo,\r\n    sortOptions,\r\n    totalResults,\r\n    resultsPerPage,\r\n    resultsSummary,\r\n    didYouMean\r\n  } = results;\r\n\r\n  const anchorRef = useRef();\r\n\r\n  const handleReset = () => {\r\n    setFilters({});\r\n  };\r\n\r\n  const handlePaginate = page => {\r\n    setPage(page);\r\n    if (anchorRef?.current) {\r\n      anchorRef?.current.scrollIntoView();\r\n    }\r\n  };\r\n\r\n  const handleFilters = filter => {\r\n    const selectedFilters = { ...filters };\r\n    selectedFilters[filter.name] = filter.options;\r\n\r\n    setFilters(selectedFilters);\r\n  };\r\n\r\n  const handleQuery = query => {\r\n    setQuery(query);\r\n  };\r\n\r\n  const getCardComponent = (item, i) => {\r\n    switch (cardTypeName) {\r\n      case CARD_TYPE.resource:\r\n        return (<ResourceCard cardData={item} key={`card-${i}`}/>);\r\n      default:\r\n        return (<ClientCard cardData={item} cardType={cardTypeName} key={`card-${i}`}/>);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (Object.keys(results).length) {\r\n      setInitialLoad(false);\r\n    }\r\n  }, [results])\r\n\r\n  return (\r\n    <div className=\"card-listing container\">\r\n      {!initialLoad && <>\r\n        {hasSearchBar === 'true' && (\r\n          <div className=\"card-listing__searchbar\">\r\n            {!!resultsSummary && (\r\n              <div className=\"card-listing__searchbar--summary\">\r\n                <span>{resultsSummary} </span>\r\n                {!!didYouMean && didYouMean.length > 0 && (\r\n                  <span>\r\n                    {suggestionLabel}\r\n                    {didYouMean.map((keyword, index) => (\r\n                      <button\r\n                        onClick={() => { setQuery(keyword) }}\r\n                        key={`suggestion-link-${index}`}\r\n                      >\r\n                        {keyword}\r\n                      </button>\r\n                    ))}\r\n                  </span>\r\n                )}\r\n              </div>\r\n            )}\r\n            <SearchBar\r\n              onClear={() => setQuery('')}\r\n              onSearch={handleQuery}\r\n              searchLabel={searchLabel}\r\n              language={language}\r\n              initialQuery={query && query}\r\n              endpointSuggestions={endpointSuggestions}\r\n            />\r\n          </div>\r\n        )}\r\n\r\n        <div className=\"card-listing__container\">\r\n          <div className=\"card-listing__top\">\r\n            {featuredLinks && (\r\n              <div className=\"card-listing__featured-links\">\r\n                {featuredLinks.map((link, i) => (\r\n                  <a href={link.url} className=\"arrow-link\" target={link.isExternal ? '_blank' : '_self'} key={`featured-link-${i}`}>\r\n                    <span>{link.text}</span>\r\n                    <svg viewBox={link.isExternal ? '0 0 19 18' : '0 0 18 18'}>\r\n                      <use xlinkHref={link.isExternal ? '#link-arrow-icon' : '#link-arrow-right-icon'}/>\r\n                    </svg>\r\n                  </a>\r\n                ))}\r\n              </div>\r\n            )}\r\n\r\n            {hasFilters === 'true' && (\r\n              <div className=\"card-listing__filters\">\r\n                {Object.keys(results).length ? (\r\n                  <FilterList\r\n                    filters={facets}\r\n                    selectedFilters={filters}\r\n                    onFiltersChange={handleFilters}\r\n                    onResetFilters={handleReset}\r\n                    resetBtnLabel={resetBtnLabel}\r\n                    filterHeading={subTitle}\r\n                  />\r\n                ) : (\r\n                  ''\r\n                )}\r\n              </div>\r\n            )}\r\n          </div>\r\n\r\n          {!!resultListing && resultListing.length ? (\r\n            <div className=\"card-listing__list\">\r\n              <div className=\"card-listing__sort-container\">\r\n                <div className=\"card-listing__list--title\">{resultsInfo}</div>\r\n\r\n                {hasSortBy === 'true' && (\r\n                  <div className=\"card-listing__sort\">\r\n                    {sortOptions && (\r\n                      <Dropdown\r\n                        label=\"Sort by\"\r\n                        options={sortOptions}\r\n                        selectedOption={\r\n                          sortOptions.find(opt => opt.selected)\r\n                            ? sortOptions.find(opt => opt.selected)\r\n                            : sortOptions[0]\r\n                        }\r\n                        onChange={sort => setSort(sort.value)}\r\n                      />\r\n                    )}\r\n                  </div>\r\n                )}\r\n              </div>\r\n\r\n              <div ref={anchorRef} className=\"card-listing__list--container\">\r\n                {loading && <div className=\"loading\"></div>}\r\n                {!loading && resultListing.map((item, i) => getCardComponent(item, i))}\r\n              </div>\r\n\r\n              {!loading && !!page && (\r\n                <div className=\"card-listing__list--pagination\">\r\n                  <Pagination\r\n                    currentPage={Number(page)}\r\n                    totalPages={Math.ceil(totalResults / resultsPerPage)}\r\n                    onNavigate={page => handlePaginate(page)}\r\n                    resultsPerPage={resultsPerPage}\r\n                  />\r\n                </div>\r\n              )}\r\n            </div>\r\n          ) : (\r\n            <div className=\"card-listing__list card-listing__list--no-results\">\r\n              {noResultsLabel}\r\n            </div>\r\n          )}\r\n        </div>\r\n      </>}\r\n    </div>\r\n  );\r\n};\r\n\r\nCardListing.prototype = {\r\n  endpoint: PropTypes.string.isRequired,\r\n  language: PropTypes.string.isRequired,\r\n  title: PropTypes.string.isRequired,\r\n  subTitle: PropTypes.string.isRequired,\r\n  noResultsLabel: PropTypes.string.isRequired\r\n};\r\n\r\nexport default React.memo(CardListing);\r\n"],"sourceRoot":""}