Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[design] 마이페이지 퍼블리싱 #32

Merged
merged 4 commits into from
Jan 14, 2025
Merged

[design] 마이페이지 퍼블리싱 #32

merged 4 commits into from
Jan 14, 2025

Conversation

ukongee
Copy link
Contributor

@ukongee ukongee commented Jan 14, 2025

#️⃣연관된 이슈

ex) #이슈번호, #이슈번호

📝작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지 첨부 가능)

스크린샷 (선택)

스크린샷 2025-01-14 오후 2 23 52 스크린샷 2025-01-14 오후 2 25 23 스크린샷 2025-01-14 오후 2 25 49

💬리뷰 요구사항(선택)

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭

이 있을까요?

Summary by CodeRabbit

  • 새로운 기능

    • 사용자 프로필 섹션 추가
    • 주문 내역 조회 기능 구현
    • 개인정보 수정 및 비밀번호 변경 페이지 추가
  • 버그 수정

    • 배너 컴포넌트의 너비 설정 개선
  • 기타 변경사항

    • 패키지 매니저 및 MSW 설정 간소화
    • 레이아웃 및 컴포넌트 타입 안전성 강화

@ukongee ukongee linked an issue Jan 14, 2025 that may be closed by this pull request
@ukongee ukongee self-assigned this Jan 14, 2025
Copy link

coderabbitai bot commented Jan 14, 2025

Walkthrough

이 풀 리퀘스트는 사용자 프로필, 주문 이력, 개인정보 수정 등과 관련된 여러 페이지와 컴포넌트를 추가하는 변경 사항을 포함하고 있습니다. package.json의 간단한 구성 업데이트와 함께 Next.js 애플리케이션의 사용자 관련 섹션에 새로운 기능과 레이아웃을 도입했습니다. 주요 추가 사항으로는 주문 내역, 비밀번호 변경, 개인정보 수정 페이지 등이 포함됩니다.

Changes

