taro-hooks
Version:
为 Taro 而设计的 Hooks Library
119 lines (118 loc) • 5.1 kB
JavaScript
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;
;