diff --git a/src/components/Sidebar.jsx b/src/components/Sidebar.jsx new file mode 100644 index 00000000..0820c1c9 --- /dev/null +++ b/src/components/Sidebar.jsx @@ -0,0 +1,123 @@ +import React, { useState } from "react"; +import { Link } from "react-router-dom"; +import menuItems from "../data/sidebar-items.json"; + +function Sidebar() { + const [isActive, setIsActive] = useState(true); + const [openSubmenu, setOpenSubmenu] = useState(null); + + const toggleSidebar = () => { + setIsActive(!isActive); + }; + + const handleSubmenuClick = (submenuName) => { + setOpenSubmenu(openSubmenu === submenuName ? null : submenuName); + }; + + const renderLink = (item) => { + // Links internos (rotas do React Router) + if (item.url && item.url.startsWith("/")) { + return ( + + {item.icon && } + {item.name} + + ); + } + + // Links externos + return ( + + {item.icon && } + {item.name} + + ); + }; + + return ( + + ); +} + +export default Sidebar; diff --git a/src/pages/TablePaciente.jsx b/src/pages/TablePaciente.jsx new file mode 100644 index 00000000..ace66860 --- /dev/null +++ b/src/pages/TablePaciente.jsx @@ -0,0 +1,363 @@ +import React, { useState, useEffect } from "react"; +import { Link } from "react-router-dom"; + +function TablePaciente({ setCurrentPage, setPatientID }) { + const [pacientes, setPacientes] = useState([]); + const [search, setSearch] = useState(""); + const [filtroConvenio, setFiltroConvenio] = useState("Todos"); + const [filtroVIP, setFiltroVIP] = useState(false); + const [filtroAniversariante, setFiltroAniversariante] = useState(false); + + // estados do modal + const [showDeleteModal, setShowDeleteModal] = useState(false); + const [selectedPatientId, setSelectedPatientId] = useState(null); + + const GetAnexos = async (id) => { + var myHeaders = new Headers(); + myHeaders.append("Authorization", "Bearer "); + + var requestOptions = { + method: "GET", + headers: myHeaders, + redirect: "follow", + }; + try { + const response = await fetch( + `https://mock.apidog.com/m1/1053378-0-default/pacientes/${id}/anexos`, + requestOptions + ); + const result = await response.json(); + + return result.data; + } catch (error) { + console.log("error", error); + return []; + } + }; + + const DeleteAnexo = async (patientID) => { + const RespostaGetAnexos = await GetAnexos(patientID); + + for (let i = 0; i < RespostaGetAnexos.length; i++) { + const idAnexo = RespostaGetAnexos[i].id; + + console.log("anexos", RespostaGetAnexos); + + var myHeaders = new Headers(); + myHeaders.append("Authorization", "Bearer "); + + var requestOptions = { + method: "DELETE", + headers: myHeaders, + redirect: "follow", + }; + + fetch( + `https://mock.apidog.com/m1/1053378-0-default/pacientes/${patientID}/anexos/${idAnexo}`, + requestOptions + ) + .then((response) => response.text()) + .then((result) => console.log("anexo excluido com sucesso", result)) + .catch((error) => console.log("error", error)); + } + }; + + // função de exclusão atualizada + const deletePatient = async (id) => { + await DeleteAnexo(id); + + const requestOptionsDelete = { method: "DELETE", redirect: "follow" }; + + try { + await fetch( + `https://mock.apidog.com/m1/1053378-0-default/pacientes/${id}`, + requestOptionsDelete + ); + setPacientes((prev) => prev.filter((p) => p.id !== id)); + } catch (error) { + console.log("Deu problema", error); + } finally { + setShowDeleteModal(false); + } + }; + + // Requisição inicial para buscar pacientes + useEffect(() => { + fetch("https://mock.apidog.com/m1/1053378-0-default/pacientes") + .then((response) => response.json()) + .then((result) => console.log(result["data"])) + .catch((error) => + console.log("Erro para encontrar pacientes no banco de dados", error) + ); + }, []); + + // Função para verificar se hoje é aniversário do paciente + const ehAniversariante = (dataNascimento) => { + if (!dataNascimento) return false; + const hoje = new Date(); + const nascimento = new Date(dataNascimento); + + return ( + hoje.getDate() === nascimento.getDate() && + hoje.getMonth() === nascimento.getMonth() + ); + }; + + const pacientesFiltrados = pacientes.filter((paciente) => { + const texto = `${paciente.nome}`.toLowerCase(); + + const passaBusca = texto.includes(search.toLowerCase()); + const passaVIP = filtroVIP ? paciente.vip === true : true; + const passaConvenio = + filtroConvenio === "Todos" || paciente.convenio === filtroConvenio; + const passaAniversario = filtroAniversariante + ? ehAniversariante(paciente.data_nascimento) + : true; + + return passaBusca && passaVIP && passaConvenio && passaAniversario; + }); + + return ( + <> +
+

Lista de Pacientes

+
+
+
+
+
+
+

Pacientes Cadastrados

+ + + +
+ +
+
+
+ {" "} + Filtros +
+ +
+ setSearch(e.target.value)} + style={{ + minWidth: 250, + maxWidth: 300, + width: 260, + flex: "0 0 auto", + }} + /> + + + + + + +
+
+ +
+ + + + + + + + + + + + + {pacientesFiltrados.length > 0 ? ( + pacientesFiltrados.map((paciente) => ( + + + + + + + + + )) + ) : ( + + + + )} + +
NomeCPFEmailTelefoneAções
{paciente.nome}{paciente.cpf}{paciente.email}{paciente.telefone} + + {paciente.ativo} + + +
+ + + + + {/* Botão que abre o modal */} + +
+
+ Nenhum paciente encontrado. +
+
+
+
+
+
+
+ + {/* Modal de confirmação */} + {showDeleteModal && ( +
+ e.target.classList.contains("modal") && setShowDeleteModal(false) + } + > +
+
+ +
+
+ Confirmação de Exclusão +
+ +
+ +
+

+ Tem certeza que deseja excluir este paciente? +

+
+ +
+ + + + + +
+
+
+
+ )} + + ); +} + +export default TablePaciente;