Skip to content

Conversation

@MyungJiwoo
Copy link
Contributor

@MyungJiwoo MyungJiwoo commented Aug 4, 2025

🧩 관련 이슈 번호

📌 작업 내용

  1. 모집 중인 체험이 스크롤 되지 않는 오류를 해결했습니다.
  2. 다가오는 예약에 타임라인 UI를 추가했습니다.
  3. 모집 중인 체험과 다가오는 예약에 스켈레톤 UI를 적용했습니다.
  4. 전체적인 마이페이지 메인의 UI 리팩토링을 진행했습니다.

✅ 체크리스트

  • PR 하기 전에 이슈에서 빼먹은건 없는지 확인했습니다
    • 라벨 및 마일스톤을 사이드 탭에서 등록했습니다.
  • PR을 보내는 브랜치가 올바른지 확인했습니다.
  • 팀원들이 리뷰하기 쉽도록 설명을 자세하게 작성했습니다.
  • 변경사항을 충분히 테스트 했습니다.
  • (함수를 구현 했을 때) JSDoc을 양식에 맞춰서 작성했습니다.
  • 컨벤션에 맞게 구현했습니다.

📷 UI 변경 사항 (선택)

내용 결과
스켈레톤 UI 마이페이지 메인 스켈레톤
마이페이지 메인 UI 리팩토링 마이페이지 메인 UI 리팩토링

❓무슨 문제가 발생했나요? (선택)

💬 기타 참고 사항 (선택)

Summary by CodeRabbit

  • 신규 기능

    • 진행 중인 경험 및 예정된 예약이 없을 때 표시되는 비어있는 상태 UI와 이동 버튼이 추가되었습니다.
    • 진행 중인 경험 카드와 예정된 일정 항목에 대한 스켈레톤(로딩) 컴포넌트가 도입되어, 데이터 로딩 시 시각적 피드백을 제공합니다.
  • UI/스타일 개선

    • 마이페이지 프로필 헤더, 요약 카드, 진행 중인 경험 카드, 예정된 일정 카드의 크기, 간격, 타이포그래피 등 레이아웃과 스타일이 개선되었습니다.
    • 진행 중인 경험 리스트가 가로 스크롤로, 예정된 예약 리스트가 세로 스크롤 및 타임라인 형태로 재구성되었습니다.
    • 예정된 일정과 진행 중인 경험 카드의 렌더링 구조가 새롭게 변경되어, 더 명확한 로딩 및 빈 상태 처리가 적용되었습니다.
  • 버그 수정

    • 로딩 및 비어있는 상태에서의 표시와 상호작용이 더욱 명확하게 동작하도록 개선되었습니다.

@MyungJiwoo MyungJiwoo added this to the 프로젝트 마감 milestone Aug 4, 2025
@MyungJiwoo MyungJiwoo self-assigned this Aug 4, 2025
@MyungJiwoo MyungJiwoo added ♻️ Refactor 코드 리팩토링 🐞 Bug 버그 관련 🎨 Design 마크업 및 스타일링 labels Aug 4, 2025
@coderabbitai
Copy link

coderabbitai bot commented Aug 4, 2025

📝 Walkthrough

Walkthrough

마이페이지의 예정된 일정 및 진행 중인 경험 섹션의 로딩 및 빈 상태 처리, UI 구조, 컴포넌트 구조가 대폭 개선되었습니다. 디자인 시스템의 카드 및 스켈레톤 컴포넌트가 추가 및 수정되었고, 기존 리스트형 컴포넌트가 단일 아이템 기반으로 변경되었습니다. 스타일링도 전반적으로 조정되었습니다.

Changes

