From 29dc8459f7c3301937f13e5f45cd44126da03fad Mon Sep 17 00:00:00 2001 From: aramesh-site deploy Date: Fri, 9 Oct 2026 17:27:27 +0000 Subject: [PATCH] =?UTF-8?q?fix(map):=20=D9=BE=D8=A7=D9=BE=E2=80=8C=D8=A2?= =?UTF-8?q?=D9=BE=20=D9=86=D9=82=D8=B4=D9=87=D9=94=20=D8=B5=D9=81=D8=AD?= =?UTF-8?q?=D9=87=D9=94=20=D9=BE=D8=B1=D9=88=DA=98=D9=87=20=D8=AA=D8=B5?= =?UTF-8?q?=D9=88=DB=8C=D8=B1=20=D8=B4=D8=A7=D8=AE=D8=B5=20=D8=B1=D8=A7=20?= =?UTF-8?q?=D8=AA=DA=A9=D8=B1=D8=A7=D8=B1=20=D9=86=D9=85=DB=8C=E2=80=8C?= =?UTF-8?q?=DA=A9=D9=86=D8=AF=20=E2=80=94=20=D9=81=D9=82=D8=B7=20=DA=AF?= =?UTF-8?q?=D8=A7=D9=84=D8=B1=DB=8C=D8=9B=20=D8=AF=D8=B1=20=D9=86=D8=A8?= =?UTF-8?q?=D9=88=D8=AF=20=DA=AF=D8=A7=D9=84=D8=B1=DB=8C=20=D9=82=D8=A7?= =?UTF-8?q?=D8=A8=20=D8=AA=D8=B5=D9=88=DB=8C=D8=B1=20=D9=BE=D9=86=D9=87?= =?UTF-8?q?=D8=A7=D9=86=20=D9=85=DB=8C=E2=80=8C=D8=B4=D9=88=D8=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/map/ProjectImageSlider.tsx | 5 ++++- frontend/src/map/ProjectPopupCard.tsx | 6 ++++-- frontend/src/map/ProjectsMapSingle.tsx | 2 +- frontend/src/pages/ProjectDetail.tsx | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/frontend/src/map/ProjectImageSlider.tsx b/frontend/src/map/ProjectImageSlider.tsx index 6483e89..88b0467 100644 --- a/frontend/src/map/ProjectImageSlider.tsx +++ b/frontend/src/map/ProjectImageSlider.tsx @@ -9,6 +9,8 @@ type ProjectImageSliderProps = { images: string[] alt: string className?: string + /** در نبود تصویر، به‌جای جای‌نگهدار کل قاب پنهان شود (صفحه‌ای که تصویر را جای دیگر نشان می‌دهد) */ + hideWhenEmpty?: boolean } /** @@ -16,7 +18,7 @@ type ProjectImageSliderProps = { * شمارندهٔ اسلاید و گوشه‌های گرد هم‌اندازهٔ کارت. همهٔ رویدادهای اشاره روی * اسلایدر متوقف می‌شوند تا کلیک/کشیدن آن، نقشه را جابه‌جا یا پاپ‌آپ را نبندد. */ -export function ProjectImageSlider({ images, alt, className = '' }: ProjectImageSliderProps) { +export function ProjectImageSlider({ images, alt, className = '', hideWhenEmpty = false }: ProjectImageSliderProps) { const { t } = useLang() const [index, setIndex] = useState(0) @@ -26,6 +28,7 @@ export function ProjectImageSlider({ images, alt, className = '' }: ProjectImage const frame = `relative aspect-[16/10] w-full overflow-hidden rounded-t-2xl bg-char ${className}` if (!images.length) { + if (hideWhenEmpty) return null return (
diff --git a/frontend/src/map/ProjectPopupCard.tsx b/frontend/src/map/ProjectPopupCard.tsx index d73a279..96f27ed 100644 --- a/frontend/src/map/ProjectPopupCard.tsx +++ b/frontend/src/map/ProjectPopupCard.tsx @@ -15,6 +15,8 @@ type ProjectPopupCardProps = { project: MapProject /** تصاویر پروژه — همان آرایهٔ صفحهٔ جزئیات؛ در نبودش جای‌نگهدار می‌آید */ images?: string[] + /** در نبود تصویر، قاب تصویر پنهان شود (نه جای‌نگهدار) — برای صفحهٔ خود پروژه */ + hideImageWhenEmpty?: boolean onClose: () => void /** دکمه‌های پایهٔ کارت — هر نما اکشن‌های خودش را می‌دهد (عمودی روی هم) */ children: ReactNode @@ -25,7 +27,7 @@ type ProjectPopupCardProps = { * عنوان و توضیح، و در پایه دکمه‌های عمودی. راست‌به‌چپ، شیشه‌ای تیره و * هم‌اندازهٔ کارت‌های سایت. سال پروژه عمداً نمایش داده نمی‌شود. */ -export function ProjectPopupCard({ project, images = [], onClose, children }: ProjectPopupCardProps) { +export function ProjectPopupCard({ project, images = [], hideImageWhenEmpty = false, onClose, children }: ProjectPopupCardProps) { const { t } = useLang() const description = project.description.trim() || t('mapProjectDescription') @@ -36,7 +38,7 @@ export function ProjectPopupCard({ project, images = [], onClose, children }: Pr > {/* اسلایدر تصویر: لبه‌تا‌لبه، بدون حاشیه، با فلش‌های چپ/راست */}
- +