55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import { StrictMode } from 'react';
|
|
import { createRoot } from 'react-dom/client';
|
|
import App from './App.tsx';
|
|
import './index.css';
|
|
import ErrorBoundary from './ErrorBoundary';
|
|
|
|
// Error boundary for the entire application
|
|
const renderApp = () => {
|
|
try {
|
|
const rootElement = document.getElementById('root');
|
|
if (!rootElement) {
|
|
console.error('Root element not found');
|
|
return;
|
|
}
|
|
|
|
createRoot(rootElement).render(
|
|
<StrictMode>
|
|
<ErrorBoundary>
|
|
<App />
|
|
</ErrorBoundary>
|
|
</StrictMode>
|
|
);
|
|
} catch (error) {
|
|
console.error('Error rendering application:', error);
|
|
|
|
// Render a fallback UI in case of error
|
|
const rootElement = document.getElementById('root');
|
|
if (rootElement) {
|
|
rootElement.innerHTML = `
|
|
<div style="padding: 20px; color: #721c24; background-color: #f8d7da; border: 1px solid #f5c6cb; border-radius: 5px;">
|
|
<h2>Application Error</h2>
|
|
<p>Sorry, something went wrong while loading the application.</p>
|
|
<p>Error details: ${error instanceof Error ? error.message : String(error)}</p>
|
|
<button onclick="window.location.reload()" style="background: #dc3545; color: white; border: none; padding: 8px 16px; border-radius: 4px; cursor: pointer;">
|
|
Reload Page
|
|
</button>
|
|
</div>
|
|
`;
|
|
}
|
|
}
|
|
};
|
|
|
|
// Disable Vite's error overlay to prevent WebSocket connection attempts
|
|
window.addEventListener('error', (event) => {
|
|
event.preventDefault();
|
|
console.error('Caught error:', event.error);
|
|
return true;
|
|
});
|
|
|
|
// Disable Vite's HMR client
|
|
if (import.meta.hot) {
|
|
import.meta.hot.decline();
|
|
}
|
|
|
|
renderApp(); |