From 42236652fba05f9329102b4aad3fd5655468398b Mon Sep 17 00:00:00 2001 From: ShaneKianCastillo Date: Sun, 12 Oct 2025 12:31:17 +0800 Subject: [PATCH] Login Page Modified --- package-lock.json | 10 + package.json | 1 + src/assets/img/TaskSphereLogo.png | Bin 0 -> 13802 bytes src/components/Signin.jsx | 233 +++++++++++------------ src/components/Style/Style.css | 3 +- src/components/heade-foot/SigninFoot.jsx | 62 ++---- src/components/heade-foot/SigninHead.jsx | 27 +-- 7 files changed, 153 insertions(+), 183 deletions(-) create mode 100644 src/assets/img/TaskSphereLogo.png diff --git a/package-lock.json b/package-lock.json index 03357af..5564781 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "file-saver": "^2.0.5", "jspdf": "^3.0.3", "jspdf-autotable": "^5.0.2", + "lucide-react": "^0.545.0", "react": "^19.1.0", "react-chartjs-2": "^5.3.0", "react-dom": "^19.1.0", @@ -3571,6 +3572,15 @@ "dev": true, "license": "ISC" }, + "node_modules/lucide-react": { + "version": "0.545.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.545.0.tgz", + "integrity": "sha512-7r1/yUuflQDSt4f1bpn5ZAocyIxcTyVyBBChSVtBKn5M+392cPmI5YJMWOJKk/HUWGm5wg83chlAZtCcGbEZtw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", diff --git a/package.json b/package.json index 302a8f6..a646710 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "file-saver": "^2.0.5", "jspdf": "^3.0.3", "jspdf-autotable": "^5.0.2", + "lucide-react": "^0.545.0", "react": "^19.1.0", "react-chartjs-2": "^5.3.0", "react-dom": "^19.1.0", diff --git a/src/assets/img/TaskSphereLogo.png b/src/assets/img/TaskSphereLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d3be8e4f6303554adb43f2b4c17488b5f17e17 GIT binary patch literal 13802 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 { const { setIsLoggedIn } = useOutletContext(); const { login } = UserAuth(); - // ===================================================== - // 🚫 Route Guard (Trap user inside /Signin) - // ===================================================== + // Hard lock page scroll (belt-and-suspenders) useEffect(() => { - const storedUser = localStorage.getItem("customUser"); + const prevDoc = document.documentElement.style.overflow; + const prevBody = document.body.style.overflow; + document.documentElement.style.overflow = "hidden"; + document.body.style.overflow = "hidden"; + return () => { + document.documentElement.style.overflow = prevDoc; + document.body.style.overflow = prevBody; + }; + }, []); - // 🔹 If user is logged in, redirect to their dashboard + // Route guard + useEffect(() => { + const storedUser = localStorage.getItem("customUser"); if (storedUser) { const user = JSON.parse(storedUser); const roleRoutes = { @@ -37,27 +43,16 @@ const Signin = () => { }; navigate(roleRoutes[user.user_roles] || "/Signin", { replace: true }); } else { - // 🔹 If user is not logged in, trap them inside /Signin - const allowedPaths = ["/", "/Signin", "/signin"]; - if (!allowedPaths.includes(location.pathname)) { - navigate("/Signin", { replace: true }); - } - - // Disable back/forward navigation + const allowed = ["/", "/Signin", "/signin"]; + if (!allowed.includes(location.pathname)) navigate("/Signin", { replace: true }); window.history.pushState(null, "", window.location.href); - window.onpopstate = () => { - window.history.pushState(null, "", window.location.href); - }; + window.onpopstate = () => window.history.pushState(null, "", window.location.href); } }, [location, navigate]); - // ===================================================== - // 🔹 Handle Sign In - // ===================================================== const handleSignIn = async (e) => { e.preventDefault(); setLoading(true); - try { const { data: user, error } = await supabase .from("user_credentials") @@ -67,27 +62,15 @@ const Signin = () => { .single(); if (error || !user) { - Swal.fire({ - icon: "error", - title: "Login failed", - text: "Invalid credentials. Please try again.", - }); + Swal.fire({ icon: "error", title: "Login failed", text: "Invalid credentials. Please try again." }); return; } - // ✅ Save to context + localStorage login(user); localStorage.setItem("customUser", JSON.stringify(user)); localStorage.setItem("user_id", user.user_id); setIsLoggedIn(true); - console.log("✅ User signed in:", { - user_id: user.user_id, - uuid: user.id, - role: user.user_roles, - }); - - // 🔹 Role-based navigation const roleRoutes = { 1: { path: "/Manager", label: "Manager" }, 2: { path: "/Member", label: "Member" }, @@ -106,107 +89,115 @@ const Signin = () => { }); navigate(target.path); } else { - Swal.fire({ - icon: "warning", - title: "Unknown role", - text: "Please contact the administrator.", - }); + Swal.fire({ icon: "warning", title: "Unknown role", text: "Please contact the administrator." }); } } catch (err) { - Swal.fire({ - icon: "error", - title: "Server Error", - text: "Something went wrong. Please try again later.", - }); + Swal.fire({ icon: "error", title: "Server Error", text: "Something went wrong. Please try again later." }); console.error("❌ SignIn Error:", err.message); } finally { setLoading(false); } }; + useEffect(() => { - const storedUser = localStorage.getItem("customUser"); - if (storedUser) { - const user = JSON.parse(storedUser); - const roleRoutes = { - 1: "/Manager/Dashboard", - 2: "/Member/Dashboard", - 3: "/Adviser/Dashboard", - 4: "/Instructor/Dashboard", - }; - navigate(roleRoutes[user.user_roles] || "/Signin", { replace: true }); - } -}, []); + const storedUser = localStorage.getItem("customUser"); + if (storedUser) { + const user = JSON.parse(storedUser); + const roleRoutes = { + 1: "/Manager/Dashboard", + 2: "/Member/Dashboard", + 3: "/Adviser/Dashboard", + 4: "/Instructor/Dashboard", + }; + navigate(roleRoutes[user.user_roles] || "/Signin", { replace: true }); + } + }, [navigate]); - // ===================================================== - // 🔹 UI - // ===================================================== return ( -
+ // Lock the page height; no scroll +
-
-
-
-

Welcome to TaskSphere IT

- Logo -
- - setUserID(e.target.value)} - value={userID} - className="w-full p-3 border rounded" - type="text" - id="userID" - placeholder="Enter your ID number" - required - /> -
- -
- - setPassword(e.target.value)} - value={password} - className="w-full p-3 border rounded" - type="password" - id="password" - placeholder="Enter your password" - required - /> -
- + {/* Main fills remaining height; internal overflow hidden */} +
+
+
+ {/* Left: taller login card */} +
+
+

