import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Plural, Trans } from '@lingui/react/macro'; import { OrganisationMemberInviteStatus } from '@prisma/client'; import { AnimatePresence } from 'framer-motion'; import { BellIcon } from 'lucide-react'; import { useSession } from '@documenso/lib/client-only/providers/session'; import { formatAvatarUrl } from '@documenso/lib/utils/avatars'; import { trpc } from '@documenso/trpc/react'; import { AnimateGenericFadeInOut } from '@documenso/ui/components/animate/animate-generic-fade-in-out'; import { Alert, AlertDescription } from '@documenso/ui/primitives/alert'; import { AvatarWithText } from '@documenso/ui/primitives/avatar'; import { Button } from '@documenso/ui/primitives/button'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from '@documenso/ui/primitives/dialog'; import { useToast } from '@documenso/ui/primitives/use-toast'; export const OrganisationInvitations = ({ className }: { className?: string }) => { const { data, isLoading } = trpc.organisation.member.invite.getMany.useQuery({ status: OrganisationMemberInviteStatus.PENDING, }); return ( {data && data.length > 0 && !isLoading && (
You have 1 pending invitation } other={ You have # pending invitations } /> Pending invitations You have 1 pending invitation } other={ You have # pending invitations } />
    {data.map((invitation) => (
  • {invitation.organisation.name} } secondaryText={`/o/${invitation.organisation.url}`} rightSideComponent={
    } />
  • ))}
)}
); }; const AcceptOrganisationInvitationButton = ({ token }: { token: string }) => { const { _ } = useLingui(); const { toast } = useToast(); const { refreshSession } = useSession(); const { mutateAsync: acceptOrganisationInvitation, isPending, isSuccess, } = trpc.organisation.member.invite.accept.useMutation({ onSuccess: async () => { await refreshSession(); toast({ title: _(msg`Success`), description: _(msg`Invitation accepted`), duration: 5000, }); }, onError: () => { toast({ title: _(msg`Something went wrong`), description: _(msg`Unable to join this organisation at this time.`), variant: 'destructive', duration: 10000, }); }, }); return ( ); }; const DeclineOrganisationInvitationButton = ({ token }: { token: string }) => { const { _ } = useLingui(); const { toast } = useToast(); const { refreshSession } = useSession(); const { mutateAsync: declineOrganisationInvitation, isPending, isSuccess, } = trpc.organisation.member.invite.decline.useMutation({ onSuccess: async () => { await refreshSession(); toast({ title: _(msg`Success`), description: _(msg`Invitation declined`), duration: 5000, }); }, onError: () => { toast({ title: _(msg`Something went wrong`), description: _(msg`Unable to decline this invitation at this time.`), variant: 'destructive', duration: 10000, }); }, }); return ( ); };