UNPKG

supastash

Version:

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

40 lines (39 loc) 1.47 kB
import { getSupastashDb } from "../../db/dbInitializer"; import { upsertData } from "../../utils/sync/pullFromRemote/updateLocalDb"; import { checkIfTableExist } from "../../utils/tableValidator"; import log, { logError } from "../logs"; import { refreshScreen } from "../refreshScreenCalls"; import { createTable } from "./createTable"; const DEFAULT_DATE = "1970-01-01T00:00:00Z"; export async function receiveData(payload, table, shouldFetch = true, upsertCall) { if (!shouldFetch) return; try { const db = await getSupastashDb(); const exist = await checkIfTableExist(table); if (!exist) { await createTable(table, payload); } if (!payload?.id) return; const existingData = await db.getFirstAsync(`SELECT * FROM ${table} WHERE id = ?`, [payload.id]); if (existingData && new Date(existingData.updated_at || DEFAULT_DATE).getTime() >= new Date(payload.updated_at || DEFAULT_DATE).getTime()) { return; } log(`[Supastash] Receiving data for ${table} with id ${payload.id}`); log(`[Supastash] Payload:`, payload); // Update the data if (upsertCall) { await upsertCall(payload); } else { await upsertData(table, payload); } refreshScreen(table); } catch (error) { logError("[Supastash] Error receiving data:", error); } }