import React, { useEffect } from 'react' import { AppProps } from 'next/app' import { SessionProvider } from 'next-auth/react' import { ChakraProvider, createStandaloneToast } from '@chakra-ui/react' import { customTheme } from 'libs/theme' import { useRouterProgressBar } from 'libs/routerProgressBar' import 'assets/styles/routerProgressBar.css' import 'assets/styles/plate.css' import 'focus-visible/dist/focus-visible' import 'assets/styles/submissionsTable.css' import 'assets/styles/codeMirror.css' import 'assets/styles/custom.css' import { UserContext } from 'contexts/UserContext' import { TypebotContext } from 'contexts/TypebotContext' import { useRouter } from 'next/router' import { KBarProvider } from 'kbar' import { actions } from 'libs/kbar' import { enableMocks } from 'mocks' import { SupportBubble } from 'components/shared/SupportBubble' import { WorkspaceContext } from 'contexts/WorkspaceContext' import { toTitleCase } from 'utils' const { ToastContainer, toast } = createStandaloneToast(customTheme) if (process.env.NEXT_PUBLIC_E2E_TEST === 'enabled') enableMocks() const App = ({ Component, pageProps: { session, ...pageProps } }: AppProps) => { useRouterProgressBar() const { query, pathname, isReady } = useRouter() useEffect(() => { pathname.endsWith('/edit') ? (document.body.style.overflow = 'hidden') : (document.body.style.overflow = 'auto') }, [pathname]) useEffect(() => { displayStripeCallbackMessage(query.stripe?.toString(), toast) // eslint-disable-next-line react-hooks/exhaustive-deps }, [isReady]) const typebotId = query.typebotId?.toString() return ( <> {typebotId ? ( ) : ( )} ) } const displayStripeCallbackMessage = ( status: string | undefined, toast: any ) => { if (status && ['pro', 'team'].includes(status)) { toast({ position: 'bottom-right', status: 'success', title: 'Upgrade success!', description: `Workspace upgraded to ${toTitleCase(status)} 🎉`, }) } } export default App