SPB Git

Repository Public

providers.tsx 1.6 KB 45 lines tsx

1'use client';2import { useEffect, useState } from 'react';3import { QueryClient, QueryClientProvider } from '@tanstack/react-query';4import { TooltipProvider } from '@/components/ui/tooltip';5import { Toaster } from '@/components/ui/toast';6import { ApiRequestError } from '@/lib/api';7import { useConn } from '@/stores/conn';89export function Providers({ children }: { children: React.ReactNode }) {10  const [client] = useState(11    () =>12      new QueryClient({13        defaultOptions: {14          queries: {15            staleTime: 15_000,16            refetchOnWindowFocus: false,17            retry: (count, err) => !(err instanceof ApiRequestError && err.status >= 400 && err.status < 500) && count < 2,18          },19        },20      }),21  );22  useEffect(() => {23    const on = () => useConn.getState().set({ online: true });24    const off = () => useConn.getState().set({ online: false });25    window.addEventListener('online', on);26    window.addEventListener('offline', off);27    // The service worker caches the static shell only; it is registered in production builds.28    if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {29      navigator.serviceWorker.register('/sw.js').catch(() => undefined);30    }31    return () => {32      window.removeEventListener('online', on);33      window.removeEventListener('offline', off);34    };35  }, []);36  return (37    <QueryClientProvider client={client}>38      <TooltipProvider delayDuration={350} skipDelayDuration={200}>39        {children}40        <Toaster />41      </TooltipProvider>42    </QueryClientProvider>43  );44}45
Files main
Menu

Theme