UNPKG

taro-hooks

Version:
108 lines 4.58 kB
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } import { isUndef } from '@taro-hooks/shared'; import { generateGeneralFail } from '../../utils/tool'; var LOCATIONCHANGEMAP = {}; function canIUseLocation() { return navigator && 'geolocation' in navigator; } function mapCoordsToPoints(coords) { var _coords$speed, _coords$altitude, _coords$altitudeAccur, _coords$altitudeAccur2; return { latitude: coords.latitude, longitude: coords.longitude, speed: (_coords$speed = coords.speed) != null ? _coords$speed : 0, accuracy: coords.accuracy, altitude: (_coords$altitude = coords.altitude) != null ? _coords$altitude : 0, verticalAccuracy: (_coords$altitudeAccur = coords.altitudeAccuracy) != null ? _coords$altitudeAccur : 0, horizontalAccuracy: (_coords$altitudeAccur2 = coords.altitudeAccuracy) != null ? _coords$altitudeAccur2 : 0 }; } export var getLocation = function getLocation(_ref) { var success = _ref.success, fail = _ref.fail, _ref$altitude = _ref.altitude, altitude = _ref$altitude === void 0 ? false : _ref$altitude, _ref$highAccuracyExpi = _ref.highAccuracyExpireTime, highAccuracyExpireTime = _ref$highAccuracyExpi === void 0 ? 3000 : _ref$highAccuracyExpi, _ref$isHighAccuracy = _ref.isHighAccuracy, isHighAccuracy = _ref$isHighAccuracy === void 0 ? false : _ref$isHighAccuracy, _ref$type = _ref.type, type = _ref$type === void 0 ? 'wgs84' : _ref$type; if (!canIUseLocation()) { var result = generateGeneralFail('getLocation', 'not support in u browser'); fail == null ? void 0 : fail(result); return Promise.reject(result); } return new Promise(function (resolve, reject) { navigator.geolocation.getCurrentPosition(function (_ref2) { var coords = _ref2.coords; var result = _extends({}, mapCoordsToPoints(coords), { errMsg: 'getLocation: success' }); success == null ? void 0 : success(result); resolve(result); }, function (error) { var result = generateGeneralFail('getLocation', error.message); fail == null ? void 0 : fail(result); reject(result); }, { enableHighAccuracy: isHighAccuracy, timeout: highAccuracyExpireTime }); }); }; export var onLocationChange = function onLocationChange(callback) { if (!canIUseLocation()) { throw new Error(generateGeneralFail('onLocationChange', 'not support in u browser').errMsg); } var id = navigator.geolocation.watchPosition(function (_ref3) { var coords = _ref3.coords; callback == null ? void 0 : callback(mapCoordsToPoints(coords)); }, function (error) { throw new Error(error.message); }); LOCATIONCHANGEMAP[id] = callback; }; export var onLocationChangeError = function onLocationChangeError(callback) { if (!canIUseLocation()) { throw new Error(generateGeneralFail('onLocationChangeError', 'not support in u browser').errMsg); } var id = navigator.geolocation.watchPosition(function () {}, function (_ref4) { var code = _ref4.code; callback == null ? void 0 : callback({ errCode: code }); }); LOCATIONCHANGEMAP[id] = callback; }; export var offLocationChange = function offLocationChange(callback) { var _Object$entries$find; var findOffId = (_Object$entries$find = Object.entries(LOCATIONCHANGEMAP).find(function (_ref5) { var excutor = _ref5[1]; return excutor === callback; })) == null ? void 0 : _Object$entries$find[0]; if (!canIUseLocation() || isUndef(findOffId)) { throw new Error(generateGeneralFail('offLocationChange', 'not support in u browser').errMsg); } navigator.geolocation.clearWatch(Number(findOffId)); }; export var offLocationChangeError = function offLocationChangeError(callback) { var _Object$entries$find2; var findOffId = (_Object$entries$find2 = Object.entries(LOCATIONCHANGEMAP).find(function (_ref6) { var excutor = _ref6[1]; return excutor === callback; })) == null ? void 0 : _Object$entries$find2[0]; if (!canIUseLocation() || isUndef(findOffId)) { callback == null ? void 0 : callback({ errCode: 0 }); throw new Error(generateGeneralFail('offLocationChange', 'not support in u browser').errMsg); } try { navigator.geolocation.clearWatch(Number(findOffId)); } catch (e) { callback == null ? void 0 : callback({ errCode: 0 }); } };