aboutsummaryrefslogtreecommitdiff
path: root/src/utils/react.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/react.tsx')
-rw-r--r--src/utils/react.tsx9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/utils/react.tsx b/src/utils/react.tsx
index e8c1081..0181c95 100644
--- a/src/utils/react.tsx
+++ b/src/utils/react.tsx
@@ -21,6 +21,8 @@ import { React, useEffect, useMemo, useReducer, useState } from "@webpack/common
import { makeLazy } from "./lazy";
import { checkIntersecting } from "./misc";
+export const NoopComponent = () => null;
+
/**
* Check if an element is on screen
* @param intersectOnly If `true`, will only update the state when the element comes into view
@@ -125,13 +127,14 @@ export function useForceUpdater(withDep?: true) {
* A lazy component. The factory method is called on first render. For example useful
* for const Component = LazyComponent(() => findByDisplayName("...").default)
* @param factory Function returning a Component
+ * @param attempts How many times to try to get the component before giving up
* @returns Result of factory function
*/
-export function LazyComponent<T extends object = any>(factory: () => React.ComponentType<T>) {
- const get = makeLazy(factory);
+export function LazyComponent<T extends object = any>(factory: () => React.ComponentType<T>, attempts = 5) {
+ const get = makeLazy(factory, attempts);
return (props: T) => {
- const Component = get();
+ const Component = get() ?? NoopComponent;
return <Component {...props} />;
};
}