{"version":3,"file":"distributor-map-871834ab.js","sources":["../../../../src/scripts/react-components/distributor-locator/distributor-card.tsx","../../../../src/scripts/react-components/distributor-locator/distributor-map.tsx"],"sourcesContent":["import React, { useId } from 'react';\nimport PropTypes, { InferProps } from 'prop-types';\n\nfunction DistributorCard({\n name,\n latitude,\n longitude,\n milesFromSearchPoint,\n distributorType,\n dynamicData,\n getDirectionsLabel,\n websiteLabel,\n profileLabel,\n imagesPath,\n isMetal,\n hideMiles\n}: InferProps) {\n const id = useId();\n const distributorTypeDisplayName = dynamicData.DistributorTypeDisplayName;\n const distributorTypeImageSource = imagesPath\n ? `${imagesPath}${distributorType.toLowerCase().replace(' ', '-')}.png`\n : '/Areas/GAF/images/' +\n distributorType.toLowerCase().replace(' ', '-') +\n '.png';\n\n const buildGoogleMapsDirectionsURL = (targetAddress: string): string => {\n const googleMapsBaseURL = 'https://www.google.com/maps/dir/?api=1';\n const destinationLocation = `&destination=${encodeURIComponent(\n targetAddress\n )}`;\n return googleMapsBaseURL + destinationLocation;\n };\n\n const trimmedMiles = Math.ceil(milesFromSearchPoint * 10) / 10;\n let formattedPhoneNumber;\n\n if (dynamicData.Phone) {\n if (dynamicData.Phone?.[0] === '(') {\n formattedPhoneNumber = dynamicData.Phone;\n } else {\n formattedPhoneNumber =\n dynamicData.Phone.length === 10\n ? `(${dynamicData.Phone.substring(\n 0,\n 3\n )}) ${dynamicData.Phone.substring(\n 3,\n 6\n )}-${dynamicData.Phone.substring(6, 10)}`\n : `${dynamicData.Phone.substring(\n 0,\n 1\n )} (${dynamicData.Phone.substring(\n 1,\n 4\n )}) ${dynamicData.Phone.substring(\n 4,\n 7\n )}-${dynamicData.Phone.substring(7, 11)}`;\n }\n }\n\n const handleMouseEnterAndFocus = () => {\n const customEvent = new CustomEvent('myCustomEvent', {\n detail: {\n latitude,\n longitude\n },\n bubbles: true\n });\n window.dispatchEvent(customEvent);\n };\n\n return (\n \n
\n
\n
\n
\n

\n {name}\n

\n {dynamicData.DistributorTypeDisplayName && !isMetal && (\n

\n {dynamicData.DistributorTypeDisplayName}\n

\n )}\n
\n
\n

\n {dynamicData.FullAddress ? (\n <>{dynamicData.FullAddress}\n ) : (\n <>\n {dynamicData.Address1}\n {dynamicData.Address2 ? `, ${dynamicData.Address2}` : ''}\n {dynamicData.City ? `, ${dynamicData.City}` : ''}\n {dynamicData.State ? `, ${dynamicData.State}` : ''}\n \n )}\n

\n

\n {!isMetal ? (\n \n \n {' '}\n {milesFromSearchPoint ? `${trimmedMiles} mi` : ''} -{' '}\n {getDirectionsLabel}\n \n \n \n \n \n ) : (\n <>\n {!hideMiles && (\n \n {milesFromSearchPoint ? `${trimmedMiles} mi` : ''}\n \n )}\n \n )}\n

\n
\n
\n {!isMetal && (\n
\n \n
\n )}\n
\n \n {dynamicData.Phone ? (\n \n {formattedPhoneNumber}\n \n \n \n \n ) : (\n ''\n )}\n {dynamicData.Website && !isMetal && (\n \n {websiteLabel}\n \n )}\n {dynamicData.ProfileUrl && isMetal && (\n \n {profileLabel}\n \n )}\n
\n \n \n );\n}\n\nDistributorCard.propTypes = {\n name: PropTypes.string.isRequired,\n latitude: PropTypes.number.isRequired,\n longitude: PropTypes.number.isRequired,\n milesFromSearchPoint: PropTypes.number.isRequired,\n customerId: PropTypes.string,\n distributorId: PropTypes.string.isRequired,\n distributorType: PropTypes.string.isRequired,\n dynamicData: PropTypes.shape({\n Address1: PropTypes.string,\n Address2: PropTypes.string,\n FullAddress: PropTypes.string,\n City: PropTypes.string,\n DistributorTypeDisplayName: PropTypes.string.isRequired,\n Fax: PropTypes.string,\n Phone: PropTypes.string,\n PostalCode: PropTypes.string.isRequired,\n ProductTypes: PropTypes.array,\n ProfileUrl: PropTypes.string,\n State: PropTypes.string,\n StoreNumber: PropTypes.string,\n Website: PropTypes.string\n }).isRequired,\n getDirectionsLabel: PropTypes.string,\n websiteLabel: PropTypes.string,\n profileLabel: PropTypes.string,\n imagesPath: PropTypes.string,\n isMetal: PropTypes.bool,\n hideMiles: PropTypes.bool\n};\n\nexport default DistributorCard;\n","import React, { useEffect, useRef } from 'react';\nimport PropTypes, { InferProps } from 'prop-types';\n\ndeclare global {\n interface Window {\n initMap: () => void;\n google: unknown;\n }\n}\n\ninterface MarkerData {\n latitude?: number;\n longitude?: number;\n marker: google.maps.Marker | null;\n infoWindow: google.maps.InfoWindow | null;\n prefixNumber?: string;\n name?: string;\n milesFromSearchPoint?: number;\n distributorType?: string;\n dynamicData?: {\n Address1: string;\n Address2: string;\n FullAddress?: string;\n City: string;\n DistributorTypeDisplayName: string;\n State: string;\n PostalCode: string;\n Phone: string;\n Website: string;\n ProfileUrl?: string;\n };\n opened?: boolean;\n}\n\nfunction DistributorMap({\n apiKey,\n data,\n zoomRadius,\n websiteLabel,\n profileLabel,\n searchThisAreaLabel,\n imagesPath,\n isMetalContractor,\n hideMiles\n}: InferProps) {\n const centerLatitude = data?.latitude || 0;\n const centerLongitude = data?.longitude || 0;\n const zoom = zoomRadius || 50;\n const mapCenter = { lat: centerLatitude, lng: centerLongitude };\n let markers: MarkerData[] = [];\n const markersRef = useRef([]);\n\n // Custom custom event for zoom change\n const zoomChangeEvent = new CustomEvent('mapZoomChanged', {\n detail: {\n zoom: zoom\n }\n });\n\n const handleZoomChanged = async (map: google.maps.Map) => {\n zoomChangeEvent.detail.zoom = map.getZoom() as number;\n window.dispatchEvent(zoomChangeEvent);\n };\n\n const createCustomControl = async (map: google.maps.Map) => {\n const customControlDiv = document.createElement('div');\n customControlDiv.className = 'distributor-map__custom-search-area-button';\n customControlDiv.style.display = 'none';\n\n const customControlDivContent =\n `${searchThisAreaLabel}` +\n `` +\n `` +\n ``;\n customControlDiv.innerHTML = customControlDivContent;\n map.controls[google.maps.ControlPosition.BOTTOM_CENTER].push(\n customControlDiv\n );\n\n setTimeout(() => {\n customControlDiv.style.display = 'none';\n });\n\n // Event listener for click event on custom control button\n customControlDiv.addEventListener('click', () => {\n customControlDiv.style.display = 'none';\n const newCenter = map.getCenter();\n const customEvent = new CustomEvent('searchThisArea', {\n detail: {\n latitude: newCenter?.lat(),\n longitude: newCenter?.lng()\n },\n bubbles: true\n });\n window.dispatchEvent(customEvent);\n });\n\n map.addListener('dragend', () => {\n customControlDiv.style.display = 'inline-flex';\n });\n\n setTimeout(() => {\n map.addListener('zoom_changed', () => {\n customControlDiv.style.display = 'inline-flex';\n });\n }, 1000);\n };\n\n const createInfoWindowContent = (markerData: MarkerData) => {\n if (markerData.milesFromSearchPoint)\n markerData.milesFromSearchPoint =\n Math.round(markerData.milesFromSearchPoint * 10) / 10;\n if (\n markerData.dynamicData?.Phone &&\n !(markerData.dynamicData.Phone[0] === '(')\n ) {\n markerData.dynamicData.Phone =\n markerData.dynamicData.Phone.length === 10\n ? `(${markerData.dynamicData.Phone.substring(\n 0,\n 3\n )}) ${markerData.dynamicData.Phone.substring(\n 3,\n 6\n )}-${markerData.dynamicData.Phone.substring(6, 10)}`\n : `${markerData.dynamicData.Phone.substring(\n 0,\n 1\n )} (${markerData.dynamicData.Phone.substring(\n 1,\n 4\n )}) ${markerData.dynamicData.Phone.substring(\n 4,\n 7\n )}-${markerData.dynamicData.Phone.substring(7, 11)}`;\n }\n\n const websiteText = markerData.dynamicData?.Website\n ? `` +\n `${websiteLabel}` +\n ``\n : '';\n\n const _imagesPath = imagesPath || '/Areas/GAF/images';\n\n if (isMetalContractor) {\n return `
\n
\n
\n
\n

${markerData.name}

\n
\n
\n ${\n !hideMiles\n ? `

\n ${markerData.milesFromSearchPoint} mi\n

`\n : ''\n }\n

${\n markerData.dynamicData?.FullAddress\n }

\n
\n
\n
\n \n
\n `;\n }\n\n return (\n `
` +\n `
` +\n `
` +\n `
` +\n `

${markerData.name}

` +\n `

${markerData.dynamicData?.DistributorTypeDisplayName}

` +\n `
` +\n `
` +\n `

` +\n `${markerData.dynamicData?.Address1}` +\n `${\n markerData.dynamicData?.Address2\n ? `, ${markerData.dynamicData?.Address2}`\n : ''\n }` +\n `${\n markerData.dynamicData?.City ? `, ${markerData.dynamicData?.City}` : ''\n }` +\n `${\n markerData.dynamicData?.State\n ? `, ${markerData.dynamicData?.State}`\n : ''\n }` +\n `

` +\n `

` +\n `` +\n `${\n markerData.milesFromSearchPoint\n ? `${markerData.milesFromSearchPoint} mi`\n : ''\n } - Get Directions` +\n `` +\n `` +\n `` +\n `` +\n `

` +\n `
` +\n `
` +\n `
` +\n `\"${\n` +\n `
` +\n `
` +\n `` +\n `
`\n );\n };\n\n useEffect(() => {\n window.initMap = () => {\n const mapOptions = {\n center: mapCenter,\n zoom: zoom,\n mapTypeControl: false,\n scaleControl: true,\n streetViewControl: false,\n rotateControl: false,\n fullscreenControl: false,\n zoomControl: true,\n zoomControlOptions: {\n position: google.maps.ControlPosition.RIGHT_TOP\n }\n };\n\n const mapElement = document.getElementById('map') as HTMLElement;\n const map = new window.google.maps.Map(mapElement, mapOptions);\n\n const markerSize = isMetalContractor ? 45 : 25;\n const markerHoverSize = isMetalContractor ? 65 : 40;\n\n // Set the map markers\n const markerIcon = {\n url: '/Areas/GAF/images/distributor-locator-marker.svg',\n scaledSize: new google.maps.Size(markerSize, markerSize)\n };\n const hoveredMarkerIcon = {\n url: '/Areas/GAF/images/distributor-locator-marker--active.svg',\n scaledSize: new google.maps.Size(markerHoverSize, markerHoverSize)\n };\n\n if (data && data.distributors) {\n markers = data.distributors.map(distributor => ({\n latitude: distributor?.latitude as number,\n longitude: distributor?.longitude as number,\n marker: null,\n infoWindow: null,\n prefixNumber: distributor?.prefixNumber as string,\n name: distributor?.name as string,\n milesFromSearchPoint: distributor?.milesFromSearchPoint as number,\n distributorType: distributor?.distributorType as string,\n dynamicData: {\n Address1: distributor?.dynamicData?.Address1 as string,\n Address2: distributor?.dynamicData?.Address2 as string,\n FullAddress: distributor?.dynamicData?.FullAddress as string,\n City: distributor?.dynamicData?.City as string,\n DistributorTypeDisplayName: distributor?.dynamicData\n ?.DistributorTypeDisplayName as string,\n State: distributor?.dynamicData?.State as string,\n PostalCode: distributor?.dynamicData?.PostalCode as string,\n Phone: distributor?.dynamicData?.Phone as string,\n Website: distributor?.dynamicData?.Website as string,\n ProfileUrl: distributor?.dynamicData?.ProfileUrl as string\n }\n }));\n\n markersRef.current = markers;\n markers.forEach(markerData => {\n const marker = new google.maps.Marker({\n position: {\n lat: markerData.latitude as number,\n lng: markerData.longitude as number\n },\n map: map,\n icon: markerIcon,\n ...(isMetalContractor\n ? {\n label: {\n color: '#fff',\n fontFamily: 'ITC Avant Garde Gothic Std Demi',\n fontSize: '14px',\n fontWeight: 'normal',\n text: markerData.prefixNumber?.toString() || ''\n }\n }\n : {})\n });\n\n // Create the info window\n const infoWindow = new google.maps.InfoWindow({\n content: createInfoWindowContent(markerData),\n minWidth: 300\n });\n\n // Assign the infoWindow to the markerData\n markerData.marker = marker;\n markerData.infoWindow = infoWindow;\n\n // Add event listeners for marker events\n marker.addListener('mouseover', () => {\n marker.setIcon(hoveredMarkerIcon);\n });\n\n marker.addListener('click', () => {\n // Close all other info windows\n markers.forEach(markerData => {\n markerData.infoWindow?.close();\n markerData.marker?.setIcon(markerIcon);\n markerData.opened = false;\n });\n\n markerData.marker?.setIcon(hoveredMarkerIcon);\n infoWindow.open(map, marker);\n\n // Set the default icon to the other markers\n markers.forEach(markerData => {\n if (markerData.marker !== marker) {\n markerData.marker?.setIcon(markerIcon);\n }\n });\n\n markerData.opened = true;\n });\n\n marker.addListener('mouseout', () => {\n if (markerData.opened !== true) {\n marker.setIcon(markerIcon);\n }\n });\n });\n\n // Set the map bounds\n const bounds = new google.maps.LatLngBounds();\n markers.forEach(marker => {\n bounds.extend(\n new google.maps.LatLng(\n marker.latitude as number,\n marker.longitude as number\n )\n );\n });\n map.fitBounds(bounds);\n\n // Add event listener to close the info window and reset markers when the map is clicked\n google.maps.event.addListener(map, 'click', () => {\n markers.forEach(markerData => {\n markerData.infoWindow?.close();\n markerData.marker?.setIcon(markerIcon);\n });\n });\n\n // Add event listeners for the custom event\n const handleCardHover = (event: CustomEvent) => {\n // close all info windows\n markersRef.current.forEach(markerData => {\n markerData.infoWindow?.close();\n markerData.marker?.setIcon(markerIcon);\n });\n\n const { latitude, longitude } = event.detail;\n markersRef.current.forEach(markerData => {\n if (\n markerData.latitude === latitude &&\n markerData.longitude === longitude\n ) {\n markerData.marker?.setIcon(hoveredMarkerIcon);\n } else {\n markerData.marker?.setIcon(markerIcon);\n }\n });\n };\n\n //Create the custom control button to Search this area\n createCustomControl(map);\n\n // Event listener for zoom_changed event (user zooms in or out the map)\n setTimeout(() => {\n map.addListener('zoom_changed', () => {\n handleZoomChanged(map as google.maps.Map);\n });\n }, 1000);\n\n window.addEventListener(\n 'myCustomEvent',\n handleCardHover as EventListener\n );\n return () => {\n window.removeEventListener(\n 'myCustomEvent',\n handleCardHover as EventListener\n );\n };\n }\n return;\n };\n\n if (!window.google) {\n const script = document.createElement('script');\n script.src = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&callback=initMap`;\n script.defer = true;\n document.head.appendChild(script);\n\n // Clean up the script tag when the component unmounts\n return () => {\n document.head.removeChild(script);\n };\n } else {\n window.initMap();\n return undefined;\n }\n }, [data]);\n\n return
;\n}\n\nDistributorMap.propTypes = {\n apiKey: PropTypes.string.isRequired,\n data: PropTypes.shape({\n page: PropTypes.number,\n pageSize: PropTypes.number,\n latitude: PropTypes.number,\n longitude: PropTypes.number,\n searchRadius: PropTypes.number,\n totalResultCount: PropTypes.number,\n distributors: PropTypes.arrayOf(\n PropTypes.shape({\n prefixNumber: PropTypes.string,\n name: PropTypes.string,\n latitude: PropTypes.number,\n longitude: PropTypes.number,\n milesFromSearchPoint: PropTypes.number,\n customerId: PropTypes.string,\n distributorId: PropTypes.string,\n distributorType: PropTypes.string,\n dynamicData: PropTypes.shape({\n Address1: PropTypes.string,\n Address2: PropTypes.string,\n FullAddress: PropTypes.string,\n City: PropTypes.string,\n DistributorTypeDisplayName: PropTypes.string,\n Fax: PropTypes.string,\n Phone: PropTypes.string,\n PostalCode: PropTypes.string,\n ProductTypes: PropTypes.array,\n State: PropTypes.string,\n StoreNumber: PropTypes.string,\n Website: PropTypes.string,\n ProfileUrl: PropTypes.string\n })\n })\n )\n }),\n zoomRadius: PropTypes.number,\n websiteLabel: PropTypes.string,\n profileLabel: PropTypes.string,\n searchThisAreaLabel: PropTypes.string.isRequired,\n imagesPath: PropTypes.string,\n isMetalContractor: PropTypes.bool,\n hideMiles: PropTypes.bool\n};\n\nexport default DistributorMap;\n"],"names":["DistributorCard","name","latitude","longitude","milesFromSearchPoint","distributorType","dynamicData","getDirectionsLabel","websiteLabel","profileLabel","imagesPath","isMetal","hideMiles","id","useId","distributorTypeDisplayName","distributorTypeImageSource","buildGoogleMapsDirectionsURL","targetAddress","googleMapsBaseURL","destinationLocation","trimmedMiles","formattedPhoneNumber","_a","handleMouseEnterAndFocus","customEvent","React","PropTypes","DistributorMap","apiKey","data","zoomRadius","searchThisAreaLabel","isMetalContractor","centerLatitude","centerLongitude","zoom","mapCenter","markers","markersRef","useRef","zoomChangeEvent","handleZoomChanged","map","createCustomControl","customControlDiv","customControlDivContent","newCenter","createInfoWindowContent","markerData","websiteText","_b","_c","_imagesPath","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","useEffect","mapOptions","mapElement","markerSize","markerHoverSize","markerIcon","hoveredMarkerIcon","distributor","marker","infoWindow","bounds","handleCardHover","event","script"],"mappings":"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"}