diff --git a/app/secretary/pacientes/page.tsx b/app/secretary/pacientes/page.tsx index c72bb85..29f4fef 100644 --- a/app/secretary/pacientes/page.tsx +++ b/app/secretary/pacientes/page.tsx @@ -8,6 +8,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@ import { Plus, Edit, Trash2, Eye, Calendar, Filter } from "lucide-react"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog"; import SecretaryLayout from "@/components/secretary-layout"; +import { patientsService } from "@/services/patientsApi.mjs" export default function PacientesPage() { const [searchTerm, setSearchTerm] = useState(""); @@ -28,40 +29,43 @@ export default function PacientesPage() { setDetailsDialogOpen(true); setPatientDetails(null); try { - const res = await fetch(`https://mock.apidog.com/m1/1053378-0-default/pacientes/${patientId}`); - if (!res.ok) throw new Error(`HTTP ${res.status}`); - const json = await res.json(); - setPatientDetails(json?.data ?? null); + const res = await patientsService.getById(patientId); + console.log(res) + setPatientDetails(res[0]); } catch (e: any) { setPatientDetails({ error: e?.message || "Erro ao buscar detalhes" }); } }; - + const fetchPacientes = useCallback( async (pageToFetch: number) => { if (isFetching || !hasNext) return; setIsFetching(true); setError(null); try { - const res = await fetch(`https://mock.apidog.com/m1/1053378-0-default/pacientes?page=${pageToFetch}&limit=20`); - if (!res.ok) throw new Error(`HTTP ${res.status}`); - const json = await res.json(); - const items = Array.isArray(json?.data) ? json.data : []; - const mapped = items.map((p: any) => ({ - id: String(p.id ?? ""), - nome: p.nome ?? "", - telefone: p?.contato?.celular ?? p?.contato?.telefone1 ?? p?.telefone ?? "", - cidade: p?.endereco?.cidade ?? p?.cidade ?? "", - estado: p?.endereco?.estado ?? p?.estado ?? "", - ultimoAtendimento: p.ultimo_atendimento ?? p.ultimoAtendimento ?? undefined, - proximoAtendimento: p.proximo_atendimento ?? p.proximoAtendimento ?? undefined, - convenio: p.convenio ?? "", - vip: Boolean(p.vip ?? false), - status: p.status ?? undefined, - })); - setPatients((prev) => [...prev, ...mapped]); - setHasNext(Boolean(json?.pagination?.has_next)); - setPage(pageToFetch + 1); + const res = await patientsService.list(); + console.log(res) + const mapped = res.map((p: any) => ({ + id: String(p.id ?? ""), + nome: p.full_name ?? "", + telefone: p.phone_mobile ?? p.phone1 ?? "", + cidade: p.city ?? "", + estado: p.state ?? "", + ultimoAtendimento: p.last_visit_at ?? "", + proximoAtendimento: p.next_appointment_at ?? "", + vip: Boolean(p.vip ?? false), + convenio: p.convenio ?? "", // se não existir, fica vazio + status: p.status ?? undefined, + })); + + setPatients((prev) => { + const all = [...prev, ...mapped]; + const unique = Array.from(new Map(all.map(p => [p.id, p])).values()); + return unique; + }); + + if (mapped.length === 0) setHasNext(false); // parar carregamento + else setPage(prev => prev + 1); } catch (e: any) { setError(e?.message || "Erro ao buscar pacientes"); } finally { @@ -311,33 +315,23 @@ export default function PacientesPage() {
{patientDetails.error}
) : (
-
- Nome: {patientDetails.nome} -
-
- Telefone: {patientDetails?.contato?.celular ?? patientDetails?.contato?.telefone1 ?? patientDetails?.telefone ?? ""} -
-
- Cidade: {patientDetails?.endereco?.cidade ?? patientDetails?.cidade ?? ""} -
-
- Estado: {patientDetails?.endereco?.estado ?? patientDetails?.estado ?? ""} -
-
- Convênio: {patientDetails.convenio ?? ""} -
-
- VIP: {patientDetails.vip ? "Sim" : "Não"} -
-
- Status: {patientDetails.status ?? ""} -
-
- Último atendimento: {patientDetails.ultimo_atendimento ?? patientDetails.ultimoAtendimento ?? ""} -
-
- Próximo atendimento: {patientDetails.proximo_atendimento ?? patientDetails.proximoAtendimento ?? ""} -
+

Nome: {patientDetails.full_name}

+

CPF: {patientDetails.cpf}

+

Email: {patientDetails.email}

+

Telefone: {patientDetails.phone_mobile ?? patientDetails.phone1 ?? patientDetails.phone2 ?? "-"}

+

Nome social: {patientDetails.social_name ?? "-"}

+

Sexo: {patientDetails.sex ?? "-"}

+

Tipo sanguíneo: {patientDetails.blood_type ?? "-"}

+

Peso: {patientDetails.weight_kg ?? "-"}{patientDetails.weight_kg ? "kg": ""}

+

Altura: {patientDetails.height_m ?? "-"}{patientDetails.height_m ? "m": ""}

+

IMC: {patientDetails.bmi ?? "-"}

+

Endereço: {patientDetails.street ?? "-"}

+

Bairro: {patientDetails.neighborhood ?? "-"}

+

Cidade: {patientDetails.city ?? "-"}

+

Estado: {patientDetails.state ?? "-"}

+

CEP: {patientDetails.cep ?? "-"}

+

Criado em: {patientDetails.created_at ?? "-"}

+

Atualizado em: {patientDetails.updated_at ?? "-"}

)} diff --git a/components/secretary-layout.tsx b/components/secretary-layout.tsx index c7805dc..78d817c 100644 --- a/components/secretary-layout.tsx +++ b/components/secretary-layout.tsx @@ -66,13 +66,13 @@ export default function SecretaryLayout({ children }: PatientLayoutProps) { const menuItems = [ { - href: "#", + href: "##", icon: Home, label: "Dashboard", // Botão para o dashboard da secretária }, { - href: "#", + href: "###", icon: Calendar, label: "Consultas", // Botão para página de consultas marcadas diff --git a/services/api.mjs b/services/api.mjs index 493d8c8..319a96d 100644 --- a/services/api.mjs +++ b/services/api.mjs @@ -11,13 +11,11 @@ async function login() { "Content-Type": "application/json", "apikey": API_KEY, // valor fixo }, - body: JSON.stringify({ email: "hugo@popcode.com.br", password: "hdoria" }), + body: JSON.stringify({ email: "riseup@popcode.com.br", password: "riseup" }), }); const data = await response.json(); - - console.log("Resposta da API:", data); - console.log("Token:", data.access_token); + console.log(data.access_token) // salvar o token do usuário //localStorage.setItem("token", data.access_token); tempToken = data.access_token @@ -30,10 +28,12 @@ async function request(endpoint, options = {}) { //const token = localStorage.getItem("token"); // token do usuário, salvo no login const token = tempToken; + console.log(`endpoint: ${endpoint}`) + const headers = { "Content-Type": "application/json", "apikey": API_KEY, // obrigatório sempre - ...(token ? { Authorization: `Bearer ${token}` } : {}), // obrigatório em todas EXCETO login + ...(token ? { "Authorization": `Bearer ${token}` } : {}), // obrigatório em todas EXCETO login ...options.headers, }; diff --git a/services/patientsApi.mjs b/services/patientsApi.mjs index 5f0571b..c50e3f9 100644 --- a/services/patientsApi.mjs +++ b/services/patientsApi.mjs @@ -2,7 +2,7 @@ import { api } from "./api.mjs"; export const patientsService = { list: () => api.get("/rest/v1/patients"), - getById: (id) => api.get(`/rest/v1/patients/${id}`), + getById: (id) => api.get(`/rest/v1/patients?id=eq.${id}`), create: (data) => api.post("/rest/v1/patients", data), update: (id, data) => api.patch(`/rest/v1/patients/${id}`, data), delete: (id) => api.delete(`/rest/v1/patients/${id}`),