-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLogin.jsx
More file actions
123 lines (104 loc) · 3.72 KB
/
Login.jsx
File metadata and controls
123 lines (104 loc) · 3.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import React, { useState } from 'react';
// Adicionamos a prop "aoLogarSucesso"
function Login({ voltar, aoLogarSucesso }) {
const [isLogin, setIsLogin] = useState(true);
const [nome, setNome] = useState('');
const [email, setEmail] = useState('');
const [senha, setSenha] = useState('');
const [mensagem, setMensagem] = useState('');
const handleSubmit = async (evento) => {
evento.preventDefault();
const endpoint = isLogin ? 'http://localhost:3000/login' : 'http://localhost:3000/cadastro';
const bodyData = isLogin ? { email, senha } : { nome, email, senha };
try {
const resposta = await fetch(endpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(bodyData)
});
const dados = await resposta.json();
if (resposta.ok) {
setMensagem("🎉 " + dados.mensagem);
if (!isLogin) {
setNome('');
setIsLogin(true);
} else {
setSenha('');
// Espera 1 segundo para o utilizador ler a mensagem de sucesso
setTimeout(() => {
// Chama a função passando os dados que vieram do backend (nome, email, id)
aoLogarSucesso(dados.usuario);
}, 1000);
}
} else {
setMensagem("❌ " + dados.erro);
}
} catch (error) {
setMensagem("❌ Erro ao conectar com o servidor. O Back-end está a correr?");
}
};
const alternarModo = () => {
setIsLogin(!isLogin);
setMensagem('');
setNome('');
setSenha('');
};
return (
<div className="login-page">
<section className="login-section">
<div className="login-container container">
<button onClick={voltar} className="btn-back">
← Voltar
</button>
<h2>{isLogin ? 'Entrar no CraftCode' : 'Crie a sua conta'}</h2>
<p>{isLogin ? 'Acesse sua conta para continuar evoluindo.' : 'Junte-se ao CraftCode e comece a construir o seu futuro.'}</p>
<form className="login-form" onSubmit={handleSubmit}>
{!isLogin && (
<div className="form-group">
<input
type="text"
placeholder="Seu nome"
className="input-craftcode"
value={nome}
onChange={(e) => setNome(e.target.value)}
required={!isLogin}
/>
</div>
)}
<div className="form-group">
<input
type="email"
placeholder="Seu e-mail"
className="input-craftcode"
value={email}
onChange={(e) => setEmail(e.target.value)}
required
/>
</div>
<div className="form-group">
<input
type="password"
placeholder="Sua senha"
className="input-craftcode"
value={senha}
onChange={(e) => setSenha(e.target.value)}
required
/>
</div>
<button type="submit" className="btn-primary btn-submit">
{isLogin ? 'Entrar' : 'Registar'}
</button>
</form>
{mensagem && <p className="mensagem-aviso">{mensagem}</p>}
<p className="signup-text">
{isLogin ? 'Não tem conta? ' : 'Já tem uma conta? '}
<span onClick={alternarModo} className="link-acao">
{isLogin ? 'Cadastre-se' : 'Faça Login'}
</span>
</p>
</div>
</section>
</div>
);
}
export default Login;