aboutsummaryrefslogtreecommitdiff
path: root/src/components/ErrorBoundary.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/ErrorBoundary.tsx')
-rw-r--r--src/components/ErrorBoundary.tsx15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx
index 1eb2eb8..62b92a0 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<T = any> {
/** Render nothing if an error occurs */
noop?: boolean;
/** Fallback component to render if an error occurs */
fallback?: React.ComponentType<React.PropsWithChildren<{ error: any; message: string; stack: string; }>>;
- /** 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<React.PropsWithChildren<Props>> & {
- wrap<T extends object = any>(Component: React.ComponentType<T>, errorBoundaryProps?: Props): React.ComponentType<T>;
+ wrap<T extends object = any>(Component: React.ComponentType<T>, errorBoundaryProps?: Omit<Props<T>, "wrappedProps">): React.ComponentType<T>;
};
ErrorBoundary.wrap = (Component, errorBoundaryProps) => props => (
- <ErrorBoundary {...errorBoundaryProps}>
+ <ErrorBoundary {...errorBoundaryProps} wrappedProps={props}>
<Component {...props} />
</ErrorBoundary>
);