Skip to content

Conversation

@yuj2n
Copy link
Contributor

@yuj2n yuj2n commented Apr 28, 2025

🧩 관련 이슈 번호

✨ 요약

크레딧 충전하기 토스트 적용 기능 구현

📌 주요 변경 사항

  • 크레딧 충전하기 토스트 적용 기능 구현
  • 크레딧 충전 했을때 뜨는 alert창
  • 크레딧 충전 선택안하고 충전하기 눌렀을때 뜨는 alert창
  • 크레딧 충전하기 모달 창 콤마 적용
  • 크레딧 변경 시 마다 리렌더링 → 투표 수 변경 시 마다 리렌더링
  • 더 보기 버튼 @/components/button 폴더로 이동(재사용되지 않더라도 추후 사용성 고려)
  • screenSize 함수 @/utils/responsive로 분리하여 공용화

✅ 체크리스트

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

📷 UI 변경 사항 (선택)

20250429_014636.mp4

❓무슨 문제가 발생했나요 ?

💬 논의 사항

  • 경고창에 2초동안 100%에서 0%로 내려가는 프로그래스바 하단에 추가하면 좋을 것 같아요!

💬 기타 참고 사항

Summary by CodeRabbit

  • New Features
    • "Load More" 버튼이 추가되어 더 많은 항목을 불러올 수 있습니다.
    • "Load More" 버튼에 시각적 애니메이션과 반응형 스타일이 적용되었습니다.
  • 개선 사항
    • 투표 성공 시 차트 데이터가 자동으로 새로고침됩니다.
    • 크레딧 충전 모달에 로고 이미지가 추가되고, 금액 표시가 쉼표로 구분되어 가독성이 향상되었습니다.
  • 버그 수정
    • 버튼 및 차트 컴포넌트의 스타일이 통일되고, 불필요한 스타일이 제거되었습니다.
  • 기타
    • 일부 내부 알림이 커스텀 알림으로 대체되었습니다.

yuj2n added 12 commits April 28, 2025 22:36
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요

# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분

# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)

# 커밋 타입 가이드:
# ✨ Feat     : 새로운 기능 추가
# 🐛 Fix      : 버그 수정
# 📦 Chore    : 설정/빌드 수정, 기타 잡일
# 💄 Style    : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs     : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
@yuj2n yuj2n added ✨Feat 기능 개발 ♻️Refactor 리팩토링 💄Style 스타일링 labels Apr 28, 2025
@yuj2n yuj2n added this to the 2차 구현 기간 milestone Apr 28, 2025
@yuj2n yuj2n self-assigned this Apr 28, 2025
@yuj2n yuj2n linked an issue Apr 28, 2025 that may be closed by this pull request
5 tasks
@yuj2n yuj2n added this to StarSync Apr 28, 2025
@coderabbitai
Copy link

coderabbitai bot commented Apr 28, 2025

📝 Walkthrough

Walkthrough

이 변경사항은 투표 성공 시 외부 상태를 갱신하는 트리거(voteSuccessTrigger)를 도입하여, 차트 및 리스트 관련 컴포넌트의 데이터 새로고침을 쉽게 할 수 있도록 구조를 확장합니다. VoteModalListModal, ListPage, Chart 컴포넌트에 새로운 상태와 prop이 추가되었으며, LoadMoreButton 컴포넌트는 별도의 스타일 파일과 배럴 파일로 분리되어 관리됩니다. 또한, 크레딧 충전 모달의 스타일과 알림 방식이 개선되고, 반응형 유틸리티의 export 방식이 변경되었습니다. 불필요한 공백 제거, 스타일 리팩토링 등도 포함되어 있습니다.

Changes

