import axios from "axios"; import { Fragment, useCallback, useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import AvatarCard from "./components/AvatarCard"; import ErrorPage from "./components/ErrorPage"; import ThemeChanger from "./components/ThemeChanger"; import config from "./config"; import moment from 'moment'; import { setLoading } from "./store/slices/loadingSlice"; import { setProfile } from "./store/slices/profileSlice"; import Details from "./components/Details"; import Skill from "./components/Skill"; import Experience from "./components/Experience"; import Education from "./components/Education"; import Project from "./components/Project"; import { setRepo } from "./store/slices/repoSlice"; import Blog from "./components/Blog"; import MetaTags from "./components/MetaTags"; function App() { const dispatch = useDispatch(); const theme = useSelector(state => state.theme); const [error, setError] = useState(null); const [rateLimit, setRateLimit] = useState(null); useEffect(() => { if (theme) { document.documentElement.setAttribute('data-theme', theme); } }, [theme]) const loadData = useCallback(() => { axios.get(`https://api.github.com/users/${config.github.username}`) .then(response => { let data = response.data; let profileData = { avatar: data.avatar_url, name: data.name ? data.name : '', bio: data.bio ? data.bio : '', location: data.location ? data.location : '', company: data.company ? data.company : '' } dispatch(setProfile(profileData)); }) .then(() => { let excludeRepo = ``; config.github.exclude.projects.forEach(project => { excludeRepo += `+-repo:${config.github.username}/${project}`; }); let query = `user:${config.github.username}+fork:${!config.github.exclude.forks}${excludeRepo}`; let url = `https://api.github.com/search/repositories?q=${query}&sort=${config.github.sortBy}&per_page=${config.github.limit}&type=Repositories`; axios.get(url, { headers: { 'Content-Type': 'application/vnd.github.v3+json' } }) .then(response => { let data = response.data; dispatch(setRepo(data.items)); }) .catch((error) => { handleError(error); }); }) .catch((error) => { handleError(error); }) .finally(() => { dispatch(setLoading(false)); }); }, [dispatch]) useEffect(() => { loadData(); }, [loadData]) const handleError = (error) => { console.error('Error:', error); try { setRateLimit({ remaining: error.response.headers['x-ratelimit-remaining'], reset: moment(new Date(error.response.headers['x-ratelimit-reset'] * 1000)).fromNow(), }); if (error.response.status === 403) { setError(403); } else if (error.response.status === 404) { setError(404); } else { setError(500); } } catch (error2) { setError(500); } } return (
{ error ? ( Please provide correct github username in src\config.js

) : ( error === 403 ? (

Oh no, you hit the{' '} rate limit ! Try again later{rateLimit && ` ${rateLimit.reset}`}.

) : `Something went wrong` ) } /> ) : (
{ !config.themeConfig.disableSwitch && ( ) }
{/* DO NOT REMOVE/MODIFY THE FOOTER */}
) }
); } export default App;