1
1
'use client' ;
2
2
3
- import { Suspense , useCallback , useEffect , useState } from 'react' ;
3
+ import { Suspense , useEffect , useState } from 'react' ;
4
4
import { usePathname , useSearchParams } from 'next/navigation' ;
5
5
6
- import { CookieNotice } from '@/components/Matomo/consent' ;
7
6
import { init , push } from '@/util/matomo' ;
8
7
import { env } from '@/env.mjs' ;
9
8
10
9
const MATOMO_URL = env . NEXT_PUBLIC_MATOMO_URL ;
11
10
const MATOMO_CDN_URL = env . NEXT_PUBLIC_MATOMO_CDN_URL ;
12
11
const MATOMO_SITE_ID = env . NEXT_PUBLIC_MATOMO_SITE_ID ;
13
- const CONSENT_SID = 'c_sid' ;
14
12
15
13
function Matomo ( ) {
16
14
const searchParams = useSearchParams ( ) ;
17
15
const pathname = usePathname ( ) ;
18
- const [ isOpen , setIsOpen ] = useState ( false ) ;
16
+ const [ initialized , setInitialized ] = useState ( false ) ;
19
17
20
18
const searchParamsString = searchParams . toString ( ) ;
21
- const openConsent = useCallback ( ( ) => setIsOpen ( true ) , [ ] ) ;
22
19
23
- const onAccept = ( ) => {
24
- if ( MATOMO_URL && MATOMO_SITE_ID && MATOMO_CDN_URL ) {
20
+ useEffect ( ( ) => {
21
+ if ( MATOMO_URL && MATOMO_SITE_ID && MATOMO_CDN_URL && ! initialized ) {
25
22
init ( {
26
23
url : MATOMO_URL ,
27
24
cdnUrl : MATOMO_CDN_URL ,
28
25
siteId : MATOMO_SITE_ID ,
29
- disableCookies : false ,
26
+ disableCookies : true ,
30
27
} ) ;
31
- localStorage . setItem (
32
- CONSENT_SID ,
33
- JSON . stringify ( {
34
- id : crypto . randomUUID ( ) ,
35
- lastUpdated : Math . floor ( Date . now ( ) / 1000 ) ,
36
- r : true ,
37
- } )
38
- ) ;
39
- setIsOpen ( false ) ;
40
28
}
41
- } ;
42
-
43
- const onDecline = ( ) => {
44
- localStorage . setItem (
45
- CONSENT_SID ,
46
- JSON . stringify ( {
47
- id : crypto . randomUUID ( ) ,
48
- lastUpdated : Math . floor ( Date . now ( ) / 1000 ) ,
49
- r : false ,
50
- } )
51
- ) ;
52
- setIsOpen ( false ) ;
53
- } ;
54
29
55
- useEffect ( ( ) => {
56
- const savedConsent = localStorage . getItem ( CONSENT_SID ) ;
57
- if ( ! savedConsent ) openConsent ( ) ;
58
- } , [ openConsent ] ) ;
30
+ return ( ) => {
31
+ setInitialized ( true ) ;
32
+ } ;
33
+ } , [ initialized , setInitialized ] ) ;
59
34
60
35
useEffect ( ( ) => {
61
36
if ( ! pathname ) return ;
@@ -64,29 +39,7 @@ function Matomo() {
64
39
push ( [ 'trackPageView' ] ) ;
65
40
} , [ pathname , searchParamsString ] ) ;
66
41
67
- useEffect ( ( ) => {
68
- try {
69
- const savedConsent = localStorage . getItem ( CONSENT_SID ) ;
70
- if ( savedConsent ) {
71
- const consentParsed = JSON . parse ( savedConsent ) ;
72
- if ( consentParsed . r ) {
73
- if ( MATOMO_URL && MATOMO_SITE_ID && MATOMO_CDN_URL ) {
74
- init ( {
75
- url : MATOMO_URL ,
76
- cdnUrl : MATOMO_CDN_URL ,
77
- siteId : MATOMO_SITE_ID ,
78
- disableCookies : false ,
79
- } ) ;
80
- }
81
- }
82
- }
83
- } catch ( error ) {
84
- // eslint-disable-next-line no-console
85
- console . error ( 'failed to parse the consent' ) ;
86
- }
87
- } , [ ] ) ;
88
-
89
- return < CookieNotice isOpen = { isOpen } onAccept = { onAccept } onDecline = { onDecline } /> ;
42
+ return null ;
90
43
}
91
44
92
45
export default function MatomoAnalyticsConsent ( ) {
0 commit comments