@uiw/react-baidu-map-curve-line
Version:
Baidu Map Components for React.
94 lines (91 loc) • 3.4 kB
JavaScript
;
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
};
}