Cohort / File(s) Change Summary
마이페이지 주요 로직 및 UI 개선
apps/what-today/src/pages/mypage/main/index.tsx
진행 중/예정 일정의 로딩·빈 상태 UI 컴포넌트(NoResultUpcoming, NoResultOngoing) 추가, 예약 및 활동 데이터의 로딩/정렬/그룹핑 및 조건부 렌더링 로직 개선, 스켈레톤 및 그룹별 리스트, 스크롤 가능한 컨테이너, 타임라인 시각화 등 레이아웃 구조 변경, 스타일 조정 등.
프로필 헤더 스타일 개선
packages/design-system/src/components/MypageProfileHeader.tsx
프로필 이미지, 간격, 텍스트 등 스타일 및 크기 조정. 컴포넌트 로직 변화 없음.
마이페이지 요약 카드 스타일 개선
packages/design-system/src/components/MypageSummaryCard.tsx
컨테이너 및 내부 요소의 패딩, 간격, 텍스트 스타일 등 UI 스타일 조정.
진행 중 경험 카드 구조 변경
packages/design-system/src/components/OngoingExperienceCard.tsx
다수 활동 리스트 및 빈 상태 처리 → 단일 활동 카드 렌더링으로 변경. props 구조 단순화, 불필요한 import 제거, 텍스트 스타일 조정.
예정 일정 카드 구조 변경
packages/design-system/src/components/UpcomingSchedule.tsx
예약 리스트 및 날짜 그룹핑, 빈 상태, 보조 컴포넌트 등 전체 제거. 단일 일정 아이템만 렌더링하는 구조로 변경, props 단순화.
진행 중 경험 스켈레톤 추가
packages/design-system/src/components/skeleton/OngoingExperienceCardSkeleton.tsx
진행 중 경험 카드용 스켈레톤 컴포넌트 신설.
예정 일정 스켈레톤 추가
packages/design-system/src/components/skeleton/UpcomingScheduleItemSkeleton.tsx
예정 일정 아이템용 스켈레톤 컴포넌트 신설.
스켈레톤 컴포넌트 통합 export
packages/design-system/src/components/skeleton/index.tsx
OngoingExperienceCardSkeleton, UpcomingScheduleItemSkeleton export 추가.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant MyPage
    participant API
    participant NoResultOngoing
    participant NoResultUpcoming
    participant OngoingExperienceCard
    participant UpcomingSchedule
    participant Skeleton

    User->>MyPage: 페이지 진입
    MyPage->>API: 활동/예약 데이터 fetch
    alt 데이터 로딩 중
        MyPage->>Skeleton: 스켈레톤 카드 렌더
    else 데이터 있음
        MyPage->>OngoingExperienceCard: 진행 중 경험 리스트 렌더
        MyPage->>UpcomingSchedule: 예정 예약 리스트 렌더
    else 데이터 없음
        MyPage->>NoResultOngoing: 진행 중 경험 없음 UI 렌더
        MyPage->>NoResultUpcoming: 예정 예약 없음 UI 렌더
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Possibly related PRs

  • 마이-메인페이지 구현 #219: 동일 파일(apps/what-today/src/pages/mypage/main/index.tsx) 내 MyPage 컴포넌트 리팩토링 및 API 연동, UI 구성 관련 PR로 본 PR과 기능 및 코드 수준에서 연관성이 높음.
  • 마이 - 메인페이지의 컴포넌트 UI 제작 #209: OngoingExperienceCardUpcomingSchedule 컴포넌트 초기 UI 구현 관련 PR로, 본 PR에서 해당 컴포넌트 구조를 변경 및 대체하여 직접적인 코드 연관성이 있음.

Suggested labels

✨ Feat

Suggested reviewers

  • kjhyun0830
  • Taeil08

Poem

토끼가 깡총, 코드를 살펴보니
마이페이지가 한층 더 예뻐졌지!
스켈레톤이 춤추고, 빈 상태도 똑똑하게
카드 하나씩 또렷하게 보여주네.
🥕 변화의 바람, 토끼도 신나서
깡총깡총, 리뷰하러 달려간다!

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.


📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 39d3052 and d940766.

📒 Files selected for processing (1)
  • packages/design-system/src/components/skeleton/index.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/design-system/src/components/skeleton/index.tsx
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch refactor/mongdiwoo/242

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary or @coderabbitai 요약 to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions
Copy link

github-actions bot commented Aug 4, 2025

🚀 오늘뭐해 Preview Deploy 완료!
👉 미리보기 링크

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🔭 Outside diff range comments (1)
packages/design-system/src/components/UpcomingSchedule.tsx (1)

25-25: 이미지 로딩 실패 처리 필요

src가 없거나 이미지 로딩에 실패할 경우를 대비한 처리가 필요합니다.

