{"version":3,"file":"maps.Dgp4ykjK.js","sources":["../Scripts/global/modules/map-inventory_wp.js","../Scripts/maps.js"],"sourcesContent":["import axios from 'axios';\r\nimport { locateStore } from'./gtmdata_wp';\r\nimport { scrollToTarget } from'../../utils';\r\n\r\nlet map;\r\nlet fs;\r\nlet filteredJsonInventory = [];\r\nconst inventoryShowAll = document.getElementById('inventoryShowAll');\r\nconst postalCodeInput = document.getElementById('inventoryPostnumber');\r\n\r\nconst ajax = axios.create({\r\n headers: {\r\n 'X-Requested-With': 'XMLHttpRequest'\r\n },\r\n});\r\n\r\nconst favourite = id => {\r\n if (fs == id) {\r\n return ' is-favourite';\r\n } else {\r\n return '';\r\n }\r\n};\r\n\r\nconst clearStore = (store) => {\r\n store.removeAttribute('checked');\r\n store.classList.remove('is-active');\r\n};\r\n\r\nconst resetFields = () => {\r\n inventoryShowAll.classList.remove('is-hidden');\r\n const inventoryPostnumber = document.getElementById('inventoryPostnumber');\r\n if (inventoryPostnumber) {\r\n inventoryPostnumber.classList.remove('invalid');\r\n }\r\n const inventoryNoHits = document.getElementById('inventoryNohits');\r\n if (inventoryNoHits) {\r\n inventoryNoHits.classList.add('is-hidden');\r\n }\r\n};\r\n\r\nconst updatePosition = () => {\r\n // User enters po-number\r\n const searchInput = document.getElementById('inventoryPostnumber').value;\r\n useMyLocationButton.forEach(el => {\r\n el.classList.remove('disabled');\r\n });\r\n\r\n // Define if search i text or PO number\r\n function searchQuery() {\r\n if (searchInput > 0 && searchInput < 9999) {\r\n return '?postalCode=' + searchInput;\r\n } else {\r\n return '?postalPlace=' + searchInput;\r\n }\r\n }\r\n\r\n // Generate url\r\n const postNordApiUrl = '/publicapi/findstore';\r\n const postNordQuery = searchQuery(searchInput);\r\n const postNordUrl = postNordApiUrl + postNordQuery;\r\n const inventoryPostnumber = document.getElementById('inventoryPostnumber');\r\n\r\n ajax.get(postNordUrl)\r\n .then(response => {\r\n if (response.status === 204) {\r\n // Handle 204 No Content response same way as 404 Not Found\r\n if (inventoryPostnumber) {\r\n inventoryPostnumber.classList.add('invalid');\r\n }\r\n filteredJsonInventory = [];\r\n updateMapList(59.9142366, 10.75309029999994, 1000);\r\n } else {\r\n if (inventoryPostnumber) {\r\n filteredJsonInventory = response.data;\r\n const lat = parseFloat(response.data[0].latitude);\r\n const long = parseFloat(response.data[0].longitude);\r\n mapInventory(\r\n lat,\r\n long,\r\n false,\r\n 1000,\r\n response.data,\r\n window.jsonInventory,\r\n );\r\n updateMapList(\r\n lat,\r\n long,\r\n 1000);\r\n }\r\n resetFields();\r\n }})\r\n .catch(e => {\r\n if (e && e.response && e.response.status === 404) {\r\n if (inventoryPostnumber) {\r\n inventoryPostnumber.classList.add('invalid');\r\n }\r\n filteredJsonInventory = [];\r\n updateMapList(59.9142366, 10.75309029999994, 1000);\r\n }\r\n });\r\n};\r\n\r\n// If less than 1km use meters\r\nconst distanceRounder = (located, dist) => {\r\n if (located && dist >= 1) {\r\n return parseFloat(dist).toFixed(2) + 'km';\r\n } else if (located && dist < 1) {\r\n return parseFloat(dist * 1000).toFixed(0) + 'm';\r\n } else {\r\n return '';\r\n }\r\n};\r\n\r\n// HTML list\r\n// Make class is-hidden in list if too far from user\r\nconst toofar = (radius, located, where) => {\r\n if (where > radius && located) {\r\n return 'is-hidden';\r\n } else {\r\n return 'is-visible';\r\n }\r\n};\r\n\r\nconst decodeEntities = encodedString => {\r\n const parser = new DOMParser;\r\n const dom = parser.parseFromString(\r\n '
' + encodedString,\r\n 'text/html');\r\n return dom.body.textContent;\r\n};\r\n\r\nconst mapInventory = (userLat, userLng, located, accuracy, stores, jsonInventory, sortOnDistance = false) => {\r\n const storeItems = document.querySelectorAll('._js-inventory-store');\r\n if (window.google) {\r\n // Initial map setup\r\n let isInitial = true;\r\n if (storeItems.length > 0) {\r\n storeItems.forEach(el => {\r\n el.classList.add('is-hidden');\r\n });\r\n isInitial = false;\r\n }\r\n\r\n if (!isInitial) {\r\n document.querySelectorAll('._js-inventory-store').forEach(el => {\r\n el.remove();\r\n });\r\n }\r\n\r\n useMyLocationButton.forEach(el => {\r\n el.classList.remove('disabled');\r\n });\r\n\r\n const myLatLng = {lat: userLat, lng: userLng};\r\n const markers = [];\r\n const storeCounter = [];\r\n\r\n const radius = 20;\r\n\r\n // Make bounds to zoom map to correct position\r\n const bounds = new window.google.maps.LatLngBounds();\r\n const boundsAll = new window.google.maps.LatLngBounds();\r\n\r\n // Make infowindow displayed on markers\r\n let infowindow = new window.google.maps.InfoWindow();\r\n\r\n // Giving the map som options\r\n const mapOptions = {\r\n center: myLatLng,\r\n fullscreenControl: false,\r\n mapTypeControl: false,\r\n zoom: 2,\r\n maxZoom: 18,\r\n styles: [\r\n {\r\n 'featureType': 'poi.business',\r\n 'stylers': [\r\n {\r\n 'visibility': 'off'\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n if (map) {\r\n map = null;\r\n }\r\n // Creating the map\r\n const mapDiv = document.getElementById('mapInventory');\r\n if (mapDiv) {\r\n map = new window.google.maps.Map(document.getElementById('mapInventory'), mapOptions);\r\n }\r\n\r\n function currentStore(el) {\r\n const selectedStore = document.getElementById(el);\r\n if (selectedStore) {\r\n document.querySelectorAll('._js-inventory-store').forEach(store => {\r\n clearStore(store);\r\n });\r\n\r\n selectedStore.querySelector('input').setAttribute('checked', true);\r\n selectedStore.classList.add('is-active');\r\n }\r\n }\r\n\r\n // Click events\r\n // Adding a new click event listener for the object\r\n // In map\r\n function addClicker(marker, content, id) {\r\n window.google.maps.event.addListener(marker,\r\n 'click',\r\n function () {\r\n currentStore(id);\r\n const mq = window.matchMedia('(min-width: 64em)');\r\n if (mq.matches) {\r\n if (infowindow) {\r\n infowindow.close();\r\n }\r\n infowindow = new window.google.maps.InfoWindow({content: content});\r\n infowindow.open(map, marker);\r\n }\r\n map.setZoom(14);\r\n map.panTo(marker.position);\r\n document.getElementById('storeInventory').classList.add('has-store-selected');\r\n }\r\n );\r\n }\r\n\r\n let usersPositionMarker = null;\r\n function setUserPosition(lat, lng) {\r\n const currentLat = lat;\r\n const currentLng = lng;\r\n\r\n // Marker style\r\n const userPin = {\r\n path: window.google.maps.SymbolPath.CIRCLE,\r\n fillColor: '#507cec',\r\n fillOpacity: 1,\r\n scale: 7,\r\n strokeColor: 'white',\r\n strokeWeight: 2,\r\n anchor: new window.google.maps.Point(0, 0)\r\n };\r\n usersPositionMarker = new window.google.maps.Marker({\r\n map: map,\r\n position: new window.google.maps.LatLng(currentLat, currentLng),\r\n title: 'Deg',\r\n icon: userPin,\r\n zIndex: 1000,\r\n id:'usersPositionMarker'\r\n });\r\n markers.push(usersPositionMarker);\r\n const clicker = addClicker(usersPositionMarker,'Her er du');\r\n }\r\n\r\n //Set user postion\r\n if (located && accuracy < 300) {\r\n setUserPosition(userLat, userLng);\r\n }\r\n if (stores && stores.length > 0) {\r\n let objs = [].concat(stores).map((store) => {\r\n return { distance: getDistanceFromLatLonInKm(store.latitude, store.longitude, userLat, userLng), obj: store,\r\n };\r\n });\r\n \r\n if(sortOnDistance) {\r\n objs = objs.sort((a, b) => {\r\n return a.distance < b.distance ? -1 : 1;\r\n });\r\n }\r\n \r\n objs.forEach(({ distance, obj }) => {\r\n const sizes = ((jsonInventory || []).find(x => x.id === obj.id) || obj).sizes;\r\n\r\n const distanceRound = distanceRounder(located, distance);\r\n\r\n const fav = favourite(obj.id);\r\n const far = toofar(radius, located, distance);\r\n\r\n const HTMLid = String(obj.id);\r\n const HTMLtitle = '' +\r\n HTMLfav +\r\n obj.adress +\r\n '
' +\r\n obj.openinghours +\r\n '