UNPKG

taro-hooks

Version:
119 lines (118 loc) 5.1 kB
"use strict"; 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); } Object.defineProperty(exports, "__esModule", { value: true }); exports.offLocationChangeError = exports.offLocationChange = exports.onLocationChangeError = exports.onLocationChange = exports.getLocation = void 0; var shared_1 = require("@taro-hooks/shared"); var tool_1 = require("../../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 }; } 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 = (0, tool_1.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 = (0, tool_1.generateGeneralFail)('getLocation', error.message); fail == null ? void 0 : fail(result); reject(result); }, { enableHighAccuracy: isHighAccuracy, timeout: highAccuracyExpireTime }); }); }; exports.getLocation = getLocation; var onLocationChange = function onLocationChange(callback) { if (!canIUseLocation()) { throw new Error((0, tool_1.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; }; exports.onLocationChange = onLocationChange; var onLocationChangeError = function onLocationChangeError(callback) { if (!canIUseLocation()) { throw new Error((0, tool_1.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; }; exports.onLocationChangeError = onLocationChangeError; 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() || (0, shared_1.isUndef)(findOffId)) { throw new Error((0, tool_1.generateGeneralFail)('offLocationChange', 'not support in u browser').errMsg); } navigator.geolocation.clearWatch(Number(findOffId)); }; exports.offLocationChange = offLocationChange; 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() || (0, shared_1.isUndef)(findOffId)) { callback == null ? void 0 : callback({ errCode: 0 }); throw new Error((0, tool_1.generateGeneralFail)('offLocationChange', 'not support in u browser').errMsg); } try { navigator.geolocation.clearWatch(Number(findOffId)); } catch (e) { callback == null ? void 0 : callback({ errCode: 0 }); } }; exports.offLocationChangeError = offLocationChangeError;