"use client"; import { forwardRef, useImperativeHandle, useMemo, useRef } from "react"; import { useSetAtom } from "jotai"; import L from "leaflet"; import { Marker, MarkerProps, Popup } from "react-leaflet"; import { debouncedHoveredMapIdAtom } from "@/app/atoms"; import { TimeControlColours } from "@/app/constants"; import type { MarkerRef } from "@/components/Map"; import type { BouncingMarker } from "@/leafletTypes"; import { Club } from "@/types"; type ClubMarkerProps = { club: Club; } & Omit; export const ClubMarker = forwardRef( ({ club, ...markerProps }, ref) => { const markerRef = useRef | null>(null); useImperativeHandle( ref, () => ({ getMarker: () => markerRef.current!, bounce: () => { const bouncingMarker = markerRef.current as BouncingMarker; bouncingMarker.setBouncingOptions({ contractHeight: 0 }); bouncingMarker.bounce(); }, }), [], ); const { id, latLng } = club; const setHoveredMapId = useSetAtom(debouncedHoveredMapIdAtom); const iconOptions = useMemo( () => new L.DivIcon({ html: ` `, className: "", iconSize: [24, 40], iconAnchor: [12, 40], popupAnchor: [1, -40], }), [], ); return ( setHoveredMapId(id), mouseout: () => setHoveredMapId(null), }} {...markerProps} >
{club.name}
{club.address &&
{club.address}
} {club.website && ( )} {club.url && ( )} {club.email && ( )}
); }, ); ClubMarker.displayName = "ClubMarker";