Skip to content

206 reservation mobile#232

Open
youngjjju wants to merge 9 commits intomainfrom
206-reservation-mobile
Open

206 reservation mobile#232
youngjjju wants to merge 9 commits intomainfrom
206-reservation-mobile

Conversation

@youngjjju
Copy link
Collaborator

@youngjjju youngjjju commented Oct 4, 2025

🚀 작업 내용

자원예약 페이지의 모바일 UI를 어느정도 완성하였습니다.

📸 스크린샷(선택)

image image

🔗 관련 이슈

close #206

🙏 리뷰어에게

UI를 어느정도 갖춰놓은 상태이고, 이후에 백엔드가 어느정도 완성되면 데이터를 가져와서 표시하는 로직을 완성하려 합니다.
'나의 예약현황'은 데이터를 Fetch 해오기만 하면 바로 완성되는 상태입니다
Add Schedule을 하는 과정과, 이를 백앤드에 보낸 뒤 다시 fetch해오는 과정은 아직 완성되지 않았습니다.
일단 컴포넌트 UI를 반영하는 이슈를 빠르게 중간고사 전까지 처리하려고 노력하고, 그 컴포넌트들을 가지고 Add Schedule까지 완성하겠습니다.

✅ 체크리스트

  • ✅ conventional commits 형식을 따르는 title을 작성했습니다.
  • ✅ 적절한 label을 1개 이상 추가했습니다.
  • ✅ 관련 이슈가 연결되었습니다.

@youngjjju youngjjju added 💻 Frontend - 반응형 반응형 UI 작업 Frontend - Component 컴포넌트 관련 작업 labels Oct 4, 2025
@manamana32321
Copy link
Collaborator

브라우저 에러 확인해주셔요!
image

