@uiw/react-baidu-map-drawing-manager
Version:
Baidu Map drawing-manager Components for React.
79 lines (77 loc) • 2.62 kB
JavaScript
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
};
}