@@ -16,6 +16,8 @@ import { IRootState } from "@/store";
16
16
import Loader from "@/components/ui/button/Loader" ;
17
17
import ProfileOverviewSection from "@/components/sections/profile/overview/Section" ;
18
18
import ReferralsList from "@/components/list/ReferralsList" ;
19
+ import Spinner from "@/components/ui/Loader" ;
20
+
19
21
20
22
/**
21
23
* interface for UserReferrals multiSelector
@@ -28,6 +30,7 @@ interface UserReferralsMultiSelector {
28
30
user : User | null ;
29
31
referrals : ReferralType [ ] ;
30
32
hasMore : boolean ;
33
+ loading : boolean
31
34
}
32
35
33
36
/**
@@ -39,11 +42,12 @@ interface UserReferralsMultiSelector {
39
42
export default function UserReferrals ( ) : ReactElement {
40
43
const { t } = useTranslation ( ) ;
41
44
const [ page , setPage ] = useState ( 0 ) ;
42
- const [ loading , setLoading ] = useState ( false ) ;
43
- const { user, referrals, hasMore } = useMultiSelector < unknown , UserReferralsMultiSelector > ( {
45
+ const [ isLoadingMore , setIsLoadingMore ] = useState ( false ) ;
46
+ const { user, referrals, hasMore, loading } = useMultiSelector < unknown , UserReferralsMultiSelector > ( {
44
47
user : ( state : IRootState ) => state . user . data ,
45
48
referrals : ( state : IRootState ) => state . userReferrals . userReferralList ,
46
49
hasMore : ( state : IRootState ) => state . userReferrals . hasMore ,
50
+ loading : ( state : IRootState ) => state . userReferrals . loading
47
51
} ) ;
48
52
const dispatch = useDispatch ( ) ;
49
53
const showLoadMore = useMemo ( ( ) => hasMore && referrals ?. length >= 10 , [ referrals ?. length , hasMore ] ) ;
@@ -55,13 +59,14 @@ export default function UserReferrals(): ReactElement {
55
59
} , [ dispatch , user ?. referrals ] ) ;
56
60
57
61
const nextPage = async ( ) => {
58
- if ( loading || ! hasMore ) return ;
59
- setLoading ( true ) ;
62
+ if ( isLoadingMore || ! hasMore ) return ;
63
+ setIsLoadingMore ( true ) ;
60
64
const referralId = referrals [ referrals . length - 1 ] ?. id || null ;
61
65
await dispatch ( userFetchReferrals ( { startAfter : referralId || null } ) ) ;
62
66
setPage ( page + 1 ) ;
63
- setLoading ( false ) ;
67
+ setIsLoadingMore ( false ) ;
64
68
} ;
69
+ if ( loading && ! referrals . length ) return < Spinner className = "py-32" /> ;
65
70
66
71
return (
67
72
< div className = "grid gap-7.5" >
@@ -82,7 +87,7 @@ export default function UserReferrals(): ReactElement {
82
87
< Referral key = { `user-referral-${ i } ` } referral = { referral } />
83
88
) ) }
84
89
</ InfiniteScroll >
85
- { loading && < Loader loading = { loading } className = "absolute left-6 -bottom-7.5" onClick = { ( ) => nextPage ( ) } /> }
90
+ { isLoadingMore && < Loader loading = { isLoadingMore } className = "absolute left-6 -bottom-7.5" onClick = { ( ) => nextPage ( ) } /> }
86
91
</ div >
87
92
) : (
88
93
< div className = "w-full border bg-gray-50 border-gray-200 border-solid rounded-3xl text-gray-500 p-6.5 font-semibold" > { t ( 'referrals.empty-state.subtitle' ) } </ div >
0 commit comments