[RELEASE] v0.0.3#260
Conversation
- 캘린더 연동/해제/인증 관련 엔드포인트 및 모델을 추가했습니다 - 기존 엔드포인트 파일들을 최신 스펙으로 재생성했습니다
- 캘린더 OAuth 콜백 페이지를 추가했습니다 - 콜백에서 code/state로 캘린더 연동 API를 호출하고 프로필 쿼리를 갱신했습니다 - 온보딩 캘린더 연동 버튼에 authorize API 호출 및 리다이렉트 로직을 연결했습니다 - 설정 페이지 캘린더 연동 버튼에 authorize API 호출 및 리다이렉트 로직을 연결했습니다 - localStorage의 calendarConnectOrigin 값으로 OAuth 완료 후 이동 경로를 구분했습니다
…to feat/web/187-google-calendar-api-integration
…e-calendar-api-integration
…e-calendar-api-integration
- pnpm gen:api 재생성 반영 - CalendarEventsResponse 로컬 zod 스키마 및 타입 추가 (schemas/calendar) - useCalendarEventsQuery 훅 추가 (DAY/WEEK/TWO_WEEK 필터 지원) - HomeTodoContainer: 홈 뷰 필터에 따라 WEEK/TWO_WEEK로 캘린더 이벤트 조회 후 일별 렌더링 - TodayTodoListContainer: DAY 필터로 오늘 캘린더 이벤트 조회 후 렌더링 - CalendarEventItem 컴포넌트 추가 - 구글 캘린더 연동 해제 확인 모달(SettingsCalendarDisconnectModalContainer) 적용 - 캘린더 연동/해제 실패 토스트 처리 추가 - focus 엔드포인트 응답 구조 변경 반영 (BaseResponse 래퍼 제거) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- OverlayModal에 Modal 컴포넌트와 동일한 스택 기반 z-index 로직을 적용했습니다 - 정적인 z-40/z-50 클래스를 acquireModalStackIndex 기반 동적 z-index로 교체했습니다
- HomeCalendarEventCard, TodayCalendarEventCard 컴포넌트를 추가했습니다 - CalendarEventItem 컴포넌트를 삭제했습니다 - 캘린더 이벤트 체크박스 상태를 컨테이너로 리프팅했습니다 - completedCount와 totalCount 계산에 캘린더 이벤트를 포함했습니다 - 캘린더 연결 해제 시 이벤트 쿼리 캐시를 제거했습니다
- 캘린더 이벤트 key와 체크 상태를 index 대신 title 기반으로 변경했습니다 - SettingsCalendarDisconnectModal을 _components로 이동하고 Container suffix를 제거했습니다 - isCalendarErrorToastOpen을 isCalendarDisconnectErrorToastOpen으로 이름을 변경했습니다 - CalendarConnectStepContainer의 불필요한 useState를 상수로 변경했습니다 - TodayCalendarEventCard의 hover 상태를 Tailwind CSS group-hover로 변경했습니다
- 제목·서브태스크·메모의 줄바꿈을 wrap-break-word에서 wrap-anywhere로 교체해, 공백 없는 긴 텍스트가 flex 아이템의 자동 최소 너비를 부풀려 카드가 타이머 패널 뒤로 사라지는 문제를 해결했습니다 - 메모 영역에 max-h-[40vh]와 세로 스크롤을 추가해 긴 메모가 페이지 전체 높이를 늘리지 않도록 했습니다
- 온보딩 박스 크기를 w-108, h-153.5로 고정했습니다 - 로그인 페이지 약관 문구의 줄바꿈을 수정했습니다
- Home/Today 탭과 사이드바 타이머에서 재생·일시정지·재개·완료·정지 시 집중 페이지 쿼리를 함께 invalidate하도록 했습니다 - 집중 페이지에서 완료·서브태스크 변경 시 Today 탭과 할 일 수정 모달 쿼리를 함께 invalidate하도록 했습니다 - 할 일 수정 모달에서 수정·삭제 시 집중 페이지 쿼리를 함께 invalidate하도록 했습니다
- 투두 카드 날짜 형식을 M/D에서 YY.MM.DD로 변경했습니다 - 투두 카드 툴바에서 휴지통 아이콘을 제거했습니다
- PillButton에 gray-dark variant를 추가했습니다 - Integrate 상태에서는 blue, Disconnect 상태에서는 gray-dark로 변경했습니다
- 4개 파일에 중복 정의돼 있던 invalidateTodayView/invalidateFocusTodo를 useTimerQueryInvalidation 훅으로 통합했습니다
- 이벤트 식별자를 title 단독에서 title-index composite key로 변경했습니다 - 동일 제목 일정이 여러 개일 때 각각 독립적으로 체크 상태를 관리합니다 - React 중복 key 경고를 해소했습니다
- new Date(todo.date)는 UTC 기준으로 해석되어 KST에서 하루 밀리는 버그가 있었습니다 - parseDateKey를 사용해 로컬 시간 기준으로 파싱하도록 수정했습니다
- overflow-x-auto 컨테이너의 pb 클립 이슈로 인해 상위 section에 pb-3 적용 - 스크롤 컨테이너 내부의 pb-2 제거 - 설정 약관 페이지 하단에 pb-12.5 추가 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 태그/시간/우선순위/반복 드롭다운이 항목 클릭 즉시 닫히지 않고, 실제로 닫힐 때만 선택이 반영되도록 draft 상태와 closeOnSelect={false}를 적용했습니다
- 반복 셀렉터 화살표(chevron) 회전 방향이 반대로 되어 있던 것을 수정했습니다
- 시간 드롭다운이 열려 있는 상태에서 AI 추천 응답이 도착해도 draft 상태가 갱신되지 않아 선택 표시가 안 되던 것을 수정했습니다
- RepeatSelector의 onWeekdayToggle(id) prop이 onWeekdaysChange(weekdayIds[])로 바뀜에 따라 소비 측 핸들러를 갱신했습니다
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 날짜 변경 PATCH 성공 후에도 예전 날짜로 상세를 재조회해 404가 발생하던 것을, 성공 시점에 조회 기준 날짜를 함께 갱신하도록 수정했습니다 - 날짜 변경으로 쿼리 키가 바뀌는 동안 데이터가 잠깐 사라져 모달이 깜빡이던 것을 keepPreviousData로 방지했습니다
- 타이틀 입력을 textarea에서 input으로 바꿔 줄바꿈 없이 가로로만 입력되게 하고, Enter 입력 시 첫 하위 태스크로 포커스가 이동하도록 했습니다 - 태그 추가 모달에서 새 태그를 만들면 PATCH 성공 후 로컬 상태에 반영되도록 연동했습니다 - 하위 태스크 완료 토글을 기존의 전체 하위 태스크 배열 PATCH 방식 대신 전용 상태 변경 API로 호출하도록 변경했습니다 - 하위 태스크 입력의 값(value) 타입을 훅이 아닌 프레젠테이션 컴포넌트(DetailTodoTaskFields)가 소유하도록 옮겼습니다
- 타이틀 입력을 textarea에서 input으로 바꿔 줄바꿈 없이 가로로만 입력되게 했습니다 - Enter 입력 시 개행 대신 첫 번째 하위 태스크 입력창으로 포커스가 이동하도록 했습니다
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[FEAT] robots.txt·sitemap.xml SEO 라우트 설정
- 타이머 시작 API에 추가된 date 쿼리 파라미터를 반영하도록 orval 코드를 재생성했습니다 - Home/Today/Focus에서 타이머를 시작할 때 재생한 카드의 날짜를 함께 전송하도록 수정해, 반복 투두를 오늘이 아닌 날짜에서 재생해도 해당 날짜에 정확히 귀속되도록 했습니다
- Today 카드에서 서브태스크를 완료 토글한 직후 상세 모달을 열면, 모달의 첫 조회가 완료 처리 요청보다 먼저 끝나 옛 데이터로 폼이 초기화되는 문제가 있었습니다 - useDetailSubtaskField의 subtaskInputs가 마운트 시 한 번만 초기화되고 이후 재동기화되지 않아, 서버 데이터가 나중에 갱신되어도 체크박스가 계속 옛 값에 머물렀습니다 - 서버에서 받아온 subtasks가 바뀔 때 완료 여부만 로컬 폼 상태에 재동기화하는 effect를 추가했습니다
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[FIX] 영어 환경 태그 생성 제한 오류 수정
- 체크박스가 checked 상태일 때만 렌더링되는 체크마크 아이콘이 SVGElement라서 HTMLElement의 인스턴스가 아니었습니다 - isInteractiveElement가 target instanceof HTMLElement로 검사해, 체크 해제를 위해 체크마크를 직접 클릭하면 인터랙티브 요소로 인식하지 못하고 카드 클릭(상세 모달 오픈)으로 새어나갔습니다 - instanceof Element로 변경해 HTML/SVG 요소 모두 정상적으로 감지하도록 했습니다
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…pi-integration [FEAT] 구글 캘린더 연동 구현
[FIX] Today 카드 서브태스크 완료가 상세 모달에 재동기화되지 않는 문제 수정
…date-attribution [FIX] 반복 투두를 오늘이 아닌 날짜에서 재생해도 해당 날짜에 귀속되도록 수정
- 완료 모달에 전달되는 계획 시간에서 연장 시간을 제외했습니다 - Focus/사이드바는 타이머 서클 라벨(연장 포함 유지)과 완료 모달(계획만) 값을 분리했습니다
- 실제 응답은 여전히 BaseResponse로 감싸져 있는데 이전 재생성에서 래퍼 없는 타입으로 잘못 바뀌어 있던 것을 실제 동작 기준으로 복원했습니다
…nned-seconds [FIX] 포커스 스키마 업데이트 반영 및 모달 완료 계획 시간 수정
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedToo many files! This PR contains 83 files, which is 33 over the limit of 50. To get a review, narrow the scope: Upgrade to a paid plan to raise the limit. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (34)
📒 Files selected for processing (83)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ 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
측정 커밋: |
What's Changed
Full Changelog: v0.0.2.1...v0.0.3