From 3c019932bd4f2de65d5ade50f53a1083a6eeede8 Mon Sep 17 00:00:00 2001
From: hamed <15238-genius.ha@users.noreply.drupalcode.org>
Date: Sat, 4 Jul 2026 22:25:49 +0330
Subject: [PATCH] feat: redesign doctor sharing poster layout and enhance
download functionality with dynamic file naming
---
.claude/prompt/doctor-poster-redesign.md | 168 +++++++++++++
components/doctor/detailDoctor/List.js | 3 +-
components/doctor/detailDoctor/Share.js | 2 +-
components/doctor/poster/Address.js | 17 --
components/doctor/poster/ImageProfile.js | 11 -
components/doctor/poster/QrImg.js | 36 ++-
components/doctor/poster/Services.js | 23 --
components/doctor/poster/Telefon.js | 33 ---
components/doctor/poster/index.js | 288 ++++++++++++++++++++---
9 files changed, 443 insertions(+), 138 deletions(-)
create mode 100644 .claude/prompt/doctor-poster-redesign.md
delete mode 100644 components/doctor/poster/Address.js
delete mode 100644 components/doctor/poster/ImageProfile.js
delete mode 100644 components/doctor/poster/Services.js
delete mode 100644 components/doctor/poster/Telefon.js
diff --git a/.claude/prompt/doctor-poster-redesign.md b/.claude/prompt/doctor-poster-redesign.md
new file mode 100644
index 0000000..a75a70d
--- /dev/null
+++ b/.claude/prompt/doctor-poster-redesign.md
@@ -0,0 +1,168 @@
+# بازطراحی حرفهای پوستر اشتراکگذاری پزشک (دانلود)
+
+## پروژه
+
+`nobat724_front`
+
+## نقش
+
+بهعنوان متخصص UI/UX عمل کن. خروجی باید یک پوستر برند-محورِ تمیز، مدرن، خوانا و «قابلاشتراک در شبکههای اجتماعی» باشد — نه صرفاً یک باکس اطلاعات.
+
+## زمینه
+
+در صفحهی عمومی پزشک (`/doctor/[slug]`) دکمهی «اشتراک گذاری» یک Modal باز میکند و گزینهی «دانلود» یک پوستر PDF از پزشک میسازد (via `html2canvas` + `jsPDF`). پوستر فعلی ساده و نامتوازن است: چیدمان دو ستونهی خام، تایپوگرافی بدون سلسلهمراتب، بدون slogan/امتیاز/شبکههای اجتماعی، لوگو خیلی کوچک، و ابعاد ثابت `600×700` که با محتوای متغیر (لیست خدمات/آدرس بلند) سرریز/نامرتب میشود.
+
+مکانیزم آمادهسازی تصویر قبلاً درست شده: `List.js` قبل از `html2canvas` منتظر لود همهی ``ها و آماده شدن QR میماند، و عکس پروفایل از `DoctorAvatar` مشترک با صفحه میآید. **این بازطراحی فقط لایهی بصری/چیدمان پوستر است؛ منطق دانلود و انتظار تصویر را نشکن.**
+
+## هدف
+
+پوستر را به بهترین شکل ممکن بازطراحی کن با این الزامات کاربر:
+1. **لوگوی سایت حتماً حاضر و واضح باشد** (نه لوگوی ۳۰px گوشه) — در هدر بهصورت برند، و بهصورت واترمارک ظریف در فوتر.
+2. کیفیت دانلود بالا و خروجی «شبکهاجتماعیپسند».
+3. RTL، فونت Vazir، هماهنگ با هویت بصری سایت.
+
+## فایلهای مرتبط
+
+| فایل | نقش |
+|------|-----|
+| `components/doctor/poster/index.js` | چیدمان اصلی پوستر — بازطراحی کامل |
+| `components/doctor/poster/ImageProfile.js` | عکس پزشک (DoctorAvatar، ring) |
+| `components/doctor/poster/QrImg.js` | QR + دامنه؛ `onReady` را نگهدار |
+| `components/doctor/poster/Services.js` | لیست خدمات (`data.expertise`) |
+| `components/doctor/poster/Address.js` | آدرس (`data.address[0].address`) |
+| `components/doctor/poster/Telefon.js` | تلفنها (`data.address[*].phone`) |
+| `components/doctor/detailDoctor/Share.js` | کانتینر مخفی `hiddenRef` (ابعاد ثابت) + Modal |
+| `components/doctor/detailDoctor/List.js` | `handleDownloadPDF` (html2canvas + jsPDF) — منطق را نگهدار، فقط ابعاد/نام فایل |
+| `lib/getStateInfoClient.js` | `matchedCity` (شامل `logo_url`, `site_name`, `slogan`, `social_media`, `domain`, `contact_phone`) |
+| `app/globals.css` | کلاس `.bg-poster` (خط ۸۳۸) و `.bg-stroke-circle` (خط ۸۴۶) |
+| `data/city.json` | فیلدهای هر شهر: `logo_url`, `site_name`, `slogan`, `social_media`, `domain` |
+| `public/assets/images/` | `logo.png`, `logo-2.png`, `poster.png`, `stroke-circle.png` |
+
+## وضعیت فعلی
+
+`components/doctor/poster/index.js` (چیدمان فعلی خام):
+
+```jsx
+
{siteName}
+{data?.name}
+تخصص: {/* specialties */}
+اشتراک گذاری
-آدرس:
-- {data?.address?.[0]?.address} -
-در حال بارگذاری...
- )} -- {host || ""} -
-خدمات:
-{item.name}
-تلفن:
-- {data?.address?.[0]?.phone} -
- {data?.address && - data?.address.length > 1 && - data?.address.map( - (item, idx) => - idx !== 0 && ( - - {item?.phone} - - - ) - )} -- {siteName} -
+- {data?.name} +
+ {city.slogan}
-
- تخصص:
- {data?.specialties?.map(
- (item, idx) =>
- `${item.name} ${data.specialties.length === idx + 1 ? "" : "|"} `
+ )}
+
+ {/* hero */}
+
+ کد نظام پزشکی:{" "}
+
+ {data.medical_system_code}
+
+
+ {data?.name}
+
+
+ {address} +
+