import { useEffect, useState, FormEvent } from "react"; import { useSearchParams, Link } from "react-router-dom"; function saveTokensAndRedirect(token: string, refreshToken: string, redirect: string) { localStorage.setItem("token", token); localStorage.setItem("refreshToken", refreshToken); window.location.href = redirect; } export default function LoginPage() { const [searchParams] = useSearchParams(); const redirect = searchParams.get("redirect") ?? "/ragview"; const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); // Handle OAuth2 callback — token & refreshToken in URL useEffect(() => { const token = searchParams.get("token"); const refreshToken = searchParams.get("refreshToken"); if (token && refreshToken) { saveTokensAndRedirect(token, refreshToken, redirect); } }, [searchParams, redirect]); async function handleSubmit(e: FormEvent) { e.preventDefault(); setError(""); setLoading(true); try { const res = await fetch("/api/auth/login", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email, password }), }); const data = await res.json(); if (data.success && data.payload?.token) { saveTokensAndRedirect(data.payload.token, data.payload.refreshToken ?? "", redirect); } else { setError(data.message ?? "Login failed"); } } catch { setError("Network error. Please try again."); } finally { setLoading(false); } } const registerHref = `/register?redirect=${encodeURIComponent(redirect)}`; return (
Sign in to your account
{/* Email/Password form */} {/* Divider */}Don't have an account?{" "} Register