aboutsummaryrefslogtreecommitdiff
path: root/src/components/GitHubProjects.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/GitHubProjects.jsx')
-rw-r--r--src/components/GitHubProjects.jsx62
1 files changed, 34 insertions, 28 deletions
diff --git a/src/components/GitHubProjects.jsx b/src/components/GitHubProjects.jsx
index b54dc9f..c4e805b 100644
--- a/src/components/GitHubProjects.jsx
+++ b/src/components/GitHubProjects.jsx
@@ -7,39 +7,45 @@ const GitHubProjects = ({ username, isOrganization }) => {
const [currentPage, setCurrentPage] = useState(1);
const reposPerPage = 10;
- useEffect(() => {
- const fetchRepos = async () => {
- const baseUrl = 'https://api.github.com';
- const url = isOrganization
- ? `${baseUrl}/orgs/${username}/repos`
- : `${baseUrl}/users/${username}/repos`;
-
- try {
- const response = await fetch(url);
- const data = await response.json();
-
- if (response.ok) {
- if (Array.isArray(data)) {
- setRepos(data.filter(repo => !repo.fork));
- } else {
- console.error('Unexpected data format:', data);
- setError('Unexpected data format');
- setRepos([]);
+ const fetchRepos = async (page = 1, allRepos = []) => {
+ const baseUrl = 'https://api.github.com';
+ const url = isOrganization
+ ? `${baseUrl}/orgs/${username}/repos?page=${page}&per_page=100`
+ : `${baseUrl}/users/${username}/repos?page=${page}&per_page=100`;
+
+ try {
+ const response = await fetch(url);
+ const data = await response.json();
+
+ if (response.ok) {
+ if (Array.isArray(data)) {
+ allRepos = allRepos.concat(data.filter(repo => !repo.fork));
+ // If the data length is 100, there might be more repositories to fetch
+ if (data.length === 100) {
+ return fetchRepos(page + 1, allRepos);
}
} else {
- console.error('API error:', data);
- setError(data.message);
+ console.error('Unexpected data format:', data);
+ setError('Unexpected data format');
setRepos([]);
}
- } catch (err) {
- console.error('Failed to fetch projects:', err);
- setError(err.message);
+ } else {
+ console.error('API error:', data);
+ setError(data.message);
setRepos([]);
}
- };
-
- fetchRepos();
- }, [username, isOrganization]); // Don't forget to include dependencies
+ } catch (err) {
+ console.error('Failed to fetch projects:', err);
+ setError(err.message);
+ setRepos([]);
+ }
+
+ return allRepos;
+ };
+
+ useEffect(() => {
+ fetchRepos().then(setRepos);
+ }, [username, isOrganization]);
// Get current repos
const indexOfLastRepo = currentPage * reposPerPage;
@@ -72,4 +78,4 @@ const GitHubProjects = ({ username, isOrganization }) => {
);
};
-export default GitHubProjects; \ No newline at end of file
+export default GitHubProjects;