{"version":3,"sources":["Map.js","components/Search/Search.js","components/ZoneScale/ZoneScale.js","assets/Logotype-Riksforbundet-Svensk-Tradgard.svg","components/LogoButton/LogoButton.js","components/Button/Button.js","assets/close_black_24dp.svg","components/Modal/Modal.js","components/InfoBox/InfoBox.js","components/About/About.js","App.js","reportWebVitals.js","index.js"],"names":["zone1","require","zone2","zone3","zone4","zone5","zone6","zone7","zone8","zoneFjall","zoneMeta","name","color","getWidth","window","innerWidth","document","documentElement","clientWidth","body","getHeight","center","lat","lng","libraries","Map","setAutocompleteService","setGeocoder","pointOfInterest","clearSearch","useState","map","setMap","mapRef","useRef","polygons","size","width","setWidth","height","setHeight","useEffect","timeoutId","resizeListener","clearTimeout","setTimeout","addEventListener","removeEventListener","useCurrentSize","isLoaded","useJsApiLoader","id","googleMapsApiKey","process","infoBoxLocation","setInfoBoxLocation","infoBoxLabel","setInfoBoxLabel","infoBoxColor","setInfoBoxColor","panTo","findZone","google","maps","LatLng","addPolygonsFromGeometry","geometry","getArray","forEach","zonePart","polygonPaths","paths","push","polygon","Polygon","current","onUnMount","useCallback","onMapLoad","places","AutocompleteService","Geocoder","bounds","LatLngBounds","extend","fitBounds","data","addGeoJson","zoneData","Data","idPropertyName","z1","getFeatureById","z2","z3","z4","z5","z6","z7","z8","zFjall","getGeometry","getProperty","setStyle","feature","fillColor","fillOpacity","strokeColor","strokeWeight","strokeOpacity","addListener","event","latLng","poly","containsLocation","onLoad","ref","mapContainerStyle","disableDefaultUI","options","scaleControl","zoomControl","zoom","onClick","onUnmount","position","visible","closeBoxURL","enableEventPropagation","boxStyle","borderRadius","boxShadow","style","backgroundColor","opacity","padding","border","top","fontSize","fontWeight","textAlign","useStyles","makeStyles","theme","icon","palette","text","secondary","marginRight","spacing","Search","autocompleteService","geocoder","setPointOfInterest","value","setValue","searchHasFocus","setSearchHasFocus","classes","inputValue","setInputValue","setOptions","fetch","useMemo","throttle","request","callback","getPlacePredictions","active","input","componentRestrictions","country","results","newOptions","Autocomplete","left","popper","onFocus","onBlur","blurOnSelect","getOptionLabel","option","description","filterOptions","x","autoComplete","includeInputInList","filterSelectedOptions","onChange","newValue","geocode","replace","status","location","console","log","onInputChange","newInputValue","renderInput","params","InputProps","placeholder","type","inputProps","className","renderOption","matches","structured_formatting","main_text_matched_substrings","parts","parse","main_text","match","offset","length","Grid","container","alignItems","item","xs","part","index","highlight","Typography","variant","secondary_text","ZoneScale","els","i","LogoButton","src","Logo","alt","Button","children","Modal","close","modalClass","target","iconClose","InfoBox","About","logo","href","isSmallDevice","App","head","insertAdjacentHTML","searchValue","setSearchValue","aboutModalVisible","setAboutModalVisible","service","coder","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.d0f626ec.chunk.js","sourcesContent":["import React, {\n useEffect,\n useRef,\n useState,\n useCallback,\n} from \"react\";\n\nimport \"./App.css\";\nimport {\n GoogleMap,\n useJsApiLoader,\n} from \"@react-google-maps/api\";\n\nimport { InfoBox } from \"@react-google-maps/api\";\nimport { Marker } from \"@react-google-maps/api\";\n\nconst zone1 = require(\"./zone-1.json\");\nconst zone2 = require(\"./zone-2.json\");\nconst zone3 = require(\"./zone-3.json\");\nconst zone4 = require(\"./zone-4.json\");\nconst zone5 = require(\"./zone-5.json\");\nconst zone6 = require(\"./zone-6.json\");\nconst zone7 = require(\"./zone-7.json\");\nconst zone8 = require(\"./zone-8.json\");\nconst zoneFjall = require(\"./zone-fjall.json\");\n\n\n\nconst zoneMeta = {\n 'zone-1': {\n name: \"Zon 1\",\n color: \"#be3a30bf\",\n },\n 'zone-2': {\n name: \"Zon 2\",\n color: \"#ff8900\",\n },\n 'zone-3': {\n name: \"Zon 3\",\n color: \"#f8ac64\",\n },\n 'zone-4': {\n name: \"Zon 4\",\n color: \"#af9a5d\",\n },\n 'zone-5': {\n name: \"Zon 5\",\n color: \"#89a88d\",\n },\n 'zone-6': {\n name: \"Zon 6\",\n color: \"#afa1b4\",\n },\n 'zone-7': {\n name: \"Zon 7\",\n color: \"#4790cc\",\n },\n 'zone-8': {\n name: \"Zon 8\",\n color: \"#a6c2e5\",\n },\n 'zone-fjall': {\n name: \"Fjäll\",\n color: \"#fff\",\n },\n};\n\n\nconst getWidth = () => (\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth\n );\n\nconst getHeight = () => (\n // window.innerHeight ||\n // document.documentElement.clientHeight ||\n // document.body.clientHeight\n document.documentElement.clientHeight\n);\n\nfunction useCurrentSize() {\n let [width, setWidth] = useState(getWidth());\n let [height, setHeight] = useState(getHeight());\n\n useEffect(() => {\n let timeoutId = null;\n const resizeListener = () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n setWidth(getWidth());\n setHeight(getHeight());\n }, 150);\n \n };\n window.addEventListener(\"resize\", resizeListener);\n return () => {\n window.removeEventListener(\"resize\", resizeListener);\n };\n }, []);\n return {width, height};\n}\n\nconst center = {\n lat: 62.85443013631183,\n lng: 16.71242282099435,\n};\n\nconst libraries = [\"geometry\", \"places\"];\n\nfunction Map({ setAutocompleteService, setGeocoder, pointOfInterest, clearSearch }) {\n const [map, setMap] = useState(null);\n \n const mapRef = useRef();\n const polygons = useRef([]);\n let size = useCurrentSize();\n const { isLoaded } = useJsApiLoader({\n id: \"google-map-script\",\n googleMapsApiKey: process.env.REACT_APP_GOOGLE_MAPS_API_KEY,\n libraries: libraries,\n });\n\n const [infoBoxLocation, setInfoBoxLocation] = useState(null);\n const [infoBoxLabel, setInfoBoxLabel] = useState(\"\");\n const [infoBoxColor, setInfoBoxColor] = useState('yellow');\n\n useEffect(() => {\n if (pointOfInterest) {\n map.panTo(pointOfInterest);\n // map.setZoom(8);\n setInfoBoxLocation(pointOfInterest);\n findZone(\n new window.google.maps.LatLng(\n pointOfInterest.lat(),\n pointOfInterest.lng(),\n )\n );\n }\n }, [pointOfInterest]);\n\n const handleMapClick = (event) => {\n // polygons.current.forEach((polygon) => {\n // console.log(\n // window.google.maps.geometry.poly.containsLocation(\n // event.latLng,\n // polygon\n // )\n // );\n // });\n };\n\n const addPolygonsFromGeometry = (geometry, name) => {\n // console.log(geometry);\n geometry.getArray().forEach((zonePart) => {\n const polygonPaths = [];\n zonePart.getArray().forEach((paths) => {\n // console.log(paths);\n polygonPaths.push(paths.getArray());\n });\n const polygon = new window.google.maps.Polygon({\n paths: polygonPaths,\n name: name,\n // map: map,\n // clickable: false,\n });\n polygons.current.push(polygon);\n });\n };\n\n const onUnMount = useCallback((map) => {\n setMap(null);\n }, []);\n\n const onMapLoad = useCallback((map) => {\n // autocompleteService.current =\n // new window.google.maps.places.AutocompleteService();\n \n setAutocompleteService(new window.google.maps.places.AutocompleteService());\n \n setGeocoder(new window.google.maps.Geocoder());\n \n \n\n const bounds = new window.google.maps.LatLngBounds();\n bounds.extend(\n new window.google.maps.LatLng(68.74868896525182, 20.994163118394102)\n );\n bounds.extend(\n new window.google.maps.LatLng(55.79565754368366, 13.85304987403346)\n );\n bounds.extend(\n new window.google.maps.LatLng(59.92221730608628, 11.688559723632553)\n );\n bounds.extend(\n new window.google.maps.LatLng(65.99171342173211, 23.220916656634994)\n );\n\n map.fitBounds(bounds);\n\n setMap(map);\n\n // console.log(window.google.maps);\n map.data.addGeoJson(zone1);\n map.data.addGeoJson(zone2);\n map.data.addGeoJson(zone3);\n map.data.addGeoJson(zone4);\n map.data.addGeoJson(zone5);\n map.data.addGeoJson(zone6);\n map.data.addGeoJson(zone7);\n map.data.addGeoJson(zone8);\n map.data.addGeoJson(zoneFjall);\n\n const zoneData = new window.google.maps.Data();\n zoneData.addGeoJson(zone1, {\n idPropertyName: \"name\",\n });\n zoneData.addGeoJson(zone2, {\n idPropertyName: \"name\",\n });\n zoneData.addGeoJson(zone3, {\n idPropertyName: \"name\",\n });\n zoneData.addGeoJson(zone4, {\n idPropertyName: \"name\",\n });\n zoneData.addGeoJson(zone5, {\n idPropertyName: \"name\",\n });\n zoneData.addGeoJson(zone6, {\n idPropertyName: \"name\",\n });\n zoneData.addGeoJson(zone7, {\n idPropertyName: \"name\",\n });\n zoneData.addGeoJson(zone8, {\n idPropertyName: \"name\",\n });\n zoneData.addGeoJson(zoneFjall, {\n idPropertyName: \"name\",\n });\n\n const z1 = zoneData.getFeatureById(\"zone-1\");\n const z2 = zoneData.getFeatureById(\"zone-2\");\n const z3 = zoneData.getFeatureById(\"zone-3\");\n const z4 = zoneData.getFeatureById(\"zone-4\");\n const z5 = zoneData.getFeatureById(\"zone-5\");\n const z6 = zoneData.getFeatureById(\"zone-6\");\n const z7 = zoneData.getFeatureById(\"zone-7\");\n const z8 = zoneData.getFeatureById(\"zone-8\");\n const zFjall = zoneData.getFeatureById(\"zone-fjall\");\n\n addPolygonsFromGeometry(z1.getGeometry(), z1.getProperty(\"name\"));\n addPolygonsFromGeometry(z2.getGeometry(), z2.getProperty(\"name\"));\n addPolygonsFromGeometry(z3.getGeometry(), z3.getProperty(\"name\"));\n addPolygonsFromGeometry(z4.getGeometry(), z4.getProperty(\"name\"));\n addPolygonsFromGeometry(z5.getGeometry(), z5.getProperty(\"name\"));\n addPolygonsFromGeometry(z6.getGeometry(), z6.getProperty(\"name\"));\n addPolygonsFromGeometry(z7.getGeometry(), z7.getProperty(\"name\"));\n addPolygonsFromGeometry(z8.getGeometry(), z8.getProperty(\"name\"));\n addPolygonsFromGeometry(\n zFjall.getGeometry(),\n zFjall.getProperty(\"name\")\n );\n\n map.data.setStyle(function (feature) {\n var name = feature.getProperty(\"name\");\n const color = zoneMeta[name]?.color ? zoneMeta[name]?.color : 'gray';\n return {\n fillColor: color,\n fillOpacity: 0.45,\n strokeColor: \"gray\",\n strokeWeight: 1,\n strokeOpacity: 1.0,\n };\n });\n\n map.data.addListener(\"click\", (event) => {\n // const name = event.feature.getProperty(\"name\");\n // console.log(name);\n // console.log(event.latLng);\n findZone(event.latLng);\n clearSearch();\n });\n\n setMap(map);\n }, []);\n\n const findZone = useCallback((latLng) => {\n polygons.current.forEach((polygon) => {\n // console.log(polygon.name);\n\n if (\n window.google.maps.geometry.poly.containsLocation(\n latLng,\n polygon\n )\n ) {\n setInfoBoxLabel(zoneMeta[polygon.name].name);\n setInfoBoxLocation({ lat: latLng.lat(), lng: latLng.lng() });\n setInfoBoxColor(zoneMeta[polygon.name].color);\n }\n });\n }, []);\n\n \n\n \n return isLoaded ? (\n (mapRef.current = ref)}\n mapContainerStyle={{\n width: \"100%\",\n height: size.height + \"px\",\n }}\n disableDefaultUI={true}\n options={{\n disableDefaultUI: true,\n scaleControl: true,\n zoomControl: size.width >= 768,\n }}\n center={center}\n zoom={6}\n onClick={handleMapClick}\n onUnmount={onUnMount}\n >\n \n {true && (\n \n <>\n \n \n \n {infoBoxLabel}\n \n \n \n \n )}\n \n \n\n ) : null;\n}\n\nexport default Map;\n","import React, {\n useEffect,\n useState,\n useCallback,\n useMemo,\n} from \"react\";\nimport './Search.css';\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\nimport LocationOnIcon from \"@material-ui/icons/LocationOn\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport parse from \"autosuggest-highlight/parse\";\nimport throttle from \"lodash/throttle\";\nimport axios from \"axios\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n color: theme.palette.text.secondary,\n marginRight: theme.spacing(2),\n },\n}));\n\nfunction Search({ \n autocompleteService, \n geocoder,\n setPointOfInterest, \n value, \n setValue,\n searchHasFocus,\n setSearchHasFocus,\n }) {\n const classes = useStyles();\n \n const [inputValue, setInputValue] = useState(null);\n const [options, setOptions] = useState([]);\n\n \n\n\n const fetch = useMemo(\n () =>\n throttle((request, callback) => {\n autocompleteService.current.getPlacePredictions(\n request,\n callback\n );\n }, 200),\n []\n );\n\n useEffect(() => {\n let active = true;\n if (!autocompleteService.current) {\n return undefined;\n }\n if (inputValue === \"\") {\n setOptions(value ? [value] : []);\n return undefined;\n }\n\n fetch(\n { input: inputValue, componentRestrictions: { country: \"se\" } },\n (results) => {\n if (active) {\n let newOptions = [];\n if (value) {\n newOptions = [value];\n }\n if (results) {\n newOptions = [...newOptions, ...results];\n }\n // console.log(newOptions);\n setOptions(newOptions);\n }\n }\n );\n return () => {\n active = false;\n };\n}, [value, inputValue, fetch]);\n\n\n\n\n return (\n setSearchHasFocus(true)}\n onBlur={() => setSearchHasFocus(false)}\n blurOnSelect={true}\n getOptionLabel={(option) =>\n typeof option === \"string\" ? option : option.description\n }\n filterOptions={(x) => x}\n options={options}\n autoComplete\n includeInputInList\n filterSelectedOptions\n value={value}\n onChange={(event, newValue) => {\n setOptions(newValue ? [newValue, ...options] : options);\n setValue(newValue);\n // Geocode place\n // console.log(newValue?.description);\n // console.log(encodeURIComponent(newValue?.description));\n if (newValue) {\n geocoder.current.geocode( { 'address': newValue?.description.replace(\" \", \"+\")}, function(results, status) {\n if (status == 'OK') {\n const location = results[0]?.geometry?.location;\n if (location) {\n setPointOfInterest(location);\n }\n } else {\n console.log('Geocode was not successful for the following reason: ' + status);\n }\n });\n }\n // if (newValue) {\n // const response = axios\n // .get(\n // \"https://maps.googleapis.com/maps/api/geocode/json?address=\" +\n // newValue?.description.replace(\" \", \"+\") +\n // \"&key=\" +\n // process.env.REACT_APP_GOOGLE_MAPS_API_KEY\n // )\n // .then((result) => {\n // // console.log(result.data.results[0].geometry.location);\n // // console.log(result.data.results[0]);\n // const location =\n // result.data?.results[0]?.geometry?.location;\n // if (location) {\n // setPointOfInterest(location);\n // }\n // })\n // .catch((error) => {\n // console.error(error);\n // })\n // ;\n // }\n }}\n onInputChange={(event, newInputValue) => {\n setInputValue(newInputValue);\n }}\n renderInput={(params) => (\n
\n \n
\n \n )}\n renderOption={(option) => {\n const matches =\n option.structured_formatting\n .main_text_matched_substrings;\n const parts = parse(\n option.structured_formatting.main_text,\n matches.map((match) => [\n match.offset,\n match.offset + match.length,\n ])\n );\n return (\n \n \n \n \n \n {parts.map((part, index) => (\n \n {part.text}\n \n ))}\n \n {\n option.structured_formatting\n .secondary_text\n }\n \n \n \n );\n }}\n />\n );\n}\n\nexport default Search;","import './ZoneScale.css';\n\nfunction ZoneScale() {\n\n const els = [
  • fjäll
  • ];\n\n for (let i=8; i>0; i--) {\n els.push(\n
  • \n {i}\n
  • );\n }\n\n return (\n
    \n \n

    Odlings-
    zoner

    \n\n
      \n {els}\n
    \n \n
    \n ); \n}\n\nexport default ZoneScale;\n","export default __webpack_public_path__ + \"static/media/Logotype-Riksforbundet-Svensk-Tradgard.13b1bb3b.svg\";","import './LogoButton.css';\nimport Logo from '../../assets/Logotype-Riksforbundet-Svensk-Tradgard.svg';\n\nfunction LogoButton({ callback }) {\n\n return (\n
    \n \"Rikförbundet\n
    \n );\n}\n\nexport default LogoButton;","import './Button.css';\n\n\nfunction Button({ callback, icon, children }) {\n\n return (\n
    \n {\n icon && \n }\n
    \n );\n}\n\nexport default Button;","export default __webpack_public_path__ + \"static/media/close_black_24dp.244b6687.svg\";","import {\n useState,\n useRef,\n} from 'react';\nimport './Modal.css';\nimport LogoButton from '../LogoButton/LogoButton';\nimport Button from '../Button/Button';\nimport iconClose from '../../assets/close_black_24dp.svg';\n\nfunction Modal({ children, visible, close }) {\n\n const ref = useRef();\n \n const handleBgClick = (event) => {\n if (event.target === ref.current) {\n close();\n }\n };\n\n let modalClass = 'modal';\n if (visible) modalClass += ' visible';\n\n return (\n
    \n
    \n
    \n \n
    \n {children}\n
    \n
    \n );\n}\n\nexport default Modal;","import './InfoBox.css';\n\nfunction InfoBox({ children }) {\n\n return (\n
    \n {children}\n
    \n );\n}\n\nexport default InfoBox;","import './About.css';\nimport logo from '../../assets/Logotype-Riksforbundet-Svensk-Tradgard.svg';\n\nfunction About() {\n\n return (\n
    \n \"Riksförbundet\n

    Zonkartan

    \n

    Riksförbundet Svensk Trädgårds karta för odlingszoner av träd och buskar.

    \n

    \n \n Mer info\n \n

    \n
    \n );\n}\n\nexport default About;","\nimport { \n useState,\n useRef,\n useCallback,\n} from 'react';\nimport './App.css';\nimport Map from './Map';\nimport Search from './components/Search/Search';\nimport ZoneScale from './components/ZoneScale/ZoneScale';\nimport LogoButton from './components/LogoButton/LogoButton';\nimport Modal from './components/Modal/Modal';\nimport InfoBox from './components/InfoBox/InfoBox';\nimport About from './components/About/About';\n\nconst getWidth = () => (\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth\n);\n\nconst isSmallDevice = () => (\n getWidth() < 768\n );\n\nfunction App() {\n\n const metaEl = ``;\n document.head.insertAdjacentHTML(\"beforeend\", metaEl);\n\n \n \n // Map variables.\n const autocompleteService = useRef(null);\n const setAutocompleteService = (service) => {\n autocompleteService.current = service;\n }\n const geocoder = useRef(null);\n const setGeocoder = (coder) => {\n geocoder.current = coder;\n }\n const [pointOfInterest, setPointOfInterest] = useState(null);\n\n // Search variables\n const [searchHasFocus, setSearchHasFocus] = useState(false);\n const [searchValue, setSearchValue] = useState(null);\n const clearSearch = useCallback(() => {\n setSearchValue(null);\n}, []);\n\n\n const [aboutModalVisible, setAboutModalVisible] = useState(isSmallDevice());\n const closeAboutModal = () => {\n setAboutModalVisible(false);\n }\n const openAboutModal = () => {\n setAboutModalVisible(true);\n }\n\n return (\n <>\n\n \n \n
    \n \n \n \n
    \n \n
    \n
    \n \n
    \n \n \n
    \n\n \n\n
    \n \n \n \n
    \n \n \n \n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}