Skip to content

feat: 스프린트 선택 필터 추가 및 SprintSelector공통화 - #81

Merged
Kwon812 merged 3 commits into
developfrom
feat/#79/progress-chart-sprint-filter
Jul 21, 2026
Merged

feat: 스프린트 선택 필터 추가 및 SprintSelector공통화#81
Kwon812 merged 3 commits into
developfrom
feat/#79/progress-chart-sprint-filter

Conversation

@Kwon812

@Kwon812 Kwon812 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Pull Request

작업 내용

  • 사이드 프로젝트 진행률 차트 페이지에 스프린트 선택 필터 추가
  • 스프린트 보드의 기존 선택기(SprintSelector, URL ?sprint=id 패턴)를 재사용
  • SprintSelectorentities/side-project/sprint로 승격해 두 뷰가 공유하도록 공통화

작업 결과

  • 진행률 차트 상단에서 스프린트를 직접 선택할 수 있고, 선택 시 상단 스탯·진행률 바·상태 도넛이 해당 스프린트 기준으로 갱신됨
  • 선택 상태가 URL(?sprint=id)에 반영되어 새로고침·공유 시에도 유지됨
  • 벨로시티 차트는 전체 스프린트 추이를 유지(선택과 무관)

변경 사항

Added

  • src/entities/side-project/sprint/ui/SprintSelector.tsx — 스프린트 선택기(엔티티 계층으로 승격, named export)
  • 진행률 라우트에 ?sprint=id searchParam 처리 추가

Changed

  • src/entities/side-project/sprint/index.tsSprintSelector export 추가
  • src/app/workspaces/[workspaceId]/progress-chart/page.tsxsearchParams에서 selectedSprintId 추출·전달
  • src/views/progress-chart/ui/ProgressChartPage.tsxselectedSprintId prop 스레딩(사이드 프로젝트 분기)
  • src/views/side-project/progress-chart/ui/ProgressChartView.tsx — 선택 스프린트 판정(find ?? resolveCurrentSprint) + SprintSelector 렌더
  • src/views/side-project/sprint-board/ui/SprintBoardView.tsx — 승격된 SprintSelector import 경로 변경

Fixed

실행화면

스크린샷 2026-07-21 오전 9 48 44

테스트

  • 로컬 실행 확인
  • 주요 시나리오 확인 (스프린트 전환 시 스탯/도넛 갱신, URL 반영)
  • 영향 범위 확인 (스프린트 보드 선택기 회귀 없음, 팀 프로젝트 진행률 무영향)
  • 타입 체크(tsc --noEmit) / 린트(eslint) 통과

