'use client'; import { Check, Copy } from 'lucide-react'; import type { OrganizationInvitationHistoryItemDto } from '@/lib/api/organization'; import { canShareOrganizationInviteLink } from '@/components/invitations/organizationInviteLinks'; import { Badge, organizationLinkStatusVariant } from '@/components/ui/common/Badge'; import { Button } from '@/components/ui/common/Button'; import { Table } from '@/components/ui/common/Table'; function formatInvitationStatusLabel(status: OrganizationInvitationHistoryItemDto['status']): string { if (status === 'PENDING') return 'Invitation pending'; if (status === 'ACTIVE') return 'Invitation Accepted'; if (status === 'REJECTED') return 'Invitation rejected'; if (status === 'EXPIRED') return 'Invitation expired'; return status; } function formatTableDate(value: string): string { const d = new Date(value); if (Number.isNaN(d.getTime())) return '—'; return d.toLocaleDateString(); } type InvitationHistoryDialogProps = { open: boolean; onClose: () => void; loading: boolean; items: OrganizationInvitationHistoryItemDto[]; copiedId: string | null; copyingInvitationId: string | null; onCopy: (invitation: OrganizationInvitationHistoryItemDto) => void; copyError?: string; copySuccess?: string; }; export function InvitationHistoryDialog({ open, onClose, loading, items, copiedId, copyingInvitationId, onCopy, copyError, copySuccess, }: InvitationHistoryDialogProps) { if (!open) return null; return (

Invitation History

{copyError && (
{copyError}
)} {copySuccess && (
{copySuccess}
)} {loading ? (

Loading invitation history...

) : items.length === 0 ? (

No invitations yet.

) : ( } body={ <> {items.map((inv) => ( ))} } /> )} ); }
Organization Owner email Date Status Action
{inv.organizationName} {inv.ownerEmail} {formatTableDate(inv.createdAt)} {formatInvitationStatusLabel(inv.status)} {canShareOrganizationInviteLink(inv) ? ( ) : ( )}