diff --git a/apps/web/src/pages/Login.tsx b/apps/web/src/pages/Login.tsx new file mode 100644 index 0000000..18b8cde --- /dev/null +++ b/apps/web/src/pages/Login.tsx @@ -0,0 +1,79 @@ +import { useState } from "react" +import { useNavigate } from "@tanstack/react-router" +import { api } from "../lib/api" + +export default function Login() { + const navigate = useNavigate() + const [email, setEmail] = useState("admin@emberclone.local") + const [password, setPassword] = useState("emberclone2026") + const [error, setError] = useState(null) + const [isLoading, setIsLoading] = useState(false) + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + setError(null) + setIsLoading(true) + + try { + await api.login(email, password) + navigate({ to: "/" }) + } catch (err: any) { + setError(err.message || "Login failed") + } finally { + setIsLoading(false) + } + } + + return ( +
+
+
+

EmberClone

+

Sign in to your account

+
+ +
+
+ + setEmail(e.target.value)} + className="w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent transition-all" + required + /> +
+ +
+ + setPassword(e.target.value)} + className="w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent transition-all" + required + /> +
+ + {error && ( +
+ {error} +
+ )} + + +
+
+
+ ) +} \ No newline at end of file