{"version":3,"file":"static/js/617.2d379823.chunk.js","mappings":"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","sources":["pages/findcare/index.js","pages/findcare/map-config.js","platformui/Breadcrumb/index.js","platformui/FindCare/findcare-categories-lists/alphabetical-list.js","platformui/FindCare/findcare-categories-lists/index.js","platformui/FindCare/findcare-categories-lists/topic-list.js","platformui/FindCare/findcare-form/CaretypeSuggestion.js","platformui/FindCare/findcare-form/LocationSuggestion.js","platformui/FindCare/findcare-form/UnitSuggestion.js","platformui/FindCare/findcare-form/helpers.js","platformui/FindCare/findcare-form/index.js","platformui/FindCare/findcare-form/inputLatLng.js","platformui/FindCare/findcare-header/index.js","platformui/FindCare/findcare-map/helpers.js","platformui/FindCare/findcare-map/index.js","platformui/FindCare/findcare-map/info-window.js","platformui/FindCare/findcare-map/map-controls.js","platformui/FindCare/findcare-map/map2.js","platformui/FindCare/findcare-search-list-item/index.js","platformui/FindCare/findcare-sort/index.js","platformui/FindCare/findcare-sort/sort-link.js","platformui/InfoBox/index.js","platformui/Matomo/matomo-track-dimensions.js","platformui/Modal/fullscreen-modal.js","platformui/Modal/index.js","platformui/Pages/findcare/constants.js","platformui/Pages/findcare/index.js","platformui/Pages/findcare/redirect.js","platformui/Pages/findcare/search-list.js","platformui/SuggestionsField/button.js","platformui/SuggestionsField/error.js","platformui/SuggestionsField/index.js","platformui/SuggestionsField/suggestions.js","platformui/SuggestionsField/useOpenClose.js","../node_modules/tiny-warning/dist/tiny-warning.esm.js","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/uuid/dist/esm-browser/validate.js"],"sourcesContent":["import React, { useEffect, useState } from 'react';\r\n\r\nimport * as mapConfig from './map-config';\r\nimport FindCare from '../../platformui/Pages/findcare';\r\nimport { loadScript } from '../../platformui/Base/Async';\r\nimport MatomoTrackDimensions from '../../platformui/Matomo/matomo-track-dimensions';\r\n\r\nconst isSelected = (o) => o.Selected === true;\r\n\r\nfunction getSelectedRegion({ Regions }) {\r\n  if (!Regions && !Regions.Options) return null;\r\n  const found = Regions.Options.find(isSelected);\r\n\r\n  if (!found) {\r\n    return null;\r\n  }\r\n  const { Label, Name, Value } = found;\r\n  return {\r\n    Label,\r\n    Name,\r\n    Value,\r\n  };\r\n}\r\n\r\n/** Using imported local mapConfig */\r\nconst FindCarePage = (props) => {\r\n  const [done, setDone] = useState(false);\r\n\r\n  useEffect(() => {\r\n    // Loads markerclusterer as static file with this specific version instead of npm lib due to problems with newer versions in IE.\r\n    loadScript(\r\n      'pwt-markerclusterer-script',\r\n      `/build/${props.Site}/static/markerclustererplus/index.min.js`,\r\n      (e) => {\r\n        if (e) {\r\n          console.error(e.message);\r\n        } else {\r\n          setDone(true);\r\n          console.log('loaded markerclusterer');\r\n        }\r\n      }\r\n    );\r\n  }, []);\r\n  return (\r\n    <>\r\n      {done && (\r\n        <FindCare\r\n          getSelectedRegion={getSelectedRegion}\r\n          selectedRegion={getSelectedRegion(props.Regionalization)}\r\n          mapConfig={mapConfig}\r\n          {...props}\r\n          hasCareTypeFilter={true}\r\n        />\r\n      )}\r\n      <MatomoTrackDimensions\r\n        Region={props?.Regionalization?.CurrentRegionName}\r\n      />\r\n      ;\r\n    </>\r\n  );\r\n};\r\n\r\nexport default FindCarePage;\r\n","import markerImg from '../../framework/images/marker.png';\r\n\r\nexport const clusterMarkerIcons = () => [\r\n  {\r\n    textColor: '#fff',\r\n    className: 'cluster1',\r\n    height: 30,\r\n    width: 30,\r\n  },\r\n  {\r\n    textColor: '#fff',\r\n    className: 'cluster2',\r\n    height: 36,\r\n    width: 36,\r\n  },\r\n  {\r\n    textColor: '#fff',\r\n    className: 'cluster3',\r\n    height: 44,\r\n    width: 44,\r\n  },\r\n  {\r\n    textColor: '#fff',\r\n    className: 'cluster4',\r\n    height: 51,\r\n    width: 51,\r\n  },\r\n  {\r\n    textColor: '#fff',\r\n    className: 'cluster5',\r\n    height: 61,\r\n    width: 61,\r\n  },\r\n];\r\n\r\nexport const markerOptions = () => {\r\n  return {\r\n    icon: {\r\n      url: markerImg,\r\n      width: 36,\r\n      height: 45,\r\n    },\r\n  };\r\n};\r\n\r\nexport const mapOption = (settings = {}) => {\r\n  return {\r\n    disableDefaultUI: true,\r\n    clickableIcons: false,\r\n    ...settings,\r\n  };\r\n};\r\n","import React from 'react';\r\nimport { object, shape, arrayOf, string, node, bool } from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { useSweLang } from '../Helpers';\r\n\r\nconst BreadCrumb = (props) => {\r\n  if (!props.Breadcrumbs) return null;\r\n\r\n  const componentClasses = classNames({\r\n    'c-breadcrumb': true,\r\n    ...props.Modifiers,\r\n  });\r\n\r\n  return (\r\n    <nav\r\n      aria-label={props.Name}\r\n      aria-describedby=\"breadcrumb-label\"\r\n      className={componentClasses}\r\n      lang={useSweLang(props.Language)}\r\n    >\r\n      <span id=\"breadcrumb-label\" className=\"c-breadcrumb__label\">\r\n        {props.Label}\r\n      </span>\r\n      <ol>\r\n        {props.Breadcrumbs.map((breadcrumb, index) => {\r\n          return (\r\n            <li key={`breadcrumb${index}`} className=\"c-breadcrumb__item\">\r\n              {!breadcrumb.CurrentPage ? (\r\n                <a href={breadcrumb.Url}>{breadcrumb.Text}</a>\r\n              ) : (\r\n                <a aria-current=\"page\" href={breadcrumb.Url}>\r\n                  {breadcrumb.Text}\r\n                </a>\r\n              )}\r\n            </li>\r\n          );\r\n        })}\r\n      </ol>\r\n    </nav>\r\n  );\r\n};\r\n\r\nBreadCrumb.propTypes = {\r\n  Breadcrumbs: arrayOf(\r\n    shape({\r\n      /** Breadcrumb text */\r\n      Text: node.isRequired,\r\n      /** Should item be rendered as a link */\r\n      HasLink: bool,\r\n      /** Link - required if HasLink is true */\r\n      Url: string,\r\n    })\r\n  ),\r\n  /** First item in the list */\r\n  Label: string,\r\n  /** Classnames compatible object */\r\n  Modifiers: object,\r\n  /**Language for screen reader purpose */\r\n  Language: string,\r\n};\r\n\r\nexport default BreadCrumb;\r\n","import React, { useRef, useEffect } from 'react';\r\nimport classNames from 'classnames';\r\n\r\nconst AlphabeticalList = (props) => {\r\n  const firstLetter = useRef();\r\n\r\n  const enterHandler = (e) => {\r\n    if (e.keyCode === 13) {\r\n      props.returnToAlphabeticListHandler();\r\n    }\r\n  };\r\n\r\n    useEffect(() => {\r\n    firstLetter?.current?.focus();\r\n  }, [props.modalIsOpen, props.alphabeticalListActive]);\r\n\r\n  const { list, currentActiveLetter } = props;\r\n\r\n  const listItems = list.map((letter, index) => (\r\n    <li\r\n      key={`${index}--${letter.Key}`}\r\n      className={classNames({\r\n        'categories-alphabetical-list__item': true,\r\n        'categories-alphabetical-list__item--is-active':\r\n          currentActiveLetter === letter.Key,\r\n      })}\r\n    >\r\n      <a\r\n        onKeyDown={(e) => enterHandler(e)}\r\n        ref={letter.Key === 'a' ? firstLetter : null}\r\n        href={`#${letter.Key}`}\r\n      >\r\n        {letter.Key.toUpperCase()}\r\n      </a>\r\n    </li>\r\n  ));\r\n\r\n  return <ul className=\"categories-alphabetical-list\">{listItems}</ul>;\r\n};\r\n\r\nexport default AlphabeticalList;\r\n","import React, { useRef, useEffect, useState, Fragment } from 'react';\r\n\r\nimport TopicList from './topic-list';\r\nimport AlphabeticalList from './alphabetical-list';\r\n\r\nconst CategoriesLists = (props) => {\r\n  let ticking = false;\r\n  let lists = [];\r\n  const topics = useRef();\r\n  const [currentActiveLetter, setCurrentActiveLetterState] = useState('');\r\n  const [alphabeticalListActive, setAlphabeticalListActive] = useState(\r\n    !props.modalIsOpen\r\n  );\r\n\r\n  const addTopicListToHandles = (topicList) => {\r\n    lists.push(topicList);\r\n  };\r\n\r\n  const throttleScroll = (container) => {\r\n    ticking =\r\n      ticking ||\r\n      requestAnimationFrame(() => {\r\n        ticking = false;\r\n\r\n        //Magic!\r\n        lists.forEach((topic) => {\r\n          topic.isTopicInRange(container);\r\n        });\r\n      });\r\n  };\r\n\r\n  const setCurrentActiveLetter = (letter) => {\r\n    setCurrentActiveLetterState(letter);\r\n  };\r\n\r\n  const returnToAlphabeticListHandler = () => {\r\n    setAlphabeticalListActive(!alphabeticalListActive);\r\n  };\r\n\r\n  useEffect(() => {\r\n    const elm = topics.current;\r\n    elm.addEventListener('scroll', () => throttleScroll(elm), false);\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    setAlphabeticalListActive(props.modalIsOpen);\r\n  }, []);\r\n\r\n  const topicLists = props.Content.AOCareTypes.map((letter, index) => {\r\n    return (\r\n      <TopicList\r\n        key={`${letter.Key}-${index}`}\r\n        isInRange={letter.Key === currentActiveLetter}\r\n        addTopicListToHandles={(topicList) => addTopicListToHandles(topicList)}\r\n        setCurrentActiveLetter={(letter) => setCurrentActiveLetter(letter)}\r\n        letter={letter.Key}\r\n        categories={letter.Categories}\r\n        returnToAlphabetic={() => returnToAlphabeticListHandler()}\r\n        selectedCareType={props.selectedCareType}\r\n        careTypeChangeHandler={props.careTypeChangeHandler}\r\n      />\r\n    );\r\n  });\r\n\r\n  return (\r\n    <Fragment>\r\n      <header className=\"categories-lists__header\">\r\n        <h2 className=\"categories-lists__heading\" tabIndex=\"0\">\r\n          {props.Content.Translations.all}\r\n        </h2>\r\n        <span className=\"show-for-sr\">\r\n          {props.Content.Translations.aodescription}\r\n        </span>\r\n      </header>\r\n      <div className=\"categories-lists__list-wrapper\">\r\n        <AlphabeticalList\r\n          currentActiveLetter={currentActiveLetter}\r\n          list={props.Content.AOCareTypes}\r\n          modalIsOpen={props.modalIsOpen}\r\n          alphabeticalListActive={alphabeticalListActive}\r\n          returnToAlphabeticListHandler={() => returnToAlphabeticListHandler()}\r\n          aodescription={props.Content.Translations.aodescription}\r\n        />\r\n        <div ref={topics} className=\"categories-lists__topics\">\r\n          {topicLists}\r\n        </div>\r\n      </div>\r\n    </Fragment>\r\n  );\r\n};\r\n\r\nexport default CategoriesLists;\r\n","import React, { Component } from 'react';\r\nimport { Consumer } from '../../Modal';\r\n\r\nclass TopicList extends Component {\r\n  isInRange = this.props.isInRange;\r\n  topic = React.createRef();\r\n\r\n  isTopicInRange(container) {\r\n    const top = this.getBoundingClientRectHandler().top - container.scrollTop;\r\n    const bottom =\r\n      this.getBoundingClientRectHandler().bottom - container.scrollTop;\r\n\r\n    if (top < 1 && bottom > 0 && !this.isInRange) {\r\n      this.props.setCurrentActiveLetter(this.props.letter);\r\n      this.isInRange = true;\r\n    } else {\r\n      this.isInRange = false;\r\n    }\r\n  }\r\n\r\n  getBoundingClientRectHandler() {\r\n    return {\r\n      bottom: this.topic.current.offsetTop + this.topic.current.clientHeight,\r\n      top: this.topic.current.offsetTop,\r\n    };\r\n  }\r\n\r\n  enterHandler(e) {\r\n    if (e.keyCode === 13) {\r\n      this.props.returnToAlphabetic();\r\n    }\r\n  }\r\n\r\n  enterHandlerClose(e) {\r\n    if (e.keyCode === 13) {\r\n      e.preventDefault();\r\n      e.currentTarget.click();\r\n    }\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.props.addTopicListToHandles(this);\r\n  }\r\n\r\n  render() {\r\n    const props = this.props;\r\n\r\n    const topicList =\r\n      props.categories &&\r\n      props.categories.map((topic, index) => {\r\n        return (\r\n          <Consumer key={`${topic.CategoryName}--${index}`}>\r\n            {({ closeModal, activeModalId }) => (\r\n              <li className=\"categories-topic-list__item\">\r\n                <label\r\n                  onKeyDown={(e) => this.enterHandlerClose(e)}\r\n                  className=\"categories-topic-list__item-label\"\r\n                  tabIndex=\"0\"\r\n                >\r\n                  <input\r\n                    tabIndex=\"-1\"\r\n                    type=\"radio\"\r\n                    name=\"caretype-list\"\r\n                    defaultChecked={\r\n                      topic.CategoryName === props.selectedCareType\r\n                    }\r\n                    onChange={() => {\r\n                      props.careTypeChangeHandler(topic.CategoryName.trim());\r\n                      closeModal(activeModalId);\r\n                    }}\r\n                    value={topic.CategoryName.trim()}\r\n                  />\r\n                  {topic.CategoryName}\r\n                </label>\r\n              </li>\r\n            )}\r\n          </Consumer>\r\n        );\r\n      });\r\n\r\n    return (\r\n      <div\r\n        className=\"categories-topic-list__wrapper\"\r\n        ref={this.topic}\r\n        id={props.letter}\r\n      >\r\n        <div className=\"categories-topic-list__heading\">\r\n          <h3>{props.letter.toUpperCase()}</h3>\r\n        </div>\r\n        <ul className=\"categories-topic-list\">\r\n          {topicList}\r\n          <li className=\"categories-topic-list__item categories-topic-list__item--focus-only\">\r\n            <label\r\n              className=\"categories-topic-list__item-label categories-topic-list__item-label--focus-only\"\r\n              tabIndex=\"0\"\r\n              onKeyDown={(e) => this.enterHandler(e)}\r\n              onClick={(e) => this.enterHandler(e)}\r\n            >\r\n              Tillbaka till alfabetisk lista\r\n            </label>\r\n          </li>\r\n        </ul>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default TopicList;\r\n","import SuggestionsField from '../../SuggestionsField';\r\nimport withAutocomplete from '../../Containers/withAutocomplete';\r\n\r\nconst createQueryString = (props) => {\r\n  let qs = `&st=${props.st}&g=${props.g}`;\r\n  if (props.nearby === true) {\r\n    qs += `&lng=${props.lng}&lat=${props.lat}&nearby=true`;\r\n  }\r\n  return qs;\r\n};\r\n\r\nconst CaretypeSuggestion = withAutocomplete(\r\n  SuggestionsField,\r\n  '/api/hjv/suggestcaretype',\r\n  (hits) => (hits?.Hits ? hits.Hits : hits),\r\n  () => '',\r\n  (_, value) => value,\r\n  1,\r\n  createQueryString,\r\n  2\r\n);\r\n\r\nexport default CaretypeSuggestion;\r\n","import SuggestionsField from '../../SuggestionsField';\r\nimport withAutocomplete from '../../Containers/withAutocomplete';\r\n\r\nconst LocationSuggestion = withAutocomplete(\r\n  SuggestionsField,\r\n  '/api/hjv/suggestlocation',\r\n  (hits) => {\r\n    if ((hits && hits.Items) || !!hits?.length) {\r\n      return [\r\n        { Name: 'Nära mig', IsNearBy: true },\r\n        ...(hits?.Items ? hits?.Items : hits),\r\n      ];\r\n    }\r\n\r\n    return [{ Name: 'Nära mig', IsNearBy: true }];\r\n  },\r\n  (selectedObject) => (selectedObject ? selectedObject.Name : ''),\r\n  (_, value) => value,\r\n  1,\r\n  // queryparamstring\r\n  (props) => `&st=${props.sessiontoken}`,\r\n  // min string length before we request the api\r\n  () => 3\r\n);\r\n\r\nexport default LocationSuggestion;\r\n\r\nexport const getNearby = () => ({\r\n  text: 'Nära mig',\r\n  className: 'nearby',\r\n  IsNearBy: true,\r\n  excludeAutoselect: true,\r\n});\r\n\r\nexport const getCountry = (country) => ({\r\n  text: country,\r\n  Value: '',\r\n  IsNearBy: false,\r\n});\r\n\r\nexport const getRegion = (r) => ({\r\n  text: r.Name,\r\n  Value: r.Value,\r\n  Type: r.Type,\r\n  IsNearBy: false,\r\n});\r\n\r\nexport function getDefaultLocations(region, country) {\r\n  let items = [getNearby(), getCountry(country)];\r\n  return !region ? items : [...items, getRegion(region)];\r\n}\r\n","import { withRouter } from 'react-router';\r\nimport SuggestionsField from '../../SuggestionsField';\r\nimport withAutocomplete from '../../Containers/withAutocomplete';\r\nimport { getCurrentRegion } from '../../Helpers';\r\n\r\nconst createRegionSlug = (path) => {\r\n  const region = getCurrentRegion();\r\n  if (!region) return path;\r\n\r\n  return `/api/${region.Slug}/hjv/suggest`;\r\n};\r\n\r\nconst createQueryString = (props) => {\r\n  let qs = `&st=${props.st}&g=${props.g}&caretype=${props.caretype}`;\r\n  if (props.nearby === true) {\r\n    qs += `&lng=${props.lng}&lat=${props.lat}&nearby=true`;\r\n  }\r\n\r\n  return qs;\r\n};\r\n\r\nconst UnitSuggestion = withRouter(\r\n  withAutocomplete(\r\n    SuggestionsField,\r\n    createRegionSlug('/api/hjv/suggest'),\r\n    (hits) => (hits && hits.Units ? [...hits.Units] : []),\r\n    (selectedObject) => {\r\n      if (selectedObject.FriendlyUrl) {\r\n        window.location.href = selectedObject.FriendlyUrl;\r\n        return '';\r\n      } else {\r\n        return selectedObject.DisplayName;\r\n      }\r\n    },\r\n    (item, value) => value,\r\n    -1,\r\n    createQueryString,\r\n    3\r\n  )\r\n);\r\n\r\nexport default UnitSuggestion;\r\n","export function getAOCategories(types) {\r\n  let a = [];\r\n  if (!types) {\r\n    return [];\r\n  }\r\n  types.forEach((item) => {\r\n    item.Categories.forEach(({ CategoryName }) => a.push(CategoryName));\r\n  });\r\n  return a;\r\n}\r\n\r\nexport function isTrue(b) {\r\n  return b === 'true' || b === true;\r\n}\r\n\r\nexport function isFalse(b) {\r\n  return b === 'false' || b === false || !b;\r\n}\r\n","// TODO: Use formik status for when suggestion item is\r\n//       selected and use with validation\r\n\r\nimport React, { useState, useEffect, Fragment, useRef } from 'react';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { log } from '../../Helpers/helpers';\r\nimport withGeolocation from '../../Containers/withGeolocation';\r\nimport classNames from 'classnames';\r\nimport { shape, object, string } from 'prop-types';\r\nimport { Formik } from 'formik';\r\nimport { withRouter } from 'react-router';\r\nimport queryString from 'qs';\r\nimport FullscreenModal from '../../Modal/fullscreen-modal';\r\nimport CONSTANTS from '../../Pages/findcare/constants';\r\nimport { isFalseOrEmpty } from '../../Helpers/helpers';\r\nimport { OpenModalButton } from '../../Modal';\r\nimport CategoriesLists from '../findcare-categories-lists';\r\nimport UnitSuggestion from './UnitSuggestion';\r\nimport CaretypeSuggestion from './CaretypeSuggestion';\r\nimport LocationSuggestion, {\r\n  getDefaultLocations,\r\n  getNearby,\r\n} from './LocationSuggestion';\r\nimport InputLatLng from './inputLatLng';\r\nimport { isTrue, isFalse, getAOCategories } from './helpers';\r\n\r\n// This is a work around for uuid 8.1.0 / react-native not supporting crypto API in node.js. We don't really need\r\n// cryptographically strong sequences, but they should be non-repeating since they are meant to be unique for Google API\r\n// session token.\r\nfunction get16RandomBytes() {\r\n  var random = new Array(16);\r\n  for (var i = 0; i < 16; ++i) {\r\n    var d = new Date();\r\n    random[i] = (Math.floor(Math.random() * 256) + d.getTime()) % 256;\r\n  }\r\n  return random;\r\n}\r\n\r\nconst FindCareForm = (props) => {\r\n  const translations = props.Content.Translations;\r\n\r\n  const hjvSearchForm = useRef(null);\r\n  const caretypeWrapper = useRef(null);\r\n\r\n  const [activeElement, setActiveElement] = useState(\r\n    typeof document !== 'undefined' ? document.activeElement : null\r\n  );\r\n  const [sessionToken, setSessionToken] = useState(\r\n    uuidv4({ rng: () => get16RandomBytes() })\r\n  );\r\n\r\n  const handleFocusIn = () => {\r\n    setActiveElement(document.activeElement);\r\n  };\r\n\r\n  useEffect(() => {\r\n    document.addEventListener('focusin', handleFocusIn);\r\n    return () => {\r\n      document.removeEventListener('focusin', handleFocusIn);\r\n    };\r\n  }, [handleFocusIn]);\r\n\r\n  useEffect(() => {\r\n    const newSessionToken = uuidv4({ rng: () => get16RandomBytes() });\r\n    setSessionToken(newSessionToken);\r\n  }, []);\r\n\r\n  const setSortField = (formik) => {\r\n    let sort = CONSTANTS.SORT_NAME;\r\n    const { values } = formik;\r\n\r\n    if (values.nearby && values.lat && values.lng) {\r\n      sort = CONSTANTS.SORT_DISTANCE;\r\n    } else if (values.q !== '' && values.location === '') {\r\n      sort = CONSTANTS.SORT_REL;\r\n    } else if ((values.lat && values.lng) || values.location !== '') {\r\n      sort = CONSTANTS.SORT_DISTANCE;\r\n    } else if (values.location === '') {\r\n      sort = CONSTANTS.SORT_NAME;\r\n    } else {\r\n      sort = CONSTANTS.SORT_NAME;\r\n    }\r\n\r\n    formik.setFieldValue('s', sort);\r\n  };\r\n\r\n  const handleSubmit = (/* values */) => {\r\n    hjvSearchForm.current.submit();\r\n  };\r\n\r\n  const handleChange = (formik) => (e) => {\r\n    setSortField(formik);\r\n    formik.handleChange(e);\r\n  };\r\n\r\n  const getFieldProps = (formik, name) => {\r\n    return {\r\n      setValue: formik.setFieldValue,\r\n      setStatus: (value) =>\r\n        formik.setStatus({ ...formik.status, [name]: value }),\r\n      clearField: () => formik.setFieldValue(name, ''),\r\n      error: formik.errors[name],\r\n      isTouched: formik.touched[name],\r\n      value: formik.values[name],\r\n      onChange: handleChange(formik),\r\n      onBlur: formik.handleBlur,\r\n      name: name,\r\n    };\r\n  };\r\n\r\n  const validate = (values) => {\r\n    let errors = {};\r\n    if (\r\n      (values.location === 'Nära mig' || isTrue(values.nearby)) &&\r\n      (!values.lat || !values.lng)\r\n    ) {\r\n      // TODO: Translation\r\n      errors.location =\r\n        'Sortering på avstånd är inte möjligt eftersom vi inte kan fastställa din position. Se till att aktivera platstjänster.';\r\n    }\r\n    if (\r\n      values.region.length === 0 &&\r\n      values.location.length > 0 &&\r\n      values.ls === false &&\r\n      values.location !== 'Hela landet'\r\n    ) {\r\n      errors.ls = 'No location set';\r\n    }\r\n    if (values.caretype.length > 0 && values.caretypeSet === false) {\r\n      errors.caretypeSet = 'No caretype selected';\r\n    }\r\n\r\n    return errors;\r\n  };\r\n\r\n  const getCaretypeGValue = (formik) => {\r\n    if (formik.values.g) {\r\n      return formik.values.g;\r\n    }\r\n    if (props.Content.Region) {\r\n      return props.Content.Region.Value;\r\n    }\r\n    return '';\r\n  };\r\n\r\n  const {\r\n    location,\r\n    Content: { SearchResult },\r\n  } = props;\r\n\r\n  const query = queryString.parse(location.search, {\r\n    ignoreQueryPrefix: true,\r\n  });\r\n\r\n  const HasCareTypeFilter = props.hasCareTypeFilter;\r\n\r\n  // use query param by default if they are available as initial values.\r\n  const initialValues = {\r\n    q: query.q || '',\r\n    g: query.g || '',\r\n    lat: query.lat || '',\r\n    lng: query.lng || '',\r\n    region: query.region || '',\r\n    // ls: locationSet: use for validation when a value is selected\r\n    // When we have a value caretypeSet should be true initially.\r\n    ls: query.location ? true : false,\r\n    // caretypeSet: use for validation when a value is selected.\r\n    // When we have a value caretypeSet should be true initially.\r\n    // Either Hardcorded value or querystring.\r\n    caretypeSet: query.caretype ? true : false,\r\n    nearby: query.nearby || false,\r\n    s: query.s,\r\n    location: query.location || '', // sry\r\n    caretype: query.caretype || '',\r\n    st: sessionToken,\r\n  };\r\n\r\n  return (\r\n    <Fragment>\r\n      <div\r\n        className={classNames('findcare-form', {\r\n          'findcare-form--has-searchresult': SearchResult,\r\n        })}\r\n      >\r\n        <Formik\r\n          initialStatus={{}}\r\n          validate={validate}\r\n          onSubmit={handleSubmit}\r\n          initialValues={initialValues}\r\n        >\r\n          {(formik) => (\r\n            <form\r\n              action={location.pathname}\r\n              method=\"get\"\r\n              ref={hjvSearchForm}\r\n              onSubmit={formik.handleSubmit}\r\n            >\r\n              <input type=\"hidden\" defaultValue={formik.values.st} name=\"st\" />\r\n              <input\r\n                type=\"hidden\"\r\n                defaultValue={formik.values.nearby}\r\n                name=\"nearby\"\r\n              />\r\n              <input type=\"hidden\" defaultValue={formik.values.s} name=\"s\" />\r\n              <input type=\"hidden\" defaultValue={formik.values.g} name=\"g\" />\r\n\r\n              <InputLatLng\r\n                coords={props.coords}\r\n                formik={formik}\r\n                handleChange={() => handleChange(formik)}\r\n                lat={getFieldProps(formik, 'lat')}\r\n                lng={getFieldProps(formik, 'lng')}\r\n              />\r\n\r\n              <fieldset className=\"findcare-form__fieldset\">\r\n                <legend className=\"show-for-sr\">Hitta vård</legend>\r\n\r\n                <div className=\"findcare-form__wrapper\">\r\n                  {HasCareTypeFilter && props.Content.CommonCareTypes && (\r\n                    <FullscreenModal\r\n                      hideWithCss={true}\r\n                      id=\"findcare-dropdown__category-lists\"\r\n                      classModifier=\"category-lists-modal\"\r\n                    >\r\n                      <CategoriesLists\r\n                        {...props}\r\n                        careTypeChangeHandler={(careType) => {\r\n                          formik.setFieldValue('caretype', careType);\r\n                          formik.setFieldValue('caretypeSet', true);\r\n                          // next tick\r\n                          setTimeout(() => {\r\n                            caretypeWrapper.current.focus();\r\n                          }, 0);\r\n                        }}\r\n                        selectedCareType={formik.values.caretype}\r\n                      />\r\n                    </FullscreenModal>\r\n                  )}\r\n\r\n                  {/* \r\n\r\n                    Plats: Var vill du söka vård \r\n\r\n                    */}\r\n                  <div\r\n                    className=\"form-field findcare-searchfield__location-wrapper\"\r\n                    data-cy=\"ui-location-field\"\r\n                  >\r\n                    <LocationSuggestion\r\n                      activeElement={activeElement}\r\n                      isSelected={formik.values.ls}\r\n                      inputClassName={\r\n                        isFalse(formik.values.nearby)\r\n                          ? 'region'\r\n                          : 'nearby region'\r\n                      }\r\n                      innerClassName=\"findcare-search__field__query\"\r\n                      errorClassName=\"findcare-region-search-field__error\"\r\n                      className=\"findcare-searchfield\"\r\n                      zeroHitsMessage={\r\n                        formik.values.nearby ||\r\n                        formik.values.ls ||\r\n                        formik.values.location === 'Hela landet'\r\n                          ? false\r\n                          : 'Vi kan inte hitta den platsen'\r\n                      }\r\n                      {...getFieldProps(formik, 'location')}\r\n                      onValueChange={() => {\r\n                        // location changes\r\n                        formik.setFieldValue('ls', false, false);\r\n                        formik.setFieldValue('g', '', false);\r\n                        formik.setFieldValue('nearby', false, true);\r\n                        // formik.validateForm().then(() => {});\r\n                      }}\r\n                      onSuggestionSelect={(item) => {\r\n                        if (item.IsNearBy && props.coords === null) {\r\n                          log('error')('No geoposition!');\r\n                          formik.setFieldValue('nearby', true, true);\r\n                        } else {\r\n                          // location selected\r\n                          formik.setFieldValue('ls', true, true);\r\n                          formik.setFieldValue(\r\n                            's',\r\n                            CONSTANTS.SORT_DISTANCE,\r\n                            false\r\n                          );\r\n                          formik.setFieldValue('nearby', !!item.IsNearBy, true);\r\n                          const g = item.Type === 'g' ? item.Value : '';\r\n                          formik.setFieldValue('g', g);\r\n\r\n                          // Make sure all `setFieldValues` have run.\r\n                          // They use setState internally and are async.\r\n                          setTimeout(function delayedValidate() {\r\n                            formik.validateForm();\r\n                          }, 0);\r\n                        }\r\n                      }}\r\n                      clearField={() => {\r\n                        // location text cleared\r\n                        formik.setValues({\r\n                          ...formik.values,\r\n                          location: '',\r\n                          g: '',\r\n                          nearby: false,\r\n                        });\r\n\r\n                        formik.validateForm().then(() => {});\r\n                      }}\r\n                      getItems={(item) => {\r\n                        let extra = [getNearby()];\r\n                        if (\r\n                          formik.values.location === 'Hela landet' ||\r\n                          isTrue(formik.values.nearby)\r\n                        ) {\r\n                          extra = getDefaultLocations(\r\n                            props.Content.Region,\r\n                            props.Content.Translations.allcounties\r\n                          );\r\n                        }\r\n                        if (item.Suggestions && item.Suggestions.Hits) {\r\n                          const items = item.Suggestions.Hits.Items || [];\r\n                          const itemsWithExtra = extra.concat(items);\r\n                          return itemsWithExtra.map((item) => ({\r\n                            text: item.Name,\r\n                            key: item.Value,\r\n                            ...item,\r\n                          }));\r\n                        }\r\n                        return [];\r\n                      }}\r\n                      sessiontoken={sessionToken}\r\n                      defaultSuggestionsTitle={'Förslag på platser'}\r\n                      defaultSuggestions={getDefaultLocations(\r\n                        props.Content.Region,\r\n                        props.Content.Translations.allcounties\r\n                      )}\r\n                      label={translations.where}\r\n                      labelClassName=\"findcare-form__label\"\r\n                      placeholder={translations.whereinputfield}\r\n                    />\r\n                  </div>\r\n\r\n                  {/* \r\n\r\n                    Vårdtyp: Vilken typ av vård söker du\r\n                    \r\n                    */}\r\n                  {!HasCareTypeFilter ? (\r\n                    <input\r\n                      type=\"hidden\"\r\n                      name=\"caretype\"\r\n                      value={formik.values.caretype}\r\n                    />\r\n                  ) : (\r\n                    <div\r\n                      ref={caretypeWrapper}\r\n                      tabIndex=\"-1\"\r\n                      className=\"form-field findcare-searchfield__caretype-wrapper\"\r\n                      data-cy=\"ui-caretype-field\"\r\n                    >\r\n                      <CaretypeSuggestion\r\n                        activeElement={activeElement}\r\n                        isSelected={formik.values.caretypeSet}\r\n                        nearby={isTrue(formik.values.nearby)}\r\n                        st={formik.values.st}\r\n                        g={getCaretypeGValue(formik)}\r\n                        lat={formik.values.lat}\r\n                        lng={formik.values.lng}\r\n                        innerClassName=\"findcare-search__field__query\"\r\n                        className=\"findcare-searchfield\"\r\n                        errorClassName=\"findcare-region-search-field__error\"\r\n                        zeroHitsMessage={\r\n                          formik.values.caretypeSet\r\n                            ? null\r\n                            : 'Det finns ingen vårdtyp med detta namn'\r\n                        }\r\n                        onSuggestionSelect={() => {\r\n                          formik.setFieldValue('caretypeSet', true);\r\n                          // Make sure all `setFieldValues` have run.\r\n                          // They use setState internally and are async.\r\n                          setTimeout(function delayedValidate() {\r\n                            formik.validateForm();\r\n                          }, 0);\r\n                        }}\r\n                        onValueChange={() => {\r\n                          formik.setFieldValue('caretypeSet', false);\r\n                        }}\r\n                        clearField={() => {\r\n                          formik.setFieldValue('caretypeSet', false);\r\n                        }}\r\n                        suggestionsFallback={getAOCategories(\r\n                          props.Content.AOCareTypes\r\n                        )}\r\n                        getItems={(props) => {\r\n                          if (\r\n                            props.Suggestions &&\r\n                            props.Suggestions.Hits &&\r\n                            props.Suggestions.Hits.length > 0\r\n                          ) {\r\n                            return props.Suggestions.Hits.map((item) => {\r\n                              return typeof item === 'string'\r\n                                ? {\r\n                                    text: item,\r\n                                    key: item,\r\n                                  }\r\n                                : {\r\n                                    text: item.Value,\r\n                                    key: item.Value,\r\n                                  };\r\n                            });\r\n                          }\r\n                          return [];\r\n                        }}\r\n                        hightlightTitle={props.Content.Translations.within}\r\n                        suggestionsTitle={null}\r\n                        defaultSuggestionsTitle={'Vanliga vårdtyper'}\r\n                        defaultSuggestions={props.Content.CommonCareTypes.Options.map(\r\n                          (item) => ({\r\n                            text: item.Label,\r\n                            value: item.Name,\r\n                            key: item.Value,\r\n                          })\r\n                        )}\r\n                        {...getFieldProps(formik, 'caretype')}\r\n                        suggestionsFooter={(isOpen) => (\r\n                          <div className=\"findcare-searchfield__autocomplete__item caretype-footer\">\r\n                            <OpenModalButton\r\n                              tabIndex={isOpen ? 0 : -1}\r\n                              className=\"findcare-dropdown__panel__footer\"\r\n                              id=\"findcare-dropdown__category-lists\"\r\n                              clickCallback={() => {\r\n                                //setState({ isOpen: false });\r\n                                setTimeout(() => {\r\n                                  document\r\n                                    .querySelector('.categories-lists__heading')\r\n                                    .focus();\r\n                                }, 0);\r\n                              }}\r\n                              fullScreen={true}\r\n                            >\r\n                              {translations.more}\r\n                            </OpenModalButton>\r\n                          </div>\r\n                        )}\r\n                        labelClassName=\"findcare-form__label\"\r\n                        placeholder={translations.choiceunitinputfield}\r\n                        highlightSelection={true}\r\n                        label={translations.choiceunit}\r\n                      />\r\n                    </div>\r\n                  )}\r\n                  {/* \r\n\r\n                    Mottagning: Vilken mottagning söker du? \r\n\r\n                    */}\r\n                  <div className=\"form-field findcare-searchfield__unit-wrapper\">\r\n                    <UnitSuggestion\r\n                      activeElement={activeElement}\r\n                      doNotAutoselectFirstItemOnClose={true}\r\n                      zeroHitsMessage={null}\r\n                      nearby={isTrue(formik.values.nearby)}\r\n                      st={formik.values.st}\r\n                      g={formik.values.g}\r\n                      caretype={\r\n                        formik.values.caretypeSet &&\r\n                        formik.values.caretype !==\r\n                          props.Content.Translations.allunits\r\n                          ? formik.values.caretype\r\n                          : ''\r\n                      }\r\n                      lat={formik.values.lat}\r\n                      lng={formik.values.lng}\r\n                      innerClassName=\"findcare-search__field__query\"\r\n                      className=\"findcare-searchfield\"\r\n                      {...getFieldProps(formik, 'q')}\r\n                      getItems={(props) => {\r\n                        if (props.Suggestions && props.Suggestions.Hits) {\r\n                          const { Units } = props.Suggestions.Hits;\r\n                          return Units\r\n                            ? Units.map((item) => ({\r\n                                ...item,\r\n                                value: item.DisplayName,\r\n                                text: (\r\n                                  <>\r\n                                    <span style={{ display: 'block' }}>\r\n                                      {item.DisplayName}\r\n                                    </span>\r\n                                    <small className=\"findcare-autocomplete__sublabel\">\r\n                                      {item.Address}\r\n                                    </small>\r\n                                  </>\r\n                                ),\r\n                                key: `suggestion_unit_${item.HsaId}`,\r\n                              }))\r\n                            : [];\r\n                        }\r\n                        return [];\r\n                      }}\r\n                      label={translations.unit}\r\n                      labelClassName=\"findcare-form__label\"\r\n                      onSuggestionSelect={(selectedObject) => {\r\n                        if (selectedObject.FriendlyUrl) {\r\n                          window.location.href = selectedObject.FriendlyUrl;\r\n                          return '';\r\n                        } else {\r\n                          return selectedObject.DisplayName;\r\n                        }\r\n                      }}\r\n                      suggestCloseButton={true}\r\n                      suggestionsTitle={translations.suggestions}\r\n                      placeholder={translations.unitinputfield}\r\n                    />\r\n                  </div>\r\n                  <button\r\n                    type=\"submit\"\r\n                    className={classNames({\r\n                      'findcare-form__button': true,\r\n                      'findcare-form__button--is-disabled': !isFalseOrEmpty(\r\n                        formik.errors\r\n                      ),\r\n                    })}\r\n                  >\r\n                    {translations.searchbutton}\r\n                  </button>\r\n                </div>\r\n              </fieldset>\r\n            </form>\r\n          )}\r\n        </Formik>\r\n      </div>\r\n    </Fragment>\r\n  );\r\n};\r\n\r\nFindCareForm.defaultProps = {\r\n  Regionalization: {},\r\n};\r\n\r\nFindCareForm.propTypes = {\r\n  Content: shape({\r\n    Translations: shape({\r\n      choiceunit: string,\r\n    }),\r\n  }),\r\n  /** From react-router withRouter() higher order component */\r\n  history: object,\r\n  /** From react-router withRouter() higher order component */\r\n  location: object,\r\n};\r\n\r\nexport default withRouter(withGeolocation(FindCareForm));\r\n","import React from 'react';\r\n/**\r\n * This component will make sure that coords are updated in formik\r\n * state when a position is received or changed.\r\n */\r\nconst InputLatLng = ({ formik, handleChange, coords }) => {\r\n  React.useEffect(\r\n    function updateCoords() {\r\n      if (coords) {\r\n        formik.setFieldValue('lat', coords.latitude);\r\n        formik.setFieldValue('lng', coords.longitude);\r\n      }\r\n    },\r\n    [coords]\r\n  );\r\n  return (\r\n    <>\r\n      <input\r\n        id=\"inputLat\"\r\n        onChange={handleChange}\r\n        type=\"hidden\"\r\n        name=\"lat\"\r\n        value={formik.values.lat}\r\n      />\r\n      <input\r\n        id=\"inputLng\"\r\n        onChange={handleChange}\r\n        type=\"hidden\"\r\n        name=\"lng\"\r\n        value={formik.values.lng}\r\n      />\r\n    </>\r\n  );\r\n};\r\n\r\nexport default InputLatLng;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst FindCareHeader = (props) => {\r\n  if (!props.Heading) return null;\r\n\r\n  const formatHeadingHtml = (heading) => ({\r\n    __html: heading.replace('domsmottagning', 'doms&shy;mottagning'),\r\n  });\r\n\r\n  return (\r\n    <div className=\"row\">\r\n      <div className=\"large-8 large-centered columns\">\r\n        <div className=\"findcare-header\">\r\n          <h1 dangerouslySetInnerHTML={formatHeadingHtml(props.Heading)} />\r\n          {props.Preamble && (\r\n            <p className=\"findcare-header__preamble\">{props.Preamble}</p>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nFindCareHeader.propTypes = {\r\n  /** `h1` element */\r\n  Heading: PropTypes.string,\r\n  /** `p.findcare-header__preamble` */\r\n  Preamble: PropTypes.string,\r\n};\r\n\r\nexport default FindCareHeader;\r\n","/** If we have bounds, return total hits, otherwise return batchsize */\r\nexport function getTakeParam(SearchResult) {\r\n  const { TotalHits, BatchSize, Bounds } = SearchResult;\r\n  return Bounds ? Number(TotalHits) : Number(BatchSize);\r\n}\r\n\r\nexport function setMaxZoom(map) {\r\n  if (map.getZoom() >= 22) {\r\n    map.setZoom(18);\r\n  }\r\n}\r\n\r\nexport function isEqPositionTo(compare) {\r\n  return function(compareWith) {\r\n    return Boolean(\r\n      compareWith.data.Latitude === compare.data.Latitude &&\r\n        compareWith.data.Longitude === compare.data.Longitude\r\n    );\r\n  };\r\n}\r\n\r\nexport function onlyHitsOutsideBounds(qs, bounds) {\r\n  if (!bounds && qs.location) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\n\r\n/** Return { ne, sw } from SearchResult if available */\r\nexport function getInitialBounds(SearchResult) {\r\n  if (!SearchResult.Bounds) {\r\n    return null;\r\n  }\r\n  const { topLeft, bottomRight } = SearchResult.Bounds;\r\n  return {\r\n    ne: { latitude: topLeft.latitude, longitude: bottomRight.longitude },\r\n    sw: { latitude: bottomRight.latitude, longitude: topLeft.longitude },\r\n  };\r\n}\r\n\r\nexport function getDefaultCenter(SearchResult) {\r\n  return {\r\n    lat: SearchResult.Latitude || 61.2291259,\r\n    lng: SearchResult.Longitude || 16.0703703,\r\n  };\r\n}\r\n\r\nexport function getHsaIdsPiped(SearchResult) {\r\n  let hsaIds = '';\r\n  SearchResult &&\r\n    SearchResult.SearchHits.forEach((item) => {\r\n      hsaIds = hsaIds + `${item.HsaId}|`;\r\n    });\r\n  return hsaIds;\r\n}\r\n\r\nexport function getZoomLevel(qs) {\r\n  return !isNaN(parseInt(qs.z, 10)) ? parseInt(qs.z, 10) : 16;\r\n}\r\n\r\n/** Extract location data and HsaId from an object. */\r\nexport function getLocationData({ HsaId, Latitude, Longitude }) {\r\n  return {\r\n    HsaId,\r\n    Latitude,\r\n    Longitude,\r\n  };\r\n}\r\n\r\nexport function getCoordsFromBoundaryQuery(boundaryQuery) {\r\n  let coords = boundaryQuery.split('|');\r\n  const sw = { lat: parseFloat(coords[3]), lng: parseFloat(coords[0]) };\r\n  const ne = { lat: parseFloat(coords[1]), lng: parseFloat(coords[2]) };\r\n  return [sw, ne];\r\n}\r\n\r\nexport function shouldDoInitialBoundaryQuery(qs, SearchResult) {\r\n  return (qs.location || qs.nearby === 'true') && !SearchResult.Bounds;\r\n}\r\n\r\nexport function shouldRedirectToLatLng(qs) {\r\n  return !('lat' in qs) && !('lng' in qs) && qs.nearby === 'true';\r\n}\r\n\r\nexport function sanitizeHeading(heading) {\r\n  if (!heading) return;\r\n  return heading.replace(/<\\/strong>/g, '|||').replace(/<strong>/g, '||');\r\n}\r\n\r\nexport function parseSanitizedHeading(heading) {\r\n  if (!heading) return;\r\n  return heading.replace(/\\|\\|\\|/g, '</strong>').replace(/\\|\\|/g, '<strong>');\r\n}\r\n\r\nexport function noSearchHits(SearchResult) {\r\n  return (\r\n    !SearchResult ||\r\n    !SearchResult.SearchHits ||\r\n    SearchResult.SearchHits.length === 0\r\n  );\r\n}\r\n\r\nexport function shouldDisplayMap(qs, SearchResult) {\r\n  return !(!qs.b && noSearchHits(SearchResult));\r\n}\r\n\r\nexport function shouldDisplaySort({ SearchResult, IsPost }) {\r\n  if (IsPost) {\r\n    return false;\r\n  }\r\n  if (noSearchHits(SearchResult)) {\r\n    return false;\r\n  }\r\n  if (!SearchResult.Bounds) {\r\n    return false;\r\n  }\r\n  return true;\r\n}\r\n","import React from 'react';\r\nimport { withRouter } from 'react-router';\r\nimport { bool, shape, object, string, array } from 'prop-types';\r\nimport useMedia from '../../Hooks/useMedia';\r\nimport queryString from 'qs';\r\nimport classNames from 'classnames';\r\nimport { OpenModalButton } from '../../Modal';\r\nimport FullscreenModal from '../../Modal/fullscreen-modal';\r\nimport * as utils from './helpers';\r\nimport Map from './map2';\r\n\r\nconst FindCareMap = (props) => {\r\n  const qs = queryString.parse(props.location.search, {\r\n    ignoreQueryPrefix: true,\r\n  });\r\n\r\n  if (!utils.shouldDisplayMap(qs, props.SearchResult)) {\r\n    return null;\r\n  }\r\n\r\n  const isMediumOrLarger = useMedia(\r\n    ['print, screen and (min-width: 40em)'],\r\n    [true],\r\n    false\r\n  );\r\n\r\n  return (\r\n    <div\r\n      className={classNames({\r\n        'findcare-map': true,\r\n        'findcare-map--is-loading': props.SearchResult.isLoading,\r\n      })}\r\n    >\r\n      {/* <Small devices only> */}\r\n      <OpenModalButton\r\n        className=\"findcare-map__map-modal-trigger\"\r\n        id=\"searchmap-small\"\r\n      >\r\n        {props.Translations.showhitsonmap}\r\n      </OpenModalButton>\r\n      <FullscreenModal\r\n        hideWithCss={false}\r\n        id=\"searchmap-small\"\r\n        classModifier=\"findcare-fullscreen\"\r\n      >\r\n        <Map\r\n          {...props}\r\n          modifiers={{ 'findcare-map__gmap--modal': true }}\r\n          expand={false}\r\n        />\r\n      </FullscreenModal>\r\n      {/* </Small devices only> */}\r\n      {isMediumOrLarger && (\r\n        <div className=\"findcare-map__container\">\r\n          <Map {...props} />\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nFindCareMap.propTypes = {\r\n  SearchResult: shape({\r\n    SearchHits: array,\r\n    isLoading: bool,\r\n  }),\r\n  Translations: shape({\r\n    showhitsonmap: string,\r\n  }),\r\n  /** From react-router withRouter() higher order component */\r\n  location: object,\r\n};\r\n\r\nexport default withRouter(FindCareMap);\r\n","import { search } from '../../Api';\r\n\r\nconst centerMapToInfoWindow = (map, marker, popup) => {\r\n  if (!popup.getProjection()) return;\r\n\r\n  const popupPosition = popup\r\n    .getProjection()\r\n    .fromLatLngToDivPixel(popup.position);\r\n\r\n  const posX = map.getDiv().offsetWidth / 2;\r\n\r\n  //If popup is outside map then center the marker within map\r\n  if (\r\n    popupPosition.y < 90 ||\r\n    posX * -1 > popupPosition.x - 150 ||\r\n    posX < popupPosition.x + 150\r\n  ) {\r\n    const offsetx = 0;\r\n    const offsety = -100;\r\n    const scale = Math.pow(2, map.getZoom());\r\n\r\n    const worldCoordinateCenter = map\r\n      .getProjection()\r\n      .fromLatLngToPoint(marker.position);\r\n    const pixelOffset = new global.google.maps.Point(\r\n      offsetx / scale || 0,\r\n      offsety / scale || 0\r\n    );\r\n\r\n    const worldCoordinateNewCenter = new global.google.maps.Point(\r\n      worldCoordinateCenter.x - pixelOffset.x,\r\n      worldCoordinateCenter.y + pixelOffset.y\r\n    );\r\n\r\n    const newCenter = map\r\n      .getProjection()\r\n      .fromPointToLatLng(worldCoordinateNewCenter);\r\n    map.setCenter(newCenter);\r\n  }\r\n};\r\n\r\nconst Infowindow = (location, marker, map, isCluster = false) => {\r\n  if (typeof window === 'undefined') return null;\r\n  if (typeof global.google === 'undefined') return null;\r\n\r\n  //Create popup. Code from googleplex\r\n  const Popup = function (position, content, closeBtn) {\r\n    this.position = position;\r\n\r\n    this.anchor = document.createElement('div');\r\n    this.anchor.classList.add('findcare-map__map__popup');\r\n    this.anchor.appendChild(content);\r\n\r\n    closeBtn.addEventListener('click', () => {\r\n      this.close();\r\n    });\r\n\r\n    // Optionally stop clicks, etc., from bubbling up to the map.\r\n    this.stopEventPropagation();\r\n  };\r\n\r\n  // NOTE: google.maps.OverlayView is only defined once the Maps API has\r\n  // loaded. That is why Popup is defined inside initMap().\r\n  Popup.prototype = Object.create(global.google.maps.OverlayView.prototype);\r\n\r\n  /** Called when the popup is added to the map. */\r\n  Popup.prototype.onAdd = function () {\r\n    this.getPanes().floatPane.appendChild(this.anchor);\r\n  };\r\n\r\n  /** Called when the popup is removed from the map. */\r\n  Popup.prototype.onRemove = function () {\r\n    if (this.anchor.parentElement) {\r\n      this.anchor.parentElement.removeChild(this.anchor);\r\n    }\r\n  };\r\n\r\n  /** Called when the popup needs to draw itself. */\r\n  Popup.prototype.draw = function () {\r\n    var divPosition = this.getProjection().fromLatLngToDivPixel(this.position);\r\n    // Hide the popup when it is far out of view.\r\n    this.anchor.style.left = divPosition.x + 'px';\r\n    this.anchor.style.top = divPosition.y + 'px';\r\n  };\r\n\r\n  /** Stops clicks/drags from bubbling up to the map. */\r\n  Popup.prototype.stopEventPropagation = function () {\r\n    var anchor = this.anchor;\r\n    anchor.style.cursor = 'auto';\r\n\r\n    [\r\n      'click',\r\n      'dblclick',\r\n      'contextmenu',\r\n      'wheel',\r\n      'mousedown',\r\n      'touchstart',\r\n      'pointerdown',\r\n    ].forEach(function (event) {\r\n      anchor.addEventListener(event, function (e) {\r\n        e.stopPropagation();\r\n      });\r\n    });\r\n  };\r\n\r\n  Popup.prototype.close = function () {\r\n    this.anchor.className = 'findcare-map__map__popup';\r\n  };\r\n  //End Popup\r\n\r\n  // Remove marker from map\r\n  if (marker.infoWindow) {\r\n    marker.infoWindow.setMap(null);\r\n  }\r\n\r\n  const infoBubble = document.createElement('div');\r\n  infoBubble.className =\r\n    'findcare-map__map__popup__office findcare-map__map__popup__content';\r\n  const receptionCount = document.createElement('p');\r\n  infoBubble.appendChild(receptionCount);\r\n  const infoBubbleInner = document.createElement('div');\r\n  infoBubbleInner.className = 'findcare-map__map__popup__content__inner';\r\n  infoBubble.appendChild(infoBubbleInner);\r\n\r\n  var scrollBtn = document.createElement('button');\r\n  scrollBtn.setAttribute('type', 'button');\r\n  scrollBtn.className = 'findcare-map__map__popup__scroll';\r\n  scrollBtn.innerHTML = '<span class=\"show-for-sr\">Scrolla ner</span>';\r\n  infoBubble.appendChild(scrollBtn);\r\n\r\n  var closeBtn = document.createElement('button');\r\n  closeBtn.setAttribute('type', 'button');\r\n  closeBtn.className = 'findcare-map__map__popup__close';\r\n  closeBtn.innerHTML = '<span class=\"show-for-sr\">Stäng</span>';\r\n  infoBubble.appendChild(closeBtn);\r\n\r\n  const infoBubbleOuter = document.createElement('div');\r\n\r\n  if (isCluster) {\r\n    infoBubbleOuter.className =\r\n      'findcare-map__map__popup__bubble findcare-map__map__popup__bubble--is-cluster findcare-map__map__popup__bubble--is-loading';\r\n  } else {\r\n    infoBubbleOuter.className =\r\n      'findcare-map__map__popup__bubble findcare-map__map__popup__bubble--is-loading';\r\n  }\r\n\r\n  infoBubbleOuter.appendChild(infoBubble);\r\n\r\n  //Spinner\r\n  const spinner = document.createElement('span');\r\n  spinner.className = 'c-spinner';\r\n\r\n  const bounce1 = document.createElement('span');\r\n  bounce1.className = 'bounce1';\r\n  spinner.appendChild(bounce1);\r\n\r\n  const bounce2 = document.createElement('span');\r\n  bounce2.className = 'bounce2';\r\n  spinner.appendChild(bounce2);\r\n\r\n  const bounce3 = document.createElement('span');\r\n  bounce3.className = 'bounce1';\r\n  spinner.appendChild(bounce3);\r\n\r\n  infoBubbleOuter.appendChild(spinner);\r\n\r\n  const popup = new Popup(\r\n    new global.google.maps.LatLng(location.Latitude, location.Longitude),\r\n    infoBubbleOuter,\r\n    closeBtn,\r\n    scrollBtn\r\n  );\r\n\r\n  popup.setMap(map);\r\n  marker.infoWindow = popup;\r\n\r\n  popup.anchor.className =\r\n    'findcare-map__map__popup findcare-map__map__popup--is-open';\r\n  centerMapToInfoWindow(map, marker, popup);\r\n\r\n  search(`/api/hjv/search?id=${location.HsaId}`)\r\n    .then((response) => response.json())\r\n    .then((data) => {\r\n      if (isCluster) {\r\n        infoBubbleOuter.className =\r\n          'findcare-map__map__popup__bubble findcare-map__map__popup__bubble--is-cluster';\r\n        receptionCount.textContent = `Mottagningar (${data.SearchHits.length})`;\r\n      } else {\r\n        infoBubbleOuter.className = 'findcare-map__map__popup__bubble';\r\n      }\r\n\r\n      data.SearchHits.forEach((receptionData) => {\r\n        const receptionWrapper = document.createElement('div');\r\n        receptionWrapper.className = 'findcare-map__map__popup__wrapper';\r\n        if (isCluster) {\r\n          receptionWrapper.setAttribute('aria-expanded', false);\r\n        }\r\n        receptionWrapper.id = 'wrapper-' + receptionData.HsaId;\r\n\r\n        if (receptionData.Heading) {\r\n          const heading = document.createElement('h4');\r\n          heading.className = 'findcare-map__map__popup__heading';\r\n          const headingLink = document.createElement('a');\r\n          headingLink.href = receptionData.Url;\r\n          headingLink.innerText = receptionData.Heading;\r\n\r\n          heading.appendChild(headingLink);\r\n          receptionWrapper.appendChild(heading);\r\n\r\n          if (isCluster) {\r\n            const chevron = document.createElement('button');\r\n            chevron.className = 'findcare-map__chevron';\r\n            chevron.id = receptionData.HsaId;\r\n            chevron.setAttribute('aria-control', receptionWrapper.id);\r\n            chevron.addEventListener('click', () => {\r\n              let b =\r\n                receptionWrapper.getAttribute('aria-expanded') === 'false'\r\n                  ? 'true'\r\n                  : 'false';\r\n              receptionWrapper.setAttribute('aria-expanded', b);\r\n            });\r\n            heading.appendChild(chevron);\r\n          }\r\n        }\r\n\r\n        if (receptionData.Address) {\r\n          const address = document.createElement('p');\r\n          address.innerText = receptionData.Address;\r\n          receptionWrapper.appendChild(address);\r\n        }\r\n\r\n        if (receptionData.PhoneNumber) {\r\n          const phone = document.createElement('p');\r\n          phone.className = 'findcare-map__map__popup__phone';\r\n          const phoneLink = document.createElement('a');\r\n          phoneLink.setAttribute(\r\n            'href',\r\n            `tel:${receptionData.InternationalPhoneNumber}`\r\n          );\r\n          phoneLink.innerText = receptionData.PhoneNumber;\r\n          phone.appendChild(phoneLink);\r\n          receptionWrapper.appendChild(phone);\r\n        }\r\n\r\n        let serviceList = null;\r\n        const translations = window.__PRELOADED_STATE__.Content.Translations;\r\n\r\n        const createListItem = (titleText) => {\r\n          const elem = document.createElement('li');\r\n          elem.className = 'findcare-search-list-item__list__item';\r\n          const titleElem = document.createElement('p');\r\n          titleElem.className = 'findcare-search-list-item__list__item__title';\r\n          titleElem.innerText = titleText;\r\n          elem.appendChild(titleElem);\r\n          serviceList.appendChild(elem);\r\n        };\r\n\r\n        if (\r\n          receptionData.HasLovContract ||\r\n          receptionData.VideoOrChat ||\r\n          receptionData.HasMvkServices ||\r\n          receptionData.VaccinatesForFlu ||\r\n          receptionData.VaccinatesForCovid19 ||\r\n          receptionData.HasListing\r\n        ) {\r\n          serviceList = document.createElement('ul');\r\n          serviceList.className =\r\n            'findcare-search-list-item__list findcare-search-list-item__list--info-popup';\r\n        }\r\n\r\n        receptionData.HasLovContract &&\r\n          createListItem(receptionData.LovContractLinkText);\r\n\r\n        receptionData.HasMvkServices &&\r\n          createListItem(translations.haseservices);\r\n\r\n        receptionData.VaccinatesForCovid19 &&\r\n          createListItem(translations.vaccinatescovid19);\r\n\r\n        receptionData.VaccinatesForFlu &&\r\n          createListItem(translations.vaccinatesflu);\r\n\r\n        receptionData.VideoOrChat && createListItem(translations.videoorchat);\r\n\r\n        receptionData.HasListing &&\r\n          createListItem(\r\n            receptionData.HasListingQueue\r\n              ? translations.haslistingqueue\r\n              : translations.haslisting\r\n          );\r\n\r\n        if (serviceList) receptionWrapper.appendChild(serviceList);\r\n\r\n        //Is content higher then info popup\r\n        if (receptionWrapper.offsetHeight >= 190) {\r\n          infoBubble.className =\r\n            'findcare-map__map__popup__office findcare-map__map__popup__content findcare-map__map__popup__content--overflow';\r\n        }\r\n        infoBubbleInner.appendChild(receptionWrapper);\r\n\r\n        centerMapToInfoWindow(map, marker, popup);\r\n      });\r\n      //Scroll inside info popup\r\n      scrollBtn.addEventListener('click', scrollDown);\r\n\r\n      function scrollDown() {\r\n        var height = infoBubbleInner.offsetHeight;\r\n        infoBubbleInner.scrollBy(0, height * 0.1);\r\n      }\r\n    });\r\n};\r\n\r\nexport default Infowindow;\r\n","import React, { Component } from 'react';\r\nimport proptypes from 'prop-types';\r\nimport queryString from 'qs';\r\nimport Spinner from '../../Spinner';\r\nimport { OpenModalButton } from '../../Modal';\r\nimport FullscreenModal from '../../Modal/fullscreen-modal';\r\nimport CONSTANTS from '../../Pages/findcare/constants';\r\nimport Map from './map2';\r\n\r\nexport function getBoundaryQuery(map, api) {\r\n  const bounds = map.getBounds();\r\n  const ne = bounds.getNorthEast(); // LatLng of the north-east corner\r\n  const sw = bounds.getSouthWest(); // LatLng of the south-west corder\r\n  const nw = new api.maps.LatLng(ne.lat(), sw.lng());\r\n  const se = new api.maps.LatLng(sw.lat(), ne.lng());\r\n  return `${nw.lng()}|${nw.lat()}|${se.lng()}|${se.lat()}`;\r\n}\r\n\r\nclass MapControls extends Component {\r\n  translations = this.props.Translations;\r\n\r\n  /**\r\n   * Constructs the query as a query string object.\r\n   * Pushes to history so that the map component will recognise the update\r\n   * and do a search for `api/hjv/pins` in `componentWillUpdate`.\r\n   *\r\n   * The list `api/hjv/search` is done from `withSearch` container\r\n   * called from the list component.\r\n   */\r\n  searchWithBoundaries() {\r\n    if (this.props.isLoading === true) {\r\n      return false;\r\n    }\r\n    if (typeof this.props.googleAPI !== 'undefined') {\r\n      //search query\r\n      const qs = queryString.parse(this.props.location.search, {\r\n        ignoreQueryPrefix: true,\r\n      });\r\n      const boundaryQuery = getBoundaryQuery(\r\n        this.props.map,\r\n        this.props.googleAPI\r\n      );\r\n      const zoom = this.props.map.getZoom();\r\n      const center = this.props.map.getCenter().toJSON();\r\n      delete qs.p;\r\n      delete qs.location;\r\n      delete qs.region;\r\n      delete qs.heading;\r\n      delete qs.g;\r\n      delete qs.m;\r\n      delete qs.nearby;\r\n      qs.b = boundaryQuery;\r\n      qs.z = zoom;\r\n      qs.mlat = center.lat;\r\n      qs.mlng = center.lng;\r\n\r\n      this.props.history.push(\r\n        `${this.props.location.pathname}?${queryString.stringify(qs)}`\r\n      );\r\n\r\n      //When boundarySearch is clicked, location inout field should be cleared\r\n      let locationClearButton = document.querySelectorAll(\r\n        '#field_location>.findcare-search__field__query>.findcare-searchfield__clear-field'\r\n      )[0];\r\n      locationClearButton && locationClearButton.click();\r\n    }\r\n  }\r\n\r\n  zoomIn() {\r\n    this.props.map.setZoom(this.props.map.getZoom() + 1);\r\n  }\r\n\r\n  zoomOut() {\r\n    this.props.map.setZoom(this.props.map.getZoom() - 1);\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      zoom,\r\n      boundarySearch,\r\n      expand,\r\n      plannerLink,\r\n      plannerLinkText,\r\n      lat,\r\n      lng,\r\n      ...props\r\n    } = this.props;\r\n\r\n    return (\r\n      <div className=\"findcare-map__map__controls\">\r\n        {expand && (\r\n          <div>\r\n            <OpenModalButton\r\n              className=\"findcare-map__map__controls__expand\"\r\n              id=\"searchmap\"\r\n              fullScreen={true}\r\n            >\r\n              <span className=\"show-for-sr\">Expandera karta</span>\r\n            </OpenModalButton>\r\n            <FullscreenModal id=\"searchmap\" classModifier=\"findcare-fullscreen\">\r\n              <Map\r\n                {...props}\r\n                modifiers={{ 'findcare-map__gmap--modal': true }}\r\n                expand={false}\r\n              />\r\n            </FullscreenModal>\r\n          </div>\r\n        )}\r\n\r\n        {boundarySearch && (\r\n          <button\r\n            disabled={boundarySearch === CONSTANTS.BOUNDARY_QUERY_DISABLED}\r\n            className=\"findcare-map__map__controls__boundaries\"\r\n            onClick={() => this.searchWithBoundaries()}\r\n          >\r\n            <span className=\"findcare-map__map__controls__boundaries__text\">\r\n              {this.translations.searchinarea}\r\n            </span>\r\n            <Spinner Modifiers={{ 'c-spinner--map': true }} />\r\n          </button>\r\n        )}\r\n        {zoom && (\r\n          <div className=\"findcare-map__map__controls__zoom\">\r\n            <button\r\n              type=\"button\"\r\n              className=\"findcare-map__map__controls__zoom-out\"\r\n              onClick={() => this.zoomOut()}\r\n            >\r\n              <span className=\"show-for-sr\">Zooma ut</span>\r\n            </button>\r\n            <button\r\n              type=\"button\"\r\n              className=\"findcare-map__map__controls__zoom-in\"\r\n              onClick={() => this.zoomIn()}\r\n            >\r\n              <span className=\"show-for-sr\">Zooma in</span>\r\n            </button>\r\n          </div>\r\n        )}\r\n\r\n        {plannerLink && (\r\n          <a\r\n            className=\"findcare-map__map__controls__planner-link\"\r\n            href={`https://www.google.se/maps/dir/?api=1&destination=${lat},${lng}`}\r\n          >\r\n            <span>{plannerLinkText}</span>\r\n          </a>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nMapControls.propTypes = {\r\n  Translations: proptypes.shape({\r\n    searchinarea: proptypes.string,\r\n  }),\r\n  EnableSearchClosestUnits: proptypes.bool,\r\n  location: proptypes.object,\r\n  isLoading: proptypes.bool,\r\n  map: proptypes.object,\r\n  googleAPI: proptypes.object,\r\n  zoom: proptypes.bool,\r\n  boundarySearch: proptypes.oneOfType([proptypes.string, proptypes.bool]),\r\n  expand: proptypes.bool,\r\n  plannerLink: proptypes.bool,\r\n  plannerLinkText: proptypes.string,\r\n  lat: proptypes.number,\r\n  lng: proptypes.number,\r\n};\r\n\r\nexport default MapControls;\r\n","import React, { Component } from 'react';\r\nimport pt from 'prop-types';\r\nimport {\r\n  log,\r\n  jsonStringifyIsEqual as isEqual,\r\n} from '../../Helpers/helpers';\r\nimport { fetchByQuery, fetchByPost } from '../../Actions/search';\r\nimport { search } from '../../Reducers/search';\r\nimport queryString from 'qs';\r\nimport { withRouter } from 'react-router';\r\nimport Maps from '../../Maps';\r\nimport CONSTANTS from '../../Pages/findcare/constants';\r\nimport MapControls, { getBoundaryQuery } from './map-controls';\r\nimport Infowindow from './info-window';\r\nimport * as util from './helpers';\r\n\r\nclass Map extends Component {\r\n  // Google api reference\r\n  api = null;\r\n  map = null;\r\n\r\n  // We pass some custom config to the mapoption for the \"new\" map. Not used by the old one.\r\n  // https://developers.google.com/maps/documentation/javascript/reference/map#MapOptions\r\n  mapOptions = this.props.mapConfig.mapOption({ minZoom: 4 });\r\n\r\n  // Bind `this` so the function can be passed to platformui component.\r\n  handleClusterClick = this.handleClusterClick.bind(this);\r\n  fetchInitialPins = this.fetchInitialPins.bind(this);\r\n  onBoundsChanged = this.onBoundsChanged.bind(this);\r\n  afterFitBounds = this.afterFitBounds.bind(this);\r\n\r\n  //Set initial state\r\n  state = search({\r\n    bounds: util.getInitialBounds(this.props.SearchResult),\r\n    center: util.getDefaultCenter(this.props.SearchResult),\r\n    b: null, // fetch pins bounds\r\n    pinsFetchedCenter: null, // check if we should enable/disable area search button\r\n    boundarySearch: CONSTANTS.BOUNDARY_QUERY_ENABLED, // is area search button enabled\r\n    zoom: null, // keep track of zoom level\r\n    initialPinsFetched: false, // set to true after first fetch to pins api\r\n    googleApiLoaded: false, // set to true when api is loaded\r\n    mapIsLoaded: false,\r\n    isLoading: false, // set to true when fetching pins (handled in platform search class)\r\n    SearchHits: [], // locations to be displayed on map\r\n  });\r\n\r\n  dispatch(action) {\r\n    this.setState(search(this.getState(), action));\r\n  }\r\n\r\n  getState() {\r\n    return this.state;\r\n  }\r\n\r\n  fetchPins(query, config) {\r\n    let center = config.center || {};\r\n\r\n    if (this.props.IsPost) {\r\n      const hsaIds = util.getHsaIdsPiped(this.props.SearchResult);\r\n      const formData = new FormData();\r\n      formData.append('HSAIDs', hsaIds);\r\n      fetchByPost('/api/hjv/pins', formData)(\r\n        this.dispatch.bind(this),\r\n        this.getState.bind(this)\r\n      );\r\n    } else {\r\n      const qs = queryString.parse(query, {\r\n        ignoreQueryPrefix: true,\r\n      });\r\n      if (!qs.location) {\r\n        qs.location = '';\r\n      }\r\n      if (!qs.s) {\r\n        qs.s = CONSTANTS.SORT_DISTANCE;\r\n      }\r\n      // Overwrite lat and lng values in querystring.\r\n      // We use the map center and not user location center to calculate\r\n      // disatance when fetchning pins when not nearby search.\r\n      if (qs.nearby !== 'true') {\r\n        qs.lat = center.lat;\r\n        qs.lng = center.lng;\r\n      } else {\r\n        center.lat = qs.lat;\r\n        center.lng = qs.lng;\r\n      }\r\n      // t = Take\r\n      // Use take variable or use default take 10 pins.\r\n      qs.t = qs.t || 10;\r\n      fetchByQuery(`/api/hjv/pins?${queryString.stringify(qs)}`)(\r\n        this.dispatch.bind(this),\r\n        this.getState.bind(this)\r\n      );\r\n    }\r\n    // Save the center location to state when pins where fetched\r\n    // To toggle \"search in area\" button.\r\n    this.setState({\r\n      pinsFetchedCenter: center,\r\n    });\r\n  }\r\n\r\n  componentDidUpdate(prevProps, prevState) {\r\n    const qsPrev = queryString.parse(prevProps.location.search, {\r\n      ignoreQueryPrefix: true,\r\n    });\r\n    const qs = queryString.parse(this.props.location.search, {\r\n      ignoreQueryPrefix: true,\r\n    });\r\n    const [, setFindCareState] = this.props.findCareState;\r\n\r\n    // Remove pagination variable.\r\n    delete qsPrev.p;\r\n    delete qs.p;\r\n\r\n    if (\r\n      this.state.googleApiLoaded &&\r\n      this.state.mapIsLoaded &&\r\n      this.state.b &&\r\n      this.map &&\r\n      this.api &&\r\n      !this.state.initialPinsFetched &&\r\n      !this.state.isLoading\r\n    ) {\r\n      this.setState({ isLoading: true });\r\n      // Make sure we make the fetch when map has got good bounds.\r\n      // not a very good solution.\r\n      // TODO:\r\n      // we should check when the map has settled after the\r\n      // very first (10) pins are loaded.\r\n      setTimeout(() => {\r\n        this.fetchInitialPins({ map: this.map, api: this.api });\r\n      }, 300);\r\n    }\r\n\r\n    if (prevState.isLoading === true && this.state.isLoading === false) {\r\n      // log()(\"just loaded pins.\", this.props.SearchResult, this.state);\r\n\r\n      // If we need to modify search result inside the list component we\r\n      // can do this here.\r\n      let searchResultModifiers = {};\r\n      setFindCareState('searchResultModifiers', searchResultModifiers);\r\n\r\n      // We just finished loading pins.\r\n      // Check if current center is equal to the center where we fetched pins.\r\n      this.setState((state) => ({\r\n        // If the positions are equal we disable the boundarySearch button.\r\n        boundarySearch: isEqual(state.pinsFetchedCenter, state.center)\r\n          ? state.boundarySearch\r\n          : CONSTANTS.BOUNDARY_QUERY_ENABLED,\r\n        // Set pin fetch center to null.\r\n        pinsFetchedCenter: null,\r\n      }));\r\n    }\r\n\r\n    // We look at the query string if it has changed we fetch new pins.\r\n    // Not counting the pagination.\r\n    if (!isEqual(qsPrev, qs)) {\r\n      if (qs.b && qsPrev.b !== qs.b) {\r\n        // New bounds\r\n        setFindCareState('sortWithBoundary', null);\r\n      }\r\n\r\n      this.fetchPins(queryString.stringify(qs), {\r\n        center: this.state.center,\r\n      });\r\n    }\r\n\r\n    if (\r\n      prevProps.SearchResult.SearchHits !== this.props.SearchResult.SearchHits\r\n    ) {\r\n      const locations = [];\r\n      const hsaids = [];\r\n\r\n      const addLocation = (location) => {\r\n        if (!hsaids.includes(location.HsaId)) {\r\n          hsaids.push(location.HsaId);\r\n          locations.push(util.getLocationData(location));\r\n        }\r\n      };\r\n      this.state.SearchHits.forEach(addLocation);\r\n      this.props.SearchResult.SearchHits.forEach(addLocation);\r\n\r\n      // Only update state if we added any results.\r\n      if (locations.length > this.state.SearchHits.length) {\r\n        this.setState({\r\n          SearchHits: locations,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  handleMarkerClick(markerData, marker, map) {\r\n    Infowindow(markerData, marker, map);\r\n  }\r\n\r\n  handleClusterClick(clusterData, cluster, map) {\r\n    if (map.getZoom() > 7) {\r\n      const isEqPosition = clusterData.every(\r\n        util.isEqPositionTo(clusterData[0])\r\n      );\r\n\r\n      if (isEqPosition || map.getZoom() >= 18) {\r\n        //We have more then one marker on this position, build up request object\r\n        let hsaId = '';\r\n        clusterData.forEach((position) => {\r\n          hsaId = hsaId + `${position.data.HsaId}|`;\r\n        });\r\n\r\n        const pos = {\r\n          HsaId: hsaId,\r\n          Latitude: clusterData[0].data.Latitude,\r\n          Longitude: clusterData[0].data.Longitude,\r\n        };\r\n\r\n        Infowindow(pos, cluster.getMarkers()[0], map, true);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Will run after markers are drawn and directly after\r\n   * map.setCenter() and map.fitBounds()\r\n   */\r\n  afterFitBounds(map) {\r\n    // Make sure that the map does not get zoomed in to much\r\n    util.setMaxZoom(map);\r\n  }\r\n\r\n  fetchInitialPins({ map, api }) {\r\n    const [, setFindCareState] = this.props.findCareState;\r\n    if (!this.state.initialPinsFetched) {\r\n      let pinsQuery = queryString.parse(this.props.location.search, {\r\n        ignoreQueryPrefix: true,\r\n      });\r\n      // t = (Take) Number of items to get from server\r\n      // If we have a search with bounds we will plot all the pins on the map\r\n      pinsQuery.t = util.getTakeParam(this.props.SearchResult);\r\n      // p = (Page) Initial request is always first page\r\n      pinsQuery.p = 1;\r\n      let boundarySearch = CONSTANTS.BOUNDARY_QUERY_ENABLED;\r\n      //\r\n      // Location search without bounds is when we do not get hits inside the bounds\r\n      // so we get 10 [BatchSize] results.\r\n      if (\r\n        util.shouldDoInitialBoundaryQuery(pinsQuery, this.props.SearchResult)\r\n      ) {\r\n        // Get current bounds in the query format we send to backend.\r\n        // add/overwrite [b]\r\n        try {\r\n          pinsQuery.b = getBoundaryQuery(map, api);\r\n        } catch (e) {\r\n          console.log('error', e);\r\n        }\r\n        // Make sure sort component can use boundaries\r\n        setFindCareState('sortWithBoundary', pinsQuery.b);\r\n        // remove [g] and [z]\r\n        delete pinsQuery.g;\r\n        delete pinsQuery.z;\r\n        delete pinsQuery.nearby;\r\n      } else {\r\n        setFindCareState('sortWithBoundary', null);\r\n      }\r\n\r\n      if (pinsQuery.b) {\r\n        // disable the \"search in area button\"\r\n        boundarySearch = CONSTANTS.BOUNDARY_QUERY_DISABLED;\r\n      }\r\n\r\n      this.fetchPins(queryString.stringify(pinsQuery), {\r\n        center: map.getCenter().toJSON(),\r\n      });\r\n\r\n      this.setState({ initialPinsFetched: true, boundarySearch });\r\n    }\r\n  }\r\n\r\n  /** Check if pins are loading or search list is loading */\r\n  isLoading() {\r\n    return Boolean(this.props.SearchResult.isLoading || this.state.isLoading);\r\n  }\r\n\r\n  isNewCenter(map) {\r\n    return !isEqual(map.getCenter().toJSON(), this.state.center);\r\n  }\r\n\r\n  isZoomOut(map) {\r\n    return Boolean(map.getZoom() < this.state.zoom);\r\n  }\r\n\r\n  isBoundarySearchEnabled(map) {\r\n    return Boolean(\r\n      (this.isNewCenter(map) || this.isZoomOut(map)) && !this.isLoading()\r\n    );\r\n  }\r\n\r\n  handleMapChange = ({ map }) => {\r\n    this.setState((state) => ({\r\n      center: map.getCenter().toJSON(),\r\n      zoom: map.getZoom(),\r\n      boundarySearch: this.isBoundarySearchEnabled(map)\r\n        ? CONSTANTS.BOUNDARY_QUERY_ENABLED\r\n        : state.boundarySearch,\r\n    }));\r\n  };\r\n\r\n  onIdle = ({ map }) => {\r\n    this.handleMapChange({ map });\r\n  };\r\n\r\n  onBoundsChanged({ map }) {\r\n    const bounds = map.getBounds();\r\n    if (!this.state.b && bounds) {\r\n      this.setState({ b: bounds });\r\n    }\r\n  }\r\n\r\n  createEventListeners() {\r\n    return {\r\n      idle: this.onIdle,\r\n      zoom_changed: this.handleMapChange,\r\n      bounds_changed: this.onBoundsChanged,\r\n    };\r\n  }\r\n\r\n  render() {\r\n    const props = this.props;\r\n    const qs = queryString.parse(props.location.search, {\r\n      ignoreQueryPrefix: true,\r\n    });\r\n    // use zoom level from queryparam if used.\r\n    const zoomLevel = util.getZoomLevel(qs);\r\n    const googleMapEventListeners = this.createEventListeners();\r\n    const { lat, lng } = this.state.center;\r\n    // Do not fit bounds when we do \"search in area\" ie. queryparam \"b\" is set.\r\n    const disableFitBounds = Boolean(qs.b);\r\n    return (\r\n      <Maps\r\n        className=\"findcare-map__gmap\"\r\n        mapApiKey={props.apiKey}\r\n        modifiers={{\r\n          ...props.modifiers,\r\n          'findcare-map__gmap--api-loaded': this.state.googleApiLoaded,\r\n          'findcare-map__gmap--is-loading': this.state.isLoading,\r\n          'findcare-map__gmap--is-markers-loading': this.isLoading(),\r\n        }}\r\n        zoom={zoomLevel}\r\n        lat={lat}\r\n        lng={lng}\r\n        initialBounds={this.state.bounds}\r\n        disableFitBounds={disableFitBounds}\r\n        afterFitBounds={this.afterFitBounds}\r\n        useClusters={true}\r\n        eventListeners={googleMapEventListeners}\r\n        onMarkerClick={this.handleMarkerClick}\r\n        onClusterClick={this.handleClusterClick}\r\n        onMapInit={({ map }) => {\r\n          this.map = map;\r\n          this.setState({ mapIsLoaded: true });\r\n        }}\r\n        onGoogleAPILoad={(api) => {\r\n          //Ladda första 10 pinsen\r\n          const SearchHits = props.SearchResult.SearchHits.map(\r\n            util.getLocationData\r\n          );\r\n          this.api = api;\r\n\r\n          this.setState(\r\n            {\r\n              googleApiLoaded: true,\r\n              SearchHits,\r\n            },\r\n            () => {\r\n              log()('SearchHits state set', SearchHits);\r\n            }\r\n          );\r\n        }}\r\n        options={this.mapOptions}\r\n        markerOptions={props.mapConfig.markerOptions()}\r\n        Locations={this.state.SearchHits}\r\n        clusterMarkerIcons={props.mapConfig.clusterMarkerIcons()}\r\n      >\r\n        {(map, googleAPI) => (\r\n          <MapControls\r\n            {...props}\r\n            map={map}\r\n            isLoading={this.isLoading()}\r\n            googleAPI={googleAPI}\r\n            zoom={true}\r\n            boundarySearch={this.state.boundarySearch}\r\n            expand={props.expand}\r\n          />\r\n        )}\r\n      </Maps>\r\n    );\r\n  }\r\n}\r\n\r\nMap.propTypes = {\r\n  IsPost: pt.bool,\r\n\r\n  SearchResult: pt.shape({\r\n    BatchSize: pt.number,\r\n    SearchHits: pt.arrayOf(\r\n      pt.shape({\r\n        HsaId: pt.string,\r\n        Latitude: pt.number,\r\n        Longitude: pt.number,\r\n      })\r\n    ).isRequired,\r\n  }).isRequired,\r\n  /** Google maps api key */\r\n  apiKey: pt.string,\r\n  /** If true <MapControls> will show expand button */\r\n  expand: pt.bool,\r\n  /** From withRouter() in 'react-router' */\r\n  location: pt.object,\r\n};\r\n\r\nexport default withRouter(Map);\r\n","import classNames from 'classnames';\r\nimport T from 'prop-types';\r\nimport React, { useState } from 'react';\r\nimport Maps from '../../Maps';\r\n\r\nimport { CloseModalButton, ModalPanel, OpenModalButton } from '../../Modal';\r\nimport FullscreenModal from '../../Modal/fullscreen-modal';\r\nimport Infowindow from '../findcare-map/info-window';\r\nimport MapControls from '../findcare-map/map-controls';\r\n\r\nconst SearchListItem = (props) => {\r\n  let showServices =\r\n    props.HasLovContract ||\r\n    props.HasMvkServices ||\r\n    props.VaccinatesForFlu ||\r\n    props.VaccinatesForCovid19 ||\r\n    props.VideoOrChat ||\r\n    props.HasListing ||\r\n    props.HasListingQueue;\r\n\r\n  const [linkHasFocus, setLinkHasFocus] = useState(false);\r\n\r\n  const focusHandler = {\r\n    onFocus: () => setLinkHasFocus(true),\r\n    onBlur: () => setLinkHasFocus(false),\r\n  };\r\n\r\n  const wrapperClasses = classNames({\r\n    'findcare-search-list-item': true,\r\n    'findcare-search-list-item--focus': linkHasFocus,\r\n  });\r\n\r\n  return (\r\n    <div className={wrapperClasses}>\r\n      <div className=\"c-related__item\">\r\n        <div className=\"c-related__item__container c-related__item__container--no-z-index\">\r\n          <div className=\"row\">\r\n            <div className=\"medium-8 columns\">\r\n              <div className=\"findcare-search-list-item__info\">\r\n                <a {...focusHandler} href={props.Url}>\r\n                  <h3 className=\"findcare-search-list-item__heading\">\r\n                    {props.Heading}\r\n                  </h3>\r\n                  <p className=\"findcare-search-list-item__address\">\r\n                    {props.Address}\r\n                  </p>\r\n                </a>\r\n              </div>\r\n              <ul className=\"findcare-search-list-item__contact-list\">\r\n                {props.PhoneNumber && (\r\n                  <li>\r\n                    <a\r\n                      className=\"findcare-search-list-item__contact-list__phone\"\r\n                      href={`tel:${props.InternationalPhoneNumber}`}\r\n                    >\r\n                      <span>{props.PhoneNumber}</span>\r\n                    </a>\r\n                  </li>\r\n                )}\r\n                {props.Latitude && props.Longitude && (\r\n                  <li>\r\n                    <OpenModalButton\r\n                      className=\"findcare-fullscreen__modal-open\"\r\n                      id={`${props.HsaId}__findcare-fullscreen`}\r\n                      fullScreen={true}\r\n                    >\r\n                      <span>Visa på karta</span>\r\n                    </OpenModalButton>\r\n\r\n                    <FullscreenModal\r\n                      id={`${props.HsaId}__findcare-fullscreen`}\r\n                      classModifier=\"findcare-fullscreen\"\r\n                    >\r\n                      <Maps\r\n                        className=\"findcare-map__gmap\"\r\n                        modifiers={{ 'findcare-map__gmap--modal': true }}\r\n                        mapApiKey={props.apiKey}\r\n                        zoom={15}\r\n                        options={{\r\n                          disableDefaultUI: true,\r\n                        }}\r\n                        markerOptions={props.markerOptions}\r\n                        markerData={props}\r\n                        onMarkerClick={(markerData, marker, map) => {\r\n                          Infowindow(markerData, marker, map);\r\n                        }}\r\n                        lat={props.Latitude}\r\n                        lng={props.Longitude}\r\n                      >\r\n                        {(map, googleAPI) => (\r\n                          <MapControls\r\n                            map={map}\r\n                            googleAPI={googleAPI}\r\n                            zoom={true}\r\n                            plannerLink={true}\r\n                            plannerLinkText={\r\n                              props.Translations.biggermaptravelplanner\r\n                            }\r\n                            lat={props.Latitude}\r\n                            lng={props.Longitude}\r\n                          />\r\n                        )}\r\n                      </Maps>\r\n                    </FullscreenModal>\r\n                  </li>\r\n                )}\r\n                {props.HasMvkServices && props.hasAltLayout && (\r\n                  <li className=\"findcare-search-list-item__eservices\">\r\n                    <p>{props.Translations.haseservices}</p>\r\n                  </li>\r\n                )}\r\n              </ul>\r\n            </div>\r\n            <div className=\"medium-4 columns\">\r\n              {showServices && (\r\n                <ul className=\"findcare-search-list-item__list\">\r\n                  {props.HasLovContract && (\r\n                    <li className=\"findcare-search-list-item__list__item\">\r\n                      {props.LovContractLinkText}\r\n                      <OpenModalButton\r\n                        open={`${props.HsaId}__lov-contract`}\r\n                        id={`${props.HsaId}__lov-contract`}\r\n                        className={'findcare-tooltip__modal-open'}\r\n                      >\r\n                        <span />\r\n                      </OpenModalButton>\r\n                      <div className=\"findcare-tooltip__modal-container\">\r\n                        <ModalPanel whenActive={`${props.HsaId}__lov-contract`}>\r\n                          <div\r\n                            className={classNames({\r\n                              'findcare-tooltip__modal-panel': true,\r\n                            })}\r\n                          >\r\n                            <CloseModalButton\r\n                              id={`${props.HsaId}__lov-contract`}\r\n                              className={'findcare-tooltip__modal-close'}\r\n                            >\r\n                              <span className=\"show-for-sr\">Stäng</span>\r\n                            </CloseModalButton>\r\n\r\n                            <div className=\"findcare-tooltip__modal-panel__content\">\r\n                              <div\r\n                                dangerouslySetInnerHTML={{\r\n                                  __html: props.LovContractDescription,\r\n                                }}\r\n                              />\r\n                            </div>\r\n                          </div>\r\n                        </ModalPanel>\r\n                      </div>\r\n                    </li>\r\n                  )}\r\n                  {props.HasMvkServices && !props.hasAltLayout && (\r\n                    <li className=\"findcare-search-list-item__list__item\">\r\n                      <p>{props.Translations.haseservices}</p>\r\n                    </li>\r\n                  )}\r\n                  {props.HasListing && (\r\n                    <li className=\"findcare-search-list-item__list__item\">\r\n                      <p>\r\n                        {props.HasListingQueue\r\n                          ? props.Translations.haslistingqueue\r\n                          : props.Translations.haslisting}\r\n                      </p>\r\n                    </li>\r\n                  )}\r\n                  {props.VaccinatesForCovid19 && (\r\n                    <li className=\"findcare-search-list-item__list__item\">\r\n                      <p> {props.Translations.vaccinatescovid19}</p>\r\n                    </li>\r\n                  )}\r\n                  {props.VaccinatesForFlu && (\r\n                    <li className=\"findcare-search-list-item__list__item\">\r\n                      <p>{props.Translations.vaccinatesflu}</p>\r\n                    </li>\r\n                  )}\r\n                  {props.VideoOrChat && (\r\n                    <li className=\"findcare-search-list-item__list__item\">\r\n                      <p>{props.Translations.videoorchat}</p>\r\n                    </li>\r\n                  )}\r\n                </ul>\r\n              )}\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nSearchListItem.propTypes = {\r\n  Address: T.string,\r\n  Heading: T.string,\r\n  Url: T.string,\r\n  HasLovContract: T.bool,\r\n  HasMvkServices: T.bool,\r\n  HsaId: T.string,\r\n  Latitude: T.number,\r\n  Longitude: T.number,\r\n  LovContractDescription: T.string,\r\n  LovContractLinkText: T.string,\r\n  PhoneNumber: T.string,\r\n  Translations: T.shape({\r\n    vaccinatesflu: T.string,\r\n    vaccinatescovid19: T.string,\r\n    haseservices: T.string,\r\n    haslisting: T.string,\r\n    haslistingqueue: T.string,\r\n  }),\r\n  VaccinatesForFlu: T.bool,\r\n  VaccinatesForCovid19: T.bool,\r\n  HasListing: T.bool,\r\n  HasListingQueue: T.bool,\r\n  apiKey: T.string,\r\n  markerImage: T.string,\r\n};\r\n\r\nexport default SearchListItem;\r\n","import React, { useState } from 'react';\r\nimport SortLink from './sort-link';\r\nimport queryString from 'qs';\r\nimport classNames from 'classnames';\r\nimport withGeolocation from '../../Containers/withGeolocation';\r\nimport CONSTANTS from '../../Pages/findcare/constants';\r\nimport * as utils from '../findcare-map/helpers';\r\n\r\nfunction trimStringOrArrayHead(s) {\r\n  if (typeof s === 'string') {\r\n    return s.trim();\r\n  }\r\n  return s[0].trim();\r\n}\r\n\r\nconst isEmpty = (value) => {\r\n  if (value && trimStringOrArrayHead(value) !== '') return false;\r\n  return true;\r\n};\r\n\r\nconst sortByRelVisible = (query) => !isEmpty(query.q);\r\n\r\nconst GeoLocationErrorLink = () => {\r\n  const [isHidden, setIsHidden] = useState(true);\r\n\r\n  const handleClick = () => {\r\n    setIsHidden(!isHidden);\r\n  };\r\n\r\n  return (\r\n    <li>\r\n      <button\r\n        aria-expanded={!isHidden}\r\n        aria-controls=\"findcare-sort-error\"\r\n        className=\"findcare-sort__link\"\r\n        onClick={() => handleClick()}\r\n      >\r\n        Avstånd\r\n      </button>\r\n      <div\r\n        id=\"findcare-sort-error\"\r\n        aria-hidden={isHidden}\r\n        className={classNames({\r\n          'findcare-sort__error': true,\r\n          'findcare-sort__error--is-visible': !isHidden,\r\n        })}\r\n      >\r\n        Sortering på avstånd är inte möjligt eftersom vi inte kan fastställa din\r\n        position. Se till att aktivera platstjänster.\r\n      </div>\r\n    </li>\r\n  );\r\n};\r\n\r\nconst hasLatLng = (query) => query.lat && query.lng;\r\n\r\nconst CoordsContainer = (props) => {\r\n  if ((props.coords && props.coords.latitude) || props.query.g) {\r\n    const o = {\r\n      query: {\r\n        lat: props.coords && props.coords.latitude,\r\n        lng: props.coords && props.coords.longitude,\r\n        q: props.query ? props.query.g : undefined,\r\n      },\r\n    };\r\n    return <SortLink {...o} {...props} />;\r\n  }\r\n\r\n  return <GeoLocationErrorLink {...props} />;\r\n};\r\n\r\nconst DistanceSortLink = (props) => {\r\n  if (hasLatLng(props.query)) return <SortLink {...props} />;\r\n\r\n  const DistanceSortLinkContainer = withGeolocation(CoordsContainer);\r\n  return <DistanceSortLinkContainer {...props} />;\r\n};\r\n\r\nconst FindCareSort = (props) => {\r\n  if (\r\n    !utils.shouldDisplaySort({\r\n      SearchResult: props.SearchResult,\r\n      IsPost: props.IsPost,\r\n    })\r\n  ) {\r\n    return null;\r\n  }\r\n  const [findCareState] = props.findCareState;\r\n  const query = queryString.parse(props.location.search, {\r\n    ignoreQueryPrefix: true,\r\n  });\r\n  if (findCareState.sortWithBoundary) {\r\n    query.b = findCareState.sortWithBoundary;\r\n    delete query.g;\r\n  }\r\n\r\n  //Remove page param\r\n  if (query.p) delete query.p;\r\n\r\n  // Show name sort only when we have bounds.\r\n  // Other case is we sort all of sweden and that does not make sence.\r\n  // (If we are searching all of sweden we do get bounds).\r\n  const showNameSort = true; // props.SearchResult.Bounds;\r\n\r\n  return (\r\n    <ul className=\"findcare-sort\">\r\n      <li>{props.Translations.sortlabel}</li>\r\n      <DistanceSortLink\r\n        s={query.s}\r\n        query={query}\r\n        type={CONSTANTS.SORT_DISTANCE}\r\n      >\r\n        {props.Translations.distance}\r\n      </DistanceSortLink>\r\n      {sortByRelVisible(query) && (\r\n        <SortLink s={query.s} query={query} type={CONSTANTS.SORT_REL}>\r\n          {props.Translations.relevance}\r\n        </SortLink>\r\n      )}\r\n      {showNameSort && (\r\n        <SortLink\r\n          s={!query.s ? CONSTANTS.SORT_NAME : query.s}\r\n          query={query}\r\n          type={CONSTANTS.SORT_NAME}\r\n        >\r\n          {props.Translations.ao}\r\n        </SortLink>\r\n      )}\r\n    </ul>\r\n  );\r\n};\r\n\r\nexport default FindCareSort;\r\n","import React from 'react';\r\nimport T from 'prop-types';\r\nimport queryString from 'qs';\r\nimport { Link } from 'react-router-dom';\r\nimport * as utils from '../findcare-map/helpers';\r\n\r\nconst SortLink = (props) => {\r\n  if (props.s === props.type) return <li>{props.children}</li>;\r\n\r\n  const query = {\r\n    ...props.query,\r\n    s: props.type,\r\n  };\r\n\r\n  if (props.coords && !query.g) {\r\n    query.lat = props.coords.latitude;\r\n    query.lng = props.coords.longitude;\r\n  }\r\n\r\n  query.heading = utils.sanitizeHeading(props.heading);\r\n\r\n  return (\r\n    <li>\r\n      <Link to={`?${queryString.stringify(query)}`}>{props.children}</Link>\r\n    </li>\r\n  );\r\n};\r\n\r\nSortLink.propTypes = {\r\n  heading: T.string,\r\n  children: T.node,\r\n  type: T.string,\r\n  s: T.string,\r\n  query: T.object,\r\n  coords: T.shape({\r\n    latitude: T.number,\r\n    longitude: T.number,\r\n  }),\r\n};\r\n\r\nexport default SortLink;\r\n","import React from 'react';\r\nimport T from 'prop-types';\r\nimport LinkList from '../Linklist';\r\n\r\n/**\r\n * Will wrap a `<LinkList>` component with a `div.info-box`\r\n * and a `h2` heading inside `div.info-box__heading`.\r\n *\r\n */\r\nconst InfoBox = (props) => {\r\n  const { InfoText, LinkCollection } = props;\r\n  return (\r\n    <div className=\"info-box\">\r\n      {InfoText && (\r\n        <div className=\"info-box__heading\">\r\n          <h2>{InfoText}</h2>\r\n        </div>\r\n      )}\r\n      {LinkCollection && <LinkList Links={LinkCollection} />}\r\n    </div>\r\n  );\r\n};\r\n\r\nInfoBox.propTypes = {\r\n  /** Heading */\r\n  InfoText: T.string,\r\n  /** Will be passed as prop `Links` to `<LinkList>` component */\r\n  LinkCollection: T.array,\r\n};\r\n\r\nexport default InfoBox;\r\n","import { string } from 'prop-types';\r\nimport { useEffect } from 'react';\r\n\r\nconst MatomoTrackDimensions = ({ Region }) => {\r\n  useEffect(() => {\r\n    const sendEventData = (isAppUser, region) => {\r\n      if (window?._paq) {\r\n        window._paq.push(\r\n          ['setCustomDimension', 1, region],\r\n          ['setCustomDimension', 2, isAppUser]\r\n        );\r\n      }\r\n    };\r\n\r\n    if (\r\n      typeof window !== 'undefined' &&\r\n      window?.navigator?.userAgent.includes('1177-appen')\r\n    ) {\r\n      sendEventData('true', Region);\r\n    } else if (typeof window !== 'undefined') {\r\n      sendEventData('false', Region);\r\n    }\r\n  }, []);\r\n  return null;\r\n};\r\n\r\nMatomoTrackDimensions.propTypes = {\r\n  Region: string,\r\n};\r\n\r\nexport default MatomoTrackDimensions;\r\n","import React, { Fragment } from 'react';\r\nimport { ModalPanel, CloseModalButton } from './index';\r\n\r\nconst FullscreenModalInner = ({\r\n  classModifier,\r\n  id,\r\n  children,\r\n  showCloseModalText,\r\n  ...props\r\n}) => {\r\n  return (\r\n    <div className={`${classModifier}__modal-container`}>\r\n      <div className={`${classModifier}__modal-panel`}>\r\n        <div className={`${classModifier}__modal-panel__content`}>\r\n          <CloseModalButton id={id} className={`${classModifier}__modal-close`}>\r\n            <span className={showCloseModalText ? classModifier + '__modal-close__text' : \"show-for-sr\"}>Stäng</span>\r\n          </CloseModalButton>\r\n          {React.cloneElement(children, { ...props })}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nconst FullscreenModal = ({\r\n  classModifier,\r\n  id,\r\n  children,\r\n  closeModal,\r\n  showCloseModalText = false,\r\n  hideWithCss = false,\r\n}) => {\r\n  return (\r\n    <Fragment>\r\n      <ModalPanel hideWithCss={hideWithCss} whenActive={id}>\r\n        <FullscreenModalInner\r\n          classModifier={classModifier}\r\n          closeModal={closeModal}\r\n          showCloseModalText={showCloseModalText}\r\n        >\r\n          {children}\r\n        </FullscreenModalInner>\r\n      </ModalPanel>\r\n    </Fragment>\r\n  );\r\n};\r\n\r\nexport default FullscreenModal;\r\n","import React, { useState, useEffect, createContext } from 'react';\r\nimport withKeepTabFocus from '../Containers/withKeepTabFocus';\r\nimport classNames from 'classnames';\r\n\r\nconst context = createContext({});\r\n\r\nconst { Provider, Consumer } = context;\r\n\r\nconst OpenModalButton = ({\r\n  id,\r\n  children,\r\n  className,\r\n  clickCallback,\r\n  fullScreen,\r\n  tabIndex,\r\n  ariaLabel,\r\n}) => {\r\n  const clickHandler = (changeModal) => {\r\n    changeModal(id);\r\n    if (clickCallback !== undefined) clickCallback();\r\n    if (fullScreen) document.body.classList.add('no-scroll');\r\n  };\r\n\r\n  return (\r\n    <Consumer>\r\n      {({ changeModal, activeModalId }) => (\r\n        <button\r\n          tabIndex={tabIndex}\r\n          data-buttonid={`open${id}`}\r\n          id={`button-${id}--opener`}\r\n          type=\"button\"\r\n          className={classNames({\r\n            [`${className}`]: true,\r\n            [`${className}--open`]: activeModalId === id,\r\n          })}\r\n          aria-label={ariaLabel}\r\n          onClick={() => clickHandler(changeModal)}\r\n        >\r\n          {children}\r\n        </button>\r\n      )}\r\n    </Consumer>\r\n  );\r\n};\r\n\r\nconst CloseModalButton = ({ children, className, id }) => (\r\n  <Consumer>\r\n    {({ closeModal }) => (\r\n      <button\r\n        autoFocus={id}\r\n        type=\"button\"\r\n        className={className}\r\n        onClick={() => closeModal(id)}\r\n      >\r\n        {children}\r\n      </button>\r\n    )}\r\n  </Consumer>\r\n);\r\n\r\nconst ModalPanelInner = withKeepTabFocus(({ children, ...props }) => {\r\n  return React.cloneElement(children, { ...props });\r\n});\r\n\r\nconst ModalPanel = ({ whenActive, children, hideWithCss }) => (\r\n  <Consumer>\r\n    {({ activeModalId }) =>\r\n      activeModalId === whenActive || hideWithCss ? (\r\n        <div\r\n          className={classNames({\r\n            'modal-is-closed': activeModalId !== whenActive,\r\n          })}\r\n        >\r\n          <ModalPanelInner>{children}</ModalPanelInner>\r\n        </div>\r\n      ) : null\r\n    }\r\n  </Consumer>\r\n);\r\n\r\nconst Modal = (props) => {\r\n  const [activeModalId, setActiveModalId] = useState('');\r\n  const fullScreenModal = props.fullScreen;\r\n\r\n  const changeModal = (newModalId) => {\r\n    setActiveModalId(activeModalId === newModalId ? '' : newModalId);\r\n  };\r\n\r\n  const closeModal = (id) => {\r\n    setActiveModalId('');\r\n    if (\r\n      props.noScroll === true &&\r\n      document.body.classList.contains('no-scroll')\r\n    )\r\n      document.body.classList.remove('no-scroll');\r\n    if (document.querySelector(`[data-buttonid='open${id}']`))\r\n      document.querySelector(`[data-buttonid='open${id}']`).focus();\r\n  };\r\n\r\n  const escCloseHandler = (e) => {\r\n    if (activeModalId !== '') {\r\n      if (e.keyCode === 27) {\r\n        e.preventDefault();\r\n        closeModal();\r\n      }\r\n    }\r\n    return null;\r\n  };\r\n\r\n  const handleClick = (e) => {\r\n    if (activeModalId !== '') {\r\n      if (e.target.className === 'category-lists-modal__modal-panel') {\r\n        closeModal();\r\n      }\r\n    }\r\n    return null;\r\n  };\r\n\r\n  useEffect(() => {\r\n    document.addEventListener('keydown', (e) => escCloseHandler(e));\r\n    document.addEventListener('mousedown', (e) => handleClick(e));\r\n  }, [activeModalId]);\r\n\r\n  useEffect(() => {\r\n    return () => {\r\n      document.removeEventListener('keydown', escCloseHandler());\r\n      document.removeEventListener('mousedown', handleClick());\r\n    };\r\n  }, []);\r\n\r\n  return (\r\n    <Provider\r\n      value={{\r\n        activeModalId,\r\n        fullScreenModal,\r\n        changeModal,\r\n        closeModal,\r\n      }}\r\n    >\r\n      {props.children}\r\n    </Provider>\r\n  );\r\n};\r\n\r\nModal.defaultProps = {\r\n  noScroll: true,\r\n};\r\n\r\nexport default Modal;\r\nexport { OpenModalButton, CloseModalButton, ModalPanel, Consumer };\r\n","export default {\r\n  SORT_DISTANCE: 'distance',\r\n  SORT_NAME: 'name',\r\n  SORT_REL: 'rel',\r\n  BOUNDARY_QUERY_ENABLED: 'enabled',\r\n  BOUNDARY_QUERY_DISABLED: 'disabled',\r\n};\r\n","import React, { useState } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\nimport Breadcrumb from '../../Breadcrumb';\r\nimport InfoBox from '../../InfoBox';\r\nimport Modal from '../../Modal';\r\nimport MatomoTrackSearch from '../../Matomo/matomo-track-search';\r\nimport FindCareHeader from '../../FindCare/findcare-header';\r\nimport FindCareForm from '../../FindCare/findcare-form';\r\nimport SearchList from './search-list';\r\nimport queryString from 'qs';\r\n\r\nconst FindCarePage = (props) => {\r\n  const location = useLocation();\r\n  const qs = queryString.parse(location.search, {\r\n    ignoreQueryPrefix: true,\r\n  });\r\n\r\n  // Shared state handling for Find Care components.\r\n  // TODO: useContext\r\n  const [findCareState, _setFindCareState] = useState({\r\n    searchResultModifiers: {},\r\n  });\r\n\r\n  const setFindCareState = (key, value) => {\r\n    if (!key || typeof key !== 'string') {\r\n      throw new Error('You need to pass a valid key to find care state.');\r\n    }\r\n    _setFindCareState((state) => ({\r\n      ...state,\r\n      [key]: value,\r\n    }));\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <div className=\"row\">\r\n        <div className=\"columns\">\r\n          <Breadcrumb {...props.Breadcrumbs} Language={props.Language} />\r\n        </div>\r\n      </div>\r\n      <main className=\"main\">\r\n        <div className=\"row\">\r\n          <Modal>\r\n            <div id=\"content\">\r\n              <div className=\"small-12 columns\">\r\n                <FindCareHeader {...props.Content} />\r\n                <FindCareForm {...props} />\r\n              </div>\r\n\r\n              <SearchList\r\n                mapConfig={props.mapConfig}\r\n                findCareState={[findCareState, setFindCareState]}\r\n                SearchResult={props.Content && props.Content.SearchResult}\r\n                location={props.location}\r\n                IsPost={props.Content.IsPost}\r\n                apiConfig={props.apiConfig}\r\n                Translations={props.Content && props.Content.Translations}\r\n                EmptySearchResultText={props.Content.EmptySearchResultText}\r\n                hasAltLayout={props.hasAltLayout}\r\n              />\r\n            </div>\r\n          </Modal>\r\n          {props.Content &&\r\n            (props.Content.InfoText || props.Content.LinkCollection) && (\r\n              <div className=\"small-12 columns\">\r\n                <InfoBox {...props.Content} />\r\n              </div>\r\n            )}\r\n        </div>\r\n      </main>\r\n      <MatomoTrackSearch\r\n        Search={qs?.q}\r\n        SearchCategory={qs?.caretype || 'Alla mottagningar'}\r\n        SearchHits={props.Content?.SearchResult?.TotalHits}\r\n        SearchLocation={qs?.location}\r\n      />\r\n    </>\r\n  );\r\n};\r\n\r\nexport default FindCarePage;\r\n","import React from 'react';\r\nimport queryString from 'qs';\r\nimport PropTypes from 'prop-types';\r\nimport { Redirect as ReactRouterRedirect } from 'react-router-dom';\r\n\r\nimport { log } from '../../Helpers/helpers';\r\nimport withGeoLocation from '../../Containers/withGeolocation';\r\nimport * as utils from '../../FindCare/findcare-map/helpers';\r\n\r\nimport CONSTANTS from './constants';\r\n\r\nconst RedirectWithCoords = (props) => {\r\n  const { coords, location, geoLocationError } = props;\r\n  let qs = queryString.parse(location.search, {\r\n    ignoreQueryPrefix: true,\r\n  });\r\n  if (coords === null) {\r\n    if (geoLocationError) {\r\n      delete qs.nearby;\r\n      qs.s = CONSTANTS.SORT_NAME;\r\n      qs.lat = '';\r\n      qs.lng = '';\r\n    } else {\r\n      // while wating for geoLocation\r\n      return null;\r\n    }\r\n  } else {\r\n    qs.s = CONSTANTS.SORT_DISTANCE;\r\n    qs.lat = coords.latitude;\r\n    qs.lng = coords.longitude;\r\n  }\r\n  const url = `${location.pathname}?${queryString.stringify(qs)}`;\r\n\r\n  log()(`Redirect to: %c${url}`, 'font-weight: bold; color: #007;', qs);\r\n  return <ReactRouterRedirect to={url} />;\r\n};\r\n\r\nconst RedirectToLatLng = ({ qs, location }) => {\r\n  if (!utils.shouldRedirectToLatLng(qs)) return null;\r\n  // Use container to access lat & lng props.\r\n  const Redirect = withGeoLocation(RedirectWithCoords);\r\n  return <Redirect location={location} />;\r\n};\r\n\r\nRedirectToLatLng.propTypes = {\r\n  qs: PropTypes.object,\r\n  location: PropTypes.object,\r\n};\r\n\r\nexport default RedirectToLatLng;\r\n","import React, { Fragment } from 'react';\r\nimport classNames from 'classnames';\r\nimport { shape, object, string, bool, number } from 'prop-types';\r\nimport queryString from 'qs';\r\n\r\nimport Alert from '../../Alert';\r\nimport List from '../../SearchBlock/list';\r\nimport Spinner from '../../Spinner';\r\nimport withSearch from '../../Containers/withSearch';\r\nimport Pagination from '../../Pagination';\r\n\r\nimport FindCareMap from '../../FindCare/findcare-map';\r\nimport FindCareSort from '../../FindCare/findcare-sort';\r\nimport SearchListItem from '../../FindCare/findcare-search-list-item';\r\nimport RedirectToLatLng from './redirect';\r\nimport * as utils from '../../FindCare/findcare-map/helpers';\r\n\r\nconst getHtml = (html) => ({ __html: html });\r\n\r\nconst SearchList = (props) => {\r\n  const {\r\n    Translations,\r\n    SearchResult,\r\n    findCareState,\r\n    apiConfig,\r\n    EmptySearchResultText,\r\n    location,\r\n  } = props;\r\n\r\n  const qs = queryString.parse(location.search, {\r\n    ignoreQueryPrefix: true,\r\n  });\r\n\r\n  const searchResult = {\r\n    ...SearchResult,\r\n    ...findCareState[0].searchResultModifiers,\r\n  };\r\n\r\n  // Translations is from the scope of this SearchList component.\r\n  // ListProps are sent from the child where the component/function is run.\r\n  const ListItem = (listProps) => (\r\n    <SearchListItem\r\n      {...listProps}\r\n      markerOptions={props.mapConfig.markerOptions()}\r\n      apiKey={apiConfig.googleMapsClientApiKey}\r\n      Translations={Translations}\r\n      hasAltLayout={props.hasAltLayout}\r\n    />\r\n  );\r\n\r\n  let heading = searchResult.isLoading ? '...' : searchResult.Heading;\r\n  if (searchResult.HasZeroHits) {\r\n    heading = Translations.zerohits;\r\n  }\r\n  return (\r\n    <div\r\n      className={classNames({\r\n        'is-loading': searchResult.isLoading,\r\n      })}\r\n    >\r\n      {\r\n        // When url is calling for nearby but we have no lat and lng\r\n        // we will try to get geolocastion and redirect user\r\n        // to a search query with lat and lng.\r\n      }\r\n      <RedirectToLatLng qs={qs} location={props.location} />\r\n      <div className=\"row\">\r\n        <div className=\"large-8 large-centered columns\">\r\n          \r\n        {SearchResult.IsSimpleFallbackSearch && (\r\n            <Alert type={'warning'} alert={props}>\r\n              {props.SearchResult.ResultDisclaimer}\r\n            </Alert>\r\n          )}\r\n\r\n          {searchResult.Heading && utils.shouldDisplayMap(qs, searchResult) && (\r\n            <div className=\"c-searchlist__heading__container\">\r\n              <h2\r\n                className=\"c-searchlist__heading\"\r\n                dangerouslySetInnerHTML={getHtml(\r\n                  utils.parseSanitizedHeading(heading)\r\n                )}\r\n              ></h2>\r\n            </div>\r\n          )}\r\n\r\n          <FindCareMap\r\n            findCareState={findCareState}\r\n            mapConfig={props.mapConfig}\r\n            apiKey={props.apiConfig.googleMapsClientApiKey}\r\n            expand={true}\r\n            SearchResult={searchResult}\r\n            IsPost={props.IsPost}\r\n            Translations={Translations}\r\n          />\r\n\r\n          {searchResult.HasZeroHits && (\r\n            <>\r\n              <Alert Modifiers={{ 'findcare-zerohits': true }} type=\"warning\">\r\n                <p\r\n                  className=\"findcare-zerohits__text\"\r\n                  dangerouslySetInnerHTML={getHtml(SearchResult.Heading)}\r\n                />\r\n              </Alert>\r\n              {EmptySearchResultText && (\r\n                <div\r\n                  className=\"findcare-zerohits__body\"\r\n                  dangerouslySetInnerHTML={getHtml(EmptySearchResultText)}\r\n                ></div>\r\n              )}\r\n            </>\r\n          )}\r\n\r\n          {!searchResult.HasZeroHits && (\r\n            <Fragment>\r\n              <FindCareSort\r\n                findCareState={props.findCareState}\r\n                SearchResult={searchResult}\r\n                location={props.location}\r\n                IsPost={props.IsPost}\r\n                Translations={props.Translations}\r\n              />\r\n\r\n              <List\r\n                {...searchResult}\r\n                query={qs.q}\r\n                CustomSearchListItem={ListItem}\r\n              >\r\n                <Pagination\r\n                  onClick={() =>\r\n                    document.getElementById('search-list-last').focus()\r\n                  }\r\n                  {...searchResult}\r\n                  Spinner={\r\n                    <Spinner Modifiers={{ 'c-spinner--search': true }} />\r\n                  }\r\n                >\r\n                  {searchResult && searchResult.BatchText}\r\n                </Pagination>\r\n              </List>\r\n            </Fragment>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nSearchList.propTypes = {\r\n  IsPost: bool,\r\n  Translations: shape({\r\n    zerohits: string,\r\n  }),\r\n  apiConfig: shape({\r\n    googleMapsClientApiKey: string,\r\n  }),\r\n  SearchResult: shape({\r\n    isLoading: bool,\r\n    BatchText: string,\r\n    Heading: string,\r\n    Query: string,\r\n    TotalHits: number,\r\n    HasZeroHits: bool,\r\n  }),\r\n  /** From react-router withRouter() higher order component */\r\n  location: object,\r\n};\r\n\r\nexport default withSearch(SearchList, null, '/api/hjv/search');\r\n","import React from 'react';\r\nimport T from 'prop-types';\r\n\r\nfunction Button(props) {\r\n  const { text, textOnlySr, ...rest } = props;\r\n  return (\r\n    <button {...rest}>\r\n      {textOnlySr ? <span className=\"show-for-sr\">{text}</span> : text}\r\n    </button>\r\n  );\r\n}\r\n\r\nButton.defaultProps = {\r\n  type: 'button',\r\n};\r\n\r\nButton.propTypes = {\r\n  type: T.oneOf(['button', 'submit', 'reset']),\r\n  onClick: T.func,\r\n  textOnlySr: T.bool,\r\n  text: T.node,\r\n};\r\n\r\nexport default Button;\r\n","import React from 'react';\r\n\r\nconst ErrorMessage = (props) => (\r\n  <div className={props.className}>{props.text}</div>\r\n);\r\n\r\nexport default ErrorMessage;\r\n","import React, { useRef, useEffect, useCallback } from 'react';\r\nimport T from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport Spinner from '../Spinner';\r\nimport Suggestions from './suggestions';\r\nimport useOpenClose from './useOpenClose';\r\nimport Button from './button';\r\nimport ErrorMessage from './error';\r\n\r\nfunction Field(props) {\r\n  const {\r\n    placeholder,\r\n    label,\r\n    labelClassName,\r\n    id,\r\n    value,\r\n    name,\r\n    isLoading,\r\n    highlightSelection,\r\n    inputClassName,\r\n    innerClassName,\r\n    hightlightTitle,\r\n    className,\r\n  } = props;\r\n\r\n  // Create DOM refs to elements\r\n  const containerElement = useRef(null);\r\n  const inputElement = useRef(null);\r\n  const suggestionsElement = useRef(null);\r\n\r\n  const [\r\n    suggestionIsOpen,\r\n    openSuggestion,\r\n    closeSuggestion,\r\n    setSuggestionIsOpen,\r\n  ] = useOpenClose(false);\r\n\r\n  useEffect(() => {\r\n    props.setStatus({ isLoading: isLoading });\r\n  }, [isLoading]);\r\n\r\n  // About why useCallback here\r\n  // https://reactjs.org/docs/hooks-faq.html#is-it-safe-to-omit-functions-from-the-list-of-dependencies\r\n  const delayedClose = useCallback(\r\n    () => setTimeout(() => closeSuggestion(), 0),\r\n    [closeSuggestion]\r\n  );\r\n\r\n  const handleBlur = (e) => {\r\n    props.onBlur(e);\r\n  };\r\n\r\n  const handleChange = (e) => {\r\n    // from find-care-form\r\n    props.onValueChange(e);\r\n    // Autocomplete\r\n    props.handleChange(e);\r\n    // Formik\r\n    props.onChange(e);\r\n    openSuggestion();\r\n  };\r\n  /* callback when clear field is clicked */\r\n  const clearField = () => {\r\n    if (props.clearField) {\r\n      props.clearField();\r\n    }\r\n    props.setValue(name, '');\r\n  };\r\n\r\n  const handleClickOutside = (el, fn) => (e) => {\r\n    // Do nothing when we click inside the element\r\n    if (el && el.current && el.current.contains(e.target)) {\r\n      return;\r\n    }\r\n    fn();\r\n  };\r\n\r\n  const getItems = (props) => {\r\n    if (typeof props.getItems === 'function') {\r\n      return props.getItems(props);\r\n    }\r\n    return props.items;\r\n  };\r\n\r\n  const b = Boolean(value.length > 0);\r\n\r\n  const displayZeroHitsMessage = Boolean(\r\n    props.zeroHits && props.zeroHitsMessage\r\n  );\r\n\r\n  const suggestionsProps = {\r\n    highlightSelection: highlightSelection && props.isSelected,\r\n    hightlightTitle,\r\n    id: `suggestions_${name}`,\r\n    ref: suggestionsElement,\r\n    className: `${className}__autocomplete`,\r\n    selected: value,\r\n    isDefault: !b,\r\n    useCloseButton: props.suggestCloseButton,\r\n    isOpen: suggestionIsOpen && !displayZeroHitsMessage && !props.error,\r\n    footer: props.suggestionsFooter,\r\n    items: b ? getItems(props) : props.defaultSuggestions,\r\n    defaultItems: props.defaultSuggestions,\r\n    defaultTitle: props.defaultSuggestionsTitle,\r\n    title: b ? props.suggestionsTitle : props.defaultSuggestionsTitle,\r\n  };\r\n\r\n  useEffect(() => {\r\n    document.addEventListener(\r\n      'mousedown',\r\n      handleClickOutside(containerElement, delayedClose)\r\n    );\r\n    return () => {\r\n      document.removeEventListener(\r\n        'mousedown',\r\n        handleClickOutside(containerElement, delayedClose)\r\n      );\r\n    };\r\n  }, [containerElement, delayedClose]);\r\n\r\n  const hasDefaults = props.defaultSuggestions.length > 0;\r\n\r\n  const outerClassName = classnames(className, {\r\n    [`${className}--is-loading`]: value.length > 0 && props.isLoading,\r\n    [`${className}--has-defaults`]: hasDefaults,\r\n    [`${className}--has-error`]: props.error,\r\n    [`${className}--has-value`]: value.length > 0,\r\n    [`${className}--suggestions-is-open`]: suggestionIsOpen && value.length > 2,\r\n  });\r\n\r\n  useEffect(() => {\r\n    if (\r\n      !props.doNotAutoselectFirstItemOnClose &&\r\n      !suggestionIsOpen &&\r\n      !props.isSelected &&\r\n      props.value.length >= props.minStringLength\r\n    ) {\r\n      const items = getItems(props).filter((item) => !item.excludeAutoselect);\r\n      if (items.length > 0) {\r\n        const item = items[0];\r\n        props.setValue(name, item.text || item.value);\r\n        if (typeof props.onSuggestionSelect === 'function') {\r\n          props.onSuggestionSelect(item);\r\n        }\r\n      }\r\n    }\r\n  }, [suggestionIsOpen]);\r\n\r\n  useEffect(() => {\r\n    if (\r\n      containerElement &&\r\n      containerElement.current &&\r\n      !containerElement.current.contains(props.activeElement)\r\n    ) {\r\n      if (suggestionIsOpen) {\r\n        delayedClose();\r\n      }\r\n    }\r\n  }, [props.activeElement]);\r\n\r\n  return (\r\n    <div className={outerClassName} ref={containerElement} id={`field_${name}`}>\r\n      <label className={labelClassName} htmlFor={id || name}>\r\n        {label}\r\n      </label>\r\n      <div className={innerClassName}>\r\n        <input\r\n          aria-controls={suggestionsProps.id}\r\n          className={inputClassName}\r\n          ref={inputElement}\r\n          id={id || name}\r\n          name={name}\r\n          value={value}\r\n          onChange={handleChange}\r\n          onBlur={handleBlur}\r\n          placeholder={placeholder}\r\n          type=\"text\"\r\n          autoComplete=\"off\"\r\n        />\r\n\r\n        {props.error && (\r\n          <ErrorMessage\r\n            className={props.errorClassName || `${className}__error`}\r\n            text={props.error}\r\n          />\r\n        )}\r\n        {displayZeroHitsMessage && (\r\n          <ErrorMessage\r\n            className={props.errorClassName || `${className}__error`}\r\n            text={props.zeroHitsMessage}\r\n          />\r\n        )}\r\n\r\n        <Suggestions\r\n          {...suggestionsProps}\r\n          close={(event) => {\r\n            delayedClose();\r\n            event.target.blur();\r\n          }}\r\n          handleClick={(item) => (event) => {\r\n            props.setValue(name, item.value);\r\n            delayedClose();\r\n            event.target.blur();\r\n            if (typeof props.onSuggestionSelect === 'function') {\r\n              props.onSuggestionSelect(item);\r\n            }\r\n          }}\r\n        />\r\n\r\n        <Spinner />\r\n\r\n        {value.length > 0 && (\r\n          <Button\r\n            textOnlySr={true}\r\n            className={`${className}__clear-field ${\r\n              props.defaultSuggestions.length > 0\r\n                ? `${className}__clear-field--toggle-sibling`\r\n                : ''\r\n            }`}\r\n            text=\"Rensa fält\"\r\n            onClick={clearField}\r\n          />\r\n        )}\r\n        {props.defaultSuggestions.length > 0 && (\r\n          <Button\r\n            textOnlySr={true}\r\n            aria-controls={`container_${suggestionsProps.id}`}\r\n            aria-haspopup=\"true\"\r\n            aria-expanded={suggestionIsOpen}\r\n            className={classnames({\r\n              [`${className}__toggle-suggestion`]: true,\r\n              [`${className}__toggle-suggestion--is-open`]: suggestionIsOpen,\r\n            })}\r\n            text={suggestionIsOpen ? 'Dölj förslag' : 'Visa förslag'}\r\n            onClick={() => {\r\n              if (!suggestionIsOpen) {\r\n                // Set focus to the first button\r\n                // in the suggestions panel\r\n                const firstButton =\r\n                  suggestionsElement.current.querySelector('[data-element]');\r\n\r\n                if (firstButton) {\r\n                  firstButton.focus();\r\n                } else {\r\n                  inputElement.current.focus();\r\n                }\r\n              }\r\n              // Toggle suggestion panel\r\n              setSuggestionIsOpen(!suggestionIsOpen);\r\n            }}\r\n          />\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nField.propTypes = {\r\n  id: T.string,\r\n  onBlur: T.func,\r\n  onChange: T.func,\r\n  /** Function is run when an item is clicked in suggestions. */\r\n  onSuggestionSelect: T.func,\r\n  value: T.string,\r\n  suggestionsFooter: T.func,\r\n  suggestions: T.array,\r\n  defaultSuggestionsTitle: T.string,\r\n\r\n  suggestionsTitle: T.string,\r\n  defaultSuggestions: T.array,\r\n  suggestCloseButton: T.bool,\r\n  setValue: T.func,\r\n  /* input element placeholder attribute */\r\n  placeholder: T.string,\r\n  /* div with buttons and field */\r\n  innerClassName: T.string,\r\n  /* input element */\r\n  inputClassname: T.string,\r\n  /* html label element */\r\n  labelClassName: T.string,\r\n  /* input element name attribute */\r\n  name: T.string.isRequired,\r\n  /* callback when clear field is clicked */\r\n  clearField: T.func,\r\n  /* should selected item be highlighed before other items */\r\n  highlightSelection: T.bool,\r\n};\r\n\r\nField.defaultProps = {\r\n  className: 'field',\r\n  labelClassName: 'field__label',\r\n  suggestionsFooter: null,\r\n  placeholder: '',\r\n  suggestions: [],\r\n  defaultSuggestions: [],\r\n  onValueChange: () => {},\r\n  suggestCloseButton: false,\r\n};\r\n\r\nexport default Field;\r\n","import React, { useEffect } from 'react';\r\nimport T from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport Button from './button';\r\n\r\n// We forward the suggestions ref from parent field component\r\n// https://reactjs.org/docs/forwarding-refs.html\r\n\r\nconst Suggestions = React.forwardRef(function Suggestions(props, ref) {\r\n  const {\r\n    items,\r\n    isDefault,\r\n    defaultItems,\r\n    selected,\r\n    isOpen,\r\n    close,\r\n    useCloseButton,\r\n    footer,\r\n    handleClick,\r\n    hightlightTitle,\r\n    highlightSelection,\r\n    defaultTitle,\r\n    title,\r\n    className,\r\n  } = props;\r\n\r\n  function handleKeyboard(e) {\r\n    // Here we handle keyboard input.\r\n    // Should only trigger when suggestionfield is visible.\r\n    // If we need to handle Enter click - we do that here.\r\n\r\n    if (isDefault) {\r\n      return;\r\n    }\r\n\r\n    const buttons = Array.prototype.slice.call(\r\n      ref.current.querySelectorAll('[data-element=suggestion]')\r\n    );\r\n\r\n    // If the current element is one of the buttons.\r\n    const selectedIndex = buttons.findIndex(\r\n      (btn) => btn === document.activeElement\r\n    );\r\n\r\n    let newIndex = selectedIndex;\r\n\r\n    // up\r\n    if (e.keyCode === 38) {\r\n      e.preventDefault();\r\n      newIndex = selectedIndex - 1;\r\n    }\r\n\r\n    // down\r\n    if (e.keyCode === 40) {\r\n      e.preventDefault();\r\n      newIndex = selectedIndex + 1;\r\n    }\r\n\r\n    // enter\r\n    if (e.keyCode === 13) {\r\n      if (\r\n        document &&\r\n        document.activeElement &&\r\n        document.activeElement.tagName === 'INPUT'\r\n      ) {\r\n        e.preventDefault();\r\n      }\r\n    }\r\n\r\n    if (buttons[newIndex]) {\r\n      buttons[newIndex].focus();\r\n    }\r\n  }\r\n\r\n  // We have a selected option.\r\n  const selectedText = [...items, ...defaultItems].find(\r\n    (item) => item.text === selected\r\n  );\r\n\r\n  const isHighlight = Boolean(highlightSelection && selectedText);\r\n\r\n  const isVisible = Boolean(isOpen && (items.length > 0 || isHighlight));\r\n\r\n  // Classname for the wrapper\r\n  const classNames = classnames(className, {\r\n    [`${className}--is-open`]: isVisible,\r\n  });\r\n\r\n  // We do not want focus when the list is hidden\r\n  const btnTabIndex = {\r\n    tabIndex: isVisible ? 0 : -1,\r\n  };\r\n\r\n  // When a selections is made and we hightligt that.\r\n  // We also display the default/fallback items below.\r\n  const listItems = isHighlight ? defaultItems : items;\r\n\r\n  useEffect(() => {\r\n    if (isVisible) {\r\n      window.addEventListener('keydown', handleKeyboard);\r\n    } else {\r\n      window.removeEventListener('keydown', handleKeyboard);\r\n    }\r\n    return () => {\r\n      window.removeEventListener('keydown', handleKeyboard);\r\n    };\r\n  }, [handleKeyboard, isVisible]);\r\n\r\n  return (\r\n    <div\r\n      tabIndex=\"-1\"\r\n      ref={ref}\r\n      id={`container_${props.id}`}\r\n      className={classNames}\r\n    >\r\n      {useCloseButton && (\r\n        <Button\r\n          className={`${className}__close`}\r\n          {...btnTabIndex}\r\n          onClick={close}\r\n          text=\"Stäng\"\r\n        />\r\n      )}\r\n      {title && <span className={`${className}__title`}>{title}</span>}\r\n\r\n      <ul>\r\n        {isHighlight && (\r\n          <>\r\n            <li className=\"highlight\">\r\n              <div>\r\n                <p>\r\n                  {hightlightTitle}:\r\n                  <br />\r\n                  <b>{selectedText.text}</b>\r\n                </p>\r\n              </div>\r\n            </li>\r\n            {defaultTitle && (\r\n              <li className={`${className}__title`}>{defaultTitle}</li>\r\n            )}\r\n          </>\r\n        )}\r\n        {listItems.map((item, i) => (\r\n          <li\r\n            className={`${className}__item ${\r\n              item.className ? item.className : ''\r\n            }`}\r\n            key={`${props.id}_${item.key}_${i}`}\r\n          >\r\n            <Button\r\n              data-element={isDefault || isHighlight ? 'default' : 'suggestion'}\r\n              type=\"button\"\r\n              tabIndex={isDefault && isVisible ? 0 : -1}\r\n              text={item.text}\r\n              onClick={handleClick({ ...item, value: item.value || item.text })}\r\n            />\r\n          </li>\r\n        ))}\r\n      </ul>\r\n      {footer && footer(isVisible)}\r\n      <div\r\n        className=\"show-for-sr\"\r\n        id={props.id}\r\n        role=\"status\"\r\n        aria-atomic=\"true\"\r\n        aria-live=\"assertive\"\r\n      >\r\n        {isVisible && !isDefault && items.length > 0 && (\r\n          <span>{items.length} förslag</span>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n});\r\n\r\nSuggestions.defaultProps = {\r\n  footer: null,\r\n  className: 'suggestions',\r\n  defaultItems: [],\r\n  items: [],\r\n};\r\n\r\nSuggestions.propTypes = {\r\n  id: T.string.isRequired,\r\n  hightlightTitle: T.string,\r\n  items: T.array,\r\n  defaultItems: T.array,\r\n  isOpen: T.bool,\r\n  handleClick: T.func,\r\n  close: T.func,\r\n  /** render prop with argument `isVisibile` */\r\n  footer: T.func,\r\n  highlightSelection: T.bool,\r\n  selected: T.string,\r\n  useCloseButton: T.bool,\r\n  title: T.string,\r\n};\r\n\r\nexport default Suggestions;\r\n","import { useState } from 'react';\r\n\r\nfunction useOpenClose(initialState) {\r\n  const [isOpen, setIsOpen] = useState(initialState);\r\n  return [\r\n    isOpen,\r\n    () => setIsOpen(true),\r\n    () => setIsOpen(false),\r\n    () => setIsOpen(!isOpen),\r\n  ];\r\n}\r\n\r\nexport default useOpenClose;\r\n","var isProduction = process.env.NODE_ENV === 'production';\nfunction warning(condition, message) {\n  if (!isProduction) {\n    if (condition) {\n      return;\n    }\n\n    var text = \"Warning: \" + message;\n\n    if (typeof console !== 'undefined') {\n      console.warn(text);\n    }\n\n    try {\n      throw Error(text);\n    } catch (x) {}\n  }\n}\n\nexport default warning;\n","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n    // find the complete implementation of crypto (msCrypto) on IE11.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  options = options || {};\n  var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (var i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return stringify(rnds);\n}\n\nexport default v4;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;"],"names":["isSelected","o","Selected","getSelectedRegion","_ref","Regions","Options","found","find","Label","Name","Value","props","_props$Regionalizatio","done","setDone","useState","useEffect","loadScript","concat","Site","e","console","error","message","log","_jsxs","_Fragment","children","_jsx","FindCare","_objectSpread","selectedRegion","Regionalization","mapConfig","hasCareTypeFilter","MatomoTrackDimensions","Region","CurrentRegionName","clusterMarkerIcons","textColor","className","height","width","markerOptions","icon","url","markerImg","mapOption","settings","arguments","length","undefined","disableDefaultUI","clickableIcons","Breadcrumbs","componentClasses","classNames","Modifiers","lang","useSweLang","Language","id","map","breadcrumb","index","CurrentPage","href","Url","Text","firstLetter","useRef","_firstLetter$current","current","focus","modalIsOpen","alphabeticalListActive","list","currentActiveLetter","listItems","letter","Key","onKeyDown","keyCode","returnToAlphabeticListHandler","enterHandler","ref","toUpperCase","ticking","lists","topics","setCurrentActiveLetterState","setAlphabeticalListActive","elm","addEventListener","throttleScroll","container","requestAnimationFrame","forEach","topic","isTopicInRange","topicLists","Content","AOCareTypes","TopicList","isInRange","addTopicListToHandles","topicList","push","setCurrentActiveLetter","categories","Categories","returnToAlphabetic","selectedCareType","careTypeChangeHandler","Fragment","tabIndex","Translations","all","aodescription","AlphabeticalList","Component","constructor","this","React","top","getBoundingClientRectHandler","scrollTop","bottom","offsetTop","clientHeight","enterHandlerClose","preventDefault","currentTarget","click","componentDidMount","render","Consumer","closeModal","activeModalId","type","name","defaultChecked","CategoryName","onChange","trim","value","onClick","withAutocomplete","SuggestionsField","hits","Hits","_","qs","st","g","nearby","lng","lat","Items","IsNearBy","selectedObject","sessiontoken","getNearby","text","excludeAutoselect","getCountry","country","getRegion","r","Type","getDefaultLocations","region","items","withRouter","path","getCurrentRegion","Slug","createRegionSlug","Units","FriendlyUrl","window","location","DisplayName","item","caretype","getAOCategories","types","a","isTrue","b","isFalse","get16RandomBytes","random","Array","i","d","Date","Math","floor","getTime","FindCareForm","translations","hjvSearchForm","caretypeWrapper","activeElement","setActiveElement","document","sessionToken","setSessionToken","uuidv4","rng","handleFocusIn","removeEventListener","newSessionToken","handleChange","formik","sort","CONSTANTS","SORT_NAME","values","SORT_DISTANCE","q","SORT_REL","setFieldValue","setSortField","getFieldProps","setValue","setStatus","status","clearField","errors","isTouched","touched","onBlur","handleBlur","getCaretypeGValue","SearchResult","query","queryString","search","ignoreQueryPrefix","HasCareTypeFilter","initialValues","ls","caretypeSet","s","Formik","initialStatus","validate","onSubmit","handleSubmit","submit","action","pathname","method","defaultValue","InputLatLng","coords","CommonCareTypes","FullscreenModal","hideWithCss","classModifier","CategoriesLists","careType","setTimeout","LocationSuggestion","inputClassName","innerClassName","errorClassName","zeroHitsMessage","onValueChange","onSuggestionSelect","validateForm","setValues","then","getItems","extra","allcounties","Suggestions","key","defaultSuggestionsTitle","defaultSuggestions","label","where","labelClassName","placeholder","whereinputfield","CaretypeSuggestion","suggestionsFallback","hightlightTitle","within","suggestionsTitle","suggestionsFooter","isOpen","OpenModalButton","clickCallback","querySelector","fullScreen","more","choiceunitinputfield","highlightSelection","choiceunit","UnitSuggestion","doNotAutoselectFirstItemOnClose","allunits","style","display","Address","HsaId","unit","suggestCloseButton","suggestions","unitinputfield","isFalseOrEmpty","searchbutton","defaultProps","withGeolocation","latitude","longitude","Heading","dangerouslySetInnerHTML","heading","__html","replace","Preamble","getTakeParam","TotalHits","BatchSize","Bounds","Number","setMaxZoom","getZoom","setZoom","isEqPositionTo","compare","compareWith","Boolean","data","Latitude","Longitude","getInitialBounds","topLeft","bottomRight","ne","sw","getDefaultCenter","getHsaIdsPiped","hsaIds","SearchHits","getZoomLevel","isNaN","parseInt","z","getLocationData","shouldDoInitialBoundaryQuery","shouldRedirectToLatLng","sanitizeHeading","parseSanitizedHeading","noSearchHits","shouldDisplayMap","shouldDisplaySort","_ref2","IsPost","utils","isMediumOrLarger","useMedia","isLoading","showhitsonmap","Map","modifiers","expand","centerMapToInfoWindow","marker","popup","getProjection","popupPosition","fromLatLngToDivPixel","position","posX","getDiv","offsetWidth","y","x","offsetx","offsety","scale","pow","worldCoordinateCenter","fromLatLngToPoint","pixelOffset","global","google","maps","Point","worldCoordinateNewCenter","newCenter","fromPointToLatLng","setCenter","isCluster","Popup","content","closeBtn","anchor","createElement","classList","add","appendChild","close","stopEventPropagation","prototype","Object","create","OverlayView","onAdd","getPanes","floatPane","onRemove","parentElement","removeChild","draw","divPosition","left","cursor","event","stopPropagation","infoWindow","setMap","infoBubble","receptionCount","infoBubbleInner","scrollBtn","setAttribute","innerHTML","infoBubbleOuter","spinner","bounce1","bounce2","bounce3","LatLng","response","json","textContent","receptionData","receptionWrapper","headingLink","innerText","chevron","getAttribute","address","PhoneNumber","phone","phoneLink","InternationalPhoneNumber","serviceList","__PRELOADED_STATE__","createListItem","titleText","elem","titleElem","HasLovContract","VideoOrChat","HasMvkServices","VaccinatesForFlu","VaccinatesForCovid19","HasListing","LovContractLinkText","haseservices","vaccinatescovid19","vaccinatesflu","videoorchat","HasListingQueue","haslistingqueue","haslisting","offsetHeight","scrollBy","getBoundaryQuery","api","bounds","getBounds","getNorthEast","getSouthWest","nw","se","MapControls","searchWithBoundaries","googleAPI","boundaryQuery","zoom","center","getCenter","toJSON","p","m","mlat","mlng","history","locationClearButton","querySelectorAll","zoomIn","zoomOut","_this$props","boundarySearch","plannerLink","plannerLinkText","_objectWithoutProperties","_excluded","disabled","BOUNDARY_QUERY_DISABLED","searchinarea","Spinner","mapOptions","minZoom","handleClusterClick","bind","fetchInitialPins","onBoundsChanged","afterFitBounds","state","util","pinsFetchedCenter","BOUNDARY_QUERY_ENABLED","initialPinsFetched","googleApiLoaded","mapIsLoaded","handleMapChange","setState","isBoundarySearchEnabled","onIdle","dispatch","getState","fetchPins","config","formData","FormData","append","fetchByPost","t","fetchByQuery","componentDidUpdate","prevProps","prevState","qsPrev","setFindCareState","findCareState","isEqual","locations","hsaids","addLocation","includes","handleMarkerClick","markerData","Infowindow","clusterData","cluster","every","hsaId","pos","getMarkers","_ref3","pinsQuery","isNewCenter","isZoomOut","_ref4","createEventListeners","idle","zoom_changed","bounds_changed","zoomLevel","googleMapEventListeners","disableFitBounds","Maps","mapApiKey","apiKey","initialBounds","useClusters","eventListeners","onMarkerClick","onClusterClick","onMapInit","_ref5","onGoogleAPILoad","options","Locations","showServices","linkHasFocus","setLinkHasFocus","focusHandler","onFocus","wrapperClasses","biggermaptravelplanner","hasAltLayout","open","ModalPanel","whenActive","CloseModalButton","LovContractDescription","sortByRelVisible","isEmpty","GeoLocationErrorLink","isHidden","setIsHidden","CoordsContainer","SortLink","DistanceSortLink","DistanceSortLinkContainer","sortWithBoundary","sortlabel","distance","relevance","ao","Link","to","InfoText","LinkCollection","LinkList","Links","_window2","_window2$navigator","sendEventData","isAppUser","_window","_paq","navigator","userAgent","propTypes","string","FullscreenModalInner","showCloseModalText","context","createContext","Provider","ariaLabel","changeModal","body","clickHandler","autoFocus","ModalPanelInner","withKeepTabFocus","_ref6","_ref7","Modal","setActiveModalId","fullScreenModal","noScroll","contains","remove","escCloseHandler","handleClick","target","newModalId","_props$Content","_props$Content$Search","useLocation","_setFindCareState","searchResultModifiers","Breadcrumb","FindCareHeader","SearchList","Error","apiConfig","EmptySearchResultText","InfoBox","MatomoTrackSearch","Search","SearchCategory","SearchLocation","RedirectWithCoords","geoLocationError","ReactRouterRedirect","Redirect","withGeoLocation","getHtml","html","withSearch","searchResult","HasZeroHits","zerohits","RedirectToLatLng","IsSimpleFallbackSearch","Alert","alert","ResultDisclaimer","FindCareMap","googleMapsClientApiKey","FindCareSort","List","CustomSearchListItem","listProps","SearchListItem","Pagination","getElementById","BatchText","Button","textOnlySr","rest","Field","containerElement","inputElement","suggestionsElement","suggestionIsOpen","openSuggestion","closeSuggestion","setSuggestionIsOpen","useOpenClose","delayedClose","useCallback","handleClickOutside","el","fn","displayZeroHitsMessage","zeroHits","suggestionsProps","selected","isDefault","useCloseButton","footer","defaultItems","defaultTitle","title","hasDefaults","outerClassName","classnames","minStringLength","filter","htmlFor","autoComplete","ErrorMessage","blur","firstButton","handleKeyboard","buttons","slice","call","selectedIndex","findIndex","btn","newIndex","tagName","selectedText","isHighlight","isVisible","btnTabIndex","role","initialState","setIsOpen","condition","getRandomValues","rnds8","Uint8Array","crypto","msCrypto","byteToHex","toString","substr","arr","offset","uuid","toLowerCase","TypeError","buf","rnds","stringify","REGEX","test"],"sourceRoot":""}