import { useState } from "react"; import { apiPost, setToken } from "../lib/api"; import { CLASSLENS_ICON } from "../lib/icon"; import type { User } from "../types"; interface AuthResponse { token: string; user: User; } interface LoginFormProps { onLogin: (user: User) => void; } export function LoginForm({ onLogin }: LoginFormProps) { const [mode, setMode] = useState<"login" | "register">("login"); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [fullName, setFullName] = useState(""); const [school, setSchool] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); setLoading(true); try { const endpoint = mode === "login" ? "/api/auth/login" : "/api/auth/register"; const body = mode === "login" ? { email, password } : { email, password, full_name: fullName, school }; const result = await apiPost(endpoint, body); setToken(result.token); onLogin(result.user); } catch (err: unknown) { setError(err instanceof Error ? err.message : "An error occurred"); } finally { setLoading(false); } }; return (
ClassLens

ClassLens

AI 驅動的考試分析

{/* Mode toggle */}
setEmail(e.target.value)} placeholder="your@email.com" required className="input" autoFocus />
{mode === "register" && ( <>
setFullName(e.target.value)} placeholder="王小明" required className="input" />
setSchool(e.target.value)} placeholder="台北市立第一高級中學" required className="input" />
)}
setPassword(e.target.value)} placeholder="••••••••" required minLength={4} className="input" />
{error && (

{error}

)}
); }