diff --git a/app/users/bulkcreate/page.js b/app/users/bulkcreate/page.js new file mode 100755 index 0000000..b79613f --- /dev/null +++ b/app/users/bulkcreate/page.js @@ -0,0 +1,101 @@ +"use client"; +import React, { useEffect, useState } from "react"; +import AuthService from "@/services/AuthService"; +import { Button, TextField, IconButton } from "@mui/material"; +import { Add, Delete } from "@mui/icons-material"; + +import { useRouter } from "next/navigation"; +import Navbar from "../../../components/Navbar"; + +const BulkCreateUsers = () => { + const router = useRouter(); + const [users, setUsers] = useState([]); + + useEffect(() => { + const user = JSON.parse(localStorage.getItem("user")); + if (!user) { + router.push("/login"); + } + }); + + const handleAddUser = () => { + setUsers([ + ...users, + { + name: "", + email: "", + password: "", + password_second: "", + cellphone: "", + }, + ]); + }; + + const handleRemoveUser = (index) => { + const newUsers = [...users]; + newUsers.splice(index, 1); + setUsers(newUsers); + }; + + const handleChange = (index, field, value) => { + const newUsers = [...users]; + newUsers[index][field] = value; + setUsers(newUsers); + }; + + const handleSubmit = async () => { + const response = await AuthService.bulkCreateUsers(users); + console.log(response); + }; + + return ( + <> + +
+

Bulk create

+ {users.map((user, index) => ( +
+ handleChange(index, "name", e.target.value)} + /> + handleChange(index, "email", e.target.value)} + /> + handleChange(index, "password", e.target.value)} + /> + + handleChange(index, "password_second", e.target.value) + } + /> + handleChange(index, "cellphone", e.target.value)} + /> + handleRemoveUser(index)}> + + +
+ ))} + + +
+ + ); +}; + +export default BulkCreateUsers; diff --git a/app/users/findusers/page.js b/app/users/findusers/page.js new file mode 100755 index 0000000..23bed75 --- /dev/null +++ b/app/users/findusers/page.js @@ -0,0 +1,130 @@ +"use client"; +import React, { useState, useEffect } from "react"; +import { Container, TextField, Button, Checkbox } from "@mui/material"; +import AuthService from "../../../services/AuthService"; +import Navbar from "../../../components/Navbar"; + +import { useRouter } from "next/navigation"; + +export default function FindUsersPage() { + const router = useRouter(); + const [filters, setFilters] = useState({ + name: "", + login_before_date: "", + login_after_date: "", + active: false, + }); + const [users, setUsers] = useState([]); + + useEffect(() => { + const user = JSON.parse(localStorage.getItem("user")); + if (!user) { + router.push("/login"); + } + }) + + const handleInputChange = (event) => { + const { name, value } = event.target; + let finalValue = value; + + if (value === "true" || value === "false") { + finalValue = value === "true"; + } + + setFilters({ ...filters, [name]: finalValue }); + }; + + const handleSearch = async () => { + const users = await AuthService.findUsers(filters); + setUsers(users); + }; + + return ( + <> + +
+ + + + + + setFilters({ ...filters, active: e.target.checked }) + } + name="active" + /> + + + {users && users.length > 0 && ( + + + + + + + + + + {users.map((user) => ( + + + + + + ))} + +
+ Name + + Email + + Status +
+ {user.name} + + {user.email} + + {user.status ? "Active" : "Inactive"} +
+ )} +
+
+
+ + ); +} \ No newline at end of file diff --git a/components/Navbar.js b/components/Navbar.js index c281d22..c5e4b21 100644 --- a/components/Navbar.js +++ b/components/Navbar.js @@ -26,9 +26,16 @@ const Navbar = () => { {user?.name}
+ + +
) diff --git a/services/AuthService.js b/services/AuthService.js index 3b7920a..7a9aee1 100644 --- a/services/AuthService.js +++ b/services/AuthService.js @@ -18,6 +18,46 @@ const handleLogin = async (user, pass) => { } } +const findUsers = async ({ name, login_before_date, login_after_date, active }) => { + try { + const response = await axios.get('http://localhost:3001/api/v1/users/findUsers', { + params: { + nombre: name, + antesSesion: login_before_date, + despuesSesion: login_after_date, + eliminados: active, + } + }, + { + headers: { + token: localStorage.getItem('token') + } + } + ); + return response.data; + } catch (e) { + console.error(e); + return []; + } +}; + +const bulkCreateUsers = async (users) => { + try { + const response = await axios.post('http://localhost:3001/api/v1/users/bulkCreate', + users, + { + headers: { + token: localStorage.getItem('token') + } + } + ); + console.log(response) + return response.data + } catch (e) { + return null; + } +} + const getUsers = async () => { try { //const response = await axios.get('fakeapi'); @@ -116,6 +156,8 @@ const updateUser = async (id, user, token) => { export default { handleLogin, + findUsers, + bulkCreateUsers, getUsers, getUserById, logOut,