taro-hooks
Version:
为 Taro 而设计的 Hooks Library
69 lines • 2.61 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); }
import { getSetting, openSetting, getAppAuthorizeSetting, authorize as taroAuthorize, authorizeForMiniProgram } from '@tarojs/taro';
import { useEffect, useState } from '@taro-hooks/core';
import useVisible from '../useVisible';
import usePromise from '../usePromise';
function useAuthorize(withSubscriptions, withAppAuthSetting) {
var visible = useVisible();
var _useState = useState({
mini: {}
}),
authSetting = _useState[0],
setAuthSetting = _useState[1];
var _useState2 = useState({}),
subscriptionsSetting = _useState2[0],
setSubscriptionsSetting = _useState2[1];
var authorizeAsync = usePromise(taroAuthorize);
var authorizeForMiniProgramAsync = usePromise(authorizeForMiniProgram);
var authorize = function authorize(scope, mini) {
var payload = {
scope: scope
};
return mini ? authorizeForMiniProgramAsync(payload) : authorizeAsync(payload);
};
var getAsync = usePromise(getSetting);
var get = function get(withSubscriptions) {
return getAsync({
withSubscriptions: withSubscriptions
}).then(function (res) {
var authSetting = res.authSetting,
subscriptionsSetting = res.subscriptionsSetting,
miniprogramAuthSetting = res.miniprogramAuthSetting;
var latestAuthSetting = _extends({}, authSetting, {
mini: miniprogramAuthSetting
});
if (withAppAuthSetting) {
var app = getAppAuthorizeSetting();
latestAuthSetting.app = app;
}
setAuthSetting(latestAuthSetting);
setSubscriptionsSetting(subscriptionsSetting);
return res;
});
};
var openAsync = usePromise(openSetting);
var open = function open(withSubscriptions) {
return openAsync({
withSubscriptions: withSubscriptions
}).then(function (res) {
var openSettingAuthSetting = res.authSetting,
subscriptionsSetting = res.subscriptionsSetting;
setAuthSetting(_extends({}, openSettingAuthSetting, {
mini: authSetting.mini
}));
setSubscriptionsSetting(subscriptionsSetting);
return res;
});
};
useEffect(function () {
get(withSubscriptions);
}, [visible]);
return {
authSetting: authSetting,
subscriptionsSetting: subscriptionsSetting,
authorize: authorize,
get: get,
open: open
};
}
export default useAuthorize;