refactor(dateTime): streamline slot handling and improve session management

This commit is contained in:
hamed
2026-07-15 19:16:24 +03:30
parent 07d6526f74
commit d5845bf84d
4 changed files with 55 additions and 51 deletions
+39 -32
View File
@@ -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 (
<div className="w-full">
<Tabs
isSm={true}
style={{
".MuiTabs-indicator": {
height: "4px",
borderRadius: "8px",
background: "#F17732",
},
"& .MuiTabs-flexContainer": {
borderBottom: "2px solid #EFEFEF",
marginBottom: "1px",
},
"& .mui-11pdt05-MuiButtonBase-root-MuiTab-root.Mui-selected": {
color: "#F17732 !important",
},
"& .MuiButtonBase-root.Mui-selected": {
color: "#F17732 !important",
},
}}
value={value}
listTab={listTab}
handleChange={handleChange}
/>
{sessions.length > 1 && (
<Tabs
isSm={sessions.length === 2}
style={{
".MuiTabs-indicator": {
height: "4px",
borderRadius: "8px",
background: "#F17732",
},
"& .MuiTabs-flexContainer": {
borderBottom: "2px solid #EFEFEF",
marginBottom: "1px",
},
"& .mui-11pdt05-MuiButtonBase-root-MuiTab-root.Mui-selected": {
color: "#F17732 !important",
},
"& .MuiButtonBase-root.Mui-selected": {
color: "#F17732 !important",
},
}}
value={value}
listTab={listTab}
handleChange={handleChange}
/>
)}
<Hours
appo={appo}
slots={currentSlots}
hour={hour}
value={value}
doctor={doctor}
setHour={setHour}
nameHours={nameHours}
locationAddress={locationAddress}
/>
<SendAppo