UNPKG

@uiw/react-amap-geolocation

Version:

鹰眼控件,用于显示缩略地图,显示于地图右下角,可以随主图的视口变化而变化,也可以配置成固定位置实现类似于南海附图的效果。

62 lines (61 loc) 2.32 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports.useGeolocation = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = require("react"); var _reactAmapMap = require("@uiw/react-amap-map"); var _excluded = ["type", "onComplete", "onError"]; var useGeolocation = exports.useGeolocation = function useGeolocation() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _props$type = props.type, type = _props$type === void 0 ? 'position' : _props$type, onComplete = props.onComplete, onError = props.onError, other = (0, _objectWithoutProperties2["default"])(props, _excluded); var _useState = (0, _react.useState)(), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), geolocation = _useState2[0], setGeolocation = _useState2[1]; var _useMapContext = (0, _reactAmapMap.useMapContext)(), map = _useMapContext.map; (0, _react.useEffect)(function () { if (AMap && !geolocation) { var instance; AMap.plugin(['AMap.Geolocation'], function () { instance = new AMap.Geolocation((0, _objectSpread2["default"])({}, other)); setGeolocation(instance); }); return function () { if (instance) { setGeolocation(undefined); } }; } }, [AMap]); function callback(status, result) { if (status === 'complete' && onComplete) { onComplete(result); } else if (onError) { onError(result); } } (0, _react.useMemo)(function () { if (!/^(position|cityInfo)$/.test(type)) return; var funName = type === 'position' ? 'getCurrentPosition' : 'getCityInfo'; if (geolocation && map) { geolocation[funName](callback); map.addControl(geolocation); } else if (geolocation) { geolocation[funName](callback); } }, [geolocation]); return { geolocation: geolocation, setGeolocation: setGeolocation }; };