import React from 'react'; import { Button } from './ui/button'; import { AlertTriangle } from 'lucide-react'; import { errorMessage } from '../utils/conversionUtils'; import { trackErrorWithContext, trackEvent, getErrorType } from '../utils/analytics'; function getCurrentPage(): string { return window.location.hash.replace('#', '') || '/'; } // Capture unhandled promise rejections window.addEventListener('unhandledrejection', (event) => { window.electron.logInfo(`[UNHANDLED REJECTION] ${event.reason}`); trackErrorWithContext(event.reason, { component: 'global', page: getCurrentPage(), action: 'async_operation', recoverable: false, }); }); // Capture global errors window.addEventListener('error', (event) => { window.electron.logInfo( `[GLOBAL ERROR] ${event.message} at ${event.filename}:${event.lineno}:${event.colno}` ); trackErrorWithContext(event.error || event.message, { component: event.filename ? event.filename.split('/').pop() : 'unknown', page: getCurrentPage(), action: 'script_execution', recoverable: false, }); }); export function ErrorUI({ error }: { error: string }) { const handleReload = () => { trackEvent({ name: 'app_reloaded', properties: { reason: 'error_recovery' }, }); window.electron.reloadApp(); }; return (
An error occurred in Goose v{window?.appConfig?.get('GOOSE_VERSION') as string}.
) : (An error occurred.
)}
{error}