refactor: Component hierarchy and code cleanup (#1319)
This commit is contained in:
+12
-68
@@ -1,77 +1,21 @@
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom/client';
|
||||
import App from './App';
|
||||
import { ModelProvider } from './components/settings/models/ModelContext';
|
||||
import { ErrorBoundary } from './components/ErrorBoundary';
|
||||
import { ActiveKeysProvider } from './components/settings/api_keys/ActiveKeysContext';
|
||||
import { patchConsoleLogging } from './utils';
|
||||
|
||||
// Error Boundary Component
|
||||
class ErrorBoundary extends React.Component<{ children: React.ReactNode }, { hasError: boolean }> {
|
||||
constructor(props: { children: React.ReactNode }) {
|
||||
super(props);
|
||||
this.state = { hasError: false };
|
||||
}
|
||||
|
||||
static getDerivedStateFromError(_: Error) {
|
||||
return { hasError: true };
|
||||
}
|
||||
|
||||
componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {
|
||||
// Send error to main process
|
||||
window.electron.logInfo(`[ERROR] ${error.toString()}\n${errorInfo.componentStack}`);
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.hasError) {
|
||||
return <h1>Something went wrong.</h1>;
|
||||
}
|
||||
|
||||
return this.props.children;
|
||||
}
|
||||
}
|
||||
|
||||
// Set up console interceptors
|
||||
const originalConsole = {
|
||||
log: console.log,
|
||||
error: console.error,
|
||||
warn: console.warn,
|
||||
info: console.info,
|
||||
};
|
||||
|
||||
// Intercept console methods
|
||||
console.log = (...args) => {
|
||||
window.electron.logInfo(`[LOG] ${args.join(' ')}`);
|
||||
originalConsole.log(...args);
|
||||
};
|
||||
|
||||
console.error = (...args) => {
|
||||
window.electron.logInfo(`[ERROR] ${args.join(' ')}`);
|
||||
originalConsole.error(...args);
|
||||
};
|
||||
|
||||
console.warn = (...args) => {
|
||||
window.electron.logInfo(`[WARN] ${args.join(' ')}`);
|
||||
originalConsole.warn(...args);
|
||||
};
|
||||
|
||||
console.info = (...args) => {
|
||||
window.electron.logInfo(`[INFO] ${args.join(' ')}`);
|
||||
originalConsole.info(...args);
|
||||
};
|
||||
|
||||
// Capture unhandled promise rejections
|
||||
window.addEventListener('unhandledrejection', (event) => {
|
||||
window.electron.logInfo(`[UNHANDLED REJECTION] ${event.reason}`);
|
||||
});
|
||||
|
||||
// Capture global errors
|
||||
window.addEventListener('error', (event) => {
|
||||
window.electron.logInfo(
|
||||
`[GLOBAL ERROR] ${event.message} at ${event.filename}:${event.lineno}:${event.colno}`
|
||||
);
|
||||
});
|
||||
patchConsoleLogging();
|
||||
|
||||
ReactDOM.createRoot(document.getElementById('root')!).render(
|
||||
<React.StrictMode>
|
||||
<ErrorBoundary>
|
||||
<App />
|
||||
</ErrorBoundary>
|
||||
<ModelProvider>
|
||||
<ActiveKeysProvider>
|
||||
<ErrorBoundary>
|
||||
<App />
|
||||
</ErrorBoundary>
|
||||
</ActiveKeysProvider>
|
||||
</ModelProvider>
|
||||
</React.StrictMode>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user