'use client'; import { useState } from 'react'; import { Header } from '@/components/layouts/header'; import { useCreateInvitation, useClientInvitations } from '@/lib/hooks/use-client-invitations'; import { Button, Input, Card, CardContent, CardHeader, CardTitle } from '@horux/shared-ui'; import { format } from 'date-fns'; import { es } from 'date-fns/locale'; export default function InvitarClientePage() { const [email, setEmail] = useState(''); const [nombreDespacho, setNombreDespacho] = useState(''); const [rfc, setRfc] = useState(''); const [message, setMessage] = useState<{ kind: 'ok' | 'error'; text: string } | null>(null); const createMut = useCreateInvitation(); const { data: invitations, isLoading } = useClientInvitations(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setMessage(null); if (!email.trim()) { setMessage({ kind: 'error', text: 'El email es requerido' }); return; } try { await createMut.mutateAsync({ email, nombreDespacho, rfc }); setMessage({ kind: 'ok', text: 'Invitación enviada exitosamente' }); setEmail(''); setNombreDespacho(''); setRfc(''); } catch (err: any) { setMessage({ kind: 'error', text: err.response?.data?.message || 'Error al enviar invitación' }); } }; const statusBadge = (status: string) => { const map: Record = { pending: 'bg-yellow-100 text-yellow-800', accepted: 'bg-green-100 text-green-800', expired: 'bg-gray-100 text-gray-800', }; return ( {status === 'pending' ? 'Pendiente' : status === 'accepted' ? 'Aceptada' : 'Expirada'} ); }; return ( <>
Nueva invitación
setEmail(e.target.value)} placeholder="cliente@ejemplo.com" required />
setNombreDespacho(e.target.value)} placeholder="Despacho Contable Pérez" />
setRfc(e.target.value.toUpperCase())} placeholder="XAXX010101000" />
{message && (
{message.text}
)}
Invitaciones enviadas {isLoading ? (

Cargando...

) : !invitations?.length ? (

No hay invitaciones enviadas

) : (
{invitations.map((inv) => ( ))}
Email Despacho Estado Enviada Expira
{inv.email} {inv.nombreDespacho || '-'} {statusBadge(inv.status)} {format(new Date(inv.sentAt), 'dd MMM yyyy', { locale: es })} {format(new Date(inv.expiresAt), 'dd MMM yyyy', { locale: es })}
)}
); }