diff --git a/src/features/map/collaboration/ShareCollabButton.tsx b/src/features/map/collaboration/ShareCollabButton.tsx index 3771c9c6..56b3184a 100644 --- a/src/features/map/collaboration/ShareCollabButton.tsx +++ b/src/features/map/collaboration/ShareCollabButton.tsx @@ -1,6 +1,7 @@ 'use client'; import { useState } from 'react'; +import { useRouter } from 'next/navigation'; import styled from '@emotion/styled'; import { HugeiconsIcon } from '@hugeicons/react'; import { UserAdd01Icon, CheckmarkCircle01Icon } from '@hugeicons/core-free-icons'; @@ -43,20 +44,27 @@ const Btn = styled.button<{ $copied: boolean }>` export function ShareCollabButton() { const { isLoggedIn } = useAuth(); + const router = useRouter(); const [copied, setCopied] = useState(false); if (!isLoggedIn) return null; function handleShare() { - const roomId = crypto.randomUUID(); + // 이미 방에 있으면 현재 URL 재사용, 아니면 새 방 생성 후 URL 교체 + const params = new URLSearchParams(window.location.search); + const existingRoom = params.get('room'); + const roomId = existingRoom ?? crypto.randomUUID(); const url = `${window.location.origin}/map?room=${roomId}`; + if (!existingRoom) { + router.replace(`/map?room=${roomId}`); + } + navigator.clipboard.writeText(url).then(() => { setCopied(true); - toast.success('친구 초대 링크가 복사됐어요!', { description: '링크를 붙여넣어 친구에게 공유하세요.' }); + toast.success('친구 초대 링크가 복사됐어요!', { description: '이 링크는 72시간 동안 유지돼요. 붙여넣어 친구에게 공유하세요.' }); setTimeout(() => setCopied(false), 2500); }).catch(() => { - // fallback: select text manually isn't possible here, just show the URL toast.info('링크 복사 실패', { description: url }); }); }