Conversation
* feat: sportTab ui * feat: 대회, 팀에도 sportTab 추가 * feat: tab이동 시 sport params를 읽어서 선택 상태 유지 * feat: sportType 추가 및 탭 필터링 * fix: resolve build errors from SportType duplicate export and missing Suspense boundaries * fix: payload 파라미터 추가 및 불필요한 마운트 제거 * feat: 팀 SportType 추가 * style: sport tab ui수정 * fix: teams API에 sportType 쿼리 파라미터 전달 누락 수정
There was a problem hiding this comment.
Code Review
This pull request refactors the useTracker hook to accept a single event object instead of rest parameters and updates the sendGAEvent call. Feedback points out that sendGAEvent requires a single object with an event property to function correctly with Google Tag Manager and highlights that the signature change is a breaking change for existing implementations.
| return ({ action, value }: GAEventParams) => | ||
| sendGAEvent('event', `${category} ${action}`, { value }); |
There was a problem hiding this comment.
@next/third-parties/google 라이브러리의 sendGAEvent 함수는 내부적으로 window.dataLayer.push를 호출하는 래퍼입니다. GTM(Google Tag Manager)이나 GA4에서 이벤트를 정상적으로 수집하려면 event 속성을 포함한 단일 객체를 인자로 전달해야 합니다. 현재처럼 여러 개의 인자를 개별적으로 전달하면 GTM에서 이벤트를 인식하지 못해 데이터가 누락됩니다.
또한, 함수의 시그니처가 가변 인자(...value)에서 단일 객체({ action, value })로 변경되었습니다. 이 훅을 사용하는 기존 코드들에서 타입 오류나 런타임 에러가 발생할 수 있는 파괴적 변경(Breaking Change)이므로 주의가 필요합니다.
참고로 GA4에서 value 파라미터는 주로 수치형 데이터를 위해 예약되어 있으므로, 문자열 정보를 전달할 때는 다른 파라미터 이름을 사용하거나 이벤트 명에 포함시키는 것이 좋습니다.
| return ({ action, value }: GAEventParams) => | |
| sendGAEvent('event', `${category} ${action}`, { value }); | |
| return ({ action, value }: GAEventParams) => | |
| sendGAEvent({ event: `${category} ${action}`, value }); |
* feat: organization api 추가 * feat: 학교 선택 드롭다운 ui * feat: 학교 필터를 경기/리그 목록 API에 적용 * fix: 대회, 팀 탭에서 학교 드롭다운이 가려지는 문제 해결 * refactor: 제미나이 리뷰반영 * refactor: Select UI와 SchoolSelect 도메인 로직 분리 * fix: 타입에러 수정
* feat: organization api 추가 * feat: 학교 선택 드롭다운 ui * feat: 학교 필터를 경기/리그 목록 API에 적용 * fix: 대회, 팀 탭에서 학교 드롭다운이 가려지는 문제 해결 * refactor: 제미나이 리뷰반영 * feat: 생성된 대회가 없을때 안내 컴포넌트 * fix: emptyState를 추가하여 팀 전적이 없을 때도 사용가능하도록 함 * feat: 단과대별 팀 api 및 전적없는 팀 카드에 EmptyState적용 * fix: 타입 캐스팅 * refactor: 학교 선택 ErrorBoundary 설정 * feat: 생성되지 않은 팀에 대해 emptyTeam ui
* feat: 스코어 보드 추가 * chore: 라우터 프리픽스 통일 * chore: 라우터 프리픽스 통일 --------- Co-authored-by: 노성원 <129041262+sungwonnoh@users.noreply.github.com>
* feat: 스코어 보드 추가 * feat: 타임라인 추가
* feat: 스코어 보드 추가 * feat: 타임라인 추가 * feat: 아이콘 추가 * feat: 타임라인 대응
* feat: sportType 추가 * feat: ui에 sportType 추가 * style: 종목선택 ui변경 * feat: 리그생성시 해당 종목에 속하는 팀만 보이도록 * style: 대회관리에서 ui깨짐 문제 해결 * fix: 현재 폼의 sportType을 제출하도록 수정
* feat: sportType 추가 * feat: ui에 sportType 추가 * style: 종목선택 ui변경 * feat: 리그생성시 해당 종목에 속하는 팀만 보이도록 * style: 대회관리에서 ui깨짐 문제 해결 * fix: 현재 폼의 sportType을 제출하도록 수정 * feat(manager): 종목별 라우팅 분리 (#491) * feat: 종목 구분에 따른 라우팅 변경 * feat: 농구 타임라인 파일생성 * chore: 상태변경 sheet 내용 삭제 * fix: 빌드에러 수정
* fix: 라운드 명칭 변경 * feat: 농구 라인업 인원수 제한 * style: 경기 생성,수정 팀선택 ui변경 * fix: 경기 수정 시 폼 유효성로직 수정 * fix: 경기 생성, 수정 필드 변경 * fix: videoId required 제거 * chore: 축구 라운드도 32강을 예선으로 변경 * feat: 축구,농구 라인업 인원 지정
* fix: 라운드 명칭 변경 * feat: 농구 라인업 인원수 제한 * style: 경기 생성,수정 팀선택 ui변경 * fix: 경기 수정 시 폼 유효성로직 수정 * fix: 경기 생성, 수정 필드 변경 * fix: videoId required 제거 * chore: 축구 라운드도 32강을 예선으로 변경 * feat: 축구,농구 라인업 인원 지정 * feat: 농구 경기진행 로직 변경 (#497) * feat: 농구 득점 추가 * feat: 농구 파울 추가 * feat: 농구 교체 추가 * refactor: 팀선택 공통 컴포넌트화 * feat: 농구 상태변경 추가 * feat: 상태 변경 관련 알럿 추가 * fix: 제미나이 리뷰 반영
* fix: 라우팅 문제 해결 * refactor: 라우팅 구조 전면 개편 * fix: ts error * chore: calendar 메뉴 제거 * fix: 탭 리로딩 분리 * chore: 불필요한 비동기 선언 제거 * chore: remove id
* fix: 라우팅 문제 해결 * refactor: 라우팅 구조 전면 개편 * fix: ts error * chore: calendar 메뉴 제거 * fix: 탭 리로딩 분리 * fix: 예상치 못한 라운드 발생 방지 * fix: 2강 제거
* refactor: png to webp * feat: fallback 이미지 및 점수 추가 * refactor: CheerVS에도 fallback 이미지 추가 * fix: 선수 id가 없는 경우를 위해 uuid 추가 * fix: 이미지 이름 변경 * fix: 이미지 ratio 조정 * fix: 중복 클래스명 제거 * fix: image 비율 contain으로 고정
* feat: 매니저 타임라인 UI 수정 * fix: type error
* feat: 매니저 타임라인 UI 수정 * fix: type error * feat: add skills * chore: 스포츠 타입에 맞게 UI 수정
* feat: 매니저 타임라인 UI 수정 * fix: type error * feat: add skills * chore: 스포츠 타입에 맞게 UI 수정 * fix: 학번 10자리까지 가능
* feat: 매니저 타임라인 UI 수정 * fix: type error * feat: add skills * chore: 스포츠 타입에 맞게 UI 수정 * fix: 학번 10자리까지 가능 * fix: 리그 라운드 32를 100으로 변경하고 예선으로 표기
* feat: 매니저 타임라인 UI 수정 * fix: type error * feat: add skills * chore: 스포츠 타입에 맞게 UI 수정 * fix: 학번 10자리까지 가능 * fix: 리그 라운드 32를 100으로 변경하고 예선으로 표기 * feat: 팀 관리 페이지에 tabs 추가
* feat: 매니저 타임라인 UI 수정 * fix: type error * feat: add skills * chore: 스포츠 타입에 맞게 UI 수정 * fix: 학번 10자리까지 가능 * fix: 리그 라운드 32를 100으로 변경하고 예선으로 표기 * feat: 팀 관리 페이지에 tabs 추가 * fix: 뱃지 문구 수정
* feat: 매니저 타임라인 UI 수정 * fix: type error * feat: add skills * chore: 스포츠 타입에 맞게 UI 수정 * fix: 학번 10자리까지 가능 * fix: 리그 라운드 32를 100으로 변경하고 예선으로 표기 * feat: 팀 관리 페이지에 tabs 추가 * fix: 뱃지 문구 수정 * refactor: 대회수정 시 종목 고정
* feat: 매니저 타임라인 UI 수정 * fix: type error * feat: add skills * chore: 스포츠 타입에 맞게 UI 수정 * fix: 학번 10자리까지 가능 * fix: 리그 라운드 32를 100으로 변경하고 예선으로 표기 * feat: 팀 관리 페이지에 tabs 추가 * fix: 뱃지 문구 수정 * refactor: 대회수정 시 종목 고정 * feat: 팀 생성 페이지에 맞게 자동 선택
* fix: 축구 상태변경 수정 * style: 축구 교체, 경고 시트 팀 ui수정 * feat: 축구 어시스턴트 추가 * fix: 득점 선수와 어시스턴트 선수가 같지않도록 수정
* feat: inifiniteQuery로 무한스크롤 구현 * fix: querykey 충돌 해결
* feat: 매니저 타임라인 UI 수정 * fix: type error * feat: add skills * chore: 스포츠 타입에 맞게 UI 수정 * fix: 학번 10자리까지 가능 * fix: 리그 라운드 32를 100으로 변경하고 예선으로 표기 * feat: 팀 관리 페이지에 tabs 추가 * fix: 뱃지 문구 수정 * refactor: 대회수정 시 종목 고정 * feat: 팀 생성 페이지에 맞게 자동 선택 * feat: 타임라인 변경사항 대응 * feat: winner 추가
Co-authored-by: Copilot <copilot@github.com>
✅ 작업 내용
📝 참고 자료
♾️ 기타