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 = ({