Skip to content

[feat] 운영진 책장 상세 UI 구현#71

Merged
hongik-luke merged 2 commits intodevfrom
feat-69-admin-detailbookcase-ui
Feb 6, 2026
Merged

[feat] 운영진 책장 상세 UI 구현#71
hongik-luke merged 2 commits intodevfrom
feat-69-admin-detailbookcase-ui

Conversation

@shinwokkang
Copy link
Contributor

💡 To Reviewers

  • 해당 브랜치에서 새롭게 설치한 라이브러리가 있다면 함께 명시해 주세요.

  • 없음

  • 리뷰어가 코드를 이해하는 데 도움이 되는 정보나 참고사항이 있다면 자유롭게 작성해 주세요.

🔥 작업 내용 (가능한 구체적으로 작성해 주세요)

운영진 책장 리스트 페이지 구현

  • 경로: src/app/groups/[id]/admin/bookcase/page.tsx
  • 기존 BookcaseCard를 재사용하여 리스트 UI 구현
  • 카드 클릭 시 운영진 도서 상세 페이지(/admin/bookcase/[bookId])로 라우팅 처리

운영진 도서 상세 페이지 및 컴포넌트 구현

  • 경로: src/app/groups/[id]/admin/bookcase/[bookId]/page.tsx
  • 도서 상세 정보 컴포넌트 (BookDetailCard): 도서 이미지, 정보, 별점, 소개글 표시
  • 탭 내비게이션 (BookDetailNav): 발제 / 한줄평 / 정기모임 탭 전환 기능
  • 모임 정보 및 조 관리 UI
    • AdminMeetingInfo: 모임 일정, 장소 정보 및 '조 관리하기' 버튼
    • TeamFilter: A조, B조 등 조 선택 필터링 탭
    • TeamSection & TeamMemberItem: 선택된 조의 멤버 리스트 표시 및 더보기 버튼

🤔 추후 작업 예정

  • 추가 구현이 필요한 부분이나 다음 작업 계획을 작성해 주세요.
  • Mock Data로 구현된 부분 API 연동 (도서 리스트, 멤버 리스트 등)

📸 작업 결과 (스크린샷)

  • 작업 결과를 보여주는 스크린샷을 첨부해 주세요.
image

🔗 관련 이슈

@shinwokkang shinwokkang self-assigned this Feb 5, 2026
@shinwokkang shinwokkang added ✨ feat 새로운 기능 추가 🎨 style 스타일, 포맷, 세미콜론 등 코드 비동작 변경 labels Feb 5, 2026
@coderabbitai
Copy link

coderabbitai bot commented Feb 5, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • 🔍 Trigger a full review
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat-69-admin-detailbookcase-ui

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link

Summary of Changes

Hello @shinwokkang, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 운영진 책장 상세 페이지의 UI를 구현하고, 기존 책장 목록 페이지에서 이 새로운 상세 페이지로 이동할 수 있도록 업데이트합니다. 도서 상세 정보, 모임 정보, 조원 관리 기능을 표시하기 위한 여러 신규 컴포넌트들이 목업 데이터를 기반으로 도입되었습니다.

