UNPKG

@ambitiondev/nuxt-cookiebot

Version:

Implementation for Cookiebot in Nuxt applications

86 lines (85 loc) 2.34 kB
import { computed, useServerHead, useNuxtApp } from "#imports"; import { CB_NAME, consentBannerURL, useLogger } from "@ambitiondev/cookiebot-common"; import { useCookiebot as useVueCookiebot } from "@ambitiondev/vue-cookiebot"; import * as pluginOptions from "#cookiebot-options"; export function useCookiebot(settings) { const nuxt = useNuxtApp(); const { deprecationNotice, error } = useLogger(); const _options = { ...pluginOptions, settings }; const culture = computed( () => ( // @ts-expect-error - i18n is not typed in this context "$i18n" in nuxt && "locale" in nuxt.$i18n ? nuxt.$i18n.locale.value : void 0 ) ); const vueCookiebot = useVueCookiebot({ ..._options, culture: culture.value || _options.culture }); async function consentBanner() { useServerHead( { script: [ { id: CB_NAME, src: consentBannerURL({ culture: culture.value, ..._options }) } ] }, { tagPosition: "head", tagPriority: "critical" } ); } async function consentPage(ref) { deprecationNotice("consentPage", "cookieDeclaration"); vueCookiebot.cookieDeclaration(ref); } async function cookieDeclaration(ref) { if (document instanceof Document) { vueCookiebot.cookieDeclaration(ref); } } async function destroyConsentBanner() { if (document instanceof Document) { vueCookiebot.destroyConsentBanner(); } } async function destroyConsentPage(ref) { deprecationNotice("destroyConsentPage", "destroyCookieDeclaration"); destroyCookieDeclaration(ref); } async function destroyCookieDeclaration(ref) { if (document instanceof Document) { vueCookiebot.destroyCookieDeclaration(ref); } } async function resetConsentBanner() { await destroyConsentBanner(); consentBanner(); } function renew() { return import.meta.client && window instanceof Window && "Cookiebot" in window ? window.Cookiebot.renew() : error("Not able to renew consent. Cookiebot instance is not defined."); } return { consentBanner, consentPage, cookieDeclaration, destroyConsentBanner, destroyConsentPage, destroyCookieDeclaration, renew, resetConsentBanner }; }