From c12c4fe742a310d6709a194c9c8e821461197602 Mon Sep 17 00:00:00 2001 From: KS Jannette Date: Sun, 1 Mar 2026 23:14:25 -0500 Subject: [PATCH] add image --- frontend/public/ping.png | Bin 0 -> 30541 bytes frontend/src/pages/Login.jsx | 270 ++++++++++++++++++----------------- 2 files changed, 138 insertions(+), 132 deletions(-) create mode 100644 frontend/public/ping.png diff --git a/frontend/public/ping.png b/frontend/public/ping.png new file mode 100644 index 0000000000000000000000000000000000000000..2c34a7fabbaeb99fa78b1bb921ea4e36c7d459e9 GIT binary patch literal 30541 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 literal 0 HcmV?d00001 diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx index 3af2e66..981f2dd 100644 --- a/frontend/src/pages/Login.jsx +++ b/frontend/src/pages/Login.jsx @@ -1,146 +1,152 @@ -/** - * Login Page - * - * Allows existing users to sign in with email and password - */ - import { useState } from "react"; import { Link, useNavigate } from "react-router-dom"; import { useAuth } from "../contexts/AuthContext"; export default function Login() { - const [email, setEmail] = useState(""); - const [password, setPassword] = useState(""); - const [error, setError] = useState(""); - const [loading, setLoading] = useState(false); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [error, setError] = useState(""); + const [loading, setLoading] = useState(false); - const { login } = useAuth(); - const navigate = useNavigate(); + const { login } = useAuth(); + const navigate = useNavigate(); - async function handleSubmit(e) { - e.preventDefault(); + async function handleSubmit(e) { + e.preventDefault(); - // Validation - if (!email || !password) { - setError("Please fill in all fields"); - return; - } - - try { - setError(""); - setLoading(true); - await login(email, password); - navigate("/addresses"); // Redirect to main app - } catch (err) { - setError("Failed to log in: " + err.message); - } finally { - setLoading(false); - } + // Validation + if (!email || !password) { + setError("Please fill in all fields"); + return; } - return ( + try { + setError(""); + setLoading(true); + await login(email, password); + navigate("/addresses"); // Redirect to main app + } catch (err) { + setError("Failed to log in: " + err.message); + } finally { + setLoading(false); + } + } + + return ( +
+
+

+ Koin Ping - Login +

+ + {error && (
-

- Koin Ping - Login -

- - {error && ( -
- {error} -
- )} - -
-
- - setEmail(e.target.value)} - disabled={loading} - style={{ - width: "100%", - padding: "0.5rem", - fontSize: "1rem", - backgroundColor: "#242424", - border: "1px solid #444", - borderRadius: "4px", - color: "white", - }} - required - /> -
- -
- - setPassword(e.target.value)} - disabled={loading} - style={{ - width: "100%", - padding: "0.5rem", - fontSize: "1rem", - backgroundColor: "#242424", - border: "1px solid #444", - borderRadius: "4px", - color: "white", - }} - required - /> -
- - -
- -
-

- Don't have an account?{" "} - - Sign up here - -

-
+ {error}
- ); + )} + +
+
+ + setEmail(e.target.value)} + disabled={loading} + style={{ + width: "100%", + padding: "0.5rem", + fontSize: "1.2rem", + backgroundColor: "#242424", + border: "1px solid #444", + borderRadius: "4px", + color: "white", + }} + required + /> +
+ +
+ + setPassword(e.target.value)} + disabled={loading} + style={{ + width: "100%", + padding: "0.5rem", + fontSize: "1.2rem", + backgroundColor: "#242424", + border: "1px solid #444", + borderRadius: "4px", + color: "white", + }} + required + /> +
+ + +
+ +
+

+ Don't have an account?{" "} + + Sign up here + +

+
+
+
+ ); }