{"version":3,"file":"stockist-map.js","sources":["../../src/js/widgets/stockist-map.js"],"sourcesContent":["import { Loader } from \"@googlemaps/js-api-loader\";\r\nimport { latLngToMiles, mapStyles } from \"../utils\";\r\nconst key = \"AIzaSyCtL_2M4QkpYHDOKGuGwORyyJRRtf4VMSM\";\r\n\r\nconst GMap = function () {\r\n // Location data\r\n this.locations = [];\r\n\r\n // Current map focal coords\r\n this.centerLatLng = { lat: null, lng: null };\r\n\r\n // Google map markers\r\n this.mapMarkers = [];\r\n\r\n // Selected via filtering / distance etc/\r\n this.filteredByTerm = [];\r\n this.filteredByTermAndDistance = [];\r\n\r\n // Google Map JS API\r\n this.googleMap = null;\r\n\r\n // Results elements wrapper (slide in)\r\n this.resultsWrapper = null;\r\n\r\n // Results elements container (holding results els list)\r\n this.resultsContainer = null;\r\n\r\n // Result elements\r\n this.results = [];\r\n\r\n const self = this;\r\n\r\n this.init = function () {\r\n self.mapMarkers.forEach(function (marker) {\r\n // Zoom to location and order details cards based on distance & expand selected\r\n marker.addListener(\"click\", function () {\r\n const markerPos = marker.getPosition();\r\n self.googleMap.setCenter(markerPos);\r\n self.centerLatLng = {\r\n lat: markerPos.lat(),\r\n lng: markerPos.lng(),\r\n };\r\n self.orderResultsByDistance(self.centerLatLng);\r\n self.googleMap.setZoom(16);\r\n\r\n self.resultsWrapper.classList.add(\"active\");\r\n\r\n self.toggleResult(marker.id);\r\n });\r\n });\r\n self.locations.forEach(function (location) {\r\n const resultEl = self.createResultElement(location);\r\n self.results.push(resultEl);\r\n self.resultsContainer.appendChild(resultEl);\r\n });\r\n };\r\n\r\n this.showResults = function () {\r\n self.orderResultsByDistance(self.centerLatLng);\r\n self.resultsWrapper.classList.add(\"active\");\r\n };\r\n\r\n this.hideResults = function () {\r\n self.resultsWrapper.classList.remove(\"active\");\r\n };\r\n\r\n // Create result element from pin, add GMap centering on click\r\n this.createResultElement = function (location) {\r\n const result = document.createElement(\"button\");\r\n result.type = \"button\";\r\n result.classList.add(\"js-mapResult\", \"map-result\");\r\n\r\n // Data attributes for ID\r\n result.dataset.id = location.id;\r\n\r\n const gmapPin = self.mapMarkers.find(function (m) {\r\n return `${m.id}` === `${location.id}`;\r\n });\r\n\r\n const directionsURL = `https://www.google.com/maps/dir/?api=1&destination=${location.latLng.lat},${location.latLng.lng}`;\r\n\r\n let detailsHtml = '';\r\n\r\n if (location.email && location.email !== '') {\r\n detailsHtml += `${location.email}`;\r\n }\r\n\r\n if (location.telephone && location.telephone !== '') {\r\n detailsHtml += `${location.telephone}`;\r\n }\r\n\r\n if (location.website && location.website !== '') {\r\n detailsHtml += `${location.website}`;\r\n }\r\n\r\n detailsHtml += `Download directions`;\r\n\r\n result.innerHTML = `\r\n ${location.title}\r\n ${location.address}\r\n
${detailsHtml}
\r\n See more details\r\n Hide details\r\n `;\r\n\r\n // Go to map pin & show details\r\n result.addEventListener(\"click\", function (e) {\r\n const resultPosition = gmapPin.getPosition();\r\n self.googleMap.setCenter(resultPosition);\r\n\r\n self.centerLatLng = {\r\n lat: resultPosition.lat(),\r\n lng: resultPosition.lng(),\r\n };\r\n\r\n // Always force scroll back to the top\r\n self.resultsWrapper.scrollTop = 0;\r\n\r\n self.googleMap.setZoom(16);\r\n self.orderResultsByDistance(self.centerLatLng);\r\n // To hide details when hide btn is clicked\r\n if (!e.target.classList.contains(\"js-mapResultHide\")) {\r\n self.toggleResult(location.id);\r\n }\r\n });\r\n\r\n // Show/hide details\r\n const expandBtn = result.querySelector(\".js-mapResultExpand\");\r\n const collapseBtn = result.querySelector(\".js-mapResultHide\");\r\n\r\n expandBtn.addEventListener(\"click\", function () {\r\n result.classList.add(\"expanded\");\r\n });\r\n collapseBtn.addEventListener(\"click\", function () {\r\n result.classList.remove(\"expanded\");\r\n });\r\n\r\n return result;\r\n };\r\n\r\n this.orderResultsByDistance = function (centerLatLng) {\r\n // Order results based on distance from selected center\r\n self.results = self.results.concat().sort(function (a, b) {\r\n // Bit of trig to determine absolute distance\r\n const aId = a.dataset.id;\r\n const locationA = self.locations.find(function (l) {\r\n return `${l.id}` === `${aId}`;\r\n });\r\n const dxA = locationA.latLng.lat - centerLatLng.lat;\r\n const dyA = locationA.latLng.lng - centerLatLng.lng;\r\n const distanceA = Math.sqrt(dxA ** 2 + dyA ** 2);\r\n\r\n const bId = b.dataset.id;\r\n const locationB = self.locations.find(function (l) {\r\n return `${l.id}` === `${bId}`;\r\n });\r\n const dxB = locationB.latLng.lat - centerLatLng.lat;\r\n const dyB = locationB.latLng.lng - centerLatLng.lng;\r\n const distanceB = Math.sqrt(dxB ** 2 + dyB ** 2);\r\n\r\n return distanceA < distanceB ? -1 : 1;\r\n });\r\n\r\n self.results.forEach(function (element, idx) {\r\n element.style.order = idx;\r\n });\r\n };\r\n\r\n this.toggleResult = function (id) {\r\n self.results.forEach(function (res) {\r\n if (parseInt(res.dataset.id, 10) === id) {\r\n res.classList.add(\"expanded\");\r\n } else {\r\n res.classList.remove(\"expanded\");\r\n }\r\n });\r\n };\r\n\r\n this.filterMap = function (searchTerm, productType, capDistance) {\r\n self.filteredByTerm = self.locations.filter(function (l) {\r\n return l.type.toLowerCase().includes(searchTerm.toLowerCase());\r\n });\r\n self.filterByTermAndDistance(\r\n self.centerLatLng.lat,\r\n self.centerLatLng.lng,\r\n capDistance,\r\n productType\r\n );\r\n };\r\n\r\n this.filterByTermAndDistance = function (centerLat, centerLng, capDistance, productType) {\r\n self.filteredByTermAndDistance = self.filteredByTerm\r\n .filter(function (location) {\r\n const { lat, lng } = location.latLng;\r\n const distance = latLngToMiles(lat, lng, centerLat, centerLng);\r\n const isWithinDistance = distance <= (capDistance ? 40 : 99999);\r\n let isSelectedProductType = true;\r\n if (location.type !== 'division') {\r\n if (productType) {\r\n switch (productType) {\r\n case \"plaspave\":\r\n case \"buildingblocks\":\r\n isSelectedProductType = location.icon.toLowerCase().includes(productType) || location.icon.toLowerCase().includes(\"hybrid\");\r\n break;\r\n case \"hybrid\":\r\n default:\r\n isSelectedProductType = true;\r\n break;\r\n }\r\n }\r\n }\r\n return isWithinDistance && isSelectedProductType;\r\n })\r\n .map(function (l) {\r\n return l.id;\r\n });\r\n self.updateVisibleResults();\r\n };\r\n\r\n this.updateVisibleResults = function () {\r\n self.results.forEach(function (res) {\r\n const resId = parseInt(res.dataset.id, 10);\r\n if (!self.filteredByTermAndDistance.includes(resId)) {\r\n res.classList.add(\"hidden\");\r\n } else {\r\n res.classList.remove(\"hidden\");\r\n }\r\n });\r\n\r\n this.updateVisibleMarkers();\r\n };\r\n this.updateVisibleMarkers = function () {\r\n self.mapMarkers.forEach(function (marker) {\r\n const markerId = parseInt(marker.id, 10);\r\n if (!self.filteredByTermAndDistance.includes(markerId)) {\r\n marker.setVisible(false);\r\n } else {\r\n marker.setVisible(true);\r\n }\r\n });\r\n };\r\n};\r\n\r\n(function () {\r\n const mapWidgets = document.querySelectorAll(\".js-stockistMaps\");\r\n\r\n const loader = new Loader({\r\n apiKey: key,\r\n version: \"weekly\",\r\n libraries: [\"places\"],\r\n });\r\n\r\n const mapOptions = {\r\n zoom: 7,\r\n disableDefaultUI: true,\r\n styles: mapStyles,\r\n };\r\n\r\n setupMaps(mapWidgets, loader, mapOptions);\r\n})();\r\n\r\nfunction setupMaps(mapWidgets, loader, mapOptions) {\r\n mapWidgets.forEach(async function (widget) {\r\n const map = widget.querySelector(\".js-googleMaps\");\r\n if (!map || !widget.dataset.url) return;\r\n\r\n // Fetch data from endpoint\r\n // const locations = await fetch(widget.dataset.url).then((res) => res.json());\r\n const locationBodyData = {\r\n HideStockists: false,\r\n HideDivisions: false\r\n };\r\n\r\n const locations = await fetch(widget.dataset.url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(locationBodyData),\r\n }).then((res) => res.json());\r\n\r\n // Setup pin ID & pin image\r\n const pins = locations.map(function (p, idx) {\r\n locations[idx].id = idx;\r\n let icon = \"\";\r\n switch (p.icon) {\r\n case \"plaspave\":\r\n icon = \"icons/map-pin--stockist.png\";\r\n break;\r\n case \"buildingblocks\":\r\n icon = \"icons/map-pin--contractor.png\";\r\n break;\r\n case \"hybrid\":\r\n icon = \"icons/map-pin--division.png\";\r\n break;\r\n case \"division\":\r\n icon = \"icons/map-pin.svg\";\r\n break;\r\n\r\n default:\r\n icon = \"icons/map-pin--orange.svg\";\r\n break;\r\n }\r\n return {\r\n ...p,\r\n id: idx,\r\n icon,\r\n };\r\n });\r\n\r\n // Center map around first pin\r\n const mapOpts = {\r\n ...mapOptions,\r\n center: {\r\n lat: parseFloat(pins[0].latLng.lat),\r\n lng: parseFloat(pins[0].latLng.lng),\r\n },\r\n };\r\n const searchField = widget.querySelector(\".js-searchField\");\r\n const filterField = widget.querySelector(\".js-filterField\");\r\n const productTypeField = widget.querySelector(\".js-productTypeField\");\r\n\r\n const searchBtn = widget.querySelector(\".js-searchMap\");\r\n\r\n const resultsWrapper = widget.querySelector(\".js-mapResults\");\r\n const resultsContainer = widget.querySelector(\".js-mapResultsContainer\");\r\n const hideResultsBtn = widget.querySelector(\".js-resultsClose\");\r\n\r\n let markers = [];\r\n\r\n let filterTerm = filterField.value;\r\n let productType = productTypeField.value;\r\n\r\n loader\r\n .load()\r\n .then((google) => {\r\n const myGMap = new GMap();\r\n myGMap.googleMap = new google.maps.Map(map, mapOpts);\r\n myGMap.locations = locations;\r\n myGMap.resultsWrapper = resultsWrapper;\r\n myGMap.resultsContainer = resultsContainer;\r\n\r\n const zoomIn = map.parentElement.querySelector(\".js-zoomIn\");\r\n const zoomOut = map.parentElement.querySelector(\".js-zoomOut\");\r\n\r\n productTypeField.classList.add(\"disabled\");\r\n\r\n // Add markers to map from data\r\n pins.forEach(function (p) {\r\n const pin = new google.maps.Marker({\r\n position: {\r\n lat: parseFloat(p.latLng.lat),\r\n lng: parseFloat(p.latLng.lng),\r\n },\r\n map: myGMap.googleMap,\r\n title: p.title,\r\n animation: google.maps.Animation.DROP,\r\n icon: {\r\n url: \"/sitefiles/dist/images/\" + p.icon,\r\n scaledSize: new google.maps.Size(41, 56),\r\n },\r\n });\r\n\r\n pin.id = p.id;\r\n\r\n myGMap.mapMarkers.push(pin);\r\n });\r\n\r\n // console.log(myGMap.mapMarkers);\r\n\r\n myGMap.init();\r\n\r\n myGMap.centerLatLng = {\r\n lat: parseFloat(pins[0].latLng.lat),\r\n lng: parseFloat(pins[0].latLng.lng),\r\n };\r\n\r\n // Map controls\r\n zoomIn.addEventListener(\"click\", function () {\r\n myGMap.googleMap.setZoom(myGMap.googleMap.getZoom() + 1);\r\n });\r\n\r\n zoomOut.addEventListener(\"click\", function () {\r\n myGMap.googleMap.setZoom(myGMap.googleMap.getZoom() - 1);\r\n });\r\n\r\n if (searchField) {\r\n const searchBox = new google.maps.places.SearchBox(searchField);\r\n // Zoom to location from search box & order results based on distance\r\n searchBtn.addEventListener(\"click\", function () {\r\n const places = searchBox.getPlaces();\r\n if (places && places.length) {\r\n const lat = places[0].geometry.location.lat();\r\n const lng = places[0].geometry.location.lng();\r\n\r\n myGMap.googleMap.setCenter({ lat, lng });\r\n myGMap.centerLatLng = { lat, lng };\r\n myGMap.googleMap.setZoom(10);\r\n }\r\n myGMap.filterMap(filterTerm, '', true);\r\n\r\n myGMap.showResults();\r\n\r\n var results = resultsWrapper.querySelectorAll(\".js-mapResult:not(.hidden)\");\r\n if (results.length > 0) {\r\n resultsWrapper.querySelector(\".js-no-results-message\").classList.add(\"hidden\");\r\n } else {\r\n NoResultMessage(filterTerm, resultsWrapper);\r\n }\r\n if (filterTerm === 'division' || filterTerm === 'contractor') {\r\n var select = productTypeField.querySelector(\".js-selectNative\");\r\n var customSelect = productTypeField.querySelector(\".select-custom-trigger\");\r\n\r\n select.selectedIndex = 0;\r\n customSelect.dataset.value = \"\";\r\n customSelect.innerHTML = select.options[select.selectedIndex].text;\r\n productTypeField.classList.add(\"disabled\");\r\n } else {\r\n productTypeField.classList.remove(\"disabled\");\r\n }\r\n });\r\n } else {\r\n productTypeField.classList.add(\"disabled\");\r\n }\r\n\r\n if (hideResultsBtn) {\r\n hideResultsBtn.addEventListener(\"click\", function () {\r\n myGMap.hideResults();\r\n });\r\n } else {\r\n // Show results if no search/filter e.g. office locations\r\n myGMap.showResults();\r\n }\r\n\r\n if (filterField) {\r\n // Update markers based on filter selected\r\n filterField.addEventListener(\"change\", function (e) {\r\n filterTerm = e.target.value;\r\n });\r\n }\r\n\r\n if (productTypeField) {\r\n // Update markers based on filter selected\r\n productTypeField.addEventListener(\"change\", function (e) {\r\n productType = e.value;\r\n myGMap.filterMap(filterTerm, productType, true);\r\n myGMap.showResults();\r\n var results = resultsWrapper.querySelectorAll(\".js-mapResult:not(.hidden)\");\r\n if (results.length > 0) {\r\n resultsWrapper.querySelector(\".js-no-results-message\").classList.add(\"hidden\");\r\n } else {\r\n NoResultMessage(filterTerm, resultsWrapper, productType);\r\n }\r\n });\r\n }\r\n\r\n // Default filter to division\r\n myGMap.filterMap(\"division\", productType);\r\n })\r\n .catch((e) => {\r\n console.log(e);\r\n });\r\n });\r\n}\r\n\r\nfunction NoResultMessage(filterTerm, resultsWrapper, productField) {\r\n let message = \"No\";\r\n if (filterTerm === 'division') {\r\n message += \" Divisional offices\";\r\n } else if (filterTerm === 'contractor') {\r\n message += \" Contractors\";\r\n } else if (filterTerm === 'stockist') {\r\n if (productField != null) {\r\n if (productField === 'plaspave') {\r\n message += \" Paving\";\r\n } else if (productField === 'buildingblocks') {\r\n message += \" Block\";\r\n }\r\n }\r\n message += \" Stockists\";\r\n }\r\n\r\n message += \" nearby, please search a different area\";\r\n let resultsMessage = resultsWrapper.querySelector(\".js-no-results-message\");\r\n resultsMessage.classList.remove(\"hidden\");\r\n resultsMessage.innerHTML = message;\r\n}\r\n"],"names":["key","GMap","locations","centerLatLng","lat","lng","mapMarkers","filteredByTerm","filteredByTermAndDistance","googleMap","resultsWrapper","resultsContainer","results","self","init","forEach","marker","addListener","markerPos","getPosition","setCenter","orderResultsByDistance","setZoom","classList","add","toggleResult","id","location","resultEl","createResultElement","push","appendChild","showResults","hideResults","remove","result","document","createElement","type","dataset","gmapPin","find","m","directionsURL","latLng","detailsHtml","email","telephone","website","innerHTML","title","icon","address","addEventListener","e","resultPosition","scrollTop","target","contains","expandBtn","querySelector","collapseBtn","concat","sort","a","b","aId","locationA","l","dxA","dyA","distanceA","Math","sqrt","bId","locationB","dxB","dyB","distanceB","element","idx","style","order","res","parseInt","filterMap","searchTerm","productType","capDistance","filter","toLowerCase","includes","filterByTermAndDistance","centerLat","centerLng","distance","latLngToMiles","isWithinDistance","isSelectedProductType","map","updateVisibleResults","resId","updateVisibleMarkers","markerId","setVisible","mapWidgets","querySelectorAll","loader","Loader","apiKey","version","libraries","mapOptions","zoom","disableDefaultUI","styles","mapStyles","setupMaps","_regeneratorRuntime","widget","url","locationBodyData","HideStockists","HideDivisions","fetch","method","headers","body","JSON","stringify","then","json","pins","p","mapOpts","center","parseFloat","searchField","filterField","productTypeField","searchBtn","hideResultsBtn","filterTerm","value","load","google","myGMap","maps","Map","zoomIn","parentElement","zoomOut","pin","Marker","position","animation","Animation","DROP","scaledSize","Size","getZoom","searchBox","places","SearchBox","getPlaces","length","geometry","NoResultMessage","select","customSelect","selectedIndex","options","text","catch","console","log","productField","message","resultsMessage"],"mappings":"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"}