[feat] 웹 홈 및 대학별 동아리 탐색 개선#324
Hidden character warning
Conversation
* 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>
WalkthroughPR Possibly related PRs
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 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.
Actionable comments posted: 1
🧹 Nitpick comments (2)
apps/web/src/pages/UniversityClubList/index.tsx (1)
140-140: ⚡ Quick win타이포그래피는 semantic utility로 맞춰주세요.
text-[16px]대신 프로젝트의 semantic typography 유틸(text-body1등)로 맞추는 게 일관성에 좋습니다.As per coding guidelines, "Prioritize semantic typography utilities (e.g.,
text-h1,text-body1) over generic utilities".🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/web/src/pages/UniversityClubList/index.tsx` at line 140, Replace the atomic font-size utility on the paragraph in UniversityClubList (the <p> with className containing "text-text-400 text-[16px] leading-7") with the project's semantic typography utility (e.g., swap "text-[16px]" for "text-body1"); also verify whether "leading-7" is redundant with the chosen semantic utility and remove or adjust it so the final className uses the semantic typography token plus color/weight utilities only.apps/web/src/pages/Home/index.tsx (1)
1-4: ⚡ Quick win동적 Tailwind 클래스는
cn()으로 통일하고 import 순서를 정렬해주세요.현재 템플릿 문자열 기반 병합이 섞여 있어 클래스 충돌 처리/일관성이 떨어집니다.
@konect/utils/cn으로 통일하고 external import를 알파벳 순으로 맞춰주세요.제안 diff
-import { useEffect, useRef, useState, type ChangeEvent } from 'react'; -import { useDebouncedCallback } from '`@konect/utils/use-debounced-callback`'; +import { cn } from '`@konect/utils/cn`'; +import { useDebouncedCallback } from '`@konect/utils/use-debounced-callback`'; import { useSuspenseQuery } from '`@tanstack/react-query`'; +import { useEffect, useRef, useState, type ChangeEvent } from 'react'; import { Link, useSearchParams } from 'react-router-dom'; @@ - <div - className={`grid w-full transition-[grid-template-rows,opacity,margin-top] duration-300 ease-out ${ - isSearching ? 'mt-0 grid-rows-[0fr] opacity-0' : 'mt-10 grid-rows-[1fr] opacity-100 sm:mt-24' - }`} - > + <div + className={cn( + 'grid w-full transition-[grid-template-rows,opacity,margin-top] duration-300 ease-out', + isSearching ? 'mt-0 grid-rows-[0fr] opacity-0' : 'mt-10 grid-rows-[1fr] opacity-100 sm:mt-24' + )} + > @@ - <section - className={`min-h-0 ${isSearching ? 'overflow-hidden' : 'overflow-visible'}`} - aria-hidden={isSearching} - > + <section className={cn('min-h-0', isSearching ? 'overflow-hidden' : 'overflow-visible')} aria-hidden={isSearching}> @@ - className={`shrink-0 rounded-[26px] border px-3 font-medium transition-colors sm:px-5 ${ - isSelected - ? 'border-primary-900 bg-primary-900 text-indigo-5' - : 'border-text-300 text-text-300 hover:border-primary-500 hover:text-primary-700 bg-transparent' - }`} + className={cn( + 'shrink-0 rounded-[26px] border px-3 font-medium transition-colors sm:px-5', + isSelected + ? 'border-primary-900 bg-primary-900 text-indigo-5' + : 'border-text-300 bg-transparent text-text-300 hover:border-primary-500 hover:text-primary-700' + )}As per coding guidelines "Use
@konect/utils/cnutility for Tailwind class merging withclsx + tailwind-merge" and "Organize imports in order: builtin -> external -> internal (@/**) -> parent -> sibling -> index, sorted alphabetically within each group".Also applies to: 124-126, 129-129, 151-155
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/web/src/pages/Home/index.tsx` around lines 1 - 4, Replace template-string or manual concatenation Tailwind class merging with the shared cn utility from `@konect/utils/cn`: update imports to add cn and refactor all className usages that currently use template literals or manual joins (search for uses near identifiers like useDebouncedCallback, useSuspenseQuery and components in this file) to call cn(...) so tailwind-merge + clsx semantics are applied (also fix occurrences mentioned in the comment). Additionally reorder the import block to follow the project order (builtin -> external -> internal -> parent -> sibling -> index) and sort external imports alphabetically so imports such as useDebouncedCallback, useSuspenseQuery, Link, useSearchParams and the new cn import are in the correct alphabetical order within the external group.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/pages/Home/index.tsx`:
- Around line 122-131: The section controlled by hasRecentClubs/isSearching
currently only uses aria-hidden, which doesn't stop keyboard focus; update the
Home/index.tsx JSX so that when isSearching is true the section is either
unmounted (render it only when !isSearching) or marked inert in addition to
aria-hidden (add the inert attribute to the section element when isSearching and
ensure an inert/polyfill is included if needed), so keyboard focus cannot enter
its internal links; target the JSX block using hasRecentClubs and the section
element around the isSearching conditional to make this change.
---
Nitpick comments:
In `@apps/web/src/pages/Home/index.tsx`:
- Around line 1-4: Replace template-string or manual concatenation Tailwind
class merging with the shared cn utility from `@konect/utils/cn`: update imports
to add cn and refactor all className usages that currently use template literals
or manual joins (search for uses near identifiers like useDebouncedCallback,
useSuspenseQuery and components in this file) to call cn(...) so tailwind-merge
+ clsx semantics are applied (also fix occurrences mentioned in the comment).
Additionally reorder the import block to follow the project order (builtin ->
external -> internal -> parent -> sibling -> index) and sort external imports
alphabetically so imports such as useDebouncedCallback, useSuspenseQuery, Link,
useSearchParams and the new cn import are in the correct alphabetical order
within the external group.
In `@apps/web/src/pages/UniversityClubList/index.tsx`:
- Line 140: Replace the atomic font-size utility on the paragraph in
UniversityClubList (the <p> with className containing "text-text-400 text-[16px]
leading-7") with the project's semantic typography utility (e.g., swap
"text-[16px]" for "text-body1"); also verify whether "leading-7" is redundant
with the chosen semantic utility and remove or adjust it so the final className
uses the semantic typography token plus color/weight utilities only.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 38fe725c-687d-4ce7-8532-e255f17a0f7c
📒 Files selected for processing (9)
apps/web/src/apis/clubDetail/entity.tsapps/web/src/apis/universityClub/entity.tsapps/web/src/components/RecentClubList/index.tsxapps/web/src/components/UniversityClubSidebar/index.tsxapps/web/src/layout/Header/index.tsxapps/web/src/pages/ClubDetail/index.tsxapps/web/src/pages/Home/index.tsxapps/web/src/pages/UniversityClubList/index.tsxapps/web/src/utils/hooks/useResetScroll.ts
| {hasRecentClubs ? ( | ||
| <div | ||
| className={`grid w-full transition-[grid-template-rows,opacity,margin-top] duration-300 ease-out ${ | ||
| isSearching ? 'mt-0 grid-rows-[0fr] opacity-0' : 'mt-10 grid-rows-[1fr] opacity-100 sm:mt-24' | ||
| }`} | ||
| > | ||
| <section | ||
| className={`min-h-0 ${isSearching ? 'overflow-hidden' : 'overflow-visible'}`} | ||
| aria-hidden={isSearching} | ||
| > |
There was a problem hiding this comment.
aria-hidden만으로는 숨김 상태 포커스가 차단되지 않습니다.
Line 130에서 aria-hidden만 적용하면 내부 링크가 키보드 포커스로 진입할 수 있습니다. 검색 중(isSearching)에는 섹션을 언마운트하거나 inert를 함께 적용해 포커스를 막아주세요.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/web/src/pages/Home/index.tsx` around lines 122 - 131, The section
controlled by hasRecentClubs/isSearching currently only uses aria-hidden, which
doesn't stop keyboard focus; update the Home/index.tsx JSX so that when
isSearching is true the section is either unmounted (render it only when
!isSearching) or marked inert in addition to aria-hidden (add the inert
attribute to the section element when isSearching and ensure an inert/polyfill
is included if needed), so keyboard focus cannot enter its internal links;
target the JSX block using hasRecentClubs and the section element around the
isSearching conditional to make this change.
✨ 요약
😎 해결한 이슈
Summary by CodeRabbit
릴리스 노트
새로운 기능
스타일