Merged in fix/consent (pull request #57)

fix: add checks to tracking consent

Approved-by: Simon.Emanuelsson
This commit is contained in:
Arvid Norlin
2024-03-05 07:55:23 +00:00
committed by Simon.Emanuelsson
4 changed files with 50 additions and 9 deletions

View File

@@ -28,6 +28,9 @@ export default function RootLayout({
id="Cookiebot"
src="https://consent.cookiebot.com/uc.js"
/>
<Script id="ensure-datalayer">{`
window.datalayer = window.datalayer || {}
`}</Script>
<AdobeScript />
<VwoScript />
</head>

View File

@@ -64,10 +64,9 @@ export default function RootLayout({
src="/_static/dist/js/main-ng.js?336b801d6b38eff10884"
strategy="lazyOnload"
/> */}
<Script
strategy="beforeInteractive"
id="ensure-datalayer"
>{`window.datalayer = window.datalayer || {}`}</Script>
<Script id="ensure-datalayer">{`
window.datalayer = window.datalayer || {}
`}</Script>
<AdobeScript />
<VwoScript />
</head>

View File

@@ -42,8 +42,8 @@ function createPageObject(trackingData: TrackingData) {
const sitesections = getSiteSections(segments)
const { host: domain, href: fullurl, origin } = window.location
const page_obj = {
pagename: segments.join('|'),
pagetype: 'contentpage',
pagename: segments.join("|"),
pagetype: "contentpage",
pageurl: origin + trackingData.pathName,
fullurl,
createDate: trackingData.createdDate,
@@ -66,11 +66,40 @@ export default function Tracking({ pageData }: TrackingProps) {
const queryString = useSearchParams().toString()
useEffect(() => {
const trackingData = { ...pageData, pathName, queryString }
const pageObject = createPageObject(trackingData)
if (window.datalayer) {
const trackingData = { ...pageData, pathName, queryString }
const pageObject = createPageObject(trackingData)
window.datalayer.page = pageObject
window.datalayer.page = pageObject
}
}, [pathName, queryString, pageData])
useEffect(() => {
// handle consent
window.addEventListener(
"CookiebotOnAccept",
function CookiebotCallback_OnAccept(e) {
if (window.Cookiebot?.changed && window.adobe) {
if (
window._satellite.cookie
.get("CookieConsent")
.includes("statistics:true")
) {
window.adobe.optIn.approve(
window.adobe.OptInCategories.ANALYTICS,
true
)
} else {
window.adobe.optIn.deny(
window.adobe.OptInCategories.ANALYTICS,
true
)
}
window.adobe.optIn.complete()
}
}
)
}, [])
return null
}

10
types/window.d.ts vendored
View File

@@ -1,3 +1,13 @@
interface Window {
datalayer: { [key: string]: any }
_satellite: { cookie: { get: (s: string) => string } }
adobe: {
OptInCategories: { ANALYTICS: string }
optIn: {
approve: (s: string, b: boolean) => {}
deny: (s: string, b: boolean) => {}
complete: () => {}
}
}
Cookiebot: { changed: boolean; consented: boolean }
}