taro-hooks
Version:
为 Taro 而设计的 Hooks Library
56 lines (55 loc) • 2.59 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
});
var taro_1 = require("@tarojs/taro");
var core_1 = require("@taro-hooks/core");
var shared_1 = require("@taro-hooks/shared");
var tool_1 = require("../utils/tool");
function useApp(allDefault) {
var appInstance = (0, core_1.useRef)((0, taro_1.getApp)({
allowDefault: Boolean(allDefault)
}));
var _ref = (0, core_1.useState)(generateGlobalDataFromAppInstance(appInstance.current)),
globalData = _ref[0],
setGlobalData = _ref[1];
(0, core_1.useEffect)(function () {
if (appInstance.current) {
setGlobalData(generateGlobalDataFromAppInstance(appInstance.current));
}
}, [appInstance]);
var setGlobalDataAsync = function setGlobalDataAsync(key, value) {
return new Promise(function (resolve, reject) {
if ((0, shared_1.isUndef)(key)) reject((0, tool_1.generateGeneralFail)('setGlobalData', 'please privide key'));
try {
var _extends2, _appInstance$current$, _appInstance$current, _appInstance$current$2;
var latestGobalData = _extends({}, (0, shared_1.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((0, tool_1.generateGeneralFail)('setGlobalData', 'success'));
} catch (e) {
reject((0, tool_1.generateGeneralFail)('setGlobalData', e.message));
}
});
};
return {
app: appInstance.current,
globalData: globalData,
setGlobalData: setGlobalDataAsync
};
}
exports["default"] = useApp;
// TODO: $app may not exists. filter normal key, rest is globalData
function generateGlobalDataFromAppInstance(app) {
var UNSAFE = ['config', 'onHide', 'onLaunch', 'onShow'];
var _ref2 = app != null ? app : {},
$app = _ref2.$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]);
}));
}
;