Warning: Encountered two children with the same key, `T`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version.
    at div
    at div
    at MobileCalendarField (webpack-internal:///(app-pages-browser)/./app/(general)/(light)/reservations/_components/MobileCalendarField/index.tsx:17:11)
    at div
    at div
    at ReservationPage (webpack-internal:///(app-pages-browser)/./app/(general)/(light)/reservations/clubroom/page.tsx:43:94)
    at ClientPageRoot (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/client-page.js:14:11)
    at InnerLayoutRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:243:11)
    at RedirectErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:74:9)
    at RedirectBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:82:11)
    at NotFoundBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/not-found-boundary.js:84:11)
    at LoadingBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:349:11)
    at ErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/error-boundary.js:160:11)
    at InnerScrollAndFocusHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:153:9)
    at ScrollAndFocusHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:228:11)
    at RenderFromTemplateContext (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/render-from-template-context.js:16:44)
    at OuterLayoutRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:370:11)
    at InnerLayoutRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:243:11)
    at RedirectErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:74:9)
    at RedirectBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:82:11)
    at NotFoundBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/not-found-boundary.js:84:11)
    at LoadingBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:349:11)
    at ErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/error-boundary.js:160:11)
    at InnerScrollAndFocusHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:153:9)
    at ScrollAndFocusHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:228:11)
    at RenderFromTemplateContext (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/render-from-template-context.js:16:44)
    at OuterLayoutRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:370:11)
    at InnerLayoutRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:243:11)
    at RedirectErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:74:9)
    at RedirectBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:82:11)
    at NotFoundBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/not-found-boundary.js:84:11)
    at LoadingBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:349:11)
    at ErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/error-boundary.js:160:11)
    at InnerScrollAndFocusHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:153:9)
    at ScrollAndFocusHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:228:11)
    at RenderFromTemplateContext (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/render-from-template-context.js:16:44)
    at OuterLayoutRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:370:11)
    at main
    at div
    at RootHeaderAndFooterWrapper (Server)
    at RootLayout (Server)
    at InnerLayoutRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:243:11)
    at RedirectErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:74:9)
    at RedirectBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:82:11)
    at NotFoundErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/not-found-boundary.js:76:9)
    at NotFoundBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/not-found-boundary.js:84:11)
    at LoadingBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:349:11)
    at ErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/error-boundary.js:160:11)
    at InnerScrollAndFocusHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:153:9)
    at ScrollAndFocusHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:228:11)
    at RenderFromTemplateContext (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/render-from-template-context.js:16:44)
    at OuterLayoutRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:370:11)
    at InnerLayoutRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:243:11)
    at RedirectErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:74:9)
    at RedirectBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:82:11)
    at NotFoundErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/not-found-boundary.js:76:9)
    at NotFoundBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/not-found-boundary.js:84:11)
    at LoadingBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:349:11)
    at ErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/error-boundary.js:160:11)
    at InnerScrollAndFocusHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:153:9)
    at ScrollAndFocusHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:228:11)
    at RenderFromTemplateContext (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/render-from-template-context.js:16:44)
    at OuterLayoutRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/layout-router.js:370:11)
    at QueryClientProvider (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/@tanstack+react-query@5.84.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js:27:11)
    at ReactQueryProvider (webpack-internal:///(app-pages-browser)/./lib/providers/react-query-provider.tsx:14:11)
    at ApiClientProvider (webpack-internal:///(app-pages-browser)/./lib/providers/api-client-provider.tsx:27:11)
    at SessionProvider (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next-auth@5.0.0-beta.29_next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1__react@18.3.1/node_modules/next-auth/react.js:262:13)
    at Providers (webpack-internal:///(app-pages-browser)/./lib/providers/index.tsx:14:11)
    at body
    at html
    at RootLayout (Server)
    at RedirectErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:74:9)
    at RedirectBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/redirect-boundary.js:82:11)
    at NotFoundErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/not-found-boundary.js:76:9)
    at NotFoundBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/not-found-boundary.js:84:11)
    at DevRootNotFoundBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/dev-root-not-found-boundary.js:33:11)
    at ReactDevOverlay (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/react-dev-overlay/app/ReactDevOverlay.js:87:9)
    at HotReload (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/react-dev-overlay/app/hot-reloader-client.js:321:11)
    at Router (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/app-router.js:207:11)
    at ErrorBoundaryHandler (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/error-boundary.js:113:9)
    at ErrorBoundary (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/error-boundary.js:160:11)
    at AppRouter (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/app-router.js:585:13)
    at ServerRoot (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/app-index.js:112:27)
    at Root (webpack-internal:///(app-pages-browser)/../../node_modules/.pnpm/next@14.2.30_@babel+core@7.28.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/app-index.js:117:11)

@vercel
Copy link

vercel bot commented Jan 24, 2026

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

Project Deployment Actions Updated (UTC)
amang-web Ready Ready Preview, Comment Feb 2, 2026 9:13am

@youngjjju
Copy link
Collaborator Author

@manamana32321 리뷰 반영해서 수정 완료했습니다!

  • Field 네이밍 정리
  • 주석 제거/변수명 개선
  • 요일 처리 개선(하드코딩 된 요일명들 제거)
    시간 되실 때 다시 리뷰 부탁드립니다

@manamana32321
Copy link
Collaborator

@greptile

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 4, 2026

Greptile Overview

Greptile Summary

This PR implements mobile UI for the reservation page, adding responsive components for calendar and reservation views. The implementation reorganizes existing components by renaming "Field" to "Section" and creates mobile-specific variants.

Major Changes:

  • Added mobile-responsive layout with MobileCalendarSection and MobileReservationSection components
  • Implemented reservationSplit utility function to format reservation date/time data
  • Reorganized component structure (renamed Field → Section)
  • Added responsive breakpoints (hidden/visible at md breakpoint)
  • Created tabbed interface for mobile reservation views (예약 현황 / 나의 예약)

Issues Found:

  • Circular dependency: utils.ts imports type from component directory
  • Time display logic in MobileReservationStatusCard lacks AM/PM indicators, making 12-hour format ambiguous
  • Unused onSelect props in calendar components

Confidence Score: 4/5

  • Safe to merge with minor architectural and display improvements recommended
  • UI implementation is solid with good component structure. Main concerns are architectural (circular dependency) and one logic issue (ambiguous time display). These are non-blocking for UI work in progress.
  • Focus on utils.ts for type organization and MobileReservationStatusCard.tsx for time display clarity

Important Files Changed

Filename Overview
apps/web/lib/utils.ts Added reservationSplit utility function with circular dependency on component type
apps/web/app/(general)/(light)/reservations/clubroom/page.tsx Added mobile UI sections with responsive layout, using fake data placeholder
apps/web/app/(general)/(light)/reservations/_components/MobileReservationSection/MobileReservationStatusCard.tsx Created time slot display component with ambiguous 12-hour format lacking AM/PM indicators

Sequence Diagram

sequenceDiagram
    participant User
    participant Page as ReservationPage
    participant Mobile as MobileCalendarSection
    participant MobileRes as MobileReservationSection
    participant Desktop as Desktop Components
    participant WeekLabel
    participant Utils as utils.ts
    
    User->>Page: Open /reservations/clubroom
    Page->>Page: Initialize weekStartMonday state
    Page->>Page: Initialize activeMonth state
    
    alt Mobile View (< md breakpoint)
        Page->>Mobile: Render MobileCalendarSection
        Mobile->>Mobile: Generate calendar dates grid
        Mobile->>Mobile: Initialize selectedDate state
        User->>Mobile: Click date in calendar
        Mobile->>Mobile: Update selectedDate
        
        Page->>WeekLabel: Render month navigation
        User->>WeekLabel: Navigate to prev/next month
        WeekLabel->>Page: Update weekStartMonday
        Page->>Page: Update activeMonth via useEffect
        Page->>Mobile: Re-render with new currentMonday
        
        Page->>MobileRes: Render MobileReservationSection
        MobileRes->>MobileRes: Show tabs (예약 현황 / 나의 예약)
        User->>MobileRes: Switch to "나의 예약" tab
        loop For each reservation
            MobileRes->>Utils: Call reservationSplit(reservation)
            Utils->>MobileRes: Return formatted date/time data
            MobileRes->>MobileRes: Render MobileMyReservationCard
        end
    else Desktop View (≥ md breakpoint)
        Page->>Desktop: Render MyReservationSection (1/4 width)
        loop For each reservation
            Desktop->>Utils: Call reservationSplit(reservation)
            Utils->>Desktop: Return formatted date/time data
        end
        
        Page->>Desktop: Render Tabs (Week/Month, 3/4 width)
        alt Week View
            Desktop->>Desktop: Render WeekCalendarView
        else Month View
            Desktop->>Desktop: Render MonthCalendarView
        end
        
        Page->>WeekLabel: Render navigation controls
        User->>WeekLabel: Navigate weeks/months
        WeekLabel->>Page: Update state
        Page->>Desktop: Re-render calendar views
    end
Loading

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

3 files reviewed, 4 comments

Edit Code Review Agent Settings | Greptile

@@ -1,3 +1,5 @@
import dayjs from "dayjs"
import { Reservation } from "@/app/(general)/(light)/reservations/_components/MobileReservationSection"
Copy link
Contributor

Choose a reason for hiding this comment

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

Creates circular dependency by importing type from component directory into shared utility file. Move Reservation interface to @repo/shared-types or create a local types file.

Suggested change
import { Reservation } from "@/app/(general)/(light)/reservations/_components/MobileReservationSection"
import { Reservation } from "@/types/reservation"
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/web/lib/utils.ts
Line: 2:2

Comment:
Creates circular dependency by importing type from component directory into shared utility file. Move `Reservation` interface to `@repo/shared-types` or create a local types file.

```suggestion
import { Reservation } from "@/types/reservation"
```

How can I resolve this? If you propose a fix, please make it concise.

<div className="flex w-full flex-col pt-5">
{Array.from({ length: TOTAL_HOURS }).map((_, i) => {
const hour24 = i + START_HOUR
const hour12 = hour24 % HOURS_IN_CLOCK || HOURS_IN_CLOCK
Copy link
Contributor

Choose a reason for hiding this comment

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

AM/PM display logic incorrect. hour24 % 12 returns 0 for 12 PM, which displays as "12:00", but hours 0-6 (7 AM - 1 PM) will show as 7, 8, 9, 10, 11, 0 instead of 7, 8, 9, 10, 11, 12.

For hour24 = 18 (6 PM): 18 % 12 = 6, but should display "6:00".
For hour24 = 12 (12 PM): 12 % 12 = 0, then || 12 makes it "12:00" ✓

The logic assumes this displays AM/PM labels somewhere, but the component only shows times like "7:00", "8:00" without AM/PM indicators, making it ambiguous whether these are morning or evening hours.

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/web/app/(general)/(light)/reservations/_components/MobileReservationSection/MobileReservationStatusCard.tsx
Line: 10:10

Comment:
AM/PM display logic incorrect. `hour24 % 12` returns 0 for 12 PM, which displays as "12:00", but hours 0-6 (7 AM - 1 PM) will show as 7, 8, 9, 10, 11, 0 instead of 7, 8, 9, 10, 11, 12.

For hour24 = 18 (6 PM): `18 % 12 = 6`, but should display "6:00".
For hour24 = 12 (12 PM): `12 % 12 = 0`, then `|| 12` makes it "12:00" ✓

The logic assumes this displays AM/PM labels somewhere, but the component only shows times like "7:00", "8:00" without AM/PM indicators, making it ambiguous whether these are morning or evening hours.

How can I resolve this? If you propose a fix, please make it concise.

setSelectedDate: Dispatch<SetStateAction<Dayjs>>
calendarDates: Dayjs[]
currentMonth: Dayjs
onSelect?(d: Dayjs): void
Copy link
Contributor

Choose a reason for hiding this comment

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

Unused onSelect prop defined but never used in implementation

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/web/app/(general)/(light)/reservations/_components/MobileCalendarSection/MobileMonthBlock.tsx
Line: 9:9

Comment:
Unused `onSelect` prop defined but never used in implementation

How can I resolve this? If you propose a fix, please make it concise.

interface MonthBlockProps {
calendarDates: Dayjs[]
visibleMonth: Dayjs
onSelect?(date: Dayjs): void
Copy link
Contributor

Choose a reason for hiding this comment

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

Unused onSelect prop defined but never used in implementation

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/web/app/(general)/(light)/reservations/_components/MonthCalendarView/MonthBlock.tsx
Line: 7:7

Comment:
Unused `onSelect` prop defined but never used in implementation

How can I resolve this? If you propose a fix, please make it concise.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Frontend - Component 컴포넌트 관련 작업 💻 Frontend - 반응형 반응형 UI 작업

Projects

None yet

Development

Successfully merging this pull request may close these issues.

자원예약 페이지 모바일 UI

3 participants