import type { HeatmapMode } from "@components/PageComponents/Map/Layers/HeatmapLayer.tsx"; import { Checkbox } from "@components/UI/Checkbox/index.tsx"; import { Popover, PopoverContent, PopoverTrigger, } from "@components/UI/Popover.tsx"; import { cn } from "@core/utils/cn.ts"; import { LayersIcon } from "lucide-react"; import { type ReactNode, useMemo } from "react"; import { useTranslation } from "react-i18next"; export interface VisibilityState { nodeMarkers: boolean; directNeighbors: boolean; remoteNeighbors: boolean; positionPrecision: boolean; traceroutes: boolean; waypoints: boolean; heatmap: boolean; } export const defaultVisibilityState: VisibilityState = { nodeMarkers: true, directNeighbors: false, remoteNeighbors: false, positionPrecision: false, traceroutes: false, waypoints: true, heatmap: false, }; interface MapLayerToolProps { visibilityState: VisibilityState; setVisibilityState: (state: VisibilityState) => void; heatmapMode: HeatmapMode; setHeatmapMode: (mode: HeatmapMode) => void; } interface CheckboxProps { label: string; checked: boolean; onChange: (checked: boolean) => void; className?: string; } const CheckboxItem = ({ label, checked, onChange, className, }: CheckboxProps) => { return ( {label} ); }; export function MapLayerTool({ visibilityState, setVisibilityState, heatmapMode, setHeatmapMode, }: MapLayerToolProps): ReactNode { const { t } = useTranslation("map"); const enabledCount = useMemo(() => { return Object.values(visibilityState).filter(Boolean).length; }, [visibilityState]); const handleCheckboxChange = (key: keyof VisibilityState) => { if (key === "heatmap" && !visibilityState.heatmap) { // If turning heatmap on, turn everything else off so the layer is visible setVisibilityState({ nodeMarkers: false, directNeighbors: false, remoteNeighbors: false, positionPrecision: false, traceroutes: false, waypoints: false, heatmap: true, }); } else { setVisibilityState({ ...visibilityState, [key]: !visibilityState[key], }); } }; const layers = useMemo( () => [ { key: "nodeMarkers", label: t("layerTool.nodeMarkers") }, { key: "waypoints", label: t("layerTool.waypoints") }, { key: "directNeighbors", label: t("layerTool.directNeighbors") }, { key: "remoteNeighbors", label: t("layerTool.remoteNeighbors") }, { key: "positionPrecision", label: t("layerTool.positionPrecision") }, { key: "heatmap", label: t("layerTool.heatmap") }, // { key: "traceroutes", label: t("layerTool.traceroutes") }, ], [t], ); return ( {layers.map(({ key, label }) => (
handleCheckboxChange(key as keyof VisibilityState) } /> {key === "heatmap" && visibilityState.heatmap && (
)}
))} {/* { setVisibilityState({ ...visibilityState, traceroutes: checked }); }} />*/}
); }