파일/경로 요약 변경 요약
src/Root.jsx JSX fragment 내 불필요한 공백 2줄 삭제. 렌더링 및 구조 변화 없음.
src/components/button/index.js
src/components/button/loadMoreButton/index.js
LoadMoreButton 컴포넌트 export 추가 및 배럴 파일 신설.
src/components/button/loadMoreButton/LoadMoreButton.jsx 스타일 import 경로를 ./chart.styles에서 ./loadMoreButton.styles로 변경.
src/components/button/loadMoreButton/loadMoreButton.styles.js "Load More" 버튼용 keyframes, flex 정렬, 버튼 스타일 등 신규 스타일 모듈 추가.
src/components/chart/Chart.jsx updateCredit prop을 voteSuccessTrigger로 변경, 관련 useEffect 의존성도 수정. import 경로 일부 절대경로로 변경.
src/components/chart/chart.styles.js idolList 이미지 border 색상 변경, li:active에 scale 효과 추가, moreButton 스타일 완전 삭제.
src/components/list/ListModal.jsx setVoteSuccessTrigger prop 추가 및 VoteModal에 전달.
src/components/modals/creditChargeModal/CreditChargeModal.jsx alert를 커스텀 showAlert로 변경, 타이틀에 로고 추가, 금액 표시에 addCommas 적용, 이미지 스타일 동적 적용.
src/components/modals/creditChargeModal/creditChargeModal.styles.js 반응형 media query 제거, 고정값 적용, 타이틀/이미지/버튼 스타일 추가 및 수정.
src/components/modals/voteModal/VoteModal.jsx setVoteSuccessTrigger prop 추가, 투표 성공 시 상태 토글하여 외부 갱신 유도.
src/pages/list/ListPage.jsx voteSuccessTrigger 상태 및 setter 추가, 관련 prop 전달 구조로 변경.
src/utils/responsive/index.js
src/utils/responsive/useScreenSize.js
useScreenSize의 export를 named에서 default로 변경, index에서 재export.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant ListPage
    participant ListModal
    participant VoteModal
    participant Chart

    User->>ListPage: 투표 버튼 클릭
    ListPage->>ListModal: modalType='vote'로 모달 표시
    ListModal->>VoteModal: setVoteSuccessTrigger prop 전달
    User->>VoteModal: 투표 진행
    VoteModal->>VoteModal: 투표 성공 시 setVoteSuccessTrigger(prev => !prev) 호출
    VoteModal->>ListPage: voteSuccessTrigger 상태 변경
    ListPage->>Chart: voteSuccessTrigger prop 변경으로 useEffect 트리거
    Chart->>Chart: 차트 데이터 새로고침
Loading

Possibly related PRs

Suggested reviewers

  • pappaya109
  • sgoldenbird

Poem

🐇
투표의 성공, 트리거로 전해
차트는 새로고침, 리스트도 환해
버튼엔 애니메이션, 스타일도 새로
로고와 알림, 모두 반짝이는 glow
바니는 깡총, 코드를 춤추네!
🌟

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 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.
  • @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 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.

@yuj2n yuj2n removed this from StarSync Apr 28, 2025
@github-actions
Copy link

🚀 PR Preview 배포 완료!
🔗 Preview 확인하기

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

🧹 Nitpick comments (2)
src/components/button/loadMoreButton/loadMoreButton.styles.js (2)

4-14: 애니메이션 키프레임 정의
voteButtonFlow 키프레임 애니메이션이 의도대로 배경 흐름을 잘 표현하고 있습니다. 다만, 이 파일이 LoadMoreButton 전용이므로 변수명을 moreButtonFlow 등으로 변경하면 컴포넌트 간 오해를 줄일 수 있습니다.


22-31: 기본 버튼 스타일 설정
margin-inline, margin-block 등 CSS 논리 프로퍼티를 잘 활용하셨습니다. 다만 transition: all은 퍼포먼스에 영향을 줄 수 있으므로, 예컨대 background-positionopacity처럼 필요한 프로퍼티만 명시하여 전환 대상을 좁히는 것을 고려해 보세요.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 767734e and c9eb58b.

