← back to Stayclaim
src/components/SubmitMiniMap.tsx
39 lines
'use client';
/**
* Mini map shown next to the LA-records preview card on /submit.
* Uses react-leaflet (already in package.json from the legacy parcel pages).
* Tiny — 280px wide, single pin, zoom locked to 17 for a "yes that's the
* right house" visual confirmation.
*/
import dynamic from 'next/dynamic';
const MapContainer = dynamic(() => import('react-leaflet').then(m => m.MapContainer), { ssr: false });
const TileLayer = dynamic(() => import('react-leaflet').then(m => m.TileLayer), { ssr: false });
const CircleMarker = dynamic(() => import('react-leaflet').then(m => m.CircleMarker), { ssr: false });
export function SubmitMiniMap({ lat, lng, label }: { lat: number; lng: number; label: string }) {
return (
<div className="border border-ink/15" style={{ width: 220, height: 160 }}>
<MapContainer
center={[lat, lng]}
zoom={17}
scrollWheelZoom={false}
zoomControl={false}
attributionControl={false}
style={{ width: '100%', height: '100%' }}
>
<TileLayer url="https://tiles.stadiamaps.com/tiles/stamen_toner_lite/{z}/{x}/{y}.png" />
<CircleMarker
center={[lat, lng]}
radius={8}
pathOptions={{ color: '#c9292e', weight: 3, fillColor: '#c9292e', fillOpacity: 0.85 }}
>
</CircleMarker>
</MapContainer>
<p className="text-[9px] font-mono uppercase tracking-[0.15em] text-ink/45 mt-1 truncate" title={label}>
{label}
</p>
</div>
);
}