Skip to content

feat: 곡 상세 정보 확인 - #59

Merged
onebone merged 1 commit into
developfrom
feat/33-pin-song-detail
Jul 22, 2026
Merged

onebone merged 1 commit into
developfrom
feat/33-pin-song-detail

Conversation

@onebone

@onebone onebone commented Jul 14, 2026 •

Copy link
Copy Markdown
Contributor

변경 내용

핀을 클릭했을 때 나오는 곡 상세 정보 확인 바텀시트의 내용을 작성합니다.

관련 이슈

Closes #33

변경 사항

  • 새로운 기능 추가
  • 버그 수정
  • UI/UX 개선
  • 리팩토링
  • 문서 업데이트

테스트

  • 브라우저에서 정상 동작 확인
  • 기존 기능에 영향 없음 확인

스크린샷 (UI 변경시)

image

체크리스트

  • 코드가 정상적으로 동작합니다
  • 새로운 에러나 경고가 없습니다
  • 필요시 문서를 업데이트했습니다
  • 코드 포맷팅을 실행했습니다 (pnpm format)
  • ESLint 검사를 통과했습니다 (pnpm lint:fix)

코드 품질 확인
PR 제출 전에 다음 명령어를 실행하여 코드 품질을 확인해주세요:

pnpm lint:fix
pnpm format

Summary by CodeRabbit

  • 새로운 기능

    • 핀 목록 헤더에 장소 주소와 지도 핀 아이콘을 표시합니다.
    • 거리를 미터(m) 또는 킬로미터(km) 형식으로 보기 쉽게 표시합니다.
    • 핀 목록에서 북마크와 핀 선택 동작을 더 자연스럽게 이용할 수 있습니다.
  • 개선 사항

    • 좋아요 수 정보가 없을 때 하트 아이콘과 숫자를 숨깁니다.
    • 핀 카드와 정렬 탭의 레이아웃 및 스타일을 개선했습니다.
    • 정렬 탭의 선택 상태와 접근성 표시를 강화했습니다.

@onebone onebone self-assigned this Jul 14, 2026
@coderabbitai

coderabbitai Bot commented Jul 14, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@onebone, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 0f8e5376-4e45-44e2-8e46-52ca9d914d36

📥 Commits

Reviewing files that changed from the base of the PR and between 767dd04 and 614f35a.

📒 Files selected for processing (4)
  • src/features/pin/components/PinCard.tsx
  • src/features/pin/components/PinListSheet.tsx
  • src/features/pin/components/SortTabs.tsx
  • src/features/pin/types.ts
📝 Walkthrough

Walkthrough

PIN 목록 바텀시트가 내부 콘텐츠 컴포넌트로 분리되고, 장소 주소·소유자·거리 정보 표시와 PIN 선택 전달이 추가되었습니다. PIN 카드와 정렬 탭의 조건부 렌더링, 스타일, 접근성 속성도 갱신되었습니다.

Changes

PIN 목록 표시 및 선택 흐름

Layer / File(s) Summary
장소 데이터와 목록 콘텐츠
src/types/pin.ts, src/features/pin/components/PinListSheet.tsx
PlaceInfo에 주소와 소유자 여부 필드가 추가되고, 목록 콘텐츠에서 주소·거리·소유자 배지와 PIN 선택 콜백을 표시·전달합니다.
PIN 카드와 정렬 UI
src/features/pin/components/PinCard.tsx, src/features/pin/components/SortTabs.tsx
likeCount가 있을 때만 하트 영역을 렌더링하며, 카드 스타일과 정렬 탭의 접근성 속성 및 선택 상태 스타일을 갱신합니다.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related issues

  • UMC10th-PLIMAP/plimap-web 이슈 17: PIN 조회 UI와 목록 선택 흐름 변경이 핀 조회 플로우 범위와 연결됩니다.

Possibly related PRs

Suggested reviewers: kim3360

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant PinListSheet
  participant BottomSheet
  participant PinListContent
  participant PinCard
  User->>PinListSheet: 장소 목록 열기
  PinListSheet->>BottomSheet: PinListContent 전달
  BottomSheet->>PinListContent: 목록 렌더링
  PinListContent->>PinCard: PIN 데이터와 onClick 전달
  User->>PinCard: PIN 선택
  PinCard->>PinListContent: 선택된 PIN 전달
  PinListContent->>PinListSheet: onPinClick 호출
Loading
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 곡 상세 정보 확인이라는 핵심 변경을 잘 요약해 변경 내용과 관련성이 높습니다.
Linked Issues check ✅ Passed 핀/곡 카드 선택 흐름과 상세 바텀시트 UI, 카드 진입 연결이 반영되어 #33의 요구사항과 대체로 부합합니다.
Out of Scope Changes check ✅ Passed 관련 컴포넌트와 타입 수정 중심이며, 링크된 이슈와 무관한 범위 밖 변경은 보이지 않습니다.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/33-pin-song-detail

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.

