'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...

); } if (validationError) { return (
Invitación inválida

{(validationError as any).response?.data?.message || 'Esta invitación no es válida o ha expirado.'}

); } return (
Crear cuenta en Horux Despachos

Has sido invitado a registrarte. Completa tus datos para continuar.

setForm({ ...form, nombre: e.target.value })} placeholder="Juan Pérez" required />
setForm({ ...form, password: e.target.value })} placeholder="Mínimo 6 caracteres" required />
setForm({ ...form, confirmPassword: e.target.value })} placeholder="Repite tu contraseña" required />

setForm({ ...form, nombreDespacho: e.target.value })} placeholder="Despacho Contable Pérez" required />
setForm({ ...form, rfc: e.target.value.toUpperCase() })} placeholder="XAXX010101000" required />
setForm({ ...form, codigoPostal: e.target.value })} placeholder="44100" maxLength={5} />
); }