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