Conversation
This reverts commit ac3503a.
- useScrollToTop 훅 추가 (500px 이상 스크롤 시 버튼 표시) - ScrollButton 컴포넌트 추가 (styled-components 사용) - App.tsx에 전역 적용하여 모든 페이지에서 사용 가능 - 부드러운 opacity 전환 효과 적용 - 접근성 개선 (aria-label 추가)
- 스크롤 상단 이동 버튼 표시 임계값을 상수 SCROLL_TO_TOP_THRESHOLD로 변경하여 가독성 향상
- 스크롤 이벤트 핸들러에 passive: true 옵션을 추가하여 스크롤 성능을 최적화 - preventDefault()를 사용하지 않으므로 passive 옵션으로 브라우저의 스크롤 렌더링을 블로킹하지 않도록 개선
…feature/#781-connectingmultipleapplicationsapi-MOA-285
- 모바일 패딩 20 -> 16px로 변경 - box-shadow 모바일 추가
- 데탑 14px, 모바일 12px
- hover 효과를 @media (hover: hover)로 감싸 실제 호버 가능한 디바이스에서만 적용되도록 변경 - touch-action: manipulation 추가하여 터치 동작 최적화 - 스크롤 시 카드에 hover 효과가 자동으로 적용되는 현상 해결
- 데스크탑 6px -> 14px - 모바일 6px -> 10px
- 모바일 패딩을 데스크톱과 동일하게 통일 (4px 8px) - display를 flex로 변경하여 정렬 개선 - 고정 높이(28px) 추가로 일관성 향상
- SectionBar margin 값 명시적으로 지정 (좌측 8px) - TotalCountResult의 불필요한 padding-top 제거 - CardList의 불필요한 margin-top 제거
[fix] 데스크탑, 모바일 카드 디자인을 피그마와 통일한다
- MenuButton에 order: 2 적용하여 모바일에서 올바른 순서 유지
…url-MOA-368 [feature] 프로덕션 외 Mixpanel 비활성화
- 이벤트를 USER_EVENT, ADMIN_EVENT, PAGE_VIEW로 분리 - 관리자 페이지 관련 이벤트명 추가 - 페이지뷰 추적을 위한 상수 정의 - 이벤트 타입별 관리로 유지보수성 향상
- 관리자 로그아웃(ADMIN_LOGOUT_CLICKED) - 비밀번호 변경 (ADMIN_PASSWORD_CHANGED) - 모집 정보 날짜 변경 (RECRUIT_PERIOD_START/END_CHANGED) - 기본 정보 수정 (ADMIN_CLUB_INFO_UPDATED) - 활동 사진 업로드 (ADMIN_PHOTO_UPLOADED) - 태그 생성 (ADMIN_TAG_CREATED)
- 관리자 로그인 (ADMIN_LOGIN_SUBMITTED) - 관리자 로그아웃 (ADMIN_LOGOUT_CLICKED) - 비밀번호 변경 (ADMIN_PASSWORD_CHANGED) - 모집 정보 날짜 변경 (RECRUIT_PERIOD_START/END_CHANGED) - 기본 정보 수정 (ADMIN_CLUB_INFO_UPDATED) - 활동 사진 업로드 (ADMIN_PHOTO_UPLOADED) - 태그 선택 (ADMIN_TAG_SELECTED) - 태그 생성 (ADMIN_TAG_CREATED) - 마크다운 에디터 사용 (ADMIN_MARKDOWN_EDITED)
- 로고 업로드 버튼 클릭 이벤트 (ADMIN_EVENT.CLUB_LOGO_UPLOAD_BUTTON_CLICKED) - 로고 수정 버튼 클릭 이벤트 (ADMIN_EVENT.CLUB_LOGO_EDIT_BUTTON_CLICKED) - 로고 초기화 버튼 클릭 이벤트 (ADMIN_EVENT.CLUB_LOGO_RESET_BUTTON_CLICKED) - eventName.ts에 해당 이벤트명 상수 추가
…text-MOA-362 [feature] 지원하기 모달 텍스트를 변경한다
There was a problem hiding this comment.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
frontend/src/components/application/modals/ApplicationSelectModal.tsx (1)
34-45: onBackdropClick props가 실제로는 사용되지 않는 이슈
ApplicationSelectModalProps에서onBackdropClick을 받고 있지만, 실제로<Modal>에는 항상handleOverlayClick만 넘기고 있어서 부모가 넘긴onBackdropClick은 전혀 호출되지 않습니다. 이 컴포넌트를 사용하는 쪽에서는 동작하지 않는 props로 오해할 수 있어 보입니다.외부에서 덮어쓸 수 있게 하려면 다음처럼 prop을 위임하는 쪽이 자연스러울 것 같습니다.
-const ApplicationSelectModal = ({ isOpen, onClose, options, onSelect, onBackdropClick }: ApplicationSelectModalProps) => { - const handleOverlayClick = () => { - return false; - }; +const ApplicationSelectModal = ({ isOpen, onClose, options, onSelect, onBackdropClick }: ApplicationSelectModalProps) => { + const handleOverlayClick = () => { + if (onBackdropClick) { + return onBackdropClick(); + } + return false; + };이렇게 하면 기본 동작(닫힘 방지)은 유지하면서, 필요 시 부모에서 별도 로직을 주입할 수 있습니다.
🧹 Nitpick comments (1)
frontend/src/components/application/modals/ApplicationSelectModal.tsx (1)
39-47: 모달 타이틀 변경과 문구 용어 통일 제안
title을"지원서 선택"으로 바꾼 건 더 직관적인 것 같지만, 빈 상태 문구는 여전히"지원 가능한 분야가 없습니다."라서 한 컴포넌트 안에서지원서/분야용어가 섞여 있습니다. 사용자 입장에서 헷갈리지 않도록 둘 중 하나로 용어를 통일하는 쪽을 한 번 검토해 보면 좋겠습니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Jira integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (3)
frontend/src/components/application/modals/ApplicationSelectModal.styles.ts(1 hunks)frontend/src/components/application/modals/ApplicationSelectModal.tsx(1 hunks)frontend/src/components/common/Modal/Modal.styles.ts(0 hunks)
💤 Files with no reviewable changes (1)
- frontend/src/components/common/Modal/Modal.styles.ts
✅ Files skipped from review due to trivial changes (1)
- frontend/src/components/application/modals/ApplicationSelectModal.styles.ts
…ing-MOA-365 [feature] 관리자페이지 믹스패널 로깅을 적용한다
[fix] 모바일 헤더 검색바 레이아웃 순서 버그 수정
oesnuj
left a comment
There was a problem hiding this comment.
며칠 동안 또 많은 것들이 추가/개선되었네요~
v1.1.6 수고하셨습니다 🚀🚀🚀
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (11)
frontend/src/components/common/Header/Header.styles.ts (1)
175-194: AdminProfileImage의 원형 유지를 위한 개선 제안.AdminProfileContainer와 AdminProfileText는 잘 구현되었습니다. 다만 AdminProfileImage에서
width: 40px와height: auto를 함께 사용하면 이미지의 가로세로 비율이 1:1이 아닐 경우 완벽한 원형이 아닐 수 있습니다.일관된 원형 프로필 이미지를 보장하려면 다음과 같이 수정하세요:
export const AdminProfileImage = styled.img` width: 40px; - height: auto; + height: 40px; + object-fit: cover; border-radius: 50%; `;frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/MakeTags/MakeTags.tsx (1)
32-37: 트래킹 이벤트를 상태 변경 후로 이동하세요.현재
trackEvent가onChange호출 전에 실행되고 있습니다. 만약onChange가 실패하거나 예외를 발생시키면, 실제로 일어나지 않은 액션을 추적하게 됩니다. 정확한 분석을 위해 트래킹 호출을onChange이후로 이동하는 것을 권장합니다.다음과 같이 수정하세요:
const updatedTags = value.map((tag, i) => { if (i === index) { return ''; } return tag; }); - - trackEvent(ADMIN_EVENT.CLUB_TAG_CLEAR_BUTTON_CLICKED, { - tagIndex: index + 1, - }); onChange(updatedTags); + + trackEvent(ADMIN_EVENT.CLUB_TAG_CLEAR_BUTTON_CLICKED, { + tagIndex: index + 1, + }); };frontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsx (1)
30-50: 로그인 이벤트 트래킹 위치를 재고하세요.현재
LOGIN_BUTTON_CLICKED이벤트가finally블록(Line 49)에서 트래킹되어, 로그인 성공 여부와 관계없이 항상 기록됩니다. 더 정확한 분석을 위해 다음 중 하나를 고려하세요:
- 성공 시에만 트래킹: Line 37 이후로 이동
- 성공/실패 여부를 페이로드에 포함:
{ success: true/false, errorMessage?: string }예시 (옵션 1 - 성공 시에만 트래킹):
try { const { accessToken } = await login(userId, password); localStorage.setItem('accessToken', accessToken); + trackEvent(ADMIN_EVENT.LOGIN_BUTTON_CLICKED); alert('로그인 성공! 관리자 페이지로 이동합니다.'); navigate('/admin'); } catch (error: unknown) { ... } finally { setLoading(false); } - trackEvent(ADMIN_EVENT.LOGIN_BUTTON_CLICKED);frontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsx (1)
37-39: 불필요한 의존성을 제거하세요.
toggleMenu콜백의 의존성 배열에trackEvent가 포함되어 있지만, 함수 본문에서trackEvent를 사용하지 않습니다. 이는 불필요한 재생성을 유발할 수 있습니다.다음과 같이 수정하세요:
const toggleMenu = useCallback(() => { setIsMenuOpen((prev) => !prev); - }, [trackEvent]); + }, []);frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/SelectTags/SelectTags.tsx (1)
22-28: 트래킹 이벤트를 상태 변경 후로 이동하는 것을 고려하세요.
trackEvent가onChange호출 전에 실행되고 있습니다.onChange가 검증을 수행하거나 실패할 수 있다면, 실제로 완료되지 않은 액션을 추적하게 됩니다. 더 정확한 분석을 위해 트래킹을onChange이후로 이동하는 것을 권장합니다.다음과 같이 수정하세요:
<Styled.Button key={index} onClick={() => { + onChange(tag); trackEvent(ADMIN_EVENT.CLUB_TAG_SELECT_BUTTON_CLICKED, { tagName: tag, category: label, }); - onChange(tag); }} selected={selected === tag} >frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/MarkdownEditor/MarkdownEditor.tsx (1)
60-65: 페이로드 명명을 명확하게 하는 것을 고려하세요.
showToPreview페이로드가 토글 후의 모드를 나타내고 있어 약간 혼란스러울 수 있습니다. 더 명확하게 하려면mode또는toggledTo와 같은 이름을 사용하는 것을 고려하세요.다음과 같이 개선할 수 있습니다:
<button onClick={() => { trackEvent(ADMIN_EVENT.MARKDOWN_EDITOR_PREVIEW_BUTTON_CLICKED, { - showToPreview: showPreview ? '편집' : '미리보기', + mode: showPreview ? '편집' : '미리보기', }); setShowPreview((prev) => !prev); }}>frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx (1)
76-105: 상시모집/수정 버튼 클릭 트래킹 위치 한 번만 의도 확인해주세요
ALWAYS_RECRUIT_BUTTON_CLICKED는 토글 직전에,UPDATE_RECRUIT_BUTTON_CLICKED는 서버 호출 전에 쏘고 있어서 “버튼 클릭” 기준 통계에는 맞지만, 실제 업데이트가 실패해도 같은 이벤트로 집계됩니다.
성공/실패를 나누어 보고 싶다면, 성공 시점에 별도의..._SUCCEEDED이벤트를 추가하는 것도 고려해볼 만합니다.frontend/src/pages/AdminPage/tabs/PhotoEditTab/components/ImageUpload/ImageUpload.tsx (1)
6-8: 이미지 개수 가드 + 업로드 버튼 트래킹 구조 괜찮습니다
imageCountprop으로 5장 초과를 막고, 초과 시 파일 선택 전에 얼리 리턴하는 흐름이 명확합니다.- 업로드 버튼 클릭 시 항상
IMAGE_UPLOAD_BUTTON_CLICKED를 쏘는 것도 “클릭 수” 관점에서는 자연스러운 선택입니다.혹시 “실제 파일 선택까지 이어진 클릭”만 따로 보고 싶다면,
imageCount >= 5조건을 통과했을 때만 별도 성공 이벤트를 추가하는 방식도 고려할 수 있습니다.Also applies to: 9-20, 52-60
frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTab.tsx (1)
94-101: 이미지 삭제 트래킹에 삭제 메타데이터 추가 여부 고려현재는 삭제 버튼 클릭 시
IMAGE_DELETE_BUTTON_CLICKED만 쏘고 바로deleteImage(index)를 호출하는 단순 구조라 동작 상 문제는 없습니다.
다만 향후 분석에서 “몇 번째 이미지(또는 총 몇 장 중 몇 장)를 지우는지”가 필요하다면,trackEvent에index나totalCount같은 메타데이터를 같이 보내는 것도 도움이 될 수 있습니다.frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx (1)
78-80: 수정하기 버튼 클릭 이벤트 시점 확인
UPDATE_CLUB_BUTTON_CLICKED를 validation 전에 쏘고 있어서 “버튼이 눌린 횟수” 기준으로는 맞지만, SNS 링크 에러 등으로 실제 업데이트가 호출되지 않아도 동일하게 집계됩니다.
실제 업데이트 호출 성공 여부까지 구분해 보고 싶다면, onSuccess 콜백에서 별도의 성공 이벤트를 추가하는 것도 한 가지 선택지입니다.frontend/src/pages/AdminPage/tabs/AccountEditTab/AccountEditTab.tsx (1)
1-1: 비밀번호 변경 플로우 + 트래킹 시점 설계 좋지만 이벤트 이름은 한 번 검토 권장
isLoading가드와 try/catch/finally 구조 덕분에 중복 요청 방지, 에러 처리, 로딩 상태 관리가 깔끔합니다.PASSWORD_CHANGE_BUTTON_CLICKED를changePassword성공 이후에만 쏘고 있어서, 실제로는 “성공한 변경 횟수”에 더 가까운 의미를 갖습니다.
- 성공 횟수 지표로 쓸 거라면 지금 설계가 맞고,
- “클릭 수”를 보고 싶다면 클릭 시점(검증 통과 직후 등)으로 위치를 옮기거나, 성공 이벤트를 별도로 두는 것도 고려해볼 만합니다.
- 비밀번호 자체가 아니라 길이만 이벤트 프로퍼티로 보내는 방식은 민감도 측면에서도 무난해 보입니다만, 팀 보안/로그 정책과도 한 번 맞춰보면 좋겠습니다.
Also applies to: 6-8, 13-15, 25-27, 43-51
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Jira integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (14)
frontend/src/components/common/Header/Header.styles.ts(2 hunks)frontend/src/constants/eventName.ts(1 hunks)frontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsx(3 hunks)frontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsx(4 hunks)frontend/src/pages/AdminPage/components/SideBar/SideBar.tsx(5 hunks)frontend/src/pages/AdminPage/tabs/AccountEditTab/AccountEditTab.tsx(4 hunks)frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx(7 hunks)frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/MakeTags/MakeTags.tsx(2 hunks)frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/SelectTags/SelectTags.tsx(2 hunks)frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTab.tsx(3 hunks)frontend/src/pages/AdminPage/tabs/PhotoEditTab/components/ImageUpload/ImageUpload.tsx(3 hunks)frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx(5 hunks)frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/Calendar/Calendar.tsx(3 hunks)frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/MarkdownEditor/MarkdownEditor.tsx(2 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-03-19T05:18:07.818Z
Learnt from: seongwon030
Repo: Moadong/moadong PR: 195
File: frontend/src/pages/AdminPage/AdminPage.tsx:7-7
Timestamp: 2025-03-19T05:18:07.818Z
Learning: AdminPage.tsx에서 현재 하드코딩된 클럽 ID('67d2e3b9b15c136c6acbf20b')는 로그인 기능 구현 후 동적으로 가져오는 방식으로 수정될 예정입니다.
Applied to files:
frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsxfrontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsxfrontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsxfrontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsxfrontend/src/pages/AdminPage/components/SideBar/SideBar.tsxfrontend/src/constants/eventName.ts
🧬 Code graph analysis (13)
frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/MakeTags/MakeTags.tsx (1)
frontend/src/constants/eventName.ts (1)
ADMIN_EVENT(32-72)
frontend/src/components/common/Header/Header.styles.ts (1)
frontend/src/styles/mediaQuery.ts (1)
media(8-14)
frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx (1)
frontend/src/constants/eventName.ts (2)
PAGE_VIEW(74-88)ADMIN_EVENT(32-72)
frontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsx (1)
frontend/src/constants/eventName.ts (1)
ADMIN_EVENT(32-72)
frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTab.tsx (1)
frontend/src/constants/eventName.ts (2)
PAGE_VIEW(74-88)ADMIN_EVENT(32-72)
frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx (1)
frontend/src/constants/eventName.ts (2)
PAGE_VIEW(74-88)ADMIN_EVENT(32-72)
frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/MarkdownEditor/MarkdownEditor.tsx (1)
frontend/src/constants/eventName.ts (1)
ADMIN_EVENT(32-72)
frontend/src/pages/AdminPage/tabs/PhotoEditTab/components/ImageUpload/ImageUpload.tsx (1)
frontend/src/constants/eventName.ts (1)
ADMIN_EVENT(32-72)
frontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsx (1)
frontend/src/constants/eventName.ts (2)
PAGE_VIEW(74-88)ADMIN_EVENT(32-72)
frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/SelectTags/SelectTags.tsx (1)
frontend/src/constants/eventName.ts (1)
ADMIN_EVENT(32-72)
frontend/src/pages/AdminPage/components/SideBar/SideBar.tsx (1)
frontend/src/constants/eventName.ts (1)
ADMIN_EVENT(32-72)
frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/Calendar/Calendar.tsx (1)
frontend/src/constants/eventName.ts (1)
ADMIN_EVENT(32-72)
frontend/src/pages/AdminPage/tabs/AccountEditTab/AccountEditTab.tsx (1)
frontend/src/constants/eventName.ts (2)
PAGE_VIEW(74-88)ADMIN_EVENT(32-72)
🔇 Additional comments (12)
frontend/src/components/common/Header/Header.styles.ts (1)
153-153: 모바일 레이아웃 순서 조정 확인됨.태블릿 뷰에서 MenuButton의 flex order를 2로 설정하여 레이아웃 순서를 변경했습니다. 의도된 변경으로 보이며 문제없습니다.
frontend/src/constants/eventName.ts (1)
1-88: LGTM! 이벤트 네임스페이스 리팩터링이 잘 되었습니다.단일
EVENT_NAME을USER_EVENT,ADMIN_EVENT,PAGE_VIEW로 분리한 것은 이벤트 관리와 가독성을 크게 개선합니다. 명명 규칙도 일관성 있게 적용되었습니다.frontend/src/pages/AdminPage/components/SideBar/SideBar.tsx (2)
63-76: LGTM! 탭 클릭 트래킹이 적절하게 구현되었습니다.사용자 의도를 추적하기 위해
navigate호출 전에 이벤트를 기록하는 것이 올바른 접근입니다. 탭 이름도 페이로드에 포함되어 있어 상세한 분석이 가능합니다.
78-98: LGTM! 로그아웃 트래킹 위치가 적절합니다.
logout()API 호출이 성공한 후에 이벤트를 기록하여, 실제로 완료된 액션만 추적합니다. 에러 발생 시 트래킹이 생략되는 것도 정확한 분석을 위해 올바른 접근입니다.frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/Calendar/Calendar.tsx (2)
56-67: LGTM! 날짜 변경 트래킹이 올바르게 구현되었습니다.상태 변경(
onChangeStart,onChangeEnd) 후에 이벤트를 기록하는 것은 정확한 분석을 위한 올바른 접근입니다. ISO 형식으로 날짜를 페이로드에 포함한 것도 좋습니다.
69-81: LGTM! 종료일 변경 트래킹도 적절합니다.
disabledEnd체크 후에만 트래킹이 발생하여, 실제 변경 가능한 경우만 기록합니다. 시작일 변경 트래킹과 일관된 패턴을 따르고 있습니다.frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx (2)
13-20: 페이지뷰 · 이벤트 트래킹 초기화 구조 좋습니다
useMixpanelTrack로trackEvent를 만들고,useTrackPageView(PAGE_VIEW.RECRUITMENT_INFO_EDIT_PAGE)한 번만 호출하는 구조가 다른 탭들과도 일관되고 부작용도 없어 보입니다. 별도 수정 필요 없어 보입니다.
172-175: 모집 대상 onClear 트래킹 추가 적절합니다
RECRUITMENT_TARGET_CLEAR_BUTTON_CLICKED를 onClear 안에서 바로 쏘고 state를 초기화하는 순서가 직관적이고, UX나 동작 상 문제 없어 보입니다.frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTab.tsx (1)
9-11: 포토 편집 탭 페이지뷰 트래킹 추가 일관적입니다PHOTO_EDIT_PAGE에 대해
useTrackPageView를 호출하고, 동일 컴포넌트 내에서trackEvent를 초기화하는 패턴이 다른 Admin 탭들과 맞춰져 있어서 유지보수 측면에서도 좋아 보입니다.Also applies to: 15-18
frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx (2)
14-16: 기본 정보 수정 탭의 페이지뷰/트래킹 초기화 구조 적절합니다
useMixpanelTrack로trackEvent를 한 번 생성하고,useTrackPageView(PAGE_VIEW.CLUB_INFO_EDIT_PAGE)를 호출하는 패턴이 다른 Admin 탭들과 맞고, 불필요한 렌더 사이드이펙트도 없어 보입니다.Also applies to: 19-21
136-139: 입력값 초기화(onClear) 이벤트 트래킹 세분화 잘 되어 있습니다
- 동아리 명/회장 정보/전화번호/한줄소개 각각에 별도의 CLEAR 이벤트를 두어 어떤 필드가 자주 지워지는지 분석하기 좋아졌습니다.
- SNS 링크에서는
snsPlatform: label을 함께 보내서 플랫폼별 행동 분석이 가능해진 점도 좋습니다.
현재 구현대로 동작/UX 상 문제는 없어 보이고, 그대로 유지하셔도 될 것 같습니다.Also applies to: 152-155, 166-169, 184-187, 220-222
frontend/src/pages/AdminPage/tabs/AccountEditTab/AccountEditTab.tsx (1)
80-88: 비밀번호 입력 onClear 트래킹 추가 깔끔합니다두 비밀번호 입력 모두 onClear에서 state를 초기화한 뒤 각각의 CLEAR 이벤트를 쏘는 구조가 직관적이고, 에러/성공 표시 로직(
isPasswordValid,isPasswordMatching)과도 잘 정합됩니다. 추가 수정 없이 그대로 사용해도 될 것 같습니다.Also applies to: 96-104
#️⃣연관된 이슈
📝작업 내용
중점적으로 리뷰받고 싶은 부분(선택)
논의하고 싶은 부분(선택)
🫡 참고사항
Summary by CodeRabbit
New Features
Style
UX
Data / Defaults
Known Issue / Bug Fixes
✏️ Tip: You can customize this high-level summary in your review settings.