@shaaz1000/rn-storage
Version:
A comprehensive storage solution for React Native with encryption, caching, and offline sync
80 lines • 2.94 kB
JavaScript
;
// 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