@@ -25,6 +25,8 @@ import { useConfiguration, useListConfigurations } from "../data/configurations/
2525import { useUserLoader } from "../hooks/use-user-loader" ;
2626import { conjunctScmProviders , getDeduplicatedScmProviders } from "../utils" ;
2727import { cn } from "@podkit/lib/cn" ;
28+ import { useOrgSuggestedRepos } from "../data/organizations/suggested-repositories-query" ;
29+ import { toRemoteURL } from "../projects/render-utils" ;
2830
2931const isPredefined = ( repo : SuggestedRepository ) : boolean => {
3032 return PREDEFINED_REPOS . some ( ( predefined ) => predefined . url === repo . url ) && ! repo . configurationId ;
@@ -35,7 +37,31 @@ const resolveIcon = (contextUrl?: string): string => {
3537 return PREDEFINED_REPOS . some ( ( repo ) => repo . url === contextUrl ) ? GitpodRepositoryTemplateSVG : RepositorySVG ;
3638} ;
3739
38- interface RepositoryFinderProps {
40+ type PredefinedRepositoryOptionProps = {
41+ repo : typeof PREDEFINED_REPOS [ number ] ;
42+ } ;
43+ const PredefinedRepositoryOption : FC < PredefinedRepositoryOptionProps > = ( { repo } ) => {
44+ const prettyUrl = toRemoteURL ( repo . url ) ;
45+
46+ return (
47+ < div className = "flex flex-col overflow-hidden" aria-label = { `Demo: ${ repo . url } ` } >
48+ < div className = "flex items-center" >
49+ < GitpodRepositoryTemplate className = "w-5 h-5 text-pk-content-secondary mr-2" />
50+ < span className = "text-sm font-semibold" > { repo . repoName } </ span >
51+ < MiddleDot className = "px-0.5 text-pk-content-secondary" />
52+ < span
53+ className = "text-sm whitespace-nowrap truncate overflow-ellipsis text-pk-content-secondary"
54+ title = { prettyUrl }
55+ >
56+ { prettyUrl }
57+ </ span >
58+ </ div >
59+ < span className = "text-xs text-pk-content-secondary ml-7" > { repo . description } </ span >
60+ </ div >
61+ ) ;
62+ } ;
63+
64+ type RepositoryFinderProps = {
3965 selectedContextURL ?: string ;
4066 selectedConfigurationId ?: string ;
4167 disabled ?: boolean ;
@@ -44,8 +70,7 @@ interface RepositoryFinderProps {
4470 onlyConfigurations ?: boolean ;
4571 showExamples ?: boolean ;
4672 onChange ?: ( repo : SuggestedRepository ) => void ;
47- }
48-
73+ } ;
4974export default function RepositoryFinder ( {
5075 selectedContextURL,
5176 selectedConfigurationId,
@@ -70,6 +95,8 @@ export default function RepositoryFinder({
7095 onlyConfigurations,
7196 } ) ;
7297
98+ const { data : orgSuggestedRepos } = useOrgSuggestedRepos ( ) ;
99+
73100 // We search for the current context URL in order to have data for the selected suggestion
74101 const selectedItemSearch = useListConfigurations ( {
75102 sortBy : "name" ,
@@ -162,29 +189,6 @@ export default function RepositoryFinder({
162189 const [ hasStartedSearching , setHasStartedSearching ] = useState ( false ) ;
163190 const [ isShowingExamples , setIsShowingExamples ] = useState ( showExamples ) ;
164191
165- type PredefinedRepositoryOptionProps = {
166- repo : typeof PREDEFINED_REPOS [ number ] ;
167- } ;
168-
169- const PredefinedRepositoryOption : FC < PredefinedRepositoryOptionProps > = ( { repo } ) => {
170- return (
171- < div className = "flex flex-col overflow-hidden" aria-label = { `Demo: ${ repo . url } ` } >
172- < div className = "flex items-center" >
173- < GitpodRepositoryTemplate className = "w-5 h-5 text-pk-content-secondary mr-2" />
174- < span className = "text-sm font-semibold" > { repo . repoName } </ span >
175- < MiddleDot className = "px-0.5 text-pk-content-secondary" />
176- < span
177- className = "text-sm whitespace-nowrap truncate overflow-ellipsis text-pk-content-secondary"
178- title = { repo . repoPath }
179- >
180- { repo . repoPath }
181- </ span >
182- </ div >
183- < span className = "text-xs text-pk-content-secondary ml-7" > { repo . description } </ span >
184- </ div >
185- ) ;
186- } ;
187-
188192 // Resolve the selected context url & configurationId id props to a suggestion entry
189193 useEffect ( ( ) => {
190194 let match = repos ?. find ( ( repo ) => {
@@ -267,13 +271,21 @@ export default function RepositoryFinder({
267271 } ;
268272
269273 const filteredPredefinedRepos = useMemo ( ( ) => {
274+ if ( orgSuggestedRepos ?. length ) {
275+ return orgSuggestedRepos . map ( ( repo ) => ( {
276+ url : repo . url ,
277+ repoName : repo . repoName ,
278+ description : "" ,
279+ } ) ) ;
280+ }
281+
270282 return PREDEFINED_REPOS . filter ( ( repo ) => {
271283 const url = new URL ( repo . url ) ;
272284 const isMatchingAuthProviderAvailable =
273285 authProviders . data ?. some ( ( provider ) => provider . host === url . host ) ?? false ;
274286 return isMatchingAuthProviderAvailable ;
275287 } ) ;
276- } , [ authProviders . data ] ) ;
288+ } , [ authProviders . data , orgSuggestedRepos ] ) ;
277289
278290 const getElements = useCallback (
279291 ( searchString : string ) : ComboboxElement [ ] => {
0 commit comments