feat(web): 대시보드와 보관함의 확정 스케줄 달력 가독성 개선 - #104
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Walkthrough공유 확정 스케줄 캘린더를 추가하고, 대시보드·히스토리·스케줄 페이지의 일정 표시를 그룹형 UI로 바꿨다. 조직 폼은 운영 시간 입력을 Select로 전환했고, 조직 생성 검증과 저장 버튼 문구를 정리했다. Changes확정 스케줄 표시 재구성
조직 운영 시간 입력 및 문구 정리
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 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 `@apps/web/src/features/organization/components/organization-form.tsx`:
- Around line 34-48: TIME_OPTIONS is fixed to 30-minute slots, so existing saved
times like 09:15 cannot be rendered or re-saved in the organization form. Update
organization-form.tsx around TIME_OPTIONS and the SelectItem usage so the
current value is always included even if it is not on the 30-minute grid, or
else align the shared/API schema and validation to enforce 30-minute increments
everywhere. Make sure the form round-trips existing values in the organization
form component without breaking editability.
In
`@apps/web/src/features/schedule-history/components/mvp-schedule-history-page.tsx`:
- Around line 256-260: The `ConfirmedScheduleCalendar` instance in
`MvpScheduleHistoryPage` keeps its internal `selectedDate` state when
`selectedHistory` changes, so switching history can leave the detail modal open
or show stale selection data. Update the `ConfirmedScheduleCalendar` usage to
reset its identity when the history changes by adding a `key` derived from
`selectedHistory.id`, so the component remounts and clears its internal state on
each history switch.
In `@apps/web/src/features/schedules/components/confirmed-schedule-calendar.tsx`:
- Line 200: The span in confirmed-schedule-calendar uses an arbitrary Tailwind
typography value (`text-[11px]`) that violates the token-based styling
guideline; update the relevant JSX in the calendar component to use the default
scale (`text-xs`) instead, or if this exact size is reused elsewhere, promote it
to a shared token in globals.css and reference that token consistently.
🪄 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: 6e010e4a-3abc-4130-8d08-395e1486d2a0
📒 Files selected for processing (6)
apps/web/src/features/availability/components/mvp-availability-page.tsxapps/web/src/features/dashboard/components/mvp-dashboard-page.tsxapps/web/src/features/organization/components/mvp-organization-edit-page.tsxapps/web/src/features/organization/components/organization-form.tsxapps/web/src/features/schedule-history/components/mvp-schedule-history-page.tsxapps/web/src/features/schedules/components/confirmed-schedule-calendar.tsx
| const TIME_OPTION_STEP_MINUTES = 30; | ||
| const MINUTES_IN_DAY = 24 * 60; | ||
|
|
||
| const TIME_OPTIONS = Array.from( | ||
| { length: MINUTES_IN_DAY / TIME_OPTION_STEP_MINUTES }, | ||
| (_, index) => { | ||
| const minutes = index * TIME_OPTION_STEP_MINUTES; | ||
| const hour = Math.floor(minutes / 60); | ||
| const minute = minutes % 60; | ||
| const value = `${String(hour).padStart(2, "0")}:${String(minute).padStart(2, "0")}`; | ||
|
|
||
| return { label: value, value }; | ||
| }, | ||
| ); | ||
|
|
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
기존 저장 운영 시간이 편집 불가능해질 수 있습니다.
Line 37의 TIME_OPTIONS가 30분 단위로만 고정되면서, 기존 input[type="time"]나 API를 통해 저장된 09:15 같은 값은 수정 화면에서 SelectItem으로 표현되지 않습니다. 이 PR은 shared/API 스키마를 바꾸지 않았기 때문에, 현재는 합법적인 저장값을 웹 폼이 round-trip 하지 못하는 상태입니다.
최소한 기존 값이 옵션에 없으면 임시로 주입해서 표시·재저장 가능하게 하거나, 30분 제한을 도입하려면 shared schema/API validation/backfill까지 같이 맞춰야 합니다.
가능한 국소 수정 예시
const TIME_OPTIONS = Array.from(
{ length: MINUTES_IN_DAY / TIME_OPTION_STEP_MINUTES },
(_, index) => {
const minutes = index * TIME_OPTION_STEP_MINUTES;
const hour = Math.floor(minutes / 60);
const minute = minutes % 60;
const value = `${String(hour).padStart(2, "0")}:${String(minute).padStart(2, "0")}`;
return { label: value, value };
},
);
+
+function getTimeOptions(currentValue?: string | null) {
+ if (!currentValue || TIME_OPTIONS.some((option) => option.value === currentValue)) {
+ return TIME_OPTIONS;
+ }
+
+ return [...TIME_OPTIONS, { label: currentValue, value: currentValue }].sort((a, b) =>
+ a.value.localeCompare(b.value),
+ );
+}- {TIME_OPTIONS.map((option) => (
+ {getTimeOptions(field.value).map((option) => (
<SelectItem key={option.value} value={option.value}>
{option.label}
</SelectItem>
))}As per path instructions, "SPEC의 입력 검증(필수값, 이메일 형식, 비밀번호 확인, 날짜 범위, 시작/종료 시간, 1명 이상/1 이상의 숫자)을 UI와 schema가 함께 처리하는지 확인".
Also applies to: 221-263
🤖 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 `@apps/web/src/features/organization/components/organization-form.tsx` around
lines 34 - 48, TIME_OPTIONS is fixed to 30-minute slots, so existing saved times
like 09:15 cannot be rendered or re-saved in the organization form. Update
organization-form.tsx around TIME_OPTIONS and the SelectItem usage so the
current value is always included even if it is not on the 30-minute grid, or
else align the shared/API schema and validation to enforce 30-minute increments
everywhere. Make sure the form round-trips existing values in the organization
form component without breaking editability.
Source: Path instructions
There was a problem hiding this comment.
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 `@apps/web/src/features/schedules/components/mvp-schedules-page.tsx`:
- Around line 1091-1095: The worker preview text in mvp-schedules-page should
stop using the arbitrary `text-[11px]` Tailwind value and switch to the closest
default scale token instead. Update the `getWorkerNamesPreview` label span in
the schedules page so it uses a standard typography utility consistent with the
rest of the file’s Tailwind token rules, avoiding file-local pixel sizing.
- Around line 615-617: The selected-date detail list is re-filtering the
original unfilledConditions array, so it can lose the timeRange ordering already
applied in groupUnfilledConditionsByDate(). Update mvp-schedules-page.tsx to
reuse the grouped/sorted data for selectedDateUnfilledConditions instead of
filtering the raw list, using the existing groupUnfilledConditionsByDate logic
and the selectedDate branch so the summary and detail panels stay in the same
order.
🪄 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: 943960d8-9147-4d90-aef6-623939e2e4b8
📒 Files selected for processing (4)
apps/api/test/organization.routes.test.tsapps/web/src/features/schedule-history/components/mvp-schedule-history-page.tsxapps/web/src/features/schedules/components/confirmed-schedule-calendar.tsxapps/web/src/features/schedules/components/mvp-schedules-page.tsx
개요
대시보드와 보관함의 확정 스케줄 달력 가독성을 개선하고, 조직 운영 시간 입력을 30분 단위 선택 UI로 변경합니다.
변경 사항
최근 확정 스케줄,확정 스케줄 기록으로 정리저장으로 간결화변경 유형
feat— 새로운 기능영향 범위
web—apps/web테스트 방법
corepack pnpm --filter @fragment/web lintcorepack pnpm --filter @fragment/web typecheckcorepack pnpm --filter @fragment/web test체크리스트
packages/shared) 업데이트 (타입 변경 없음)리뷰 포인트
Summary by CodeRabbit
New Features
Bug Fixes