{ "version": 3, "sources": ["../../src/ts/StoreMap.ts"], "sourcesContent": ["\uFEFFimport {$$, execWithContext, get, getAndSetCookieConsents, toggleTargetClosestSelector} from \"@/Utils\"\r\nimport {MapStore} from \"@/interfaces\"\r\nimport {bindFindClosestButton, maxZoom, minZoom, stopLoading} from \"@/MapModule\"\r\nimport {Site, StoreBrands} from \"@/enums\";\r\n\r\nconst markers = new Array();\r\nlet iconName = \"\";\r\n\r\nswitch (window.config.site) {\r\n case Site.EuronicsEE:\r\n case Site.EuronicsLV:\r\n iconName = '/images/map/EuronicsPin.svg';\r\n break;\r\n case Site.NovastarLT:\r\n iconName = '/images/map/novanaut-head--circular.svg';\r\n break;\r\n case Site.AvitelaLT:\r\n iconName = '/images/map/AvitelaPin.svg';\r\n break;\r\n}\r\n\r\nlet infoWindow: google.maps.InfoWindow;\r\nlet stores: readonly MapStore[];\r\nlet map: google.maps.Map;\r\n\r\nfunction placeMarker(store: MapStore, panAndZoom = true, map: google.maps.Map) {\r\n const icon = document.createElement('img');\r\n\r\n if (window.config.site == Site.AvitelaLT) {\r\n // Use AvitelaPin as default\r\n switch (store.storeBrand) {\r\n case StoreBrands.Avitela: {\r\n iconName = '/images/map/AvitelaPin.svg';\r\n break;\r\n }\r\n case StoreBrands.ElektroMarkt: {\r\n iconName = '/images/map/ElektromarktPin.svg';\r\n break;\r\n }\r\n default: {\r\n iconName = '/images/map/AvitelaPin.svg';\r\n break;\r\n }\r\n }\r\n }\r\n\r\n icon.src = iconName;\r\n const marker = new google.maps.marker.AdvancedMarkerElement({\r\n position: store.latLng,\r\n map: map,\r\n zIndex: 50,\r\n content: icon,\r\n draggable: false\r\n } as google.maps.marker.AdvancedMarkerElementOptions);\r\n\r\n markers.push(marker);\r\n if (panAndZoom) {\r\n map.setZoom(maxZoom);\r\n map.panTo(store.latLng);\r\n }\r\n\r\n marker.addListener(\"click\", () => {\r\n const infoContent = `\r\n
\r\n

${store.name}

\r\n

${store.address}

\r\n

${store.openingTimes}

\r\n
\r\n `;\r\n\r\n infoWindow.setContent(infoContent);\r\n infoWindow.open(map, marker);\r\n map.panTo(store.latLng);\r\n map.setZoom(maxZoom);\r\n });\r\n}\r\n\r\nfunction removeMarkers() {\r\n markers.forEach((marker) => marker.map = null);\r\n}\r\n\r\nfunction positionSuccess(p: GeolocationPosition) {\r\n const location = new google.maps.LatLng(p.coords.latitude, p.coords.longitude);\r\n\r\n const closest = stores.map(s => ({\r\n distance: google.maps.geometry.spherical.computeDistanceBetween(location, s.latLng),\r\n latLng: s.latLng\r\n }))\r\n .reduce((prev, curr) => curr.distance < prev.distance ? curr : prev).latLng;\r\n\r\n const storeDiv = Array.from($$(\".store\")).find(x =>\r\n parseFloat(x.getAttribute(\"data-lat\")) === closest.lat() &&\r\n parseFloat(x.getAttribute(\"data-lng\")) === closest.lng());\r\n\r\n const btn = storeDiv.previousElementSibling as HTMLElement;\r\n if (!btn.parentElement.classList.contains(\"open\")) {\r\n btn.click();\r\n }\r\n stopLoading();\r\n}\r\n\r\n/* Opening/closing store information. Does not need cookieConsent to work, so it's separated from other handlers*/\r\nfunction initExpandStoreInfo() {\r\n const mapsListButtons = $$(\".maps-list__button.expandable\");\r\n mapsListButtons.forEach(\r\n (elem: Element) => elem.addEventListener(\"click\", (e: Event) => {\r\n e.preventDefault();\r\n const button = e.currentTarget as Element;\r\n toggleTargetClosestSelector(button, \"li\", \"open\", false, 3);\r\n })\r\n );\r\n}\r\n\r\nfunction bindHandlers() {\r\n const mapsListButtons = $$(\".maps-list__button.expandable\");\r\n mapsListButtons.forEach(\r\n (elem: Element) => elem.addEventListener(\"click\", (e: Event) => {\r\n e.preventDefault();\r\n if (map) {\r\n const button = e.currentTarget as Element;\r\n const isOpen = button.parentElement.classList.contains(\"open\");\r\n if (isOpen) {\r\n const buttonId = button.getAttribute(\"data-id\");\r\n const store = stores.find(x => x.id === parseInt(buttonId));\r\n if (markers.length > 0) {\r\n removeMarkers();\r\n }\r\n placeMarker(store, true, map);\r\n } else {\r\n defaultMapView();\r\n }\r\n }\r\n })\r\n );\r\n\r\n if (mapsListButtons.length === 1) {\r\n mapsListButtons[0].click();\r\n }\r\n\r\n bindFindClosestButton(positionSuccess);\r\n}\r\n\r\nfunction initMap() {\r\n infoWindow = new google.maps.InfoWindow();\r\n\r\n defaultMapView(true);\r\n}\r\n\r\nfunction defaultMapView(firstLoad = false) {\r\n stores = Array.from($$(\".store\")).map((store: HTMLElement) => ({\r\n id: parseInt(store.getAttribute(\"data-id\")),\r\n name: store.getAttribute(\"data-name\"),\r\n latLng: new google.maps.LatLng(\r\n parseFloat(store.getAttribute(\"data-lat\")),\r\n parseFloat(store.getAttribute(\"data-lng\"))\r\n ),\r\n address: store.getAttribute(\"data-address\"),\r\n openingTimes: store.getAttribute(\"data-opening-times\"),\r\n storeBrand: parseInt(store.getAttribute(\"data-store-brand\"))\r\n })) as readonly MapStore[];\r\n\r\n const mapDiv = get(\"map\");\r\n const centerLat = parseFloat(mapDiv.getAttribute(\"data-center-lat\"));\r\n const centerLng = parseFloat(mapDiv.getAttribute(\"data-center-lng\"));\r\n const zoom = parseInt(mapDiv.getAttribute(\"data-default-zoom\"));\r\n\r\n if (firstLoad) {\r\n\r\n const options = {\r\n center: new google.maps.LatLng(centerLat, centerLng),\r\n zoom: zoom,\r\n minZoom: minZoom,\r\n maxZoom: maxZoom,\r\n gestureHandling: \"greedy\",\r\n mapId: \"STORE_MAP\"\r\n } as google.maps.MapOptions;\r\n\r\n map = new google.maps.Map(mapDiv, options);\r\n } else {\r\n map.setZoom(zoom);\r\n map.setCenter(new google.maps.LatLng(centerLat, centerLng))\r\n }\r\n\r\n stores.forEach(store => {\r\n placeMarker(store, false, map);\r\n });\r\n}\r\n\r\nexport async function initGoogleMap() {\r\n window.googleMapsCallback = () => {\r\n };\r\n const map = get(\"map\");\r\n if (map) {\r\n initExpandStoreInfo();\r\n bindHandlers();\r\n if (getAndSetCookieConsents().performance) {\r\n initMapObserver.observe(map);\r\n }\r\n } else {\r\n //we might just the stores list without the map, so we still need to be able to expand them\r\n const mapContainer = get(\"mapContainer\");\r\n if (mapContainer) {\r\n initExpandStoreInfo();\r\n }\r\n }\r\n}\r\n\r\nconst initMapObserver = new IntersectionObserver(entries => {\r\n if (entries.some((e) => e.isIntersecting)) {\r\n execWithContext(window.config.googleMapsApiUrl + \"&callback=googleMapsCallback\", () => {\r\n initMap();\r\n entries.forEach(e => {\r\n initMapObserver.unobserve(e.target);\r\n });\r\n });\r\n }\r\n}, {threshold: [0]})"], "mappings": "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", "names": ["markers", "iconName", "infoWindow", "stores", "map", "placeMarker", "store", "panAndZoom", "icon", "marker", "maxZoom", "infoContent", "removeMarkers", "positionSuccess", "p", "location", "closest", "s", "prev", "curr", "btn", "$$", "x", "stopLoading", "initExpandStoreInfo", "elem", "e", "button", "toggleTargetClosestSelector", "bindHandlers", "mapsListButtons", "buttonId", "defaultMapView", "bindFindClosestButton", "initMap", "firstLoad", "mapDiv", "get", "centerLat", "centerLng", "zoom", "options", "minZoom", "initGoogleMap", "__async", "getAndSetCookieConsents", "initMapObserver", "entries", "execWithContext"] }