Client: add ErrorBoundary to avoid blank screen and surface errors; rebuild

This commit is contained in:
nmemmert committed 2025-12-15 13:04:25 -05:00
1 parent b7f882f38b
commit 0f7d11a197
4 files changed
+45 -5

No files matched your search

+3 -3
View File
@@ -1,15 +1,15 @@
{
"files": {
"main.css": "/static/css/main.44e40ac2.css",
"main.js": "/static/js/main.49450b63.js",
"main.js": "/static/js/main.3a72e5e4.js",
"static/js/453.d456ce70.chunk.js": "/static/js/453.d456ce70.chunk.js",
"index.html": "/index.html",
"main.44e40ac2.css.map": "/static/css/main.44e40ac2.css.map",
"main.49450b63.js.map": "/static/js/main.49450b63.js.map",
"main.3a72e5e4.js.map": "/static/js/main.3a72e5e4.js.map",
"453.d456ce70.chunk.js.map": "/static/js/453.d456ce70.chunk.js.map"
},
"entrypoints": [
"static/css/main.44e40ac2.css",
"static/js/main.49450b63.js"
"static/js/main.3a72e5e4.js"
]
}
+1 -1
View File
@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="SkyWatch - Infrastructure monitoring and alerting system"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>SkyWatch</title><script defer="defer" src="/static/js/main.49450b63.js"></script><link href="/static/css/main.44e40ac2.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="SkyWatch - Infrastructure monitoring and alerting system"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>SkyWatch</title><script defer="defer" src="/static/js/main.3a72e5e4.js"></script><link href="/static/css/main.44e40ac2.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
+37
View File
@@ -0,0 +1,37 @@
import React from 'react';
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false, error: null };
}
static getDerivedStateFromError(error) {
return { hasError: true, error };
}
componentDidCatch(error, info) {
// Log to console; could later POST to /api if needed
// eslint-disable-next-line no-console
console.error('App error:', error, info);
}
render() {
if (this.state.hasError) {
return (
<div style={{ padding: '2rem', fontFamily: 'sans-serif' }}>
<h2>Something went wrong.</h2>
<p>Please check the browser console for details.</p>
{process.env.NODE_ENV === 'development' && this.state.error && (
<pre style={{ whiteSpace: 'pre-wrap', color: '#b71c1c' }}>
{String(this.state.error)}
</pre>
)}
</div>
);
}
return this.props.children;
}
}
export default ErrorBoundary;
+4 -1
View File
@@ -2,12 +2,15 @@ import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import ErrorBoundary from './ErrorBoundary';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
<ErrorBoundary>
<App />
</ErrorBoundary>
</React.StrictMode>
);