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

64 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# اصلاح فیلدهای «جزئیات نوبت» در داشبورد
## پروژه
`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` | نمای موبایل جزئیات |
## وضعیت فعلی (کد واقعی — هر دو فایل مشابه)
```jsx
{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` بدون خطا؛ دستی — یک نوبت را باز کن، تاریخ/ساعت/پزشک/تخصص/آدرس/تلفن درست نمایش داده شوند.