📒 Files selected for processing (14)
  • src/Root.jsx (0 hunks)
  • src/components/button/index.js (1 hunks)
  • src/components/button/loadMoreButton/LoadMoreButton.jsx (1 hunks)
  • src/components/button/loadMoreButton/index.js (1 hunks)
  • src/components/button/loadMoreButton/loadMoreButton.styles.js (1 hunks)
  • src/components/chart/Chart.jsx (2 hunks)
  • src/components/chart/chart.styles.js (2 hunks)
  • src/components/list/ListModal.jsx (2 hunks)
  • src/components/modals/creditChargeModal/CreditChargeModal.jsx (3 hunks)
  • src/components/modals/creditChargeModal/creditChargeModal.styles.js (3 hunks)
  • src/components/modals/voteModal/VoteModal.jsx (2 hunks)
  • src/pages/list/ListPage.jsx (2 hunks)
  • src/utils/responsive/index.js (1 hunks)
  • src/utils/responsive/useScreenSize.js (2 hunks)
💤 Files with no reviewable changes (1)
  • src/Root.jsx
🧰 Additional context used
🧬 Code Graph Analysis (4)
src/components/list/ListModal.jsx (2)
src/components/modals/voteModal/VoteModal.jsx (1)
  • VoteModal (10-113)
src/pages/list/ListPage.jsx (1)
  • updateCredit (27-29)
src/components/modals/creditChargeModal/CreditChargeModal.jsx (2)
src/pages/list/ListPage.jsx (2)
  • credit (11-11)
  • updateCredit (27-29)
src/utils/format/addCommas.js (1)
  • addCommas (17-24)
src/components/chart/Chart.jsx (2)
src/pages/list/ListPage.jsx (2)
  • selectedTab (12-12)
  • voteSuccessTrigger (14-14)
src/utils/responsive/useScreenSize.js (1)
  • screenSize (22-22)
src/components/button/loadMoreButton/loadMoreButton.styles.js (1)
src/styles/responsive.js (1)
  • media (14-14)
🔇 Additional comments (33)
src/utils/responsive/useScreenSize.js (1)

21-21: 모듈 내보내기 패턴 개선이 잘 되었습니다!

네임드 익스포트에서 기본 익스포트로 변경하여 index.js 파일을 통한 중앙화된 내보내기를 가능하게 했습니다. 이는 다른 컴포넌트에서 임포트 방식을 일관되게 유지할 수 있게 해주며, PR 목표에 맞게 screenSize 함수를 공유 유틸리티로 추출하는 작업이 잘 이루어졌습니다.

Also applies to: 39-40

src/utils/responsive/index.js (1)

1-1: 유틸리티 모듈 구조화가 잘 되었습니다!

배럴 패턴(barrel pattern)을 사용하여 useScreenSize 훅을 중앙에서 내보내는 구조가 잘 구현되었습니다. 이렇게 하면 애플리케이션 전체에서 @/utils/responsive에서 직접 임포트할 수 있어 일관성 있는 코드 구조를 유지할 수 있습니다. PR 목표에 맞게 screenSize 함수를 프로젝트 전반에서 공통으로 사용할 수 있도록 공유 유틸리티로 추출한 점이 좋습니다.

src/components/modals/creditChargeModal/creditChargeModal.styles.js (4)

18-22: 모달 콘텐츠 스타일 개선이 잘 되었습니다.

고정 치수와 간격을 사용하여 모달 콘텐츠의 레이아웃이 더 일관되게 설정되었습니다. 다만, 미디어 쿼리를 제거하고 고정 치수로 대체한 점이 작은 화면에서도 잘 동작하는지 확인해보시길 권장합니다.


24-39: 모달 타이틀 스타일 추가가 적절합니다.

타이틀 섹션에 로고 이미지를 추가하고 정렬하는 스타일이 잘 구현되었습니다. PR에서 언급된 크레딧 충전 모달 UI 개선에 맞게 시각적으로 더 명확하고 깔끔한 헤더를 제공합니다.


