taro-hooks
Version:
为 Taro 而设计的 Hooks Library
51 lines • 2.46 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 { getApp } from '@tarojs/taro';
import { useRef, useEffect, useState } from '@taro-hooks/core';
import { isUndef, escapeState } from '@taro-hooks/shared';
import { generateGeneralFail } from '../utils/tool';
function useApp(allDefault) {
var appInstance = useRef(getApp({
allowDefault: Boolean(allDefault)
}));
var _useState = useState(generateGlobalDataFromAppInstance(appInstance.current)),
globalData = _useState[0],
setGlobalData = _useState[1];
useEffect(function () {
if (appInstance.current) {
setGlobalData(generateGlobalDataFromAppInstance(appInstance.current));
}
}, [appInstance]);
var setGlobalDataAsync = function setGlobalDataAsync(key, value) {
return new Promise(function (resolve, reject) {
if (isUndef(key)) reject(generateGeneralFail('setGlobalData', 'please privide key'));
try {
var _extends2, _appInstance$current$, _appInstance$current, _appInstance$current$2;
var latestGobalData = _extends({}, escapeState(globalData), (_extends2 = {}, _extends2[key] = value, _extends2));
var $globalData = (_appInstance$current$ = (_appInstance$current = appInstance.current) == null ? void 0 : (_appInstance$current$2 = _appInstance$current.$app) == null ? void 0 : _appInstance$current$2.globalData) != null ? _appInstance$current$ : appInstance.current;
$globalData[key] = value;
setGlobalData(latestGobalData);
resolve(generateGeneralFail('setGlobalData', 'success'));
} catch (e) {
reject(generateGeneralFail('setGlobalData', e.message));
}
});
};
return {
app: appInstance.current,
globalData: globalData,
setGlobalData: setGlobalDataAsync
};
}
export default useApp;
// TODO: $app may not exists. filter normal key, rest is globalData
function generateGlobalDataFromAppInstance(app) {
var UNSAFE = ['config', 'onHide', 'onLaunch', 'onShow'];
var _ref = app != null ? app : {},
$app = _ref.$app;
if ($app != null && $app.globalData) {
return $app == null ? void 0 : $app.globalData;
}
return Object.fromEntries(Object.entries(app).filter(function (v) {
return !UNSAFE.includes(v[0]);
}));
}