파일 변경 요약
package.json - msw 구성의 workerDirectory 단순화
- packageManager 필드에서 해시 접미사 제거
src/app/(user)/layout.tsx - LayoutProps 인터페이스 추가
- 컴포넌트 이름을 Layout에서 UserLayout으로 변경
src/app/(user)/profile/* - 여러 새로운 페이지 및 레이아웃 컴포넌트 추가 (주문 내역, 비밀번호 변경, 개인정보 수정 등)
src/app/_components/ui/OrderCard.tsx - 새로운 OrderCard 컴포넌트 추가
- OrderInfo 인터페이스 생성
src/app/_components/ui/banner/Banner.tsx - 배너 div 너비를 고정 너비에서 전체 너비로 변경

Poem

🐰 코드의 토끼, 새 길을 뛰어
프로필 페이지에 생명을 불어
주문 내역, 비밀번호 수정
사용자 경험을 더욱 빛내
토끼의 발걸음, 기능의 춤! 🌟


🪧 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • 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 generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

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. (Beta)
  • @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 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.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

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.

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: 8

🧹 Nitpick comments (8)
src/app/(user)/profile/page.tsx (1)

5-5: 컴포넌트 구조를 개선해주세요

  1. 컴포넌트 이름을 'App'에서 'ProfilePage'로 변경하여 목적을 명확히 해주세요.
  2. 빈 return문은 return null로 명시적으로 표현해주세요.
-const App = () => {
+const ProfilePage = () => {
  const router = useRouter()
  useEffect(() => {
    router.replace('/profile/editInfo')
  }, [])
-  return
+  return null
}

Also applies to: 10-11

src/app/_components/ui/banner/Banner.tsx (1)

Line range hint 11-15: 접근성 개선이 필요합니다

배너 컴포넌트에 적절한 ARIA 레이블과 역할을 추가하여 스크린 리더 사용자의 접근성을 향상시켜주세요.

-    <div className="flex h-[200px] w-full items-center justify-center bg-blue-primary text-white">
+    <div 
+      role="banner"
+      aria-label="메인 배너"
+      className="flex h-[200px] w-full items-center justify-center bg-blue-primary text-white"
+    >
src/app/(user)/profile/layout.tsx (1)

17-20: 인라인 스타일을 Tailwind 클래스로 변경해주세요

인라인 스타일 대신 Tailwind의 pt-20 클래스를 사용하면 일관된 스타일링이 가능합니다.

      <main
        className="flex-1 overflow-hidden bg-blue-secondary"
-        style={{ paddingTop: '80' }}
+        className="flex-1 overflow-hidden bg-blue-secondary pt-20"
      >
src/app/(user)/layout.tsx (1)

14-17: 스타일 관련 매직 넘버를 상수화하는 것을 고려해보세요

z-index와 padding-top 값을 상수나 CSS 변수로 추출하면 유지보수성이 향상될 것 같습니다.

다음과 같은 방식을 제안합니다:

+ // 상단에 상수 추가
+ const HEADER_HEIGHT = '90px'
+ const HEADER_Z_INDEX = 50

  <div className="relative flex min-h-screen flex-col">
-   <div className="fixed left-0 top-0 z-50 w-full">
+   <div className={`fixed left-0 top-0 z-[${HEADER_Z_INDEX}] w-full`}>
      <Header type="default" />
    </div>
-   <main className="flex-1 overflow-hidden" style={{ paddingTop: '90px' }}>
+   <main className="flex-1 overflow-hidden" style={{ paddingTop: HEADER_HEIGHT }}>

또는 CSS 변수를 사용하는 방법:

:root {
  --header-height: 90px;
  --header-z-index: 50;
}
src/app/_components/ui/OrderCard.tsx (3)

21-24: 진행 단계를 동적으로 관리하는 것이 좋겠습니다

현재 하드코딩된 진행 단계를 동적으로 관리할 수 있도록 개선이 필요합니다.

다음과 같은 개선을 제안합니다:

+ const DELIVERY_STAGES = ['발송완료', '업체도착', '스캔진행', '작업완료'] as const
+ type DeliveryStage = typeof DELIVERY_STAGES[number]
+
+ interface OrderInfo {
+   // ... 기존 필드들
+   currentStage: DeliveryStage
+ }

  <nav className="mb-4 text-sm text-gray-500">
-   발송완료 &gt; 업체도착 &gt; 스캔진행 &gt;{' '}
-   <span className="text-blue-500">작업완료</span>
+   {DELIVERY_STAGES.map((stage, index) => (
+     <React.Fragment key={stage}>
+       <span className={stage === data.currentStage ? 'text-blue-500' : ''}>
+         {stage}
+       </span>
+       {index < DELIVERY_STAGES.length - 1 && ' > '}
+     </React.Fragment>
+   ))}
  </nav>

62-67: 중복된 버튼 스타일을 컴포넌트로 분리하면 좋겠습니다

동일한 스타일이 적용된 버튼이 반복되고 있습니다.

다음과 같은 개선을 제안합니다:

+ const OrderButton = ({ children }: { children: React.ReactNode }) => (
+   <button className="border-1 h-[38px] w-[262px] rounded border border-blue-500 px-4 py-2 text-blue-500 transition hover:bg-blue-50">
+     {children}
+   </button>
+ )

  <div className="space-x-2">
-   <button className="border-1 h-[38px] w-[262px] rounded border border-blue-500 px-4 py-2 text-blue-500 transition hover:bg-blue-50">
-     배송조회
-   </button>
-   <button className="border-1 h-[38px] w-[262px] rounded border border-blue-500 px-4 py-2 text-blue-500 transition hover:bg-blue-50">
-     주문 상세
-   </button>
+   <OrderButton>배송조회</OrderButton>
+   <OrderButton>주문 상세</OrderButton>
  </div>

58-60: 가격 포맷팅을 더 견고하게 처리하면 좋겠습니다

toLocaleString()만으로는 다양한 로케일과 통화 형식을 처리하기에 충분하지 않을 수 있습니다.

다음과 같은 개선을 제안합니다:

+ const formatPrice = (price: number) => {
+   return new Intl.NumberFormat('ko-KR', {
+     style: 'currency',
+     currency: 'KRW',
+     maximumFractionDigits: 0
+   }).format(price)
+ }

  <div className="text-lg font-bold text-red-500">
-   {data.price.toLocaleString()}원
+   {formatPrice(data.price)}
  </div>
src/app/(user)/profile/(order)/orderHistory/page.tsx (1)

94-96: 배열 인덱스를 key로 사용하고 있습니다.

React의 재조정(reconciliation) 과정에서 문제가 발생할 수 있으므로, 주문번호와 같은 고유한 값을 key로 사용하는 것이 좋습니다.

-<OrderCard key={idx} data={order} />
+<OrderCard key={order.orderNumber} data={order} />
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 27e065e and 7057922.

📒 Files selected for processing (12)
  • package.json (1 hunks)
  • src/app/(user)/layout.tsx (2 hunks)
  • src/app/(user)/privacy/page.tsx (1 hunks)
  • src/app/(user)/profile/(order)/orderHistory/page.tsx (1 hunks)
  • src/app/(user)/profile/(userInfo)/changePassword/page.tsx (1 hunks)
  • src/app/(user)/profile/(userInfo)/editInfo/page.tsx (1 hunks)
  • src/app/(user)/profile/(userInfo)/layout.tsx (1 hunks)
  • src/app/(user)/profile/(userInfo)/page.tsx (1 hunks)
  • src/app/(user)/profile/layout.tsx (1 hunks)
  • src/app/(user)/profile/page.tsx (1 hunks)
  • src/app/_components/ui/OrderCard.tsx (1 hunks)
  • src/app/_components/ui/banner/Banner.tsx (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • src/app/(user)/profile/(userInfo)/layout.tsx
  • src/app/(user)/profile/(userInfo)/page.tsx
🔇 Additional comments (4)
src/app/(user)/profile/(userInfo)/editInfo/page.tsx (2)

35-48: 전화번호 인증 로직 구현이 필요합니다

인증받기 버튼 클릭 시 실행될 로직과 인증 상태 관리가 필요합니다.

인증 로직 구현이 필요하시다면 도움을 드릴 수 있습니다. GitHub 이슈를 생성해드릴까요?


67-85: 주소 검색 기능 구현이 필요합니다

카카오 주소 검색 API 등을 활용하여 주소 검색 기능을 구현해주세요.

주소 검색 API 연동이 필요하시다면 도움을 드릴 수 있습니다. GitHub 이슈를 생성해드릴까요?

src/app/(user)/profile/(order)/orderHistory/page.tsx (1)

1-4: import 문 구성이 적절합니다.

Next.js 13+ App Router에서 필요한 'use client' 지시문과 필수 의존성들이 올바르게 임포트되어 있습니다.

package.json (1)

45-47: 패키지 구성이 단순화되었습니다.

MSW 워커 디렉토리 설정이 배열에서 문자열로 변경되었고, 패키지 매니저 버전에서 해시가 제거되었습니다. 이는 구성을 단순화하는 긍정적인 변경사항입니다.

다만, 다음 사항을 확인해주시기 바랍니다:

  1. MSW 워커가 public 디렉토리에서 정상적으로 동작하는지
  2. yarn 버전 변경으로 인한 호환성 문제가 없는지
✅ Verification successful

구성 변경사항이 안전하게 적용되었습니다

  • MSW 워커 파일이 public 디렉토리에 정상적으로 존재하며 올바르게 구성되어 있습니다
  • yarn 버전 변경과 관련된 의존성 충돌이 발견되지 않았습니다
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# MSW 워커 파일 존재 여부 확인
echo "Checking MSW worker file..."
ls public/mockServiceWorker.js || echo "Warning: MSW worker file not found"

# yarn.lock 파일에서 의존성 충돌 확인
echo "Checking for dependency conflicts..."
cat yarn.lock | grep -i "conflict" || echo "No conflicts found in yarn.lock"

Length of output: 316


Script:

#!/bin/bash
# Check MSW worker file content (first few lines should be enough)
echo "=== MSW Worker Content ==="
head -n 5 public/mockServiceWorker.js

# Check previous package.json configuration
echo -e "\n=== Previous Package.json Configuration ==="
git log -p package.json | grep -A 5 -B 5 "workerDirectory" | head -n 20

Length of output: 276

@ukongee ukongee changed the title Design/#27 메인페이지 퍼블리싱 Design/#27 마이페이지 퍼블리싱 Jan 14, 2025
Copy link
Member

@jinoo0306 jinoo0306 left a comment

Choose a reason for hiding this comment

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

전체적으로 컴포넌트를 재사용하지 못하고 있어요. 공용 컴포넌트 만들어 둔거 재사용 적극 해 주시고 반복적인 스타일을 사용중이라면 묶어서 컴포넌트 추상화 해 주세요. 제가 코멘트 달지 않았더라도 반복해서 사용하는 부분은 반드시 컴포넌트를 재사용해 주세요. 그래야 코드의 가독성과 유지보수성이 향상됩니다!!

src/app/(user)/layout.tsx Show resolved Hide resolved
src/app/(user)/profile/(userInfo)/page.tsx Show resolved Hide resolved
src/app/(user)/profile/layout.tsx Show resolved Hide resolved
src/app/(user)/profile/page.tsx Show resolved Hide resolved
src/app/_components/ui/OrderCard.tsx Show resolved Hide resolved
@jinoo0306 jinoo0306 changed the title Design/#27 마이페이지 퍼블리싱 [design] 마이페이지 퍼블리싱 Jan 14, 2025
@ukongee ukongee merged commit 0ee8d64 into develop Jan 14, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[design] profile페이지 퍼블리싱
2 participants