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

[feat] 관리페이지 route수정 & API요청 hook 작성 #98

Merged
merged 4 commits into from
Oct 23, 2024

Conversation

ssumanlife
Copy link
Contributor

@ssumanlife ssumanlife commented Oct 22, 2024

🚀 풀 리퀘스트 제안

[작업 내용을 간단히 설명해 주세요]

📋 작업 세부 사항

관리페이지 route수정 & API요청 hook 작성

🔧 변경 사항 요약

  • 관리페이지 route수정

    • /my-page/my-created-travel/manage-my-travel/:travelId
    • 위의 경로일때 마이페이지에 고정된 네브바, 상위컴포넌트 null 처리
  • API요청 hook 작성 (useManageTravelData.ts)

Summary by CodeRabbit

  • 새로운 기능

    • 사용자가 생성한 여행 관리 기능 추가: manage-my-travel/:travelId 경로에서 여행 세부 정보를 관리할 수 있는 새로운 하위 경로 추가.
    • MyPage에서 사이드 메뉴의 조건부 렌더링 구현.
    • URL 매개변수를 활용하여 여행 ID를 추출하고, ID 비교를 통해 렌더링 로직 개선.
    • 새로운 커스텀 훅 useManageTravelData 도입으로 여행 데이터 가져오기 기능 추가.
    • 새로운 빵 부스러기 경로 추가: '내 여행 관리'로 표시되는 manage-my-travel 경로.
  • 버그 수정

    • managePage 변수에 따라 컴포넌트의 렌더링 로직 수정.
  • 문서화

    • 코드의 일부 구조 및 스타일 수정에 대한 설명 추가.

@ssumanlife ssumanlife added the feat New features or functionality label Oct 22, 2024
@ssumanlife ssumanlife self-assigned this Oct 22, 2024
@ssumanlife ssumanlife linked an issue Oct 22, 2024 that may be closed by this pull request
Copy link

coderabbitai bot commented Oct 22, 2024

Walkthrough

이 변경 사항은 MyPageContainer.tsx에서 새로운 불리언 변수 managePage를 도입하여 현재 경로가 /my-page/my-created-travel/manage-my-travel/로 시작하는지를 판단합니다. 이 변수는 MyPageSideMenu 컴포넌트를 조건부로 렌더링하는 데 사용됩니다. 또한, useManageTravelData라는 새로운 커스텀 훅이 추가되어 travelId에 따라 여행 데이터를 가져오고, 여러 컴포넌트에서 URL 매개변수를 처리하는 로직이 개선되었습니다.

Changes

파일 경로 변경 요약
src/components/myPage/MyPageContainer.tsx managePage 변수를 추가하여 MyPageSideMenu의 조건부 렌더링 구현 및 myPageLayout 함수 수정.
src/hooks/useManageTravelData.ts useManageTravelData 커스텀 훅 추가, travelId에 따라 여행 데이터 가져오기.
src/layouts/Auth.tsx 로고 이미지의 경로를 상대 경로에서 절대 경로로 변경.
src/layouts/Breadcrumb.tsx breadcrumbsMap'manage-my-travel': '내 여행 관리' 추가.
src/pages/ManageMyTravel.tsx URL 매개변수에서 travelId 추출 및 ID 비교를 통한 조건부 렌더링 로직 추가.
src/pages/MyCreatedTravel.tsx managePage 변수를 사용하여 조건부 렌더링 로직 추가 및 Outlet 컴포넌트 포함.
src/routes/router.tsx manage-my-travel/:travelId 경로에 대한 새로운 자식 라우트 추가 및 기존 경로 삭제.

Possibly related issues

  • byulhook/travely#97: 관리페이지 API 연동 및 라우트 수정과 관련된 작업 목록이 포함되어 있어 이 PR의 변경 사항과 관련이 있습니다.

Possibly related PRs

Suggested labels

setting

Suggested reviewers

  • haruyam15
  • Sonseongoh

📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 6d7eae9 and 5af5163.

