38 lines
970 B
TypeScript
38 lines
970 B
TypeScript
import { useEffect } from 'react';
|
|
import { RouterProvider } from 'react-router-dom';
|
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
import { Toaster } from 'sonner';
|
|
import { router } from './routes';
|
|
import { useAuthStore } from './features/auth/authStore';
|
|
import { I18nProvider } from './i18n/i18n';
|
|
|
|
const queryClient = new QueryClient({
|
|
defaultOptions: {
|
|
queries: {
|
|
refetchOnWindowFocus: false,
|
|
retry: 1,
|
|
},
|
|
},
|
|
});
|
|
|
|
function AuthBoot({ children }: { children: React.ReactNode }) {
|
|
const init = useAuthStore((s) => s.init);
|
|
useEffect(() => {
|
|
void init();
|
|
}, [init]);
|
|
return <>{children}</>;
|
|
}
|
|
|
|
export function App() {
|
|
return (
|
|
<I18nProvider>
|
|
<QueryClientProvider client={queryClient}>
|
|
<AuthBoot>
|
|
<RouterProvider router={router} />
|
|
</AuthBoot>
|
|
<Toaster position="top-center" richColors closeButton />
|
|
</QueryClientProvider>
|
|
</I18nProvider>
|
|
);
|
|
}
|