mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2025-01-10 18:27:25 +03:00
Created ErrorHandler component
This commit is contained in:
parent
2bf79dbc80
commit
cd908fa358
4 changed files with 55 additions and 4 deletions
37
src/common/ErrorHandler.js
Normal file
37
src/common/ErrorHandler.js
Normal file
|
@ -0,0 +1,37 @@
|
|||
import React from 'react';
|
||||
import * as PropTypes from 'prop-types';
|
||||
import './ErrorHandler.scss';
|
||||
import { Button } from 'reactstrap';
|
||||
|
||||
const ErrorHandler = ({ location }) => class ErrorHandler extends React.Component {
|
||||
static propTypes = {
|
||||
children: PropTypes.node.isRequired,
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = { hasError: false };
|
||||
}
|
||||
|
||||
static getDerivedStateFromError() {
|
||||
// Update state so the next render will show the fallback UI.
|
||||
return { hasError: true };
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.hasError) {
|
||||
return (
|
||||
<div className="error-handler">
|
||||
<h1>Oops! This is awkward :S</h1>
|
||||
<p>It seems that something went wrong. Try refreshing the page or just click this button.</p>
|
||||
<br />
|
||||
<Button outline color="primary" onClick={() => location.reload()}>Take me back</Button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return this.props.children;
|
||||
}
|
||||
};
|
||||
|
||||
export default ErrorHandler;
|
9
src/common/ErrorHandler.scss
Normal file
9
src/common/ErrorHandler.scss
Normal file
|
@ -0,0 +1,9 @@
|
|||
@import '../utils/mixins/vertical-align.scss';
|
||||
|
||||
.error-handler {
|
||||
@include vertical-align();
|
||||
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
|
@ -3,6 +3,7 @@ import MainHeader from '../MainHeader';
|
|||
import Home from '../Home';
|
||||
import MenuLayout from '../MenuLayout';
|
||||
import AsideMenu from '../AsideMenu';
|
||||
import ErrorHandler from '../ErrorHandler';
|
||||
|
||||
const provideServices = (bottle, connect, withRouter) => {
|
||||
bottle.constant('window', global.window);
|
||||
|
@ -29,6 +30,8 @@ const provideServices = (bottle, connect, withRouter) => {
|
|||
bottle.decorator('MenuLayout', withRouter);
|
||||
|
||||
bottle.serviceFactory('AsideMenu', AsideMenu, 'DeleteServerButton');
|
||||
|
||||
bottle.serviceFactory('ErrorHandler', ErrorHandler, 'window');
|
||||
};
|
||||
|
||||
export default provideServices;
|
||||
|
|
10
src/index.js
10
src/index.js
|
@ -16,14 +16,16 @@ import './index.scss';
|
|||
// This overwrites icons used for leaflet maps, fixing some issues caused by webpack while processing the CSS
|
||||
fixLeafletIcons();
|
||||
|
||||
const { App, ScrollToTop } = container;
|
||||
const { App, ScrollToTop, ErrorHandler } = container;
|
||||
|
||||
render(
|
||||
<Provider store={store}>
|
||||
<BrowserRouter basename={homepage}>
|
||||
<ScrollToTop>
|
||||
<App />
|
||||
</ScrollToTop>
|
||||
<ErrorHandler>
|
||||
<ScrollToTop>
|
||||
<App />
|
||||
</ScrollToTop>
|
||||
</ErrorHandler>
|
||||
</BrowserRouter>
|
||||
</Provider>,
|
||||
document.getElementById('root')
|
||||
|
|
Loading…
Reference in a new issue