"use client"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { posthog } from "posthog-js"; import { PostHogProvider } from "posthog-js/react"; import { PropsWithChildren, useEffect } from "react"; import { BrainCreationProvider } from "@/lib/components/AddBrainModal/brainCreation-provider"; import { HelpWindow } from "@/lib/components/HelpWindow/HelpWindow"; import { Menu } from "@/lib/components/Menu/Menu"; import { useOutsideClickListener } from "@/lib/components/Menu/hooks/useOutsideClickListener"; import { SearchModal } from "@/lib/components/SearchModal/SearchModal"; import { BrainProvider, ChatProvider, KnowledgeToFeedProvider, } from "@/lib/context"; import { useBrainContext } from "@/lib/context/BrainProvider/hooks/useBrainContext"; import { ChatsProvider } from "@/lib/context/ChatsProvider"; import { HelpProvider } from "@/lib/context/HelpProvider/help-provider"; import { useHelpContext } from "@/lib/context/HelpProvider/hooks/useHelpContext"; import { MenuProvider } from "@/lib/context/MenuProvider/Menu-provider"; import { useMenuContext } from "@/lib/context/MenuProvider/hooks/useMenuContext"; import { NotificationsProvider } from "@/lib/context/NotificationsProvider/notifications-provider"; import { OnboardingProvider } from "@/lib/context/OnboardingProvider/Onboarding-provider"; import { SearchModalProvider } from "@/lib/context/SearchModalProvider/search-modal-provider"; import { useSupabase } from "@/lib/context/SupabaseProvider"; import { UserSettingsProvider } from "@/lib/context/UserSettingsProvider/User-settings.provider"; import { IntercomProvider } from "@/lib/helpers/intercom/IntercomProvider"; import { UpdateMetadata } from "@/lib/helpers/updateMetadata"; import { usePageTracking } from "@/services/analytics/june/usePageTracking"; import "../lib/config/LocaleConfig/i18n"; import styles from "./App.module.scss"; import { FromConnectionsProvider } from "./chat/[chatId]/components/ActionsBar/components/KnowledgeToFeed/components/FromConnections/FromConnectionsProvider/FromConnection-provider"; if ( process.env.NEXT_PUBLIC_POSTHOG_KEY != null && process.env.NEXT_PUBLIC_POSTHOG_HOST != null ) { posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, { api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST, opt_in_site_apps: true, disable_session_recording: true, }); } // This wrapper is used to make effect calls at a high level in app rendering. const App = ({ children }: PropsWithChildren): JSX.Element => { const { fetchAllBrains } = useBrainContext(); const { onClickOutside } = useOutsideClickListener(); const { session } = useSupabase(); const { isOpened } = useMenuContext(); const { isVisible } = useHelpContext(); usePageTracking(); useEffect(() => { if (session?.user) { void fetchAllBrains(); posthog.identify(session.user.id, { email: session.user.email }); posthog.startSessionRecording(); } }, [session]); return ( <>
{children}
); }; const queryClient = new QueryClient(); const AppWithQueryClient = ({ children }: PropsWithChildren): JSX.Element => { return ( {children} ); }; export { AppWithQueryClient as App };