Skip to content

Commit d879d16

Browse files
committed
chore: refactor
1 parent 589cb6b commit d879d16

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

src/brouther/await.tsx

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ type AwaitProps<T extends Promise<any>> = {
44
promise: T;
55
loadingComponent?: React.ReactElement;
66
children: (resolved: Awaited<T>) => React.ReactElement;
7+
errorComponent?: (error: any) => React.ReactElement;
78
};
89

910
type PromiseResolved<T extends Promise<any>> = {
@@ -33,18 +34,22 @@ const resolvePromise = async <T extends Promise<any>>(
3334

3435
const InnerAwait = <T extends Promise<any>>(props: AwaitProps<T>) => {
3536
const [data, setData] = useState<PromiseResolved<T> | undefined>(undefined);
36-
useEffect(() => {
37-
resolvePromise(props.promise).then(setData);
38-
}, [props.promise]);
37+
38+
useEffect(() => void resolvePromise(props.promise).then(setData), [props.promise]);
39+
3940
if (data === undefined) return props.loadingComponent;
4041
if (!data.error) return props.children(data.resolved!);
42+
if (data.error && props.errorComponent) return props.errorComponent(data!.error);
4143
return props.loadingComponent;
4244
};
4345

44-
export const Await = <T extends Promise<any>>(props: AwaitProps<T>) => {
45-
return (
46-
<React.Suspense fallback={props.loadingComponent}>
47-
<InnerAwait {...props} />
48-
</React.Suspense>
49-
);
50-
};
46+
export const Await = <T extends Promise<any>>(props: AwaitProps<T>) => (
47+
<React.Suspense fallback={props.loadingComponent}>
48+
<InnerAwait
49+
errorComponent={props.errorComponent}
50+
promise={props.promise}
51+
loadingComponent={props.loadingComponent}
52+
children={props.children}
53+
/>
54+
</React.Suspense>
55+
);

0 commit comments

Comments
 (0)