-
Notifications
You must be signed in to change notification settings - Fork 0
/
composable.ts
108 lines (92 loc) · 3 KB
/
composable.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// Vendor
import { computed, useServerHead, useNuxtApp, type MaybeRef } from '#imports';
import {
CB_NAME,
consentBannerURL,
useLogger,
type CookiebotComposable,
type CookiebotOptions,
type PluginOptions,
} from '@ambitiondev/cookiebot-common';
import { useCookiebot as useVueCookiebot } from '@ambitiondev/vue-cookiebot';
// Module imports
import * as pluginOptions from '#cookiebot-options';
export function useCookiebot(settings?: Partial<CookiebotOptions>): CookiebotComposable {
const nuxt = useNuxtApp();
const { deprecationNotice, error } = useLogger();
const _options = {
...pluginOptions,
settings,
} as PluginOptions;
const culture = computed(() =>
// @ts-expect-error - i18n is not typed in this context
'$i18n' in nuxt && 'locale' in nuxt.$i18n ? (nuxt.$i18n.locale.value as string) : undefined
);
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',
}
);
}
/** @deprecated */
async function consentPage(ref: MaybeRef<HTMLElement | null>) {
deprecationNotice('consentPage', 'cookieDeclaration');
vueCookiebot.cookieDeclaration(ref);
}
async function cookieDeclaration(ref: MaybeRef<HTMLElement | null>) {
if (document instanceof Document) {
vueCookiebot.cookieDeclaration(ref);
}
}
async function destroyConsentBanner() {
if (document instanceof Document) {
vueCookiebot.destroyConsentBanner();
}
}
/** @deprecated */
async function destroyConsentPage(ref: MaybeRef<HTMLElement | null>) {
deprecationNotice('destroyConsentPage', 'destroyCookieDeclaration');
destroyCookieDeclaration(ref);
}
async function destroyCookieDeclaration(ref: MaybeRef<HTMLElement | null>) {
if (document instanceof Document) {
vueCookiebot.destroyCookieDeclaration(ref);
}
}
async function resetConsentBanner() {
await destroyConsentBanner();
consentBanner();
}
function renew() {
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,
};
}