import React, { useState, useEffect } from 'react'; import axios from 'axios'; import { Octokit } from '@octokit/rest'; import Select from 'react-select'; const octokit = new Octokit({ auth: import.meta.env.VITE_GITHUB_TOKEN }); interface PullRequest { title: string; html_url: string; user: { login: string; }; } interface Repo { value: string; label: string; } const PullRequestViewer: React.FC = () => { const [repos, setRepos] = useState([]); const [selectedRepo, setSelectedRepo] = useState(null); const [pullRequests, setPullRequests] = useState([]); useEffect(() => { const fetchRepos = async () => { try { const response = await octokit.repos.listForOrg({ org: 'OpenDevin', type: 'all', }); const repoOptions = response.data.map(repo => ({ value: repo.name, label: repo.name, })); setRepos(repoOptions); } catch (error) { console.error('Error fetching repos:', error); } }; fetchRepos(); }, []); useEffect(() => { const fetchPullRequests = async () => { if (selectedRepo) { try { let allPullRequests: PullRequest[] = []; let page = 1; let hasNextPage = true; while (hasNextPage) { const response = await octokit.pulls.list({ owner: 'OpenDevin', repo: selectedRepo.value, state: 'open', per_page: 100, page: page, }); allPullRequests = [...allPullRequests, ...response.data]; if (response.data.length < 100) { hasNextPage = false; } else { page++; } } setPullRequests(allPullRequests); } catch (error) { console.error('Error fetching pull requests:', error); } } }; fetchPullRequests(); }, [selectedRepo]); return (

Pull Request Viewer