diff --git a/src/api/Notifications/NotificationComponent.tsx b/src/api/Notifications/NotificationComponent.tsx index 65d4c433..036cacd0 100644 --- a/src/api/Notifications/NotificationComponent.tsx +++ b/src/api/Notifications/NotificationComponent.tsx @@ -89,4 +89,6 @@ export default ErrorBoundary.wrap(function NotificationComponent({ )} ); +}, { + onError: ({ props }) => props.onClose!() }); diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx index 1eb2eb8d..62b92a03 100644 --- a/src/components/ErrorBoundary.tsx +++ b/src/components/ErrorBoundary.tsx @@ -23,15 +23,18 @@ import { React } from "@webpack/common"; import { ErrorCard } from "./ErrorCard"; -interface Props { +interface Props { /** Render nothing if an error occurs */ noop?: boolean; /** Fallback component to render if an error occurs */ fallback?: React.ComponentType>; - /** called when an error occurs */ - onError?(error: Error, errorInfo: React.ErrorInfo): void; + /** called when an error occurs. The props property is only available if using .wrap */ + onError?(data: { error: Error, errorInfo: React.ErrorInfo, props: T; }): void; /** Custom error message */ message?: string; + + /** The props passed to the wrapped component. Only used by wrap */ + wrappedProps?: T; } const color = "#e78284"; @@ -66,7 +69,7 @@ const ErrorBoundary = LazyComponent(() => { } componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { - this.props.onError?.(error, errorInfo); + this.props.onError?.({ error, errorInfo, props: this.props.wrappedProps }); logger.error("A component threw an Error\n", error); logger.error("Component Stack", errorInfo.componentStack); } @@ -102,11 +105,11 @@ const ErrorBoundary = LazyComponent(() => { }; }) as React.ComponentType> & { - wrap(Component: React.ComponentType, errorBoundaryProps?: Props): React.ComponentType; + wrap(Component: React.ComponentType, errorBoundaryProps?: Omit, "wrappedProps">): React.ComponentType; }; ErrorBoundary.wrap = (Component, errorBoundaryProps) => props => ( - + );