54-56: 버튼 스타일 개선이 사용자 경험을 향상시킵니다.

고정 크기로 버튼 일관성을 유지하고, 선택 시 미묘한 확대 효과(scale transform)를 추가한 것은 사용자에게 좋은 시각적 피드백을 제공합니다. 이는 PR 목표인 크레딧 충전 과정의 사용자 경험 개선에 잘 부합합니다.

Also applies to: 67-68


71-75: 크레딧 이미지 스타일 함수 구현이 잘 되었습니다.

ID에 따라 동적으로 이미지 크기와 여백을 조정하는 creditImg 함수가 효과적으로 구현되었습니다. 이를 통해 다양한 크레딧 이미지에 대해 일관된 레이아웃을 유지하면서도 각 이미지의 특성에 맞춘 세부 조정이 가능해졌습니다.

src/components/button/loadMoreButton/LoadMoreButton.jsx (1)

1-1: 컴포넌트 재사용성 개선이 잘 되었습니다!

'더 보기' 버튼을 @/components/button 디렉토리로 이동하고 전용 스타일 파일을 임포트하도록 변경한 것은 PR 목표에 부합합니다. 이제 이 버튼 컴포넌트를 프로젝트 전체에서 더 쉽게 재사용할 수 있게 되었습니다. 또한 JSDoc 문서화가 잘 되어 있어 컴포넌트의 사용 방법이 명확합니다.

src/components/button/loadMoreButton/index.js (1)

1-2: 간결하고 깔끔한 배럴 파일 구현 👍

배럴 파일(barrel file)을 사용하여 LoadMoreButton 컴포넌트를 내보내는 방식이 깔끔하게 구현되었습니다. 이는 PR 목표에 맞게 "더 보기" 버튼 컴포넌트를 재사용 가능한 형태로 분리한 좋은 예입니다.

src/components/button/index.js (1)

5-5: 버튼 컴포넌트 내보내기에 LoadMoreButton 추가 👍

버튼 컴포넌트들을 모아놓은 인덱스 파일에 LoadMoreButton을 추가하여 일관성 있는 구조를 유지했습니다. 이렇게 하면 다른 개발자들이 버튼 컴포넌트를 쉽게 찾고 재사용할 수 있습니다.

src/components/list/ListModal.jsx (2)

9-17: 컴포넌트 props 구조 개선 👍

ListModal 컴포넌트의 props에 setVoteSuccessTrigger를 추가한 것은 좋은 변경입니다. 각 prop이 새 줄에 배치되어 가독성이 향상되었습니다.


44-49: 투표 성공 상태 전파 구현 👍

VoteModal에 setVoteSuccessTrigger props를 전달하여 투표 성공 시 상태를 업데이트하는 매커니즘을 구현했습니다. 이는 투표 완료 후 UI를 새로고침하는 좋은 방법입니다.

관련 코드 스니펫을 보면 VoteModal 내부에서 투표 성공 시 setVoteSuccessTrigger((prev) => !prev)를 호출하여 상태를 토글하는 것을 확인할 수 있습니다. 이렇게 하면 차트와 같은 다른 컴포넌트가 투표 성공에 반응할 수 있습니다.

src/components/chart/chart.styles.js (3)

143-143: 아이돌 이미지 테두리 색상 개선 👍

이미지 테두리 색상을 var(--black)에서 var(--black-deep)으로 변경하여 시각적 대비를 향상시켰습니다. 이는 UI의 가독성을 개선합니다.


155-157: 인터랙션 피드백 추가 👍

아이돌 목록 아이템에 &:active 가상 클래스를 추가하여 클릭 시 살짝 확대되는 효과를 구현했습니다. 이러한 미세한 애니메이션은 사용자에게 즉각적인 시각적 피드백을 제공하여 UX를 향상시킵니다.


1-184:

Details

✅ Verification successful

moreButton 스타일 관련 확인 필요

