Skip to content

fix: 중간지점 UI 개선, 모임 참여 에러 핸들링#37

Merged
kangdy25 merged 6 commits intomainfrom
hotfix/edit-departure
Feb 10, 2026
Merged

fix: 중간지점 UI 개선, 모임 참여 에러 핸들링#37
kangdy25 merged 6 commits intomainfrom
hotfix/edit-departure

Conversation

@kangdy25
Copy link
Collaborator

@kangdy25 kangdy25 commented Feb 10, 2026

🚀 fix: 중간지점 UI 개선, 모임 참여 에러 핸들링

📝 변경사항

  • 지도 마커 UI 변경
  • 장소 추천 버튼 스타일 수정
  • "내 출발지 수정하기" 클릭 시, 중간 지점 및 추천 장소 캐시를 삭제하여 재진입 시 데이터가 갱신되도록 수정
  • 서버 에러 메시지 우선 표시
  • 파비콘 리소스 수정

✅ 체크리스트

  • 코드 리뷰를 받았습니다
  • 테스트를 완료했습니다
  • 린터 에러가 없습니다
  • 타입 에러가 없습니다
  • 브라우저에서 테스트를 완료했습니다
  • 모바일에서 테스트를 완료했습니다 (해당되는 경우)

📸 스크린샷

UI 변경 사항이 있다면 이미지를 드래그해서 넣어주세요!

💬 리뷰어 전달사항

  • 리뷰어가 특별히 확인해야 할 사항이 있다면 적어주세요.

Summary by CodeRabbit

릴리스 노트

  • 개선 사항

    • 지도 마커 표시를 항상 보이도록 개선하여 출발지 정보 가시성 향상
    • 미팅 상태 확인 속도 개선 (5초 단위 갱신)
    • 폼 제출 시 오류 메시지 처리 개선
    • 로딩 상태 UI 및 자동 리디렉션 기능 추가
  • 정리

    • 테스트 데이터 정리

@kangdy25 kangdy25 requested a review from kim3360 February 10, 2026 07:22
@vercel
Copy link

vercel bot commented Feb 10, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
mingling-frontend Ready Ready Preview, Comment Feb 10, 2026 7:22am

@coderabbitai
Copy link

coderabbitai bot commented Feb 10, 2026

Walkthrough

이 변경사항은 쿼리 캐시 무효화, 로컬스토리지 기반 상태 관리, 지도 마커 UI 단순화, 폴링 간격 조정, 그리고 모의 데이터 파일 제거를 포함합니다. 회의 참가 흐름을 개선하고 맵 인터페이스를 리팩토링하며 불필요한 모의 데이터를 정리합니다.

Changes

Cohort / File(s) Summary
쿼리 캐시 관리
app/result/[id]/page.tsx
useQueryClient를 사용하여 시작 위치 수정 시 midpoint 및 recommend 관련 캐시 쿼리를 무효화합니다.
회의 참가 폼 개선
components/join/joinForm.tsx
로컬스토리지에 meetingType/category 파라미터 저장, 로그인 상태 확인 시 리다이렉트, 로딩 상태 UI 렌더링, 에러 처리 강화를 추가합니다.
지도 마커 UI 리팩토링
components/map/kakaoMapLine.tsx
호버 기반 인터랙션 제거, 로컬스토리지에서 meetingType/category 읽기, 마커 스타일 조정(yAnchor, zIndex), 정적 정보 표시 버블로 변경합니다.
폴링 간격 조정
hooks/api/query/useCheckMeeting.ts
React Query 폴링 간격을 10초에서 5초로 단축합니다.
모의 데이터 제거
mock/mockData.ts
MOCK_PARTICIPANTS, MOCK_LOCATION_RESULTS, MOCK_TRANSFER_ROUTES, HAPJUNG_STATION, REAL_SUBWAY_PATHS, MOCK_RECOMMEND_PLACES 등 6개의 내보낸 상수를 포함한 파일 전체 삭제합니다.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • kim3360
🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목은 주요 변경사항인 중간지점 UI 개선과 모임 참여 에러 핸들링을 명확하게 요약하고 있습니다.
Description check ✅ Passed PR 설명은 변경사항 섹션에서 주요 수정 사항을 상세히 나열하고 있으며, 필수 체크리스트를 완료 표시하여 템플릿 요구사항을 충족합니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch hotfix/edit-departure

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
components/join/joinForm.tsx (1)

31-44: ⚠️ Potential issue | 🔴 Critical

useSearchParams() 호출을 위해 Suspense 경계 추가 필요

JoinFormuseSearchParams()를 사용하는 클라이언트 컴포넌트입니다. Next.js App Router에서 정적 렌더링 중에 useSearchParams()를 호출하면 가장 가까운 <Suspense> 경계까지 클라이언트 사이드 렌더링으로 전환됩니다. app/join/[id]/page.tsxJoinForm 반환 부분을 Suspense로 감싸지 않으면 빌드 에러가 발생하거나 전체 페이지가 동적 렌더링으로 변환됩니다.

수정 방안
import { Suspense } from 'react';
import JoinForm from '@/components/join/joinForm';

export default async function Page({ params }: Props) {
  const { id } = await params;
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <JoinForm meetingId={id} />
    </Suspense>
  );
}
🤖 Fix all issues with AI agents
In `@components/join/joinForm.tsx`:
- Around line 84-87: When handling the failure branch in the joinForm response,
avoid directly accessing result.data.message because result.data may be
undefined and cause a TypeError; update the code around setErrorMessage(...) and
show() to read the message via optional chaining (e.g. result.data?.message) and
keep the existing fallback string so setErrorMessage(result.data?.message || '모임
참여에 실패했습니다. 다시 시도해주세요.') is safe even when result.data is undefined.
🧹 Nitpick comments (2)
components/join/joinForm.tsx (2)

88-96: error: any 대신 구체적 타입 사용 권장.

정적 분석 도구에서도 지적된 사항입니다. unknown으로 변경 후 타입 가드를 사용하면 타입 안전성을 확보할 수 있습니다.

♻️ 리팩토링 제안
-    } catch (error: any) {
-      const errorData = error.data || error.response?.data;
-      const serverMessage = errorData?.message;
+    } catch (error: unknown) {
+      const err = error as Record<string, any>;
+      const errorData = err?.data || err?.response?.data;
+      const serverMessage = errorData?.message;

70-78: @ts-ignore 사용은 타입 안전성을 약화시킵니다.

mutateAsync 호출에서 타입 에러를 억제하고 있습니다. useEnterParticipant 훅의 제네릭 타입을 올바르게 정의하면 @ts-ignore 없이도 해결할 수 있습니다. 당장은 아니더라도 향후 개선을 권장합니다.

@kangdy25 kangdy25 merged commit a2bc31e into main Feb 10, 2026
4 checks passed
@kangdy25 kangdy25 deleted the hotfix/edit-departure branch February 10, 2026 12:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants