# ClinicDetailPage — پنج اصلاح در `assets/admin/pages/ClinicDetailPage.tsx` پنج مشکل وجود دارد که باید همه را درست کنی: --- ## ۱. شهر اشتباه نمایش داده می‌شود در خطوط حدود ۶۳۲–۶۳۳، `cityName` و `provinceName` از `clinic.city[0]` و `clinic.state[0]` (روی Clinic entity) خوانده می‌شوند. منبع درست، `clinicAddresses[0].city` و `clinicAddresses[0].province` است (جدول `doctor_addresses`). - ترجیحاً از `clinicAddresses[0]` بخواند و اگر خالی بود fallback به Clinic entity داشته باشد - `InfoTile` آدرس هم باید از `clinicAddresses[0].address` بخواند نه `clinic.location` --- ## ۲. هر کلینیک فقط یک آدرس **فرانت‌اند**: دکمه «افزودن آدرس» وقتی `clinicAddresses.length >= 1` است مخفی شود؛ فقط دکمه «ویرایش» نمایش داده شود. **بک‌اند** (`src/Clinic/Controller/ClinicController.php`، متد `createAddress`): قبل از ساخت آدرس جدید بررسی کند آیا این کلینیک قبلاً آدرس دارد. اگر داشت 409 برگرداند. همچنین محدودیت حذف (`remaining <= 1`) را بردار — دیگر نیازی نیست چون کاربر می‌تواند ویرایش کند. --- ## ۳. مودال آدرس — استان، شهر و نقشه فرم افزودن/ویرایش آدرس (مودال `addrFormOpen`) باید استان، شهر و نقشه داشته باشد: - `addrForm` state باید `province_id`, `city_id`, `latitude`, `longitude` هم داشته باشد - هنگام باز کردن مودال برای ویرایش، مقادیر `addr.province`, `addr.city`, `addr.map` لود شوند - در مودال، ابتدا استان انتخاب می‌شود، سپس شهرهای آن استان لود می‌شوند - **وقتی شهر انتخاب می‌شود**: با `geocodeCity` (همان تابعی که در EditModal قبلاً بود)좌표 شهر گرفته شود و نقشه با `flyTo` روی آن زوم کند — دقیقاً همان رفتار تب location قبلی - زیر dropdown شهر، `MapPicker` نمایش داده شود تا کاربر بتواند موقعیت دقیق را روی نقشه انتخاب کند - در `saveAddrMutation` مقادیر `province_id`, `city_id`, `latitude`, `longitude` به payload اضافه شوند - بک‌اند (`hydrateClinicAddress`) قبلاً همه این فیلدها را handle می‌کند — نیازی به تغییر ندارد --- ## ۴. لوگو آپلود نمی‌شود در `handleLogoUpload` و `handleGalleryUpload` توکن اینطور خوانده می‌شود: ```typescript JSON.parse(localStorage.getItem('clinicpro-auth') ?? '{}')?.state?.token ?? '' ``` این روش ممکن است fail کند. باید از `useAuthStore` استفاده شود: ```typescript const token = useAuthStore(s => s.token); ``` و در fetch header از این `token` استفاده شود. --- ## ۵. گالری فقط یک تصویر می‌گیرد `` بدون `multiple` است. - `multiple` به input اضافه شود - `handleGalleryUpload` تغییر کند تا روی همه فایل‌های انتخاب‌شده (`e.target.files`) loop بزند و همه را یکی‌یکی آپلود کند