fix(BetterSettings): do not catch errors of other ui
This commit is contained in:
parent
6ad17ff7e7
commit
b1cc67a860
1 changed files with 17 additions and 6 deletions
|
@ -6,8 +6,8 @@
|
|||
|
||||
import { definePluginSettings } from "@api/Settings";
|
||||
import { classNameFactory } from "@api/Styles";
|
||||
import ErrorBoundary from "@components/ErrorBoundary";
|
||||
import { Devs } from "@utils/constants";
|
||||
import { Logger } from "@utils/Logger";
|
||||
import definePlugin, { OptionType } from "@utils/types";
|
||||
import { findByPropsLazy } from "@webpack";
|
||||
import { ComponentDispatch, FocusLock, i18n, Menu, useEffect, useRef } from "@webpack/common";
|
||||
|
@ -124,12 +124,23 @@ export default definePlugin({
|
|||
}
|
||||
],
|
||||
|
||||
// This is the very outer layer of the entire ui, so we can't wrap this in an ErrorBoundary
|
||||
// without possibly also catching unrelated errors of children.
|
||||
//
|
||||
// Thus, we sanity check webpack modules & do this really hacky try catch to hopefully prevent hard crashes if something goes wrong.
|
||||
// try catch will only catch errors in the Layer function (hence why it's called as a plain function rather than a component), but
|
||||
// not in children
|
||||
Layer(props: LayerProps) {
|
||||
return (
|
||||
<ErrorBoundary fallback={() => props.children as any}>
|
||||
<Layer {...props} />
|
||||
</ErrorBoundary>
|
||||
);
|
||||
try {
|
||||
if (!FocusLock || !ComponentDispatch)
|
||||
throw new Error("Failed to fetch some webpack modules");
|
||||
|
||||
return Layer(props);
|
||||
} catch (e) {
|
||||
new Logger("BetterSettings").error("Failed to render Layer", e);
|
||||
}
|
||||
|
||||
return props.children;
|
||||
},
|
||||
|
||||
wrapMenu(list: SettingsEntry[]) {
|
||||
|
|
Loading…
Reference in a new issue