UNPKG

taro-hooks

Version:
176 lines (175 loc) 5.13 kB
"use strict"; function _call(body, then, direct) { if (direct) { return then ? then(body()) : body(); } try { var result = Promise.resolve(body()); return then ? result.then(then) : result; } catch (e) { return Promise.reject(e); } } 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 _empty() {} function _continueIgnored(value) { if (value && value.then) { return value.then(_empty); } } 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); } }; } 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 _invoke(body, then) { var result = body(); if (result && result.then) { return result.then(then); } return then(result); } 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 tslib_1 = require("tslib"); var taro_1 = require("@tarojs/taro"); var core_1 = require("@taro-hooks/core"); var shared_1 = require("@taro-hooks/shared"); var usePromise_1 = tslib_1.__importDefault(require("../usePromise")); var index_1 = tslib_1.__importDefault(require("./utils/index")); var tool_1 = require("../utils/tool"); var initStorageInfo = { currentSize: 0, limitSize: 0, keys: [], storage: {} }; function useStorage() { var get = _async(function (key) { var _exit = false; return _catch(function () { var getKeys = []; return _invoke(function () { if (!key) { return _call((0, taro_1.getStorageInfo), function (_ref3) { var keys = _ref3.keys; if (!(keys != null && keys.length)) { var _temp = {}; _exit = true; return _temp; } getKeys = keys; }); } else { getKeys = [key].flat(); } }, function (_result) { return _exit ? _result : _await(Promise.all(getKeys.map(function (payload) { return (0, taro_1.getStorage)({ key: payload }); })), function (storageGroup) { var storageMap = Object.fromEntries(storageGroup.map(function (storage, index) { var data = storage == null ? void 0 : storage.data; try { data = JSON.parse(data); } catch (e) { (0, shared_1.logError)('parse storage data failed', e); } return [getKeys[index], data]; })); return (0, shared_1.isString)(key) ? storageMap[key] : storageMap; }); }); }, function (e) { return (0, tool_1.generateGeneralFail)('getStorage', e.errMsg || e.message); }); }); var _ref = (0, core_1.useState)(initStorageInfo), storageInfo = _ref[0], setStorageInfo = _ref[1]; var setAsync = (0, usePromise_1["default"])(taro_1.setStorage); function set(key, data) { var setStorageData = data; try { setStorageData = JSON.stringify(data); } catch (e) { (0, shared_1.logError)('can not convert json, use empty string instaned', e); } return setAsync({ key: key, data: setStorageData }).then(function (res) { generateStorageInfo(); return res; }); } var removeAsync = (0, usePromise_1["default"])(taro_1.removeStorage); var clearAsync = (0, usePromise_1["default"])(taro_1.clearStorage); var remove = function remove(key) { var removeHandler = key ? removeAsync({ key: key }) : clearAsync(); return removeHandler.then(function (res) { setStorageInfo(_extends({}, (0, shared_1.escapeState)(storageInfo), { keys: [], storage: {} })); return res; }); }; var generateStorageInfo = _async(function () { return _continueIgnored(_catch(function () { return _call((0, taro_1.getStorageInfo), function (_ref2) { var keys = _ref2.keys; return _call((0, index_1["default"]), function (spaceInfo) { return _call(get, function (storage) { setStorageInfo(_extends({}, spaceInfo, { keys: keys, storage: storage })); }); }); }); }, function (e) { (0, shared_1.logError)('generateStorageInfo failed', e); })); }); (0, core_1.useEffect)(function () { generateStorageInfo(); }, []); return [storageInfo, { set: set, get: get, remove: remove }]; } exports["default"] = useStorage;