import React from "react"; import { useRouteError, isRouteErrorResponse, Outlet } from "react-router"; import i18n from "#/i18n"; import { useGitHubAuthUrl } from "#/hooks/use-github-auth-url"; import { useIsAuthed } from "#/hooks/query/use-is-authed"; import { useAuth } from "#/context/auth-context"; import { useConfig } from "#/hooks/query/use-config"; import { Sidebar } from "#/components/features/sidebar/sidebar"; import { WaitlistModal } from "#/components/features/waitlist/waitlist-modal"; import { AnalyticsConsentFormModal } from "#/components/features/analytics/analytics-consent-form-modal"; import { useSettings } from "#/hooks/query/use-settings"; import { useMaybeMigrateSettings } from "#/hooks/use-maybe-migrate-settings"; export function ErrorBoundary() { const error = useRouteError(); if (isRouteErrorResponse(error)) { return (

{error.status}

{error.statusText}

          {error.data instanceof Object
            ? JSON.stringify(error.data)
            : error.data}
        
); } if (error instanceof Error) { return (

Uh oh, an error occurred!

{error.message}
); } return (

Uh oh, an unknown error occurred!

); } export default function MainApp() { useMaybeMigrateSettings(); const { gitHubToken } = useAuth(); const { data: settings } = useSettings(); const [consentFormIsOpen, setConsentFormIsOpen] = React.useState( !localStorage.getItem("analytics-consent"), ); const config = useConfig(); const { data: isAuthed, isFetching: isFetchingAuth } = useIsAuthed(); const gitHubAuthUrl = useGitHubAuthUrl({ gitHubToken, appMode: config.data?.APP_MODE || null, gitHubClientId: config.data?.GITHUB_CLIENT_ID || null, }); React.useEffect(() => { if (settings?.LANGUAGE) { i18n.changeLanguage(settings.LANGUAGE); } }, [settings?.LANGUAGE]); const isInWaitlist = !isFetchingAuth && !isAuthed && config.data?.APP_MODE === "saas"; return (
{isInWaitlist && ( )} {config.data?.APP_MODE === "oss" && consentFormIsOpen && ( setConsentFormIsOpen(false)} /> )}
); }