diff --git a/app/component/date/dateTime/hours/List.js b/app/component/date/dateTime/hours/List.js index 50792c3..58e1d4e 100644 --- a/app/component/date/dateTime/hours/List.js +++ b/app/component/date/dateTime/hours/List.js @@ -12,7 +12,7 @@ function List({ appo, hour, setHour, value }) {
  • diff --git a/app/component/date/dateTime/index.js b/app/component/date/dateTime/index.js index 7537b5b..83a45d3 100644 --- a/app/component/date/dateTime/index.js +++ b/app/component/date/dateTime/index.js @@ -5,6 +5,7 @@ import Hours from "./hours"; import Tabs from "../../Tabs"; import { request } from "@/services/response"; import SendAppo from "./SendAppo"; +import { adaptSlots, hasAvailable } from "@/lib/appointmentSlots"; const listTab = ["صبح", "بعد از ظهر"]; const nameHours = ["hours_morning", "hours_afternoon"]; @@ -13,63 +14,33 @@ function DateTime({ date, doctor, setStep, setSelectedSlot, setSelectedDate }) { const [value, setValue] = useState(0); const [hour, setHour] = useState(); const [appo, setAppo] = useState("تاریخ مورد نظرتان را انتخاب کنید."); - const [locationAddress, setLocationAddress] = useState(null); const handleChange = (event, newValue) => { setHour(); setValue(newValue); }; - // دریافت آدرس بر اساس location_id وقتی ساعت انتخاب می‌شود - useEffect(() => { - if (hour && hour.location_id) { - request - .getDoctorAddress(hour.location_id) - .then((res) => { - setLocationAddress(res.address); - }) - .catch((err) => { - console.error("Error fetching address:", err); - setLocationAddress(null); - }); - } else { - setLocationAddress(null); - } - }, [hour]); + const locationAddress = hour?.location_id + ? doctor?.address?.find((a) => String(a.id) === String(hour.location_id))?.address ?? null + : null; useEffect(() => { - if (date && doctor?.id) { + if (date && doctor?.uuid) { setAppo("loading"); setHour(); request - .getAppointment(doctor.id, date) + .getAppointmentSlots(doctor.uuid, date) .then((res) => { - setAppo(res); - - // بررسی وجود اسلات‌های available در صبح و عصر - const hasAvailableMorning = res.morning?.some(slot => slot.status === "available"); - const hasAvailableEvening = res.evening?.some(slot => slot.status === "available"); - - // اگر هر دو صبح و عصر اسلات available داشته باشند، صبح را نمایش بده - if (hasAvailableMorning && hasAvailableEvening) { - setValue(0); - } - // اگر فقط صبح اسلات available داشته باشد - else if (hasAvailableMorning && !hasAvailableEvening) { - setValue(0); - } - // اگر فقط عصر اسلات available داشته باشد یا هیچ کدام available نداشته باشند، عصر را نمایش بده - else { - setValue(1); - } + const slots = adaptSlots(res); + setAppo(slots); + setValue(hasAvailable(slots.morning) || !hasAvailable(slots.evening) ? 0 : 1); }) - .catch((err) => { - setAppo("در حال حاضر، نوبتی برای ساعت‌های صبح موجود نمی‌باشد."); - // در صورت خطا هم عصر را نمایش بده - setValue(1); + .catch(() => { + setAppo("در حال حاضر، نوبتی برای این روز موجود نمی‌باشد."); + setValue(0); }); } - }, [date, doctor?.id]); + }, [date, doctor?.uuid]); return (
    diff --git a/lib/appointmentSlots.js b/lib/appointmentSlots.js new file mode 100644 index 0000000..dcc0e87 --- /dev/null +++ b/lib/appointmentSlots.js @@ -0,0 +1,21 @@ +const MORNING_END = "12:00"; + +export function adaptSlots(slotsResponse) { + const sessions = slotsResponse?.data?.sessions ?? slotsResponse?.sessions ?? []; + + const morning = []; + const evening = []; + + sessions.forEach((session) => { + (session.slots ?? []).forEach((slot) => { + const target = slot.start_time < MORNING_END ? morning : evening; + target.push(slot); + }); + }); + + return { morning, evening }; +} + +export function hasAvailable(slots) { + return Array.isArray(slots) && slots.some((slot) => slot.is_available); +}