diff --git a/apps/web/src/app/tournament/[id]/result/_components/ResultClient.tsx b/apps/web/src/app/tournament/[id]/result/_components/ResultClient.tsx index c60da6fe..ec5a1cf7 100644 --- a/apps/web/src/app/tournament/[id]/result/_components/ResultClient.tsx +++ b/apps/web/src/app/tournament/[id]/result/_components/ResultClient.tsx @@ -62,13 +62,14 @@ function ResultClient({ tournamentId, isGuest = false, isApp = false }: ResultCl const result = tournamentData.completed.result; // 플레이 링크 공유는 ROOT 의 소유자만 가능 — CLONE 소유자(친구 초대 → CLONE 생성한 사람) 제외 const canSharePlayLink = tournamentData.isRoot && tournamentData.isOwner; + // 그룹 결과는 원본(ROOT) 단위로 집계된다. CLONE 에서 보고 있으면 원본 id 로 조회해야 한다. + const groupResultTournamentId = tournamentData.sourceTournamentId ?? tournamentId; const handleSharePlayLink = () => { setIsShareDialogOpen(true); }; - // 비회원 솔로(isRoot=false): 배너가 스크롤 마지막 — 버튼과 13px 간격 - // 나머지: pb-40 (160px) → GroupResultEntryCard 또는 ReceiptDrawMachine과 BottomCta 버튼 사이 ~28px + /** 비회원 솔로는 배너가 스크롤 마지막이라 하단 여백을 줄인다 */ const mainPb = isGuest && !tournamentData.isRoot ? 'pb-[145px]' : 'pb-40'; return ( @@ -88,10 +89,6 @@ function ResultClient({ tournamentId, isGuest = false, isApp = false }: ResultCl date={date} /> - {/* - 비회원 유도 배너 — 게스트일 때만 노출. - 영수증과 61px 간격: gap-3(12px) + mt-[49px](49px) = 61px. - */} {isGuest && (
@@ -99,22 +96,17 @@ function ResultClient({ tournamentId, isGuest = false, isApp = false }: ResultCl )} {/* - 친구 토너먼트 결과보기 카드 노출 + 라우팅. - - ROOT 사용자(주최자 / 친구 초대 멤버) 에게만 노출. - - CLONE 사용자(플레이 링크 게스트)는 숨긴다. - - 친구 유무는 클릭 시 group-result API 응답으로 판단한다 (캐시 의존 X). - - 앱 화면이 낮게 크롭될 때도 CTA 는 항상 고정돼야 해서 스크롤 영역에 둔다. + 전체 결과 보기 — 주최자·참여자·게스트 모두에게 노출한다. + hasGroupResult 가 false 면(완료한 CLONE 없음) 눌러도 서버가 409 를 주므로 숨긴다. */} - {tournamentData.isRoot && (!isGuest || tournamentData.completed.hasGroupResult) && ( + {tournamentData.completed.hasGroupResult && (
- +
)}
- {/* 하단 CTA — 저장/공유 버튼 → 홈으로 가기 순 위계, 항상 화면 하단 고정 */} - {/* 영수증 공유 (모든 사용자) + 토너먼트 공유 (ROOT 소유자만, 플레이 링크 공유) */}