44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
// @ts-expect-error has no types
|
|
import VueMatomo from 'vue-matomo';
|
|
|
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
const { user } = useUserSession();
|
|
nuxtApp.vueApp.use(VueMatomo, {
|
|
host: 'https://analytics.syma.dev',
|
|
siteId: 12,
|
|
router: nuxtApp.$router,
|
|
trackInitialView: true,
|
|
preInitActions: [
|
|
// Respect DNT
|
|
['setDoNotTrack', true],
|
|
user.value ? ['setUserId', user.value.id.toString()] : ['resetUserId'],
|
|
user.value
|
|
? ['setCustomDimension', 1, user.value.role]
|
|
: ['setCustomDimension', 1, 'guest']
|
|
]
|
|
});
|
|
|
|
// Update user state
|
|
watch(user, (u) => {
|
|
if (u) {
|
|
// Add users id to visit
|
|
window._paq?.push(['setUserId', u.id.toString()]);
|
|
// Add users role to visit
|
|
window._paq?.push(['setCustomDimension', 1, u.role]);
|
|
window._paq?.push(['trackPageView']);
|
|
} else {
|
|
window._paq?.push(['resetUserId']);
|
|
window._paq?.push(['setCustomDimension', 1, 'guest']);
|
|
window._paq?.push(['appendToTrackingUrl', 'new_visit=1']);
|
|
window._paq?.push(['trackPageView']);
|
|
window._paq?.push(['appendToTrackingUrl', '']);
|
|
}
|
|
});
|
|
});
|
|
|
|
declare global {
|
|
interface Window {
|
|
_paq?: unknown[];
|
|
}
|
|
}
|