UNPKG

@shaaz1000/rn-storage

Version:

A comprehensive storage solution for React Native with encryption, caching, and offline sync

92 lines 2.69 kB
"use strict"; // 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