Skip to content

Comments

Feat(client): 리마인드, 북마크 페이지 tooltip 구현#174

Merged
jjangminii merged 5 commits intodevelopfrom
feat/#173/bookmark-tooltip
Oct 2, 2025
Merged

Feat(client): 리마인드, 북마크 페이지 tooltip 구현#174
jjangminii merged 5 commits intodevelopfrom
feat/#173/bookmark-tooltip

Conversation

@jjangminii
Copy link
Collaborator

@jjangminii jjangminii commented Oct 2, 2025

📌 Related Issues

관련된 Issue를 태그해주세요. (e.g. - close #25)

📄 Tasks

  • 리마인드 , 북마크 툴팁 추가

⭐ PR Point (To Reviewer)

  • 툴팁에 데이터 없는 카드 이미지로 불러왔는데 이 부분 이미지가 아닌 컴포넌트로 만드는게 좋을까요? 재사용이 안된다 느껴져서 이미지로 가져왔는데 어떻게 생각하시나요

📷 Screenshot

image

Summary by CodeRabbit

  • 신기능
    • 마이북마크 및 리마인드 화면에 정보 툴팁이 추가되어 안내 카드(메시지·이미지)를 제공합니다.
  • 스타일
    • 정보 아이콘과 함께 배지 옆에 시각적 툴팁 카드가 표시되어 가독성과 안내 경험이 향상되었습니다.
  • 접근성
    • 포커스 및 호버 동작으로 툴팁을 표시해 키보드 및 마우스 사용자 모두 안내를 확인할 수 있도록 개선되었습니다.

@jjangminii jjangminii self-assigned this Oct 2, 2025
@jjangminii jjangminii linked an issue Oct 2, 2025 that may be closed by this pull request
@vercel
Copy link

vercel bot commented Oct 2, 2025

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

Project Deployment Preview Comments Updated (UTC)
pinback-client-client Ready Ready Preview Comment Oct 2, 2025 2:33pm
pinback-client-landing Ready Ready Preview Comment Oct 2, 2025 2:33pm

@coderabbitai
Copy link

coderabbitai bot commented Oct 2, 2025

Walkthrough

페이지 컴포넌트(MyBookmark, Remind)에 공용 Tooltip UI를 추가하고, 공유 경로에 신규 TooltipInfoCard 컴포넌트를 도입했습니다. 상태·데이터 로직 변경은 없으며, 호버/포커스 시 InfoCard가 표시되는 정적 UI 동작만 추가되었습니다.

Changes

Cohort / File(s) Summary
Page integrations (Tooltip 추가)
apps/client/src/pages/myBookmark/MyBookmark.tsx, apps/client/src/pages/remind/Remind.tsx
공용 Tooltip 컴포넌트 임포트 및 렌더링 추가. 배지 컨트롤 인접 위치에 Tooltip 배치. 상태/이벤트/데이터 로직 변경 없음.
Shared Tooltip UI (신규 컴포넌트)
apps/client/src/shared/components/tooltip/InfoCard.tsx, apps/client/src/shared/components/tooltip/Tooltip.tsx
InfoCardTooltip 신규 추가. 버튼(아이콘) 호버/포커스 시 CSS peer 셀렉터로 InfoCard 표시. aria-describedby 등 접근성 속성 포함. 외부 상태/데이터 의존 없음.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant Page as Page (MyBookmark/Remind)
  participant Tooltip as Tooltip
  participant InfoCard as InfoCard

  User->>Page: 페이지 로드
  Page->>Tooltip: Tooltip 렌더링
  User-->>Tooltip: info 버튼 호버/포커스
  Note over Tooltip,InfoCard: CSS peer-hover / peer-focus-visible로 표시 전환
  Tooltip->>InfoCard: InfoCard 표시 (visible)
  User-->>Tooltip: 블러/마우스아웃
  Tooltip->>InfoCard: InfoCard 숨김 (hidden)
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested labels

🛠️ Feature, 재림, frontend

Suggested reviewers

  • jllee000
  • constantly-dev

Poem

깡충깡충, 툴팁이 폴짝 떠요 🐇
배지 옆에 속삭임 하나 딱 놓고
치삐는 공사 중이라네요 🚧
호버하니 카드가 살포시 나타나
오늘도 토끼는 당근 하나 더 드립니다 🥕

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning PR은 메타데이터 부재 시 대체 문구와 툴팁을 추가하는 요구사항을 이행하여 [#173]은 충족하지만, 디자인 시스템의 Progress 컴포넌트 구현을 요구하는 [#25]는 이 변경사항에 포함되어 있지 않아 연결된 모든 이슈를 충족하지 않습니다. 해결: 이 PR에서 [#25]도 다루려면 Progress 컴포넌트 구현(컴포넌트, 스타일 분기, 스토리북 등)을 추가하거나 PR에서 [#25] 연결을 제거하여 이 PR이 [#173]만 닫도록 분리해 주세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed 제목은 PR의 핵심 변경점인 리마인드·북마크 페이지 툴팁 추가를 명확히 요약하고 있어 변경사항과 일치합니다.
Out of Scope Changes Check ✅ Passed 변경사항은 Tooltip 및 InfoCard 컴포넌트 추가와 Remind·MyBookmark 페이지 통합에 국한되어 있으며 링크된 요구사항 중 [#173]과 일치하므로 범위를 벗어난 코드 변경은 발견되지 않습니다.
Description Check ✅ Passed PR 설명은 템플릿의 필수 섹션(관련 이슈, 작업 목록, PR 포인트, 스크린샷)을 모두 포함하여 템플릿 요구사항을 충족합니다.
✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/#173/bookmark-tooltip

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 49f4c44 and acc5ad9.

📒 Files selected for processing (1)
  • apps/client/src/shared/components/tooltip/InfoCard.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/client/src/shared/components/tooltip/InfoCard.tsx

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.

@github-actions github-actions bot added the feat 기능 개발하라 개발 달려라 달려 label Oct 2, 2025
@github-actions
Copy link

github-actions bot commented Oct 2, 2025

✅ Storybook chromatic 배포 확인:
🐿️ storybook

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: 3

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1462660 and 49f4c44.

⛔ Files ignored due to path filters (1)
  • apps/client/src/assets/card_img.svg is excluded by !**/*.svg
📒 Files selected for processing (4)
  • apps/client/src/pages/myBookmark/MyBookmark.tsx (2 hunks)
  • apps/client/src/pages/remind/Remind.tsx (2 hunks)
  • apps/client/src/shared/components/tooltip/InfoCard.tsx (1 hunks)
  • apps/client/src/shared/components/tooltip/Tooltip.tsx (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (3)
apps/client/src/shared/components/tooltip/Tooltip.tsx (1)
apps/client/src/shared/components/tooltip/InfoCard.tsx (1)
  • InfoCard (2-20)
apps/client/src/pages/myBookmark/MyBookmark.tsx (1)
apps/client/src/shared/components/tooltip/Tooltip.tsx (1)
  • Tooltip (4-29)
apps/client/src/pages/remind/Remind.tsx (1)
apps/client/src/shared/components/tooltip/Tooltip.tsx (1)
  • Tooltip (4-29)

Comment on lines +12 to +18
<button
type="button"
aria-describedby="info-card"
className="peer rounded p-[0.4rem]"
>
<Icon name="ic_info" size={16} />
</button>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

아이콘 버튼 접근성 레이블 누락

Line [13]의 버튼은 아이콘만 포함하고 있어 스크린 리더에서 이름이 비어 있습니다. aria-label 등을 추가해 의도를 명확히 알려 주세요.

예:

-        <button
-          type="button"
-          aria-describedby="info-card"
-          className="peer rounded p-[0.4rem]"
-        >
+        <button
+          type="button"
+          aria-describedby={infoCardId}
+          aria-label="메타데이터 안내 보기"
+          className="peer rounded p-[0.4rem]"
+        >

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In apps/client/src/shared/components/tooltip/Tooltip.tsx around lines 12 to 18,
the icon-only button lacks an accessible name for screen readers; add an
explicit accessible label such as aria-label or aria-labelledby that describes
the button's purpose (preferably using a localized string from i18n or a prop),
keep aria-describedby if needed, and ensure the label accurately reflects the
tooltip/info action so the button is announced correctly by assistive
technologies.

Comment on lines +20 to +24
<div
id="info-card"
className="pointer-events-none absolute left-0 top-[calc(100%+8px)] z-[100] opacity-0 transition-opacity duration-150 peer-hover:opacity-100 peer-focus-visible:opacity-100"
>
<InfoCard />
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

고정 ID로 인한 중복 위험

Line [21]에서 id="info-card"를 하드코딩하면 Tooltip을 한 페이지에서 여러 번 사용할 때 DOM ID 충돌이 발생합니다. useId 등을 사용해 인스턴스마다 고유 값을 생성하거나 prop으로 받아 처리해 주세요.

예:

-import { Icon } from '@pinback/design-system/icons';
-import InfoCard from './InfoCard';
+import { Icon } from '@pinback/design-system/icons';
+import { useId } from 'react';
+import InfoCard from './InfoCard';
 
 export default function Tooltip() {
+  const infoCardId = useId();
+
   return (
@@
-        <button
-          type="button"
-          aria-describedby="info-card"
+        <button
+          type="button"
+          aria-describedby={infoCardId}
           className="peer rounded p-[0.4rem]"
         >
@@
-        <div
-          id="info-card"
+        <div
+          id={infoCardId}
           className="pointer-events-none absolute left-0 top-[calc(100%+8px)] z-[100] opacity-0 transition-opacity duration-150 peer-hover:opacity-100 peer-focus-visible:opacity-100"
         >
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<div
id="info-card"
className="pointer-events-none absolute left-0 top-[calc(100%+8px)] z-[100] opacity-0 transition-opacity duration-150 peer-hover:opacity-100 peer-focus-visible:opacity-100"
>
<InfoCard />
// apps/client/src/shared/components/tooltip/Tooltip.tsx
import { Icon } from '@pinback/design-system/icons';
import { useId } from 'react';
import InfoCard from './InfoCard';
export default function Tooltip() {
const infoCardId = useId();
return (
<>
<button
type="button"
aria-describedby={infoCardId}
className="peer rounded p-[0.4rem]"
>
<Icon name="info" />
</button>
<div
id={infoCardId}
className="pointer-events-none absolute left-0 top-[calc(100%+8px)] z-[100] opacity-0 transition-opacity duration-150 peer-hover:opacity-100 peer-focus-visible:opacity-100"
>
<InfoCard />
</div>
</>
);
}
🤖 Prompt for AI Agents
In apps/client/src/shared/components/tooltip/Tooltip.tsx around lines 20 to 24,
the Tooltip uses a hardcoded id="info-card" which can cause DOM ID collisions
when multiple Tooltips are rendered; replace the static id by generating a
unique id per instance (e.g., React's useId or a passed-in prop) and wire that
unique id into the element and any related aria/labeling usage so each Tooltip
instance has a distinct identifier.

@jjangminii jjangminii merged commit e88b58f into develop Oct 2, 2025
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat 기능 개발하라 개발 달려라 달려

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] meta 데이터 부재시 대체 문구

3 participants