(forkId: number)
| 378 | }; |
| 379 | |
| 380 | const loadWorkflows = async (forkId: number) => { |
| 381 | const fork = forks.find(f => f.id === forkId); |
| 382 | if (!fork || !githubToken) return; |
| 383 | |
| 384 | setLoadingWorkflows(prev => new Set(prev).add(forkId)); |
| 385 | try { |
| 386 | const [owner, repo] = fork.full_name.split('/'); |
| 387 | const githubApi = new GitHubApiService(githubToken); |
| 388 | const workflows = await githubApi.getRepositoryWorkflows(owner, repo); |
| 389 | setWorkflowsMap(prev => ({ ...prev, [forkId]: workflows })); |
| 390 | } catch (error) { |
| 391 | console.error('Failed to load workflows:', error); |
| 392 | } finally { |
| 393 | setLoadingWorkflows(prev => { |
| 394 | const newSet = new Set(prev); |
| 395 | newSet.delete(forkId); |
| 396 | return newSet; |
| 397 | }); |
| 398 | } |
| 399 | }; |
| 400 | |
| 401 | const handleSyncUpstream = async (fork: ForkRepo) => { |
| 402 | if (!githubToken) { |
no test coverage detected