import React, { useState } from 'react'; import logo from '../assets/react.svg'; import { useParams, useNavigate } from 'react-router-dom'; export default function PasswordResetConfirm() { const { uid, token } = useParams(); const [newPassword, setNewPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [loading, setLoading] = useState(false); const [success, setSuccess] = useState(false); const [error, setError] = useState(''); const navigate = useNavigate(); const handleSubmit = async (e) => { e.preventDefault(); setError(''); if (newPassword !== confirmPassword) { setError('Las contraseñas no coinciden.'); return; } setLoading(true); try { // POST a la ruta real del backend (URL absoluta) const apiUrl = `http://192.168.1.195:8000/api/v1/user/password-reset-confirm/${uid}/${token}/`; const res = await fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ password: newPassword }), }); if (!res.ok) { const data = await res.json().catch(() => ({})); setError(data.detail || 'No se pudo cambiar la contraseña.'); } else { setSuccess(true); setTimeout(() => navigate('/login'), 2500); } } catch (err) { setError('Error de red. Intenta de nuevo.'); } setLoading(false); }; return (
{/* Background pattern */}
{/* Header navy */}
{/* Logo eliminado para diseño limpio */}

Nueva contraseña

Ingresa tu nueva contraseña y confírmala

{success ? (
Contraseña cambiada correctamente. Redirigiendo al login...
) : (
{/* Nueva contraseña */}
setNewPassword(e.target.value)} onFocus={e => { e.target.style.borderColor = 'transparent'; e.target.style.boxShadow = '0 0 0 2px #4DA6FF'; }} onBlur={e => { e.target.style.borderColor = '#d1d5db'; e.target.style.boxShadow = 'none'; }} onMouseEnter={e => { if (document.activeElement !== e.target) e.target.style.borderColor = '#4DA6FF'; }} onMouseLeave={e => { if (document.activeElement !== e.target) e.target.style.borderColor = '#d1d5db'; }} />
{/* Confirmar contraseña */}
setConfirmPassword(e.target.value)} onFocus={e => { e.target.style.borderColor = 'transparent'; e.target.style.boxShadow = '0 0 0 2px #4DA6FF'; }} onBlur={e => { e.target.style.borderColor = '#d1d5db'; e.target.style.boxShadow = 'none'; }} onMouseEnter={e => { if (document.activeElement !== e.target) e.target.style.borderColor = '#4DA6FF'; }} onMouseLeave={e => { if (document.activeElement !== e.target) e.target.style.borderColor = '#d1d5db'; }} />
{/* Error */} {error && (

{error}

)} {/* Botón */}
{/* Link volver al login */}
)}
{/* Footer */}

Desarrollado por @AduanaSoft

Solución especializada para Agentes Aduanales

{/* Floating elements */}
); }