# اصلاح فیلدهای «جزئیات نوبت» در داشبورد ## پروژه `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` بدون خطا؛ دستی — یک نوبت را باز کن، تاریخ/ساعت/پزشک/تخصص/آدرس/تلفن درست نمایش داده شوند.