리뷰 체크리스트

  • PR base branch가 올바릅니다. (feature/* -> develop, 배포 시 develop 또는 release/* -> main)
  • 브랜치명이 Type/#issue-number/description 형식을 따릅니다.
  • 커밋 메시지가 컨벤션을 따릅니다.
  • 불필요한 console.log, 주석, 임시 코드를 제거했습니다.
  • 타입 에러와 린트 에러를 확인했습니다.
  • CodeRabbit 1차 리뷰를 확인했습니다.
  • CodeRabbit 리뷰 반영 후 Discord에 공유했습니다.
  • 최소 1명 이상의 approve 후 merge합니다.

리뷰 요청사항

관련 이슈

Closes #79

Summary by CodeRabbit

  • 새로운 기능
    • 진행 차트에서 원하는 스프린트를 선택해 해당 스프린트의 데이터를 확인할 수 있습니다.
    • 선택한 스프린트가 없거나 유효하지 않으면 현재 스프린트가 자동으로 표시됩니다.
    • 스프린트 선택기가 진행 차트와 스프린트 보드에 일관되게 제공됩니다.

@vercel

vercel Bot commented Jul 21, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
syncly Ready Ready Preview, Comment Jul 21, 2026 1:15am

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in: 34 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: ASSERTIVE

Plan: Pro Plus

Run ID: b7732b01-1cae-40cc-8d73-1bdc54e00bb1

📥 Commits

Reviewing files that changed from the base of the PR and between 2c9f43a and bd3b70f.

📒 Files selected for processing (5)
  • src/app/workspaces/[workspaceId]/progress-chart/page.tsx
  • src/entities/side-project/sprint/index.ts
  • src/entities/side-project/sprint/model/sprint.selectors.ts
  • src/views/side-project/progress-chart/ui/ProgressChartView.tsx
  • src/views/side-project/sprint-board/ui/SprintBoardView.tsx
📝 Walkthrough

Walkthrough

진행률 차트 페이지가 URL의 sprint 값을 읽어 선택 스프린트로 전달합니다. 공용 SprintSelector를 사용해 스프린트를 선택하고, 선택값이 없거나 유효하지 않으면 현재 스프린트로 폴백합니다.

Changes

진행률 차트 스프린트 필터

Layer / File(s) Summary
공용 SprintSelector 노출 및 사용처 정리
src/entities/side-project/sprint/ui/SprintSelector.tsx, src/entities/side-project/sprint/index.ts, src/views/side-project/sprint-board/ui/SprintBoardView.tsx
SprintSelector를 named export로 전환하고 엔터티 퍼블릭 API를 통해 진행률 차트와 스프린트 보드에서 사용합니다.
URL 선택값 전달
src/app/workspaces/[workspaceId]/progress-chart/page.tsx, src/views/progress-chart/ui/ProgressChartPage.tsx
searchParams.sprintselectedSprintId로 변환해 진행률 차트 뷰까지 전달합니다.
선택 스프린트 판정 및 UI 렌더링
src/views/side-project/progress-chart/ui/ProgressChartView.tsx
선택된 스프린트를 우선 사용하고, 유효하지 않으면 현재 스프린트로 폴백하며 SprintSelector를 렌더링합니다.

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

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant WorkspaceProgressChartPage
  participant ProgressChartPage
  participant ProgressChartView
  participant SprintSelector
  Browser->>WorkspaceProgressChartPage: ?sprint=id 요청
  WorkspaceProgressChartPage->>ProgressChartPage: selectedSprintId 전달
  ProgressChartPage->>ProgressChartView: selectedSprintId 전달
  ProgressChartView->>SprintSelector: 스프린트 목록과 현재 선택 ID 전달
Loading

Possibly related PRs

  • TeampleRun/syncly#27: 스프린트 보드에서 URL 기반 스프린트 선택과 공용 SprintSelector 흐름을 추가한 변경입니다.
  • TeampleRun/syncly#40: 진행률 차트 페이지의 기존 구현을 추가한 변경으로, 이번 URL 파라미터 전달이 해당 구조를 확장합니다.

Suggested reviewers: seongjinss555

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 스프린트 필터 추가와 SprintSelector 공통화라는 주요 변경을 정확히 요약합니다.
Description check ✅ Passed 필수 섹션과 관련 이슈, 테스트, 변경 사항이 포함되어 템플릿을 대부분 충족합니다.
Linked Issues check ✅ Passed 스프린트 선택 필터, URL 반영, SprintSelector 공통화, 보조 경로 갱신이 이슈 #79 요구를 충족합니다.
Out of Scope Changes check ✅ Passed 변경은 진행률 차트와 SprintSelector 공통화 범위에 맞고 명백한 무관 변경은 보이지 않습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#79/progress-chart-sprint-filter

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.

@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: 1

Caution

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

⚠️ Outside diff range comments (1)
src/entities/side-project/sprint/ui/SprintSelector.tsx (1)

21-33: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

선택된 탭에 대한 웹 접근성(a11y) 속성 추가

스크린 리더 등의 보조 기기 사용자가 현재 선택된 스프린트를 명확히 인지할 수 있도록, 활성화된 링크에 aria-current="true" 속성을 추가하는 것을 권장합니다.

💡 제안하는 접근성 개선
           <Link
             key={sprint.id}
             href={`?sprint=${sprint.id}`}
             scroll={false}
+            aria-current={isActive ? 'true' : undefined}
             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/entities/side-project/sprint/ui/SprintSelector.tsx` around lines 21 - 33,
Update the active sprint Link in SprintSelector to expose its selected state to
assistive technologies by adding aria-current="true" only when isActive, while
leaving inactive links without the attribute.
🤖 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/views/side-project/progress-chart/ui/ProgressChartView.tsx`:
- Around line 41-46: Extract the duplicated selected-sprint resolution into a
shared sprint-entity selector, such as resolveSelectedSprint(sprints,
selectedSprintId), preserving the selected-ID lookup and the
in-progress-then-latest fallback. Replace the inline logic in
src/views/side-project/progress-chart/ui/ProgressChartView.tsx lines 41-46 and
src/views/side-project/sprint-board/ui/SprintBoardView.tsx lines 51-55 with the
shared function call, while retaining undefined during loading.

---

Outside diff comments:
In `@src/entities/side-project/sprint/ui/SprintSelector.tsx`:
- Around line 21-33: Update the active sprint Link in SprintSelector to expose
its selected state to assistive technologies by adding aria-current="true" only
when isActive, while leaving inactive links without the attribute.
🪄 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 Plus

Run ID: b018a735-cba2-4ab7-b666-44f63e48cded

📥 Commits

Reviewing files that changed from the base of the PR and between c7fff64 and 2c9f43a.

📒 Files selected for processing (6)
  • src/app/workspaces/[workspaceId]/progress-chart/page.tsx
  • src/entities/side-project/sprint/index.ts
  • src/entities/side-project/sprint/ui/SprintSelector.tsx
  • src/views/progress-chart/ui/ProgressChartPage.tsx
  • src/views/side-project/progress-chart/ui/ProgressChartView.tsx
  • src/views/side-project/sprint-board/ui/SprintBoardView.tsx

Comment on lines +41 to +46
// 선택값이 없거나 유효하지 않으면 데이터에서 현재 스프린트를 판정(진행 중 우선 → 없으면 최신).
// 로딩 중이면 undefined.
const sprint = sprintsQuery.data
? (sprintsQuery.data.find((item) => item.id === selectedSprintId) ??
resolveCurrentSprint(sprintsQuery.data))
: undefined;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

스프린트 판정 로직의 공통화 (DRY 원칙)

URL에서 전달받은 selectedSprintId로 스프린트를 찾고, 유효하지 않으면 현재 진행 중이거나 최신인 스프린트로 폴백하는 로직이 두 컴포넌트 간에 완전히 중복되어 있습니다. 향후 판정 로직 변경 시 유지보수를 원활하게 하기 위해, 해당 로직을 sprint 엔티티 내의 selector 함수(예: resolveSelectedSprint(sprints, selectedSprintId))로 분리하여 사용하는 것을 권장합니다.

  • src/views/side-project/progress-chart/ui/ProgressChartView.tsx#L41-L46: 중복된 판정 로직을 공통 함수 호출로 교체하세요.
  • src/views/side-project/sprint-board/ui/SprintBoardView.tsx#L51-L55: 중복된 판정 로직을 동일한 공통 함수 호출로 교체하세요.
📍 Affects 2 files
  • src/views/side-project/progress-chart/ui/ProgressChartView.tsx#L41-L46 (this comment)
  • src/views/side-project/sprint-board/ui/SprintBoardView.tsx#L51-L55
🤖 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/views/side-project/progress-chart/ui/ProgressChartView.tsx` around lines
41 - 46, Extract the duplicated selected-sprint resolution into a shared
sprint-entity selector, such as resolveSelectedSprint(sprints,
selectedSprintId), preserving the selected-ID lookup and the
in-progress-then-latest fallback. Replace the inline logic in
src/views/side-project/progress-chart/ui/ProgressChartView.tsx lines 41-46 and
src/views/side-project/sprint-board/ui/SprintBoardView.tsx lines 51-55 with the
shared function call, while retaining undefined during loading.

@seongjinss555 seongjinss555 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

고생하셨습니다~

@Kwon812
Kwon812 merged commit ea3aeed into develop Jul 21, 2026
2 of 3 checks passed
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.

feat: 진행률차트 스프린트별 필터기능 추가

2 participants