mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-17 06:56:03 +01:00
feat(web): wrap app in errorboundary
Prevents the app from failing on render errors as mentioned in #675. More to come..
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import { StrictMode } from 'react';
|
||||||
import ReactDOM from 'react-dom/client';
|
import { createRoot } from 'react-dom/client';
|
||||||
import './index.css';
|
import './index.css';
|
||||||
import App from './App';
|
import App from './App';
|
||||||
import { fas } from '@fortawesome/free-solid-svg-icons';
|
import { fas } from '@fortawesome/free-solid-svg-icons';
|
||||||
@@ -9,6 +9,7 @@ import { library } from '@fortawesome/fontawesome-svg-core';
|
|||||||
import { isEnvBrowser } from './utils/misc';
|
import { isEnvBrowser } from './utils/misc';
|
||||||
import LocaleProvider from './providers/LocaleProvider';
|
import LocaleProvider from './providers/LocaleProvider';
|
||||||
import ConfigProvider from './providers/ConfigProvider';
|
import ConfigProvider from './providers/ConfigProvider';
|
||||||
|
import ErrorBoundary from './providers/errorBoundary';
|
||||||
|
|
||||||
library.add(fas, far, fab);
|
library.add(fas, far, fab);
|
||||||
|
|
||||||
@@ -23,12 +24,15 @@ if (isEnvBrowser()) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const root = document.getElementById('root');
|
const root = document.getElementById('root');
|
||||||
ReactDOM.createRoot(root!).render(
|
|
||||||
<React.StrictMode>
|
createRoot(root!).render(
|
||||||
|
<StrictMode>
|
||||||
<LocaleProvider>
|
<LocaleProvider>
|
||||||
<ConfigProvider>
|
<ConfigProvider>
|
||||||
<App />
|
<ErrorBoundary>
|
||||||
|
<App />
|
||||||
|
</ErrorBoundary>
|
||||||
</ConfigProvider>
|
</ConfigProvider>
|
||||||
</LocaleProvider>
|
</LocaleProvider>
|
||||||
</React.StrictMode>
|
</StrictMode>
|
||||||
);
|
);
|
||||||
|
|||||||
23
web/src/providers/errorBoundary.tsx
Normal file
23
web/src/providers/errorBoundary.tsx
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { Component, ReactNode, ErrorInfo } from 'react';
|
||||||
|
|
||||||
|
class ErrorBoundary extends Component<{ children: ReactNode }, { hasError: boolean }> {
|
||||||
|
constructor(props: { children: ReactNode }) {
|
||||||
|
super(props);
|
||||||
|
this.state = { hasError: false };
|
||||||
|
}
|
||||||
|
|
||||||
|
static getDerivedStateFromError(err: Error) {
|
||||||
|
return { hasError: true };
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidCatch(error: Error, info: ErrorInfo) {
|
||||||
|
console.error(error, info)
|
||||||
|
this.setState({ hasError: false });
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return this.state.hasError ? null : this.props.children;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ErrorBoundary;
|
||||||
Reference in New Issue
Block a user