From c4f6ed8947ddc1e4694770fd1130ae42eb2dfaf4 Mon Sep 17 00:00:00 2001 From: Trailblazer09 Date: Wed, 23 Jul 2025 11:43:02 +0530 Subject: [PATCH 01/16] added theme switch --- package.json | 1 + src/App.tsx | 13 +- src/Routes/Login/Login.tsx | 25 ++- src/Routes/Router.tsx | 11 +- src/components/Navbar.tsx | 29 ++- src/hooks/useTheme.ts | 31 ++++ src/main.tsx | 23 ++- src/pages/About/About.tsx | 8 +- src/pages/Contact/Contact.tsx | 46 +++-- src/pages/Contributors/Contributors.tsx | 58 +++--- src/pages/Home/Home.tsx | 233 +++++++++++++++++++----- src/theme.ts | 21 +++ tailwind.config.js | 16 +- 13 files changed, 389 insertions(+), 126 deletions(-) create mode 100644 src/hooks/useTheme.ts create mode 100644 src/theme.ts diff --git a/package.json b/package.json index ca7db86..a4e5ca9 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ }, "devDependencies": { "@eslint/js": "^9.13.0", + "@types/aws-lambda": "^8.10.152", "@types/node": "^22.10.1", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", diff --git a/src/App.tsx b/src/App.tsx index a49da65..4495dfb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,21 +3,24 @@ import Navbar from "./components/Navbar"; import Footer from "./components/Footer"; import ScrollProgressBar from './components/ScrollProgressBar'; import { Toaster } from "react-hot-toast"; +import { useTheme } from "./hooks/useTheme"; import Router from "./Routes/Router"; function App() { + const { theme, setTheme } = useTheme(); + return ( -
+
{/* Navbar */} {/* Main content */} -
- +
+
{/* Footer */} @@ -49,3 +52,7 @@ function App() { } export default App; + + + + diff --git a/src/Routes/Login/Login.tsx b/src/Routes/Login/Login.tsx index 1c1f495..1071400 100644 --- a/src/Routes/Login/Login.tsx +++ b/src/Routes/Login/Login.tsx @@ -9,7 +9,10 @@ interface LoginFormData { } const Login: React.FC = () => { - const [formData, setFormData] = useState({ email: "", password: "" }); + const [formData, setFormData] = useState({ + email: "", + password: "", + }); const [message, setMessage] = useState(""); const navigate = useNavigate(); // Initialize the navigate hook @@ -22,14 +25,14 @@ const Login: React.FC = () => { const handleSubmit = async (e: FormEvent) => { e.preventDefault(); try { - const response = await axios.post(`${backendUrl}/api/auth/login`, - formData, - + const response = await axios.post( + `${backendUrl}/api/auth/login`, + formData ); setMessage(response.data.message); // Show success message from backend // Navigate to /home if login is successful - if (response.data.message === 'Login successful') { + if (response.data.message === "Login successful") { navigate("/home"); } } catch (error: any) { @@ -38,9 +41,13 @@ const Login: React.FC = () => { }; return ( -
+
+

Login

+ +
+
{ value={formData.email} onChange={handleChange} required - className="w-full p-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" + className="w-full p-3 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-black dark:text-white focus:outline-none focus:ring-2 focus:ring-blue-500" />
@@ -60,7 +67,7 @@ const Login: React.FC = () => { value={formData.password} onChange={handleChange} required - className="w-full p-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" + className="w-full p-3 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-black dark:text-white focus:outline-none focus:ring-2 focus:ring-blue-500" />
+
); }; export default Login; - diff --git a/src/Routes/Router.tsx b/src/Routes/Router.tsx index 867672a..7847f95 100644 --- a/src/Routes/Router.tsx +++ b/src/Routes/Router.tsx @@ -7,17 +7,24 @@ import Contributors from "../pages/Contributors/Contributors"; import Signup from "./Signup/Signup.tsx"; import Login from "./Login/Login.tsx"; +interface RouterProps { + theme: string; +} + +const Router: React.FC = ({ theme }) => { + -const Router = () => { return ( {/* Redirect from root (/) to the home page */} } /> } /> } /> + } /> } /> } /> - } /> + + } /> ); diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index f7ea2f2..50c1091 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -1,14 +1,16 @@ -import { Link } from 'react-router-dom'; -import { useState } from 'react'; +import { Link } from "react-router-dom"; +import { useState, useEffect } from "react"; +import { useTheme } from "../hooks/useTheme"; const Navbar: React.FC = () => { const [isOpen, setIsOpen] = useState(false); - + const { theme, setTheme } = useTheme(); + return ( -