Skip to content

[Feat] Dashboard 컴포넌트 제작#22

Merged
KyeongJooni merged 8 commits into
mainfrom
feat/dashboard-component-21
Jul 15, 2026
Merged

[Feat] Dashboard 컴포넌트 제작#22
KyeongJooni merged 8 commits into
mainfrom
feat/dashboard-component-21

Conversation

@KyeongJooni

@KyeongJooni KyeongJooni commented Jul 14, 2026

Copy link
Copy Markdown
Member

#️⃣ 연관된 이슈

🚧 Work in Progress

  • 작업 진행 중

📌 주요 변경사항

  • 멘토링 대시보드에 들어가는 3개 컴포넌트를 Figma 디자인 기준으로 신규 구현
  • 승인 대기 요청 요약 카드, 멘토 만족도 목록 행, 멘토링 후기 목록 행
  • 대시보드 요약 카드에서 쓰는 아이콘(그래프/도형/시간) 3종 추가

📝 작업 내용

  • MentoringSummaryCard: 라벨/카운트/아이콘 slot을 받는 요약 카드, onClick 유무에 따라 button/div로 렌더링하고 chevron 노출 여부를 연동
  • MentorSatisfactionRow: 멘토 아바타·기수·파트와 만족도 진행바를 표시하는 목록 행, satisfactionRate를 0~100으로 clamp
  • MentoringReviewRow: 멘토링 후기 제목·작성 시점·멘토→멘티 메타·키워드 칩·자유 후기를 표시하는 목록 행, 추천 여부(isRecommended)에 따라 추천 칩 노출
  • 대시보드 요약 카드 아이콘 3종(DashboardFigureIcon, DashboardGraphIcon, DashboardTimeIcon) SVG 원본과 생성 컴포넌트 추가, barrel 재생성
  • CodeRabbit이 프로젝트 지침 문서(.claude/rules, .claude/references 등)를 리뷰 기준으로 참조하도록 knowledge_base 설정 추가
  • 검증: 각 컴포넌트 단위로 eslint --quiet, tsc --noEmit, vitest run 통과 (총 12개 테스트)

📸 스크린샷 (선택)

💬 리뷰 요구사항(선택)

  • MentoringReviewRow의 키워드 칩은 이모지 포함 완성 문자열(keywords: string[])을 그대로 받는 구조입니다. 실제 API 응답 스키마가 정해지면 이 부분을 확인해주세요.
  • 세 컴포넌트 모두 아직 실제 페이지에 배치되지 않은 상태입니다 (컴포넌트 단위 구현만 포함).

Summary by CodeRabbit

  • 새로운 기능
    • 멘토 만족도(아바타/대체 표시)와 만족도 진행률을 함께 보여주는 행 컴포넌트를 추가했습니다.
    • 추천 여부, 키워드, 자유 후기 등을 포함한 멘토링 리뷰 행을 추가했습니다.
    • 라벨/카운트/아이콘을 표시하고 선택적으로 클릭 동작을 지원하는 멘토링 요약 카드를 추가했습니다.
  • 테스트
    • 만족도 경계값 처리, 아바타 렌더링, 추천/키워드 표시, 클릭 동작을 검증하는 테스트를 추가했습니다.
  • 문서화
    • Storybook에서 각 컴포넌트의 주요 상태를 확인할 수 있도록 스토리를 추가했습니다.

@github-actions github-actions Bot changed the title Feat/dashboard component 21 [Feat] Dashboard 컴포넌트 제작 Jul 14, 2026
@github-actions github-actions Bot added the ✨Feature 새로운 기능 label Jul 14, 2026
@KyeongJooni KyeongJooni requested a review from leemanjae02 July 14, 2026 16:38
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: c1d91bcb-c955-4b9b-a21d-77eff9d3aa03

📥 Commits

Reviewing files that changed from the base of the PR and between dbbbdae and a6255b7.

📒 Files selected for processing (1)
  • src/components/mentoring/MentoringSummaryCard/MentoringSummaryCard.tsx

📝 Walkthrough

Walkthrough

멘토링 대시보드용 요약 카드, 리뷰 행, 만족도 행을 추가했습니다. 각 컴포넌트의 테스트와 Storybook 스토리를 구성하고 공개 export를 연결했으며, CodeRabbit 지식 기반 설정을 확장했습니다.

Changes

멘토링 대시보드 컴포넌트

Layer / File(s) Summary
요약 카드 구현과 검증
src/components/mentoring/MentoringSummaryCard/*
정적 카드와 클릭 가능한 button 상태를 지원하며 렌더링·클릭 테스트와 Storybook 변형을 추가했습니다.
리뷰 행 구현과 검증
src/components/mentoring/MentoringReviewRow/*
참여자 메타데이터, 추천 배지, 키워드, 자유 후기를 렌더링하고 테스트와 Storybook 변형을 추가했습니다.
만족도 행 구현과 검증
src/components/mentoring/MentorSatisfactionRow/*
만족도 값을 유효한 0~100 범위로 제한하고 아바타, 퍼센트, 진행 바를 표시하며 테스트와 Storybook 변형을 추가했습니다.
멘토링 공개 API 연결
src/components/mentoring/*/index.ts, src/components/mentoring/index.ts
세 컴포넌트의 모듈 및 상위 mentoring 공개 export를 추가했습니다.

