import { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { z } from "zod"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { useAuth } from "@/hooks/useAuth"; import { useToast } from "@/hooks/use-toast"; const passwordSchema = z.object({ password: z.string().min(6, { message: "Lösenordet måste vara minst 6 tecken" }).max(100), confirmPassword: z.string(), }).refine((data) => data.password === data.confirmPassword, { message: "Lösenorden matchar inte", path: ["confirmPassword"], }); const ResetPassword = () => { const [password, setPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); const [isReady, setIsReady] = useState(false); const { updatePassword, session } = useAuth(); const { toast } = useToast(); const navigate = useNavigate(); useEffect(() => { // Wait for session to be available (user clicked email link) if (session) { setIsReady(true); } }, [session]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const validation = passwordSchema.safeParse({ password, confirmPassword }); if (!validation.success) { toast({ title: "Fel", description: validation.error.errors[0].message, variant: "destructive", }); return; } setIsSubmitting(true); try { const { error } = await updatePassword(password); if (error) { toast({ title: "Kunde inte uppdatera lösenord", description: error.message, variant: "destructive", }); } else { toast({ title: "Lösenord uppdaterat!", description: "Du kan nu logga in med ditt nya lösenord.", }); navigate("/"); } } finally { setIsSubmitting(false); } }; if (!isReady) { return (
Väntar på verifiering av din återställningslänk.