@@ -11,7 +11,7 @@ import { getMeetingUserId } from '@/lib/storage';
1111import { useQueryClient } from '@tanstack/react-query' ;
1212import Loading from '@/components/loading/loading' ;
1313import { getRandomHexColor } from '@/lib/color' ;
14- import { sendGAEvent } from '@next/third-parties/google ' ;
14+ import { pushDataLayer } from '@/lib/gtm ' ;
1515
1616export default function Page ( ) {
1717 const queryClient = useQueryClient ( ) ;
@@ -149,37 +149,6 @@ export default function Page() {
149149
150150 const [ selectedResultId , setSelectedResultId ] = useState < number > ( 1 ) ;
151151
152- // 중간지점 후보 조회 GA 이벤트
153- const trackMidpointCandidateViewed = useCallback (
154- ( candidateRankOrder : number , candidateId : string ) => {
155- if ( typeof window === 'undefined' || ! id ) return ;
156- const browserId = localStorage . getItem ( 'browser_id' ) ;
157- const isHost = localStorage . getItem ( `is_host_${ id } ` ) === 'true' ;
158- const userRole = isHost ? 'host' : 'participant' ;
159-
160- sendGAEvent ( 'event' , 'midpoint_candidate_viewed' , {
161- meeting_url_id : id ,
162- user_cookie_id : browserId ,
163- role : userRole ,
164- candidate_rank_order : candidateRankOrder ,
165- candidate_id : candidateId ,
166- } ) ;
167- } ,
168- [ id ]
169- ) ;
170-
171- // 장소 리스트에서 결과보기 페이지로 돌아왔을 때 midpoint_candidate_viewed 전송
172- useEffect ( ( ) => {
173- if ( typeof window === 'undefined' || ! id || locationResults . length === 0 ) return ;
174- const fromRecommend = sessionStorage . getItem ( `from_recommend_${ id } ` ) ;
175- if ( fromRecommend !== '1' ) return ;
176-
177- sessionStorage . removeItem ( `from_recommend_${ id } ` ) ;
178- const selected = locationResults . find ( ( r ) => r . id === selectedResultId ) ?? locationResults [ 0 ] ;
179- const candidateId = `mid_${ selected . endStation . replace ( / \s + / g, '_' ) } ` ;
180- trackMidpointCandidateViewed ( selected . id , candidateId ) ;
181- } , [ id , locationResults , selectedResultId , trackMidpointCandidateViewed ] ) ;
182-
183152 // 뒤로 가기 클릭 시 캐시 데이터 무효화
184153 const clearRelatedCache = useCallback ( ( ) => {
185154 queryClient . removeQueries ( { queryKey : [ 'midpoint' , id ] } ) ;
@@ -192,15 +161,16 @@ export default function Page() {
192161 } ;
193162
194163 const handleResultShareClick = ( e : React . MouseEvent < HTMLButtonElement > ) => {
195- // 1. GA 데이터 먼저 전송!
164+ // 1. GA 데이터 먼저 전송! (GTM 친화적 dataLayer 직접 Push)
196165 if ( typeof window !== 'undefined' ) {
197166 let browserId = localStorage . getItem ( 'browser_id' ) ;
198167 if ( ! browserId ) {
199168 browserId = `bid_${ Math . random ( ) . toString ( 36 ) . substring ( 2 , 15 ) } ${ Date . now ( ) . toString ( 36 ) } ` ;
200169 localStorage . setItem ( 'browser_id' , browserId ) ;
201170 }
202171
203- sendGAEvent ( 'event' , 'share_link' , {
172+ pushDataLayer ( {
173+ event : 'share_link' ,
204174 meeting_url_id : id ,
205175 location : 'place_list' , // PM님 명세: 결과 리스트 페이지
206176 browser_id : browserId ,
@@ -311,20 +281,13 @@ export default function Page() {
311281 if ( meetingType ) params . append ( 'meetingType' , meetingType ) ;
312282 if ( categoryParam ) params . append ( 'category' , categoryParam ) ;
313283
314- if ( typeof window !== 'undefined' ) {
315- sessionStorage . setItem ( `from_recommend_${ id } ` , '1' ) ;
316- }
317284 router . push ( `/recommend?${ params . toString ( ) } ` ) ;
318285 } ;
319286
320287 return (
321288 < div
322289 key = { result . id }
323- onClick = { ( ) => {
324- setSelectedResultId ( result . id ) ;
325- const candidateId = `mid_${ result . endStation . replace ( / \s + / g, '_' ) } ` ;
326- trackMidpointCandidateViewed ( result . id , candidateId ) ;
327- } }
290+ onClick = { ( ) => setSelectedResultId ( result . id ) }
328291 className = { `flex cursor-pointer flex-col gap-3.75 rounded border bg-white p-5 ${
329292 selectedResultId === result . id
330293 ? 'border-blue-5 border-2'
0 commit comments