build / build (push) Failing after 8s
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)
36 lines
1.1 KiB
TypeScript
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));
|
|
});
|