From b8eb290e4df81d0d4ae7aeaf03d622a3fcde63b6 Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 27 Apr 2026 07:20:00 +0900 Subject: [PATCH] =?UTF-8?q?feat(travel):=20=EC=A2=8C=ED=91=9C=20=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=EC=A7=80=EC=97=AD?= =?UTF-8?q?=EC=97=90=20=ED=95=AD=EC=83=81=20"=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EC=A7=80=EC=A0=95"=20=EB=B2=84=ED=8A=BC=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 지역 변경 직후뿐 아니라, 앨범의 지역이 좌표 미지정 커스텀 지역이면 헤더에 핀 버튼을 상시 노출. 기존 좌표가 있으면 RegionPinPicker에 초기값으로 전달. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/pages/travel/AlbumDetail.jsx | 35 +++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/pages/travel/AlbumDetail.jsx b/src/pages/travel/AlbumDetail.jsx index 3d70e7a..cbe3a39 100644 --- a/src/pages/travel/AlbumDetail.jsx +++ b/src/pages/travel/AlbumDetail.jsx @@ -189,6 +189,31 @@ export default function AlbumDetail({ /* ── Derived ── */ const regionAccent = getRegionAccent(album?.region || album?.id || ''); + + // Determine if the album's region is a custom region missing coordinates + const currentRegionId = savedRegionId || album?.region || album?.id || ''; + const needsPin = useMemo(() => { + if (!currentRegionId || !regions?.features) return false; + const feature = regions.features.find((f) => { + const rid = f.properties?.id || f.properties?.name || ''; + return rid.toLowerCase() === currentRegionId.toLowerCase(); + }); + if (!feature) return true; // region not in GeoJSON at all → needs pin + if (feature.properties?.custom && !feature.geometry) return true; // custom without coords + return false; + }, [currentRegionId, regions]); + + // Coords of existing pin (for initialCoords in picker) + const existingCoords = useMemo(() => { + if (!currentRegionId || !regions?.features) return null; + const feature = regions.features.find((f) => { + const rid = f.properties?.id || f.properties?.name || ''; + return rid.toLowerCase() === currentRegionId.toLowerCase(); + }); + if (feature?.geometry?.type === 'Point') return feature.geometry.coordinates; + return null; + }, [currentRegionId, regions]); + const photoCountLabel = photoSummary?.total ? `${photoSummary.total} photos` : photos?.length @@ -323,7 +348,7 @@ export default function AlbumDetail({ - {regionMsg?.type === 'ok' && savedRegionId && ( + {(needsPin || (regionMsg?.type === 'ok' && savedRegionId)) && (