Files
nobat724_front/.claude/prompt/appointment-detail-fields-fix.md
hamedandClaude Opus 4.8 69e591f03e fix(dashboard): appointment detail fields + sidebar hydration
- 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>
2026-06-16 12:01:43 +03:30

4.0 KiB
Raw Permalink Blame History

اصلاح فیلدهای «جزئیات نوبت» در داشبورد

پروژه

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_start Unix ثانیه است؛ convertTimestampToJalali/convertTimestampToTime همان را می‌گیرند (مثل List.js).
  • address.map.latitude/longitude رشته‌اند (از DoctorAddress::toArray) — برای لینک مسیریابی کافی‌اند.
  • App Router، RTL، فونت Vazir؛ ساختار/استایل کارت حفظ شود، فقط منبع داده اصلاح شود.
  • بعد از تغییر: npm run build بدون خطا؛ دستی — یک نوبت را باز کن، تاریخ/ساعت/پزشک/تخصص/آدرس/تلفن درست نمایش داده شوند.