- Appointment detail (DetailLg/DetailSm) read the real response shape: date/time from slot_start, specialty from doctor.specialties[0].name, phone from address.telephone. - Sidebar Head reads userInfo (cookie) after mount to avoid an SSR/client hydration mismatch on the user's name. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.0 KiB
اصلاح فیلدهای «جزئیات نوبت» در داشبورد
پروژه
nobat724_front (سایت عمومی، داشبورد).
Cross-repo: وابسته به پرامپت بکاند
clinicpro/.claude/prompt/appointment-detail-enrich.mdکهdoctor.specialtiesوaddressرا به پاسخ نوبت اضافه میکند. آن اول اجرا شود.
زمینه
در داشبورد → «نوبتهای من» → «مشاهده جزئیات»، کارت «جزئیات نوبت شما» (DetailLg/DetailSm) فیلدهایی میخواند که با شکل واقعی پاسخ نوبت نمیخوانند، پس تاریخ/ساعت/تخصص/آدرس/تلفن خالی یا غلط نمایش داده میشوند.
پاسخ واقعی نوبت (پس از پرامپت بکاند): { uuid, doctor:{name, specialties:[{uuid,name}]}, address:{address, telephone, map:{latitude,longitude}, ...}, slot_start, slot_end, status, ... }. تاریخها Unixاند.
مشکل / هدف
نگاشت فیلدها در DetailLg.js و DetailSm.js به مقادیر واقعی:
| نمایش | فعلی (غلط) | درست |
|---|---|---|
| تاریخ نوبت | appointmentData?.start_time |
appointmentData?.slot_start |
| ساعت نوبت | appointmentData?.slot?.time |
convertTimestampToTime(appointmentData?.slot_start) |
| تخصص | appointmentData?.doctor?.specialty?.name |
appointmentData?.doctor?.specialties?.[0]?.name |
| آدرس | appointmentData?.address?.address |
همان (درست) |
| تلفن | appointmentData?.address?.phone |
appointmentData?.address?.telephone |
| نقشه | appointmentData?.address?.map |
همان (درست) |
فایلهای مرتبط
| فایل | نقش |
|---|---|
components/dashboard/userAccount/sidebars/turns/isTurnsDetails/DetailLg.js |
نمای دسکتاپ جزئیات |
components/dashboard/userAccount/sidebars/turns/isTurnsDetails/DetailSm.js |
نمای موبایل جزئیات |
وضعیت فعلی (کد واقعی — هر دو فایل مشابه)
{convertTimestampToJalali(appointmentData?.start_time)} // ❌ start_time
ساعت {appointmentData?.slot?.time} // ❌ slot.time
تخصص: {appointmentData?.doctor?.specialty?.name} // ❌ specialty.name
{appointmentData?.address?.phone} // ❌ phone
convertTimestampToTime از قبل در helper هست و در DetailLg import شده.
وظایف
۱. اصلاح DetailLg.js
- تاریخ:
convertTimestampToJalali(appointmentData?.slot_start) - ساعت:
convertTimestampToTime(appointmentData?.slot_start)(بهجایappointmentData?.slot?.time) - تخصص:
appointmentData?.doctor?.specialties?.[0]?.name - تلفن:
appointmentData?.address?.telephone - آدرس و
map(مسیریابی) بدون تغییر (درستاند).
۲. اصلاح DetailSm.js
همان نگاشتها را اعمال کن (این فایل convertTimestampToTime را import نکرده باشد، اضافه کن). ساعت از slot_start.
نکات مهم
- اگر تخصص خالی بود (
specialtiesخالی) یا آدرسnullبود (پزشک بدون آدرس)، بخش مربوط نباید crash کند — با optional chaining (?.) و عدم نمایش خطی که داده ندارد، تحمل کن. slot_startUnix ثانیه است؛convertTimestampToJalali/convertTimestampToTimeهمان را میگیرند (مثلList.js).address.map.latitude/longitudeرشتهاند (ازDoctorAddress::toArray) — برای لینک مسیریابی کافیاند.- App Router، RTL، فونت Vazir؛ ساختار/استایل کارت حفظ شود، فقط منبع داده اصلاح شود.
- بعد از تغییر:
npm run buildبدون خطا؛ دستی — یک نوبت را باز کن، تاریخ/ساعت/پزشک/تخصص/آدرس/تلفن درست نمایش داده شوند.