Skip to content

Comments

[release] FE v1.1.6 릴리즈#842

Merged
seongwon030 merged 101 commits intomainfrom
develop-fe
Nov 20, 2025
Merged

[release] FE v1.1.6 릴리즈#842
seongwon030 merged 101 commits intomainfrom
develop-fe

Conversation

@seongwon030
Copy link
Member

@seongwon030 seongwon030 commented Nov 12, 2025

#️⃣연관된 이슈

ex) #이슈번호, #이슈번호

📝작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지/동영상 첨부 가능)

중점적으로 리뷰받고 싶은 부분(선택)

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

논의하고 싶은 부분(선택)

논의하고 싶은 부분이 있다면 작성해주세요.

🫡 참고사항

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.

seongje973 and others added 26 commits October 11, 2025 20:53
- 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 모바일 추가
- 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] 데스크탑, 모바일 카드 디자인을 피그마와 통일한다
oesnuj and others added 2 commits November 20, 2025 12:01
- 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에 해당 이벤트명 상수 추가
Copy link
Contributor

@lepitaaar lepitaaar left a comment

Choose a reason for hiding this comment

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

다들 수고하셨습니다!!

Copy link
Collaborator

@suhyun113 suhyun113 left a comment

Choose a reason for hiding this comment

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

수고하셨습니당!!

…text-MOA-362

[feature] 지원하기 모달 텍스트를 변경한다
Copy link
Contributor

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

📥 Commits

Reviewing files that changed from the base of the PR and between 095c45d and 20f599c.

📒 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

Copy link
Member

@oesnuj oesnuj left a comment

Choose a reason for hiding this comment

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

며칠 동안 또 많은 것들이 추가/개선되었네요~
v1.1.6 수고하셨습니다 🚀🚀🚀

@seongwon030 seongwon030 merged commit 20ed9db into main Nov 20, 2025
2 of 3 checks passed
Copy link
Contributor

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

🧹 Nitpick comments (11)
frontend/src/components/common/Header/Header.styles.ts (1)

175-194: AdminProfileImage의 원형 유지를 위한 개선 제안.

AdminProfileContainer와 AdminProfileText는 잘 구현되었습니다. 다만 AdminProfileImage에서 width: 40pxheight: 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: 트래킹 이벤트를 상태 변경 후로 이동하세요.

현재 trackEventonChange 호출 전에 실행되고 있습니다. 만약 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)에서 트래킹되어, 로그인 성공 여부와 관계없이 항상 기록됩니다. 더 정확한 분석을 위해 다음 중 하나를 고려하세요:

  1. 성공 시에만 트래킹: Line 37 이후로 이동
  2. 성공/실패 여부를 페이로드에 포함: { 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: 트래킹 이벤트를 상태 변경 후로 이동하는 것을 고려하세요.

trackEventonChange 호출 전에 실행되고 있습니다. 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: 이미지 개수 가드 + 업로드 버튼 트래킹 구조 괜찮습니다

  • imageCount prop으로 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)를 호출하는 단순 구조라 동작 상 문제는 없습니다.
다만 향후 분석에서 “몇 번째 이미지(또는 총 몇 장 중 몇 장)를 지우는지”가 필요하다면, trackEventindextotalCount 같은 메타데이터를 같이 보내는 것도 도움이 될 수 있습니다.

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_CLICKEDchangePassword 성공 이후에만 쏘고 있어서, 실제로는 “성공한 변경 횟수”에 더 가까운 의미를 갖습니다.
    • 성공 횟수 지표로 쓸 거라면 지금 설계가 맞고,
    • “클릭 수”를 보고 싶다면 클릭 시점(검증 통과 직후 등)으로 위치를 옮기거나, 성공 이벤트를 별도로 두는 것도 고려해볼 만합니다.
  • 비밀번호 자체가 아니라 길이만 이벤트 프로퍼티로 보내는 방식은 민감도 측면에서도 무난해 보입니다만, 팀 보안/로그 정책과도 한 번 맞춰보면 좋겠습니다.

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.

📥 Commits

Reviewing files that changed from the base of the PR and between 20f599c and 504f573.

📒 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.tsx
  • frontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsx
  • frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx
  • frontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsx
  • frontend/src/pages/AdminPage/components/SideBar/SideBar.tsx
  • frontend/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_NAMEUSER_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: 페이지뷰 · 이벤트 트래킹 초기화 구조 좋습니다

useMixpanelTracktrackEvent를 만들고, 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: 기본 정보 수정 탭의 페이지뷰/트래킹 초기화 구조 적절합니다

useMixpanelTracktrackEvent를 한 번 생성하고, 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🌏 Deploy 배포 관련 💻 FE Frontend

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants