diff --git a/src/components/charts/GithubContributionChart.js b/src/components/charts/GithubContributionChart.js index 418a3f7..4cd818b 100644 --- a/src/components/charts/GithubContributionChart.js +++ b/src/components/charts/GithubContributionChart.js @@ -1,12 +1,12 @@ import React, { useState, useEffect, useCallback } from 'react'; -import { getAllCommits } from '@/lib/github'; - +import { useFetchGithubCommits } from '@/hooks/githubQueries/useFetchGithubCommits'; +import { Tooltip } from 'primereact/tooltip'; const GithubContributionChart = ({ username }) => { const [contributionData, setContributionData] = useState({}); - const [loading, setLoading] = useState(true); - const [timeTaken, setTimeTaken] = useState(null); const [totalCommits, setTotalCommits] = useState(0); + const { data: commits, isLoading, isFetching } = useFetchGithubCommits(username); + const getColor = useCallback((count) => { if (count === 0) return 'bg-gray-100'; if (count < 5) return 'bg-green-300'; @@ -30,42 +30,35 @@ const GithubContributionChart = ({ username }) => { }, [contributionData]); useEffect(() => { - const fetchData = async () => { - setLoading(true); - const startTime = Date.now(); - const sixMonthsAgo = new Date(); - sixMonthsAgo.setMonth(sixMonthsAgo.getMonth() - 6); - + if (commits) { let commitCount = 0; - for await (const commit of getAllCommits(username, sixMonthsAgo)) { + const newContributionData = {}; + commits.forEach(commit => { const date = commit.commit.author.date.split('T')[0]; - setContributionData(prev => { - const newData = { ...prev }; - newData[date] = (newData[date] || 0) + 1; - return newData; - }); + newContributionData[date] = (newContributionData[date] || 0) + 1; commitCount++; - setTotalCommits(commitCount); - } + }); + + setContributionData(newContributionData); + setTotalCommits(commitCount); - const endTime = Date.now(); - setTimeTaken(((endTime - startTime) / 1000).toFixed(2)); - setLoading(false); console.log(`Total commits fetched: ${commitCount}`); - }; - - fetchData(); - }, [username]); + } + }, [commits]); const calendar = generateCalendar(); return ( -
Loading contribution data... ({totalCommits} commits fetched)
} - {timeTaken &&Time taken to fetch data: {timeTaken} seconds
} - {!loading &&Total commits: {totalCommits}
} +Loading contribution data... ({totalCommits} commits fetched)
} + {!isLoading && !isFetching && +Total commits: {totalCommits}
+ +