"use client" import { useState } from "react" import { QueryClient } from "@tanstack/react-query" import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client" import { openDB, type IDBPDatabase } from "idb" import type { PersistedClient, Persister } from "@tanstack/react-query-persist-client" const DB_NAME = "ultimail-query-cache" const STORE_NAME = "query-cache" let dbPromise: Promise | null = null function getDb() { if (!dbPromise) { dbPromise = openDB(DB_NAME, 1, { upgrade(db) { db.createObjectStore(STORE_NAME) }, }) } return dbPromise } const idbPersister: Persister = { persistClient: async (client: PersistedClient) => { const db = await getDb() await db.put(STORE_NAME, client, "cache") }, restoreClient: async (): Promise => { const db = await getDb() return db.get(STORE_NAME, "cache") }, removeClient: async () => { const db = await getDb() await db.delete(STORE_NAME, "cache") }, } function makeQueryClient() { return new QueryClient({ defaultOptions: { queries: { gcTime: 1000 * 60 * 60 * 24, staleTime: 1000 * 60 * 5, networkMode: "offlineFirst", retry: 3, }, mutations: { networkMode: "offlineFirst", }, }, }) } export function QueryProvider({ children }: { children: React.ReactNode }) { const [queryClient] = useState(makeQueryClient) return ( {children} ) }