UNPKG

react-bkoi-gl

Version:

React components for Barikoi GL JS

54 lines 1.56 kB
import * as React from "react"; import { useState, useCallback, useMemo, useContext } from "react"; import { MapContext } from "./map.js"; export const MountedMapsContext = React.createContext(null); export const MapProvider = props => { const [maps, setMaps] = useState({}); const onMapMount = useCallback(function (map) { let id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "default"; setMaps(currMaps => { if (id === "current") { throw new Error("'current' cannot be used as map id"); } if (currMaps[id]) { throw new Error(`Multiple maps with the same id: ${id}`); } return { ...currMaps, [id]: map }; }); }, []); const onMapUnmount = useCallback(function () { let id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "default"; setMaps(currMaps => { if (currMaps[id]) { const nextMaps = { ...currMaps }; delete nextMaps[id]; return nextMaps; } return currMaps; }); }, []); return React.createElement(MountedMapsContext.Provider, { value: { maps, onMapMount, onMapUnmount } }, props.children); }; export function useMap() { const maps = useContext(MountedMapsContext)?.maps; const currentMap = useContext(MapContext); const mapsWithCurrent = useMemo(() => { return { ...maps, current: currentMap?.map }; }, [maps, currentMap]); return mapsWithCurrent; } //# sourceMappingURL=use-map.js.map