"use client" import { useEffect } from "react" import { MapContainer, TileLayer, CircleMarker, Popup, useMap } from "react-leaflet" import { LatLngBounds, LatLng } from "leaflet" import "leaflet/dist/leaflet.css" import { type Detection } from "@/lib/api" interface DashboardMapContentProps { detections: Detection[] } // Component to auto-fit map bounds to show all markers function FitBounds({ bounds }: { bounds: LatLngBounds }) { const map = useMap() useEffect(() => { if (bounds.isValid()) { map.fitBounds(bounds, { padding: [50, 50] }) } }, [bounds, map]) return null } export default function DashboardMapContent({ detections }: DashboardMapContentProps) { if (detections.length === 0) { return (

No detections to display

) } // Calculate bounds to fit all markers const firstDetection = detections[0] const bounds = new LatLngBounds( new LatLng(firstDetection.latitude!, firstDetection.longitude!), new LatLng(firstDetection.latitude!, firstDetection.longitude!) ) detections.forEach(d => { if (d.latitude && d.longitude) { bounds.extend(new LatLng(d.latitude, d.longitude)) } }) // Center point const center: [number, number] = [ (bounds.getNorth() + bounds.getSouth()) / 2, (bounds.getEast() + bounds.getWest()) / 2 ] // Get marker color based on detection type const getMarkerColor = (type: string) => { if (type.toLowerCase().includes("pothole")) { return { fill: "#10b981", stroke: "#065f46" } // Green for potholes } return { fill: "#3b82f6", stroke: "#2563eb" } // Blue for signboards } // Get display name for detection type const getTypeName = (type: string) => { if (type.toLowerCase().includes("pothole")) { return "Pothole" } return "Signboard" } return ( {/* Detection markers */} {detections.map((detection, idx) => { const colors = getMarkerColor(detection.type) const typeName = getTypeName(detection.type) return (
{typeName}
Class: {detection.class.replace(/_/g, " ")}
Confidence: {(detection.confidence * 100).toFixed(1)}%
Coordinates
Lat: {detection.latitude!.toFixed(6)}
Lng: {detection.longitude!.toFixed(6)}
) })} {/* Auto-fit bounds */}
) }