Files
nobat724_front/app/component/date/dateTime/index.js
T
hamedandClaude Opus 4.8 81121ad7d7 fix(appointment): convert picker timestamp to date and fix summary panel
Follow-ups found while sweeping for stale shapes:
- The date picker emits a unix timestamp, but appointment-slots needs
  Y-m-d; convert with moment before calling (slots never loaded before).
- Appointment summary (information/Detail.js) used the auth-required
  getDoctorAddress and selectedSlot.time; derive the address from the
  loaded doctor.address by location_id and use selectedSlot.start_time.
- SendAppo: drop the dead postAppointment block, unused useParams/loading,
  and a duplicate disabled prop on the button.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 15:47:21 +03:30

93 lines
2.6 KiB
JavaScript

"use client";
import { useEffect, useState } from "react";
import moment from "moment-jalaali";
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"];
function DateTime({ date, doctor, setStep, setSelectedSlot, setSelectedDate }) {
const [value, setValue] = useState(0);
const [hour, setHour] = useState();
const [appo, setAppo] = useState("تاریخ مورد نظرتان را انتخاب کنید.");
const handleChange = (event, newValue) => {
setHour();
setValue(newValue);
};
const locationAddress = hour?.location_id
? doctor?.address?.find((a) => String(a.id) === String(hour.location_id))?.address ?? null
: null;
useEffect(() => {
if (date && doctor?.uuid) {
setAppo("loading");
setHour();
const dateStr = moment.unix(date).format("YYYY-MM-DD");
request
.getAppointmentSlots(doctor.uuid, dateStr)
.then((res) => {
const slots = adaptSlots(res);
setAppo(slots);
setValue(hasAvailable(slots.morning) || !hasAvailable(slots.evening) ? 0 : 1);
})
.catch(() => {
setAppo("در حال حاضر، نوبتی برای این روز موجود نمی‌باشد.");
setValue(0);
});
}
}, [date, doctor?.uuid]);
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}
/>
<Hours
appo={appo}
hour={hour}
value={value}
doctor={doctor}
setHour={setHour}
nameHours={nameHours}
locationAddress={locationAddress}
/>
<SendAppo
hour={hour}
setStep={setStep}
setSelectedSlot={setSelectedSlot}
date={date}
setSelectedDate={setSelectedDate}
/>
</div>
);
}
export default DateTime;