AI 요약에 따르면 moreButton 스타일 선언이 완전히 제거되었다고 합니다. 이는 LoadMoreButton 컴포넌트를 별도 파일로 분리하고 해당 스타일도 함께 이동했기 때문으로 보입니다. 이 변경이 의도적인지 확인해주세요.

이 변경이 의도적이었다면, 모든 스타일이 새 위치로 올바르게 이동되었는지 확인하기 위해 다음 스크립트를 실행해보세요:


🏁 Script executed:

#!/bin/bash
# LoadMoreButton의 스타일 파일 확인
echo "Checking if LoadMoreButton styles exist in the new location:"
cat src/components/button/loadMoreButton/loadMoreButton.styles.js 2>/dev/null || echo "Style file not found!"

# Chart 컴포넌트에서 LoadMoreButton 사용 확인
echo -e "\nChecking how LoadMoreButton is used in Chart component:"
rg "LoadMoreButton" src/components/chart/Chart.jsx

Length of output: 1684


LoadMoreButton 스타일 분리 확인 및 정상 사용

  • src/components/button/loadMoreButton/loadMoreButton.styles.jsmoreButton 스타일이 정상적으로 정의되어 있습니다.
  • src/components/chart/Chart.jsx에서는 <LoadMoreButton isLoading={isLoading} hasMore={hasMore} onClick={loadMore} />로 올바르게 불러와 사용하고 있습니다.

따라서 chart.styles.js에서 moreButton 선언이 사라진 것은 의도된 변경이며, 스타일 누락 이슈는 없습니다.

src/pages/list/ListPage.jsx (3)

14-15: 새로운 상태 변수 추가로 투표 성공 시 UI 업데이트 개선

투표 성공 시 차트 업데이트를 트리거하기 위한 voteSuccessTrigger 상태 변수를 추가한 것은 좋은 접근 방식입니다. 불필요한 리렌더링 없이 데이터 갱신을 필요한 시점에만 처리할 수 있게 되었습니다.


40-40: Chart 컴포넌트에 투표 성공 트리거 전달

updateCredit 대신 voteSuccessTrigger를 전달함으로써 투표 성공 시 차트가 새로고침되도록 연결하였습니다. 이 접근 방식은 의존성을 명확히 하고 컴포넌트 간 데이터 흐름을 개선합니다.


47-47: ListModal에 투표 성공 트리거 setter 전달

setVoteSuccessTrigger를 ListModal에 전달하여 투표 모달에서 투표 성공 시 상태를 업데이트할 수 있도록 한 것은 적절합니다. 이를 통해 컴포넌트 간 상태 관리가 명확해집니다.

src/components/modals/voteModal/VoteModal.jsx (2)

10-10: props에 setVoteSuccessTrigger 추가

투표 모달에 setVoteSuccessTrigger prop을 추가하여 투표 성공 시 외부 상태 업데이트가 가능하도록 구현하였습니다. 상위 컴포넌트로부터 전달받은 setter를 사용하는 것은 React의 단방향 데이터 흐름 원칙을 따르는 좋은 접근법입니다.


31-31: 투표 성공 시 차트 업데이트 트리거 구현

투표 성공 후 setVoteSuccessTrigger((prev) => !prev)를 호출하여 이전 상태를 토글하는 방식은 훌륭합니다. 함수형 업데이트를 사용하여 최신 상태 값을 참조하고, 명확한 주석으로 목적을 설명한 것도 좋습니다.

src/components/chart/Chart.jsx (3)

6-7: 절대 경로 임포트로 변경

useScreenSizeLoadMoreButton 임포트를 절대 경로 방식으로 변경한 것은 코드 가독성과 유지보수성을 높입니다. 특히 컴포넌트가 이동하거나 구조가 변경될 경우에도 임포트 경로를 쉽게 유지할 수 있습니다.


10-10: props 업데이트: updateCredit → voteSuccessTrigger

