diff --git a/web/src/api/login.ts b/web/src/api/login.ts index 6d8da9b..238ad84 100644 --- a/web/src/api/login.ts +++ b/web/src/api/login.ts @@ -1,47 +1,41 @@ -import {apiInstance} from "@/api/ApiInstance"; - +import { apiInstance } from '@/api/ApiInstance'; export async function login(email: string, password: string) { let userRole; try { - const res = await apiInstance.get(`user/${email}/role`) - userRole = res.data + const res = await apiInstance.get(`user/${email}/role`); + userRole = res.data; - if (userRole == null) { - throw Error("Invalid credentials"); + if (!userRole) { + throw Error('Invalid credentials'); } } catch (e) { - throw Error("Invalid credentials") + throw Error('Invalid credentials'); } let loginUrl; - console.log(userRole) if (userRole === 'admin') { - loginUrl = 'login-admin' + loginUrl = 'login-admin'; } else if (userRole === 'alumni') { - loginUrl = 'login-alumni' + loginUrl = 'login-alumni'; } else if (userRole === 'member') { - loginUrl = 'login-member' + loginUrl = 'login-member'; } else if (userRole === 'sponsor') { - loginUrl = 'login-sponsor' + loginUrl = 'login-sponsor'; } else { - throw Error("Unknown login type") + throw Error('Unknown login type'); } try { const res = await apiInstance.post(loginUrl, { - "email": email, - "password": password - }) - const {userId, token} = res.data; - localStorage.setItem('accessToken', token) - console.log(`Successfully logged in as UserID ${userId}`) + email, + password, + }); + const { userId, token } = res.data; + localStorage.setItem('accessToken', token); + console.log(`Successfully logged in as UserID ${userId}`); - // Todo: After successful login. Create endpoint to get whoami() and link that to redux state. + return { userType: userRole }; // Return userType } catch (e) { - throw Error("Invalid credentials") + throw Error('Invalid credentials'); } } - -export async function logout() { - localStorage.removeItem('accessToken') -} diff --git a/web/src/app/components/AuthForms/LoginForm.tsx b/web/src/app/components/AuthForms/LoginForm.tsx index 6add5ed..a9af632 100644 --- a/web/src/app/components/AuthForms/LoginForm.tsx +++ b/web/src/app/components/AuthForms/LoginForm.tsx @@ -4,8 +4,8 @@ import { NavLink } from 'react-router-dom'; import { useNavigate } from 'react-router-dom'; import { useDispatch } from 'react-redux'; import { toast } from 'react-toastify'; -import { login } from "@/api/login"; -import { useState } from "react"; +import { login } from '@/api/login'; +import { useState } from 'react'; export function LoginForm() { const dispatch = useDispatch(); @@ -13,31 +13,38 @@ export function LoginForm() { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); - // const handleLoginAs = (userType: 'student' | 'sponsor' | 'alumni' | 'admin') => { - // - // - // // dispatch(setUserType(userType)); Todo: Move this to API folder - // // const profilePath = { - // // student: '/profile/student', - // // sponsor: '/profile/sponsor', - // // alumni: '/profile/alumni', - // // admin: '/profile/admin', - // // }[userType]; - // // toast.success('Logged in as ' + userType); - // // navigate(profilePath, { replace: true }); - // }; async function onLogin() { - await login(email, password) - .then((response) => { - toast.success('Login Successful'); - navigate('/profile', { replace: true }); - // Todo: Do something afterwards. - // handleLoginAs(response.data.userType); - }).catch((error) => { - console.log(error) - toast.error(error.toString()); - }) + try { + const { userType } = await login(email, password); + toast.success('Login Successful'); + + // Redirect based on user type + switch (userType) { + case 'admin': + navigate('/profile/admin', { replace: true }); + break; + case 'alumni': + navigate('/profile/alumni', { replace: true }); + break; + case 'member': + navigate('/profile/student', { replace: true }); + break; + case 'sponsor': + navigate('/profile/sponsor', { replace: true }); + break; + default: + navigate('/'); // Default fallback + } + } catch (error) { + if (error instanceof Error) { + toast.error(error.message); + console.error(error); + } else { + toast.error('An unknown error occurred'); + console.error('Unknown error:', error); + } + } } return ( @@ -53,8 +60,20 @@ export function LoginForm() { Login - setEmail(event.target.value)} /> - setPassword(event.target.value)} /> + setEmail(event.target.value)} + /> + setPassword(event.target.value)} + />