-      <img alt='체험 베너 이미지' className='h-full w-140 rounded-l-none rounded-r-2xl object-cover' src={src} />
+      {src ? (
+        <img 
+          alt='체험 베너 이미지' 
+          className='h-full w-140 rounded-l-none rounded-r-2xl object-cover' 
+          src={src}
+          onError={(e) => {
+            e.currentTarget.style.display = 'none';
+          }}
+        />
+      ) : (
+        <div className='h-full w-140 rounded-l-none rounded-r-2xl bg-gray-100' />
+      )}
🧹 Nitpick comments (7)
packages/design-system/src/components/skeleton/OngoingExperienceCardSkeleton.tsx (3)

3-5: 중복된 애니메이션 클래스 제거 필요

부모 요소(3번 줄)와 자식 요소(5번 줄)에 모두 animate-pulse가 적용되어 있습니다. 부모에만 적용하면 충분합니다.

-      <div className='h-full w-full animate-pulse rounded-t-2xl rounded-b-3xl bg-gray-100' />
+      <div className='h-full w-full rounded-t-2xl rounded-b-3xl bg-gray-100' />

11-15: 자식 요소의 중복 애니메이션 제거

이미 부모 컨테이너에 animate-pulse가 적용되어 있으므로 자식 요소들의 애니메이션은 불필요합니다.

-          <div className='h-16 w-5/6 animate-pulse rounded bg-gray-100' />
-          <div className='h-16 w-3/4 animate-pulse rounded bg-gray-100' />
+          <div className='h-16 w-5/6 rounded bg-gray-100' />
+          <div className='h-16 w-3/4 rounded bg-gray-100' />
        </div>
        {/* 가격 라인 */}
-        <div className='h-16 w-1/2 animate-pulse rounded bg-gray-100' />
+        <div className='h-16 w-1/2 rounded bg-gray-100' />

3-3: 반응형 디자인 고려 필요

고정 너비 w-150은 작은 화면에서 문제가 될 수 있습니다. 반응형 클래스나 최대 너비 제한을 고려해보세요.

-    <div aria-hidden className='relative h-170 w-150 shrink-0 animate-pulse'>
+    <div aria-hidden className='relative h-170 w-150 max-w-full shrink-0 animate-pulse'>
packages/design-system/src/components/skeleton/UpcomingScheduleSkeleton.tsx (1)

8-24: 하드코딩된 크기 값을 props로 받도록 개선 고려

현재 모든 크기가 하드코딩되어 있어 재사용성이 제한적입니다. 다양한 레이아웃에서 사용할 수 있도록 선택적 props를 추가하는 것을 고려해보세요.

