fischerX/apps/web/src/providers/monitoring-provider.tsx

44 lines
1.2 KiB
TypeScript

'use client';
import React, { useEffect, ReactNode } from 'react';
interface Props {
children: ReactNode;
}
export function MonitoringProvider({ children }: Props) {
useEffect(() => {
if (typeof window !== 'undefined') {
import('@/lib/web-vitals').then(({ reportWebVitals, logVitals }) => {
reportWebVitals(logVitals);
}).catch(() => {});
}
}, []);
useEffect(() => {
if (typeof window !== 'undefined' && process.env.NODE_ENV === 'production') {
import('@/lib/telemetry').then(m => m.initTelemetry()).catch(() => {});
}
}, []);
useEffect(() => {
const handleError = (event: ErrorEvent) => {
console.error('Global error:', event.error);
};
const handleUnhandledRejection = (event: PromiseRejectionEvent) => {
console.error('Unhandled promise rejection:', event.reason);
};
window.addEventListener('error', handleError);
window.addEventListener('unhandledrejection', handleUnhandledRejection);
return () => {
window.removeEventListener('error', handleError);
window.removeEventListener('unhandledrejection', handleUnhandledRejection);
};
}, []);
return <>{children}</>;
}