fix(tracking): Controlled tracking

auto-pageviews: The `enableAutoPageviews` option (enabled by default) was also tracking specific profile views.
plugin-track: The new track plugin (`plugins/track.js`) effectively replaces the autoPageview system, with a lot more customisability. Now, profile views are tracked as events rather than their specific pages.
This commit is contained in:
tecc 2022-09-27 01:12:27 +02:00
parent d11c0407dd
commit e1027cf5f8
2 changed files with 56 additions and 1 deletions

View File

@ -139,6 +139,7 @@ export default {
{ src: '~/plugins/globals.js' },
{ src: '~/plugins/auth.js' },
{ src: '~/plugins/datepicker.js', ssr: false },
{ src: '~/plugins/track.js', ssr: false }
],
components: true,
buildModules: [],
@ -163,11 +164,16 @@ export default {
},
plausible: {
domain: process.env.PLAUSIBLE_DOMAIN || translations.domain,
// NOTE(privacy): Disables automatic tracking of page views, meaning we have to do it manually
// If it's not done manually, a privacy issue occurs, which we *do not want*
// - tecc
enableAutoPageviews: false
},
publicRuntimeConfig: {
plausible: {
domain: process.env.PLAUSIBLE_DOMAIN || translations.domain,
apiHost: process.env.PLAUSIBLE_API_HOST
apiHost: process.env.PLAUSIBLE_API_HOST,
enableAutoPageviews: false // see previous comment
}
},
build: {

49
plugins/track.js Normal file
View File

@ -0,0 +1,49 @@
function defaultHandler({plausible, to, from}) {
// console.debug("[analytics] Tracking default handler");
plausible.trackPageview()
}
function eventHandler(eventName) {
return function ({plausible, to, from}) {
plausible.trackEvent(eventName, {}, {});
}
}
const TRACKER_OVERRIDES = [
{
test(v) {
return /^\/@.+/.test(v);
},
handling: eventHandler('Profile view')
}
]
export const plugin = function ({app}) {
const plausible = app.$plausible;
app.router.afterEach((to, from) => {
let handler = defaultHandler;
for (const trackerOverride of TRACKER_OVERRIDES) {
if (!trackerOverride.test(to.fullPath)) {
continue;
}
if (trackerOverride.handling === false) {
console.debug("[analytics] Page is blocked from tracking");
} else if (typeof trackerOverride.handling === "function") {
handler = trackerOverride.handling;
} else {
throw new Error("Tracking override handling is invalid");
}
break;
}
// console.log("[analytics] Tracking pageview")
try {
handler({plausible, to, from});
} catch (e) {
console.error("Error whilst trying to handle navigation: %O", e);
}
})
}
export default plugin;