-export default function UpcomingScheduleItemSkeleton() {
+interface UpcomingScheduleItemSkeletonProps {
+  height?: string;
+  imageWidth?: string;
+}
+
+export default function UpcomingScheduleItemSkeleton({ 
+  height = 'h-120',
+  imageWidth = 'w-140'
+}: UpcomingScheduleItemSkeletonProps = {}) {
   return (
     <div aria-hidden className='flex flex-col gap-8'>
       {/* 날짜 라벨 스켈레톤 */}
       <div className='h-18 w-80 animate-pulse rounded bg-gray-100 md:h-21' />

       {/* 카드 스켈레톤 (UpcomingSchedule 레이아웃 매칭) */}
-      <div className='flex h-120 w-full items-center justify-between'>
+      <div className={`flex ${height} w-full items-center justify-between`}>
         {/* 좌측 텍스트 영역 */}
         <div className='flex h-full flex-1 flex-col justify-center rounded-l-2xl rounded-r-none border border-r-0 border-gray-100 p-16 px-24'>
           {/* 제목 */}
           <div className='mb-6 h-24 w-2/3 rounded bg-gray-100' />
           {/* 시간 */}
           <div className='mb-8 h-20 w-1/3 rounded bg-gray-100' />
           {/* 가격/인원 */}
           <div className='flex items-center gap-6'>
             <div className='h-20 w-60 rounded bg-gray-100' />
             <div className='h-20 w-30 rounded bg-gray-100' />
           </div>
         </div>

         {/* 우측 이미지 영역 */}
-        <div className='h-full w-140 rounded-l-none rounded-r-2xl bg-gray-100' />
+        <div className={`h-full ${imageWidth} rounded-l-none rounded-r-2xl bg-gray-100`} />
       </div>
     </div>
   );
 }
apps/what-today/src/pages/mypage/main/index.tsx (3)

117-119: 정렬 로직 간소화 가능

dayjs의 diff 메서드를 사용하여 더 명확하게 정렬할 수 있습니다.

-  const sortedReservations = [...(confirmedData?.reservations ?? [])].sort((a, b) =>
-    dayjs(a.date).isAfter(b.date) ? 1 : -1,
-  );
+  const sortedReservations = [...(confirmedData?.reservations ?? [])].sort((a, b) =>
+    dayjs(a.date).diff(dayjs(b.date)),
+  );

262-262: 고정 높이값 대신 반응형 처리 고려

h-210과 같은 고정 높이는 다양한 화면 크기에서 문제가 될 수 있습니다. 반응형 높이를 고려해보세요.

-          <div className='grid h-210 w-full grid-cols-1'>
+          <div className='grid min-h-210 w-full grid-cols-1'>

270-270: 반응형 높이 값 개선 제안

모바일과 데스크톱에서 다른 높이를 적용하는 것이 좋을 것 같습니다.

-        <div className='grid min-h-300 grid-rows-[auto_1fr] gap-8 rounded-3xl border-gray-50 bg-white md:max-h-540 md:gap-16 md:border md:px-32 md:pt-24'>
+        <div className='grid min-h-[200px] md:min-h-300 grid-rows-[auto_1fr] gap-8 rounded-3xl border-gray-50 bg-white md:max-h-540 md:gap-16 md:border md:px-32 md:pt-24'>
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a53e041 and 6886959.

📒 Files selected for processing (8)
  • apps/what-today/src/pages/mypage/main/index.tsx (8 hunks)
  • packages/design-system/src/components/MypageProfileHeader.tsx (1 hunks)
  • packages/design-system/src/components/MypageSummaryCard.tsx (2 hunks)
  • packages/design-system/src/components/OngoingExperienceCard.tsx (1 hunks)
  • packages/design-system/src/components/UpcomingSchedule.tsx (1 hunks)
  • packages/design-system/src/components/skeleton/OngoingExperienceCardSkeleton.tsx (1 hunks)
  • packages/design-system/src/components/skeleton/UpcomingScheduleSkeleton.tsx (1 hunks)
  • packages/design-system/src/components/skeleton/index.tsx (1 hunks)
🧰 Additional context used
🧠 Learnings (12)
📓 Common learnings
Learnt from: kjhyun0830
PR: What-Today-FE/What-Today#219
File: apps/what-today/src/pages/mypage/main/index.tsx:108-157
Timestamp: 2025-08-03T00:45:03.763Z
Learning: kjhyun0830은 What-Today 프로젝트의 마이페이지(apps/what-today/src/pages/mypage/main/index.tsx)에서 다음 브랜치에 스켈레톤 UI 작업과 함께 로딩 상태 처리를 구현할 계획이라고 언급함.
Learnt from: kjhyun0830
PR: What-Today-FE/What-Today#77
File: apps/what-today/src/pages/mypage/manage-activities/index.tsx:50-63
Timestamp: 2025-07-19T01:23:56.149Z
Learning: User kjhyun0830 follows an incremental development approach in What-Today project, implementing UI first and adding functionality in later iterations, as confirmed in PR #77 for the experience management page.
Learnt from: MyungJiwoo
PR: What-Today-FE/What-Today#119
File: apps/what-today/src/pages/mypage/edit-profile/index.tsx:63-92
Timestamp: 2025-07-24T08:30:12.556Z
Learning: MyungJiwoo indicated they will implement validation checks for the edit profile page (password confirmation validation) immediately after PR #119 is merged, following their incremental development approach.
Learnt from: kjhyun0830
PR: What-Today-FE/What-Today#169
File: apps/what-today/src/hooks/useMyActivitiesQuery.ts:23-25
Timestamp: 2025-07-29T14:50:14.117Z
Learning: kjhyun0830은 What-Today 프로젝트에서 토스터 알림과 같은 UI 일관성이 필요한 기능들을 여러 페이지에 걸쳐 한 번에 수정하는 접근 방식을 선호한다.
Learnt from: MyungJiwoo
PR: What-Today-FE/What-Today#43
File: apps/what-today/src/pages/main/index.tsx:7-7
Timestamp: 2025-07-14T13:36:17.941Z
Learning: The MainPage component in apps/what-today/src/pages/main/index.tsx contains placeholder/example code that will be modified later, including the fixed height class 'h-1400' which the user indicated is temporary.
Learnt from: HarrySeop
PR: What-Today-FE/What-Today#89
File: packages/design-system/src/components/bottomsheet/hooks/index.ts:44-51
Timestamp: 2025-07-21T04:36:28.477Z
Learning: HarrySeop encountered a scroll restoration issue in the useBodyScrollLock hook where the base page jumps to the top during mount/unmount of the bottom sheet component. They tried adding isLocked check in cleanup function and ref-based approaches but both failed to resolve the issue. They decided to defer this fix to a later refactoring.
Learnt from: MyungJiwoo
PR: What-Today-FE/What-Today#90
File: apps/what-today/src/pages/signup/index.tsx:67-71
Timestamp: 2025-07-21T05:32:48.443Z
Learning: MyungJiwoo plans to implement form validation using zod and react-hook-form in a future iteration rather than adding quick validation checks in the current signup page implementation in apps/what-today/src/pages/signup/index.tsx.
Learnt from: Taeil08
PR: What-Today-FE/What-Today#134
File: apps/what-today/src/pages/experiences/iindex.tsx:11-16
Timestamp: 2025-07-25T03:14:08.579Z
Learning: Taeil08이 What-Today 프로젝트의 체험 등록 페이지(apps/what-today/src/pages/experiences/iindex.tsx)에서 주소 입력 컴포넌트가 아직 만들어지지 않아서 상태 관리를 나중에 추가할 예정이라고 언급함. 이는 프로젝트의 점진적 개발 접근법에 따른 것임.
Learnt from: kjhyun0830
PR: What-Today-FE/What-Today#178
File: apps/what-today/src/index.css:63-83
Timestamp: 2025-07-30T13:22:43.195Z
Learning: kjhyun0830은 What-Today 프로젝트에서 기능적으로 문제가 없는 코드에 대해서는 장기적인 유지보수 개선사항보다는 현재 작동하는 상태를 유지하는 것을 선호하는 실용적인 접근 방식을 취한다.
Learnt from: Taeil08
PR: What-Today-FE/What-Today#150
File: apps/what-today/src/pages/main/index.tsx:45-50
Timestamp: 2025-07-28T00:26:02.960Z
Learning: Taeil08은 What-Today 프로젝트에서 로딩 및 에러 상태 처리와 같은 UX 관련 사항은 팀원들과 회의를 통해 결정한 후 구현하는 접근 방식을 선호한다.
Learnt from: MyungJiwoo
PR: What-Today-FE/What-Today#63
File: packages/design-system/src/pages/NoResultDoc.tsx:8-8
Timestamp: 2025-07-17T11:29:24.913Z
Learning: MyungJiwoo indicated that code duplication in documentation files (like design system documentation) is acceptable and doesn't need to be fixed, as it's not actual service code but rather demo/documentation code with different standards.
📚 Learning: kjhyun0830 프로젝트에서 @what-today/design-system 패키지의 reservationstatus 타입이 calendar/index.ts에서 re-export...
Learnt from: kjhyun0830
PR: What-Today-FE/What-Today#91
File: apps/what-today/src/pages/mypage/reservations-status/index.tsx:2-2
Timestamp: 2025-07-22T03:59:52.657Z
Learning: kjhyun0830 프로젝트에서 @what-today/design-system 패키지의 ReservationStatus 타입이 calendar/index.ts에서 re-export되지 않아 메인 엔트리 포인트에서 접근할 수 없는 문제가 있음. DayCell.tsx에서 정의된 타입들을 calendar 모듈에서 명시적으로 export해야 함.

Applied to files:

  • packages/design-system/src/components/skeleton/index.tsx
  • packages/design-system/src/components/skeleton/UpcomingScheduleSkeleton.tsx
  • packages/design-system/src/components/UpcomingSchedule.tsx
  • apps/what-today/src/pages/mypage/main/index.tsx
📚 Learning: the mainpage component in apps/what-today/src/pages/main/index.tsx contains placeholder/example code...
Learnt from: MyungJiwoo
PR: What-Today-FE/What-Today#43
File: apps/what-today/src/pages/main/index.tsx:7-7
Timestamp: 2025-07-14T13:36:17.941Z
Learning: The MainPage component in apps/what-today/src/pages/main/index.tsx contains placeholder/example code that will be modified later, including the fixed height class 'h-1400' which the user indicated is temporary.

Applied to files:

  • packages/design-system/src/components/MypageProfileHeader.tsx
  • packages/design-system/src/components/skeleton/OngoingExperienceCardSkeleton.tsx
  • packages/design-system/src/components/skeleton/UpcomingScheduleSkeleton.tsx
  • packages/design-system/src/components/MypageSummaryCard.tsx
  • packages/design-system/src/components/UpcomingSchedule.tsx
  • packages/design-system/src/components/OngoingExperienceCard.tsx
  • apps/what-today/src/pages/mypage/main/index.tsx
📚 Learning: kjhyun0830은 what-today 프로젝트의 마이페이지(apps/what-today/src/pages/mypage/main/index.tsx)에서 다음 브랜치에 스켈레톤 u...
Learnt from: kjhyun0830
PR: What-Today-FE/What-Today#219
File: apps/what-today/src/pages/mypage/main/index.tsx:108-157
Timestamp: 2025-08-03T00:45:03.763Z
Learning: kjhyun0830은 What-Today 프로젝트의 마이페이지(apps/what-today/src/pages/mypage/main/index.tsx)에서 다음 브랜치에 스켈레톤 UI 작업과 함께 로딩 상태 처리를 구현할 계획이라고 언급함.

Applied to files:

  • packages/design-system/src/components/MypageProfileHeader.tsx
  • packages/design-system/src/components/skeleton/UpcomingScheduleSkeleton.tsx
  • packages/design-system/src/components/UpcomingSchedule.tsx
  • apps/what-today/src/pages/mypage/main/index.tsx
📚 Learning: packages/design-system/src/components/datepicker.tsx에서 taeil08은 sr-only 클래스를 가진 div 요소가 달력 트리거 버튼의 세...
Learnt from: Taeil08
PR: What-Today-FE/What-Today#125
File: packages/design-system/src/components/DatePicker.tsx:25-28
Timestamp: 2025-07-24T13:33:33.202Z
Learning: packages/design-system/src/components/DatePicker.tsx에서 Taeil08은 sr-only 클래스를 가진 div 요소가 달력 트리거 버튼의 세로 정렬에 필요하다고 설명했음. 이 요소를 제거하면 버튼 정렬이 깨지는 레이아웃 의존성이 있음.

Applied to files:

  • packages/design-system/src/components/MypageProfileHeader.tsx
  • packages/design-system/src/components/skeleton/UpcomingScheduleSkeleton.tsx
  • packages/design-system/src/components/UpcomingSchedule.tsx
  • apps/what-today/src/pages/mypage/main/index.tsx
📚 Learning: in the selectroot component (packages/design-system/src/components/select/selectroot.tsx), myungjiwo...
Learnt from: MyungJiwoo
PR: What-Today-FE/What-Today#57
File: packages/design-system/src/components/select/SelectRoot.tsx:37-38
Timestamp: 2025-07-17T01:20:26.915Z
Learning: In the SelectRoot component (packages/design-system/src/components/select/SelectRoot.tsx), MyungJiwoo questioned the need for implementing controlled component pattern. The current implementation only handles internal→external state changes via onChangeValue callback, but doesn't handle external→internal changes when the value prop is updated, which breaks the typical React controlled component contract.

Applied to files:

  • packages/design-system/src/components/skeleton/OngoingExperienceCardSkeleton.tsx
📚 Learning: in packages/design-system/src/components/button/index.tsx, harryseop uses handleclick wrapper for se...
Learnt from: HarrySeop
PR: What-Today-FE/What-Today#53
File: packages/design-system/src/components/button/index.tsx:32-41
Timestamp: 2025-07-16T06:51:15.152Z
Learning: In packages/design-system/src/components/button/index.tsx, HarrySeop uses handleClick wrapper for security purposes to prevent execution when users remove disabled attributes via developer tools. The onClick handler should be extracted from rest props before spreading to avoid being overwritten.

Applied to files:

  • packages/design-system/src/components/MypageSummaryCard.tsx
  • packages/design-system/src/components/OngoingExperienceCard.tsx
📚 Learning: taeil08이 what-today 프로젝트의 체험 등록 페이지(apps/what-today/src/pages/experiences/iindex.tsx)에서 주소 입력 컴포넌트가 ...
Learnt from: Taeil08
PR: What-Today-FE/What-Today#134
File: apps/what-today/src/pages/experiences/iindex.tsx:11-16
Timestamp: 2025-07-25T03:14:08.579Z
Learning: Taeil08이 What-Today 프로젝트의 체험 등록 페이지(apps/what-today/src/pages/experiences/iindex.tsx)에서 주소 입력 컴포넌트가 아직 만들어지지 않아서 상태 관리를 나중에 추가할 예정이라고 언급함. 이는 프로젝트의 점진적 개발 접근법에 따른 것임.

Applied to files:

  • apps/what-today/src/pages/mypage/main/index.tsx
📚 Learning: user kjhyun0830 follows an incremental development approach in what-today project, implementing ui f...
Learnt from: kjhyun0830
PR: What-Today-FE/What-Today#77
File: apps/what-today/src/pages/mypage/manage-activities/index.tsx:50-63
Timestamp: 2025-07-19T01:23:56.149Z
Learning: User kjhyun0830 follows an incremental development approach in What-Today project, implementing UI first and adding functionality in later iterations, as confirmed in PR #77 for the experience management page.

Applied to files:

  • apps/what-today/src/pages/mypage/main/index.tsx
📚 Learning: what-today 프로젝트는 react + vite로 구성된 클라이언트 사이드 애플리케이션이며 ssr(server-side rendering)을 사용하지 않는다....
Learnt from: HarrySeop
PR: What-Today-FE/What-Today#97
File: apps/what-today/src/hooks/useResponsive.ts:16-16
Timestamp: 2025-07-22T03:59:53.290Z
Learning: What-Today 프로젝트는 React + Vite로 구성된 클라이언트 사이드 애플리케이션이며 SSR(Server-Side Rendering)을 사용하지 않는다.

Applied to files:

  • apps/what-today/src/pages/mypage/main/index.tsx
📚 Learning: kjhyun0830은 what-today 프로젝트에서 여러 페이지 간 일관성을 위해 동일한 쿼리 훅(예: useinfinitemyactivitiesquery)을 사용하는 것을 선호...
Learnt from: kjhyun0830
PR: What-Today-FE/What-Today#205
File: apps/what-today/src/pages/mypage/reservations-status/index.tsx:17-0
Timestamp: 2025-08-02T03:36:31.249Z
Learning: kjhyun0830은 What-Today 프로젝트에서 여러 페이지 간 일관성을 위해 동일한 쿼리 훅(예: useInfiniteMyActivitiesQuery)을 사용하는 것을 선호하며, 기능적으로 문제없이 작동하는 코드는 최적화보다는 현재 상태를 유지하는 실용적인 접근 방식을 취한다.

Applied to files:

  • apps/what-today/src/pages/mypage/main/index.tsx
📚 Learning: in korean react calendar components, it's common to use english weekday abbreviations (s, m, t, etc....
Learnt from: kjhyun0830
PR: What-Today-FE/What-Today#31
File: packages/design-system/src/components/calendar/CalendarGrid.tsx:13-13
Timestamp: 2025-07-12T16:11:37.214Z
Learning: In Korean React calendar components, it's common to use English weekday abbreviations (S, M, T, etc.) while keeping month/year displays in Korean format. CalendarGrid can use dayjs.locale('en') for weekdays while CalendarHeader uses hardcoded Korean format strings like 'YYYY년 MM월', and these don't conflict since the Korean text is hardcoded in the format string.

Applied to files:

  • apps/what-today/src/pages/mypage/main/index.tsx
🧬 Code Graph Analysis (1)
packages/design-system/src/components/skeleton/OngoingExperienceCardSkeleton.tsx (1)
packages/design-system/src/components/skeleton/ExperienceCardSkeleton.tsx (1)
  • ExperienceCardSkeleton (1-18)
🔇 Additional comments (7)
packages/design-system/src/components/UpcomingSchedule.tsx (1)

1-28: 컴포넌트 단순화 잘됨

복잡한 리스트 렌더링과 상태 관리를 제거하고 단일 아이템 표시에 집중한 리팩토링이 잘 되었습니다. 단일 책임 원칙을 잘 따르고 있습니다.

packages/design-system/src/components/skeleton/index.tsx (1)

1-3: 스켈레톤 컴포넌트 export 추가 완료

새로운 스켈레톤 컴포넌트들이 적절히 export되었습니다. 이는 PR 목표인 스켈레톤 UI 적용과 일치합니다.

packages/design-system/src/components/MypageSummaryCard.tsx (1)

15-15: 디자인 시스템 일관성 개선

패딩과 간격 조정, 그리고 시맨틱 타이포그래피 클래스 사용으로 디자인 시스템의 일관성이 향상되었습니다.

Also applies to: 26-28

packages/design-system/src/components/MypageProfileHeader.tsx (1)

14-39: UI 스케일 및 타이포그래피 개선

프로필 헤더의 전반적인 스케일 조정과 시맨틱 타이포그래피 클래스 적용이 잘 되었습니다. 전체적인 마이페이지 UI 개선사항과 일관성 있게 적용되었습니다.

apps/what-today/src/pages/mypage/main/index.tsx (3)

121-163: 로딩 및 빈 상태 처리 개선됨

스켈레톤 UI를 활용한 로딩 상태 처리와 조건부 렌더링이 잘 구현되었습니다. 사용자 경험이 크게 개선될 것으로 보입니다.


273-284: 타임라인 UI 구현 우수

예정된 일정에 타임라인 UI를 추가한 것은 훌륭한 개선사항입니다. 시각적으로 일정의 흐름을 잘 표현하고 있습니다.


263-266: 수평 스크롤 구현 확인

모집 중인 체험 섹션의 수평 스크롤이 제대로 작동하는지 확인이 필요합니다.

다양한 화면 크기에서 수평 스크롤이 잘 작동하는지, 특히 모바일에서 터치 스크롤이 원활한지 테스트해주세요.

@github-actions
Copy link

github-actions bot commented Aug 4, 2025

🚀 오늘뭐해 Preview Deploy 완료!
👉 미리보기 링크

@MyungJiwoo MyungJiwoo linked an issue Aug 4, 2025 that may be closed by this pull request
Copy link
Member

@HarrySeop HarrySeop left a comment

Choose a reason for hiding this comment

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

참고 부탁드려요!

return (
<div className='flex w-full flex-col items-center justify-center gap-20 pt-32'>
<EmptyLogo size={80} />
<Button className='text-md w-auto font-semibold' variant='outline' onClick={() => navigate('/')}>
Copy link
Member

Choose a reason for hiding this comment

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

텍스트 정한걸로 변경해주세요!

<div className='flex w-full flex-col items-center justify-center gap-20 pt-32'>
<EmptyLogo size={80} />
<Button
className='text-md w-auto font-semibold'
Copy link
Member

Choose a reason for hiding this comment

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

여기도..!

<img alt={title} className='h-full w-full rounded-t-2xl rounded-b-3xl object-cover' src={bannerImageUrl} />
<div className='absolute bottom-0 w-full translate-y-[40px] cursor-pointer rounded-2xl border border-gray-50 bg-white px-12 py-12'>
<p className='caption-text line-clamp-2 font-semibold'>{title}</p>
<p className='caption-text text-gray-500'>{price.toLocaleString()} / 인</p>
Copy link
Member

Choose a reason for hiding this comment

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

요기 gray-400으로 통일하는걸까요?!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

엇 500으로 되어있던건, 컨벤션에 맞게 gray-400으로 적용했고, 금액까지 회색으로 처리한건 의도한게 맞습니다!

@github-actions
Copy link

github-actions bot commented Aug 4, 2025

🚀 오늘뭐해 Preview Deploy 완료!
👉 미리보기 링크

@MyungJiwoo MyungJiwoo merged commit 8ab17db into develop Aug 4, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐞 Bug 버그 관련 🎨 Design 마크업 및 스타일링 ♻️ Refactor 코드 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

마이페이지 - 메인 UI 리팩토링

3 participants