@@ -26,7 +26,7 @@ export default function NewProject() {
26
26
const { teams } = useContext ( TeamsContext ) ;
27
27
const { user, setUser } = useContext ( UserContext ) ;
28
28
29
- const [ provider , setProvider ] = useState < string | undefined > ( ) ;
29
+ const [ selectedProviderHost , setSelectedProviderHost ] = useState < string | undefined > ( ) ;
30
30
const [ reposInAccounts , setReposInAccounts ] = useState < ProviderRepository [ ] > ( [ ] ) ;
31
31
const [ repoSearchFilter , setRepoSearchFilter ] = useState < string > ( "" ) ;
32
32
const [ selectedAccount , setSelectedAccount ] = useState < string | undefined > ( undefined ) ;
@@ -42,15 +42,20 @@ export default function NewProject() {
42
42
const [ guessedConfigString , setGuessedConfigString ] = useState < string | undefined > ( ) ;
43
43
const [ sourceOfConfig , setSourceOfConfig ] = useState < "repo" | "db" | undefined > ( ) ;
44
44
45
+ const [ authProviders , setAuthProviders ] = useState < AuthProviderInfo [ ] > ( [ ] ) ;
46
+
45
47
useEffect ( ( ) => {
46
- if ( user && provider === undefined ) {
48
+ if ( user && selectedProviderHost === undefined ) {
47
49
if ( user . identities . find ( i => i . authProviderId === "Public-GitLab" ) ) {
48
- setProvider ( "gitlab.com" ) ;
50
+ setSelectedProviderHost ( "gitlab.com" ) ;
49
51
} else if ( user . identities . find ( i => i . authProviderId === "Public-GitHub" ) ) {
50
- setProvider ( "github.com" ) ;
52
+ setSelectedProviderHost ( "github.com" ) ;
51
53
} else if ( user . identities . find ( i => i . authProviderId === "Public-Bitbucket" ) ) {
52
- setProvider ( "bitbucket.org" ) ;
54
+ setSelectedProviderHost ( "bitbucket.org" ) ;
53
55
}
56
+ ( async ( ) => {
57
+ setAuthProviders ( await getGitpodService ( ) . server . getAuthProviders ( ) ) ;
58
+ } ) ( ) ;
54
59
}
55
60
} , [ user ] ) ;
56
61
@@ -138,14 +143,14 @@ export default function NewProject() {
138
143
} , [ selectedAccount ] ) ;
139
144
140
145
useEffect ( ( ) => {
141
- if ( ! provider || isBitbucket ( ) ) {
146
+ if ( ! selectedProviderHost || isBitbucket ( ) ) {
142
147
return ;
143
148
}
144
149
( async ( ) => {
145
150
updateOrgsState ( ) ;
146
151
await updateReposInAccounts ( ) ;
147
152
} ) ( ) ;
148
- } , [ provider ] ) ;
153
+ } , [ selectedProviderHost ] ) ;
149
154
150
155
useEffect ( ( ) => {
151
156
if ( project && sourceOfConfig ) {
@@ -158,17 +163,17 @@ export default function NewProject() {
158
163
}
159
164
} , [ project , sourceOfConfig ] ) ;
160
165
161
- const isGitHub = ( ) => provider === "github.com" ;
162
- const isBitbucket = ( ) => provider === "bitbucket.org" ;
166
+ const isGitHub = ( ) => selectedProviderHost === "github.com" ;
167
+ const isBitbucket = ( ) => selectedProviderHost === "bitbucket.org" ;
163
168
164
169
const updateReposInAccounts = async ( installationId ?: string ) => {
165
170
setLoaded ( false ) ;
166
171
setReposInAccounts ( [ ] ) ;
167
- if ( ! provider || isBitbucket ( ) ) {
172
+ if ( ! selectedProviderHost || isBitbucket ( ) ) {
168
173
return [ ] ;
169
174
}
170
175
try {
171
- const repos = await getGitpodService ( ) . server . getProviderRepositoriesForUser ( { provider, hints : { installationId } } ) ;
176
+ const repos = await getGitpodService ( ) . server . getProviderRepositoriesForUser ( { provider : selectedProviderHost , hints : { installationId } } ) ;
172
177
setReposInAccounts ( repos ) ;
173
178
setLoaded ( true ) ;
174
179
return repos ;
@@ -183,9 +188,9 @@ export default function NewProject() {
183
188
}
184
189
185
190
const updateOrgsState = async ( ) => {
186
- if ( provider && isGitHub ( ) ) {
191
+ if ( selectedProviderHost && isGitHub ( ) ) {
187
192
try {
188
- const ghToken = await getToken ( provider ) ;
193
+ const ghToken = await getToken ( selectedProviderHost ) ;
189
194
setNoOrgs ( ghToken ?. scopes . includes ( "read:org" ) !== true ) ;
190
195
} catch {
191
196
}
@@ -221,7 +226,7 @@ export default function NewProject() {
221
226
}
222
227
223
228
const createProject = async ( teamOrUser : Team | User , repo : ProviderRepository ) => {
224
- if ( ! provider || isBitbucket ( ) ) {
229
+ if ( ! selectedProviderHost || isBitbucket ( ) ) {
225
230
return ;
226
231
}
227
232
const repoSlug = repo . path || repo . name ;
@@ -232,7 +237,7 @@ export default function NewProject() {
232
237
slug : repoSlug ,
233
238
cloneUrl : repo . cloneUrl ,
234
239
account : repo . account ,
235
- provider,
240
+ provider : selectedProviderHost ,
236
241
...( User . is ( teamOrUser ) ? { userId : teamOrUser . id } : { teamId : teamOrUser . id } ) ,
237
242
appInstallationId : String ( repo . installationId ) ,
238
243
} ) ;
@@ -295,7 +300,7 @@ export default function NewProject() {
295
300
const showSearchInput = ! ! repoSearchFilter || filteredRepos . length > 0 ;
296
301
297
302
const renderRepos = ( ) => ( < >
298
- { ! isBitbucket ( ) && < p className = "text-gray-500 text-center text-base" > Select a Git repository on < strong > { provider } </ strong > . (< a className = "gp-link cursor-pointer" onClick = { ( ) => setShowGitProviders ( true ) } > change</ a > )</ p > }
303
+ { ! isBitbucket ( ) && < p className = "text-gray-500 text-center text-base" > Select a Git repository on < strong > { selectedProviderHost } </ strong > . (< a className = "gp-link cursor-pointer" onClick = { ( ) => setShowGitProviders ( true ) } > change</ a > )</ p > }
299
304
< div className = { `mt-10 border rounded-xl border-gray-100 dark:border-gray-800 flex-col` } >
300
305
< div className = "px-8 pt-8 flex flex-col space-y-2" data-analytics = '{"label":"Identity"}' >
301
306
< ContextMenu classes = "w-full left-0 cursor-pointer" menuEntries = { getDropDownEntries ( accounts ) } >
@@ -392,15 +397,15 @@ export default function NewProject() {
392
397
setUser ( await getGitpodService ( ) . server . getLoggedInUser ( ) ) ;
393
398
}
394
399
setShowGitProviders ( false ) ;
395
- setProvider ( host ) ;
400
+ setSelectedProviderHost ( host ) ;
396
401
}
397
402
398
403
if ( ! loaded && ! isBitbucket ( ) ) {
399
404
return renderLoadingState ( ) ;
400
405
}
401
406
402
407
if ( showGitProviders || isBitbucket ( ) ) {
403
- return ( < GitProviders onHostSelected = { onGitProviderSeleted } /> ) ;
408
+ return ( < GitProviders onHostSelected = { onGitProviderSeleted } authProviders = { authProviders } /> ) ;
404
409
}
405
410
406
411
return renderRepos ( ) ;
@@ -513,18 +518,11 @@ export default function NewProject() {
513
518
}
514
519
515
520
function GitProviders ( props : {
521
+ authProviders : AuthProviderInfo [ ] ,
516
522
onHostSelected : ( host : string , updateUser ?: boolean ) => void
517
523
} ) {
518
- const [ authProviders , setAuthProviders ] = useState < AuthProviderInfo [ ] > ( [ ] ) ;
519
524
const [ errorMessage , setErrorMessage ] = useState < string | undefined > ( undefined ) ;
520
525
521
- useEffect ( ( ) => {
522
- ( async ( ) => {
523
- const providers = await getGitpodService ( ) . server . getAuthProviders ( ) ;
524
- setAuthProviders ( providers . filter ( p => [ "github.com" , "gitlab.com" ] . includes ( p . host ) ) ) ;
525
- } ) ( ) ;
526
- } , [ ] ) ;
527
-
528
526
const selectProvider = async ( ap : AuthProviderInfo ) => {
529
527
setErrorMessage ( undefined ) ;
530
528
@@ -554,14 +552,17 @@ function GitProviders(props: {
554
552
} ) ;
555
553
}
556
554
555
+ // for now we exclude bitbucket.org and GitHub Enterprise
556
+ const filteredProviders = ( ) => props . authProviders . filter ( p => p . host === "github.com" || p . authProviderType === "GitLab" ) ;
557
+
557
558
return (
558
559
< div className = "mt-8 border rounded-t-xl border-gray-100 dark:border-gray-800 flex-col" >
559
560
< div className = "p-6 p-b-0" >
560
561
< div className = "text-center text-gray-500" >
561
562
Select a Git provider first and continue with your repositories.
562
563
</ div >
563
564
< div className = "mt-6 flex flex-col space-y-3 items-center pb-8" >
564
- { authProviders . map ( ap => {
565
+ { filteredProviders ( ) . map ( ap => {
565
566
return (
566
567
< button key = { "button" + ap . host } className = "btn-login flex-none w-56 h-10 p-0 inline-flex" onClick = { ( ) => selectProvider ( ap ) } >
567
568
{ iconForAuthProvider ( ap . authProviderType ) }
0 commit comments