fix(Notifications): Correctly close errored notifications

This commit is contained in:
Vendicated 2023-03-01 05:45:09 +01:00
parent faa90eccd3
commit 37003edae9
No known key found for this signature in database
GPG key ID: A1DC0CFB5615D905
2 changed files with 11 additions and 6 deletions

View file

@ -89,4 +89,6 @@ export default ErrorBoundary.wrap(function NotificationComponent({
)} )}
</button> </button>
); );
}, {
onError: ({ props }) => props.onClose!()
}); });

View file

@ -23,15 +23,18 @@ import { React } from "@webpack/common";
import { ErrorCard } from "./ErrorCard"; import { ErrorCard } from "./ErrorCard";
interface Props { interface Props<T = any> {
/** Render nothing if an error occurs */ /** Render nothing if an error occurs */
noop?: boolean; noop?: boolean;
/** Fallback component to render if an error occurs */ /** Fallback component to render if an error occurs */
fallback?: React.ComponentType<React.PropsWithChildren<{ error: any; message: string; stack: string; }>>; fallback?: React.ComponentType<React.PropsWithChildren<{ error: any; message: string; stack: string; }>>;
/** called when an error occurs */ /** called when an error occurs. The props property is only available if using .wrap */
onError?(error: Error, errorInfo: React.ErrorInfo): void; onError?(data: { error: Error, errorInfo: React.ErrorInfo, props: T; }): void;
/** Custom error message */ /** Custom error message */
message?: string; message?: string;
/** The props passed to the wrapped component. Only used by wrap */
wrappedProps?: T;
} }
const color = "#e78284"; const color = "#e78284";
@ -66,7 +69,7 @@ const ErrorBoundary = LazyComponent(() => {
} }
componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { 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("A component threw an Error\n", error);
logger.error("Component Stack", errorInfo.componentStack); logger.error("Component Stack", errorInfo.componentStack);
} }
@ -102,11 +105,11 @@ const ErrorBoundary = LazyComponent(() => {
}; };
}) as }) as
React.ComponentType<React.PropsWithChildren<Props>> & { 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.wrap = (Component, errorBoundaryProps) => props => (
<ErrorBoundary {...errorBoundaryProps}> <ErrorBoundary {...errorBoundaryProps} wrappedProps={props}>
<Component {...props} /> <Component {...props} />
</ErrorBoundary> </ErrorBoundary>
); );