{"version":3,"sources":["webpack:///./Scripts/Containers/SearchableDropdown.container.js","webpack:///./Scripts/Containers/StationFinder.container.js","webpack:///./Scripts/Hooks/useGeolocationPosition.js","webpack:///./Scripts/Hooks/useGoogleMaps.js","webpack:///./Scripts/Hooks/useNavigatorPermissionsQuery.js","webpack:///./Scripts/Hooks/useRefreshGeolocationPositionIfPermissionGranted.js","webpack:///./Scripts/Hooks/useSortedStations.js","webpack:///./Scripts/Services/GoogleMaps.js"],"names":["options","onClick","handleOnChange","e","data","window","location","href","value","placeholderText","translate","__litium","stationFinder","title","stations","boxIconUrl","imageUrl","imageTextColor","imageHtml","mapInfoWindowLinkColor","mapPinColor","getCurrentUserPosUpperText","getCurrentUserPosLowerText","showStationsOnMapButtonText","showStationLinkText","useGeolocationPosition","geolocationPosition","refreshGeolocationPosition","googleMaps","useGoogleMaps","sortedStations","useSortedStations","geolocationPermission","useNavigatorPermissionsQuery","name","useRefreshGeolocationPositionIfPermissionGranted","className","stationListSwapImageToUserPositionMap","map","stationId","stationPageUrl","key","text","type","stationListSwapImageToDefaultMap","id","style","backgroundImage","color","dangerouslySetInnerHTML","__html","initMap","swapImageToMap","navigator","geolocation","getCurrentPosition","position","pos","closest","dmin","Number","POSITIVE_INFINITY","station","d","maps","coordinatesLat","coordinatesLong","findClosestMarker","coords","latitude","longitude","closestStation","document","getElementById","center","zoom","infowindow","addressStreetAddress","addressZipcode","addressCity","contentString","marker","icon","path","fillColor","fillOpacity","strokeWeight","scale","anchor","setContent","open","classList","add","element","remove","scrollIntoView","behavior","block","inline","useState","setGeolocationPosition","api","setApi","useEffect","query","status","setStatus","refreshStatus","permissions","then","state","filter","onlyVisibleInTireHotel","setSortedStations","length","p0","LatLng","newSortedStations","sort","a","b","geometry","spherical","computeDistanceBetween","instance","promise","Promise","resolve","script","createElement","src","async","defer","onload","google","head","appendChild"],"mappings":"0JAoBA,QAhBA,YAA2D,IAApBA,EAAoB,EAApBA,QAASC,EAAW,EAAXA,QAI5C,OACI,gBAAC,IAAD,CAEQD,UACAE,eAPW,SAACC,EAAGC,GACvBC,OAAOC,SAASC,KAAOH,EAAKI,OAOpBP,UACAQ,iBAAiBC,OAAU,sC,ooCCUvCL,OAAOM,SAASC,cAZhBC,E,EAAAA,MAEAC,G,EADAC,W,EACAD,UACAE,E,EAAAA,SACAC,E,EAAAA,eACAC,E,EAAAA,UACAC,E,EAAAA,uBACAC,E,EAAAA,YACAC,E,EAAAA,2BACAC,E,EAAAA,2BACAC,E,EAAAA,4BACAC,E,EAAAA,oBAyFJ,QAtFA,WAAkC,OAI1BC,UAFAC,EAF0B,EAE1BA,oBACAC,EAH0B,EAG1BA,2BAEEC,GAAaC,UACbC,GAAiBC,QAAkB,CACrCL,sBACAZ,WACAc,eAGEI,GAAwBC,QAA6B,CACvDC,KAAM,gBAQV,OANAC,QAAiD,CAC7CH,wBACAN,sBACAC,+BAIA,uBAAKS,UAAU,OACX,uBAAKA,UAAU,+EACX,uBAAKA,UAAU,+CACX,sBAAIA,UAAU,uBAAuBvB,IAEzC,qBACIuB,UAAU,oCACVnC,QAASoC,GAET,uBAAKD,UAAU,+CACX,uBAAKA,UAAU,0CACX,qBAAGA,UAAU,cAEjB,uBAAKA,UAAU,0CACX,8BAASf,GACT,2BACCC,KAIb,uBAAKc,UAAU,gCACX,gBAAC,UAAD,CACIpC,QAAS8B,EAAeQ,KACpB,gBAAGC,EAAH,EAAGA,UAAWC,EAAd,EAAcA,eAAd,MAA0C,CACtCC,IAAKF,EACLG,KAFJ,EAA8BR,KAG1B1B,MAAOgC,MAGfvC,QAAS0B,KAGjB,0BACIgB,KAAK,SACLP,UAAU,gCACVnC,QAAS2C,GAERrB,IAGRP,GACG,uBACI6B,GAAG,mBACHT,UAAU,8EACVU,MAAO,CAAEC,gBAAiB,QAAF,OAAU/B,EAAV,QAExB,wBACIoB,UAAU,4CACVU,MAAO,CAAEE,MAAO/B,IAEhB,uBAAKgC,wBAAyB,CAAEC,OAAQhC,OAIpD,uBACI2B,GAAG,iBACHT,UAAU,8DAEV,uBAAKS,GAAG,mBAQxB,SAASD,IACLO,IACAC,IAGJ,SAASf,IACAgB,UAAUC,YAGXD,UAAUC,YAAYC,oBAClB,SAACC,GAAD,OACIL,EAoFhB,SAA2BM,GACvB,IAAIC,EADwB,EAExBC,EAAOC,OAAOC,kBAFU,IAIN/C,GAJM,IAI5B,2BAAgC,KAArBgD,EAAqB,QACtBC,EAAIC,uDACNP,EACA,IAAIO,oBACAF,EAAQG,eACRH,EAAQI,kBAGZH,EAAIJ,IACJA,EAAOI,EACPL,EAAUI,IAdU,8BAkB5B,MAAO,CACHL,IAAK,IAAIO,oBACLN,EAAQO,eACRP,EAAQQ,iBAEZ3B,UAAWmB,EAAQnB,WA1GP4B,CACI,IAAIH,oBACAR,EAASY,OAAOC,SAChBb,EAASY,OAAOE,eAIhCnB,GAZJA,IAgBJC,IAGJ,SAASD,EAAQoB,GACb,IAD6B,EACvBjC,EAAM,IAAI0B,iBACZQ,SAASC,eAAe,eACxBF,EACM,CACIG,OAAQH,EAAed,IACvBkB,KAAM,IAEV,CACID,OAAQ,IAAIV,oBAAqB,YAAa,cAC9CW,KAAM,IAIdC,EAAa,IAAIZ,wBAdM,IAePlD,GAfO,yBAelBgD,EAfkB,QAiBrBG,EAQAH,EARAG,eACAC,EAOAJ,EAPAI,gBACAhC,EAMA4B,EANA5B,KACA2C,EAKAf,EALAe,qBACAC,EAIAhB,EAJAgB,eACAC,EAGAjB,EAHAiB,YACAvC,EAEAsB,EAFAtB,eACAD,EACAuB,EADAvB,UAGEyC,EAAgB,mCAAH,OAAsC9C,EAAtC,4BAA8D2C,EAA9D,gBAA0FC,EAA1F,YAA4GC,EAA5G,8BAA6IvC,EAA7I,6CAAgMrB,EAAhM,aAA2NK,EAA3N,QAEbyD,EAAS,IAAIjB,oBAAqB,CACpCR,SAAU,IAAIQ,oBAAqBC,EAAgBC,GACnD5B,MACA4C,KAAM,CACFC,KACI,kQACJC,UAAWhE,EACXiE,YAAa,EACbC,aAAc,EACdC,MAAO,IACPC,OAAQ,IAAIxB,mBAAoB,GAAI,OAI5CA,+BAAgCiB,EAAQ,SAAS,WAC7CL,EAAWa,WAAWT,GACtBJ,EAAWc,KAAKpD,EAAK2C,MAGrBV,GAAkBA,EAAehC,WAAaA,IAC9CqC,EAAWa,WAAWT,GACtBJ,EAAWc,KAAKpD,EAAK2C,KAnC7B,2BAAgC,IAfH,+BAuDjC,SAAS7B,IAAiB,MACtB,UAAAoB,SAASC,eAAe,2BAAxB,SAA6CkB,UAAUC,IAAI,QAE3D,IAAMC,EAAUrB,SAASC,eAAe,kBACpCoB,IACAA,EAAQF,UAAUG,OAAO,QACzBD,EAAQE,eAAe,CACnBC,SAAU,SACVC,MAAO,MACPC,OAAQ,e,kjCC1ML,SAASzE,IAAyB,SACS0E,cAAS,MADlB,GACtCzE,EADsC,KACjB0E,EADiB,KAK7C,MAAO,CAAE1E,sBAAqBC,2BAH9B,WAAsC,UACzB,QAAT,EAAA0B,iBAAA,mBAAWC,mBAAX,mBAAwBC,0BAAxB,gBAA6C6C,K,+9BCFtC,SAASvE,IAAgB,SACdsE,cAASnC,cADK,GAC7BqC,EAD6B,KACxBC,EADwB,KAOpC,OALAC,gBAAU,WACDF,GACDrC,iBAAkBsC,KAEvB,CAACD,IACGA,E,g9BCRI,SAASpE,EAA6BuE,GAAO,SAC5BL,cAAS,MADmB,GACjDM,EADiD,KACzCC,EADyC,KAKxD,MAAO,CAAED,SAAQE,cAHjB,WAAyB,UACZ,QAAT,EAAAtD,iBAAA,mBAAWuD,mBAAX,mBAAwBJ,MAAMA,UAA9B,SAAsCK,KAAKH,KCHpC,SAASvE,EAAT,GAIZ,IAHCH,EAGD,EAHCA,sBACAN,EAED,EAFCA,oBACAC,EACD,EADCA,4BAEA4E,gBAAU,WAAM,MAEPvE,EAAsByE,OAOtB/E,GACuC,aAAxC,UAAAM,EAAsByE,cAAtB,eAA8BK,QAE9BnF,IATAK,EAAsB2E,kBAW3B,CAACjF,EAAqBM,EAAsByE,S,izCChBpC,SAAS1E,EAAT,GAIZ,IAHCL,EAGD,EAHCA,oBACAZ,EAED,EAFCA,SACAc,EACD,EADCA,WACD,KAC6CuE,cAASrF,EAASiG,QAAO,SAACjD,GAAD,OAAcA,EAAQkD,2BAD5F,GACQlF,EADR,KACwBmF,EADxB,KAyBC,OAtBAV,gBAAU,WACN,GAAK7E,GAA2C,IAApBZ,EAASoG,QAAiBtF,EAAtD,CAGA,IAAMuF,EAAK,IAAIvF,EAAWwF,OACtB1F,EAAoB0C,OAAOC,SAC3B3C,EAAoB0C,OAAOE,WAEzB+C,EAAoB,EAAIvG,GAAUwG,MACpC,SAACC,EAAGC,GAAJ,OACI5F,EAAW6F,SAASC,UAAUC,uBAC1B,IAAI/F,EAAWwF,OAAOG,EAAEtD,eAAgBsD,EAAErD,iBAC1CiD,GAEJvF,EAAW6F,SAASC,UAAUC,uBAC1B,IAAI/F,EAAWwF,OAAOI,EAAEvD,eAAgBuD,EAAEtD,iBAC1CiD,MAGZF,EAAkBI,MACnB,CAAC3F,EAAqBZ,EAAUc,IAE5BE,I,8CClCJ,IAAMkC,EAAO,CAChB4D,SAAU,KACVC,QAAS,IAAIC,SAAQ,SAACC,GAClB,IAAMC,EAASxD,SAASyD,cAAc,UACtCD,EAAOE,IACH,4IACJF,EAAOG,OAAQ,EACfH,EAAOI,OAAQ,EACfJ,EAAOK,OAAS,WACZrE,EAAK4D,SAAWU,OAAOtE,KACvB+D,EAAQ/D,EAAK4D,WAEjBpD,SAAS+D,KAAKC,YAAYR","file":"387.7b2765dd41c7ae74828d.js","sourcesContent":["import React from 'react'\r\nimport SearchableDropdown from '../Components/SearchableDropdown'\r\nimport { translate } from '../Services/translation'\r\n\r\nfunction SearchableDropdownContainer({ options, onClick }) {\r\n const handleOnChange = (e, data) => {\r\n window.location.href = data.value\r\n }\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default SearchableDropdownContainer\r\n","import React from 'react'\r\nimport SearchableDropdownContainer from './SearchableDropdown.container'\r\nimport { maps } from '../Services/GoogleMaps'\r\nimport {\r\n useGeolocationPosition,\r\n useGoogleMaps,\r\n useNavigatorPermissionsQuery,\r\n useRefreshGeolocationPositionIfPermissionGranted,\r\n useSortedStations,\r\n} from '../Hooks'\r\n\r\nconst {\r\n title,\r\n boxIconUrl,\r\n stations,\r\n imageUrl,\r\n imageTextColor,\r\n imageHtml,\r\n mapInfoWindowLinkColor,\r\n mapPinColor,\r\n getCurrentUserPosUpperText,\r\n getCurrentUserPosLowerText,\r\n showStationsOnMapButtonText,\r\n showStationLinkText,\r\n} = window.__litium.stationFinder\r\n\r\nfunction StationFinderContainer() {\r\n const {\r\n geolocationPosition,\r\n refreshGeolocationPosition,\r\n } = useGeolocationPosition()\r\n const googleMaps = useGoogleMaps()\r\n const sortedStations = useSortedStations({\r\n geolocationPosition,\r\n stations,\r\n googleMaps,\r\n })\r\n\r\n const geolocationPermission = useNavigatorPermissionsQuery({\r\n name: 'geolocation',\r\n })\r\n useRefreshGeolocationPositionIfPermissionGranted({\r\n geolocationPermission,\r\n geolocationPosition,\r\n refreshGeolocationPosition,\r\n })\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

{title}

\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {getCurrentUserPosUpperText}\r\n
\r\n {getCurrentUserPosLowerText}\r\n
\r\n
\r\n \r\n
\r\n ({\r\n key: stationId,\r\n text: name,\r\n value: stationPageUrl,\r\n })\r\n )}\r\n onClick={refreshGeolocationPosition}\r\n />\r\n
\r\n \r\n {showStationsOnMapButtonText}\r\n \r\n
\r\n {imageUrl && (\r\n \r\n \r\n
\r\n \r\n
\r\n )}\r\n \r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default StationFinderContainer\r\n\r\nfunction stationListSwapImageToDefaultMap() {\r\n initMap()\r\n swapImageToMap()\r\n}\r\n\r\nfunction stationListSwapImageToUserPositionMap() {\r\n if (!navigator.geolocation) {\r\n initMap()\r\n } else {\r\n navigator.geolocation.getCurrentPosition(\r\n (position) =>\r\n initMap(\r\n findClosestMarker(\r\n new maps.instance.LatLng(\r\n position.coords.latitude,\r\n position.coords.longitude\r\n )\r\n )\r\n ),\r\n initMap\r\n )\r\n }\r\n\r\n swapImageToMap()\r\n}\r\n\r\nfunction initMap(closestStation) {\r\n const map = new maps.instance.Map(\r\n document.getElementById('stationsMap'),\r\n closestStation\r\n ? {\r\n center: closestStation.pos,\r\n zoom: 12,\r\n }\r\n : {\r\n center: new maps.instance.LatLng(62.38583179, 16.321998712), // Geographical center of Sweden\r\n zoom: 4,\r\n }\r\n )\r\n\r\n const infowindow = new maps.instance.InfoWindow()\r\n for (const station of stations) {\r\n const {\r\n coordinatesLat,\r\n coordinatesLong,\r\n name,\r\n addressStreetAddress,\r\n addressZipcode,\r\n addressCity,\r\n stationPageUrl,\r\n stationId,\r\n } = station\r\n\r\n const contentString = `${name}

${addressStreetAddress}
${addressZipcode} ${addressCity}

${showStationLinkText}`\r\n\r\n const marker = new maps.instance.Marker({\r\n position: new maps.instance.LatLng(coordinatesLat, coordinatesLong),\r\n map,\r\n icon: {\r\n path:\r\n 'M11.83.09A8.08,8.08,0,0,0,3.75,8.17c0,2.37,1.89,6.37,3.49,9.37.81,1.52,1.69,3.08,2.49,4.28,1.3,2,1.61,2.18,2.1,2.18s.8-.24,2.11-2.18c.77-1.2,1.69-2.76,2.49-4.28,1.59-3,3.48-7,3.48-9.37A8.08,8.08,0,0,0,11.83.09Zm0,11.05a3,3,0,1,1,3-3A3,3,0,0,1,11.83,11.14Z',\r\n fillColor: mapPinColor,\r\n fillOpacity: 1,\r\n strokeWeight: 0,\r\n scale: 1.2,\r\n anchor: new maps.instance.Point(10, 25),\r\n },\r\n })\r\n\r\n maps.instance.event.addListener(marker, 'click', function () {\r\n infowindow.setContent(contentString)\r\n infowindow.open(map, marker)\r\n })\r\n\r\n if (closestStation && closestStation.stationId == stationId) {\r\n infowindow.setContent(contentString)\r\n infowindow.open(map, marker)\r\n }\r\n }\r\n}\r\n\r\nfunction swapImageToMap() {\r\n document.getElementById('stationListImage')?.classList.add('hide')\r\n\r\n const element = document.getElementById('stationListMap')\r\n if (element) {\r\n element.classList.remove('hide')\r\n element.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'end',\r\n inline: 'nearest',\r\n })\r\n }\r\n}\r\n\r\nfunction findClosestMarker(pos) {\r\n let closest\r\n let dmin = Number.POSITIVE_INFINITY\r\n\r\n for (const station of stations) {\r\n const d = maps.instance.geometry.spherical.computeDistanceBetween(\r\n pos,\r\n new maps.instance.LatLng(\r\n station.coordinatesLat,\r\n station.coordinatesLong\r\n )\r\n )\r\n if (d < dmin) {\r\n dmin = d\r\n closest = station\r\n }\r\n }\r\n\r\n return {\r\n pos: new maps.instance.LatLng(\r\n closest.coordinatesLat,\r\n closest.coordinatesLong\r\n ),\r\n stationId: closest.stationId,\r\n }\r\n}\r\n","import { useState } from 'react'\r\n\r\nexport default function useGeolocationPosition() {\r\n const [geolocationPosition, setGeolocationPosition] = useState(null)\r\n function refreshGeolocationPosition() {\r\n navigator?.geolocation?.getCurrentPosition?.(setGeolocationPosition)\r\n }\r\n return { geolocationPosition, refreshGeolocationPosition }\r\n}\r\n","import { useState, useEffect } from 'react'\r\nimport { maps } from '../Services/GoogleMaps'\r\n\r\nexport default function useGoogleMaps() {\r\n const [api, setApi] = useState(maps.instance)\r\n useEffect(() => {\r\n if (!api) {\r\n maps.promise.then(setApi)\r\n }\r\n }, [api])\r\n return api\r\n}\r\n","import { useState } from 'react'\r\n\r\nexport default function useNavigatorPermissionsQuery(query) {\r\n const [status, setStatus] = useState(null)\r\n function refreshStatus() {\r\n navigator?.permissions?.query(query)?.then(setStatus)\r\n }\r\n return { status, refreshStatus }\r\n}\r\n","import { useEffect } from 'react'\r\n\r\nexport default function useRefreshGeolocationPositionIfPermissionGranted({\r\n geolocationPermission,\r\n geolocationPosition,\r\n refreshGeolocationPosition,\r\n}) {\r\n useEffect(() => {\r\n // init permission status\r\n if (!geolocationPermission.status) {\r\n geolocationPermission.refreshStatus()\r\n return\r\n }\r\n\r\n // eagerly init position if permission already granted\r\n if (\r\n !geolocationPosition &&\r\n geolocationPermission.status?.state === 'granted'\r\n ) {\r\n refreshGeolocationPosition()\r\n }\r\n }, [geolocationPosition, geolocationPermission.status])\r\n}\r\n","import { useState, useEffect } from 'react'\r\n\r\n/**\r\n * NOTE: if stations === sortedStations, no sort has yet occurred\r\n */\r\nexport default function useSortedStations({\r\n geolocationPosition,\r\n stations,\r\n googleMaps,\r\n}) {\r\n const [sortedStations, setSortedStations] = useState(stations.filter((station) => !station.onlyVisibleInTireHotel))\r\n\r\n useEffect(() => {\r\n if (!geolocationPosition || stations.length === 0 || !googleMaps) {\r\n return\r\n }\r\n const p0 = new googleMaps.LatLng(\r\n geolocationPosition.coords.latitude,\r\n geolocationPosition.coords.longitude\r\n )\r\n const newSortedStations = [...stations].sort(\r\n (a, b) => \r\n googleMaps.geometry.spherical.computeDistanceBetween(\r\n new googleMaps.LatLng(a.coordinatesLat, a.coordinatesLong),\r\n p0\r\n ) -\r\n googleMaps.geometry.spherical.computeDistanceBetween(\r\n new googleMaps.LatLng(b.coordinatesLat, b.coordinatesLong),\r\n p0\r\n )\r\n )\r\n setSortedStations(newSortedStations)\r\n }, [geolocationPosition, stations, googleMaps])\r\n\r\n return sortedStations\r\n}\r\n","export const maps = {\r\n instance: null,\r\n promise: new Promise((resolve) => {\r\n const script = document.createElement('script')\r\n script.src =\r\n 'https://maps.googleapis.com/maps/api/js?key=AIzaSyBCq5hqIV9Yk1dZ7IsJeEueAxk2Fu4xqNA&libraries=geometry,places&callback=Function.prototype'\r\n script.async = true\r\n script.defer = true\r\n script.onload = function () {\r\n maps.instance = google.maps\r\n resolve(maps.instance)\r\n }\r\n document.head.appendChild(script)\r\n }),\r\n}\r\n"],"sourceRoot":""}