diff --git a/app/account/page.tsx b/app/account/page.tsx new file mode 100644 index 0000000..e69de29 diff --git a/app/loginPage/AuthContext.tsx b/app/loginPage/AuthContext.tsx new file mode 100644 index 0000000..165b414 --- /dev/null +++ b/app/loginPage/AuthContext.tsx @@ -0,0 +1,31 @@ +import React, { createContext, useState, ReactNode } from 'react'; + +interface AuthContextType { + isLoggedIn: boolean; + login: () => void; + logout: () => void; +} + +export const AuthContext = createContext({ + isLoggedIn: false, + login: () => {}, + logout: () => {}, +}); + +export const AuthProvider: React.FC<{ children: ReactNode }> = ({ children }) => { + const [isLoggedIn, setIsLoggedIn] = useState(false); + + const login = () => { + setIsLoggedIn(true); + }; + + const logout = () => { + setIsLoggedIn(false); + }; + + return ( + + {children} + + ); +}; diff --git a/app/loginPage/page.tsx b/app/loginPage/page.tsx index cdc66b2..c949d0a 100644 --- a/app/loginPage/page.tsx +++ b/app/loginPage/page.tsx @@ -1,8 +1,12 @@ "use client"; -import { useEffect, useState } from "react"; +import React, { useContext, useEffect, useState } from "react"; import { GoogleOAuthProvider, useGoogleLogin, googleLogout, TokenResponse} from "@react-oauth/google"; import { jwtDecode } from "jwt-decode"; import axios from "axios"; +import { AuthContext } from './AuthContext'; // Import AuthContext + + + interface User { name: string; @@ -17,15 +21,19 @@ const LoginPage = () => { ) } + const LoginComponent = () => { const [user, setUser] = useState(null); - + const { login, logout } = useContext(AuthContext); // Access login and logout functions from AuthContext + + useEffect(() => { console.log("LoginPage component mounted"); }, []); + const handleLoginSuccess = (tokenResponse: any) => { if ('code' in tokenResponse) { // Handle authorization code flow @@ -46,37 +54,43 @@ const LoginComponent = () => { .catch(err => console.error('Backend login failed', err)); } + }; - const login = useGoogleLogin({ + const handleLogin = useGoogleLogin({ flow: "auth-code", - - onSuccess: (tokenResponse) => handleLoginSuccess, + + onSuccess: (tokenResponse) => { + handleLoginSuccess(tokenResponse); + login(); // Call the login function from AuthContext + console.log('Logged in successfully'); + }, onError: (errorResponse) => console.error('Login Failed', errorResponse), }); const handleLogout = () => { googleLogout(); setUser(null); // Clears the user state, effectively logging out the user + logout(); // Call the logout function from AuthContext console.log('Logged out successfully'); }; return (
- {user && (
User profile

Welcome, {user.name} - {user.email}

- +
)}
- + ); }; -export default LoginPage; +export default LoginPage; \ No newline at end of file diff --git a/components/navbar.tsx b/components/navbar.tsx index a49d750..0f667b8 100644 --- a/components/navbar.tsx +++ b/components/navbar.tsx @@ -1,6 +1,10 @@ "use client"; +import React, { useContext } from 'react'; +import { AuthContext } from '../app/loginPage/AuthContext'; // Import AuthContext + export default function Navbar({ height }: { height: string }) { + const { isLoggedIn } = useContext(AuthContext); // Access isLoggedIn state from AuthContext return (