@shaaz1000/rn-storage
Version:
A comprehensive storage solution for React Native with encryption, caching, and offline sync
92 lines • 2.69 kB
JavaScript
;
// src/hooks/useCache.ts
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useCache = void 0;
const react_1 = require("react");
const cacheManager_1 = __importDefault(require("../core/cacheManager"));
function useCache(key, initialValue, options = {}) {
const [value, setValue] = (0, react_1.useState)(initialValue);
const [loading, setLoading] = (0, react_1.useState)(true);
const [error, setError] = (0, react_1.useState)(null);
const cache = cacheManager_1.default.getInstance({
expiryTime: options.expiryTime,
encryptData: options.encryptData
});
// Load cached value
(0, react_1.useEffect)(() => {
const loadValue = async () => {
try {
setLoading(true);
const cachedValue = await cache.get(key);
if (cachedValue !== null) {
setValue(cachedValue);
}
}
catch (err) {
setError(err);
}
finally {
setLoading(false);
}
};
loadValue();
}, [key]);
// Update cache
const updateCache = (0, react_1.useCallback)(async (newValue) => {
try {
setLoading(true);
await cache.set(key, newValue, options.expiryTime);
setValue(newValue);
setError(null);
}
catch (err) {
setError(err);
}
finally {
setLoading(false);
}
}, [key, options.expiryTime]);
// Remove from cache
const removeFromCache = (0, react_1.useCallback)(async () => {
try {
setLoading(true);
await cache.remove(key);
setValue(initialValue);
setError(null);
}
catch (err) {
setError(err);
}
finally {
setLoading(false);
}
}, [key, initialValue]);
// Clear entire cache
const clearCache = (0, react_1.useCallback)(async () => {
try {
setLoading(true);
await cache.clear();
setValue(initialValue);
setError(null);
}
catch (err) {
setError(err);
}
finally {
setLoading(false);
}
}, [initialValue]);
return {
value,
setCache: updateCache,
removeFromCache,
clearCache,
loading,
error,
};
}
exports.useCache = useCache;
//# sourceMappingURL=useCache.js.map