From b8c64a177e20a355d2b0807bace11c22c995aac2 Mon Sep 17 00:00:00 2001 From: onebone Date: Thu, 13 Aug 2026 19:35:13 +0900 Subject: [PATCH 1/2] feat: show map back button from pin entries --- src/features/pin/hooks/useOpenPinPlaceOnMap.ts | 8 ++++---- src/features/pin/types.ts | 2 +- src/pages/MyNotificationsPage.tsx | 11 ++++++++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/features/pin/hooks/useOpenPinPlaceOnMap.ts b/src/features/pin/hooks/useOpenPinPlaceOnMap.ts index 2de3e7b..8090570 100644 --- a/src/features/pin/hooks/useOpenPinPlaceOnMap.ts +++ b/src/features/pin/hooks/useOpenPinPlaceOnMap.ts @@ -19,14 +19,14 @@ type OpenPinPlaceOptions = { showMyRegisteredTrackCta?: boolean; /** 친구 피드 장소 접근 토큰 발급 (팔로잉한 친구 핀 진입 시) */ requestFeedPlaceAccess?: boolean; - /** 지도 상단을 검색창 대신 뒤로가기로 표시 (내 PLIMAP 등) */ + /** 지도 상단을 검색창 대신 뒤로가기로 표시 (핀 카드 진입 기본값: true) */ showMapBackButton?: boolean; }; type OpenPlaceTrackOptions = { placeTrackId: number | string; fallbackPlaceName?: string; - /** 지도 상단을 검색창 대신 뒤로가기로 표시 (내 PLIMAP 등) */ + /** 지도 상단을 검색창 대신 뒤로가기로 표시 (핀 카드 진입 기본값: true) */ showMapBackButton?: boolean; }; @@ -129,7 +129,7 @@ export function useOpenPinPlaceOnMap({ isMine = false, showMyRegisteredTrackCta = false, requestFeedPlaceAccess = false, - showMapBackButton = false, + showMapBackButton = true, }: OpenPinPlaceOptions) => { if (isNavigating) return; @@ -231,7 +231,7 @@ export function useOpenPinPlaceOnMap({ async ({ placeTrackId, fallbackPlaceName = '', - showMapBackButton = false, + showMapBackButton = true, }: OpenPlaceTrackOptions): Promise => { if (isNavigating) { return { ok: false, message: '이미 지도를 여는 중이에요. 잠시만 기다려 주세요.' }; diff --git a/src/features/pin/types.ts b/src/features/pin/types.ts index fd286bd..294201e 100644 --- a/src/features/pin/types.ts +++ b/src/features/pin/types.ts @@ -301,7 +301,7 @@ export type PinSearchPlace = PlaceResult & { /** 선택 당시 입력창에 있던 검색어. 지도 검색 화면 재진입 시 그대로 복원한다. */ searchQuery?: string; /** - * 찜한 노래/내 모든 핀 등에서 지도로 진입했을 때 + * 핀 카드/알림 등에서 지도로 진입했을 때 * 상단 검색창 대신 ‘뒤로가기’를 표시한다. */ showMapBackButton?: boolean; diff --git a/src/pages/MyNotificationsPage.tsx b/src/pages/MyNotificationsPage.tsx index b14bb58..a40f011 100644 --- a/src/pages/MyNotificationsPage.tsx +++ b/src/pages/MyNotificationsPage.tsx @@ -10,6 +10,7 @@ import { useInfiniteNotifications, useNotificationSubscription, } from '@/features/notification/queries/useNotifications'; +import { useOpenPinPlaceOnMap } from '@/features/pin/hooks/useOpenPinPlaceOnMap'; import { useToggleFollow } from '@/features/profile/queries/useToggleFollow'; import { useToast } from '@/hooks/useToast'; @@ -19,6 +20,7 @@ const FOLLOW_BACK_FAILED_MESSAGE = '맞팔로우하지 못했어요. 다시 시 export default function MyNotificationsPage() { const navigate = useNavigate(); const toast = useToast(); + const { openPinPlaceOnMap } = useOpenPinPlaceOnMap(); const loadMoreRef = useRef(null); const [pendingMemberIds, setPendingMemberIds] = useState>(new Set()); const { @@ -120,7 +122,14 @@ export default function MyNotificationsPage() { isFollowPending={pendingMemberIds.has(notification.actorId)} onFollowBack={(actorId) => void handleFollowBack(actorId)} onOpenProfile={(actorId) => navigate(`/app/users/${actorId}`)} - onOpenPin={(pinId) => navigate(`/app/pins/${pinId}`)} + onOpenPin={(pinId) => { + void openPinPlaceOnMap({ + pinId, + isMine: notification.type === 'PIN_LIKED', + showMyRegisteredTrackCta: true, + requestFeedPlaceAccess: notification.type === 'PIN_CREATED', + }); + }} /> ))} From 4d9f1234c49b4ab60e94bfee256ee020d4fb1add Mon Sep 17 00:00:00 2001 From: onebone Date: Thu, 13 Aug 2026 20:16:38 +0900 Subject: [PATCH 2/2] fix: hide unavailable track CTA from notifications --- src/pages/MyNotificationsPage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/MyNotificationsPage.tsx b/src/pages/MyNotificationsPage.tsx index a40f011..e329b4f 100644 --- a/src/pages/MyNotificationsPage.tsx +++ b/src/pages/MyNotificationsPage.tsx @@ -126,7 +126,6 @@ export default function MyNotificationsPage() { void openPinPlaceOnMap({ pinId, isMine: notification.type === 'PIN_LIKED', - showMyRegisteredTrackCta: true, requestFeedPlaceAccess: notification.type === 'PIN_CREATED', }); }}