frontend/app/lib/client.ts
Nathan Lamy 85e2552db8
All checks were successful
Deploy to Netlify / Deploy to Netlify (push) Successful in 1m39s
feat: add colle details page
2025-07-29 23:25:10 +02:00

49 lines
1.4 KiB
TypeScript

import { get, set, del } from "idb-keyval";
import { QueryClient } from "@tanstack/react-query";
import { persistQueryClient } from "@tanstack/react-query-persist-client";
import { createAsyncStoragePersister } from "@tanstack/query-async-storage-persister";
const CACHE_KEY = "khollise-cache"; // Key for IndexedDB storage
// Check if we're in a browser environment with IndexedDB support
const isIndexedDBAvailable = () => {
return (
typeof window !== "undefined" &&
typeof window.indexedDB !== "undefined" &&
window.indexedDB !== null
);
};
// Create QueryClient with persistence
const createQueryClient = () => {
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: 1000 * 60 * 5, // 5 minutes
gcTime: 1000 * 60 * 60 * 24, // 24 hours (formerly cacheTime)
refetchOnWindowFocus: false,
retry: 2,
},
},
});
// Only set up persistence if IndexedDB is available
if (isIndexedDBAvailable()) {
persistQueryClient({
queryClient,
persister: createAsyncStoragePersister({
storage: { getItem: get, setItem: set, removeItem: del },
key: CACHE_KEY,
}),
maxAge: 1000 * 60 * 60 * 24, // 24 hours
buster: "v1", // Change this to invalidate cache
});
} else {
console.warn("Cache persistence disabled - IndexedDB not available");
}
return queryClient;
};
const queryClient = createQueryClient();
export default queryClient;