taro-hooks
Version:
为 Taro 而设计的 Hooks Library
176 lines (175 loc) • 5.13 kB
JavaScript
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;
;