UNPKG

@uiw/react-baidu-map-drawing-manager

Version:

Baidu Map drawing-manager Components for React.

79 lines (77 loc) 2.62 kB
import { useState, useMemo } from 'react'; import { useMapContext } from '@uiw/react-baidu-map-map'; import { requireScript, requireCss, useEventProperties } from '@uiw/react-baidu-map-utils'; export function useDrawingManager(props) { if (props === void 0) { props = {}; } var { isOpen, drawingMode, enableDrawingTool, enableCalculate, drawingToolOptions, markerOptions, circleOptions, polylineOptions, polygonOptions, rectangleOptions } = props; var { map } = useMapContext(); var [drawingManager, setDrawingManager] = useState(); var libSDK = window.BMapLib; var [bMapLib, setBMapLib] = useState(libSDK); var [loadMapLib, setLoadBMapLib] = useState(false || !!libSDK); var opts = { isOpen, drawingMode, enableDrawingTool, enableCalculate, drawingToolOptions, markerOptions, circleOptions, polylineOptions, polygonOptions, rectangleOptions }; useMemo(() => { // 如果第一次加载,会执行下面的 if (map && bMapLib && !drawingManager) { if (bMapLib.DrawingManager) { var instance = new BMapLib.DrawingManager(map, opts); setDrawingManager(instance); } } // 如果 bMapLib 已经加载过,会执行下面的 if (map && bMapLib && !bMapLib.DrawingManager) { requireCss('//api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css').then(() => {}); requireScript('//api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js').then(() => { if (window.BMapLib) { var newMapLib = Object.assign(window.BMapLib, bMapLib); setBMapLib(newMapLib); var _instance = new BMapLib.DrawingManager(map, opts); setDrawingManager(_instance); } }).catch(() => {}); } // 如果第一次加载,会执行下面的 if (!bMapLib && !loadMapLib) { setLoadBMapLib(true); requireCss('//api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css').then(() => {}); requireScript('//api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js').then(() => { if (window.BMapLib) { setBMapLib(window.BMapLib); } }).catch(() => {}); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [map, loadMapLib, bMapLib, drawingManager]); useEventProperties(drawingManager, props, ['CircleComplete', 'MarkerComplete', 'OverlayComplete', 'PolygonComplete', 'PolylineComplete', 'RectangleComplete']); return { drawingManager, setDrawingManager, BMapLib: bMapLib }; }