From 3eb28f919d2abfd0e51d668392d9fc60c4caaa2c Mon Sep 17 00:00:00 2001 From: Wroud Date: Fri, 27 Aug 2021 12:32:42 +0300 Subject: [PATCH] fix: remount block with error --- .../packages/core-app/src/AppScreen/Main.tsx | 2 +- .../core-app/src/AppScreen/RightArea.tsx | 6 +++--- .../core-blocks/src/ErrorBoundary.tsx | 21 +++++++++++++++++-- .../core-blocks/src/Tabs/TabPanel.tsx | 4 ++-- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/webapp/packages/core-app/src/AppScreen/Main.tsx b/webapp/packages/core-app/src/AppScreen/Main.tsx index 85cd837a7d..6c4c6fbbeb 100644 --- a/webapp/packages/core-app/src/AppScreen/Main.tsx +++ b/webapp/packages/core-app/src/AppScreen/Main.tsx @@ -47,7 +47,7 @@ export const Main: React.FC = function Main() { - + diff --git a/webapp/packages/core-app/src/AppScreen/RightArea.tsx b/webapp/packages/core-app/src/AppScreen/RightArea.tsx index 222e5a00d0..11e679dac2 100644 --- a/webapp/packages/core-app/src/AppScreen/RightArea.tsx +++ b/webapp/packages/core-app/src/AppScreen/RightArea.tsx @@ -61,18 +61,18 @@ export const RightArea = observer(function RightArea() { return styled(useStyles(styles, splitStyles, splitHorizontalStyles, slideBoxStyles))( - + - + {logViewerService.isActive && } - + diff --git a/webapp/packages/core-blocks/src/ErrorBoundary.tsx b/webapp/packages/core-blocks/src/ErrorBoundary.tsx index e784fdec41..db34d30fad 100644 --- a/webapp/packages/core-blocks/src/ErrorBoundary.tsx +++ b/webapp/packages/core-blocks/src/ErrorBoundary.tsx @@ -22,6 +22,7 @@ const style = css` interface IProps { onRefresh?: () => any; root?: boolean; + remount?: boolean; } interface IState { @@ -36,6 +37,9 @@ export class ErrorBoundary extends React.Component { error: null, errorInfo: null, }; + + this.remount = this.remount.bind(this); + this.refresh = this.refresh.bind(this); } componentDidCatch(error: Error, errorInfo: ErrorInfo): void { @@ -47,13 +51,14 @@ export class ErrorBoundary extends React.Component { render(): React.ReactNode { const { errorInfo, error } = this.state; - const { root, onRefresh } = this.props; + const { remount, root, onRefresh } = this.props; if (errorInfo) { return styled(style)( {root && } - {onRefresh && } + {onRefresh && } + {remount && }
{error?.toString() ?? ''}
@@ -65,4 +70,16 @@ export class ErrorBoundary extends React.Component { return this.props.children; } + + private remount() { + this.setState({ + error: null, + errorInfo: null, + }); + } + + private refresh() { + this.props.onRefresh?.(); + this.remount(); + } } diff --git a/webapp/packages/core-blocks/src/Tabs/TabPanel.tsx b/webapp/packages/core-blocks/src/Tabs/TabPanel.tsx index 223210a83f..348421a291 100644 --- a/webapp/packages/core-blocks/src/Tabs/TabPanel.tsx +++ b/webapp/packages/core-blocks/src/Tabs/TabPanel.tsx @@ -34,7 +34,7 @@ export const TabPanel: React.FC = function TabPanel({ if (typeof children === 'function') { return ( - + {(children as (state: TabStateReturn) => React.ReactNode)(state.state)} @@ -45,7 +45,7 @@ export const TabPanel: React.FC = function TabPanel({ } return ( - + {children}