From 578cb255df7c92a04bc8059ad7e7a4018212a93b Mon Sep 17 00:00:00 2001 From: yshls Date: Tue, 27 Oct 2026 12:31:21 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat(map):=20=EA=B3=B5=EC=9C=A0=20=ED=95=80?= =?UTF-8?q?=20=EC=B0=8D=EA=B8=B0=20=EC=A0=84=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=EC=B2=B4=ED=81=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - handleAddPin 진입 시 isLoggedIn 검사 - 비로그인이면 toast('로그인이 필요해요') 후 얼리 리턴 - Login01Icon (Hugeicons) 사용 Co-Authored-By: Claude Sonnet 4.6 --- src/features/map/collaboration/CollabPinsOverlay.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/features/map/collaboration/CollabPinsOverlay.tsx b/src/features/map/collaboration/CollabPinsOverlay.tsx index 38c40843..11090a21 100644 --- a/src/features/map/collaboration/CollabPinsOverlay.tsx +++ b/src/features/map/collaboration/CollabPinsOverlay.tsx @@ -3,9 +3,10 @@ import { useEffect, useRef } from 'react'; import styled from '@emotion/styled'; import { HugeiconsIcon } from '@hugeicons/react'; -import { Location01Icon, Cancel01Icon, UserMultiple02Icon } from '@hugeicons/core-free-icons'; +import { Location01Icon, Cancel01Icon, UserMultiple02Icon, Login01Icon } from '@hugeicons/core-free-icons'; import { toast } from 'sonner'; import { useSelf } from '@liveblocks/react'; +import { useAuth } from '@/features/auth'; import { useMapStore } from '../hooks/useMapStore'; import { useCollabPins } from './useCollabPins'; import { ringShadow, palette } from '@/design-system/tokens'; @@ -152,6 +153,7 @@ export function CollabPinsOverlay() { const viewportItems = useMapStore((s) => s.viewportItems); const detailId = useMapStore((s) => s.detailId); const me = useSelf(); + const { isLoggedIn } = useAuth(); const { pins, addPin, removePin } = useCollabPins(); // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -280,6 +282,14 @@ export function CollabPinsOverlay() { function handleAddPin() { if (!selectedPlace) return; + if (!isLoggedIn) { + toast('로그인이 필요해요', { + icon: , + description: '핀 공유는 로그인 후 사용할 수 있어요.', + duration: 3000, + }); + return; + } const pin: CollabPin = { placeId: selectedPlace.id, placeName: selectedPlace.name, From 1ca844fada78eefb451c27d3bd4951f1dc898d65 Mon Sep 17 00:00:00 2001 From: yshls Date: Tue, 27 Oct 2026 12:33:13 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix(map):=20=EA=B3=B5=EC=9C=A0=20=EB=A7=81?= =?UTF-8?q?=ED=81=AC=20URL=20=EB=B3=B4=EC=A1=B4=20=E2=80=94=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20toast=EC=97=90=EC=84=9C=20=EC=A7=81?= =?UTF-8?q?=EC=A0=91=20loginWithKakao=20=ED=98=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - toast action '로그인하기' 클릭 시 현재 페이지(/map?collab=uuid)를 returnTo로 유지 - /auth/login 경유 시 returnTo가 /mypage로 덮어써지는 문제 방지 Co-Authored-By: Claude Sonnet 4.6 --- src/features/map/collaboration/CollabPinsOverlay.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/features/map/collaboration/CollabPinsOverlay.tsx b/src/features/map/collaboration/CollabPinsOverlay.tsx index 11090a21..6f4e7b68 100644 --- a/src/features/map/collaboration/CollabPinsOverlay.tsx +++ b/src/features/map/collaboration/CollabPinsOverlay.tsx @@ -153,7 +153,7 @@ export function CollabPinsOverlay() { const viewportItems = useMapStore((s) => s.viewportItems); const detailId = useMapStore((s) => s.detailId); const me = useSelf(); - const { isLoggedIn } = useAuth(); + const { isLoggedIn, loginWithKakao } = useAuth(); const { pins, addPin, removePin } = useCollabPins(); // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -286,7 +286,8 @@ export function CollabPinsOverlay() { toast('로그인이 필요해요', { icon: , description: '핀 공유는 로그인 후 사용할 수 있어요.', - duration: 3000, + duration: 5000, + action: { label: '로그인하기', onClick: loginWithKakao }, }); return; }