@@ -59,13 +59,6 @@ export default function RepoSelector(props: RepoSelectorProps) {
5959 // Version counter: if selectedOrgs changes while fetches are in-flight,
6060 // stale callbacks check this and bail out instead of writing to state.
6161 const version = ++ effectVersion ;
62- if ( orgs . length === 0 ) {
63- setOrgStates ( [ ] ) ;
64- setLoadedCount ( 0 ) ;
65- return ;
66- }
67-
68- // Initialize all orgs as loading
6962 setOrgStates (
7063 orgs . map ( ( org ) => ( {
7164 org,
@@ -77,6 +70,10 @@ export default function RepoSelector(props: RepoSelectorProps) {
7770 ) ;
7871 setLoadedCount ( 0 ) ;
7972
73+ if ( orgs . length === 0 && ! props . showUpstreamDiscovery ) {
74+ return ;
75+ }
76+
8077 const client = getClient ( ) ;
8178 if ( ! client ) {
8279 setOrgStates (
@@ -89,58 +86,60 @@ export default function RepoSelector(props: RepoSelectorProps) {
8986 } ) )
9087 ) ;
9188 setLoadedCount ( orgs . length ) ;
92- return ;
89+ if ( ! props . showUpstreamDiscovery ) return ;
9390 }
9491
9592 // Fetch org type info first, then repos incrementally
9693 void ( async ( ) => {
97- let entries : OrgEntry [ ] ;
98- if ( preloadedEntries != null ) {
99- entries = preloadedEntries ;
100- } else {
101- try {
102- entries = await fetchOrgs ( client ) ;
103- } catch {
104- entries = [ ] ;
94+ if ( orgs . length > 0 && client ) {
95+ let entries : OrgEntry [ ] ;
96+ if ( preloadedEntries != null ) {
97+ entries = preloadedEntries ;
98+ } else {
99+ try {
100+ entries = await fetchOrgs ( client ) ;
101+ } catch {
102+ entries = [ ] ;
103+ }
105104 }
106- }
107105
108- if ( version !== effectVersion ) return ;
106+ if ( version !== effectVersion ) return ;
109107
110- const typeMap = new Map < string , "org" | "user" > (
111- entries . map ( ( e ) => [ e . login , e . type ] )
112- ) ;
108+ const typeMap = new Map < string , "org" | "user" > (
109+ entries . map ( ( e ) => [ e . login , e . type ] )
110+ ) ;
113111
114- // Fetch repos for each org independently so results trickle in
115- const promises = orgs . map ( async ( org ) => {
116- const type = typeMap . get ( org ) ?? "org" ;
117- try {
118- const repos = await fetchRepos ( client , org , type ) ;
119- if ( version !== effectVersion ) return ;
120- setOrgStates ( ( prev ) =>
121- prev . map ( ( s ) =>
122- s . org === org ? { ...s , type, repos, loading : false } : s
123- )
124- ) ;
125- } catch ( err ) {
126- if ( version !== effectVersion ) return ;
127- const message =
128- err instanceof Error ? err . message : "Failed to load repositories" ;
129- setOrgStates ( ( prev ) =>
130- prev . map ( ( s ) =>
131- s . org === org
132- ? { ...s , type, repos : [ ] , loading : false , error : message }
133- : s
134- )
135- ) ;
136- } finally {
137- if ( version === effectVersion ) {
138- setLoadedCount ( ( c ) => c + 1 ) ;
112+ // Fetch repos for each org independently so results trickle in
113+ const promises = orgs . map ( async ( org ) => {
114+ const type = typeMap . get ( org ) ?? "org" ;
115+ try {
116+ const repos = await fetchRepos ( client , org , type ) ;
117+ if ( version !== effectVersion ) return ;
118+ setOrgStates ( ( prev ) =>
119+ prev . map ( ( s ) =>
120+ s . org === org ? { ...s , type, repos, loading : false } : s
121+ )
122+ ) ;
123+ } catch ( err ) {
124+ if ( version !== effectVersion ) return ;
125+ const message =
126+ err instanceof Error ? err . message : "Failed to load repositories" ;
127+ setOrgStates ( ( prev ) =>
128+ prev . map ( ( s ) =>
129+ s . org === org
130+ ? { ...s , type, repos : [ ] , loading : false , error : message }
131+ : s
132+ )
133+ ) ;
134+ } finally {
135+ if ( version === effectVersion ) {
136+ setLoadedCount ( ( c ) => c + 1 ) ;
137+ }
139138 }
140- }
141- } ) ;
139+ } ) ;
142140
143- await Promise . allSettled ( promises ) ;
141+ await Promise . allSettled ( promises ) ;
142+ }
144143
145144 // After all org repos have loaded, trigger upstream discovery if enabled
146145 if ( props . showUpstreamDiscovery && version === effectVersion ) {
0 commit comments