diff --git a/src/components/doctors/DoctorForm.jsx b/src/components/doctors/DoctorForm.jsx index f677327..e7e7bea 100644 --- a/src/components/doctors/DoctorForm.jsx +++ b/src/components/doctors/DoctorForm.jsx @@ -1,8 +1,11 @@ -import React, { useState, useRef } from "react"; +import React, { useState, useRef, useCallback } from "react"; import { Link, useNavigate, useLocation } from "react-router-dom"; import "./DoctorForm.css"; import HorariosDisponibilidade from "../doctors/HorariosDisponibilidade"; +const ENDPOINT_AVAILABILITY = + "https://mock.apidog.com/m1/1053378-0-default/rest/v1/doctor_availability"; + function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) { const navigate = useNavigate(); const location = useLocation(); @@ -123,9 +126,12 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) { } }; - const handleAvailabilityUpdate = (newAvailability) => { - setFormData((prev) => ({ ...prev, availability: newAvailability })); - }; + const handleAvailabilityUpdate = useCallback( + (newAvailability) => { + setFormData((prev) => ({ ...prev, availability: newAvailability })); + }, + [setFormData] + ); const handleCepBlur = async () => { const cep = formData.cep?.replace(/\D/g, ""); @@ -205,6 +211,42 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) { } }, 300); }; + const handleCreateAvailability = async (newAvailability) => { + try { + const response = await fetch(ENDPOINT_AVAILABILITY, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(newAvailability), + }); + const data = await response.json(); + console.log("Disponibilidade criada :", data); + alert("Disponibilidade criada com sucesso!"); + } catch (error) { + console.error("Erro ao criar disponibilidade:", error); + alert("Erro ao criar disponibilidade."); + } + }; + + const handlePatchAvailability = async (id, updatedAvailability) => { + try { + const response = await fetch(`${ENDPOINT_AVAILABILITY}?id=${id}`, { + method: "PATCH", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(updatedAvailability), + }); + + const data = await response.json(); + console.log("Disponibilidade atualizada:", data); + alert("Disponibilidade atualizada com sucesso!"); +} catch (error) { + console.error("Erro ao atualizar disponibilidade:", error); + alert("Erro ao atualizar disponibilidade."); +} + }; const handleSubmit = async () => { const missingFields = []; @@ -246,9 +288,23 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) { try { await onSave({ ...formData }); + + if (formData.availability && formData.availability.length > 0) { + if (formData.availabilityId) { + await handlePatchAvailability( + formData.availabilityId, + formData.availability + ); + } else { + await handleCreateAvailability(formData.availability); + } + } + + alert("Médico salvo e disponibilidade enviada ao mock com sucesso!"); } catch (error) { - throw error; - } + console.error("Erro ao salvar médico ou disponibilidade:", error); + alert("Erro ao salvar médico ou disponibilidade."); + }; }; const handleModalClose = () => { @@ -677,7 +733,7 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) { - {/* BOTÕES DE AÇÃO */} + {/* BOTÕES DE AÇÃO */}
-
+
@@ -198,20 +199,21 @@ const HorariosDisponibilidade = ({ handleTimeChange(dayIndex, bloco.id, "termino", e.target.value) } style={{ - padding: "8px", - border: "1px solid #d1d5db", - borderRadius: "8px", - width: "100%", - boxSizing: "border-box", - outline: "none", + padding: "4px 6px", + border: "1px solid #d1d5db", + borderRadius: "6px", + width: "100%", + boxSizing: "border-box", + outline: "none", + fontSize: "13px", }} step="300" /> handleRemoveBlock(dayIndex, bloco.id)} style={{ - marginTop: window.innerWidth < 640 ? "16px" : "0", - padding: "8px 24px", + marginTop: window.innerWidth < 640 ? "8px" : "0", + padding: "4px 10px", backgroundColor: "#ef4444", color: "white", fontWeight: 600, - borderRadius: "12px", + borderRadius: "13px", boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1)", transition: "all 0.2s", width: window.innerWidth < 640 ? "100%" : "auto", @@ -257,7 +259,6 @@ const HorariosDisponibilidade = ({ fontWeight: 500, }} > - (Novo) )}
@@ -295,8 +296,8 @@ const HorariosDisponibilidade = ({ key={day.dia} style={{ backgroundColor: "#f9fafb", - padding: "20px", - borderRadius: "12px", + padding: "8px", + borderRadius: "10px", border: "1px solid #e5e7eb", }} > @@ -365,11 +366,11 @@ const HorariosDisponibilidade = ({