import * as maplibre from "maplibre-gl"; import { createSignal, createContext, useContext, JSX, Accessor } from "solid-js"; export interface MapsContextValue { maps: Accessor>; onMapMount: (map: maplibre.Map, id: string) => void; onMapUnmount: (id: string) => void; } export const MapsContext = createContext(); export interface MapsProviderProps { children?: JSX.Element; } export function MapsProvider(props: MapsProviderProps) { const [maps, setMaps] = createSignal>(new Map(), { equals: false, }); const onMapMount = (map: maplibre.Map, id: string) => { setMaps((maps) => maps.set(id, map)); }; const onMapUnmount = (id: string) => setMaps((maps) => { maps.delete(id); return maps; }); return ( {props.children} ); } export const useMaps = () => useContext(MapsContext);