| |
|
| | |
| | |
| | |
| | |
| |
|
| |
|
| | 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>,
|
| | );
|
| | }),
|
| | );
|
| |
|