Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tarea Final FrontEnd #36

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions app/login/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,28 @@ import Button from "@mui/material/Button";
import SimpleSnackbar from '../../components/SimpleSnackbar';
import { useRouter } from 'next/navigation';


import AuthService from '../../services/AuthService';

import './page.css';

export default function Login(){
const router = useRouter();

const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const [state, setState] = useState(true);
const [message, setMessage] = useState('');

const handleLogin = async () => {
const login = await AuthService.handleLogin(email, password);
setState(login);
if(login){
router.push('/users');
const user = AuthService.handleLogin(email, password);
if (user) {
setMessage('Inicio de sesión exitoso!');
localStorage.setItem('loggedInUser', JSON.stringify(user));
router.push('/users'); // Redirige al usuario a la página /users
} else {
setMessage('Usuario o contraseña incorrectos');
}
}
};

const handleRegister = () => {
router.push('/register');
Expand Down
201 changes: 106 additions & 95 deletions app/register/page.js
Original file line number Diff line number Diff line change
@@ -1,104 +1,115 @@
"use client"
import React from "react";
import {Card, CardContent, Container} from "@mui/material";
import TextField from "@mui/material/TextField";
import Button from "@mui/material/Button";
import SimpleSnackbar from "@/components/SimpleSnackbar";
import AuthService from "@/services/AuthService";

import './page.css';
'use client'
import React, { useState } from 'react';
import { Card, CardContent, Container, TextField, Button, Stack } from '@mui/material';
import SimpleSnackbar from '@/components/SimpleSnackbar';
import AuthService from '../../services/AuthService';
import Navbar from '@/components/Navbar';

const Register = () => {
// Register from user -> name, email, password, cellphone
const [name, setName] = React.useState("");
const [email, setEmail] = React.useState("");
const [password, setPassword] = React.useState("");
const [password_second, setPasswordSecond] = React.useState("");
const [cellphone, setCellphone] = React.useState("");
const [users, setUsers] = useState([{ name: '', email: '', password: '', password_second: '', cellphone: '' }]);
const [message, setMessage] = useState('');
const [openSnack, setOpenSnack] = useState(false);

const handleAddUser = () => {
setUsers([...users, { name: '', email: '', password: '', password_second: '', cellphone: '' }]);
};

const handleRemoveUser = (index) => {
const updatedUsers = [...users];
updatedUsers.splice(index, 1);
setUsers(updatedUsers);
};

const [message, setMessage] = React.useState("");
const [openSnack, setOpenSnack] = React.useState(false);
const handleRegister = async () => {
if(password !== password_second){
setMessage("Las contraseñas no coinciden");
setOpenSnack(true);
return;
}
const response = await AuthService.registerUser(name, email, password, password_second, cellphone);
if(!response){
setMessage("Error al registrar usuario");
setOpenSnack(true);
const responses = await Promise.all(users.map(user =>
AuthService.registerUser(user.name, user.email, user.password, user.password_second, user.cellphone)
));

const success = responses.every(response => response);
if (success) {
setMessage('Usuarios registrados exitosamente!');
localStorage.setItem('registeredUsers', JSON.stringify(users));
} else {
setMessage("Usuario Registrado Exitosamente!");
setOpenSnack(true);
setMessage('Error al registrar usuarios');
}
}
setOpenSnack(true);
};

return (
<Container>
<SimpleSnackbar message={message} openSnack={openSnack} closeSnack={() => {setOpenSnack(!openSnack)}}/>
<Card className="form">
<CardContent>
<h1>Register User</h1>
<div className="input-form">
<TextField
id="outlined-basic"
label="Nombre"
variant="outlined"
required
placeholder="Oleh Oleig"
onChange={(e) => setName(e.target.value)}
/>
</div>
<div className="input-form">
<TextField
id="outlined-basic"
label="Email"
variant="outlined"
required
placeholder="[email protected]"
onChange={(e) => setEmail(e.target.value)}
/>
</div>
<div className="input-form">
<TextField
id="outlined-basic"
label="Contraseña"
variant="outlined"
required
type="password"
placeholder="****"
onChange={(e) => setPassword(e.target.value)}
/>
</div>
<div className="input-form">
<TextField
id="outlined-basic"
label="Confirmar Contraseña"
variant="outlined"
type="password"
required
placeholder="****"
onChange={(e) => setPasswordSecond(e.target.value)}
/>
</div>
<div className="input-form">
<TextField
id="outlined-basic"
label="Teléfono"
variant="outlined"
required
placeholder="+56987654321"
onChange={(e) => setCellphone(e.target.value)}
/>
</div>
<div className="input-form">
<Button variant="contained" onClick={handleRegister}>Registrar</Button>
</div>
</CardContent>
</Card>
</Container>
)
}
<div>
<Navbar />
<Stack>
<SimpleSnackbar message={message} openSnack={openSnack} closeSnack={() => setOpenSnack(!openSnack)} />
{users.map((user, index) => (
<Card key={index} className="form">
<CardContent>
<TextField
label="Nombre"
variant="outlined"
required
value={user.name}
onChange={(e) => {
const updatedUsers = [...users];
updatedUsers[index].name = e.target.value;
setUsers(updatedUsers);
}}
/>
<TextField
label="Email"
variant="outlined"
required
value={user.email}
onChange={(e) => {
const updatedUsers = [...users];
updatedUsers[index].email = e.target.value;
setUsers(updatedUsers);
}}
/>
<TextField
label="Password"
variant="outlined"
required
value={user.password}
onChange={(e) => {
const updatedUsers = [...users];
updatedUsers[index].password = e.target.value;
setUsers(updatedUsers);
}}
/>
<TextField
label="Confirm Password"
variant="outlined"
required
value={user.password_second}
onChange={(e) => {
const updatedUsers = [...users];
updatedUsers[index].password_second = e.target.value;
setUsers(updatedUsers);
}}
/>
<TextField
label="Cellphone"
variant="outlined"
required
value={user.cellphone}
onChange={(e) => {
const updatedUsers = [...users];
updatedUsers[index].cellphone = e.target.value;
setUsers(updatedUsers);
}}
/>
{/* Otros campos como contraseña, confirmar contraseña, teléfono */}
<Button variant="contained" color="secondary" onClick={() => handleRemoveUser(index)}>Eliminar Formulario</Button>
</CardContent>
</Card>
))}

</Stack>
<Button variant="contained" onClick={handleAddUser}>Agregar Formulario</Button>
<Button variant="contained" onClick={handleRegister}>Registrar Usuarios</Button>
</div>

);
};

export default Register;
export default Register;
59 changes: 59 additions & 0 deletions app/users/UserList.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
.form {
padding: 20px;
margin-top: 20px;
background-color: #f5f5f5;
border-radius: 8px;
text-align: center; /* Centrar texto */
}

.filters {
display: flex;
gap: 10px;
margin-bottom: 20px;
}

.filters > * {
flex: 1;
}

.table {
width: 100%;
border-collapse: collapse;
}

.table th, .table td {
padding: 10px;
border: 1px solid #ddd;
text-align: left;
}

.table th {
background-color: #1976d2;
color: white;
}

.table tr:nth-child(even) {
background-color: #f2f2f2;
}

.table tr:hover {
background-color: #ddd;
}

.button {
background-color: #4caf50; /* Cambiar color a verde */
color: white;
margin-top: 10px; /* Añadir espacio arriba del botón */
}

.button:hover {
background-color: #45a049; /* Color verde más oscuro al pasar el mouse */
}

.editButton {
color: #1976d2;
}

.editButton:hover {
color: #1565c0;
}
Loading