'use client' import { useState } from 'react' import { Check, X, Clock } from 'lucide-react' import PermissionBadge from './PermissionBadge' import { acceptInvitation, declineInvitation } from '@/lib/sharing-actions' import { useRouter } from 'next/navigation' interface InvitationCardProps { invitation: { id: string permission: 'editor' | 'viewer' createdAt: Date list: { id: string title: string color: string } inviter: { name: string | null email: string } } onUpdate?: () => void } export default function InvitationCard({ invitation, onUpdate }: InvitationCardProps) { const [isAccepting, setIsAccepting] = useState(false) const [isDeclining, setIsDeclining] = useState(false) const [error, setError] = useState(null) const router = useRouter() const handleAccept = async () => { setIsAccepting(true) setError(null) try { await acceptInvitation(invitation.id) onUpdate?.() router.refresh() } catch (err) { setError(err instanceof Error ? err.message : 'Failed to accept invitation') setIsAccepting(false) } } const handleDecline = async () => { setIsDeclining(true) setError(null) try { await declineInvitation(invitation.id) onUpdate?.() router.refresh() } catch (err) { setError(err instanceof Error ? err.message : 'Failed to decline invitation') setIsDeclining(false) } } const formatDate = (date: Date) => { const now = new Date() const diffMs = now.getTime() - new Date(date).getTime() const diffMins = Math.floor(diffMs / 60000) const diffHours = Math.floor(diffMs / 3600000) const diffDays = Math.floor(diffMs / 86400000) if (diffMins < 1) return 'Just now' if (diffMins < 60) return `${diffMins}m ago` if (diffHours < 24) return `${diffHours}h ago` if (diffDays < 7) return `${diffDays}d ago` return new Date(date).toLocaleDateString() } return (

{invitation.list.title}

Invited by {invitation.inviter.name || invitation.inviter.email}

{formatDate(invitation.createdAt)}
{error && (
{error}
)}
) }