"use client"; import { newPasswordSchema, type NewPasswordFormData } from "@nextsparkjs/core/lib/validation"; import { useAuth } from "@nextsparkjs/core/hooks/useAuth"; import { zodResolver } from "@hookform/resolvers/zod"; import { AlertCircle, CheckCircle, Loader2 } from "lucide-react"; import Link from "next/link"; import { useSearchParams } from "next/navigation"; import { Suspense, useEffect, useState, useCallback } from "react"; import { useForm } from "react-hook-form"; import { Button } from "@nextsparkjs/core/components/ui/button"; import { Label } from "@nextsparkjs/core/components/ui/label"; import { PasswordInput } from "@nextsparkjs/core/components/ui/password-input"; import { Alert, AlertDescription } from "@nextsparkjs/core/components/ui/alert"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@nextsparkjs/core/components/ui/card"; import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-registry.client' import { sel } from '@nextsparkjs/core/selectors' function ResetPasswordContent() { const searchParams = useSearchParams()!; const token = searchParams.get("token") || ""; const { updatePassword } = useAuth(); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); const form = useForm({ resolver: zodResolver(newPasswordSchema), defaultValues: { password: "", confirmPassword: "", }, }); const { register, handleSubmit, watch, formState: { errors }, } = form; const password = watch("password"); useEffect(() => { // If no token is present, this is not a valid reset link if (!token) { setError("Invalid or missing reset token. Please request a new password reset."); } }, [token]); const onSubmit = useCallback(async (data: NewPasswordFormData) => { if (!token) { setError("Token de recuperación inválido"); return; } setLoading(true); setError(null); console.log('Actualizando contraseña...'); try { const result = await updatePassword(data.password, token); if (!result.success) { const errorMsg = result.error || "Failed to reset password"; setError(errorMsg); } else { setSuccess(true); console.log('Contraseña actualizada exitosamente'); } } catch { setError('Error inesperado al actualizar contraseña'); } finally { setLoading(false); } }, [token, updatePassword]); if (success) { return (

Password Reset Successful!

Your password has been successfully reset. You can now sign in with your new password.

); } return ( Set New Password Choose a strong password for your account. {error && ( {error} {error.includes("token") && (
Request a new password reset
)}
)}
{errors.password && (

{errors.password.message}

)}
{errors.confirmPassword && (

{errors.confirmPassword.message}

)}
Back to Login
); } function ResetPasswordPage() { return ( }> ); } // Opt out of static generation due to client-side state export default getTemplateOrDefaultClient('app/(auth)/reset-password/page.tsx', ResetPasswordPage)