@ambitiondev/nuxt-cookiebot
Version:
Implementation for Cookiebot in Nuxt applications
86 lines (85 loc) • 2.34 kB
JavaScript
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
};
}