deploy
Some checks failed
Build & Deploy Mintel Blog / build-and-deploy (push) Failing after 1m26s

This commit is contained in:
2026-01-30 13:57:36 +01:00
parent 1468a48281
commit 1f57bae339
10 changed files with 488 additions and 71 deletions

View File

@@ -1,22 +1,13 @@
'use client';
import React, { useEffect } from 'react';
import { createPlausibleAnalytics } from '../utils/analytics';
import { useEffect } from 'react';
import { getDefaultAnalytics } from '../utils/analytics';
import { getDefaultErrorTracking } from '../utils/error-tracking';
interface AnalyticsProps {
domain?: string;
scriptUrl?: string;
}
export const Analytics: React.FC<AnalyticsProps> = ({
domain = 'mintel.me',
scriptUrl = 'https://plausible.yourdomain.com/js/script.js'
}) => {
export const Analytics: React.FC = () => {
useEffect(() => {
const analytics = createPlausibleAnalytics({
domain: document.documentElement.lang || domain,
scriptUrl
});
const analytics = getDefaultAnalytics();
const errorTracking = getDefaultErrorTracking();
// Track page load performance
const trackPageLoad = () => {
@@ -58,14 +49,41 @@ export const Analytics: React.FC<AnalyticsProps> = ({
}
};
// Global error handler for error tracking
const handleGlobalError = (event: ErrorEvent) => {
errorTracking.captureException(event.error || event.message);
};
const handleUnhandledRejection = (event: PromiseRejectionEvent) => {
errorTracking.captureException(event.reason);
};
window.addEventListener('error', handleGlobalError);
window.addEventListener('unhandledrejection', handleUnhandledRejection);
trackPageLoad();
trackOutboundLinks();
const cleanupSearch = trackSearch();
return () => {
if (cleanupSearch) cleanupSearch();
window.removeEventListener('error', handleGlobalError);
window.removeEventListener('unhandledrejection', handleUnhandledRejection);
};
}, [domain, scriptUrl]);
}, []);
return null;
const analytics = getDefaultAnalytics();
const adapter = analytics.getAdapter();
const scriptTag = adapter.getScriptTag ? adapter.getScriptTag() : null;
if (!scriptTag) return null;
// We use dangerouslySetInnerHTML to inject the script tag from the adapter
// This is safe here because the script URLs and IDs come from our own config/env
return (
<div
dangerouslySetInnerHTML={{ __html: scriptTag }}
style={{ display: 'none' }}
/>
);
};