{"version":3,"file":"SearchMap.BoXiChfG.mjs","names":["useRef","useState","useMemo"],"sources":["https:/framerusercontent.com/modules/k85ZFDb5Gla9dUuLu7y7/JjiT1wharvAGa2IKxuA4/SearchMap.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useMemo}from\"react\";import{addPropertyControls,ControlType}from\"framer\";const MAX_RADIUS_KM=20;function escapeHtml(str){return str.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\");}function sanitizeUrl(url){try{const parsed=new URL(url);if(parsed.protocol===\"https:\"||parsed.protocol===\"http:\"){return parsed.href;}}catch{}return\"\";}export default function GoogleMap({googleMapsApiKey,wpRoute,markerIconUrl,initialZoom,focusZoom}){const mapRef=useRef(null);const mapInstance=useRef(null);const markersRef=useRef({});const initialPostcodeRef=useRef(null);const hasAutoScrolledRef=useRef(false);const infoWindowRef=useRef(null);const[search,setSearch]=useState(\"\");const[submittedSearch,setSubmittedSearch]=useState(\"\");const[allLocations,setAllLocations]=useState([]);const[locations,setLocations]=useState([]);const[isLoading,setIsLoading]=useState(true);const[isMapReady,setIsMapReady]=useState(false);const[showAll,setShowAll]=useState(false);const[isSearching,setIsSearching]=useState(false);/* -------------------- STYLES -------------------- */const styles=`\n        .gm-root { position: relative; width: 100%; height: 100%; }\n        .gm-map { width: 100%; height: 100%; border-radius: 12px; overflow: hidden; }\n        .gm-overlay {\n            position: absolute;\n            // top: 50%;\n            // left: 24px;\n            // transform: translateY(-50%);\n            top: 0;\n            left:50px;\n            bottom:0;\n            margin:80px 0 125px 0;\n            pointer-events: none;\n        }\n        .gm-panel {\n            width: 520px;\n            max-height: 100%;\n            background: #fff;\n            border-radius: 16px;\n            box-shadow: 0 12px 40px rgba(0,0,0,0.15);\n            padding: 20px 20px 30px 20px;\n            display: flex;\n            flex-direction: column;\n            gap: 16px;\n            pointer-events: auto;\n            overflow: hidden;\n            overscroll-behavior: contain;\n        }\n        .gm-search-label {\n            font-family: Montserrat, sans-serif;\n            font-size: 20px;\n            color: #A0D083;\n            font-weight: 600;\n            text-align: center;\n            flex-shrink: 0;\n        }\n        .gm-search {\n            display: flex;\n            gap: 5px;\n            padding: 5px;\n            border-radius: 50px;\n            background-color:#F3F4F5;\n            flex-shrink: 0;\n        }\n        .gm-input {\n            flex: 1;\n            min-width: 0; /* allows shrinking */\n            padding: 20px;\n            border-radius: 50px;\n            border: 1px solid #ddd;\n            font-size: 14px;\n            font-family: Montserrat, sans-serif;\n            color: #8A8F96;\n            height: 48px;\n        }\n        .gm-input::placeholder {\n            color: #999999;\n        }\n        .gm-input:focus {\n            outline: none;\n            border: 1px solid #ddd;\n            box-shadow: none;\n        }\n        .gm-button {\n            flex-shrink: 0; /* ?? fixed width */\n            padding: 12px 18px;\n            border-radius: 25px;\n            border: none;\n            background: #A0D083;\n            color: white;\n            font-size: 14px;\n            font-weight: 600;\n            cursor: pointer;\n            font-family: Montserrat, sans-serif;\n            white-space: nowrap;\n        }\n        .gm-button:hover:not(:disabled) {\n            background: #94C278;\n        }\n        .gm-button:disabled {\n            opacity: 0.7;\n            cursor: not-allowed;\n        }\n        .gm-list {\n            overflow-y: auto;\n            display: grid;\n            gap: 12px;\n            flex: 1;\n            min-height: 0;\n            overscroll-behavior: contain;\n        }\n        .gm-empty {\n            font-family: Montserrat, sans-serif;\n            text-align: center;\n            padding: 24px;\n            color: #777;\n            font-size: 14px;\n        }\n        .gm-item {\n            padding: 20px 15px 15px 20px;\n            border-radius: 15px;\n            background: #E2F1DA;\n            display: flex;\n            justify-content: space-between;\n            align-items: flex-end;\n            gap: 15px;\n            cursor: pointer;\n        }\n        .gm-item-detail{\n            display: flex;\n            flex-flow: column;\n            gap: 15px\n        }\n        .gm-name-wrapper { \n            display: flex; \n            gap:5px; \n            align-items:center\n        }\n        .gm-name { \n            font-family: Montserrat, sans-serif;\n            font-size: 16px;\n            font-weight: 600; \n            color: #A0D083;\n        }\n        .gm-km {  \n            color: #A0D083;\n            font-family: Montserrat, sans-serif;\n            font-size: 12px; \n        }      \n        .gm-address, .gm-phone {  \n            font-family: Montserrat, sans-serif;\n            font-size: 14px;\n            color: #8A8F96;\n        }       \n        .gm-direction a{  \n            font-family: Montserrat, sans-serif !important;\n            font-size: 14px;\n            color: #8A8F96 !important;\n        } \n        .gm-link {\n            padding: 12px 18px;\n            border-radius: 25px;\n            border: none;\n            background-color: #A0D083;\n            color: white;\n            font-size: 16px;\n            font-weight: 600;\n            cursor: pointer;\n            font-family: Montserrat, sans-serif;\n            white-space: nowrap;\n            text-decoration: none;\n        }        \n\n        .gm-map-wrapper {\n            position: relative;\n            width: 100%;\n            height: 100%;\n            border-radius: 12px;\n            overflow: hidden;\n        }\n        .gm-preloader {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: #F5FAF3;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            z-index: 1;\n            transition: opacity 0.3s ease;\n        }\n        .gm-preloader.hidden {\n            opacity: 0;\n            pointer-events: none;\n        }\n        .gm-spinner {\n            width: 48px;\n            height: 48px;\n            border: 4px solid #e0e0e0;\n            border-top: 4px solid #A0D083;\n            border-radius: 50%;\n            animation: gm-spin 0.8s linear infinite;\n        }\n\n        .gm-style .gm-style-iw-c{\n            border-radius: 25px !important;\n        }\n\n\n        @keyframes gm-spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n\n        @media (max-width: 768px) {\n            .gm-root {\n                display: flex;\n                flex-direction: column;\n                // height: auto;\n                gap: 16px;\n                height: 100%;\n                //justify-content:center;\n            }\n\n            .gm-map-wrapper {\n                order: 2;\n                // height: 300px;\n                flex: 1;\n            }\n\n            .gm-overlay {\n                position: relative;\n                order: 1;\n                top: auto;\n                left: auto;\n                right: auto;\n                bottom: auto;\n                margin: 0;\n                padding: 0px;\n            }\n\n            .gm-panel {\n                width: 100%;\n                max-height: 400px;\n                border-radius: 12px;\n            }\n\n            .gm-item {\n                flex-flow: column;\n                align-items: flex-start;\n            }\n        }        \n    `;/* -------------------- READ URL PARAM -------------------- */useEffect(()=>{const params=new URLSearchParams(window.location.search);const postcode=params.get(\"postcode\");if(postcode){setSearch(postcode);initialPostcodeRef.current=postcode.trim().toLowerCase();}},[]);/* -------------------- AUTO SCROLL -------------------- */useEffect(()=>{if(initialPostcodeRef.current&&mapRef.current&&!hasAutoScrolledRef.current){hasAutoScrolledRef.current=true;mapRef.current.scrollIntoView({behavior:\"smooth\",block:\"center\"});}},[]);/* -------------------- LOAD GOOGLE MAPS SCRIPT -------------------- */useEffect(()=>{if(window.google?.maps)return;const existingScript=document.querySelector('script[src*=\"maps.googleapis.com/maps/api/js\"]');if(existingScript)return;const script=document.createElement(\"script\");script.src=`https://maps.googleapis.com/maps/api/js?key=${googleMapsApiKey}`;script.async=true;script.onerror=()=>console.error(\"Failed to load Google Maps script\");document.head.appendChild(script);},[googleMapsApiKey]);/* -------------------- LOAD DATA + MAP -------------------- */useEffect(()=>{let cancelled=false;async function loadDataAndInitMap(){setIsLoading(true);setIsMapReady(false);const res=await fetch(wpRoute);const json=await res.json();const items=json.data?.boards?.[0]?.groups?.[0]?.items_page?.items;if(!Array.isArray(items)){console.error(\"Unexpected API response structure\");setIsLoading(false);return;}const parsedLocations=items.map(item=>{const lat=parseFloat(item.column_values.find(c=>c.id===\"text_mm0an8qv\")?.text||\"\");const lng=parseFloat(item.column_values.find(c=>c.id===\"text_mm0adgr4\")?.text||\"\");if(!Number.isFinite(lat)||!Number.isFinite(lng))return null;const postcode=(item.column_values.find(c=>c.id===\"text_mm0awty8\")?.text||\"\").trim().toLowerCase();const address=item.column_values.find(c=>c.id===\"text__1\")?.text||\"\";const url=item.column_values.find(c=>c.id===\"text_mm0a8etp\")?.text||\"\";const name=item.name.replace(/\\bEd Park\\b/g,\"Edmondson Park\");return{name,address,postcode,lat,lng,url};}).filter(Boolean);if(cancelled)return;setAllLocations(parsedLocations);setLocations(parsedLocations);setIsLoading(false);// --- Wait for Google Maps to be available, then init map ---\nawait waitForGoogleMaps();if(cancelled||!mapRef.current||parsedLocations.length===0)return;const map=new window.google.maps.Map(mapRef.current,{zoom:initialZoom,center:parsedLocations[0],mapTypeControl:false,fullscreenControl:false,streetViewControl:false,zoomControl:false,rotateControl:false,scaleControl:false});mapInstance.current=map;markersRef.current={};const customMarkerIcon=markerIconUrl&&window.google?{url:markerIconUrl,scaledSize:new window.google.maps.Size(40,40),anchor:new window.google.maps.Point(20,40)}:undefined;const infoWindow=new window.google.maps.InfoWindow;infoWindowRef.current=infoWindow;parsedLocations.forEach(loc=>{const marker=new window.google.maps.Marker({position:{lat:loc.lat,lng:loc.lng},map,title:loc.name,icon:customMarkerIcon});marker.addListener(\"click\",()=>{const directionsUrl=`https://www.google.com/maps/dir/?api=1&destination=${loc.lat},${loc.lng}&travelmode=driving`;const safeUrl=sanitizeUrl(loc.url);infoWindow.setContent(`\n                        <div style=\"font-family:Montserrat,sans-serif;max-width:260px;padding:4px 0;\">\n                            <div style=\"font-size:16px;font-weight:600;color:#A0D083;margin-bottom:8px;\">${escapeHtml(loc.name)}</div>\n                            <div style=\"font-size:13px;color:#8A8F96;margin-bottom:6px;\">${escapeHtml(loc.address)}</div>\n                            <div style=\"font-size:13px;color:#8A8F96;margin-bottom:6px;\">Phone: 1300 147 683</div>\n                            <div style=\"display:flex;gap:8px;margin-top:10px;\">\n                                <a href=\"${directionsUrl}\" target=\"_blank\" rel=\"noopener noreferrer\"\n                                   style=\"font-size:13px;color:#A0D083;text-decoration:none;font-weight:600;\">\n                                    Direction\n                                </a>\n                                ${safeUrl?`<a href=\"${safeUrl}\" target=\"_blank\" rel=\"noopener noreferrer\"\n                                   style=\"font-size:13px;color:#A0D083;text-decoration:none;font-weight:600;\">\n                                    View Centre\n                                </a>`:\"\"}\n                            </div>\n                        </div>\n                    `);infoWindow.open(map,marker);});markersRef.current[loc.postcode.toLowerCase().trim()]=marker;});setIsMapReady(true);// --- Get user location in background (disabled - list only shows on search) ---\n// try {\n//     const userCoords = await new Promise<{ lat: number; lng: number }>((resolve, reject) => {\n//         if (!navigator.geolocation) return reject(\"No geolocation\")\n//         navigator.geolocation.getCurrentPosition(\n//             (pos) =>\n//                 resolve({\n//                     lat: pos.coords.latitude,\n//                     lng: pos.coords.longitude,\n//                 }),\n//             (err) => reject(err),\n//             { timeout: 10000 }\n//         )\n//     })\n//\n//     if (cancelled) return\n//\n//     const nearby = findNearestLocationFromList(\n//         userCoords.lat,\n//         userCoords.lng,\n//         parsedLocations\n//     )\n//     if (nearby.length > 0) {\n//         setLocations(nearby)\n//     }\n// } catch (err) {\n//     console.warn(\"User location unavailable, keeping default order\")\n// }\n}loadDataAndInitMap();return()=>{cancelled=true;};},[googleMapsApiKey,wpRoute]);/* -------------------- HELPERS -------------------- */function waitForGoogleMaps(timeout=15e3){return new Promise((resolve,reject)=>{if(window.google?.maps)return resolve();const start=Date.now();const interval=setInterval(()=>{if(window.google?.maps){clearInterval(interval);resolve();}else if(Date.now()-start>timeout){clearInterval(interval);reject(new Error(\"Google Maps failed to load\"));}},100);});}async function getLatLng(postcode){const geocoder=new window.google.maps.Geocoder;return new Promise((resolve,reject)=>{geocoder.geocode({address:postcode,componentRestrictions:{country:\"AU\"}},(results,status)=>{if(status===\"OK\"&&results&&results[0]){const loc=results[0].geometry.location;resolve({lat:loc.lat(),lng:loc.lng()});}else{reject(status);}});});}function getDistance(lat1,lng1,lat2,lng2){const R=6371;const dLat=(lat2-lat1)*Math.PI/180;const dLng=(lng2-lng1)*Math.PI/180;const a=Math.sin(dLat/2)**2+Math.cos(lat1*Math.PI/180)*Math.cos(lat2*Math.PI/180)*Math.sin(dLng/2)**2;const c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));return R*c;}function findNearestLocationFromList(userLat,userLng,locList){return locList.map(loc=>({...loc,distance:getDistance(userLat,userLng,loc.lat,loc.lng)})).filter(loc=>loc.distance<=MAX_RADIUS_KM)// 20km cap\n.sort((a,b)=>a.distance-b.distance);}function focusByPostcode(postcode,loc){const map=mapInstance.current;const marker=markersRef.current[postcode.toLowerCase().trim()];if(!map||!marker)return;map.setZoom(focusZoom);map.panTo(marker.getPosition());// ? Mid-range screens only (tablet landscape / small laptop)\nif(window.innerWidth>768&&window.innerWidth<1200){map.panBy(-220,0)// shift map right\n;}marker.setAnimation(window.google.maps.Animation.BOUNCE);setTimeout(()=>{marker.setAnimation(null);// Reset offset to 0 after bounce ends\nif(infoWindowRef.current){infoWindowRef.current.setOptions({pixelOffset:new window.google.maps.Size(0,0)});}},1400);// Open InfoWindow with offset during bounce\nif(loc&&infoWindowRef.current){const directionsUrl=`https://www.google.com/maps/dir/?api=1&destination=${loc.lat},${loc.lng}&travelmode=driving`;infoWindowRef.current.setOptions({pixelOffset:new window.google.maps.Size(0,-30)});const safeUrl=sanitizeUrl(loc.url);infoWindowRef.current.setContent(`\n                <div style=\"font-family:Montserrat,sans-serif;max-width:260px;padding:4px 0;\">\n                    <div style=\"font-size:16px;font-weight:600;color:#A0D083;margin-bottom:8px;\">${escapeHtml(loc.name)}</div>\n                    <div style=\"font-size:13px;color:#8A8F96;margin-bottom:6px;\">${escapeHtml(loc.address)}</div>\n                    <div style=\"font-size:13px;color:#8A8F96;margin-bottom:6px;\">Phone: 1300 147 683</div>\n                    <div style=\"display:flex;gap:8px;margin-top:10px;\">\n                        <a href=\"${directionsUrl}\" target=\"_blank\" rel=\"noopener noreferrer\"\n                           style=\"font-size:13px;color:#A0D083;text-decoration:none;font-weight:600;\">\n                            Direction\n                        </a>\n                        ${safeUrl?`<a href=\"${safeUrl}\" target=\"_blank\" rel=\"noopener noreferrer\"\n                           style=\"font-size:13px;color:#A0D083;text-decoration:none;font-weight:600;\">\n                            View Centre\n                        </a>`:\"\"}\n                    </div>\n                </div>\n            `);infoWindowRef.current.open(map,marker);}}function getDirectionsUrl(destinationLat,destinationLng){return`https://www.google.com/maps/dir/?api=1&destination=${destinationLat},${destinationLng}&travelmode=driving`;}/* -------------------- AUTO SEARCH + FOCUS WHEN URL POSTCODE EXISTS -------------------- */useEffect(()=>{if(!initialPostcodeRef.current||!isMapReady||isLoading||allLocations.length===0)return;const searchNearestFromUrl=async()=>{try{const{lat,lng}=await getLatLng(initialPostcodeRef.current);const sorted=findNearestLocationFromList(lat,lng,allLocations);setLocations(sorted);setSubmittedSearch(initialPostcodeRef.current);setShowAll(false);if(sorted.length>0)focusByPostcode(sorted[0].postcode,sorted[0]);}catch(err){console.warn(\"Invalid postcode in URL:\",initialPostcodeRef.current);}};searchNearestFromUrl();},[initialPostcodeRef.current,isMapReady,isLoading,allLocations]);/* -------------------- FILTERED LOCATIONS -------------------- */const filteredLocations=useMemo(()=>{if(isLoading)return[];return locations// already sorted by latest search\n;},[locations,isLoading]);/* -------------------- RENDER -------------------- */return /*#__PURE__*/_jsxs(\"div\",{className:\"gm-root\",children:[/*#__PURE__*/_jsx(\"style\",{children:styles}),/*#__PURE__*/_jsxs(\"div\",{className:\"gm-map-wrapper\",children:[/*#__PURE__*/_jsx(\"div\",{className:`gm-preloader${isMapReady?\" hidden\":\"\"}`,children:/*#__PURE__*/_jsx(\"div\",{className:\"gm-spinner\"})}),/*#__PURE__*/_jsx(\"div\",{ref:mapRef,className:\"gm-map\",style:{width:\"100%\",height:\"100%\"}})]}),/*#__PURE__*/_jsx(\"div\",{className:\"gm-overlay\",children:/*#__PURE__*/_jsxs(\"div\",{className:\"gm-panel\",children:[/*#__PURE__*/_jsx(\"div\",{className:\"gm-search-label\",children:\"Find your nearest centre:\"}),/*#__PURE__*/_jsxs(\"div\",{className:\"gm-search\",children:[/*#__PURE__*/_jsx(\"input\",{className:\"gm-input\",value:search,onChange:e=>setSearch(e.target.value),placeholder:\"Postcode\"}),/*#__PURE__*/_jsx(\"button\",{className:\"gm-button\",disabled:isSearching,onClick:async()=>{if(!search.trim()||isSearching)return;if(!/^[a-zA-Z0-9\\s\\-]{2,10}$/.test(search.trim())){alert(\"Please enter a valid postcode\");return;}setIsSearching(true);try{const{lat,lng}=await getLatLng(search.trim());const sorted=findNearestLocationFromList(lat,lng,allLocations);setLocations(sorted);setSubmittedSearch(search.trim());setShowAll(false);if(sorted.length>0)focusByPostcode(sorted[0].postcode,sorted[0]);}catch(err){alert(\"Invalid postcode\");}finally{setIsSearching(false);}},children:isSearching?\"Searching...\":\"Search\"})]}),submittedSearch&&/*#__PURE__*/_jsxs(\"div\",{className:\"gm-list\",children:[!isLoading&&filteredLocations.length===0&&!showAll&&/*#__PURE__*/_jsxs(\"div\",{className:\"gm-empty\",children:[/*#__PURE__*/_jsx(\"div\",{children:\"No centres found within 20km\"}),/*#__PURE__*/_jsx(\"div\",{style:{marginTop:\"8px\",color:\"#A0D083\",fontWeight:600,cursor:\"pointer\"},onClick:()=>{setLocations(allLocations);setShowAll(true);},children:\"See all centres\"})]}),!isLoading&&filteredLocations.map(loc=>/*#__PURE__*/_jsxs(\"div\",{className:\"gm-item\",onClick:()=>focusByPostcode(loc.postcode,loc),children:[/*#__PURE__*/_jsxs(\"div\",{className:\"gm-item-detail\",children:[/*#__PURE__*/_jsxs(\"div\",{className:\"gm-name-wrapper\",children:[/*#__PURE__*/_jsx(\"div\",{className:\"gm-name\",children:loc.name}),/*#__PURE__*/_jsxs(\"div\",{className:\"gm-km\",children:[\"- \",loc.distance?.toFixed(1),\" \",\"km\"]})]}),/*#__PURE__*/_jsxs(\"div\",{className:\"gm-address-phone\",children:[/*#__PURE__*/_jsx(\"div\",{className:\"gm-address\",children:loc.address}),/*#__PURE__*/_jsx(\"div\",{className:\"gm-direction\",children:/*#__PURE__*/_jsx(\"a\",{href:getDirectionsUrl(loc.lat,loc.lng),target:\"_blank\",rel:\"noopener noreferrer\",onClick:e=>e.stopPropagation(),children:\"Direction\"})}),/*#__PURE__*/_jsx(\"div\",{className:\"gm-phone\",children:\"Phone: 1300 147 683\"})]})]}),sanitizeUrl(loc.url)&&/*#__PURE__*/_jsx(\"a\",{href:sanitizeUrl(loc.url),className:\"gm-link\",onClick:e=>e.stopPropagation(),children:\"View Centre\"})]},`${loc.postcode}-${loc.lat}-${loc.lng}`))]})]})})]});}addPropertyControls(GoogleMap,{googleMapsApiKey:{type:ControlType.String},wpRoute:{type:ControlType.String},markerIconUrl:{type:ControlType.Image,title:\"Marker Icon\"},initialZoom:{type:ControlType.Number,title:\"Initial Zoom\",defaultValue:6,min:1,max:20,step:1},focusZoom:{type:ControlType.Number,title:\"Focus Zoom\",defaultValue:13,min:1,max:20,step:1}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"GoogleMap\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SearchMap.map"],"mappings":"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"}