Highlights

  • 운영진 책장 상세 페이지 UI 구현: 운영진을 위한 도서 상세 페이지 UI가 새롭게 구현되었습니다. 이 페이지는 도서 정보, 모임 정보, 조 관리 기능을 포함합니다.
  • 운영진 책장 목록 페이지 업데이트: 기존 운영진 책장 목록 페이지가 업데이트되어, 각 도서 카드 클릭 시 새로 구현된 운영진 도서 상세 페이지로 이동하도록 라우팅 기능이 추가되었습니다.
  • 신규 컴포넌트 도입: 모임 정보 표시를 위한 AdminMeetingInfo, 조 필터링을 위한 TeamFilter, 조원 목록을 표시하는 TeamSectionTeamMemberItem, 그리고 상세 페이지 내 탭 내비게이션을 위한 BookDetailNav 등 여러 신규 컴포넌트가 추가되었습니다.
  • SVG 아이콘 추가: UI에 사용될 '오른쪽 화살표', '달력', '위치', '그룹 사용자' 등의 SVG 아이콘 파일들이 public 디렉토리에 추가되었습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • public/Arrow-Right2.svg
    • 오른쪽 화살표 SVG 아이콘이 추가되었습니다.
  • public/Calendar.svg
    • 달력 SVG 아이콘이 추가되었습니다.
  • public/Location2.svg
    • 위치 아이콘 SVG가 추가되었습니다.
  • public/groups_3User.svg
    • 세 명의 사용자 그룹을 나타내는 SVG 아이콘이 추가되었습니다.
  • src/app/groups/[id]/admin/bookcase/[bookId]/page.tsx
    • 운영진 도서 상세 페이지를 위한 새로운 파일이 추가되었습니다.
    • 이 페이지는 도서 상세 정보, 모임 정보, 조원 데이터를 위한 목업 데이터를 포함하며, BookDetailCard, BookDetailNav, AdminMeetingInfo, TeamFilter, TeamSection 컴포넌트를 사용합니다.
  • src/app/groups/[id]/admin/bookcase/page.tsx
    • 기존 운영진 책장 목록 페이지가 수정되었습니다.
    • BookDetailCard 대신 BookcaseCard를 사용하여 목록 UI를 구성하고, 각 카드 클릭 시 새로운 운영진 도서 상세 페이지로 이동하는 라우팅 로직이 추가되었습니다.
    • 목업 데이터 생성 방식도 리팩토링되었습니다.
  • src/components/base-ui/Bookcase/Admin/AdminMeetingInfo.tsx
    • 모임 이름, 날짜, 장소 정보를 표시하고 '조 관리하기' 버튼을 포함하는 새로운 컴포넌트가 추가되었습니다.
    • groups_3User.svg, Calendar.svg, Location2.svg 아이콘을 사용합니다.
  • src/components/base-ui/Bookcase/Admin/TeamFilter.tsx
    • 조(예: A조, B조)를 선택하여 필터링하는 새로운 컴포넌트가 추가되었습니다.
  • src/components/base-ui/Bookcase/Admin/TeamMemberItem.tsx
    • 개별 조원의 프로필 이미지와 이름을 표시하며 '더보기' 버튼을 포함하는 새로운 컴포넌트가 추가되었습니다.
  • src/components/base-ui/Bookcase/Admin/TeamSection.tsx
    • 특정 조의 이름과 해당 조에 속한 TeamMemberItem 목록을 표시하는 새로운 컴포넌트가 추가되었습니다.
    • Arrow-Right2.svg 아이콘을 사용합니다.
  • src/components/base-ui/Bookcase/BookDetailNav.tsx
    • 도서 상세 페이지에서 '발제', '한줄평', '정기모임' 탭을 전환하는 내비게이션 컴포넌트가 추가되었습니다.
Activity
  • shinwokkang님이 운영진 책장 상세 페이지 UI 구현 및 목록 페이지와의 연동을 위해 이 PR을 생성했습니다.
  • PR 설명에는 새로운 페이지 및 컴포넌트의 경로와 향후 작업 계획(API 연동)이 상세히 명시되어 있습니다.
  • 구현된 UI를 시각적으로 확인할 수 있는 스크린샷이 첨부되었습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

운영진 책장 상세 페이지 UI 구현을 위한 코드 변경사항 잘 확인했습니다. 전반적으로 컴포넌트 기반으로 UI를 잘 구성해주셨고, 목업 데이터를 활용하여 기능 구현이 잘 이루어진 것 같습니다. 다만, 몇 가지 개선점을 제안드립니다. 여러 컴포넌트에서 고정된 픽셀 너비(e.g., w-[1040px])를 사용하고 있는데, 이는 반응형 디자인에 취약할 수 있습니다. w-full이나 max-w-* 같은 반응형 클래스를 사용하는 것을 고려해보시면 좋겠습니다. 또한, 일부 컴포넌트의 JSX 구조를 단순화하고, 조건부 클래스 적용 시 가독성을 높일 수 있는 방법에 대한 의견도 포함했습니다. 자세한 내용은 각 파일의 주석을 참고해주세요.

);

// 조 선택 상태 관리
const [selectedTeam, setSelectedTeam] = useState("A조");

Choose a reason for hiding this comment

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

medium

selectedTeam의 초기값을 "A조"로 하드코딩하면, MOCK_TEAMS_DATA에 "A조"가 없거나 데이터가 비어있을 경우 currentTeamDataundefined가 되어 예기치 않은 동작을 할 수 있습니다. 데이터의 첫 번째 팀 이름으로 초기화하거나, 데이터가 없을 경우를 대비한 처리를 추가하여 코드를 더 견고하게 만들 수 있습니다.

