Files
shop/plugins/umami.client.ts
T
libretech 60b8f1ab58
build / build (push) Failing after 8s
Analytics: queued events, once-per-order revenue, heatmap on product pages (#17)
Analytics: queued events, once-per-order revenue, heatmap on product pages (#17)
Co-authored-by: Michael Czechowski <mail@librete.ch>
(cherry picked from commit d5dd109c63)
2026-10-15 09:04:02 +02:00

36 lines
1.1 KiB
TypeScript

export default defineNuxtPlugin(() => {
const config = useRuntimeConfig();
const scriptUrl = config.public.umamiScriptUrl as string;
const websiteId = config.public.umamiWebsiteId as string;
if (!scriptUrl || !websiteId) return;
useHead({
script: [
{
src: scriptUrl,
defer: true,
"data-website-id": websiteId,
"data-do-not-track": "true"
}
]
});
// Heatmap recorder only on product pages (no personal data there). It needs
// heatmapEnabled on the Umami website, set via umami/analytics/reports.json.
const recorderUrl = scriptUrl.replace(/script\.js(\?.*)?$/, "recorder.js");
let recorderLoaded = false;
const loadRecorder = (path: string) => {
if (recorderLoaded || !path.startsWith("/details/")) return;
if (navigator.doNotTrack === "1") return;
recorderLoaded = true;
const el = document.createElement("script");
el.src = recorderUrl;
el.defer = true;
el.dataset.websiteId = websiteId;
document.head.appendChild(el);
};
const router = useRouter();
loadRecorder(router.currentRoute.value.path);
router.afterEach((to) => loadRecorder(to.path));
});