import { CheckSquare } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { toast } from 'sonner' import { useParams } from 'common' import { useOrganizationAcceptInvitationMutation } from 'data/organization-members/organization-invitation-accept-mutation' import { useOrganizationInvitationTokenQuery } from 'data/organization-members/organization-invitation-token-query' import { useProfile } from 'lib/profile' import { ResponseError } from 'types' import { Button, Loading, cn } from 'ui' import { OrganizationInviteError } from './OrganizationInviteError' export const OrganizationInvite = () => { const router = useRouter() const { profile } = useProfile() const { slug, token, name } = useParams() const { data, error, isSuccess, isError, isLoading } = useOrganizationInvitationTokenQuery( { slug, token }, { retry: false, refetchOnWindowFocus: false, } ) const hasError = isError || (isSuccess && (data.token_does_not_exist || data.expired_token || !data.email_match)) const isNotSignedInError = error?.message.includes('No authorization token was found') const organizationName = isSuccess ? data?.organization_name : 'an organization' const loginRedirectLink = `/sign-in?returnTo=${encodeURIComponent(`/join?token=${token}&slug=${slug}`)}` const { mutate: joinOrganization, isLoading: isJoining } = useOrganizationAcceptInvitationMutation({ onSuccess: () => { router.push('/organizations') }, onError: (error) => { toast.error(`Failed to join organization: ${error.message}`) }, }) async function handleJoinOrganization() { if (!slug) return console.error('Slug is required') if (!token) return console.error('Token is required') joinOrganization({ slug, token }) } return (

You have been invited to join

{organizationName}

{isSuccess && slug && (

{`organization slug: ${slug}`}

)}
{profile === undefined && (

You will need to sign in to accept this invitation

)}
{hasError && !isNotSignedInError && ( )} {isSuccess && !hasError && (
)}
) }