From afcace4fa316d43e64e165596ef56185e40713b7 Mon Sep 17 00:00:00 2001 From: aramesh-site deploy Date: Fri, 9 Oct 2026 17:21:38 +0000 Subject: [PATCH] =?UTF-8?q?feat(projects):=20=D9=86=D9=82=D8=B4=D9=87?= =?UTF-8?q?=D9=94=20=D9=85=D8=AE=D8=AA=D8=B5=D8=A7=D8=AA=20=D9=BE=D8=B1?= =?UTF-8?q?=D9=88=DA=98=D9=87=20=D8=B2=DB=8C=D8=B1=20=D9=87=DB=8C=D8=B1?= =?UTF-8?q?=D9=88=20=D8=AF=D8=B1=20=D8=B5=D9=81=D8=AD=D9=87=D9=94=20=D9=87?= =?UTF-8?q?=D8=B1=20=D9=BE=D8=B1=D9=88=DA=98=D9=87=20=E2=80=94=20=D8=B3?= =?UTF-8?q?=D9=86=D8=AC=D8=A7=D9=82=20=D8=AF=D9=82=DB=8C=D9=82=20=D8=A8?= =?UTF-8?q?=D8=A7=20=D9=BE=D8=A7=D9=BE=E2=80=8C=D8=A2=D9=BE=20=D8=AA=D8=B5?= =?UTF-8?q?=D8=A7=D9=88=DB=8C=D8=B1=20=D9=88=20=D9=BE=DB=8C=D9=88=D9=86?= =?UTF-8?q?=D8=AF=20=D9=86=D8=B4=D8=A7=D9=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/ProjectDetail.tsx | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/frontend/src/pages/ProjectDetail.tsx b/frontend/src/pages/ProjectDetail.tsx index 70680ae..ff93d3a 100644 --- a/frontend/src/pages/ProjectDetail.tsx +++ b/frontend/src/pages/ProjectDetail.tsx @@ -10,6 +10,8 @@ import { useEffect } from 'react'; import { useSite, useStatusLabel } from '../api'; import { useLang } from '../i18n/lang'; import { useAdmin } from '../admin/AdminContext'; +import { LazyProjectsMapSingle } from '../map/LazyMaps'; +import { createPlaceholderProject, findMapProjectByName } from '../data/mapProjects'; import { applySeo } from '../seo'; export function ProjectDetail() { @@ -21,6 +23,12 @@ export function ProjectDetail() { const statusLabel = useStatusLabel(project?.status ?? '') const [lightbox, setLightbox] = useState(null) + // مختصات پروژه از فهرست سنجاق‌های شیت؛ نبودش → محل جایگزین تا نقشه خالی نماند + const mapLocation = project + ? (findMapProjectByName(project.title) ?? createPlaceholderProject(project.title, project.summary)) + : null + const mapImages = project ? [project.image, ...(Array.isArray(project.gallery) ? project.gallery : [])].filter(Boolean) : [] + // عنوان تب، توضیح متا، OG و JSON-LD از خود پروژه — هم‌ارز نسخهٔ سمت سرور (seo_pages.py) useEffect(() => { if (!project) return; @@ -127,6 +135,21 @@ export function ProjectDetail() { + {/* نقشهٔ مختصات پروژه — بلافاصله زیر هیرو */} + {mapLocation && ( +
+
+
+ +
+
+
+ )} +