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);
+}