zzz / tests /unit /resolver /mock_output /repo /src /PullRequestViewer.tsx
ar08's picture
Upload 1040 files
246d201 verified
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<Repo[]>([]);
const [selectedRepo, setSelectedRepo] = useState<Repo | null>(null);
const [pullRequests, setPullRequests] = useState<PullRequest[]>([]);
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 (
<div>
<h1>Pull Request Viewer</h1>
<Select
options={repos}
value={selectedRepo}
onChange={(option) => setSelectedRepo(option as Repo)}
placeholder="Select a repository"
aria-label="Select a repository"
/>
{pullRequests.length > 0 ? (
<ul>
{pullRequests.map((pr) => (
<li key={pr.html_url}>
<a href={pr.html_url} target="_blank" rel="noopener noreferrer">
{pr.title}
</a>
{' by '}
{pr.user.login}
</li>
))}
</ul>
) : (
<p>No open pull requests found.</p>
)}
</div>
);
};
export default PullRequestViewer;