@onebone
onebone marked this pull request as ready for review July 14, 2026 15:18
@onebone
onebone requested a review from a team July 14, 2026 15:19

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
src/features/pin/components/SortTabs.tsx (1)

16-34: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

상호 배타적인 옵션 그룹의 접근성(ARIA) 속성 개선

SortTabs라는 컴포넌트 이름과 시각적 형태를 고려할 때, 상호 배타적인 옵션을 나타내기 위해 role="tablist"와 role="tab", 그리고 aria-selected를 사용하는 것이 웹 접근성 표준(WAI-ARIA)에 더 적합합니다. 현재 사용된 role="group"과 aria-pressed는 주로 독립적인 토글 버튼(예: 텍스트 굵게/기울임꼴)에 사용됩니다.

♻️ 제안하는 리팩토링
     <div
-      role="group"
+      role="tablist"
       aria-label="PIN 정렬"
       className="flex h-10 w-full gap-[3px] rounded-xl bg-pli-black-75 px-[4.5px] py-1"
     >
       {OPTIONS.map((option) => {
         const selected = value === option.value;
 
         return (
           <button
             key={option.value}
             type="button"
-            aria-pressed={selected}
+            role="tab"
+            aria-selected={selected}
             onClick={() => onChange(option.value)}
             className={cn(
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/pin/components/SortTabs.tsx` around lines 16 - 34, Update the
SortTabs container and option buttons to use the WAI-ARIA tab pattern: change
the container role to tablist, each option button role to tab, and replace
aria-pressed with aria-selected while preserving the existing selected state and
click behavior.
src/features/pin/components/PinListSheet.tsx (1)

54-60: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

불필요한 소수점 처리를 더 간결하게 개선

현재 코드는 distance가 1001과 같이 애매한 값일 때 계산된 kilometers가 1.001이 되어 isInteger가 false로 평가되며, 결과적으로 "1.0" 문자열이 반환될 수 있습니다. 결과를 Number()로 감싸주면 .0과 같은 불필요한 소수점 이하의 0을 자동으로 제거해주므로 코드가 더 간결해지고 엣지 케이스를 안전하게 처리할 수 있습니다.

♻️ 제안하는 리팩토링
   if (normalizedDistance >= 1000) {
     const kilometers = normalizedDistance / 1000;
     return {
-      value: Number.isInteger(kilometers) ? String(kilometers) : kilometers.toFixed(1),
+      value: String(Number(kilometers.toFixed(1))),
       unit: 'km',
     };
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/pin/components/PinListSheet.tsx` around lines 54 - 60, Update
the kilometers formatting in the normalizedDistance branch to round to one
decimal place and wrap the result with Number, removing unnecessary trailing
“.0” without the current Number.isInteger conditional. Preserve the existing km
unit and value output behavior for whole and fractional distances.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/features/pin/components/PinListSheet.tsx`:
- Around line 54-60: Update the kilometers formatting in the normalizedDistance
branch to round to one decimal place and wrap the result with Number, removing
unnecessary trailing “.0” without the current Number.isInteger conditional.
Preserve the existing km unit and value output behavior for whole and fractional
distances.

In `@src/features/pin/components/SortTabs.tsx`:
- Around line 16-34: Update the SortTabs container and option buttons to use the
WAI-ARIA tab pattern: change the container role to tablist, each option button
role to tab, and replace aria-pressed with aria-selected while preserving the
existing selected state and click behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 01d7f074-45e3-4ab2-92ef-ed4d2edeb37b

📥 Commits

Reviewing files that changed from the base of the PR and between 2c06d12 and 767dd04.

📒 Files selected for processing (4)
  • src/features/pin/components/PinCard.tsx
  • src/features/pin/components/PinListSheet.tsx
  • src/features/pin/components/SortTabs.tsx
  • src/types/pin.ts

@onebone
onebone marked this pull request as draft July 14, 2026 15:32
@onebone

onebone commented Jul 16, 2026

Copy link
Copy Markdown
Contributor Author

(디자인이 수정될 수 있어서 draft)

@onebone
onebone requested a review from L0521 July 22, 2026 13:08
@kim3360
kim3360 self-requested a review July 22, 2026 13:08
@onebone
onebone removed request for a team and kim3360 July 22, 2026 13:08
@onebone
onebone removed the request for review from L0521 July 22, 2026 13:10
@github-actions

Copy link
Copy Markdown

https://pr-59.plimap.kr

@onebone
onebone marked this pull request as ready for review July 22, 2026 14:50
@onebone
onebone merged commit fdcb94b into develop Jul 22, 2026
4 checks passed
@onebone
onebone temporarily deployed to preview-maintenance July 22, 2026 14:56 — with GitHub Actions Inactive
@onebone
onebone deleted the feat/33-pin-song-detail branch July 22, 2026 14:56

This branch was successfully deployed

1 active and 1 inactive deployments
preview-maintenance — 614f35a6 Deployed Jul 22, 2026 by onebone via cleanup #45
preview — 614f35a6 Deployed Jul 22, 2026 by onebone via deploy #41
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