UNPKG

@shaaz1000/rn-storage

Version:

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

80 lines 2.94 kB
"use strict"; // src/hooks/useOfflineSync.ts var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useOfflineSync = void 0; const react_1 = require("react"); const offlineSync_1 = __importDefault(require("../core/offlineSync")); function useOfflineSync(config) { const [syncStatus, setSyncStatus] = (0, react_1.useState)('idle'); const [lastSyncTime, setLastSyncTime] = (0, react_1.useState)(undefined); const [pendingOperations, setPendingOperations] = (0, react_1.useState)([]); const offlineSync = offlineSync_1.default.getInstance(); // Initialize sync configuration (0, react_1.useEffect)(() => { if (config) { offlineSync.configure({ ...config, onSyncComplete: (success) => { var _a; setSyncStatus('idle'); if (success) { setLastSyncTime(Date.now()); } (_a = config.onSyncComplete) === null || _a === void 0 ? void 0 : _a.call(config, success); }, onSyncError: (error) => { var _a; setSyncStatus('error'); (_a = config.onSyncError) === null || _a === void 0 ? void 0 : _a.call(config, error); } }); } }, [config]); // Load initial state (0, react_1.useEffect)(() => { const loadState = async () => { const time = await offlineSync.getLastSyncTime(); setLastSyncTime(time); const operations = await offlineSync.getPendingOperations(); setPendingOperations(operations); }; loadState(); }, []); // Queue operation const queueOperation = (0, react_1.useCallback)(async (operation) => { await offlineSync.queueOperation(operation); const operations = await offlineSync.getPendingOperations(); setPendingOperations(operations); }, []); // Force sync const forceSync = (0, react_1.useCallback)(async () => { setSyncStatus('syncing'); try { await offlineSync.syncQueuedItems(); const operations = await offlineSync.getPendingOperations(); setPendingOperations(operations); } catch (error) { setSyncStatus('error'); throw error; } }, []); // Stop sync const stopSync = (0, react_1.useCallback)(() => { offlineSync.stopSync(); setSyncStatus('idle'); }, []); return { syncStatus, lastSyncTime, pendingOperations, queueOperation, forceSync, stopSync }; } exports.useOfflineSync = useOfflineSync; //# sourceMappingURL=useOfflineSync.js.map