{"version":3,"file":"storeLocator-BQlZZPIn.js","sources":["../../../node_modules/@googlemaps/js-api-loader/dist/index.esm.js","../../../app/javascript/api/physicalStoreLocations.js","../../../app/javascript/images/default-map-marker.svg?url","../../../app/javascript/images/selected-map-marker.svg?url","../../../app/javascript/modules/storeLocator.js"],"sourcesContent":["// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.CALLBACK = \"__googleMapsCallback\";\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!fastDeepEqual(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n */\n createUrl() {\n let url = this.url;\n url += `?callback=${this.CALLBACK}`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `®ion=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const url = this.createUrl();\n const script = document.createElement(\"script\");\n script.id = this.id;\n script.type = \"text/javascript\";\n script.src = url;\n script.onerror = this.loadErrorCallback.bind(this);\n script.defer = true;\n script.async = true;\n if (this.nonce) {\n script.nonce = this.nonce;\n }\n document.head.appendChild(script);\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.log(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n setCallback() {\n window.__googleMapsCallback = this.callback.bind(this);\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n if (this.loading) ;\n else {\n this.loading = true;\n this.setCallback();\n this.setScript();\n }\n }\n }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.esm.js.map\n","import api from \"./index\";\n\nexport default {\n async index() {\n return api.get(\"/physical_store_locations.json\");\n }\n};\n","export default \"data:image/svg+xml,%3csvg%20width='48'%20height='48'%20viewBox='0%200%2048%2048'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20x='19'%20y='15'%20width='11'%20height='11'%20fill='white'/%3e%3cellipse%20cx='24'%20cy='43'%20rx='15'%20ry='4'%20fill='url(%23paint0_radial_670_70655)'/%3e%3cpath%20d='M24.0044%2022.7693C24.763%2022.7693%2025.4134%2022.4966%2025.9557%2021.9514C26.4981%2021.4061%2026.7693%2020.7542%2026.7693%2019.9956C26.7693%2019.237%2026.4966%2018.5866%2025.9513%2018.0443C25.4061%2017.5019%2024.7542%2017.2308%2023.9956%2017.2308C23.237%2017.2308%2022.5866%2017.5034%2022.0443%2018.0487C21.5019%2018.5939%2021.2307%2019.2459%2021.2307%2020.0045C21.2307%2020.763%2021.5034%2021.4135%2022.0486%2021.9558C22.5939%2022.4981%2023.2458%2022.7693%2024.0044%2022.7693ZM24%2043.2308C18.941%2038.741%2015.1763%2034.5763%2012.7058%2030.7366C10.2353%2026.8968%209%2023.4513%209%2020.4C9%2015.7077%2010.5122%2011.968%2013.5365%209.18075C16.5609%206.39358%2020.0487%205%2024%205C27.9513%205%2031.4391%206.39358%2034.4634%209.18075C37.4878%2011.968%2039%2015.7077%2039%2020.4C39%2023.4513%2037.7648%2026.8968%2035.2943%2030.7366C32.8237%2034.5763%2029.059%2038.741%2024%2043.2308Z'%20fill='%231E2525'/%3e%3cdefs%3e%3cradialGradient%20id='paint0_radial_670_70655'%20cx='0'%20cy='0'%20r='1'%20gradientUnits='userSpaceOnUse'%20gradientTransform='translate(24%2043)%20rotate(90)%20scale(4%2015)'%3e%3cstop%20stop-color='%231E2525'%20stop-opacity='0.6'/%3e%3cstop%20offset='1'%20stop-color='%231E2525'%20stop-opacity='0'/%3e%3c/radialGradient%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='96'%20height='96'%20viewBox='0%200%2096%2096'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20x='40'%20y='33'%20width='17'%20height='17'%20fill='white'/%3e%3cellipse%20cx='48'%20cy='86'%20rx='30'%20ry='8'%20fill='url(%23paint0_radial_670_70654)'/%3e%3cpath%20d='M48.0089%2045.5385C49.526%2045.5385%2050.8269%2044.9932%2051.9115%2043.9027C52.9962%2042.8122%2053.5385%2041.5083%2053.5385%2039.9911C53.5385%2038.474%2052.9932%2037.1731%2051.9027%2036.0885C50.8122%2035.0038%2049.5083%2034.4615%2047.9911%2034.4615C46.474%2034.4615%2045.1731%2035.0068%2044.0885%2036.0973C43.0038%2037.1878%2042.4615%2038.4917%2042.4615%2040.0089C42.4615%2041.526%2043.0068%2042.8269%2044.0973%2043.9115C45.1878%2044.9962%2046.4917%2045.5385%2048.0089%2045.5385ZM48%2086.4615C37.8821%2077.482%2030.3526%2069.1526%2025.4115%2061.4731C20.4705%2053.7936%2018%2046.9026%2018%2040.8C18%2031.4154%2021.0244%2023.9359%2027.0731%2018.3615C33.1218%2012.7872%2040.0974%2010%2048%2010C55.9026%2010%2062.8782%2012.7872%2068.9269%2018.3615C74.9756%2023.9359%2078%2031.4154%2078%2040.8C78%2046.9026%2075.5295%2053.7936%2070.5885%2061.4731C65.6474%2069.1526%2058.1179%2077.482%2048%2086.4615Z'%20fill='%23FFA359'/%3e%3cdefs%3e%3cradialGradient%20id='paint0_radial_670_70654'%20cx='0'%20cy='0'%20r='1'%20gradientUnits='userSpaceOnUse'%20gradientTransform='translate(48%2086)%20rotate(90)%20scale(8%2030)'%3e%3cstop%20stop-color='%231E2525'%20stop-opacity='0.6'/%3e%3cstop%20offset='1'%20stop-color='%231E2525'%20stop-opacity='0'/%3e%3c/radialGradient%3e%3c/defs%3e%3c/svg%3e\"","import { Loader } from \"@googlemaps/js-api-loader\";\nimport physicalStoreLocations from \"@/app/javascript/api/physicalStoreLocations\";\n// eslint-disable-next-line import/no-unresolved\nimport defaultMapMarker from \"@/app/javascript/images/default-map-marker.svg?url\";\n// eslint-disable-next-line import/no-unresolved\nimport selectedMapMarker from \"@/app/javascript/images/selected-map-marker.svg?url\";\n\nconst loader = new Loader({\n apiKey: \"AIzaSyD_nKH1eEz2LeuMNUtpicgwezUveBV-5-8\",\n version: \"weekly\",\n libraries: [\"places\"]\n});\n\nconst isNorthAmericanStore =\n window.location.pathname.includes(\"/us\") ||\n window.location.pathname.includes(\"/ca\");\n\nconst centerCoordinates = isNorthAmericanStore\n ? {\n lat: 39.8097343,\n lng: -98.5556199\n }\n : {\n lat: 54.5180406,\n lng: -3.9196445\n };\n\nfunction getMapZoom(isUs, width) {\n if (isUs) {\n return width <= 992 ? 3 : 4;\n }\n return width <= 992 ? 5 : 6;\n}\n\nconst mapZoom = getMapZoom(isNorthAmericanStore, window.innerWidth);\n\nconst mapOptions = {\n center: centerCoordinates,\n zoom: mapZoom,\n mapId: \"5af85df0fd86f05e\",\n disableDefaultUI: true,\n zoomControl: true\n};\n\nfunction calculateHaversineDistance(lat1, lon1, lat2, lon2) {\n const R = 6371; // Radius of the earth in km\n const dLat = ((lat2 - lat1) * Math.PI) / 180;\n const dLon = ((lon2 - lon1) * Math.PI) / 180;\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos((lat1 * Math.PI) / 180) *\n Math.cos((lat2 * Math.PI) / 180) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n const d = R * c; // Distance in km\n return d;\n}\n\nasync function calculateDistances(data, origin) {\n const estimatedDistances = [];\n const stores = [];\n\n data.forEach(store => {\n const storeLoc = store.getGeometry().get();\n const storeNum = store.getId();\n const estDistance = calculateHaversineDistance(\n origin.lat(),\n origin.lng(),\n storeLoc.lat(),\n storeLoc.lng()\n );\n estimatedDistances.push({\n storeNum,\n storeLoc,\n estDistance\n });\n stores.push(storeNum);\n });\n\n // Sort based on estimated distances\n estimatedDistances.sort((a, b) => a.estDistance - b.estDistance);\n\n // Take only the nearest 25\n const nearestStores = estimatedDistances.slice(0, 5);\n\n // Extract nearest destinations and corresponding storeNums\n const nearestDestinations = nearestStores.map(store => store.storeLoc);\n const nearestStoreNums = nearestStores.map(store => store.storeNum);\n\n // Retrieve the distances of each store from the user location\n // eslint-disable-next-line no-undef\n const service = new google.maps.DistanceMatrixService();\n // eslint-disable-next-line no-shadow\n const getDistanceMatrix = (service, parameters) =>\n new Promise((resolve, reject) => {\n service.getDistanceMatrix(parameters, (response, status) => {\n // eslint-disable-next-line no-undef\n if (status !== google.maps.DistanceMatrixStatus.OK) {\n reject(new Error(`Distance Matrix Status not OK, status: ${status}`));\n reject(response);\n } else {\n const distances = [];\n const results = response.rows[0].elements;\n for (let j = 0; j < results.length; j += 1) {\n const element = results[j];\n const distanceText = element.distance.text;\n const distanceVal = element.distance.value;\n const distanceObject = {\n storeid: nearestStoreNums[j],\n distanceText,\n distanceVal\n };\n distances.push(distanceObject);\n }\n\n resolve(distances);\n }\n });\n });\n\n const distancesList = await getDistanceMatrix(service, {\n origins: [origin],\n destinations: nearestDestinations,\n travelMode: \"DRIVING\",\n // eslint-disable-next-line no-undef\n unitSystem: google.maps.UnitSystem.IMPERIAL\n });\n\n distancesList.sort((first, second) => {\n return first.distanceVal - second.distanceVal;\n });\n\n return distancesList;\n}\n\nfunction createStoreCard(\n storeData,\n placeToAdd,\n map,\n storeForRanking = null,\n selectedStore = null\n) {\n const listItem = document.createElement(\"li\");\n listItem.classList.add(\n \"bg-paper-1\",\n \"p-4\",\n \"flex\",\n \"justify-between\",\n \"mb-3\",\n \"cursor-pointer\"\n );\n\n const storeDetailsDiv = document.createElement(\"div\");\n storeDetailsDiv.classList.add(\"w-2/3\");\n\n const nameElement = document.createElement(\"p\");\n nameElement.classList.add(\"typeset-6\", \"mb-3\");\n nameElement.textContent = storeData.getProperty(\"name\");\n storeDetailsDiv.appendChild(nameElement);\n\n const addressElement = document.createElement(\"p\");\n addressElement.classList.add(\"typeset-7\");\n addressElement.innerHTML = storeData\n .getProperty(\"address\")\n .replace(/,/g, \"<br>\");\n storeDetailsDiv.appendChild(addressElement);\n\n listItem.appendChild(storeDetailsDiv);\n\n const logoDistanceDiv = document.createElement(\"div\");\n logoDistanceDiv.classList.add(\"typeset-6\", \"flex\", \"flex-col\");\n\n if (storeData.getProperty(\"logo\") !== \"/logos/original/missing.png\") {\n const logoImage = document.createElement(\"img\");\n logoImage.classList.add(\"self-end\", \"mb-3\");\n logoImage.src = storeData.getProperty(\"logo\");\n if (window.innerWidth <= 992) {\n logoImage.width = 48;\n logoImage.height = 48;\n } else if (storeForRanking.distanceText) {\n logoImage.width = 64;\n logoImage.height = 64;\n } else {\n logoImage.width = 98;\n logoImage.height = 98;\n }\n logoDistanceDiv.appendChild(logoImage);\n }\n\n if (storeForRanking && storeForRanking.distanceText) {\n const distanceElement = document.createElement(\"p\");\n distanceElement.classList.add(\"typeset-4\", \"mt-auto\", \"text-right\");\n distanceElement.textContent = `${storeForRanking.distanceText}LES`;\n logoDistanceDiv.appendChild(distanceElement);\n }\n\n if (\n selectedStore &&\n storeForRanking.storeid === selectedStore.storeid &&\n window.innerWidth >= 992\n ) {\n listItem.classList.add(\"border\", \"border-ink\");\n }\n\n listItem.addEventListener(\"click\", () => {\n analytics.track(\"Store Locator List Item Clicked\");\n const allListItems = document.querySelectorAll(\"li\");\n allListItems.forEach(item => {\n if (item !== listItem) {\n item.classList.remove(\"border\", \"border-ink\");\n }\n });\n listItem.classList.add(\"border\", \"border-ink\");\n\n const storeLocation = storeData.getGeometry().get();\n map.panTo(storeLocation);\n\n storeData.setProperty(\"isSelected\", true);\n map.data.forEach(feature => {\n if (feature !== storeData) {\n feature.setProperty(\"isSelected\", false);\n }\n });\n });\n\n listItem.appendChild(logoDistanceDiv);\n\n placeToAdd.appendChild(listItem);\n}\n\nfunction showStoresList(map, stores, selectedStore) {\n const { data } = map;\n const results = document.querySelector(\"#store-results\");\n results.replaceChildren();\n\n if (selectedStore) {\n const selectedIndex = stores.findIndex(\n store => store.storeid === selectedStore.storeid\n );\n if (selectedIndex !== -1) {\n stores.splice(selectedIndex, 1);\n stores.unshift(selectedStore);\n }\n if (window.innerWidth <= 992) {\n const selectedStoreDiv = document.querySelector(\"#selected-store\");\n const selectedStoreFromStores = stores.find(\n store => store.storeid === selectedStore.storeid\n );\n const storeData = data.getFeatureById(selectedStoreFromStores.storeid);\n selectedStoreDiv.replaceChildren();\n createStoreCard(storeData, selectedStoreDiv, map);\n }\n }\n\n const containsDistanceVal = stores.some(store => \"distanceVal\" in store);\n if (containsDistanceVal) {\n const nearbyStoreElement = document.querySelector(\"#nearby-store-count\");\n nearbyStoreElement.replaceChildren();\n\n const nearbyStoreCount = stores.filter(\n store => store.distanceVal < 1000000\n ).length;\n\n const nearbyStores = document.createElement(\"p\");\n nearbyStores.textContent = `${nearbyStoreCount} stores nearby`;\n nearbyStores.classList.add(\"typeset-7\", \"text-ink-4\", \"mb-3\");\n nearbyStoreElement.appendChild(nearbyStores);\n }\n\n stores.forEach(storeForRanking => {\n const storeData = data.getFeatureById(storeForRanking.storeid);\n createStoreCard(storeData, results, map, storeForRanking, selectedStore);\n });\n}\n\nlet storeLocations = [];\nasync function fetchStoreLocations() {\n const response = await physicalStoreLocations.index();\n storeLocations = response.data.physical_store_locations;\n}\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function initMap() {\n const mapContainer = document.querySelector(\"#map\");\n if (!mapContainer) return;\n\n await fetchStoreLocations();\n\n loader\n .load()\n .then(google => {\n const map = new google.maps.Map(\n document.getElementById(\"map\"),\n mapOptions\n );\n\n map.data.addGeoJson(storeLocations);\n\n // Define the custom marker icons\n map.data.setStyle(feature => {\n const isSelected = feature.getProperty(\"isSelected\");\n const iconUrl = isSelected ? selectedMapMarker : defaultMapMarker;\n const iconSize = isSelected ? 60 : 48;\n return {\n icon: {\n url: iconUrl,\n scaledSize: new google.maps.Size(iconSize, iconSize)\n }\n };\n });\n\n // Set the list of stores before ranking by distance\n const initialStores = [];\n map.data.forEach(store => {\n const storeNum = store.getId();\n initialStores.push({ storeid: storeNum });\n });\n\n showStoresList(map, initialStores, null);\n\n // Recenter the map to the selected store marker\n const selectedMarker = null;\n\n map.data.addListener(\"click\", event => {\n analytics.track(\"Store Locator Map Marker Clicked\");\n const selectedFeature = event.feature;\n selectedFeature.setProperty(\"isSelected\", true);\n\n map.data.forEach(feature => {\n if (feature !== selectedFeature) {\n feature.setProperty(\"isSelected\", false);\n }\n });\n\n const markerLocation = selectedFeature.getGeometry().get();\n\n if (selectedMarker) {\n selectedMarker.setMap(null);\n }\n\n map.panTo(markerLocation);\n\n showStoresList(map, initialStores, {\n storeid: selectedFeature.getId()\n });\n });\n\n // Switches tabs between list and map for mobile\n const mapElement = document.querySelector(\".map-element\");\n const listElement = document.querySelector(\".list-element\");\n\n const handleTabSelection = () => {\n const tabIndicator = document.querySelector(\".tab-indicator\");\n\n if (listElement.classList.contains(\"selected\")) {\n document.querySelector(\"#map\").classList.add(\"hidden\", \"md:block\");\n document\n .querySelector(\"#store-results\")\n .classList.remove(\"hidden\", \"md:block\");\n tabIndicator.style.transform = \"translateX(0%)\";\n } else if (mapElement.classList.contains(\"selected\")) {\n document.querySelector(\"#map\").classList.remove(\"hidden\", \"md:block\");\n document\n .querySelector(\"#store-results\")\n .classList.add(\"hidden\", \"md:block\");\n tabIndicator.style.transform = \"translateX(100%)\";\n }\n };\n\n handleTabSelection();\n\n const selectedStoreDiv = document.querySelector(\"#selected-store\");\n\n mapElement.addEventListener(\"click\", () => {\n listElement.classList.remove(\"selected\");\n mapElement.classList.add(\"selected\");\n selectedStoreDiv.classList.remove(\"hidden\");\n handleTabSelection();\n });\n\n listElement.addEventListener(\"click\", () => {\n mapElement.classList.remove(\"selected\");\n listElement.classList.add(\"selected\");\n selectedStoreDiv.classList.add(\"hidden\");\n handleTabSelection();\n });\n\n const input = document.querySelector(\"#map-searchbar\");\n\n const options = {\n types: [\"address\"]\n };\n const autocomplete = new google.maps.places.Autocomplete(input, options);\n autocomplete.setFields([\"address_components\", \"geometry\", \"name\"]);\n\n let sessionToken;\n\n input.addEventListener(\"focus\", () => {\n sessionToken = new google.maps.places.AutocompleteSessionToken();\n autocomplete.setOptions({ sessionToken });\n });\n\n // Set the origin point when the user selects an address\n const originMarker = new google.maps.Marker({ map: null });\n let originLocation = map.getCenter();\n\n autocomplete.addListener(\"place_changed\", async () => {\n analytics.track(\"Store Locator Place Changed\");\n originMarker.setVisible(false);\n originLocation = map.getCenter();\n const place = autocomplete.getPlace();\n\n originLocation = place.geometry.location;\n map.setCenter(originLocation);\n map.setZoom(14);\n\n originMarker.setPosition(originLocation);\n originMarker.setVisible(true);\n\n let rankedStores = [];\n\n try {\n // Use the selected address to calculate distances to stores\n rankedStores = await calculateDistances(map.data, originLocation);\n } catch (err) {\n console.log(err);\n throw new Error(err);\n }\n\n showStoresList(map, rankedStores, null);\n\n sessionToken = null;\n });\n })\n .catch(e => {\n console.log(e);\n throw e;\n });\n}\n\nconst storeLocator = () => {\n initMap();\n};\n\nexport default storeLocator;\n"],"names":["fastDeepEqual","equal","a","b","length","i","keys","key","DEFAULT_ID","LoaderStatus","Loader","apiKey","authReferrerPolicy","channel","client","id","language","libraries","mapIds","nonce","region","retries","url","version","script","resolve","reject","err","fn","delay","cb","physicalStoreLocations","api","defaultMapMarker","selectedMapMarker","loader","isNorthAmericanStore","centerCoordinates","getMapZoom","isUs","width","mapZoom","mapOptions","calculateHaversineDistance","lat1","lon1","lat2","lon2","dLat","dLon","calculateDistances","data","origin","estimatedDistances","store","storeLoc","storeNum","estDistance","nearestStores","nearestDestinations","nearestStoreNums","service","distancesList","parameters","response","status","distances","results","j","element","distanceText","distanceVal","distanceObject","first","second","createStoreCard","storeData","placeToAdd","map","storeForRanking","selectedStore","listItem","storeDetailsDiv","nameElement","addressElement","logoDistanceDiv","logoImage","distanceElement","item","storeLocation","feature","showStoresList","stores","selectedIndex","selectedStoreDiv","selectedStoreFromStores","nearbyStoreElement","nearbyStoreCount","nearbyStores","storeLocations","fetchStoreLocations","initMap","google","isSelected","iconUrl","iconSize","initialStores","event","selectedFeature","markerLocation","mapElement","listElement","handleTabSelection","tabIndicator","input","options","autocomplete","sessionToken","originMarker","originLocation","rankedStores","storeLocator"],"mappings":"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","x_google_ignoreList":[0]}