Skip to content

[FEAT] 개인 캘린더 — 상세 조회 리스트 아이템 마커 정렬 · 완료 상태 라벨 #133 - #135

Merged
hyun030514 merged 6 commits into
developfrom
fix/calendar-list-item-align#133
Aug 5, 2026
Merged

hyun030514 merged 6 commits into
developfrom
fix/calendar-list-item-align#133

Conversation

@CallmeEterHist

@CallmeEterHist CallmeEterHist commented Aug 5, 2026 •

Copy link
Copy Markdown
Member

📋 PR 타입

  • design — UI/UX 변경

🗂 작업 영역

  • 워크벤치 — 회의 · 캡처 · AI검토 · 회의실

🙋 관련 역할

  • 공통

📝 작업 내용

  • src/features/calendar/components/calendar-event-list-item.tsx:
    • 체크박스/색점을 size-4 고정 폭 컨테이너로 감싸 정렬 통일
    • 진행중(초록)/완료(보라) 상태 배지 추가(--status-progress/--status-done 토큰)

✅ 작업 체크리스트

기본

  • 브랜치 명명 규칙 준수 (fix/calendar-list-item-align#{이슈번호} 꼴, base develop)
  • 커밋 컨벤션 준수 (type: 제목 #{이슈번호})
  • 아래 Closes # 에 이슈 번호 기입
  • 불필요한 console · 주석 처리된 코드 제거
  • 민감 정보 없음

Z 필수

  • 🔐 권한 2축 검사 — 해당 없음
  • 🧬 zod — 해당 없음
  • 🕵️ 정직성 — 해당 없음
  • 🎨 디자인 토큰 사용 — 새 hex 없이 기존 --status-* 토큰만 재사용, 다크/라이트 자동 대응

품질

  • ⚡ 최적화 — 해당 없음
  • ♿ a11y — 체크박스 aria-label 유지, 배지는 텍스트라 스크린리더가 그대로 읽음
  • ♻️ 재사용 확인 — system 도메인의 StatusBadge와 같은 raw span + 시맨틱 토큰 방식 재사용
  • 🧪 기존 테스트(26개) 회귀 없음 확인
  • 브라우저 전용 API — 해당 없음

🔗 연관 이슈

Closes #133


📸 스크린샷 (선택)

Before After

💬 리뷰 포인트

  • 상태 배지 위치(카드 오른쪽 끝)가 디자인 톤에 맞는지, 다른 자리(제목 아래 등)가 더 나을지

📝 추가 메모

없음

Summary by CodeRabbit

  • 개선 사항
    • 캘린더 이벤트 목록의 제목 정렬이 일관되게 개선되었습니다.
    • 이벤트 태그 옆에 완료 또는 진행 중 상태 배지가 표시됩니다.
    • 작은 화면에서 캘린더와 상세 패널이 세로로 배치됩니다.
    • 상세 일정 목록에 추가 내용이 있을 때 스크롤 안내가 표시됩니다.
    • 월 이름과 탐색 버튼 표시가 안정적으로 개선되었습니다.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in: 9 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: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ae8f7702-1f9c-46b3-bda6-a4ce26ced4b4

📥 Commits

Reviewing files that changed from the base of the PR and between 2561448 and b50c701.

📒 Files selected for processing (1)
  • src/app/(shell)/app/me/page.tsx
📝 Walkthrough

Walkthrough

캘린더 이벤트 목록에 완료 상태 라벨과 정렬 보정이 추가됐다. 날짜 상세 패널과 보드는 화면 크기에 따라 배치가 바뀐다. 월 라벨, 체크박스, 세그먼트 스타일, 테스트용 ResizeObserver도 변경됐다.

Changes

캘린더 UI 개선

Layer / File(s) Summary
이벤트 상태 표시
src/features/calendar/types.ts, src/features/calendar/components/calendar-event-list-item.tsx
완료 상태 라벨 상수와 반환 함수를 추가했다. 이벤트 목록 항목은 체크박스와 색상 점을 고정 폭 안에 배치하고, 상태 배지를 표시한다.
반응형 캘린더 레이아웃
src/features/calendar/components/calendar-board.tsx, src/features/calendar/components/calendar-day-detail-panel.tsx, jest.setup.ts
보드와 상세 패널의 배치를 화면 크기에 따라 분기했다. 상세 패널은 목록 오버플로를 감지하고, 하단 그라데이션 오버레이를 조건부로 렌더링한다. 테스트 환경에는 ResizeObserver 폴리필을 추가했다.
월 라벨과 체크박스
src/features/calendar/components/calendar-toolbar.tsx, src/components/ui/checkbox.tsx
월 라벨을 날짜에서 생성하도록 바꿨다. 체크박스는 명시적 props 타입과 className 처리 분기를 사용한다.
캘린더 세그먼트 스타일
src/features/calendar/components/personal-calendar.css
.rbc-row-segment의 좌우 패딩을 제거했다.

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

Possibly related PRs

Suggested reviewers: zana0422-creator

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning 툴바 월 라벨 변경과 패널·보드의 반응형 및 오버플로 개선은 [#133]의 직접 요구사항에 포함되지 않습니다. 툴바 월 라벨과 반응형·오버플로 변경을 별도 PR로 분리하거나 [#133]의 범위에 명시하세요.
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 제목은 리스트 아이템 마커 정렬과 완료 상태 라벨이라는 주요 변경을 정확히 설명합니다.
Linked Issues check ✅ Passed 체크박스와 색점을 고정 폭으로 정렬하고 Todo·액션에 진행중·완료 라벨을 추가해 [#133]의 요구사항을 충족합니다.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/calendar-list-item-align#133

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

@CallmeEterHist
CallmeEterHist marked this pull request as draft August 5, 2026 13:57

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

🤖 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/features/calendar/components/calendar-event-list-item.tsx`:
- Line 64: Move the completed and in-progress status values and their Korean
labels into an `as const` status constant and label map under `constants/`, then
update the `CalendarEventListItem` rendering to reference that map instead of
hardcoded strings. Preserve the current labels and conditional behavior.
- Around line 57-61: Update CalendarEventListItem to stop hardcoding the status
badge text and route both completed/in-progress labels through an as const label
map, following the existing CALENDAR_ITEM_TAG_LABEL pattern. Define a dedicated
status label constant near the current badge logic and replace the literal “완료”
and “진행중” values with lookups from that map, keeping the existing
event.isCompleted styling and display flow unchanged.
🪄 Autofix

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: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8cea9a5f-687b-455f-8960-2f5c1a9641c6

📥 Commits

Reviewing files that changed from the base of the PR and between c353cf2 and f06747b.

📒 Files selected for processing (1)
  • src/features/calendar/components/calendar-event-list-item.tsx

: "bg-status-progress/12 text-status-progress",
)}
>
{event.isCompleted ? "완료" : "진행중"}

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 | 🟠 Major | ⚡ Quick win

상태 라벨을 상수 라벨 맵으로 이동하세요.

"완료"와 "진행중"을 컴포넌트에 직접 하드코딩했습니다. constants/에 as const 상태 값과 라벨 맵을 정의하고 컴포넌트에서는 해당 맵을 참조하세요. 상태 라벨이 다른 표시 위치와 분리되는 것을 방지할 수 있습니다.

As per coding guidelines: src/**/*.{ts,tsx}에서는 as const 값과 라벨 맵을 사용하고 표시 라벨을 하드코딩하지 않아야 합니다.

🤖 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/calendar/components/calendar-event-list-item.tsx` at line 64,
Move the completed and in-progress status values and their Korean labels into an
`as const` status constant and label map under `constants/`, then update the
`CalendarEventListItem` rendering to reference that map instead of hardcoded
strings. Preserve the current labels and conditional behavior.

Source: Coding guidelines

@CallmeEterHist
CallmeEterHist marked this pull request as ready for review August 5, 2026 14:20

@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

🧹 Nitpick comments (1)
src/features/calendar/types.ts (1)

22-30: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

UI 라벨 상수를 constants/로 이동하세요.

CALENDAR_COMPLETION_LABEL과 getCalendarCompletionLabel은 타입이 아니라 런타임 표시값입니다. 현재 types.ts에 두면 타입 정의와 UI 상수가 같은 모듈에 섞입니다. 해당 기능의 constants/ 모듈로 이동하고 types.ts에는 타입 정의만 남겨 주세요.

As per coding guidelines: 도메인 값 목록은 constants/에 정의해야 합니다.

🤖 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/calendar/types.ts` around lines 22 - 30, Move the runtime UI
label constant CALENDAR_COMPLETION_LABEL and helper getCalendarCompletionLabel
from types.ts into the feature’s constants module, then update all imports to
use the new module. Leave types.ts containing only type definitions and preserve
the existing labels and helper behavior.

Source: Coding guidelines

🤖 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/ui/checkbox.tsx`:
- Around line 8-15: Update Checkbox so className handling supports the
state-function form accepted by CheckboxPrimitive.Root.Props: resolve the
incoming className function using the primitive’s state before passing its
returned value to cn, while preserving direct string/class values and the
existing styling.

In `@src/features/calendar/components/calendar-day-detail-panel.tsx`:
- Around line 39-55: The bottom gradient overlay in calendar-day-detail-panel is
rendered unconditionally, so update the CalendarDayDetailPanel flow to show it
only when the event list actually overflows. Use the existing list container in
the component and gate the overlay render on the scroll state of the ul by
checking scrollHeight, clientHeight, and scrollTop so it appears only when more
content remains below. Keep the CalendarEventListItem rendering unchanged and
ensure the overlay does not cover short, non-scrollable lists or persist after
scrolling to the end.
- Line 26: Update the aside element’s responsive width classes so the default
mobile layout is not constrained by max-w-[230px]. Move that constraint to
lg:max-w-[230px], preserving the existing desktop width behavior and the
surrounding CalendarBoard layout.

In `@src/features/calendar/components/calendar-toolbar.tsx`:
- Line 39: Update the month-label <p> element containing monthLabel in the
calendar toolbar to include the shrink-0 utility alongside w-28, preserving its
fixed width and button positioning on narrow viewports.

---

Nitpick comments:
In `@src/features/calendar/types.ts`:
- Around line 22-30: Move the runtime UI label constant
CALENDAR_COMPLETION_LABEL and helper getCalendarCompletionLabel from types.ts
into the feature’s constants module, then update all imports to use the new
module. Leave types.ts containing only type definitions and preserve the
existing labels and helper behavior.
🪄 Autofix

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: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 52e70549-8fd2-4a93-b24f-f66c94db01a1

📥 Commits

Reviewing files that changed from the base of the PR and between f06747b and 0bcf6d4.

📒 Files selected for processing (7)
  • src/components/ui/checkbox.tsx
  • src/features/calendar/components/calendar-board.tsx
  • src/features/calendar/components/calendar-day-detail-panel.tsx
  • src/features/calendar/components/calendar-event-list-item.tsx
  • src/features/calendar/components/calendar-toolbar.tsx
  • src/features/calendar/components/personal-calendar.css
  • src/features/calendar/types.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/features/calendar/components/calendar-event-list-item.tsx

Comment thread src/components/ui/checkbox.tsx Resolved

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

확인했습니다.

@hyun030514
hyun030514 merged commit d90867c into develop Aug 5, 2026
2 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in Z Aug 5, 2026
@hyun030514 hyun030514 changed the title [FEAT] 개인 캘린더 — 상세조회 리스트 아이템 마커 정렬 · 완료 상태 라벨 #133 [FEAT] 개인 캘린더 — 상세 조회 리스트 아이템 마커 정렬 · 완료 상태 라벨 #133 Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[FEAT] 개인 캘린더 — 상세조회 리스트 아이템 마커 정렬 · 완료 상태 라벨

2 participants