|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import { HydratedRouter } from "react-router/dom";
|
|
import React, { startTransition, StrictMode } from "react";
|
|
import { hydrateRoot } from "react-dom/client";
|
|
import { Provider } from "react-redux";
|
|
import posthog from "posthog-js";
|
|
import "./i18n";
|
|
import {
|
|
QueryCache,
|
|
QueryClient,
|
|
QueryClientProvider,
|
|
} from "@tanstack/react-query";
|
|
import toast from "react-hot-toast";
|
|
import store from "./store";
|
|
import { useConfig } from "./hooks/query/use-config";
|
|
import { AuthProvider } from "./context/auth-context";
|
|
import { SettingsProvider } from "./context/settings-context";
|
|
|
|
function PosthogInit() {
|
|
const { data: config } = useConfig();
|
|
|
|
React.useEffect(() => {
|
|
if (config?.POSTHOG_CLIENT_KEY) {
|
|
posthog.init(config.POSTHOG_CLIENT_KEY, {
|
|
api_host: "https://us.i.posthog.com",
|
|
person_profiles: "identified_only",
|
|
});
|
|
}
|
|
}, [config]);
|
|
|
|
return null;
|
|
}
|
|
|
|
async function prepareApp() {
|
|
if (
|
|
process.env.NODE_ENV === "development" &&
|
|
import.meta.env.VITE_MOCK_API === "true"
|
|
) {
|
|
const { worker } = await import("./mocks/browser");
|
|
|
|
await worker.start({
|
|
onUnhandledRequest: "bypass",
|
|
});
|
|
}
|
|
}
|
|
|
|
const QUERY_KEYS_TO_IGNORE = ["authenticated", "hosts"];
|
|
const queryClient = new QueryClient({
|
|
queryCache: new QueryCache({
|
|
onError: (error, query) => {
|
|
if (!QUERY_KEYS_TO_IGNORE.some((key) => query.queryKey.includes(key))) {
|
|
toast.error(error.message);
|
|
}
|
|
},
|
|
}),
|
|
defaultOptions: {
|
|
queries: {
|
|
staleTime: 1000 * 60 * 5,
|
|
gcTime: 1000 * 60 * 15,
|
|
},
|
|
mutations: {
|
|
onError: (error) => {
|
|
toast.error(error.message);
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
prepareApp().then(() =>
|
|
startTransition(() => {
|
|
hydrateRoot(
|
|
document,
|
|
<StrictMode>
|
|
<Provider store={store}>
|
|
<AuthProvider>
|
|
<QueryClientProvider client={queryClient}>
|
|
<SettingsProvider>
|
|
<HydratedRouter />
|
|
<PosthogInit />
|
|
</SettingsProvider>
|
|
</QueryClientProvider>
|
|
</AuthProvider>
|
|
</Provider>
|
|
</StrictMode>,
|
|
);
|
|
}),
|
|
);
|
|
|