'use client';
import { Suspense, useState } from 'react';
import Link from 'next/link';
import Image from 'next/image';
import { useRouter, useSearchParams } from 'next/navigation';
import { Button, Input, Label, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@horux/shared-ui';
import { confirmPasswordReset } from '@/lib/api/auth';
import { KeyRound, CheckCircle2, AlertTriangle } from 'lucide-react';
function ResetPasswordContent() {
const router = useRouter();
const searchParams = useSearchParams();
const token = searchParams.get('token') || '';
const [isLoading, setIsLoading] = useState(false);
const [success, setSuccess] = useState(false);
const [error, setError] = useState('');
const [newPassword, setNewPassword] = useState('');
const [confirmPassword, setConfirmPassword] = useState('');
if (!token) {
return (
Enlace inválido
El enlace no incluye un token de recuperación válido. Solicita uno nuevo desde la pantalla de login.
);
}
async function handleSubmit(e: React.FormEvent) {
e.preventDefault();
setError('');
if (newPassword.length < 8) {
setError('La contraseña debe tener al menos 8 caracteres');
return;
}
if (newPassword !== confirmPassword) {
setError('Las contraseñas no coinciden');
return;
}
setIsLoading(true);
try {
await confirmPasswordReset(token, newPassword);
setSuccess(true);
setTimeout(() => router.push('/login'), 3000);
} catch (err: any) {
setError(err.response?.data?.message || 'Error al actualizar contraseña');
} finally {
setIsLoading(false);
}
}
if (success) {
return (
Contraseña actualizada
Tu contraseña fue cambiada exitosamente. Redireccionando al login...
);
}
return (
Nueva contraseña
Ingresa tu nueva contraseña. Mínimo 8 caracteres.
);
}
export default function ResetPasswordPage() {
return (