updateCredit 대신 voteSuccessTrigger를 prop으로 받도록 변경함으로써, 투표 성공 시 차트 데이터를 새로고침하는 의도가 더 명확해졌습니다. 이는 컴포넌트의 의존성을 더 정확하게 표현합니다.


55-55: useEffect 의존성 배열 업데이트

useEffect의 의존성 배열에 voteSuccessTrigger를 추가하여 투표 성공 시 차트 데이터를 리셋하고 다시 가져오도록 구현한 것은 적절합니다. 이를 통해 UI가 항상 최신 데이터를 반영할 수 있습니다.

src/components/modals/creditChargeModal/CreditChargeModal.jsx (5)

4-5: 유틸리티 및 에셋 임포트 추가

숫자 형식화를 위한 addCommas, 알림 표시를 위한 showAlert 유틸리티와 로고 이미지를 임포트한 것은 좋은 개선입니다. 이를 통해 사용자 경험이 향상되고 코드의 재사용성이 높아집니다.

Also applies to: 8-8


27-27: 경고 알림 UI 개선

기본 alert 대신 showAlert 함수를 사용하여 'warning' 타입의 알림을 표시하도록 변경한 것은 사용자 경험을 개선합니다. 커스텀 알림 시스템은 앱의 디자인 시스템과 일관성을 유지하는 데 도움이 됩니다.


35-35: 성공 알림 UI 개선

크레딧 충전 성공 시 showAlert를 사용하여 'success' 타입의 알림을 표시하도록 개선하였습니다. 이는 사용자에게 작업 성공을 명확하게 알려주는 좋은 방법입니다.


42-45: 모달 제목에 로고 추가

모달 제목을 스타일이 적용된 span으로 감싸고 로고 이미지를 추가한 것은 시각적 디자인을 개선합니다. 이렇게 하면 사용자가 모달의 목적을 즉시 인식할 수 있습니다.


58-59: 크레딧 표시 UI 개선

크레딧 이미지에 동적 CSS 스타일을 적용하고, 크레딧 금액에 addCommas 함수를 사용하여 천 단위 구분자를 추가한 것은 가독성과 사용자 경험을 크게 향상시킵니다. 특히 큰 숫자를 다룰 때 가독성이 좋아집니다.

src/components/button/loadMoreButton/loadMoreButton.styles.js (6)

1-2: 임포트 정렬 및 사용 검증
외부 패키지(@emotion/react)와 내부 유틸(@/styles/responsive)이 적절히 임포트되었으며, 사용되지 않는 임포트가 없습니다.


16-20: 공통 flexCenter 스타일 도출
flexCenter를 분리해 재사용성을 높인 점이 훌륭합니다. 다른 컴포넌트에도 동일 패턴이 필요할 경우 일관된 레이아웃 관리에 도움이 될 것입니다.


32-36: 반응형 미디어 쿼리 적용
facepaint 기반의 media 헬퍼를 활용해 폰트 크기, 너비, 높이를 배열로 정의한 접근이 적절합니다. 다양한 뷰포트에서 일관된 UI를 제공할 수 있습니다.


38-42: 호버 상태 UX 개선
호버 시 background-position 이동과 voteButtonFlow 애니메이션, 불투명도 조절을 통해 동적인 버튼 피드백을 잘 구현했습니다.


44-46: 액티브 상태 피드백
transform: scale(0.97)을 통해 클릭 시 미세하게 눌리는 이펙트를 제공해 사용자 경험을 향상시켰습니다.


48-51: 비활성화 상태 접근성 고려
비활성화 상태에서 cursor: not-allowed와 불투명도 조절로 사용자 입력 차단 의도를 명확히 표현했습니다.

@yuj2n yuj2n merged commit 4f5079b into develop Apr 28, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨Feat 기능 개발 ♻️Refactor 리팩토링 💄Style 스타일링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨Feat: 크레딧 충전하기 모달 토스트 적용 기능 구현

2 participants