import { Form, Formik } from 'formik' import { useSearchParams, Navigate } from 'react-router-dom' import { Helmet } from 'react-helmet-async' import { inferMutationInput, trpc } from '~/utils/trpc' import IVButton from '~/components/IVButton' import IVSpinner from '~/components/IVSpinner' import { MeProvider, useMe } from '~/components/MeContext' import IVAPIError from '~/components/IVAPIError' import { logout } from '~/utils/auth' function Container(props) { return (
Join organization | Interval {props.children}
) } function LoadingState(props) { return (
{props.children ?? } {props.children && ( )}
) } function AcceptInvitationPage() { const { me } = useMe() const joinOrg = trpc.useMutation('organization.join') const [searchParams] = useSearchParams() const invitationId = searchParams.get('token') const signupCheck = trpc.useQuery(['auth.signup.check', { invitationId }], { retry: false, refetchOnWindowFocus: false, }) if (!invitationId) { return } const onLogout = async () => { await logout() window.location.reload() } if (signupCheck.isError) { if ( signupCheck.error.message?.includes( 'this invitation is for another email address' ) ) { return (

{signupCheck.error.message}

) } return ( ) } if (!signupCheck.data) { return } if (signupCheck.data.isSignupRequired) { return } if (signupCheck.data.isLoginRequired) { return ( ) } // unlikely; helps w/ type safety if (!signupCheck.data.invitation) { return ( ) } const onDecline = () => { joinOrg.mutate( { invitationId, accept: false, }, { async onSuccess() { window.location.assign(`/dashboard`) }, } ) } return (

Accept invitation

> initialValues={{ invitationId, accept: true, }} onSubmit={async values => { if (joinOrg.isLoading) return joinOrg.mutate(values, { async onSuccess(res) { window.location.assign(`/dashboard/${res?.organization.slug}`) }, }) }} >

{signupCheck.data.invitation.organization.name}{' '} has invited you to join their organization on Interval.

Join organization} /> Decline} onClick={onDecline} />

Logged in as {me?.email}

) } export default function AcceptInvitationPageWrapper() { return ( ) }