@@ -2,8 +2,10 @@ import type {
22 ClerkPaginatedResponse ,
33 CreateOrganizationParams ,
44 GetUserOrganizationInvitationsParams ,
5+ GetUserOrganizationSuggestionsParams ,
56 OrganizationMembershipResource ,
67 OrganizationResource ,
8+ OrganizationSuggestionResource ,
79 SetActive ,
810 UserOrganizationInvitationResource ,
911} from '@clerk/types' ;
@@ -19,6 +21,12 @@ type UseOrganizationListParams = {
1921 infinite ?: boolean ;
2022 keepPreviousData ?: boolean ;
2123 } ) ;
24+ userSuggestions ?:
25+ | true
26+ | ( GetUserOrganizationSuggestionsParams & {
27+ infinite ?: boolean ;
28+ keepPreviousData ?: boolean ;
29+ } ) ;
2230} ;
2331
2432type OrganizationList = ReturnType < typeof createOrganizationList > ;
@@ -30,19 +38,21 @@ type UseOrganizationListReturn =
3038 createOrganization : undefined ;
3139 setActive : undefined ;
3240 userInvitations : PaginatedResourcesWithDefault < UserOrganizationInvitationResource > ;
41+ userSuggestions : PaginatedResourcesWithDefault < OrganizationSuggestionResource > ;
3342 }
3443 | {
3544 isLoaded : boolean ;
3645 organizationList : OrganizationList ;
3746 createOrganization : ( params : CreateOrganizationParams ) => Promise < OrganizationResource > ;
3847 setActive : SetActive ;
3948 userInvitations : PaginatedResources < UserOrganizationInvitationResource > ;
49+ userSuggestions : PaginatedResources < OrganizationSuggestionResource > ;
4050 } ;
4151
4252type UseOrganizationList = ( params ?: UseOrganizationListParams ) => UseOrganizationListReturn ;
4353
4454export const useOrganizationList : UseOrganizationList = params => {
45- const { userInvitations } = params || { } ;
55+ const { userInvitations, userSuggestions } = params || { } ;
4656
4757 const userInvitationsSafeValues = useWithSafeValues ( userInvitations , {
4858 initialPage : 1 ,
@@ -52,6 +62,14 @@ export const useOrganizationList: UseOrganizationList = params => {
5262 infinite : false ,
5363 } ) ;
5464
65+ const userSuggestionsSafeValues = useWithSafeValues ( userSuggestions , {
66+ initialPage : 1 ,
67+ pageSize : 10 ,
68+ status : 'pending' ,
69+ keepPreviousData : false ,
70+ infinite : false ,
71+ } ) ;
72+
5573 const clerk = useClerkInstanceContext ( ) ;
5674 const user = useUserContext ( ) ;
5775
@@ -64,23 +82,18 @@ export const useOrganizationList: UseOrganizationList = params => {
6482 status : userInvitationsSafeValues . status ,
6583 } ;
6684
85+ const userSuggestionsParams =
86+ typeof userSuggestions === 'undefined'
87+ ? undefined
88+ : {
89+ initialPage : userSuggestionsSafeValues . initialPage ,
90+ pageSize : userSuggestionsSafeValues . pageSize ,
91+ status : userSuggestionsSafeValues . status ,
92+ } ;
93+
6794 const isClerkLoaded = ! ! ( clerk . loaded && user ) ;
6895
69- const {
70- data : isomorphicData ,
71- count : isomorphicCount ,
72- isLoading : isomorphicIsLoading ,
73- isFetching : isomorphicIsFetching ,
74- isError : isomorphicIsError ,
75- page : isomorphicPage ,
76- pageCount,
77- fetchPage : isomorphicSetPage ,
78- fetchNext,
79- fetchPrevious,
80- hasNextPage,
81- hasPreviousPage,
82- unstable__mutate,
83- } = usePagesOrInfinite <
96+ const invitations = usePagesOrInfinite <
8497 GetUserOrganizationInvitationsParams ,
8598 ClerkPaginatedResponse < UserOrganizationInvitationResource >
8699 > (
@@ -99,6 +112,25 @@ export const useOrganizationList: UseOrganizationList = params => {
99112 } ,
100113 ) ;
101114
115+ const suggestions = usePagesOrInfinite <
116+ GetUserOrganizationSuggestionsParams ,
117+ ClerkPaginatedResponse < OrganizationSuggestionResource >
118+ > (
119+ {
120+ ...userSuggestionsParams ,
121+ } ,
122+ user ?. getOrganizationSuggestions ,
123+ {
124+ keepPreviousData : userSuggestionsSafeValues . keepPreviousData ,
125+ infinite : userSuggestionsSafeValues . infinite ,
126+ enabled : ! ! userSuggestionsParams ,
127+ } ,
128+ {
129+ type : 'userSuggestions' ,
130+ userId : user ?. id ,
131+ } ,
132+ ) ;
133+
102134 // TODO: Properly check for SSR user values
103135 if ( ! isClerkLoaded ) {
104136 return {
@@ -121,6 +153,21 @@ export const useOrganizationList: UseOrganizationList = params => {
121153 hasPreviousPage : false ,
122154 unstable__mutate : undefined ,
123155 } ,
156+ userSuggestions : {
157+ data : undefined ,
158+ count : undefined ,
159+ isLoading : false ,
160+ isFetching : false ,
161+ isError : false ,
162+ page : undefined ,
163+ pageCount : undefined ,
164+ fetchPage : undefined ,
165+ fetchNext : undefined ,
166+ fetchPrevious : undefined ,
167+ hasNextPage : false ,
168+ hasPreviousPage : false ,
169+ unstable__mutate : undefined ,
170+ } ,
124171 } ;
125172 }
126173
@@ -129,21 +176,8 @@ export const useOrganizationList: UseOrganizationList = params => {
129176 organizationList : createOrganizationList ( user . organizationMemberships ) ,
130177 setActive : clerk . setActive ,
131178 createOrganization : clerk . createOrganization ,
132- userInvitations : {
133- data : isomorphicData ,
134- count : isomorphicCount ,
135- isLoading : isomorphicIsLoading ,
136- isFetching : isomorphicIsFetching ,
137- isError : isomorphicIsError ,
138- page : isomorphicPage ,
139- pageCount,
140- fetchPage : isomorphicSetPage ,
141- fetchNext,
142- fetchPrevious,
143- hasNextPage,
144- hasPreviousPage,
145- unstable__mutate,
146- } ,
179+ userInvitations : invitations ,
180+ userSuggestions : suggestions ,
147181 } ;
148182} ;
149183
0 commit comments