# رفع نمایش نوبت آزاد و دکمه نوبت برای پزشک با نوبتدهی غیرفعال
## پروژه
`nobat724_front` (سایت عمومی — فقط نمایش؛ backend از قبل `free_turn` و `active` صحیح برمیگرداند)
## زمینه
Backend (`clinicpro`) برای هر پزشک دو فیلد میفرستد:
- `active` (boolean) = `activeDoctorAppointment && has_schedule`
- `free_turn` (string) = نزدیکترین روز/ساعت کاری (مثل `دوشنبه 09:00–13:00`)، یا اگر نوبتدهی آنلاین خاموش باشد `"نوبتدهی آنلاین غیرفعال است"`.
سایت عمومی این دو فیلد را در سه جا نمایش میدهد و الان رفتارش ناقص است.
## مشکل / هدف
۱. در کارت لیست `/doctors` و در باکس نوبتدهی صفحهی پزشک، متن نوبت آزاد باید با پیشوند **«اولین نوبت آزاد:»** نمایش داده شود (مثلاً `اولین نوبت آزاد: دوشنبه 09:00–13:00`).
۲. اگر پزشک نوبتدهی آنلاینش خاموش است (`active === false`)، بهجای `free_turn` باید **«نوبتدهی غیرفعال است»** نوشته شود.
۳. در صفحهی پزشک (`/doctor/{uuid}`) بخش «نوبت دهی»، اگر `active === false` دکمهی **«دریافت نوبت»** باید **disabled** شود (نه لینک فعال به `/appointment`).
## فایلهای مرتبط
| فایل | نقش |
|------|-----|
| `app/component/ItemDoctor.js` | کارت پزشک در لیست `/doctors` — متن `free_turn` |
| `components/doctor/appointmentList/ItemAppointment.js` | باکس نوبتدهی دسکتاپ صفحه پزشک — متن + دکمه |
| `components/doctor/appointmentList/index.js` | نوار نوبتدهی موبایل (`fixed bottom`) — متن + دکمه |
## وضعیت فعلی
### `app/component/ItemDoctor.js` (حوالی خط ۸۴)
```jsx
{doctor?.free_turn}
{turn?.free_turn ? ` ${turn?.free_turn}` : "نوبت ندارد"}
{doctor && doctor?.free_turn}
{bookingDisabled || !turn?.free_turn ? "نوبتدهی غیرفعال است" : `اولین نوبت آزاد: ${turn.free_turn}`}
``` دکمه — وقتی `bookingDisabled` بود disabled و بدون ``: ```jsx {bookingDisabled ? ( ) : ( )} ``` ### ۳. نوار موبایل — `components/doctor/appointmentList/index.js` متن: ```jsx{doctor?.active === false || !doctor?.free_turn ? "نوبتدهی غیرفعال است" : `اولین نوبت آزاد: ${doctor.free_turn}`}
``` دکمه: ```jsx {doctor?.active === false ? ( ) : ( )} ``` ## نکات مهم - `active` از API نوع boolean است؛ در `ItemDoctor.js` با `Number(doctor?.active)` چک میشود (الگوی موجود را نگهدار)، در باقی جاها مستقیم `=== false`. - در حالت `loading` (اسکلتون) نباید «نوبتدهی غیرفعال» نشان داده شود؛ برای همین `bookingDisabled = !loading && turn?.active === false`. - backend از قبل پیام `"نوبتدهی آنلاین غیرفعال است"` در `free_turn` میفرستد — ولی frontend نباید به متن backend وابسته باشد؛ بر اساس فیلد boolean `active` تصمیم بگیر (پایدارتر). - تست با پزشک `7db9be49-db71-4ec5-add6-24f890b4ad29` (در DB محلی باید `active_doctor_appointment=0` شود تا غیرفعال شود). پزشک غیرفعال در لیست `/doctors` اصلاً نمیآید (فیلتر backend)، پس باگ کارت لیست فقط برای پزشکانی که `active:false` ولی همچنان در نتیجه هستند مهم است. - بعد از تغییر: `npm run build` بدون خطا.