+ Welcome to +
+ TaskSphere IT +

+ + TaskSphere icon + + +
+ + setUserID(e.target.value)} + className="w-full rounded-md border border-neutral-300 bg-white px-3 py-2 text-sm text-black outline-none focus:border-[#611A11] focus:ring-1 focus:ring-[#611A11]" + required + /> +
+ +
+ + setPassword(e.target.value)} + className="w-full rounded-md border border-neutral-300 bg-white px-3 py-2 text-sm text-black outline-none focus:border-[#611A11] focus:ring-1 focus:ring-[#611A11]" + required + /> +
+ +
+
+ + +
- - -
- -
-

- Empowering Collaboration, -
- Streamlining IT Capstone Success. -

- Team + {/* Right: seal + headline */} +
+ CCS Seal +

+ A Task Management System for +
+ Capstone Project Development +

+
+
-
+
diff --git a/src/components/Style/Style.css b/src/components/Style/Style.css index 9480bf4..95deeb5 100644 --- a/src/components/Style/Style.css +++ b/src/components/Style/Style.css @@ -10,4 +10,5 @@ } .b-rd { border-radius: 8px; -} \ No newline at end of file +} + diff --git a/src/components/heade-foot/SigninFoot.jsx b/src/components/heade-foot/SigninFoot.jsx index 5c849b9..6470ae3 100644 --- a/src/components/heade-foot/SigninFoot.jsx +++ b/src/components/heade-foot/SigninFoot.jsx @@ -1,42 +1,22 @@ -import React from 'react'; - -const Footer = () => { - return ( - <> -
- - - ); +import React from "react"; + +const SigninFoot = () => { + return ( + // Fixed footer so it doesn't add to page height +
+ {/* Full-width gradient directly above the red divider */} +
+ + {/* Red divider line (inset like your mock) */} +
+ + {/* Footer content */} +
+

©2025 TaskSphere IT - All Rights Reserved

+ Terms of Service +
+
+ ); }; - -export default Footer; \ No newline at end of file + +export default SigninFoot; diff --git a/src/components/heade-foot/SigninHead.jsx b/src/components/heade-foot/SigninHead.jsx index 75f1167..80264de 100644 --- a/src/components/heade-foot/SigninHead.jsx +++ b/src/components/heade-foot/SigninHead.jsx @@ -1,27 +1,14 @@ -// SigninHeader.jsx import React from "react"; import Logo from "../../assets/img/Logo.png"; -const SigninHeader = () => { +const SigninHead = () => { return ( -
- - Logo - -
+
+
+ TaskSphere IT +
+
); }; -export default SigninHeader; +export default SigninHead;