📒 Files selected for processing (1)
  • src/components/myPage/MyPageContainer.tsx (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/components/myPage/MyPageContainer.tsx

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ 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.
    • 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 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.

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

🧹 Outside diff range and nitpick comments (7)
src/pages/MyCreatedTravel.tsx (2)

8-8: managePage 변수 추가 승인 및 개선 제안

managePage 변수를 사용하여 관리 페이지 렌더링을 제어하는 것은 좋은 접근 방식입니다. 하지만 location.pathname을 직접 사용하는 대신, 커스텀 훅이나 컨텍스트를 사용하여 이 로직을 추상화하는 것이 좋겠습니다. 이렇게 하면 코드의 재사용성과 유지보수성이 향상될 것입니다.

다음과 같은 커스텀 훅을 만들어 사용하는 것을 고려해보세요:

function useIsManagePage() {
  const location = useLocation();
  return location.pathname.startsWith('/my-page/my-created-travel/manage-my-travel/');
}

// 사용 예
const managePage = useIsManagePage();

Line range hint 1-24: 전체 리뷰 요약

전반적으로 이 변경사항들은 PR의 목표를 잘 달성하고 있습니다. 관리 페이지 라우팅 수정이 성공적으로 구현되었고, 중첩 라우팅을 위한 Outlet의 사용도 적절합니다.

개선을 위한 제안:

  1. managePage 로직을 커스텀 훅으로 추출하여 재사용성을 높이세요.
  2. 컴포넌트 이름을 더 명확하게 만드는 것을 고려해보세요. 예를 들어, MyCreatedTravelMyCreatedTravelPage로 변경하면 이 컴포넌트가 페이지 레벨 컴포넌트임을 더 명확히 할 수 있습니다.
src/hooks/useManageTravelData.ts (2)

4-7: 인터페이스 정의가 명확합니다. 이름 개선 제안

인터페이스 정의가 잘 되어 있습니다. 속성들의 타입이 적절하게 지정되어 있습니다. 다만, 인터페이스 이름을 더 명확하게 할 수 있습니다.

인터페이스 이름을 UseManageTravelDataParams로 변경하는 것을 고려해 보세요. 이렇게 하면 이 인터페이스가 훅의 매개변수를 나타낸다는 것이 더 명확해집니다.


9-23: 훅 구현이 잘 되어 있습니다. 몇 가지 개선 사항 제안

useManageTravelData 훅의 전반적인 구조가 잘 구현되어 있습니다. react-query의 best practices를 잘 따르고 있습니다.

개선할 수 있는 부분:

  1. 에러 처리: 현재는 에러를 콘솔에 로깅만 하고 있습니다. 에러를 throw하여 상위 컴포넌트에서 처리할 수 있게 하는 것이 좋습니다.

  2. API 엔드포인트: 현재 엔드포인트가 하드코딩되어 있습니다. 환경 변수나 설정 파일을 사용하여 관리하는 것이 더 유지보수에 용이할 것 같습니다.

다음과 같이 수정을 고려해보세요:

import { API_BASE_URL } from '../config';

// ...

const res = await axios.get(`${API_BASE_URL}/travels/manage-my-travel/${travelId}`);

// ...

catch (error) {
  console.error('관리할 여행 데이터 로드 실패:', error);
  throw error;
}
src/pages/ManageMyTravel.tsx (1)

13-13: travelId 추출 승인 및 개선 제안

useParams를 사용하여 travelId를 추출하는 것은 좋습니다. 이는 PR 목표와 일치합니다.

타입 안전성을 위해 다음과 같이 타입 단언을 추가하는 것이 좋습니다:

const { travelId } = useParams<{ travelId: string }>();

이렇게 하면 travelId가 항상 문자열임을 보장할 수 있습니다.

src/layouts/Breadcrumb.tsx (1)

16-16: 새로운 breadcrumb 항목이 추가되었습니다.

새로운 'manage-my-travel' 항목이 breadcrumbsMap에 추가된 것은 적절해 보입니다. 이는 PR의 목적인 관리 페이지 라우팅 수정과 일치합니다.

일관성을 위해 breadcrumbsMap 객체의 항목들을 알파벳 순서로 정렬하는 것이 좋을 것 같습니다. 이렇게 하면 향후 유지보수가 더 쉬워질 것입니다.

src/routes/router.tsx (1)

73-78: 라우트 구조가 잘 구성되었습니다.

새로운 자식 라우트가 'my-created-travel' 경로 아래에 잘 추가되었습니다. 동적 세그먼트 ':travelId'를 사용하여 다양한 여행 ID를 처리할 수 있게 한 점이 좋습니다.

가독성을 높이기 위해 다음과 같이 주석을 추가하는 것은 어떨까요?

 children: [
   {
+    // 여행 관리 페이지 라우트
     path: 'manage-my-travel/:travelId',
     element: <ManageMyTravel />,
   },
 ],
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between bfb633b and 6d7eae9.

📒 Files selected for processing (7)
  • src/components/myPage/MyPageContainer.tsx (2 hunks)
  • src/hooks/useManageTravelData.ts (1 hunks)
  • src/layouts/Auth.tsx (1 hunks)
  • src/layouts/Breadcrumb.tsx (1 hunks)
  • src/pages/ManageMyTravel.tsx (1 hunks)
  • src/pages/MyCreatedTravel.tsx (1 hunks)
  • src/routes/router.tsx (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/layouts/Auth.tsx
🧰 Additional context used
🔇 Additional comments (10)
src/pages/MyCreatedTravel.tsx (2)

4-4: Outlet 컴포넌트 import 추가 승인

Outlet 컴포넌트를 import하여 중첩 라우팅을 구현한 것은 관리 페이지의 라우팅 수정이라는 PR 목표에 부합합니다.


12-18: return 문 변경 승인

managePage 변수를 기반으로 한 조건부 렌더링과 Outlet 컴포넌트의 추가는 잘 구현되었습니다. 이 변경사항들은 PR의 목표인 관리 페이지 라우팅 수정을 효과적으로 달성하고 있습니다. 중첩 라우팅을 위한 Outlet의 사용은 특히 적절합니다.

src/hooks/useManageTravelData.ts (2)

1-2: LGTM: 적절한 import 문

import 문이 올바르게 작성되었으며, 필요한 모듈들을 정확하게 가져오고 있습니다.


1-23: 전반적으로 잘 구현된 커스텀 훅

이 파일은 PR의 목적에 부합하는 useManageTravelData 커스텀 훅을 잘 구현하고 있습니다. 이 훅은 관리 페이지에서 여행 데이터를 가져오는 데 중요한 역할을 할 것으로 보입니다.

주요 장점:

  1. react-query를 효과적으로 사용하여 데이터 fetching을 관리합니다.
  2. 타입 안정성을 위해 인터페이스를 사용합니다.
  3. 에러 처리 로직이 포함되어 있습니다.

제안된 개선 사항을 적용하면 더욱 견고하고 유지보수가 쉬운 코드가 될 것입니다. 전반적으로 이 파일은 PR의 목표를 잘 달성하고 있으며, 관리 페이지의 기능 향상에 크게 기여할 것으로 보입니다.

src/components/myPage/MyPageContainer.tsx (2)

9-9: LGTM: managePage 변수 추가

managePage 변수의 도입은 현재 페이지가 여행 관리 페이지인지 확인하는 좋은 방법입니다. 이는 PR 목표에 부합하며, 라우트에 따라 동적으로 UI를 조정할 수 있게 해줍니다.


18-20: LGTM: 컴포넌트 렌더링 로직 개선

managePage 상태에 따라 레이아웃과 사이드 메뉴 렌더링을 조정하는 변경사항은 적절합니다. 이는 PR의 목표인 관리 페이지 라우트 수정을 잘 반영하고 있으며, 사용자 경험을 향상시킬 것으로 보입니다.

src/pages/ManageMyTravel.tsx (2)

8-8: useParams 훅 추가 승인

react-router-dom에서 useParams를 가져오는 것은 URL 매개변수를 처리하기 위한 좋은 접근 방식입니다. 이는 PR 목표와 일치하며 라우팅 기능을 개선합니다.


25-25: 반환문의 최상위 요소 변경에 대한 설명 요청

최상위 요소를 <section>에서 <div>로 변경한 이유가 명확하지 않습니다.

이 변경이 의도적인 것인지, 그리고 어떤 목적으로 이루어졌는지 설명해 주시기 바랍니다. <section> 요소는 일반적으로 콘텐츠의 의미론적 구조를 더 잘 나타내므로, 이 변경이 필요한 특별한 이유가 있는지 확인이 필요합니다.

src/layouts/Breadcrumb.tsx (1)

Line range hint 23-73: 새로운 'manage-my-travel' 경로 처리 확인 필요

BreadCrumb 컴포넌트에 새로 추가된 'manage-my-travel' 경로를 처리하는 특정 로직이 보이지 않습니다. 기존 로직이 이 새 경로를 적절히 처리할 수 있는지 확인이 필요합니다.

다음 스크립트를 실행하여 'manage-my-travel' 경로가 어떻게 처리되는지 확인해 주세요:

이 결과를 바탕으로 필요한 경우 'manage-my-travel' 경로에 대한 특별한 처리를 추가하는 것을 고려해 보세요.

✅ Verification successful

'manage-my-travel' 경로가 적절히 처리되고 있습니다.

breadcrumbsMap에 'manage-my-travel'이 포함되어 있어, 추가적인 로직 없이도 올바르게 표시됩니다.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the handling of 'manage-my-travel' path in the BreadCrumb component

# Test: Search for any specific handling of 'manage-my-travel' path
rg -i 'manage-my-travel' src/layouts/Breadcrumb.tsx

# Test: Check if there are any switch cases or conditionals that might handle this new path
rg -A 5 -e 'switch.*path' -e 'if.*path.*==' src/layouts/Breadcrumb.tsx

Length of output: 984

src/routes/router.tsx (1)

Line range hint 1-124: 전반적인 라우팅 구조가 개선되었습니다.

새로운 'manage-my-travel/:travelId' 라우트 추가로 여행 관리 기능의 구조가 개선되었습니다. 이 변경사항은 PR의 목표와 일치하며, 기존 라우팅 구조와도 잘 통합되어 있습니다. 사용자 경험 향상에 기여할 것으로 보입니다.

Comment on lines 25 to 32
const myPageLayout = (managePage: boolean) => css`
display: flex;
gap: 60px;
position: relative;
${managePage &&
`
display: block;
`}
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

LGTM: myPageLayout 함수 개선, 가독성 개선 제안

myPageLayout 함수의 변경은 managePage 상태에 따라 동적으로 스타일을 조정할 수 있게 해주어 좋습니다. 이는 PR 목표에 부합하며 레이아웃의 유연성을 향상시킵니다.

가독성을 더욱 개선하기 위해, 조건부 스타일링을 다음과 같이 변경하는 것을 고려해보세요:

const myPageLayout = (managePage: boolean) => css`
  display: ${managePage ? 'block' : 'flex'};
  gap: 60px;
  position: relative;
`;

이렇게 하면 코드가 더 간결해지고 이해하기 쉬워질 것 같습니다.

src/pages/ManageMyTravel.tsx Show resolved Hide resolved
Copy link
Contributor

@nakyeonko3 nakyeonko3 left a comment

Choose a reason for hiding this comment

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

새 라우팅 경로에 대해 브래드크럼에도 정의해두셨네요.
큰 문제가 보이는 코드는 없습니다.

@nakyeonko3 nakyeonko3 merged commit c987f05 into main Oct 23, 2024
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat New features or functionality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[feat] 관리페이지 API연동 & Route수정
2 participants