import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Plural, Trans } from '@lingui/react/macro'; import { AnimatePresence } from 'framer-motion'; import { BellIcon } from 'lucide-react'; import { formatAvatarUrl } from '@documenso/lib/utils/avatars'; import { formatTeamUrl } from '@documenso/lib/utils/teams'; 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 TeamInvitations = () => { const { data, isLoading } = trpc.team.getTeamInvitations.useQuery(); return ( {data && data.length > 0 && !isLoading && (
You have 1 pending team invitation } other={ You have # pending team invitations } /> Pending invitations You have 1 pending team invitation } other={ You have # pending team invitations } />
    {data.map((invitation) => (
  • {invitation.team.name} } secondaryText={formatTeamUrl(invitation.team.url)} rightSideComponent={
    } />
  • ))}
)}
); }; const AcceptTeamInvitationButton = ({ teamId }: { teamId: number }) => { const { _ } = useLingui(); const { toast } = useToast(); const { mutateAsync: acceptTeamInvitation, isPending, isSuccess, } = trpc.team.acceptTeamInvitation.useMutation({ onSuccess: () => { toast({ title: _(msg`Success`), description: _(msg`Accepted team invitation`), duration: 5000, }); }, onError: () => { toast({ title: _(msg`Something went wrong`), description: _(msg`Unable to join this team at this time.`), variant: 'destructive', duration: 10000, }); }, }); return ( ); }; const DeclineTeamInvitationButton = ({ teamId }: { teamId: number }) => { const { _ } = useLingui(); const { toast } = useToast(); const { mutateAsync: declineTeamInvitation, isPending, isSuccess, } = trpc.team.declineTeamInvitation.useMutation({ onSuccess: () => { toast({ title: _(msg`Success`), description: _(msg`Declined team invitation`), duration: 5000, }); }, onError: () => { toast({ title: _(msg`Something went wrong`), description: _(msg`Unable to decline this team invitation at this time.`), variant: 'destructive', duration: 10000, }); }, }); return ( ); };