lbry-desktop/src/ui/component/errorBoundary/view.jsx

67 lines
1.5 KiB
React
Raw Normal View History

// @flow
2019-03-15 17:37:56 +01:00
import { Lbryio } from 'lbryinc';
import * as React from 'react';
import Yrbl from 'component/yrbl';
import Button from 'component/button';
type Props = {
children: React.Node,
};
type State = {
hasError: boolean,
};
export default class ErrorBoundary extends React.Component<Props, State> {
constructor() {
super();
this.state = { hasError: false };
}
static getDerivedStateFromError() {
return { hasError: true };
}
componentDidCatch(error: { stack: string }) {
declare var app: { env: string };
const errorMessage = `
${window.location.pathname + window.location.search}\n
${error.stack}
`;
if (app.env === 'production') {
2019-04-14 19:57:40 +02:00
Lbryio.call('event', 'desktop_error', { error_message: errorMessage });
}
}
render() {
2019-03-08 20:20:17 +01:00
if (this.state.hasError) {
return (
<div className="load-screen">
<Yrbl
type="sad"
title={__('Aw shucks!')}
subtitle={
<div>
<p>
{__("There was an error. It's been reported and will be fixed")}. {__('Try')}{' '}
<Button
button="link"
className="load-screen__button"
label={__('refreshing the app')}
2019-03-29 15:23:32 +01:00
onClick={() => (window.location.href = '/')}
/>{' '}
{__('to fix it')}.
</p>
</div>
}
/>
</div>
);
}
return this.props.children;
}
}