'use client' import { useActionState } from 'react' import { inviteUser, type InviteUserResult } from '@/app/actions/invite-user' interface OrgOption { id: string name: string } const INITIAL_STATE: InviteUserResult = { success: false, error: '' } const ERROR_MESSAGES: Record = { no_autenticado: 'Tu sesión expiró — volvé a iniciar sesión.', forbidden: 'No tenés permisos para invitar usuarios.', email_invalido: 'El email no es válido.', organizacion_requerida: 'Elegí una organización.', organizacion_no_encontrada: 'La organización seleccionada no existe.', } function describeError(code: string): string { if (code.startsWith('invite_failed')) return `No se pudo enviar la invitación: ${code.slice('invite_failed: '.length)}` if (code.startsWith('role_insert_failed')) return `Error interno al asignar el rol: ${code.slice('role_insert_failed: '.length)}` return ERROR_MESSAGES[code] ?? 'Ocurrió un error inesperado.' } export function InviteForm({ organizations }: { organizations: OrgOption[] }) { const [state, formAction, isPending] = useActionState( async (_prev: InviteUserResult, formData: FormData) => inviteUser(formData), INITIAL_STATE ) return (
{!state.success && state.error && (

{describeError(state.error)}

)} {state.success && (

Invitación enviada correctamente.

)}
) }