UNPKG

taro-hooks

Version:
124 lines (123 loc) 3.68 kB
"use strict"; function _await(value, then, direct) { if (direct) { return then ? then(value) : value; } if (!value || !value.then) { value = Promise.resolve(value); } return then ? value.then(then) : value; } function _catch(body, recover) { try { var result = body(); } catch (e) { return recover(e); } if (result && result.then) { return result.then(void 0, recover); } return result; } function _async(f) { return function () { for (var args = [], i = 0; i < arguments.length; i++) { args[i] = arguments[i]; } try { return Promise.resolve(f.apply(this, args)); } catch (e) { return Promise.reject(e); } }; } Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var taro_1 = require("@tarojs/taro"); var core_1 = require("@taro-hooks/core"); var usePromise_1 = tslib_1.__importDefault(require("../usePromise")); var tool_1 = require("../utils/tool"); function useMotion(autoListen, interval) { var _ref = (0, core_1.useState)(), motion = _ref[0], setMotion = _ref[1]; var listenStatus = (0, core_1.useRef)(false); var callbackQueen = (0, core_1.useRef)([]); var privateListener = function privateListener(callbackMotion) { setMotion(callbackMotion); callbackQueen.current.forEach(function (callback) { return callback == null ? void 0 : callback(callbackMotion); }); }; var add = function add(callback) { if (!listenStatus.current) { (0, taro_1.onDeviceMotionChange)(privateListener); listenStatus.current = true; } callbackQueen.current = [].concat(callbackQueen.current, [callback]); return Promise.resolve((0, tool_1.generateGeneralFail)('add', 'success')); }; var off = function off(callback) { if (callbackQueen.current.length === 1) { (0, taro_1.offDeviceMotionChange)(privateListener); listenStatus.current = false; } callbackQueen.current = callbackQueen.current.filter(function (queenCallback) { return queenCallback === callback; }); return Promise.resolve((0, tool_1.generateGeneralFail)('off', 'success')); }; var startAsync = (0, usePromise_1["default"])(taro_1.startDeviceMotionListening); var start = function start(optionInterval) { var _ref2; var option = { interval: (_ref2 = optionInterval != null ? optionInterval : interval) != null ? _ref2 : 'normal' }; return startAsync(option).then(function () { return true; }, function () { return false; }); }; var stopAsync = (0, usePromise_1["default"])(taro_1.stopDeviceMotionListening); var stop = function stop() { return stopAsync().then(function () { var _callbackQueen$curren; // clear callbackQueen (_callbackQueen$curren = callbackQueen.current) == null ? void 0 : _callbackQueen$curren.map == null ? void 0 : _callbackQueen$curren.map(function (callback) { return off(callback); }); return true; }); }; var manualListenMotion = _async(function () { return _catch(function () { return _await(start(interval), function (result) { if (result && !listenStatus.current) { add(privateListener); } }); }, function () { return (0, tool_1.generateGeneralFail)('manualListenMotion'); }); }); (0, core_1.useEffect)(function () { if (autoListen) { manualListenMotion(); } return function () { if (autoListen) { stop(); } }; }, [autoListen, interval]); return [motion, { start: start, stop: stop, add: add, off: off }]; } exports["default"] = useMotion;