Skip to content

feat: 모임방 상세페이지#51

Merged
ho0010 merged 17 commits into
developfrom
feat/group-detail
Jul 21, 2025
Merged

feat: 모임방 상세페이지#51
ho0010 merged 17 commits into
developfrom
feat/group-detail

Conversation

@ho0010
Copy link
Copy Markdown
Collaborator

@ho0010 ho0010 commented Jul 20, 2025

#️⃣연관된 이슈

[UI] 모임방 상세 정보 페이지 #37

📝작업 내용

모임방 상세 정보 페이지를 개발했습니다.

스크린샷 (선택)

image image

💬리뷰 요구사항(선택)

global에 11px = 2xs로 추가해두었습니다.

기존에 있던 11px은 모두 변경해두었으니 앞으로는 2xs 사용부탁드립니다!

Summary by CodeRabbit

  • 신규 기능

    • 그룹 상세 페이지와 도서 검색 페이지가 추가되어 독서 모임 및 도서 정보를 상세히 확인할 수 있습니다.
    • 그룹 추천 카드 스타일이 개선되어 추천 그룹을 더 쉽게 구분할 수 있습니다.
    • 그룹 상세 페이지에서 추천 그룹 목록을 확인할 수 있습니다.
    • 도서 상세 화면에서 모집 중인 그룹, 피드, 도서 저장 기능 등을 사용할 수 있습니다.
  • 버그 수정

    • 일부 컴포넌트의 폰트 사이즈가 글로벌 스타일 토큰을 사용하도록 통일되었습니다.
  • 스타일

    • 그룹 카드, 그룹 상세, 도서 검색 등 다양한 UI 요소의 스타일이 전반적으로 개선되었습니다.
    • 새로운 폰트 사이즈(2xs, 11px)가 추가되어 텍스트 가독성이 향상되었습니다.
  • 기타

    • 라우팅 구조가 개선되어 그룹 상세, 그룹 검색 등 접근성이 좋아졌습니다.
    • 목업 데이터가 추가되어 개발 및 테스트 환경에서 더 다양한 시나리오를 지원합니다.

@vercel
Copy link
Copy Markdown

vercel Bot commented Jul 20, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
thip ❌ Failed (Inspect) Jul 21, 2025 5:46pm

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jul 20, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

이 변경사항은 그룹 상세 페이지 및 책 검색 페이지 신설, 그룹 카드 컴포넌트의 추천 스타일 추가, 전역 타이포그래피 토큰 확장, 장르별 배경 이미지 유틸리티 추가, 라우트 구조 개선, 그리고 일부 스타일을 전역 토큰 사용으로 통일하는 작업을 포함합니다.

Changes

파일(그룹) 변경 요약
src/components/group/GroupCard.tsx isRecommend 불리언 prop 추가 및 스타일 컴포넌트에 전달, 스타일 분기 로직 및 전역 토큰 적용
src/components/group/MyGroupBox.tsx Group 인터페이스의 id 타입을 string에서 number | string으로 변경
src/mocks/groupDetail.mock.ts 그룹 상세 및 추천 그룹, 책 정보가 포함된 mockGroupDetail 객체 추가
src/pages/groupDetail/GroupDetail.styled.ts 그룹 상세 페이지용 styled-component 대량 신규 추가 및 전역 토큰 사용
src/pages/groupDetail/GroupDetail.tsx 그룹 상세 React 컴포넌트 신설, mock 데이터 활용, 추천 그룹 리스트 렌더링 포함
src/pages/index.tsx GroupDetail 컴포넌트 라우트 추가, groupsearch → group/search로 경로 정비
src/styles/global/global.ts typography.fontSize에 '2xs': '11px' 토큰 및 CSS 변수 추가
src/utils/getBackgroundImageByGenre.ts 장르별 배경 이미지 경로 반환 유틸리티 함수 신설
src/components/feed/FollowList.tsx
src/components/feed/UserProfileItem.tsx
src/components/today-words/MessageList/MessageList.styled.ts
하드코딩된 11px 폰트 크기를 전역 typography 토큰(2xs)으로 대체
src/components/common/Post/PostHeader.tsx import문 뒤 불필요한 빈 줄 제거 (기능 변화 없음)
src/pages/searchBook/SearchBook.tsx 책 검색 상세 React 컴포넌트 신설, mock 데이터와 전역 스타일 컴포넌트 활용

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Router
    participant GroupDetailPage
    participant MockData
    participant GroupCard

    User->>Router: "group/detail" 경로 접근
    Router->>GroupDetailPage: GroupDetail 컴포넌트 렌더링
    GroupDetailPage->>MockData: mockGroupDetail 데이터 로딩
    GroupDetailPage->>GroupCard: 추천 그룹 리스트 렌더링 (isRecommend=true)
    User->>GroupDetailPage: 뒤로가기, 참여하기 등 UI 인터랙션
