// Copyright 2024, Command Line Inc. // SPDX-License-Identifier: Apache-2.0 import React, { ReactNode } from "react"; export class ErrorBoundary extends React.Component< { children: ReactNode; fallback?: React.ReactElement & { error?: Error } }, { error: Error } > { constructor(props) { super(props); this.state = { error: null }; } componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { this.setState({ error: error }); } render() { const { fallback } = this.props; const { error } = this.state; if (error) { if (fallback != null) { return React.cloneElement(fallback as any, { error }); } const errorMsg = `Error: ${error?.message}\n\n${error?.stack}`; return
{errorMsg}; } else { return <>{this.props.children}>; } } }