import { useState } from "react"; import { LoginRequest, LoginResponse } from "../items"; interface LoginProps { onLogin: (token: string) => void; } export function Login({ onLogin }: LoginProps) { const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); try { const req = LoginRequest.create({ username, password }); const body = LoginRequest.encode(req).finish(); const res = await fetch("/auth/login", { method: "POST", body, headers: { "Content-Type": "application/octet-stream", }, }); const buffer = await res.arrayBuffer(); const response = LoginResponse.decode(new Uint8Array(buffer)); if (response.success) { onLogin(response.token); } else { setError(response.message); } } catch (err) { console.error("Login error:", err); setError("Failed to login"); } }; return (

Login

setUsername(e.target.value)} placeholder="Enter your username" />
setPassword(e.target.value)} placeholder="Enter your password" />
{error && (

{error}

)}
); }