Suggested change
const [selectedTeam, setSelectedTeam] = useState("A조");
const [selectedTeam, setSelectedTeam] = useState(MOCK_TEAMS_DATA[0]?.teamName ?? "");

Comment on lines +63 to +64
<div className="flex w-[1441px] flex-col items-start gap-[24px]">
<div className="flex w-[1145px] flex-col items-start gap-[40px] pl-[40px] pr-[65px]">

Choose a reason for hiding this comment

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

medium

w-[1441px], w-[1145px]와 같이 고정된 픽셀 너비를 사용하면 화면 크기가 다른 디바이스에서 레이아웃이 깨질 수 있습니다. 반응형 디자인을 위해 w-full, max-w-screen-xl과 같은 Tailwind의 반응형 유틸리티 클래스를 사용하는 것을 권장합니다.

onManageGroupClick,
}: Props) {
return (
<div className="flex w-[1040px] h-[124px] flex-col justify-between items-center rounded-[8px] bg-[#F2EFEE] p-[20px]">

Choose a reason for hiding this comment

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

medium

w-[1040px]와 같이 고정된 픽셀 너비는 반응형 웹 디자인에 적합하지 않습니다. 상위 컨테이너에 맞춰 너비가 조절되도록 w-full을 사용하거나, max-w-* 클래스를 사용하여 최대 너비를 제한하는 방식을 고려해보세요. 23번째 줄의 w-[1000px]도 마찬가지입니다.

Comment on lines +25 to +35
<div className="flex flex-col items-start gap-[24px]">
<div className="flex items-center justify-between w-full">
<div className="flex items-center gap-[8px]">
<div className="relative h-[24px] w-[24px]">
<Image src="/groups_3User.svg" alt="모임 아이콘" fill />
</div>
{/* 모임 이름: Subhead_4.1 */}
<span className="text-Gray-7 subhead_4_1">{meetingName}</span>
</div>
</div>
</div>

Choose a reason for hiding this comment

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

medium

현재 '모임 이름 영역'을 감싸고 있는 div들은 불필요하게 중첩되어 있습니다. JSX 구조를 더 간결하게 만들어 가독성을 높일 수 있습니다.

          <div className="flex items-center gap-[8px]">
            <div className="relative h-[24px] w-[24px]">
              <Image src="/groups_3User.svg" alt="모임 아이콘" fill />
            </div>
            {/* 모임 이름: Subhead_4.1 */}
            <span className="text-Gray-7 subhead_4_1">{meetingName}</span>
          </div>

Comment on lines +18 to +24
className={`flex h-[36px] w-[83px] items-center justify-center rounded-[4px] border px-[10px] text-[14px] font-medium leading-[145%] tracking-[-0.014px] transition-colors
${
isActive
? "bg-primary-2 border-primary-2 text-White"
: "bg-White border-Subbrown-4 text-Gray-7 hover:bg-gray-50"
}
`}

Choose a reason for hiding this comment

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

medium

조건부 클래스를 적용하기 위해 템플릿 리터럴을 사용하는 것은 클래스 문자열을 복잡하고 읽기 어렵게 만들 수 있습니다. clsxclassnames와 같은 유틸리티 라이브러리를 사용하면 조건부 클래스를 더 선언적이고 깔끔하게 관리할 수 있어 코드 가독성과 유지보수성이 향상됩니다.

Comment on lines +23 to +30
<div className="relative h-[24px] w-[24px]">
<Image
src="/Arrow-Right2.svg"
alt="arrow right"
fill
className="object-contain"
/>
</div>

Choose a reason for hiding this comment

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

medium

헤더의 오른쪽 화살표 아이콘은 사용자가 클릭할 수 있을 것처럼 보이지만, 현재 div로 구현되어 있어 아무런 동작을 하지 않습니다. UI/UX 일관성을 위해, 시각적으로 클릭 가능해 보이는 요소는 button 태그나 Link 컴포넌트로 감싸 상호작용이 가능하도록 만드는 것이 좋습니다.

Suggested change
<div className="relative h-[24px] w-[24px]">
<Image
src="/Arrow-Right2.svg"
alt="arrow right"
fill
className="object-contain"
/>
</div>
<button className="relative h-[24px] w-[24px]">
<Image
src="/Arrow-Right2.svg"
alt="arrow right"
fill
className="object-contain"
/>
</button>

@hongik-luke hongik-luke merged commit d81926d into dev Feb 6, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feat 새로운 기능 추가 🎨 style 스타일, 포맷, 세미콜론 등 코드 비동작 변경

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants