@@ -2,8 +2,10 @@ import type {
2
2
ClerkPaginatedResponse ,
3
3
CreateOrganizationParams ,
4
4
GetUserOrganizationInvitationsParams ,
5
+ GetUserOrganizationSuggestionsParams ,
5
6
OrganizationMembershipResource ,
6
7
OrganizationResource ,
8
+ OrganizationSuggestionResource ,
7
9
SetActive ,
8
10
UserOrganizationInvitationResource ,
9
11
} from '@clerk/types' ;
@@ -19,6 +21,12 @@ type UseOrganizationListParams = {
19
21
infinite ?: boolean ;
20
22
keepPreviousData ?: boolean ;
21
23
} ) ;
24
+ userSuggestions ?:
25
+ | true
26
+ | ( GetUserOrganizationSuggestionsParams & {
27
+ infinite ?: boolean ;
28
+ keepPreviousData ?: boolean ;
29
+ } ) ;
22
30
} ;
23
31
24
32
type OrganizationList = ReturnType < typeof createOrganizationList > ;
@@ -30,19 +38,21 @@ type UseOrganizationListReturn =
30
38
createOrganization : undefined ;
31
39
setActive : undefined ;
32
40
userInvitations : PaginatedResourcesWithDefault < UserOrganizationInvitationResource > ;
41
+ userSuggestions : PaginatedResourcesWithDefault < OrganizationSuggestionResource > ;
33
42
}
34
43
| {
35
44
isLoaded : boolean ;
36
45
organizationList : OrganizationList ;
37
46
createOrganization : ( params : CreateOrganizationParams ) => Promise < OrganizationResource > ;
38
47
setActive : SetActive ;
39
48
userInvitations : PaginatedResources < UserOrganizationInvitationResource > ;
49
+ userSuggestions : PaginatedResources < OrganizationSuggestionResource > ;
40
50
} ;
41
51
42
52
type UseOrganizationList = ( params ?: UseOrganizationListParams ) => UseOrganizationListReturn ;
43
53
44
54
export const useOrganizationList : UseOrganizationList = params => {
45
- const { userInvitations } = params || { } ;
55
+ const { userInvitations, userSuggestions } = params || { } ;
46
56
47
57
const userInvitationsSafeValues = useWithSafeValues ( userInvitations , {
48
58
initialPage : 1 ,
@@ -52,6 +62,14 @@ export const useOrganizationList: UseOrganizationList = params => {
52
62
infinite : false ,
53
63
} ) ;
54
64
65
+ const userSuggestionsSafeValues = useWithSafeValues ( userSuggestions , {
66
+ initialPage : 1 ,
67
+ pageSize : 10 ,
68
+ status : 'pending' ,
69
+ keepPreviousData : false ,
70
+ infinite : false ,
71
+ } ) ;
72
+
55
73
const clerk = useClerkInstanceContext ( ) ;
56
74
const user = useUserContext ( ) ;
57
75
@@ -64,23 +82,18 @@ export const useOrganizationList: UseOrganizationList = params => {
64
82
status : userInvitationsSafeValues . status ,
65
83
} ;
66
84
85
+ const userSuggestionsParams =
86
+ typeof userSuggestions === 'undefined'
87
+ ? undefined
88
+ : {
89
+ initialPage : userSuggestionsSafeValues . initialPage ,
90
+ pageSize : userSuggestionsSafeValues . pageSize ,
91
+ status : userSuggestionsSafeValues . status ,
92
+ } ;
93
+
67
94
const isClerkLoaded = ! ! ( clerk . loaded && user ) ;
68
95
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 <
84
97
GetUserOrganizationInvitationsParams ,
85
98
ClerkPaginatedResponse < UserOrganizationInvitationResource >
86
99
> (
@@ -99,6 +112,25 @@ export const useOrganizationList: UseOrganizationList = params => {
99
112
} ,
100
113
) ;
101
114
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
+
102
134
// TODO: Properly check for SSR user values
103
135
if ( ! isClerkLoaded ) {
104
136
return {
@@ -121,6 +153,21 @@ export const useOrganizationList: UseOrganizationList = params => {
121
153
hasPreviousPage : false ,
122
154
unstable__mutate : undefined ,
123
155
} ,
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
+ } ,
124
171
} ;
125
172
}
126
173
@@ -129,21 +176,8 @@ export const useOrganizationList: UseOrganizationList = params => {
129
176
organizationList : createOrganizationList ( user . organizationMemberships ) ,
130
177
setActive : clerk . setActive ,
131
178
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 ,
147
181
} ;
148
182
} ;
149
183
0 commit comments