UNPKG

supastash

Version:

Offline-first sync engine for Supabase in React Native using SQLite

45 lines (44 loc) 1.56 kB
import { isOnline } from "../../connection"; import { logError } from "../../logs"; import { refreshScreen } from "../../refreshScreenCalls"; import { deleteData } from "./deleteChunks"; import { getAllDeletedData, getAllUnsyncedData } from "./getAllUnsyncedData"; import { uploadData } from "./uploadChunk"; let isInSync = new Map(); /** * Sends unsynced data to the remote database for a given table * @param table - The table to send the data to */ export async function pushLocalDataToRemote(table, onPushToRemote, noSync) { if (isInSync.get(table)) return; isInSync.set(table, true); try { if (!(await isOnline())) return; const data = await getAllUnsyncedData(table); const deletedData = await getAllDeletedData(table); if ((!data || data.length === 0) && (!deletedData || deletedData.length === 0)) { noSync?.push(table); return; } if (data && data.length > 0) { await uploadData(table, data, onPushToRemote); refreshScreen(table); } const payloadForDeletedData = deletedData?.map((item) => ({ id: item.id, deleted_at: item.deleted_at, })); if (payloadForDeletedData && payloadForDeletedData.length > 0) { await deleteData(table, payloadForDeletedData); } } catch (error) { logError(`[Supastash] Error pushing local data to remote for ${table}`, error); } finally { isInSync.delete(table); } }