'use client'; import { useState } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { useValidateInvitationToken, useRegisterFromInvitation } from '@/lib/hooks/use-client-invitations'; import { Button, Input, Card, CardContent, CardHeader, CardTitle } from '@horux/shared-ui'; import { useAuthStore } from '@/stores/auth-store'; export default function InvitationRegisterPage() { const params = useParams(); const router = useRouter(); const token = params.token as string; const { setTokens, setUser } = useAuthStore(); const { data: invitation, isLoading: validating, error: validationError } = useValidateInvitationToken(token); const registerMut = useRegisterFromInvitation(); const [form, setForm] = useState({ nombre: '', password: '', confirmPassword: '', nombreDespacho: '', rfc: '', verticalProfile: 'CONTABLE' as 'CONTABLE' | 'JURIDICO' | 'ARQUITECTURA', codigoPostal: '', }); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (form.password !== form.confirmPassword) { alert('Las contraseñas no coinciden'); return; } if (form.password.length < 6) { alert('La contraseña debe tener al menos 6 caracteres'); return; } try { const result = await registerMut.mutateAsync({ token, data: { nombre: form.nombre, password: form.password, nombreDespacho: form.nombreDespacho, rfc: form.rfc, verticalProfile: form.verticalProfile, codigoPostal: form.codigoPostal || undefined, }, }); setTokens(result.accessToken, result.refreshToken); setUser(result.user); router.push('/'); } catch (err: any) { alert(err.response?.data?.message || 'Error al registrarse'); } }; if (validating) { return (
Validando invitación...
{(validationError as any).response?.data?.message || 'Esta invitación no es válida o ha expirado.'}
Has sido invitado a registrarte. Completa tus datos para continuar.