Skip to content

Commit

Permalink
Alter logic for capture user in Home #57
Browse files Browse the repository at this point in the history
  • Loading branch information
JaumHttps committed Mar 25, 2023
1 parent c0533f7 commit e473ffd
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 60 deletions.
33 changes: 23 additions & 10 deletions vite-client/src/Pages/Home/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,32 @@ import { AuthContext, IUser } from '../../context/AuthContext'
import { RedirectLogin } from '../../components/Redirect'

export function Home() {
const { user, signed } = useContext(AuthContext)
const [user, setUser] = useState(getUserFromLocalStorage());
// const { user, signed } = useContext(AuthContext)

console.log(user, signed)
function getUserFromLocalStorage() {
const user = localStorage.getItem('user');
if (user) {
return JSON.parse(user);
}
return null;
}

useEffect(() => {
const updatedUser = getUserFromLocalStorage();
if (updatedUser !== user) {
setUser(updatedUser);
}
}, []);

console.log(user)
return (
<div>
{ signed ? (
user?.typeUser === 'teacher' ? (
<HomeTeacher />
) : (
<HomeStudent />
)
): <RedirectLogin />
}
{user.professor ? (
<HomeTeacher />
): (
<HomeStudent />
)}
</div>
)
}
48 changes: 9 additions & 39 deletions vite-client/src/Pages/Login/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useContext, useState } from "react"
import { useContext, useEffect, useState } from "react"
import { useNavigate } from "react-router-dom"
import { LogoCorrigeAi } from "../../components/LogoCorrigeAi"
import { AuthContext } from "../../context/AuthContext"
Expand All @@ -7,48 +7,21 @@ import { Wrapper } from "../../styles/Layout"
import { Form, LoginForm, StyledButton, StyledLoginForm } from "./styles"

export function Login(){
const { setUser, setSigned } = useContext(AuthContext)
const { setUser, setSigned, user, signIn, signOut } = useContext(AuthContext)

const [email, setEmail] = useState('')
const [password, setPassword] = useState('')

const navigate = useNavigate()

async function signIn(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) {
async function handleLogin(e: React.MouseEvent<HTMLButtonElement, MouseEvent>){
e.preventDefault()

const response = await fetch(`http://localhost:3000/searchByEmail?email=${email}`);
const data = await response.json();

// Mensagem de alerta se nao tiver ninguém com esse email cadastrado
if(!data.professor && !data.student){
alert(data.message)
}

if (data.professor != null) {
setSigned(true)
setUser({
email: data.professor.email,
name: data.professor.name,
typeUser: 'teacher'
})
}

if (data.student != null){
if (await signIn(email)){
setSigned(true)
setUser({
email: data.student.email,
name: data.student.name,
typeUser: 'student'
})
navigate('/home')
}else {
navigate('/login')
}

navigate('/home')
}

function signOut() {
//lógica para deslogar o usuário
setUser(null);
setSigned(false);
}

return (
Expand Down Expand Up @@ -76,7 +49,7 @@ export function Login(){
onChange={ e => setPassword(e.target.value) }
/>
<StyledButton
onClick={ e => signIn(e) }
onClick={ e => handleLogin(e) }
>
Entrar
</StyledButton>
Expand All @@ -88,6 +61,3 @@ export function Login(){
)
}

function userEffect(arg0: () => void) {
throw new Error("Function not implemented.")
}
10 changes: 6 additions & 4 deletions vite-client/src/context/AuthContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,15 @@ export interface IStudent {

interface AuthContextData {
user: IUser | null
Teacher: ITeacher | null
setTeacher: React.Dispatch<React.SetStateAction<ITeacher | null>>
Student: IStudent | null
setStudent: React.Dispatch<React.SetStateAction<IStudent | null>>
// Teacher: ITeacher | null
// setTeacher: React.Dispatch<React.SetStateAction<ITeacher | null>>
// Student: IStudent | null
// setStudent: React.Dispatch<React.SetStateAction<IStudent | null>>
setUser: React.Dispatch<React.SetStateAction<IUser | null>>
signed: boolean
setSigned: React.Dispatch<React.SetStateAction<boolean>>
signIn(email: string) : Promise<boolean>
signOut(): void,
}

export const AuthContext = createContext<AuthContextData>({} as AuthContextData)
Expand Down
88 changes: 81 additions & 7 deletions vite-client/src/context/AuthProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useState } from 'react'
import { useEffect, useState } from 'react'
import { AuthContext } from './AuthContext'

import { IUser, ITeacher, IStudent } from './AuthContext'
Expand All @@ -10,19 +10,93 @@ interface Props {
export const AuthContextProvider : React.FC<Props> = ({children}) => {
const [signed, setSigned] = useState(false)
const [user, setUser] = useState<IUser | null>(null)
const [Teacher, setTeacher] = useState<ITeacher | null>(null)
const [Student, setStudent] = useState<ITeacher | null>(null)

useEffect(() => { //Recupera o user do local storage
const storedUser = localStorage.getItem('user');
if (storedUser) {
const userData = JSON.parse(storedUser)

async function setValueUser(){
if (userData.professor){
const user = await userData.professor
setUser({
email: user.email,
name: user.name,
typeUser: 'teacher'
});
}else {
const user = await userData.student
setUser({
email: user.email,
name: user.name,
typeUser: 'student'
});
}
}
setValueUser()
}
}, []);

// useEffect(() => { //Atualiza o local storage
// localStorage.setItem("user", JSON.stringify(user));
// console.log('alter')
// }, [user]);
// const [Teacher, setTeacher] = useState<ITeacher | null>(null)
// const [Student, setStudent] = useState<ITeacher | null>(null)

// const navigate = useNavigate()

async function signIn(email: string) {
const response = await fetch(`http://localhost:3000/searchByEmail?email=${email}`);
const data = await response.json();

// Mensagem de alerta se nao tiver ninguém com esse email cadastrado
if(!data.professor && !data.student){
alert(data.message)
return false
}

if (data.professor != null) {
localStorage.setItem("user", JSON.stringify(data));
// await setUser({
// email: data.professor.email,
// name: data.professor.name,
// typeUser: 'teacher'
// })
return true
}

if (data.student != null){
localStorage.setItem("user", JSON.stringify(data))
// await setUser({
// email: data.student.email,
// name: data.student.name,
// typeUser: 'student'
// })

return true
}
return false
}

function signOut() {
//lógica para deslogar o usuário
setUser(null);
setSigned(false);
}

return (
<AuthContext.Provider value={{
user,
setUser,
Teacher,
setTeacher,
Student,
setStudent,
// Teacher,
// setTeacher,
// Student,
// setStudent,
signed,
setSigned,
signIn,
signOut,
}}>
{children}
</AuthContext.Provider>
Expand Down

0 comments on commit e473ffd

Please sign in to comment.