From 130945259d63c39318b6bf8f8bcd44e68fb6740f Mon Sep 17 00:00:00 2001 From: karishmas6 Date: Wed, 25 Sep 2024 13:19:47 +0530 Subject: [PATCH] feat: login ui --- src/pages/Login.tsx | 125 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 src/pages/Login.tsx diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx new file mode 100644 index 00000000..7ea8c42b --- /dev/null +++ b/src/pages/Login.tsx @@ -0,0 +1,125 @@ +import axios from 'axios'; +import { useState, useContext, useEffect } from 'react'; +import { useNavigate, Link } from 'react-router-dom'; +import { AuthContext } from '../context/auth'; +import { + Box, + Typography, + TextField, + Button, + CircularProgress, +} from '@mui/material'; +import { useGlobalInfoStore } from "../context/globalInfo"; + +const SignIn = () => { + const [form, setForm] = useState({ + email: '', + password: '', + }); + const [loading, setLoading] = useState(false); + const { notify } = useGlobalInfoStore(); + const { email, password } = form; + + const { state, dispatch } = useContext(AuthContext); + const { user } = state; + + const navigate = useNavigate(); + + useEffect(() => { + if (user) { + navigate('/'); + } + }, [user, navigate]); + + const handleChange = (e: any) => { + const { name, value } = e.target; + setForm({ ...form, [name]: value }); + }; + + const submitForm = async (e: any) => { + e.preventDefault(); + setLoading(true); + try { + const { data } = await axios.post(`/api/login`, { email, password }); + dispatch({ type: 'LOGIN', payload: data }); + notify('success', 'Welcome to Maxun!'); + window.localStorage.setItem('user', JSON.stringify(data)); + navigate('/'); + } catch (err: any) { + notify('error', err.response.data || 'Login Failed. Please try again.'); + setLoading(false); + } + }; + + return ( + + + Login + + + + OR + + + {/* Login Form */} + + + + + + + {/* Redirect to Register */} + + Don’t have an account?{' '} + + Register + + + + + ); +}; + +export default SignIn;