[feat] 마이페이지 관리자 카드 분리 및 채팅 미확인 배지 반영#251
Conversation
Walkthrough사용자 정보 카드와 관리자 카드를 역할별로 분리하고, 하단 네비게이션 채팅 탭에 미읽음 메시지 배지를 추가했습니다. Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (2)
src/components/layout/BottomNav/index.tsx (1)
71-71: Tailwind v4 drop-shadow 유틸리티 사용 고려.
filter-[drop-shadow(...)]대신 Tailwind v4의drop-shadow-*유틸리티 클래스 사용을 권장합니다.♻️ 제안
- className="pointer-events-none absolute top-[-26px] left-[-11px] z-10 h-[54px] w-[65px] max-w-none filter-[drop-shadow(0_3px_10px_rgba(0,0,0,0.10))]" + className="pointer-events-none absolute top-[-26px] left-[-11px] z-10 h-[54px] w-[65px] max-w-none drop-shadow-[0_3px_10px_rgba(0,0,0,0.10)]"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/layout/BottomNav/index.tsx` at line 71, The JSX in the BottomNav component uses an inline arbitrary filter class filter-[drop-shadow(0_3px_10px_rgba(0,0,0,0.10))] which should be replaced with Tailwind v4 drop-shadow utilities for consistency and better performance; update the className on the element in the BottomNav component (the JSX that currently contains filter-[drop-shadow(0_3px_10px_rgba(0,0,0,0.10))]) to use an appropriate drop-shadow-* utility (or compose existing utilities) that matches the same offset/blur/opacity, ensuring you remove the arbitrary filter class and test visual parity.src/pages/User/MyPage/components/ManagerInfoCard.tsx (1)
47-49: 타이포그래피는 토큰 유틸 클래스 기준으로 통일하는 것이 좋습니다.현재
text-[16px],text-[11px],text-xs같은 커스텀 크기가 섞여 있어요. 이 파일은 신규 추가라 지금 맞춰두면 이후 유지보수가 쉬워집니다.예시 diff
- <div className="text-[16px] leading-[1.6] font-bold text-indigo-700">{currentClub?.name} 정보</div> - <div className="text-[11px] leading-[15px] font-medium text-indigo-300"> + <div className="text-h2 text-indigo-700">{currentClub?.name} 정보</div> + <div className="text-cap1 text-indigo-300"> - <div className="mt-1.5 text-xs leading-3.5 font-medium text-indigo-300"> + <div className="text-sub3 mt-1.5 font-medium text-indigo-300">As per coding guidelines,
**/*.{ts,tsx}: Use typography tokens (text-h1throughtext-h5,text-sub1throughtext-sub4,text-body1throughtext-body3,text-cap1throughtext-cap2) fromsrc/styles/theme.css.Also applies to: 101-103
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/pages/User/MyPage/components/ManagerInfoCard.tsx` around lines 47 - 49, Replace ad-hoc typography sizes in ManagerInfoCard (the div rendering {currentClub?.name} and the div rendering {myInfo.studentNumber} / {myInfo.universityName} / {currentClub?.position}, plus any similar occurrences around lines noted) with the project's typography token classes from src/styles/theme.css (e.g., text-h1..text-h5, text-sub1..text-sub4, text-body1..text-body3, text-cap1..text-cap2). Identify the JSX elements inside the ManagerInfoCard component that use className="text-[16px]" or "text-[11px]" (and any "text-xs") and swap those to the appropriate semantic token (choose the closest matching token for heading vs. meta/body) so the component consistently uses typography tokens rather than custom pixel classes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/components/layout/BottomNav/index.tsx`:
- Line 71: The JSX in the BottomNav component uses an inline arbitrary filter
class filter-[drop-shadow(0_3px_10px_rgba(0,0,0,0.10))] which should be replaced
with Tailwind v4 drop-shadow utilities for consistency and better performance;
update the className on the element in the BottomNav component (the JSX that
currently contains filter-[drop-shadow(0_3px_10px_rgba(0,0,0,0.10))]) to use an
appropriate drop-shadow-* utility (or compose existing utilities) that matches
the same offset/blur/opacity, ensuring you remove the arbitrary filter class and
test visual parity.
In `@src/pages/User/MyPage/components/ManagerInfoCard.tsx`:
- Around line 47-49: Replace ad-hoc typography sizes in ManagerInfoCard (the div
rendering {currentClub?.name} and the div rendering {myInfo.studentNumber} /
{myInfo.universityName} / {currentClub?.position}, plus any similar occurrences
around lines noted) with the project's typography token classes from
src/styles/theme.css (e.g., text-h1..text-h5, text-sub1..text-sub4,
text-body1..text-body3, text-cap1..text-cap2). Identify the JSX elements inside
the ManagerInfoCard component that use className="text-[16px]" or "text-[11px]"
(and any "text-xs") and swap those to the appropriate semantic token (choose the
closest matching token for heading vs. meta/body) so the component consistently
uses typography tokens rather than custom pixel classes.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 9a0e7af4-05ef-44d3-987c-fd9fa1d891a3
⛔ Files ignored due to path filters (2)
src/assets/svg/notifications.svgis excluded by!**/*.svg,!src/assets/**and included by**src/assets/svg/unread-notification.svgis excluded by!**/*.svg,!src/assets/**and included by**
📒 Files selected for processing (9)
src/components/layout/BottomNav/index.tsxsrc/pages/Chat/hooks/useUnreadChatCount.tssrc/pages/Manager/ManagedApplicationList/index.tsxsrc/pages/Manager/ManagedClubDetail/index.tsxsrc/pages/Manager/ManagedClubList/index.tsxsrc/pages/Manager/ManagedMemberList/index.tsxsrc/pages/Manager/ManagedRecruitment/index.tsxsrc/pages/User/MyPage/components/ManagerInfoCard.tsxsrc/pages/User/MyPage/components/UserInfoCard.tsx
There was a problem hiding this comment.
Pull request overview
마이페이지의 사용자/관리자 카드 역할을 분리하고, 하단 네비게이션의 채팅 탭에 “읽지 않은 메시지 수” 배지를 노출하기 위한 변경입니다. 관리자 관련 화면에서는 전용 ManagerInfoCard를 사용하도록 정리되어, UI 책임이 더 명확해졌습니다.
Changes:
UserInfoCard를 사용자 프로필 진입용으로 단순화하고, 관리자 전용ManagerInfoCard를 신규 추가- 관리자 페이지들에서 기존
UserInfoCard(type=...)사용을ManagerInfoCard로 교체 - BottomNav 채팅 탭에 미확인 메시지 배지 표시 + 비로그인 상태에서 unread 조회 비활성화
Reviewed changes
Copilot reviewed 9 out of 11 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/pages/User/MyPage/components/UserInfoCard.tsx | 사용자 프로필 카드 UI를 단순화(프로필 이동 중심) |
| src/pages/User/MyPage/components/ManagerInfoCard.tsx | 관리자용 카드/상세 카드 컴포넌트 분리 추가 |
| src/pages/Manager/ManagedRecruitment/index.tsx | 관리자 상세 화면에서 ManagerInfoCard(type="detail") 사용 |
| src/pages/Manager/ManagedMemberList/index.tsx | 관리자 상세 화면에서 ManagerInfoCard(type="detail") 사용 |
| src/pages/Manager/ManagedClubList/index.tsx | 관리자 카드 영역을 ManagerInfoCard로 대체 |
| src/pages/Manager/ManagedClubDetail/index.tsx | 관리자 상세 화면에서 ManagerInfoCard(type="detail") 사용 |
| src/pages/Manager/ManagedApplicationList/index.tsx | 관리자 상세 화면에서 ManagerInfoCard(type="detail") 사용 |
| src/pages/Chat/hooks/useUnreadChatCount.ts | authStatus 기반으로 unread 조회 활성 조건 보완 |
| src/components/layout/BottomNav/index.tsx | 채팅 탭에 unread 배지 추가 및 접근성 라벨 반영 |
| src/assets/svg/unread-notification.svg | 알림 아이콘 그래디언트 스타일 반영 |
| src/assets/svg/notifications.svg | 알림 아이콘 그래디언트 스타일 반영 |
Comments suppressed due to low confidence (1)
src/pages/Chat/hooks/useUnreadChatCount.ts:46
useQuery를enabled: false로 두더라도 React Query는 기존 캐시된data를 그대로 반환할 수 있습니다. 현재 구현은authStatus !== 'authenticated'인 상태(로그아웃 직후/세션 전환/초기unknown등)에서도 캐시된rooms를 기반으로totalUnreadCount가 0이 아닌 값으로 계산될 수 있어, 비로그인 상태에서 배지가 노출되거나 이전 사용자 값이 잠깐 보이는 문제가 생길 수 있습니다.authStatus !== 'authenticated'일 때는totalUnreadCount를 강제로 0으로 반환하거나(데이터 무시), 로그인/로그아웃에 따라 queryKey를 사용자 단위로 분리하거나 관련 쿼리를 reset/remove 하도록 보완해 주세요.
const { data } = useQuery({
...chatQueries.rooms(),
enabled: isEnabled && authStatus === 'authenticated',
staleTime: UNREAD_CHAT_COUNT_REFETCH_INTERVAL,
refetchInterval: isEnabled && authStatus === 'authenticated' ? UNREAD_CHAT_COUNT_REFETCH_INTERVAL : false,
});
const totalUnreadCount = data?.rooms.reduce((sum, room) => sum + room.unreadCount, 0) ?? 0;
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const { data: myInfo } = useSuspenseQuery(authQueries.myInfo()); | ||
| const { data: managedClubList } = useSuspenseQuery(managedClubQueries.clubs()); | ||
| const { data: managedClub } = useSuspenseQuery(managedClubQueries.club(clubId)); | ||
|
|
||
| const currentClub = managedClubList.joinedClubs.find((club) => club.id === clubId); | ||
|
|
||
| const handleClick = () => { | ||
| navigate(`/mypage/manager/${clubId}/info`); | ||
| }; | ||
|
|
||
| return ( | ||
| <Card | ||
| onClick={handleClick} | ||
| className="active:bg-indigo-5/50 cursor-pointer rounded-2xl border-0 px-3 py-[21px] shadow-[0px_0px_3px_0px_rgba(0,0,0,0.15)]" | ||
| > | ||
| <div className="flex items-center justify-between"> | ||
| <div className="flex items-center gap-3"> | ||
| <img className="h-12 w-12 rounded" src={managedClub?.imageUrl} alt={`${currentClub?.name} 동아리 사진`} /> | ||
| <div> | ||
| <div className="text-[16px] leading-[1.6] font-bold text-indigo-700">{currentClub?.name} 정보</div> | ||
| <div className="text-[11px] leading-[15px] font-medium text-indigo-300"> | ||
| {myInfo.studentNumber} / {myInfo.universityName} / {currentClub?.position} | ||
| </div> |
There was a problem hiding this comment.
ManagerDetailInfoCard에서 화면에 표시할 동아리 정보가 managedClubList.joinedClubs.find(...) 결과(currentClub)에 의존하고 있는데, currentClub가 없으면 텍스트가 비거나 alt가 "undefined 동아리 사진"처럼 렌더링될 수 있습니다(템플릿 리터럴에서 undefined가 문자열로 변환됨). 이미 managedClubQueries.club(clubId) 응답(ManagedClubResponse)에 clubName, position, imageUrl이 포함되어 있으니, 표시/alt에 managedClub.clubName 등을 사용하도록 통일하고 managedClubList 조회 및 currentClub 파생을 제거(또는 최소한 null-safe fallback 처리)해 주세요. 이렇게 하면 불필요한 요청도 줄고 데이터 불일치 가능성도 낮아집니다.
* 205 feat 이미지 전처리 기능 구현 (#206) * feat: 전처리 로직 및 WebWorker 구현 * feat: 전처리 적용 및 preview 동시성 제어 로직 추가 * refactor: 리뷰 반영 * [hotfix] 하단바 너비 수정 (#208) * hotfix: 하단바 너비 수정 * chore: 불필요한 값 제거 * refactor: 고정 gap 제거 * Reapply "[feat] 광고 배너 추가 (#200)" This reverts commit c51ec85. * [feat] 하단바 리디자인 (#213) * chore: asset 추가 * feat: 하단바 리디자인 반영 및 레이아웃 수정 * [refactor] 광고 카드 레이아웃 밀림 수정 (#215) * refactor: 광고 개수 측정 시기 변경 및 기본값 제거 * feat: 스켈레톤 UI 추가 * feat: 인앱 알림 페이지 및 토스트 구현 (#217) * feat: 알림 API 및 스트림 기반 추가 * feat: 인앱 알림 레이어 추가 * feat: 알림 페이지 및 헤더 진입 구현 * fix: 알림 스트림 401 재시도 조건 정리 * fix: 알림 목록 이동 차단 제거 * refactor: 알림 공용 훅 위치 정리 * fix: 알림 재연결 캐시 동기화 추가 * fix: 알림 목록 토스트 큐 누적 방지 * fix: 알림 읽음 카운트 감소 조건 보강 * [refactor] 도메인별 TanStack Query 훅 정리 (#219) * chore: pwa용 이미지 제거 * refactor: auth 도메인 쿼리와 뮤테이션 정리 * refactor: council과 schedule 조회 훅 정리 * refactor: chat과 notification 캐시 처리 정리 * refactor: club 조회와 지원 플로우 정리 * refactor: manager 도메인 캐시 처리 정리 * refactor: studyTime 도메인 쿼리와 뮤테이션 정리 * refactor: 광고와 업로드 도메인 훅 정리 * [refactor] mutaton query 및 hook 추가 수정 (#221) * refactor: auth와 user myInfo 훅 정리 * refactor: club과 schedule 조회 훅 정리 * refactor: chat과 notification 훅 구조 정리 * refactor: club 지원 뮤테이션 훅 정리 * refactor: manager 뮤테이션 훅 구조 정리 * refactor: mutation 훅 cache 정리 * refactor: 컨벤션 통일 * refactor: isRead 조건 정리 * fix: 채팅 스크롤 문제 수정 * refactor: 불필요한 코드 제거 * [fix] 모바일 환경 입력창과 키보드 간의 간격이 큰 문제 수정 (#223) * chore: 가공용 safeArea 변수 선언 * refactor: 고정 패딩 값 수정 및 safeArea 적용 변경 * feat: 키보드 활성화 감지 및 safeArea 적용 여부 기능 추가 * refactor: 매직넘버 상수화 및 가로모드 처리 * [fix] 키보드 활성화 시 화면 흔들림 문제 수정 (#225) * refactor: 채팅 viewport 훅 네이밍 정리 * refactor: viewport 높이 잠금 훅 적용 시점 조정 * [fix] 키보드 활성화 시 채팅 화면 전체가 흔들리는 문제 수정 (#227) * refactor: 채팅 viewport 훅 네이밍 정리 * refactor: viewport 높이 잠금 훅 적용 시점 조정 * fix: 채팅 화면 스크롤 잠금으로 키보드 흔들림 완화 * fix: 입력 포커스 중 viewport offset 고정 (#229) * fix: 문서 루트 스크롤 잠금으로 빈 공간 잔류 방지 (#232) * [fix] 키보드 활성화 시 채팅 화면 상단 고정이 깨지고 빈 공간이 남는 문제 수정 (#234) * fix: 채팅 화면 상단 고정 깨짐과 빈 공간 잔류 수정 * refactor: 라우트 조건 수정 * fix: 문서 스크롤 위치 감지 보강 * refactor: 입력 요소 판별 유틸과 스크롤 주석 정리 * [fix] 키보드 활성화 시 채팅 화면에서 문서 스크롤이 발생하는 문제 수정 (#236) * fix: 채팅 문서 스크롤 제스처 차단 * fix: 입력 요소 터치 동작 예외 처리 * [fix] 키보드 활성화 시 채팅방이 마지막 메시지 위치를 유지하지 못하는 문제 수정 (#238) * fix: 키보드 활성화 시 채팅 하단 정렬 유지 * refactor: 채팅 리사이즈 관찰 안정화 * fix: mypage 연계 약관 페이지 뒤로가기 수정 (#240) * refactor: alias import 경로 정리 * fix: query 설정과 suspense 분기 정리 * refactor: 관리자 화면 스타일 유틸 정리 * fix: 이미지 전처리 예외 처리 보강 * fix: 헤더와 회비 화면 동작 정리 * fix: 공통 유틸 안정성 개선 * fix: 이미지 전처리 실패 처리를 보정 * fix: 모집 공고 저장 후 설정 반영 순서 조정 * fix: 부원 직책 변경 실패 처리를 보강 * fix: 약관 링크 접근성을 개선 * fix: 공통 쿼리와 유틸 안정성을 보완 * [feat] 동적 버전 정보 표시 구현 (#211) * feat: 동적 버전 정보 표시 구현 * refactor: 버전 정보 미 존재시 v 표시 제거 * [feat] 메인화면 동아리 카드 디자인 수정 반영 (#242) * feat: 메인화면 동아리 카드 디자인 수정 * chore: 하단바 아이콘 수정 * refactor: 코드래빗 리뷰 반영 * refactor: and 연산자로 변경 * apiClient 코드 중복 제거 및 네이티브 브릿지 인증 동기화 중앙화 (#244) * refactor: apiClient 코드 중복 제거 및 네이티브 브릿지 인증 동기화 중앙화 * refactor: body 직렬화 가드를 plain object/array로 한정 * fix: body 읽기 중 AbortError가 ParseError로 오분류되는 문제 수정 * [refactor] 에러 처리 유틸 및 utils 구조 정리 (#246) * refactor: 에러 처리 유틸 및 공통 토스트 흐름 정리 * refactor: utils 폴더 구조를 역할별로 정리 * refactor: 코드래빗 리뷰 반영 * refactor: 코드래빗 리뷰 반영 * Update src/pages/Home/components/HomeClubSection.tsx * fix: 인증 세션 복구 흐름 정리 * fix: 홈 동아리 카드 레이아웃 정리 * [feat] 총동아리 페이지 리디자인 및 하단 오버레이 정리 (#249) * refactor: 하단 오버레이 처리 공통화 * feat: 총동아리 페이지와 헤더 리디자인 반영 * fix: 채팅 하단 여백과 외부 링크 속성 수정 * refactor: 총동아리 헤더 설정 정리 * fix: 총동아리 상세 접근성과 스타일 보완 * [feat] 마이페이지 관리자 카드 분리 및 채팅 미확인 배지 반영 (#251) * feat: 하단 채팅 배지 표시 및 조회 조건 보완 * refactor: 관리자 정보 카드 컴포넌트 분리 * feat: 채팅 페이지 리디자인 (#252) * feat: 채팅 페이지 리디자인 * fix:tailwind 문법 수정 * fix: 코드 수정 * fix: 폰트 색상 및 위치 수정 * fix: 채팅방 사람수 정렬 * fix: 오타 수정 * chore: conflict 해결 중 누락된 부분 수정 * [refactor] 광고 렌더링 조건 수정 (#254) * refactor: 광고 렌더링 조건 수정 * docs: 문서명 변경 --------- Co-authored-by: 박성주 <145267904+ParkSungju01@users.noreply.github.com>
* [배포] 이미지 전처리, 광고 기능, 하단바 리디자인, 인앱 알림 페이지 및 토스트 프로덕션 배포 (#230) * 205 feat 이미지 전처리 기능 구현 (#206) * feat: 전처리 로직 및 WebWorker 구현 * feat: 전처리 적용 및 preview 동시성 제어 로직 추가 * refactor: 리뷰 반영 * [hotfix] 하단바 너비 수정 (#208) * hotfix: 하단바 너비 수정 * chore: 불필요한 값 제거 * refactor: 고정 gap 제거 * Reapply "[feat] 광고 배너 추가 (#200)" This reverts commit c51ec85. * [feat] 하단바 리디자인 (#213) * chore: asset 추가 * feat: 하단바 리디자인 반영 및 레이아웃 수정 * [refactor] 광고 카드 레이아웃 밀림 수정 (#215) * refactor: 광고 개수 측정 시기 변경 및 기본값 제거 * feat: 스켈레톤 UI 추가 * feat: 인앱 알림 페이지 및 토스트 구현 (#217) * feat: 알림 API 및 스트림 기반 추가 * feat: 인앱 알림 레이어 추가 * feat: 알림 페이지 및 헤더 진입 구현 * fix: 알림 스트림 401 재시도 조건 정리 * fix: 알림 목록 이동 차단 제거 * refactor: 알림 공용 훅 위치 정리 * fix: 알림 재연결 캐시 동기화 추가 * fix: 알림 목록 토스트 큐 누적 방지 * fix: 알림 읽음 카운트 감소 조건 보강 * [refactor] 도메인별 TanStack Query 훅 정리 (#219) * chore: pwa용 이미지 제거 * refactor: auth 도메인 쿼리와 뮤테이션 정리 * refactor: council과 schedule 조회 훅 정리 * refactor: chat과 notification 캐시 처리 정리 * refactor: club 조회와 지원 플로우 정리 * refactor: manager 도메인 캐시 처리 정리 * refactor: studyTime 도메인 쿼리와 뮤테이션 정리 * refactor: 광고와 업로드 도메인 훅 정리 * [refactor] mutaton query 및 hook 추가 수정 (#221) * refactor: auth와 user myInfo 훅 정리 * refactor: club과 schedule 조회 훅 정리 * refactor: chat과 notification 훅 구조 정리 * refactor: club 지원 뮤테이션 훅 정리 * refactor: manager 뮤테이션 훅 구조 정리 * refactor: mutation 훅 cache 정리 * refactor: 컨벤션 통일 * refactor: isRead 조건 정리 * fix: 채팅 스크롤 문제 수정 * refactor: 불필요한 코드 제거 * [fix] 모바일 환경 입력창과 키보드 간의 간격이 큰 문제 수정 (#223) * chore: 가공용 safeArea 변수 선언 * refactor: 고정 패딩 값 수정 및 safeArea 적용 변경 * feat: 키보드 활성화 감지 및 safeArea 적용 여부 기능 추가 * refactor: 매직넘버 상수화 및 가로모드 처리 * [fix] 키보드 활성화 시 화면 흔들림 문제 수정 (#225) * refactor: 채팅 viewport 훅 네이밍 정리 * refactor: viewport 높이 잠금 훅 적용 시점 조정 * [fix] 키보드 활성화 시 채팅 화면 전체가 흔들리는 문제 수정 (#227) * refactor: 채팅 viewport 훅 네이밍 정리 * refactor: viewport 높이 잠금 훅 적용 시점 조정 * fix: 채팅 화면 스크롤 잠금으로 키보드 흔들림 완화 * fix: 입력 포커스 중 viewport offset 고정 (#229) * fix: 문서 루트 스크롤 잠금으로 빈 공간 잔류 방지 (#232) * [fix] 키보드 활성화 시 채팅 화면 상단 고정이 깨지고 빈 공간이 남는 문제 수정 (#234) * fix: 채팅 화면 상단 고정 깨짐과 빈 공간 잔류 수정 * refactor: 라우트 조건 수정 * fix: 문서 스크롤 위치 감지 보강 * refactor: 입력 요소 판별 유틸과 스크롤 주석 정리 * [fix] 키보드 활성화 시 채팅 화면에서 문서 스크롤이 발생하는 문제 수정 (#236) * fix: 채팅 문서 스크롤 제스처 차단 * fix: 입력 요소 터치 동작 예외 처리 * [fix] 키보드 활성화 시 채팅방이 마지막 메시지 위치를 유지하지 못하는 문제 수정 (#238) * fix: 키보드 활성화 시 채팅 하단 정렬 유지 * refactor: 채팅 리사이즈 관찰 안정화 * fix: mypage 연계 약관 페이지 뒤로가기 수정 (#240) * refactor: alias import 경로 정리 * fix: query 설정과 suspense 분기 정리 * refactor: 관리자 화면 스타일 유틸 정리 * fix: 이미지 전처리 예외 처리 보강 * fix: 헤더와 회비 화면 동작 정리 * fix: 공통 유틸 안정성 개선 * fix: 이미지 전처리 실패 처리를 보정 * fix: 모집 공고 저장 후 설정 반영 순서 조정 * fix: 부원 직책 변경 실패 처리를 보강 * fix: 약관 링크 접근성을 개선 * fix: 공통 쿼리와 유틸 안정성을 보완 * [feat] 동적 버전 정보 표시 구현 (#211) * feat: 동적 버전 정보 표시 구현 * refactor: 버전 정보 미 존재시 v 표시 제거 * [feat] 메인화면 동아리 카드 디자인 수정 반영 (#242) * feat: 메인화면 동아리 카드 디자인 수정 * chore: 하단바 아이콘 수정 * refactor: 코드래빗 리뷰 반영 * refactor: and 연산자로 변경 * apiClient 코드 중복 제거 및 네이티브 브릿지 인증 동기화 중앙화 (#244) * refactor: apiClient 코드 중복 제거 및 네이티브 브릿지 인증 동기화 중앙화 * refactor: body 직렬화 가드를 plain object/array로 한정 * fix: body 읽기 중 AbortError가 ParseError로 오분류되는 문제 수정 * [refactor] 에러 처리 유틸 및 utils 구조 정리 (#246) * refactor: 에러 처리 유틸 및 공통 토스트 흐름 정리 * refactor: utils 폴더 구조를 역할별로 정리 * refactor: 코드래빗 리뷰 반영 * refactor: 코드래빗 리뷰 반영 * Update src/pages/Home/components/HomeClubSection.tsx * fix: 인증 세션 복구 흐름 정리 * fix: 홈 동아리 카드 레이아웃 정리 * [feat] 총동아리 페이지 리디자인 및 하단 오버레이 정리 (#249) * refactor: 하단 오버레이 처리 공통화 * feat: 총동아리 페이지와 헤더 리디자인 반영 * fix: 채팅 하단 여백과 외부 링크 속성 수정 * refactor: 총동아리 헤더 설정 정리 * fix: 총동아리 상세 접근성과 스타일 보완 * [feat] 마이페이지 관리자 카드 분리 및 채팅 미확인 배지 반영 (#251) * feat: 하단 채팅 배지 표시 및 조회 조건 보완 * refactor: 관리자 정보 카드 컴포넌트 분리 * feat: 채팅 페이지 리디자인 (#252) * feat: 채팅 페이지 리디자인 * fix:tailwind 문법 수정 * fix: 코드 수정 * fix: 폰트 색상 및 위치 수정 * fix: 채팅방 사람수 정렬 * fix: 오타 수정 * chore: conflict 해결 중 누락된 부분 수정 * [refactor] 광고 렌더링 조건 수정 (#254) * refactor: 광고 렌더링 조건 수정 * docs: 문서명 변경 --------- Co-authored-by: 박성주 <145267904+ParkSungju01@users.noreply.github.com> * refactor: 가이드 페이지 이미지 변경 및 구조 개선 (#260) * hotfix: 가이드 이미지 경로 변경 --------- Co-authored-by: 박성주 <145267904+ParkSungju01@users.noreply.github.com>
✨ 요약
😎 해결한 이슈
✅ 검증
pnpm lintSummary by CodeRabbit
릴리스 노트
새로운 기능
버그 수정
개선사항