'use client'; import { useState } from 'react'; import { motion } from 'framer-motion'; import { Users, UserCheck, UserX, Clock, Shield } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import type { TeamInvitation } from '@/services/teams'; interface InvitationCardProps { invitation: TeamInvitation; onAccept: (invitationId: string) => Promise; onDecline: (invitationId: string) => Promise; } export function InvitationCard({ invitation, onAccept, onDecline, }: InvitationCardProps) { const [isAccepting, setIsAccepting] = useState(false); const [isDeclining, setIsDeclining] = useState(false); const handleAccept = async () => { setIsAccepting(true); try { await onAccept(invitation.id); } catch (error) { console.error('Failed to accept invitation:', error); } finally { setIsAccepting(false); } }; const handleDecline = async () => { setIsDeclining(true); try { await onDecline(invitation.id); } catch (error) { console.error('Failed to decline invitation:', error); } finally { setIsDeclining(false); } }; const formatDate = (dateString: string) => { const date = new Date(dateString); return new Intl.RelativeTimeFormat('en', { numeric: 'auto' }).format( Math.ceil((date.getTime() - Date.now()) / (1000 * 60 * 60 * 24)), 'day' ); }; return (
{/* Left side - Team info */}

{invitation.team_name}

Invited by {invitation.owner_name}

{invitation.team_description && (

{invitation.team_description}

)}
Invited {formatDate(invitation.invited_at)}
{invitation.team_permission === 'share' ? 'Share' : 'View'} Permission
{/* Right side - Actions */}
); }