[FIX] AI 추천 시간 입력이 트리거와 전송 데이터에 즉시 반영되지 않던 문제 수정 - #193
Conversation
- TimeSelector 입력값을 h:mm(시:분)으로 해석해 트리거 라벨(timeDisplay)에 즉시 반영했습니다 - 입력값을 초 단위로 환산한 뒤 서버 전송용 총분:초 포맷으로 변환해 duration 필드에 저장했습니다
- 실제로는 시:분을 입력받는 필드인데 분/초로 잘못 표기되어 있던 aria-label을 수정했습니다
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reached
Next review available in: 46 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
✨ 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 |
Timo Performance ReportBundle Size — timo-web
Lighthouse — timo-web
Image Optimization — timo-web
측정 커밋: |
- 여러 줄로 늘어져 있던 JSDoc·인라인 주석을 한 줄 요약으로 축약했습니다
ISSUE 🔗
close #192
What is this PR? 🔍
Todo 생성 모달의 시간 선택기(TimeSelector)에서 직접 시간을 입력해도 트리거 라벨과 실제 전송되는 duration 값이 갱신되지 않던 문제를 수정했습니다.
배경
TimeSelector의 두 입력창은시:분(h:mm)을 그대로 편집하는 컨트롤인데,useTimeField훅은 여기에 넘기는 값을 서버 전송용총분:초포맷(예:"90:00")으로 그대로 넘기고 있었습니다.90/00처럼 의도와 다른 숫자가 채워졌고,00:03처럼 짧은 값을 입력하면 내부적으로 "0분 3초"(3초)로 저장되면서, 트리거 라벨은h:mm단위만 표시하는formatDurationAsClockLabel을 거쳐 항상0:00으로 보였습니다. 즉 아무리 입력해도 트리거가 반영되지 않는 것처럼 보였습니다.시:분(h:mm)표기로 통일하고, 서버 전송 직전에만총분:초포맷으로 변환하도록 데이터 흐름을 분리했습니다.use-time-field
handleDurationInputChange가 입력값을h:mm으로 해석해 트리거 라벨(timeDisplay)에 즉시 반영하도록 수정했습니다.mm:ss(서버 포맷)로 취급해 저장했기 때문에,h:mm기준으로 그리는 트리거 라벨과 단위가 어긋나 사용자가 입력한 값이 반영되지 않는 것처럼 보였습니다.h:mm문자열을formatDurationInput으로 정제한 뒤 그대로timeDisplay에 반영합니다. 이어서 시(hour)·분(minute)을 초 단위로 환산(hours * SECONDS_PER_HOUR + minutes * SECONDS_PER_MINUTE)하고,convertSecondsToApiDuration으로 서버가 요구하는총분:초포맷으로 변환해field.onChange에 전달합니다. 훅이 반환하는duration(TimeSelector의timeprop)도recommendedDuration ?? field.value(서버 포맷) 대신timeDisplay(h:mm)로 바꿔, 트리거 라벨과 입력창이 항상 같은 값을 보도록 통일했습니다.applyRecommendedDuration)과 프리셋 선택(handleSelectTime)은 기존에도formatDurationAsClockLabel로 서버 포맷 → h:mm 변환을 거치고 있어 이번 변경과 자연스럽게 맞물립니다. Detail(수정) 모달의use-detail-todo-form.ts는 이번 버그의 재현 경로가 아니고 별도 제출 로직도 아직 연결되어 있지 않아 이번 PR 범위에서 제외했습니다.TimeSelector (design-system)
aria-label을 "분/초"에서 실제 의미인 "시간/분"으로 수정했습니다.h:mm이었지만 접근성 라벨은 "분/초"로 잘못 표기되어 있어, 스크린 리더 사용자에게 잘못된 정보를 제공하고 있었습니다.aria-label문자열만 "예상 시간(시간) 입력", "예상 시간(분) 입력"으로 수정했습니다.To Reviewers
useTimeField가 반환하는duration필드의 의미를 "서버 전송 포맷"에서 "트리거/입력창 표시용 h:mm"으로 바꿨습니다. 현재 소비처는CreateTodoModalContent.tsx의time={timeField.duration}한 곳뿐이라 영향 범위는 작지만, 이름이 여전히duration이라 향후 헷갈릴 수 있어 참고해 주세요.Detail(수정) 모달 쪽
use-detail-todo-form.ts는 이미time필드를 h:mm으로 다루고 있어 이번 버그가 재현되지 않았고, 아직 실제 제출 로직에 연결되어 있지 않아 이번 PR에서 함께 손대지 않았습니다.Screenshot 📷
Test Checklist ✔
pnpm check-types통과pnpm lint통과pnpm build통과