import { StrictMode } from 'react' import ReactDOM from 'react-dom/client' import { AxiosError } from 'axios' import './i18n' // Initialize i18n import { QueryCache, QueryClient, QueryClientProvider, } from '@tanstack/react-query' import { RouterProvider, createRouter } from '@tanstack/react-router' import { toast } from 'sonner' import { useAuthStore } from '@/stores/authStore' import { handleServerError } from '@/utils/handle-server-error' import { FontProvider } from './context/font-context' import { ThemeProvider } from './context/theme-context' import './index.css' import { routeTree } from './routeTree.gen' const queryClient = new QueryClient({ defaultOptions: { queries: { retry: (failureCount, error) => { if (import.meta.env.DEV) { console.debug('Query retry:', { failureCount, error }) } if (failureCount >= 0 && import.meta.env.DEV) return false if (failureCount > 3 && import.meta.env.PROD) return false return !( error instanceof AxiosError && [401, 403].includes(error.response?.status ?? 0) ) }, refetchOnWindowFocus: import.meta.env.PROD, staleTime: 30 * 1000, // 30s - increased from 10s }, mutations: { onError: (error) => { handleServerError(error) if (error instanceof AxiosError) { if (error.response?.status === 304) { toast.error('Content not modified!') } } }, }, }, queryCache: new QueryCache({ onError: (error) => { if (error instanceof AxiosError) { if (error.response?.status === 401) { toast.error('Session expired!') useAuthStore.getState().logout() const redirect = `` router.navigate({ to: '/sign-in', search: { redirect } }) } if (error.response?.status === 500) { toast.error('Internal Server Error!') router.navigate({ to: '/500' }) } if (error.response?.status === 403) { toast.error('Access forbidden!') } } }, }), }) const router = createRouter({ routeTree, context: { queryClient }, defaultPreload: 'intent', defaultPreloadStaleTime: 0, }) declare module '@tanstack/react-router' { interface Register { router: typeof router } } const rootElement = document.getElementById('root')! if (!rootElement.innerHTML) { const root = ReactDOM.createRoot(rootElement) root.render( ) }