import copy from "copy-to-clipboard"; import { format, isPast } from "date-fns"; import { Loader2, Mail, MoreHorizontal, Users } from "lucide-react"; import { toast } from "sonner"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { authClient } from "@/lib/auth-client"; import { api } from "@/utils/api"; import { AddInvitation } from "./add-invitation"; export const ShowInvitations = () => { const { data, isPending, refetch } = api.organization.allInvitations.useQuery(); const { mutateAsync: removeInvitation } = api.organization.removeInvitation.useMutation(); return (
Invitations Create invitations to your organization. {isPending ? (
Loading...
) : ( <> {data?.length === 0 ? (
Invite users to your organization
) : (
See all invitations Email Role Status Expires At Actions {data?.map((invitation) => { const isExpired = isPast( new Date(invitation.expiresAt), ); return ( {invitation.email} {invitation.role} {invitation.status} {format(new Date(invitation.expiresAt), "PPpp")}{" "} {isExpired ? ( (Expired) ) : null} Actions {!isExpired && ( <> {invitation.status === "pending" && ( { copy( `${origin}/invitation?token=${invitation.id}`, ); toast.success( "Invitation Copied to clipboard", ); }} > Copy Invitation )} {invitation.status === "pending" && ( { const result = await authClient.organization.cancelInvitation( { invitationId: invitation.id, }, ); if (result.error) { toast.error( result.error.message, ); } else { toast.success( "Invitation deleted", ); refetch(); } }} > Cancel Invitation )} )} { await removeInvitation({ invitationId: invitation.id, }).then(() => { refetch(); toast.success("Invitation removed"); }); }} > Remove Invitation ); })}
)} )}
); };