UNPKG

@uiw/react-baidu-map-curve-line

Version:
94 lines (91 loc) 3.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useCurveLine = useCurveLine; var _react = require("react"); var _reactBaiduMapMap = require("@uiw/react-baidu-map-map"); var _reactBaiduMapUtils = require("@uiw/react-baidu-map-utils"); function useCurveLine() { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; const { strokeColor, strokeWeight, strokeOpacity, strokeStyle, enableMassClear, enableEditing = false, enableClicking, icons } = props; const { map } = (0, _reactBaiduMapMap.useMapContext)(); const [curveLine, setCurveLine] = (0, _react.useState)(); const libSDK = window.BMapLib; const [bMapLib, setBMapLib] = (0, _react.useState)(libSDK); const [loadMapLib, setLoadBMapLib] = (0, _react.useState)(false || !!libSDK); // eslint-disable-next-line react-hooks/exhaustive-deps const opts = { strokeColor, strokeWeight, strokeOpacity, strokeStyle, enableMassClear, enableEditing, enableClicking, icons }; (0, _react.useMemo)(() => { // 如果第一次加载,会执行下面的 if (map && bMapLib && !curveLine) { if (bMapLib.CurveLine) { const points = (props.path || []).map(item => new BMap.Point(item.lng, item.lat)); const instance = new BMapLib.CurveLine(points, opts); map.addOverlay(instance); setCurveLine(instance); } } // 如果 bMapLib 已经加载过,会执行下面的 if (map && bMapLib && !bMapLib.CurveLine) { (0, _reactBaiduMapUtils.requireScript)('//api.map.baidu.com/library/CurveLine/1.5/src/CurveLine.min.js').then(() => { if (window.BMapLib) { const newMapLib = Object.assign(window.BMapLib, bMapLib); setBMapLib(newMapLib); const points = (props.path || []).map(item => new BMap.Point(item.lng, item.lat)); const instance = new BMapLib.CurveLine(points, opts); map.addOverlay(instance); setCurveLine(instance); } }).catch(() => {}); } // 如果第一次加载,会执行下面的 if (!bMapLib && !loadMapLib) { setLoadBMapLib(true); (0, _reactBaiduMapUtils.requireScript)('//api.map.baidu.com/library/CurveLine/1.5/src/CurveLine.min.js').then(() => { if (window.BMapLib) { setBMapLib(window.BMapLib); } }).catch(() => {}); } }, [map, bMapLib, curveLine, loadMapLib, props.path, opts]); const [path, setPath] = (0, _react.useState)(props.path || []); (0, _react.useEffect)(() => { if (curveLine && props.path && path && JSON.stringify(path) !== JSON.stringify(props.path)) { const points = path.map(item => new BMap.Point(item.lng, item.lat)); curveLine.setPath(points); } }, [curveLine, path, props.path]); (0, _reactBaiduMapUtils.useVisiable)(curveLine, props); (0, _reactBaiduMapUtils.useEventProperties)(curveLine, props, ['Click', 'DblClick', 'MouseDown', 'MouseUp', 'MouseOut', 'MouseOver', 'Remove', 'LineUpdate']); (0, _reactBaiduMapUtils.useEnableProperties)(curveLine, props, ['Editing', 'MassClear']); // PositionAt (0, _reactBaiduMapUtils.useProperties)(curveLine, props, ['StrokeColor', 'StrokeOpacity', 'StrokeWeight', 'StrokeStyle']); return { curveLine, setCurveLine, BMapLib: bMapLib, path, setPath }; }