From d5845bf84db433790841dde65bfb51b86152a17e Mon Sep 17 00:00:00 2001 From: hamed <15238-genius.ha@users.noreply.drupalcode.org> Date: Wed, 15 Jul 2026 19:16:24 +0330 Subject: [PATCH] refactor(dateTime): streamline slot handling and improve session management --- app/component/date/dateTime/hours/List.js | 7 +-- app/component/date/dateTime/hours/index.js | 4 +- app/component/date/dateTime/index.js | 71 ++++++++++++---------- lib/appointmentSlots.js | 24 ++++---- 4 files changed, 55 insertions(+), 51 deletions(-) diff --git a/app/component/date/dateTime/hours/List.js b/app/component/date/dateTime/hours/List.js index dbe56c5..0cc5746 100644 --- a/app/component/date/dateTime/hours/List.js +++ b/app/component/date/dateTime/hours/List.js @@ -1,8 +1,8 @@ import { Button } from "@mui/material"; import React from "react"; -function List({ appo, hour, setHour, value }) { - const list = appo && appo[value ? "evening" : "morning"]; +function List({ slots, hour, setHour }) { + const list = slots; const checkHour = (item) => JSON.stringify(item) === JSON.stringify(hour); const isSelectable = (item) => item.is_available && !(item?.start && item.start * 1000 < Date.now()); @@ -30,8 +30,7 @@ function List({ appo, hour, setHour, value }) { } else { return (
- در حال حاضر، نوبتی برای ساعتهای {[value ? "بعد از ظهر" : "صبح"]} موجود - نمیباشد. + در حال حاضر، نوبتی برای این شیفت موجود نمیباشد.
); } diff --git a/app/component/date/dateTime/hours/index.js b/app/component/date/dateTime/hours/index.js index 74e99c7..80cf860 100644 --- a/app/component/date/dateTime/hours/index.js +++ b/app/component/date/dateTime/hours/index.js @@ -1,7 +1,7 @@ import List from "./List"; import Loading from "./Loading"; -function Hours({ appo, doctor, hour, setHour, value, nameHours, locationAddress }) { +function Hours({ appo, slots, hour, setHour, locationAddress }) { if (appo === "loading") { returndiff --git a/app/component/date/dateTime/index.js b/app/component/date/dateTime/index.js index a7ee7e7..b04375e 100644 --- a/app/component/date/dateTime/index.js +++ b/app/component/date/dateTime/index.js @@ -8,14 +8,15 @@ import { request } from "@/services/response"; import SendAppo from "./SendAppo"; import { adaptSlots, hasAvailable } from "@/lib/appointmentSlots"; -const listTab = ["صبح", "بعد از ظهر"]; -const nameHours = ["hours_morning", "hours_afternoon"]; - function DateTime({ date, doctor, setStep, setSelectedSlot, setSelectedDate }) { const [value, setValue] = useState(0); const [hour, setHour] = useState(); const [appo, setAppo] = useState("تاریخ مورد نظرتان را انتخاب کنید."); + const sessions = Array.isArray(appo) ? appo : []; + const listTab = sessions.map((s) => s.label); + const currentSlots = sessions[value]?.slots ?? []; + const handleChange = (event, newValue) => { setHour(); setValue(newValue); @@ -33,9 +34,15 @@ function DateTime({ date, doctor, setStep, setSelectedSlot, setSelectedDate }) { request .getAppointmentSlots(doctor.uuid, dateStr) .then((res) => { - const slots = adaptSlots(res); - setAppo(slots); - setValue(hasAvailable(slots.morning) || !hasAvailable(slots.evening) ? 0 : 1); + const parsed = adaptSlots(res); + if (!parsed.length) { + setAppo("در حال حاضر، نوبتی برای این روز موجود نمیباشد."); + setValue(0); + return; + } + setAppo(parsed); + const firstAvailable = parsed.findIndex((s) => hasAvailable(s.slots)); + setValue(firstAvailable >= 0 ? firstAvailable : 0); }) .catch(() => { setAppo("در حال حاضر، نوبتی برای این روز موجود نمیباشد."); @@ -46,36 +53,36 @@ function DateTime({ date, doctor, setStep, setSelectedSlot, setSelectedDate }) { return (