diff --git a/src/components/utils/AuthProvider.js b/src/components/utils/AuthProvider.js
new file mode 100644
index 0000000..2cc2662
--- /dev/null
+++ b/src/components/utils/AuthProvider.js
@@ -0,0 +1,59 @@
+import React, { createContext, useContext, useState } from 'react';
+
+// 1. Criação do Contexto
+const AuthContext = createContext();
+
+// Função que será usada para envolver a aplicação
+export function AuthProvider({ children }) {
+ // 2. Estado para armazenar o token e o tipo de token
+ const [accessToken, setAccessToken] = useState(null);
+ const [tokenType, setTokenType] = useState(null);
+
+ // Função para salvar o token recebido após o login/refresh
+ const setAuthTokens = (tokenResponse) => {
+ // Certifique-se de que a resposta contém os tokens
+ if (tokenResponse && tokenResponse.access_token && tokenResponse.token_type) {
+ setAccessToken(tokenResponse.access_token);
+ setTokenType(tokenResponse.token_type);
+
+ // OPCIONAL: Salvar no localStorage para persistência entre recargas de página
+ localStorage.setItem('access_token', tokenResponse.access_token);
+ localStorage.setItem('token_type', tokenResponse.token_type);
+ }
+ };
+
+ // Função para remover o token no logout
+ const clearAuthTokens = () => {
+ setAccessToken(null);
+ setTokenType(null);
+ localStorage.removeItem('access_token');
+ localStorage.removeItem('token_type');
+ };
+
+ // 3. O valor que será fornecido a todos os componentes
+ const contextValue = {
+ // O valor do token para usar em requisições
+ accessToken,
+ tokenType,
+ // A função para salvar o token após o login/refresh
+ setAuthTokens,
+ // A função de logout
+ clearAuthTokens,
+ // Um helper para saber se está logado
+ isAuthenticated: !!accessToken,
+ // Helper para montar o cabeçalho 'Authorization'
+ getAuthorizationHeader: () =>
+ accessToken && tokenType ? `${tokenType} ${accessToken}` : ''
+ };
+
+ return (
+
+ {children}
+
+ );
+}
+
+// 4. Hook customizado para facilitar o uso nos componentes
+export function useAuth() {
+ return useContext(AuthContext);
+}
\ No newline at end of file
diff --git a/src/components/utils/apiKeys.js b/src/components/utils/apiKeys.js
new file mode 100644
index 0000000..aa34ffa
--- /dev/null
+++ b/src/components/utils/apiKeys.js
@@ -0,0 +1,3 @@
+const API_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ"
+
+export default API_KEY
\ No newline at end of file
diff --git a/src/pages/Details.jsx b/src/pages/Details.jsx
index 1f6b317..8ac7ea2 100644
--- a/src/pages/Details.jsx
+++ b/src/pages/Details.jsx
@@ -1,18 +1,24 @@
import React, { useEffect, useState } from "react";
import avatarPlaceholder from '../assets/images/avatar_placeholder.png';
+import { useParams } from "react-router-dom";
+
+const Details = () => {
+ const parametros = useParams();
-const Details = ({ patientID, setCurrentPage }) => {
const [paciente, setPaciente] = useState({});
const [anexos, setAnexos] = useState([]);
const [selectedFile, setSelectedFile] = useState(null);
+ const patientID = parametros.id
+
+
useEffect(() => {
if (!patientID) return;
-
+ console.log(patientID, 'teu id')
fetch(`https://mock.apidog.com/m1/1053378-0-default/pacientes/${patientID}`)
.then(res => res.json())
- .then(result => {setPaciente(result.data)})
+ .then(result => {console.log(result.data)})
.catch(err => console.error("Erro ao buscar paciente:", err));
fetch(`https://mock.apidog.com/m1/1053378-0-default/pacientes/${patientID}/anexos`)
diff --git a/src/pages/DoctorTable.jsx b/src/pages/DoctorTable.jsx
index 549c37e..1dc6467 100644
--- a/src/pages/DoctorTable.jsx
+++ b/src/pages/DoctorTable.jsx
@@ -1,5 +1,5 @@
import React, { useState, useEffect } from "react";
-
+import API_KEY from "../components/utils/apiKeys";
function TableDoctor({ setCurrentPage, setPatientID }) {
const [medicos, setMedicos] = useState([]);
const [search, setSearch] = useState("");
@@ -40,12 +40,20 @@ function TableDoctor({ setCurrentPage, setPatientID }) {
// Buscar médicos da API
useEffect(() => {
- fetch("https://mock.apidog.com/m1/1053378-0-default/pacientes")
- .then((response) => response.json())
- .then((result) => console.log('nada'))
- .catch((error) =>
- console.log("Erro para encontrar médicos no banco de dados", error)
- );
+ var myHeaders = new Headers();
+ myHeaders.append("apikey", API_KEY);
+
+
+ var requestOptions = {
+ method: 'GET',
+ headers: myHeaders,
+ redirect: 'follow'
+ };
+
+ fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctors", requestOptions)
+ .then(response => response.json())
+ .then(result => setMedicos(result))
+ .catch(error => console.log('error', error));
}, []);
// Filtrar médicos pelo campo de pesquisa e aniversariantes
diff --git a/src/pages/Inicio.jsx b/src/pages/Inicio.jsx
index dc47fae..5a1456f 100644
--- a/src/pages/Inicio.jsx
+++ b/src/pages/Inicio.jsx
@@ -1,13 +1,47 @@
import React, { useState, useEffect } from 'react';
import { FaUser, FaUserPlus, FaCalendarAlt, FaCalendarCheck } from 'react-icons/fa';
import './style/Inicio.css';
+import { useAuth } from '../components/utils/AuthProvider';
function Inicio({ setCurrentPage }) {
+ const {setAuthTokens} = useAuth()
const [pacientes, setPacientes] = useState([]);
const [agendamentos, setAgendamentos] = useState([]);
useEffect(() => {
- const fetchPacientes = async () => {
+
+
+
+
+ var myHeaders = new Headers();
+ myHeaders.append("apikey", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ");
+ myHeaders.append("Content-Type", "application/json");
+
+ var raw = JSON.stringify({
+ "email": "riseup@popcode.com.br",
+ "password": "riseup"
+
+ });
+
+ var requestOptions = {
+ method: 'POST',
+ headers: myHeaders,
+ body: raw,
+
+ redirect: 'follow'
+ };
+
+ fetch("https://yuanqfswhberkoevtmfr.supabase.co/auth/v1/token?grant_type=password", requestOptions)
+ .then(response => response.json())
+ .then(result => console.log(result.access_token))
+ .catch(error => console.log('error', error));
+
+
+
+
+
+
+ /*const fetchPacientes = async () => {
try {
const res = await fetch("https://mock.apidog.com/m1/1053378-0-default/pacientes");
const data = await res.json();
@@ -30,7 +64,7 @@ function Inicio({ setCurrentPage }) {
};
fetchPacientes();
- fetchAgendamentos();
+ fetchAgendamentos();*/
}, []);
const totalPacientes = pacientes.length;
diff --git a/src/pages/PatientCadastroManager.jsx b/src/pages/PatientCadastroManager.jsx
index 9c5fafb..aa521e6 100644
--- a/src/pages/PatientCadastroManager.jsx
+++ b/src/pages/PatientCadastroManager.jsx
@@ -1,38 +1,39 @@
import {useState} from 'react';
import PatientForm from '../components/patients/PatientForm';
-
+import API_KEY from '../components/utils/apiKeys';
function PatientCadastroManager( {setCurrentPage} ) {
const [formData, setFormData] = useState({})
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
+ myHeaders.append("apikey", API_KEY)
+ myHeaders.append("Authorization", `Bearer eyJhbGciOiJIUzI1NiIsImtpZCI6ImJGVUlxQzNzazNjUms5RlMiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3l1YW5xZnN3aGJlcmtvZXZ0bWZyLnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJjN2ZjZDcwMi05YTZlLTRiN2MtYWJkMy05NTZiMjVhZjQwN2QiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzU4OTczMTkxLCJpYXQiOjE3NTg5Njk1OTEsImVtYWlsIjoicmlzZXVwQHBvcGNvZGUuY29tLmJyIiwicGhvbmUiOiIiLCJhcHBfbWV0YWRhdGEiOnsicHJvdmlkZXIiOiJlbWFpbCIsInByb3ZpZGVycyI6WyJlbWFpbCJdfSwidXNlcl9tZXRhZGF0YSI6eyJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZnVsbF9uYW1lIjoiUmlzZVVwIFBvcGNvZGUifSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJwYXNzd29yZCIsInRpbWVzdGFtcCI6MTc1ODk2OTU5MX1dLCJzZXNzaW9uX2lkIjoiNzc1ZTA4NGYtM2RhNi00NjE5LWE5MmUtMDUwY2ZmMWU4NTg4IiwiaXNfYW5vbnltb3VzIjpmYWxzZX0.80loeCsbb7zsS5FYYh-KwhYi3frbBeZogXHF0rHZfLE`)
// Função que será chamada para "salvar" o paciente
const handleSavePatient = async (patientData) => {
- console.log('Salvando paciente:', patientData);
+ console.log('Salvando paciente:', patientData);
- var raw = JSON.stringify(patientData);
+ var raw = JSON.stringify(patientData);
+ console.log(patientData, 'aqui')
- var requestOptions = {
- method: 'POST',
- headers: {
- "Content-Type": "application/json"
- },
- body: raw,
- redirect: 'follow'
- };
+ var requestOptions = {
+ method: 'POST',
+ headers: myHeaders,
+ body: raw,
+ redirect: 'follow'
+ };
- try {
- const response = await fetch("https://mock.apidog.com/m1/1053378-0-dault/pacientes", requestOptions);
- const result = await response.json();
- console.log("Paciente salvo no backend:", result);
-
- return result;
- } catch (error) {
- console.error("Erro ao salvar paciente:", error);
- throw error;
- }
+ try {
+ const response = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/patients", requestOptions);
+ const result = await response.json();
+ console.log("Paciente salvo no backend:", result);
+
+ return result;
+ } catch (error) {
+ console.error("Erro ao salvar paciente:", error);
+ throw error;
+ }
};
diff --git a/src/pages/TablePaciente.jsx b/src/pages/TablePaciente.jsx
index ace6686..b0f5565 100644
--- a/src/pages/TablePaciente.jsx
+++ b/src/pages/TablePaciente.jsx
@@ -1,7 +1,14 @@
import React, { useState, useEffect } from "react";
import { Link } from "react-router-dom";
+import API_KEY from "../components/utils/apiKeys";
+import { useAuth } from "../components/utils/AuthProvider";
+
+
function TablePaciente({ setCurrentPage, setPatientID }) {
+
+ const {getAuthorizationHeader, isAuthenticated} = useAuth();
+
const [pacientes, setPacientes] = useState([]);
const [search, setSearch] = useState("");
const [filtroConvenio, setFiltroConvenio] = useState("Todos");
@@ -12,6 +19,8 @@ function TablePaciente({ setCurrentPage, setPatientID }) {
const [showDeleteModal, setShowDeleteModal] = useState(false);
const [selectedPatientId, setSelectedPatientId] = useState(null);
+ console.log(getAuthorizationHeader(), 'aqui' )
+
const GetAnexos = async (id) => {
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer
");
@@ -64,16 +73,21 @@ function TablePaciente({ setCurrentPage, setPatientID }) {
// função de exclusão atualizada
const deletePatient = async (id) => {
- await DeleteAnexo(id);
-
- const requestOptionsDelete = { method: "DELETE", redirect: "follow" };
+ console.log(id)
+ var myHeaders = new Headers();
+ myHeaders.append('apikey', API_KEY);
+ myHeaders.append("Authorization", `Bearer eyJhbGciOiJIUzI1NiIsImtpZCI6ImJGVUlxQzNzazNjUms5RlMiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3l1YW5xZnN3aGJlcmtvZXZ0bWZyLnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJjN2ZjZDcwMi05YTZlLTRiN2MtYWJkMy05NTZiMjVhZjQwN2QiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzU4OTc3NTg5LCJpYXQiOjE3NTg5NzM5ODksImVtYWlsIjoicmlzZXVwQHBvcGNvZGUuY29tLmJyIiwicGhvbmUiOiIiLCJhcHBfbWV0YWRhdGEiOnsicHJvdmlkZXIiOiJlbWFpbCIsInByb3ZpZGVycyI6WyJlbWFpbCJdfSwidXNlcl9tZXRhZGF0YSI6eyJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZnVsbF9uYW1lIjoiUmlzZVVwIFBvcGNvZGUifSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJwYXNzd29yZCIsInRpbWVzdGFtcCI6MTc1ODk3Mzk4OX1dLCJzZXNzaW9uX2lkIjoiNGI2NzY4YTEtMmE5Yi00NjhkLWJlYjItZjhhMDQ0NjU5MGFjIiwiaXNfYW5vbnltb3VzIjpmYWxzZX0.9lV7msK_taipCOrSxeRud2a8aEo8N6wR9Wc5xFjci2A`)
+ myHeaders.append("Prefer", "return=minimal")
+
+ var requestOptions = { method: "DELETE", redirect: "follow", headers:myHeaders };
try {
- await fetch(
- `https://mock.apidog.com/m1/1053378-0-default/pacientes/${id}`,
- requestOptionsDelete
+ const result = await fetch(
+ `https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/patients/?id=eq.${id}`,
+ requestOptions
);
- setPacientes((prev) => prev.filter((p) => p.id !== id));
+ //setPacientes((prev) => prev.filter((p) => p.id !== id));
+ console.log(result)
} catch (error) {
console.log("Deu problema", error);
} finally {
@@ -83,13 +97,20 @@ function TablePaciente({ setCurrentPage, setPatientID }) {
// 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)
- );
- }, []);
+ var myHeaders = new Headers();
+ myHeaders.append("apikey", API_KEY);
+ myHeaders.append("Authorization", `Bearer eyJhbGciOiJIUzI1NiIsImtpZCI6ImJGVUlxQzNzazNjUms5RlMiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3l1YW5xZnN3aGJlcmtvZXZ0bWZyLnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJjN2ZjZDcwMi05YTZlLTRiN2MtYWJkMy05NTZiMjVhZjQwN2QiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzU4OTc3NTg5LCJpYXQiOjE3NTg5NzM5ODksImVtYWlsIjoicmlzZXVwQHBvcGNvZGUuY29tLmJyIiwicGhvbmUiOiIiLCJhcHBfbWV0YWRhdGEiOnsicHJvdmlkZXIiOiJlbWFpbCIsInByb3ZpZGVycyI6WyJlbWFpbCJdfSwidXNlcl9tZXRhZGF0YSI6eyJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZnVsbF9uYW1lIjoiUmlzZVVwIFBvcGNvZGUifSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJwYXNzd29yZCIsInRpbWVzdGFtcCI6MTc1ODk3Mzk4OX1dLCJzZXNzaW9uX2lkIjoiNGI2NzY4YTEtMmE5Yi00NjhkLWJlYjItZjhhMDQ0NjU5MGFjIiwiaXNfYW5vbnltb3VzIjpmYWxzZX0.9lV7msK_taipCOrSxeRud2a8aEo8N6wR9Wc5xFjci2A`);
+ var requestOptions = {
+ method: 'GET',
+ headers: myHeaders,
+ redirect: 'follow'
+ };
+
+ fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/patients", requestOptions)
+ .then(response => response.json())
+ .then(result => setPacientes(result))
+ .catch(error => console.log('error', error));
+ }, [isAuthenticated, getAuthorizationHeader]);
// Função para verificar se hoje é aniversário do paciente
const ehAniversariante = (dataNascimento) => {
@@ -221,7 +242,7 @@ function TablePaciente({ setCurrentPage, setPatientID }) {
{pacientesFiltrados.length > 0 ? (
pacientesFiltrados.map((paciente) => (
- | {paciente.nome} |
+ {paciente.full_name} |
{paciente.cpf} |
{paciente.email} |
{paciente.telefone} |
@@ -238,19 +259,21 @@ function TablePaciente({ setCurrentPage, setPatientID }) {
-
+
+
+
|