FactuGES_ERP/apps/web/src/app.tsx

88 lines
3.1 KiB
TypeScript
Raw Normal View History

2025-11-16 19:06:11 +00:00
import { createAxiosDataSource, createAxiosInstance } from "@erp/core/client";
import { DataSourceProvider } from "@erp/core/hooks";
2026-07-06 10:57:33 +00:00
import {
IdentityAuthSessionProvider,
activeCompanyStorage,
authTokenStorage,
2026-07-06 11:55:06 +00:00
getIdentityAuthSessionRuntimeHandlers,
2026-07-06 10:57:33 +00:00
} from "@erp/identity/client";
2026-04-12 10:07:15 +00:00
import { i18n } from "@repo/i18next";
2025-11-16 19:06:11 +00:00
import { LoadingOverlay } from "@repo/rdx-ui/components";
2025-05-17 19:12:01 +00:00
import { Toaster, TooltipProvider } from "@repo/shadcn-ui/components";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
2025-11-16 19:06:11 +00:00
import DineroFactory from "dinero.js";
2026-10-16 17:00:01 +00:00
import { Suspense, useState } from "react";
import { ErrorBoundary } from "react-error-boundary";
2025-05-17 19:12:01 +00:00
import { I18nextProvider } from "react-i18next";
2025-11-16 19:06:11 +00:00
import { RouterProvider } from "react-router-dom";
2025-05-02 21:43:51 +00:00
import { RenderErrorFallback } from "./pages";
2025-08-24 10:14:20 +00:00
import { getAppRouter } from "./routes";
2025-05-18 11:53:00 +00:00
export const App = () => {
2025-07-02 08:57:09 +00:00
DineroFactory.globalLocale = "es-ES";
2026-10-16 17:00:01 +00:00
const [queryClient] = useState(
() =>
new QueryClient({
defaultOptions: {
queries: {
retry: false,
staleTime: 10000, // Specify a staleTime to only fetch when the data is older than a certain amount of time
},
},
})
);
2025-05-02 21:43:51 +00:00
2025-11-28 15:00:18 +00:00
console.log("import.meta.env.VITE_API_SERVER_URL => ", import.meta.env.VITE_API_SERVER_URL);
2026-10-16 17:00:01 +00:00
const [axiosInstance] = useState(() =>
createAxiosInstance({
baseURL: import.meta.env.VITE_API_SERVER_URL,
getAccessToken: () => authTokenStorage.getAccessToken(),
getActiveCompanyId: () => activeCompanyStorage.getActiveCompanyId(),
onRefreshSession: () => getIdentityAuthSessionRuntimeHandlers().refreshAccessToken(),
onAuthError: () => {
getIdentityAuthSessionRuntimeHandlers().clearSession();
if (window.location.pathname !== "/login") {
window.location.replace("/login");
}
},
})
);
const [dataSource] = useState(() => createAxiosDataSource(axiosInstance));
const [appRouter] = useState(() => getAppRouter());
2025-05-27 17:47:03 +00:00
2025-05-02 21:43:51 +00:00
return (
2025-05-17 19:12:01 +00:00
<I18nextProvider i18n={i18n}>
<QueryClientProvider client={queryClient}>
2025-05-27 17:47:03 +00:00
<DataSourceProvider dataSource={dataSource}>
2026-07-05 11:43:13 +00:00
<IdentityAuthSessionProvider>
2026-04-12 10:07:15 +00:00
<TooltipProvider>
<ErrorBoundary
fallbackRender={({ resetErrorBoundary }) => (
<RenderErrorFallback
onGoHome={() => {
window.location.replace("/");
}}
resetErrorBoundary={resetErrorBoundary}
/>
)}
>
<Suspense fallback={<LoadingOverlay />}>
<RouterProvider router={appRouter} />
</Suspense>
</ErrorBoundary>
2025-05-29 11:15:28 +00:00
</TooltipProvider>
2026-04-28 09:34:22 +00:00
<Toaster expand={true} position="top-center" richColors />
2025-05-29 11:15:28 +00:00
{import.meta.env.DEV && <ReactQueryDevtools initialIsOpen={false} />}
2026-07-05 11:43:13 +00:00
</IdentityAuthSessionProvider>
2025-05-17 19:12:01 +00:00
</DataSourceProvider>
</QueryClientProvider>
</I18nextProvider>
2025-05-02 21:43:51 +00:00
);
2025-05-18 11:53:00 +00:00
};