Loading
sequenceDiagram
    participant User
    participant Router
    participant SearchBookPage
    participant MockData

    User->>Router: "searchBook" 경로 접근
    Router->>SearchBookPage: SearchBook 컴포넌트 렌더링
    SearchBookPage->>MockData: 책 및 피드 mock 데이터 로딩
    User->>SearchBookPage: 필터 변경, 소개 더보기, 글쓰기 등 UI 인터랙션
Loading

Estimated code review effort

3 (~45분)

Possibly related PRs

Suggested reviewers

  • heeeeyong

Poem

🐇
새로운 그룹의 길이 열렸네,
추천 카드 작아지고 색도 곱게!
장르별 배경에 책 향기 솔솔,
전역 폰트로 통일된 토끼의 목표.
리뷰어님, 한 번만 더 Hop!

(토끼가 코딩한 밤에)


📜 Recent review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 29ac2b3 and dddabff.

📒 Files selected for processing (7)
  • src/components/common/Post/PostHeader.tsx (0 hunks)
  • src/components/feed/FollowList.tsx (3 hunks)
  • src/components/group/GroupCard.tsx (4 hunks)
  • src/components/group/MyGroupBox.tsx (1 hunks)
  • src/pages/groupDetail/GroupDetail.styled.ts (1 hunks)
  • src/pages/index.tsx (2 hunks)
  • src/pages/searchBook/SearchBook.tsx (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings

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.
    • @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 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.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

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

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.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in 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 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.

@ho0010 ho0010 closed this Jul 20, 2025
@ho0010 ho0010 deleted the feat/group-detail branch July 20, 2025 08:08
@ho0010 ho0010 restored the feat/group-detail branch July 20, 2025 08:08
@ho0010 ho0010 reopened this Jul 20, 2025
@ho0010 ho0010 changed the title Feat/group detail feat: 모임 상세페이지 Jul 20, 2025
@ho0010 ho0010 requested review from heeeeyong and ljh130334 July 20, 2025 08:09
@ho0010 ho0010 self-assigned this Jul 20, 2025
@ho0010 ho0010 added ✨ Feature 기능 개발 🎨 Html&css 마크업 & 스타일링 labels Jul 20, 2025
@ho0010 ho0010 changed the title feat: 모임 상세페이지 feat: 모임방 상세페이지 Jul 20, 2025
Copy link
Copy Markdown

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

♻️ Duplicate comments (2)
src/pages/groupDetail/GroupDetail.tsx (2)

87-87: 동일한 문제: IconButton의 alt 속성

87번째 줄에서도 동일한 alt 속성 사용 문제가 발생합니다.


108-108: 동일한 문제: IconButton의 alt 속성

108번째 줄에서도 동일한 alt 속성 사용 문제가 발생합니다.

🧹 Nitpick comments (6)
src/utils/getBackgroundImageByGenre.ts (1)

7-22: 타입 안전성과 유지보수성 개선을 고려해보세요

함수 로직은 올바르지만 다음 개선사항을 고려해보시기 바랍니다:

  1. 장르 문자열을 상수나 enum으로 정의하여 타입 안전성 확보
  2. 함수 매개변수에 더 구체적인 타입 정의

다음과 같이 개선할 수 있습니다:

+export const GENRES = {
+  LITERATURE: '문학',
+  SOCIAL_SCIENCE: '사회과학', 
+  SCIENCE_IT: '과학•IT',
+  ART: '예술',
+  HUMANITIES: '인문학'
+} as const;
+
+export type Genre = typeof GENRES[keyof typeof GENRES];
+
-export const getBackgroundImageByGenre = (genre: string): string => {
+export const getBackgroundImageByGenre = (genre: Genre): string => {
   switch (genre) {
-    case '문학':
+    case GENRES.LITERATURE:
       return literatureBackground;
     // ... 나머지 케이스들도 동일하게 수정
src/pages/index.tsx (1)

21-21: 라우팅 구조가 개선되었지만 동적 라우팅 고려가 필요합니다

라우팅 구조가 group/ prefix로 일관성 있게 정리되었고 새로운 GroupDetail 컴포넌트가 적절히 추가되었습니다.

그룹 상세 페이지의 경우 특정 그룹 ID를 위한 동적 라우팅을 고려해보시기 바랍니다:

-        <Route path="group/detail" element={<GroupDetail />} />
+        <Route path="group/detail/:groupId" element={<GroupDetail />} />

이렇게 하면 URL에서 그룹 ID를 추출하여 해당 그룹의 실제 데이터를 로드할 수 있습니다.

Also applies to: 34-36

src/mocks/groupDetail.mock.ts (1)

1-53: 목 데이터 구조가 잘 설계되었습니다

그룹 상세 페이지에 필요한 모든 데이터가 포함된 포괄적인 목 데이터입니다. 숫자형 ID 사용이 인터페이스 변경사항과 일치합니다.

다음 개선사항을 고려해보시기 바랍니다:

  1. 추천 그룹 데이터 다양성: 현재 추천 그룹들이 동일한 데이터를 사용하고 있습니다
  2. 이미지 URL 안정성: 외부 이미지 URL 대신 로컬 에셋 사용 고려
 recommendations: [
   {
     id: 1,
-    title: '방제목입니다다 방 제목입...',
+    title: '클래식 문학 모임',
     participants: 22,
     maximumParticipants: 30,
-    deadLine: 3,
+    deadLine: 5,
   },
   {
     id: 2,
-    title: '방제목입니다다 방 제목입...',
+    title: '현대 소설 읽기',
     participants: 18,
     maximumParticipants: 25,
-    deadLine: 3,
+    deadLine: 7,
   },
src/pages/groupDetail/GroupDetail.tsx (1)

58-58: 빈 핸들러 함수 구현 필요

handleMoreButton 함수가 비어있습니다. 이 함수가 의도적으로 비워둔 것인지 확인하고, 향후 구현이 필요한 경우 TODO 주석을 추가하는 것을 고려해보세요.

src/pages/groupDetail/GroupDetail.styled.ts (1)

202-205: 가로 스크롤 접근성 고려

GroupCardBox에서 가로 스크롤을 사용하고 있는데, 터치 디바이스와 키보드 접근성을 고려한 추가 스타일링이 필요할 수 있습니다.

export const GroupCardBox = styled.div`
  display: flex;
  overflow-x: auto;
  padding: 0 20px;
  gap: 20px;
+ scroll-behavior: smooth;
+ &::-webkit-scrollbar {
+   height: 4px;
+ }
+ &::-webkit-scrollbar-thumb {
+   background: ${colors.grey[300]};
+   border-radius: 2px;
+ }
`;
src/components/group/GroupCard.tsx (1)

93-121: 사용되지 않는 isRecommend 매개변수

Participant, RecruitingDeadline, OngoingDeadline 컴포넌트들이 isRecommend prop을 받고 있지만 실제로는 사용하지 않고 있습니다. 이는 불필요한 prop이거나 향후 사용 예정인 것으로 보입니다.

만약 향후 사용 계획이 없다면 해당 prop들을 제거하는 것을 고려해보세요:

- const Participant = styled.div<{ isRecommend: boolean }>`
+ const Participant = styled.div`

또는 향후 사용 예정이라면 TODO 주석을 추가해주세요.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 9f87a3a and 98c5b64.

⛔ Files ignored due to path filters (7)
  • src/assets/genre/ScienceITBackground.svg is excluded by !**/*.svg
  • src/assets/genre/artBackground.svg is excluded by !**/*.svg
  • src/assets/genre/humanityBackground.svg is excluded by !**/*.svg
  • src/assets/genre/literatureBackground.svg is excluded by !**/*.svg
  • src/assets/genre/socialScienceBackground.svg is excluded by !**/*.svg
  • src/assets/group/calendar.svg is excluded by !**/*.svg
  • src/assets/group/lock.svg is excluded by !**/*.svg
📒 Files selected for processing (8)
  • src/components/group/GroupCard.tsx (4 hunks)
  • src/components/group/MyGroupBox.tsx (1 hunks)
  • src/mocks/groupDetail.mock.ts (1 hunks)
  • src/pages/groupDetail/GroupDetail.styled.ts (1 hunks)
  • src/pages/groupDetail/GroupDetail.tsx (1 hunks)
  • src/pages/index.tsx (2 hunks)
  • src/styles/global/global.ts (2 hunks)
  • src/utils/getBackgroundImageByGenre.ts (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (2)
src/pages/groupDetail/GroupDetail.styled.ts (2)
src/styles/global/global.ts (2)
  • colors (4-53)
  • typography (56-77)
src/utils/getBackgroundImageByGenre.ts (1)
  • getBackgroundImageByGenre (7-22)
src/components/group/GroupCard.tsx (1)
src/styles/global/global.ts (2)
  • colors (4-53)
  • typography (56-77)
🔇 Additional comments (3)
src/styles/global/global.ts (1)

62-62: 새로운 폰트 크기 토큰 추가가 적절합니다

'2xs': '11px' 폰트 크기 토큰과 해당 CSS 커스텀 속성이 기존 패턴을 따라 일관성 있게 추가되었습니다. 추천 그룹 카드의 작은 텍스트 스타일링에 유용할 것으로 보입니다.

Also applies to: 187-187

src/pages/groupDetail/GroupDetail.tsx (1)

79-79: IconButton은 styled.img로 구현되어 있어 alt prop을 지원합니다
IconButton이 Emotion의 styled.img로 정의되어 있어 <img>의 모든 표준 속성(예: src, alt, width, height 등)을 그대로 사용할 수 있습니다. 따라서 alt prop을 전달해도 문제가 없습니다.

Likely an incorrect or invalid review comment.

src/components/group/GroupCard.tsx (1)

28-35: 의도된 텍스트 사용 확인됨
RecruitingDeadline 컴포넌트는 모집 마감 시점을, OngoingDeadline 컴포넌트는 진행 종료 시점을 나타내므로 각각 모집 마감 / 종료라는 표현을 다르게 사용하는 것이 올바른 동작입니다. 변경이 필요 없습니다.

Comment thread src/components/group/GroupCard.tsx Outdated
Comment thread src/components/group/MyGroupBox.tsx Outdated

export interface Group {
id: string;
id: number;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

인터페이스 변경사항이 일관성 있게 적용되었는지 확인이 필요합니다

Group 인터페이스의 id 속성 타입이 string에서 number로 변경되었습니다. 이는 중대한 변경사항으로 다른 컴포넌트들에서 일관성 있게 적용되었는지 확인이 필요합니다.

다음 스크립트로 Group 인터페이스 사용처를 확인해보겠습니다:


🏁 Script executed:

#!/bin/bash
# Description: Group 인터페이스와 id 속성 사용처 확인

# Group 인터페이스를 import하거나 사용하는 파일들 검색
echo "=== Group 인터페이스 import 사용처 ==="
rg -A 3 "import.*Group.*from" --type ts --type tsx

echo -e "\n=== group.id 사용처 확인 ==="
rg -A 2 -B 2 "\.id" --type ts --type tsx | grep -A 2 -B 2 "group\|Group"

echo -e "\n=== 숫자 ID vs 문자열 ID 사용 패턴 ==="
rg -A 1 "id:\s*[0-9]" --type ts --type tsx
rg -A 1 "id:\s*['\"]" --type ts --type tsx

Length of output: 540


다음 스크립트로 .ts/.tsx 파일에 대해 직접 확장자를 지정하여 Group 인터페이스 정의, import, 및 id 사용처를 재검증해보겠습니다.


🏁 Script executed:

#!/bin/bash
echo "=== Group 인터페이스 정의 ==="
rg -n "interface Group" -g "*.ts" -g "*.tsx"

echo -e "\n=== Group 인터페이스 import ==="
rg -n "import.*Group" -g "*.ts" -g "*.tsx"

echo -e "\n=== group.id 사용처 ==="
rg -n "\.id\b" -g "*.ts" -g "*.tsx"

echo -e "\n=== 객체 리터럴 id 패턴 (숫자 vs 문자열) ==="
rg -n "id:\s*[0-9]" -g "*.ts" -g "*.tsx"
rg -n "id:\s*['\"]" -g "*.ts" -g "*.tsx"

Length of output: 8701


Group 인터페이스 id: number 타입과 하드코딩된 문자열 ID 불일치—숫자 리터럴로 수정 필요

아래 파일들에서 Group 인터페이스의 id를 숫자 타입으로 변경했지만, 여전히 문자열('1', '2'…)로 하드코딩된 곳이 발견되었습니다. id: number에 맞춰 각 리터럴을 숫자로 변경해주세요.

• src/pages/group/Group.tsx
• src/constants/today-constants.ts
• src/components/search/GroupSearchResult.tsx
• src/components/group/MyGroupModal.tsx
• src/components/group/CompletedGroupModal.tsx
• src/components/feed/MyFollower.tsx

rgba(0, 0, 0, 0) 0%,
var(--color-view-viewfield_background_black, #121212) 100%
);
backdrop-filter: blur(0px);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

backdrop-filter 사용 시 브라우저 지원 확인

backdrop-filter: blur(0px)는 비교적 새로운 CSS 속성으로 일부 브라우저에서 지원되지 않을 수 있습니다. 폴백 스타일을 고려하거나 지원 여부를 확인해주세요.


🌐 Web query:

backdrop-filter CSS property browser support and fallback options

💡 Result:

The backdrop-filter CSS property allows you to apply graphical effects like blurring or color shifting to the area behind an element, enabling effects such as the "frosted glass" look. However, browser support for this property varies, and providing fallbacks is essential for ensuring a consistent user experience across different browsers.

Browser Support:

As of July 2025, backdrop-filter is supported in the following browsers:

  • Chrome: Supported since version 76.
  • Safari: Supported since version 9 with the -webkit- prefix; unprefixed support introduced in Safari 18.
  • Edge: Supported since version 17.
  • Firefox: Supported since version 103.
  • Opera: Supported since version 64.

Notably, Internet Explorer does not support backdrop-filter. (caniuse.com)

Fallback Strategies:

To ensure your design remains functional in browsers that do not support backdrop-filter, consider the following approaches:

  1. Feature Queries:
    Use CSS @supports to apply styles conditionally based on browser support:

    .frosted {
      background: rgba(255, 255, 255, 0.9); /* Default background */
    }
    
    @supports (backdrop-filter: none) {
      .frosted {
        background: rgba(255, 255, 255, 0.3);
        backdrop-filter: blur(8px);
      }
    }

    In this example, browsers that support backdrop-filter will apply the blur effect, while others will use a solid background. (blog.logrocket.com)

  2. JavaScript Feature Detection:
    Utilize JavaScript to detect support and adjust styles accordingly:

    if ('backdropFilter' in document.body.style) {
      // Apply styles using backdrop-filter
    } else {
      // Apply fallback styles
    }

    This method allows for dynamic adjustments based on feature availability. (namastedev.com)

  3. Graceful Degradation:
    Design your elements to function without the backdrop-filter effect, ensuring that the content remains accessible and visually appealing even without the effect.

Performance Considerations:

Be mindful that backdrop-filter can impact performance, especially on less powerful devices. To optimize:

  • Limit the use of backdrop-filter to essential elements.
  • Test your design across various devices to ensure smooth performance.
  • Consider using the will-change property to inform the browser of upcoming changes, allowing for optimizations.

By implementing these strategies, you can create visually engaging designs that provide a consistent experience across different browsers and devices.

Citations:


backdrop-filter 지원 브라우저 및 폴백 처리 검토가 필요합니다

현재 src/pages/groupDetail/GroupDetail.styled.ts 파일 44라인에 설정된

backdrop-filter: blur(0px);

속성은 주요 브라우저(Chrome 76+, Safari 9/18+, Edge 17+, Firefox 103+, Opera 64+)에서만 지원되며, Internet Explorer 등에서는 동작하지 않습니다. 아래 방식을 고려해 폴백(fallback)과 성능 최적화를 추가해주세요.

• 브라우저 지원 현황 요약
– 지원: Chrome 76+, Safari(–webkit–)9+, Safari 18+, Edge 17+, Firefox 103+, Opera 64+
– 미지원: Internet Explorer

• CSS Feature Query (@supports) 활용 예시

.header {
  background: rgba(255,255,255,0.9);
}
@supports (backdrop-filter: none) {
  .header {
    background: rgba(255,255,255,0.3);
    backdrop-filter: blur(8px);
  }
}

• JavaScript로 지원 감지 후 스타일 적용

if ('backdropFilter' in document.body.style) {
  element.style.backdropFilter = 'blur(8px)';
} else {
  element.style.background = 'rgba(255,255,255,0.9)';
}

• 성능 최적화
– 불필요한 요소에 과도하게 사용하지 않기
will-change: backdrop-filter;로 브라우저 렌더링 힌트 제공
– 저사양 디바이스 테스트를 통해 퍼포먼스 확인

🤖 Prompt for AI Agents
In src/pages/groupDetail/GroupDetail.styled.ts at line 44, the backdrop-filter
CSS property is used without fallback or browser support handling. To fix this,
implement a CSS feature query using @supports to apply backdrop-filter only if
supported, and provide a solid background fallback for unsupported browsers like
Internet Explorer. Additionally, consider adding will-change: backdrop-filter
for performance optimization and avoid applying the effect excessively.
Optionally, use JavaScript to detect support and apply styles dynamically if
needed.

Comment thread src/pages/groupDetail/GroupDetail.styled.ts Outdated
Comment thread src/pages/groupDetail/GroupDetail.styled.ts Outdated
</Header>
<BannerSection>
<GroupTitle>
{title} {isPrivate && <img src={lockIcon} alt="자물쇠 아이콘"></img>}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

이미지 alt 속성 개선 필요

<img> 태그의 alt 속성이 누락되어 있습니다. 접근성을 위해 적절한 alt 텍스트를 추가해주세요.

- {title} {isPrivate && <img src={lockIcon} alt="자물쇠 아이콘"></img>}
+ {title} {isPrivate && <img src={lockIcon} alt="비공개 그룹"></img>}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{title} {isPrivate && <img src={lockIcon} alt="자물쇠 아이콘"></img>}
{title} {isPrivate && <img src={lockIcon} alt="비공개 그룹"></img>}
🤖 Prompt for AI Agents
In src/pages/groupDetail/GroupDetail.tsx at line 69, the <img> tag for the lock
icon is missing an alt attribute, which is important for accessibility. Add a
meaningful alt attribute to the <img> tag, such as alt="자물쇠 아이콘", to describe
the image content for screen readers.

Comment on lines +124 to +132
{recommendations.map(group => (
<GroupCard
key={group.id}
group={group}
isOngoing={true}
isRecommend={true}
type={'modal'}
/>
))}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

하드코딩된 props 값 검토 필요

GroupCard 컴포넌트에서 isOngoing={true}type={'modal'}이 하드코딩되어 있습니다. 이 값들이 추천 그룹에 항상 적절한지 검토가 필요합니다.


🏁 Script executed:

#!/bin/bash
# GroupCard 컴포넌트의 props 인터페이스 확인
ast-grep --pattern 'interface Props {
  $$$
  isOngoing?: $_
  type?: $_
  $$$
}'

# mockGroupDetail에서 recommendations 데이터 구조 확인
rg -A 10 "recommendations.*:" src/mocks/groupDetail.mock.ts

Length of output: 425


아래 스크립트를 통해 GroupCard 컴포넌트 파일을 찾아 Props 인터페이스와 기본값 설정을 확인해 주세요.


🏁 Script executed:

#!/bin/bash
# 1) GroupCard 컴포넌트가 정의된 파일 찾기
echo "=== GroupCard 컴포넌트가 정의된 파일 ==="
rg -l "GroupCard" -g "src/**/*.{tsx,ts}"

# 2) 각 파일에서 Props 인터페이스, isOngoing/type 사용 여부, defaultProps 확인
for f in $(rg -l "GroupCard" -g "src/**/*.{tsx,ts}"); do
  echo ""
  echo "===== 파일: $f ====="
  rg -n "interface Props" $f || true
  rg -n "isOngoing" $f || true
  rg -n "type\?" $f || true
  rg -n "defaultProps" $f || true
done

Length of output: 4960


recommendations 리스트에서 isOngoing/type 값을 하드코딩하지 않고 동적으로 계산하도록 수정 필요

추천 그룹이 항상 ‘진행 중’이거나 ‘modal’ 유형으로만 보여진다고 가정하기보다, 다음과 같이 실제 데이터/렌더링 컨텍스트에 따라 값을 넘겨주세요:

• src/pages/groupDetail/GroupDetail.tsx (약 128행)

-  <GroupCard
-    key={group.id}
-    group={group}
-    isOngoing={true}
-    isRecommend={true}
-    type={'modal'}
-  />
+  <GroupCard
+    key={group.id}
+    group={group}
+    // 예: 마감일(deadLine)이 남아 있으면 진행 중으로 간주
+    isOngoing={group.deadLine > 0}
+    isRecommend={true}
+    // 실제 모달 내에 렌더링되는 경우에만 'modal' 타입으로 설정
+    type={/* isModalContext ? 'modal' : undefined */}
+  />
  • isOngoinggroup.deadLine > 0 등으로 계산
  • type은 렌더링 위치(Modal 여부)에 따라 선택적으로 지정, 기본('main') 생략 가능

위와 같이 수정해 주세요.

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In src/pages/groupDetail/GroupDetail.tsx around lines 124 to 132, the isOngoing
and type props for GroupCard are hardcoded. Modify isOngoing to be dynamically
calculated based on group.deadLine > 0, and set type conditionally depending on
the rendering context (e.g., 'modal' if in a modal, otherwise omit or use 'main'
as default). This ensures the component reflects actual data and context instead
of fixed values.

@heeeeyong
Copy link
Copy Markdown
Collaborator

2xs 추가 감사합니다~ 앞으로 그거 사용하게쑵니당! 고생하셨습니다!

Copy link
Copy Markdown
Collaborator

@heeeeyong heeeeyong left a comment

Choose a reason for hiding this comment

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

LGTM👍

@ho0010 ho0010 merged commit 1291096 into develop Jul 21, 2025
1 check was pending
This was referenced Jul 23, 2025
@ho0010 ho0010 deleted the feat/group-detail branch July 26, 2025 01:20
This was referenced Aug 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 기능 개발 🎨 Html&css 마크업 & 스타일링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants