@@ -53,14 +53,20 @@ const DEFAULT_COORDINATES = {
5353 zoom : 9 ,
5454} ;
5555
56+ function getListingCoordinates ( listing ) {
57+ return listing ?. coordinates ?? null ;
58+ }
59+
5660function hasValidCoordinates ( listing ) {
61+ const coordinates = getListingCoordinates ( listing ) ;
62+
5763 return (
5864 listing &&
5965 ! listing . error &&
60- typeof listing . latitude === "number" &&
61- typeof listing . longitude === "number" &&
62- Number . isFinite ( listing . latitude ) &&
63- Number . isFinite ( listing . longitude )
66+ typeof coordinates ? .latitude === "number" &&
67+ typeof coordinates ? .longitude === "number" &&
68+ Number . isFinite ( coordinates . latitude ) &&
69+ Number . isFinite ( coordinates . longitude )
6470 ) ;
6571}
6672
@@ -86,6 +92,7 @@ export default function MapImmersive({
8692 isDesktop,
8793 countryCode,
8894} ) {
95+ const selectedListingCoordinates = getListingCoordinates ( selectedListing ) ;
8996 const isFirstLoad = useRef ( true ) ;
9097 const [ lastKnownPosition , setLastKnownPosition ] = useState ( null ) ;
9198 const [ isListingInView , setIsListingInView ] = useState ( true ) ;
@@ -111,8 +118,10 @@ export default function MapImmersive({
111118
112119 // If there's a selected listing with valid coords, center on it instead of using IP location
113120 if ( hasValidCoordinates ( selectedListing ) ) {
121+ const coordinates = getListingCoordinates ( selectedListing ) ;
122+
114123 mapRef . current ?. flyTo ( {
115- center : [ selectedListing . longitude , selectedListing . latitude ] ,
124+ center : [ coordinates . longitude , coordinates . latitude ] ,
116125 zoom : 12 ,
117126 duration : 0 ,
118127 } ) ;
@@ -133,9 +142,10 @@ export default function MapImmersive({
133142
134143 // Check if selected listing is in view (only when it has valid coords)
135144 if ( hasValidCoordinates ( selectedListing ) ) {
145+ const coordinates = getListingCoordinates ( selectedListing ) ;
136146 const isInView = bounds . contains ( [
137- selectedListing . longitude ,
138- selectedListing . latitude ,
147+ coordinates . longitude ,
148+ coordinates . latitude ,
139149 ] ) ;
140150 setIsListingInView ( isInView ) ;
141151 }
@@ -144,8 +154,10 @@ export default function MapImmersive({
144154 const handleFlyToListing = useCallback ( ( ) => {
145155 if ( ! hasValidCoordinates ( selectedListing ) || ! mapRef . current ) return ;
146156
157+ const coordinates = getListingCoordinates ( selectedListing ) ;
158+
147159 mapRef . current . flyTo ( {
148- center : [ selectedListing . longitude , selectedListing . latitude ] ,
160+ center : [ coordinates . longitude , coordinates . latitude ] ,
149161 duration : 1500 ,
150162 } ) ;
151163 } , [ selectedListing ] ) ;
@@ -160,8 +172,10 @@ export default function MapImmersive({
160172
161173 // If there's a selected listing in URL with valid coords, center on it
162174 if ( hasValidCoordinates ( selectedListing ) ) {
175+ const coordinates = getListingCoordinates ( selectedListing ) ;
176+
163177 mapRef . current ?. flyTo ( {
164- center : [ selectedListing . longitude , selectedListing . latitude ] ,
178+ center : [ coordinates . longitude , coordinates . latitude ] ,
165179 zoom : 12 ,
166180 duration : 0 ,
167181 } ) ;
@@ -193,9 +207,11 @@ export default function MapImmersive({
193207 // Update lastKnownPosition when we have a valid position
194208 useEffect ( ( ) => {
195209 if ( hasValidCoordinates ( selectedListing ) ) {
210+ const coordinates = getListingCoordinates ( selectedListing ) ;
211+
196212 setLastKnownPosition ( {
197- latitude : selectedListing . latitude ,
198- longitude : selectedListing . longitude ,
213+ latitude : coordinates . latitude ,
214+ longitude : coordinates . longitude ,
199215 } ) ;
200216 } else if ( initialCoordinates && ! lastKnownPosition ) {
201217 setLastKnownPosition ( initialCoordinates ) ;
@@ -210,9 +226,10 @@ export default function MapImmersive({
210226 }
211227
212228 const bounds = mapRef . current . getMap ( ) . getBounds ( ) ;
229+ const coordinates = getListingCoordinates ( selectedListing ) ;
213230 const isInView = bounds . contains ( [
214- selectedListing . longitude ,
215- selectedListing . latitude ,
231+ coordinates . longitude ,
232+ coordinates . latitude ,
216233 ] ) ;
217234 console . log ( "isInView" , isInView ) ;
218235 setIsListingInView ( isInView ) ;
@@ -269,13 +286,13 @@ export default function MapImmersive({
269286 initialViewState = { {
270287 longitude :
271288 ( hasValidCoordinates ( selectedListing )
272- ? selectedListing . longitude
289+ ? selectedListingCoordinates . longitude
273290 : null ) ??
274291 initialCoordinates ?. longitude ??
275292 DEFAULT_COORDINATES . longitude ,
276293 latitude :
277294 ( hasValidCoordinates ( selectedListing )
278- ? selectedListing . latitude
295+ ? selectedListingCoordinates . latitude
279296 : null ) ??
280297 initialCoordinates ?. latitude ??
281298 DEFAULT_COORDINATES . latitude ,
@@ -308,8 +325,8 @@ export default function MapImmersive({
308325 . map ( ( listing ) => (
309326 < DrawerTrigger key = { listing . id } >
310327 < Marker
311- longitude = { listing . longitude }
312- latitude = { listing . latitude }
328+ longitude = { listing . coordinates . longitude }
329+ latitude = { listing . coordinates . latitude }
313330 anchor = "center"
314331 onClick = { ( event ) => {
315332 event . originalEvent . stopPropagation ( ) ;
0 commit comments