CodeRabbit 지식 기반 설정

Layer / File(s) Summary
지식 기반 및 가이드라인 패턴 설정
.coderabbit.yaml
지식 기반 수집을 활성화하고 AGENTS.md, CLAUDE.md, .claude, docs/**/*.md를 코드 가이드라인 소스로 지정했습니다.

Possibly related PRs

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning 대시보드 컴포넌트와 연관된 파일 외에 .coderabbit.yaml의 knowledge_base 설정이 추가되어 이슈 범위를 벗어납니다. 이슈 #21 범위에는 대시보드 컴포넌트/자산만 남기고, CodeRabbit 설정 변경은 별도 PR로 분리하세요.
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 (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 Dashboard 컴포넌트 신규 제작이라는 핵심 변경을 직접적으로 요약합니다.
Linked Issues check ✅ Passed 이슈 #21의 대시보드 컴포넌트 제작을 3종 컴포넌트와 관련 테스트/스토리/배럴로 구현해 요구사항을 충족합니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/dashboard-component-21

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

@github-actions

Copy link
Copy Markdown

CI 결과

항목 결과
TypeScript 🟢 통과
Prettier 🟢 통과
Generated 🟢 통과
ESLint 🟢 통과
Test 🟢 통과
Build 🟢 통과

@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.

Actionable comments posted: 4

🤖 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.

Inline comments:
In `@src/components/mentoring/MentoringReviewRow/MentoringReviewRow.tsx`:
- Around line 3-8: Update ParticipantMeta.role from a general string to a
literal union permitting only '멘토' or '멘티', so invalid role values are rejected
at compile time.
- Line 23: Correct the misspelled Tailwind token classes in MentoringReviewRow,
including text-label-netural, text-label-assitive, and bg-fill-netural, to use
the established neutral and assistive spellings so the intended styles apply.

In
`@src/components/mentoring/MentorSatisfactionRow/MentorSatisfactionRow.test.tsx`:
- Around line 20-24: Extend the MentorSatisfactionRow clamp test suite with a
lower-bound regression case: render MentorSatisfactionRow with
satisfactionRate={-1} and assert that 0% is displayed, while preserving the
existing 120 → 100% upper-bound test.

In `@src/components/mentoring/MentorSatisfactionRow/MentorSatisfactionRow.tsx`:
- Line 20: Update the clampedRate calculation in MentorSatisfactionRow to
normalize satisfactionRate with Number.isFinite before applying the existing
0–100 clamp. Use an appropriate finite fallback so NaN and other non-finite
values cannot produce an invalid percentage or width.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 42fc1ec4-cd99-45c4-823d-f27ed8dd7a44

📥 Commits

Reviewing files that changed from the base of the PR and between ab4e20d and 00e1737.

⛔ Files ignored due to path filters (7)
  • src/assets/icons/generated/DashboardFigureIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/DashboardGraphIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/DashboardTimeIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/index.ts is excluded by !**/generated/**
  • src/assets/icons/svg-preserve/dashboard-figure.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg-preserve/dashboard-graph.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg-preserve/dashboard-time.svg is excluded by !**/*.svg, !**/*.svg
📒 Files selected for processing (15)
  • .coderabbit.yaml
  • src/assets/icons/svg-preserve/.gitkeep
  • src/components/mentoring/MentorSatisfactionRow/MentorSatisfactionRow.stories.tsx
  • src/components/mentoring/MentorSatisfactionRow/MentorSatisfactionRow.test.tsx
  • src/components/mentoring/MentorSatisfactionRow/MentorSatisfactionRow.tsx
  • src/components/mentoring/MentorSatisfactionRow/index.ts
  • src/components/mentoring/MentoringReviewRow/MentoringReviewRow.stories.tsx
  • src/components/mentoring/MentoringReviewRow/MentoringReviewRow.test.tsx
  • src/components/mentoring/MentoringReviewRow/MentoringReviewRow.tsx
  • src/components/mentoring/MentoringReviewRow/index.ts
  • src/components/mentoring/MentoringSummaryCard/MentoringSummaryCard.stories.tsx
  • src/components/mentoring/MentoringSummaryCard/MentoringSummaryCard.test.tsx
  • src/components/mentoring/MentoringSummaryCard/MentoringSummaryCard.tsx
  • src/components/mentoring/MentoringSummaryCard/index.ts
  • src/components/mentoring/index.ts
💤 Files with no reviewable changes (1)
  • src/assets/icons/svg-preserve/.gitkeep

Comment thread src/components/mentoring/MentoringReviewRow/MentoringReviewRow.tsx

function ParticipantMetaLabel({ name, role, generation, part }: ParticipantMeta) {
return (
<p className="text-label-14m text-label-netural flex items-center gap-1 whitespace-nowrap">

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- target file ---'
git ls-files 'src/components/mentoring/MentoringReviewRow/MentoringReviewRow.tsx' 'src/components/mentoring/MentoringSummaryCard.tsx' \
  'tailwind.config.*' 'src/**/tailwind.config.*' 'src/**/tokens*' 'src/**/theme*' | sed '/^$/d'

printf '\n%s\n' '--- MentoringReviewRow excerpt ---'
sed -n '1,120p' src/components/mentoring/MentoringReviewRow/MentoringReviewRow.tsx

printf '\n%s\n' '--- MentoringSummaryCard excerpt ---'
sed -n '1,140p' src/components/mentoring/MentoringSummaryCard.tsx

printf '\n%s\n' '--- search class names ---'
rg -n "text-label-(netural|neutral|assitive|assistive)|bg-fill-(netural|neutral)|border-line-(netural|neutral)|text-label-alternative" src tailwind.config.* 2>/dev/null || true

printf '\n%s\n' '--- possible tailwind config files ---'
fd -a 'tailwind.config.*|theme.*|tokens.*' . 2>/dev/null || true

Repository: kusitms-com/makers-admin-fe

Length of output: 3051


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Find the exact files and token definitions with minimal output.
git ls-files | rg '^(src/components/mentoring/(MentoringReviewRow|MentoringSummaryCard)/.*\.tsx|.*tailwind\.config\.(js|ts|cjs|mjs)|.*(tokens|theme).*\.(ts|js|tsx|json))$'

printf '\n[ReviewRow]\n'
sed -n '1,120p' src/components/mentoring/MentoringReviewRow/MentoringReviewRow.tsx

printf '\n[SummaryCard]\n'
sed -n '1,160p' src/components/mentoring/MentoringSummaryCard.tsx

printf '\n[Search]\n'
rg -n 'text-label-(netural|neutral|assitive|assistive)|bg-fill-(netural|neutral)|border-line-(netural|neutral)|text-label-alternative' src . -g '!node_modules' -g '!dist' -g '!build' || true

Repository: kusitms-com/makers-admin-fe

Length of output: 3358


text-label-netural/text-label-assitive/bg-fill-netural 오타 수정 23, 52, 57행의 클래스명이 토큰명과 달라 실제 스타일이 적용되지 않습니다. neutral/assistive로 맞춰 주세요.

🤖 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/components/mentoring/MentoringReviewRow/MentoringReviewRow.tsx` at line
23, Correct the misspelled Tailwind token classes in MentoringReviewRow,
including text-label-netural, text-label-assitive, and bg-fill-netural, to use
the established neutral and assistive spellings so the intended styles apply.

Comment thread src/components/mentoring/MentorSatisfactionRow/MentorSatisfactionRow.test.tsx Outdated
Comment thread src/components/mentoring/MentorSatisfactionRow/MentorSatisfactionRow.tsx Outdated
@github-actions

Copy link
Copy Markdown

CI 결과

항목 결과
TypeScript 🟢 통과
Prettier 🟢 통과
Generated 🟢 통과
ESLint 🟢 통과
Test 🟢 통과
Build 🟢 통과

@leemanjae02 leemanjae02 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

수고하셨습니다! 코멘트 남겨드렸으니 확인 부탁드려요 :)

Comment on lines +19 to +31
}: MentoringSummaryCardProps) {
const content = (
<div className="flex w-full flex-1 flex-col gap-9">
<div className="flex h-5 items-center justify-between">
<p className="text-label-14sb text-label-alternative">{label}</p>
{onClick && (
<ChevronRight className="text-label-alternative size-4 shrink-0" aria-hidden="true" />
)}
</div>
<div className="flex items-end justify-between">
<p className="text-pc-36b text-label-normal">{count}</p>
<div className="size-[58px] shrink-0">{icon}</div>
</div>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

props로 넘겨받는 아이콘이 장식용인데 스크린리더 무시 처리가 빠져 있어서 추가해주시면 더 좋을 것 같습니다!

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

넵 수정했습니다!

@github-actions

Copy link
Copy Markdown

CI 결과

항목 결과
TypeScript 🟢 통과
Prettier 🟢 통과
Generated 🟢 통과
ESLint 🟢 통과
Test 🟢 통과
Build 🟢 통과

@leemanjae02 leemanjae02 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

고생하셨어요👍💯

@KyeongJooni KyeongJooni merged commit 66fe479 into main Jul 15, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨Feature 새로운 기능

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] #21 - Dashboard 컴포넌트 제작

2 participants