@uiw/react-amap-geolocation
Version:
鹰眼控件,用于显示缩略地图,显示于地图右下角,可以随主图的视口变化而变化,也可以配置成固定位置实现类似于南海附图的效果。
62 lines (61 loc) • 2.32 kB
JavaScript
;
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
};
};