import { collection, getDocs } from "firebase/firestore";
import { db } from "../../config/firebase";
import { getDistance } from "geolib";
import { useEffect, useState } from "react";
function Listing() {
const [drives, setDrives] = useState([]);
useEffect(() => {
const fetchDrives = async () => {
try {
const position = await new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(resolve, reject, {
enableHighAccuracy: true,
timeout: 10000,
maximumAge: 300000
});
});
const userLat = position.coords.latitude;
const userLng = position.coords.longitude;
const querySnapshot = await getDocs(collection(db, "beach_drives"));
const locations = [];
querySnapshot.forEach((doc) => {
const data = doc.data();
if (data.coordinates?.latitude && data.coordinates?.longitude) {
const distance = getDistance(
{ latitude: userLat, longitude: userLng },
{ latitude: data.coordinates.latitude, longitude: data.coordinates.longitude }
);
locations.push({
id: doc.id,
name: data.name || "Unnamed Location",
distance,
coordinates: {
lat: data.coordinates.latitude,
lng: data.coordinates.longitude
}
});
}
});
locations.sort((a, b) => a.distance - b.distance);
setDrives(locations);
} catch (err) {
// Silently fail (no UI if error)
}
};
fetchDrives();
}, []);
return (
<div className="p-6">
{drives.map((drive) => (
<div key={drive.id} className="p-4 border border-gray-200 rounded shadow-sm mb-3">
<h2 className="text-lg font-semibold">{drive.name}</h2>
<p className="text-sm text-gray-600">
{(drive.distance / 1000).toFixed(2)} km away
</p>
<p className="text-xs text-gray-500">
{drive.coordinates.lat.toFixed(4)}°, {drive.coordinates.lng.toFixed(4)}°
</p>
</div>
))}
</div>
);
}
export default Listing;