1+ "use client" ;
2+
3+ import { usePathname , useSearchParams } from "next/navigation" ;
4+ import { useEffect } from "react" ;
5+ import posthog from "posthog-js" ;
6+
7+ export default function PostHogPageview ( ) {
8+ const pathname = usePathname ( ) ;
9+ const searchParams = useSearchParams ( ) ;
10+
11+ useEffect ( ( ) => {
12+ if ( pathname && posthog ) {
13+ let url = window . origin + pathname ;
14+ if ( searchParams ?. toString ( ) ) {
15+ url += `?${ searchParams . toString ( ) } ` ;
16+ }
17+
18+ posthog . register_once ( {
19+ initial_referrer :
20+ typeof window !== "undefined"
21+ ? document . referrer || "(direct)"
22+ : "(direct)" ,
23+ initial_landing_page : pathname ,
24+ } ) ;
25+
26+ const utmSource = searchParams ?. get ( "utm_source" ) ;
27+ const utmMedium = searchParams ?. get ( "utm_medium" ) ;
28+ const utmCampaign = searchParams ?. get ( "utm_campaign" ) ;
29+ const utmContent = searchParams ?. get ( "utm_content" ) ;
30+ const utmTerm = searchParams ?. get ( "utm_term" ) ;
31+
32+ if ( utmSource || utmMedium || utmCampaign || utmContent || utmTerm ) {
33+ const utmParams : Record < string , string > = { } ;
34+ if ( utmSource ) utmParams . utm_source = utmSource ;
35+ if ( utmMedium ) utmParams . utm_medium = utmMedium ;
36+ if ( utmCampaign ) utmParams . utm_campaign = utmCampaign ;
37+ if ( utmContent ) utmParams . utm_content = utmContent ;
38+ if ( utmTerm ) utmParams . utm_term = utmTerm ;
39+
40+ posthog . register_once ( utmParams ) ;
41+ }
42+
43+ const clickIdParams : Record < string , string > = { } ;
44+ const gclid = searchParams ?. get ( "gclid" ) ;
45+ const fbclid = searchParams ?. get ( "fbclid" ) ;
46+ const msclkid = searchParams ?. get ( "msclkid" ) ;
47+ const li_fat_id = searchParams ?. get ( "li_fat_id" ) ;
48+ const ttclid = searchParams ?. get ( "ttclid" ) ;
49+
50+ if ( gclid ) clickIdParams . gclid = gclid ;
51+ if ( fbclid ) clickIdParams . fbclid = fbclid ;
52+ if ( msclkid ) clickIdParams . msclkid = msclkid ;
53+ if ( li_fat_id ) clickIdParams . li_fat_id = li_fat_id ;
54+ if ( ttclid ) clickIdParams . ttclid = ttclid ;
55+
56+ if ( Object . keys ( clickIdParams ) . length > 0 ) {
57+ posthog . register_once ( clickIdParams ) ;
58+ }
59+
60+ posthog . capture ( "$pageview" , {
61+ $current_url : url ,
62+ } ) ;
63+ }
64+ } , [ pathname , searchParams ] ) ;
65+
66+ return null ;
67+ }
0 commit comments