{"version":3,"sources":["navigation/Navbar.js","dashboard/UserLookup.js","dashboard/UserLookupLoading.js","dashboard/UserLookupError.js","dashboard/UserInfoCard.js","dashboard/CardContentLookupLoading.js","dashboard/CardContentLookupError.js","dashboard/CommitsInfoCard.js","dashboard/RepoLanguagesCard.js","dashboard/CommitsActivityCard.js","dashboard/Dashboard.js","about/About.js","App.js","serviceWorker.js","index.js"],"names":["NavbarWithRouter","withRouter","props","Navbar","className","this","location","pathname","to","React","Component","UserLookup","handleChange","bind","handleSearch","state","userName","e","setState","target","value","preventDefault","onSearch","onSubmit","type","placeholder","onChange","UserLookupLoading","icon","faSpinner","size","spin","UserLookupError","errorMessage","errorStack","UserInfoCard","src","userAvatarUrl","width","userLogin","userRepos","userFollowers","userFollowing","CardContentLookupLoading","cardContentToLookup","CardContentLookupError","CommitsInfoCard","githubPersonalAccessToken","handleFilterClick","commits","filteredCommits","commitsLookupErrorMessage","commitsLookupErrorStack","commitsLookupIsInProgress","commitsFilteredBy","lookUpCommits","axios","get","headers","Authorization","then","res","currentCommits","reposToProcess","data","length","map","repo","commits_url","replace","commitsRes","commit","committer","login","push","date","Date","commitsErr","message","stack","err","filterBy","filter","filterDate","setDate","getDate","cardContent","onClick","RepoLanguagesCard","repoLanguages","repoLanguagesLookupErrorMessage","repoLanguagesLookupErrorStack","repoLanguagesLookupIsInProgress","am4core","am4themes_animated","lookupRepoLanguages","currentRepoLanguages","languages_url","repoLanguagesRes","Object","keys","repoLanguageKey","total","repoLanguagePercentages","language","percentage","Math","round","repoLanguagesErr","displayChart","repoLanguagesChart","am4charts","innerRadius","repoLanguagesTitle","titles","create","text","fontSize","fontWeight","repoLanguagesPieSeries","series","dataFields","category","id","style","height","CommitsActivityCard","initialCommitActivities","timeSlot","commitCount","commitActivities","commitActivitiesLookupErrorMessage","commitActiviesLookupErrorStack","commitActivitiesLookupIsInProgress","commitActivitiesLookupErrorStack","currentCommitActivities","getHours","console","dir","ca","commitActivitiesChart","colors","list","commitActivitiesTitle","marginTop","marginBottom","commitActivitiesCategoryAxis","xAxes","title","commitActivitiesValueAxis","yAxes","baseValue","commitActivitiesSeries","valueY","categoryX","strokeWidth","tensionX","commitActivitiesBullet","tooltipText","bullets","cursor","Dashboard","user","userLookupErrorMessage","userLookupErrorStack","userLookupIsInProgress","name","avatarUrl","avatar_url","numberOfRepos","public_repos","numberOfFollowers","followers","numberOfFollowing","following","dashboardContent","Fragment","About","App","path","Boolean","window","hostname","match","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.0d6fb831.chunk.js","sourcesContent":["import React from 'react';\r\nimport {\r\n Link,\r\n withRouter\r\n} from \"react-router-dom\";\r\nimport './Navbar.css';\r\n\r\nconst NavbarWithRouter = withRouter(props => );\r\n\r\nclass Navbar extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default NavbarWithRouter;","import React from 'react';\r\n\r\nimport './UserLookup.css';\r\n\r\nclass UserLookup extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSearch = this.handleSearch.bind(this);\r\n\r\n this.state = {\r\n userName: ''\r\n };\r\n }\r\n\r\n handleChange(e) {\r\n this.setState({\r\n userName: e.target.value\r\n });\r\n }\r\n\r\n handleSearch(e) {\r\n e.preventDefault();\r\n\r\n this.props.onSearch(this.state.userName);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default UserLookup;","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport './UserLookupLoading.css'\r\n\r\nclass UserLookupLoading extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n

Retrieving user information...

\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default UserLookupLoading;","import React from 'react';\r\n\r\nimport './UserLookupError.css';\r\n\r\nclass UserLookupError extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n

An error occurred while retrieving user information:

\r\n

\r\n {this.props.errorMessage}\r\n

\r\n
\r\n {this.props.errorStack}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default UserLookupError;","import React from 'react';\r\n\r\nclass UserInfoCard extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n
\r\n

Name: {this.props.userName}

\r\n

Login: {this.props.userLogin}

\r\n

Repos: {this.props.userRepos}

\r\n

Followers: {this.props.userFollowers}

\r\n

Following: {this.props.userFollowing}

\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default UserInfoCard;","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport './CardContentLookupLoading.css'\r\n\r\nclass CardContentLookupLoading extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n

Retrieving {this.props.cardContentToLookup}...

\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default CardContentLookupLoading;","import React from 'react';\r\n\r\nimport './CardContentLookupError.css';\r\n\r\nclass CardContentLookupError extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n

An error occurred while {this.props.cardContentToLookup}:

\r\n

\r\n {this.props.errorMessage}\r\n

\r\n
\r\n {this.props.errorStack}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default CardContentLookupError;","import React from 'react';\r\nimport axios from 'axios';\r\n\r\nimport CardContentLookupLoading from './CardContentLookupLoading';\r\nimport CardContentLookupError from './CardContentLookupError';\r\n\r\nimport './CommitsInfoCard.css';\r\n\r\nclass CommitsInfoCard extends React.Component {\r\n githubPersonalAccessToken = '0d7a6ac0c75fa178712a5e4cd8d7667695cdb7f3';\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleFilterClick = this.handleFilterClick.bind(this);\r\n\r\n this.state = {\r\n commits: [],\r\n filteredCommits: [],\r\n commitsLookupErrorMessage: null,\r\n commitsLookupErrorStack: null,\r\n commitsLookupIsInProgress: false,\r\n commitsFilteredBy: 'all-time'\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.lookUpCommits(this.props.userLogin);\r\n }\r\n\r\n lookUpCommits(userLogin) {\r\n this.setState({\r\n commits: [],\r\n filteredCommits: [],\r\n commitsLookupErrorMessage: null,\r\n commitsLookupErrorStack: null,\r\n commitsLookupIsInProgress: true,\r\n commitsFilteredBy: 'all-time'\r\n });\r\n\r\n axios.get(\r\n `https://api.github.com/users/${userLogin}/repos`, {\r\n headers: {\r\n Authorization: 'Bearer ' + this.githubPersonalAccessToken\r\n }\r\n })\r\n .then(\r\n res => {\r\n let currentCommits = [];\r\n let reposToProcess = res.data.length;\r\n\r\n res.data.map(repo => {\r\n if (this.state.commitsLookupIsInProgress) {\r\n axios.get(\r\n repo.commits_url.replace('{/sha}', ''), {\r\n headers: {\r\n Authorization: 'Bearer ' + this.githubPersonalAccessToken\r\n }\r\n }\r\n )\r\n .then(\r\n commitsRes => {\r\n commitsRes.data.map(commit => {\r\n if (commit && commit.committer && commit.committer.login === this.props.userLogin) {\r\n currentCommits.push({\r\n committer: commit.committer.login,\r\n date: new Date(commit.commit.committer.date)\r\n });\r\n }\r\n });\r\n\r\n reposToProcess--;\r\n\r\n if (reposToProcess === 0) {\r\n this.setState({\r\n commits: currentCommits,\r\n filteredCommits: currentCommits,\r\n commitsLookupIsInProgress: false\r\n });\r\n }\r\n },\r\n commitsErr => {\r\n this.setState({\r\n commitsLookupErrorMessage: commitsErr.message,\r\n commitsLookupErrorStack: commitsErr.stack,\r\n commitsLookupIsInProgress: false\r\n });\r\n }\r\n )\r\n }\r\n });\r\n },\r\n err => {\r\n this.setState({\r\n commitsLookupErrorMessage: err.message,\r\n commitsLookupErrorStack: err.stack,\r\n commitsLookupIsInProgress: false\r\n });\r\n });\r\n }\r\n\r\n handleFilterClick(e, filterBy) {\r\n this.setState({\r\n commitsFilteredBy: filterBy\r\n });\r\n\r\n switch(filterBy) {\r\n case 'past-day':\r\n this.setState({\r\n filteredCommits: this.state.commits.filter(commit => {\r\n const filterDate = new Date();\r\n filterDate.setDate(filterDate.getDate() - 1);\r\n\r\n return commit.date >= filterDate;\r\n })\r\n });\r\n break;\r\n\r\n case 'past-week':\r\n this.setState({\r\n filteredCommits: this.state.commits.filter(commit => {\r\n const filterDate = new Date();\r\n filterDate.setDate(filterDate.getDate() - 7);\r\n\r\n return commit.date >= filterDate;\r\n })\r\n });\r\n break;\r\n\r\n case 'past-month':\r\n this.setState({\r\n filteredCommits: this.state.commits.filter(commit => {\r\n const filterDate = new Date();\r\n filterDate.setDate(filterDate.getDate() - 31);\r\n\r\n return commit.date >= filterDate;\r\n })\r\n });\r\n break;\r\n\r\n case 'past-year':\r\n this.setState({\r\n filteredCommits: this.state.commits.filter(commit => {\r\n const filterDate = new Date();\r\n filterDate.setDate(filterDate.getDate() - 365);\r\n\r\n return commit.date >= filterDate;\r\n })\r\n });\r\n break;\r\n\r\n case 'all-time':\r\n default:\r\n this.setState({\r\n filteredCommits: this.state.commits\r\n });\r\n break;\r\n }\r\n }\r\n\r\n render() {\r\n const commitsLookupIsInProgress = this.state.commitsLookupIsInProgress;\r\n\r\n const commits = this.state.commits;\r\n\r\n const commitsLookupErrorMessage = this.state.commitsLookupErrorMessage;\r\n const commitsLookupErrorStack = this.state.commitsLookupErrorStack;\r\n\r\n let cardContent;\r\n\r\n const cardContentToLookup = 'user commit information.';\r\n\r\n if (commitsLookupIsInProgress) {\r\n cardContent = ;\r\n } else {\r\n if (commitsLookupErrorMessage && commitsLookupErrorMessage.length > 0) {\r\n cardContent = (\r\n \r\n );\r\n } else if (commits && commits.length > 0) {\r\n cardContent = (\r\n
\r\n

{this.state.filteredCommits.length}

\r\n

commits

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n } else {\r\n cardContent =

User has no public commit information.

;\r\n }\r\n }\r\n\r\n return (\r\n \r\n
\r\n {cardContent}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default CommitsInfoCard;","import React from 'react';\r\nimport axios from 'axios';\r\nimport * as am4core from '@amcharts/amcharts4/core';\r\nimport * as am4charts from '@amcharts/amcharts4/charts';\r\nimport am4themes_animated from '@amcharts/amcharts4/themes/animated';\r\n\r\nimport CardContentLookupLoading from './CardContentLookupLoading';\r\nimport CardContentLookupError from './CardContentLookupError';\r\n\r\nimport './RepoLanguagesCard.css';\r\n\r\nclass RepoLanguagesCard extends React.Component {\r\n githubPersonalAccessToken = '0d7a6ac0c75fa178712a5e4cd8d7667695cdb7f3';\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n repoLanguages: [],\r\n repoLanguagesLookupErrorMessage: null,\r\n repoLanguagesLookupErrorStack: null,\r\n repoLanguagesLookupIsInProgress: false\r\n };\r\n\r\n am4core.useTheme(am4themes_animated);\r\n }\r\n\r\n componentDidMount() {\r\n this.lookupRepoLanguages(this.props.userLogin);\r\n }\r\n\r\n lookupRepoLanguages(userLogin) {\r\n this.setState({\r\n repoLanguages: [],\r\n repoLanguagesLookupErrorMessage: null,\r\n repoLanguagesLookupErrorStack: null,\r\n repoLanguagesLookupIsInProgress: true\r\n });\r\n\r\n axios.get(\r\n `https://api.github.com/users/${userLogin}/repos`, {\r\n headers: {\r\n Authorization: 'Bearer ' + this.githubPersonalAccessToken\r\n }\r\n })\r\n .then(\r\n res => {\r\n let currentRepoLanguages = {};\r\n let reposToProcess = res.data.length;\r\n\r\n res.data.map(repo => {\r\n if (this.state.repoLanguagesLookupIsInProgress) {\r\n axios.get(\r\n repo.languages_url, {\r\n headers: {\r\n Authorization: 'Bearer ' + this.githubPersonalAccessToken\r\n }\r\n }\r\n )\r\n .then(\r\n repoLanguagesRes => {\r\n const repoLanguages = repoLanguagesRes.data;\r\n\r\n Object.keys(repoLanguages).map(repoLanguageKey => {\r\n if (currentRepoLanguages[repoLanguageKey]) {\r\n currentRepoLanguages[repoLanguageKey] +=\r\n repoLanguages[repoLanguageKey];\r\n } else {\r\n currentRepoLanguages[repoLanguageKey] =\r\n repoLanguages[repoLanguageKey];\r\n }\r\n });\r\n\r\n reposToProcess--;\r\n\r\n if (reposToProcess === 0) {\r\n let total = 0;\r\n\r\n Object.keys(currentRepoLanguages).map(repoLanguageKey => {\r\n total += currentRepoLanguages[repoLanguageKey];\r\n });\r\n\r\n let repoLanguagePercentages = [];\r\n\r\n Object.keys(currentRepoLanguages).map(repoLanguageKey => {\r\n repoLanguagePercentages.push({\r\n language: repoLanguageKey,\r\n percentage: (Math.round((currentRepoLanguages[repoLanguageKey] / total) * 10000) / 100)\r\n });\r\n });\r\n\r\n this.setState({\r\n repoLanguages: repoLanguagePercentages,\r\n repoLanguagesLookupIsInProgress: false\r\n });\r\n }\r\n },\r\n repoLanguagesErr => {\r\n this.setState({\r\n repoLanguagesLookupErrorMessage: repoLanguagesErr.message,\r\n repoLanguagesLookupErrorStack: repoLanguagesErr.stack,\r\n repoLanguagesLookupIsInProgress: false\r\n });\r\n }\r\n )\r\n }\r\n });\r\n },\r\n err => {\r\n this.setState({\r\n repoLanguagesLookupErrorMessage: err.message,\r\n repoLanguagesLookupErrorStack: err.stack,\r\n repoLanguagesLookupIsInProgress: false\r\n });\r\n });\r\n }\r\n\r\n render() {\r\n const repoLanguagesLookupIsInProgress = this.state.repoLanguagesLookupIsInProgress;\r\n\r\n const repoLanguages = this.state.repoLanguages;\r\n\r\n const repoLanguagesLookupErrorMessage = this.state.repoLanguagesLookupErrorMessage;\r\n const repoLanguagesLookupErrorStack = this.state.repoLanguagesLookupErrorStack;\r\n\r\n let cardContent;\r\n\r\n const cardContentToLookup = 'user repo language information.';\r\n\r\n let displayChart = false;\r\n\r\n if (repoLanguagesLookupIsInProgress) {\r\n cardContent = ;\r\n } else {\r\n if (repoLanguagesLookupErrorMessage && repoLanguagesLookupErrorMessage.length > 0) {\r\n cardContent = (\r\n \r\n );\r\n } else if (repoLanguages && repoLanguages.length > 0) {\r\n displayChart = true;\r\n\r\n let repoLanguagesChart = am4core.create('repo-languages-chart', am4charts.PieChart);\r\n repoLanguagesChart.data = repoLanguages;\r\n repoLanguagesChart.innerRadius = am4core.percent(60);\r\n\r\n let repoLanguagesTitle = repoLanguagesChart.titles.create();\r\n repoLanguagesTitle.text = \"Languages Used\";\r\n repoLanguagesTitle.fontSize = 24;\r\n repoLanguagesTitle.fontWeight = 'bold';\r\n\r\n let repoLanguagesPieSeries = repoLanguagesChart.series.push(new am4charts.PieSeries());\r\n repoLanguagesPieSeries.dataFields.value = \"percentage\";\r\n repoLanguagesPieSeries.dataFields.category = \"language\";\r\n\r\n cardContent = null;\r\n } else {\r\n cardContent =

User has no public repo language information.

;\r\n }\r\n }\r\n\r\n return (\r\n \r\n
\r\n {cardContent}\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default RepoLanguagesCard;","import React from 'react';\r\nimport axios from 'axios';\r\nimport * as am4core from '@amcharts/amcharts4/core';\r\nimport * as am4charts from '@amcharts/amcharts4/charts';\r\nimport am4themes_animated from '@amcharts/amcharts4/themes/animated';\r\n\r\nimport CardContentLookupLoading from './CardContentLookupLoading';\r\nimport CardContentLookupError from './CardContentLookupError';\r\n\r\nimport './CommitsActivityCard.css';\r\n\r\nclass CommitsActivityCard extends React.Component {\r\n githubPersonalAccessToken = '0d7a6ac0c75fa178712a5e4cd8d7667695cdb7f3';\r\n\r\n initialCommitActivities = [{\r\n timeSlot: '12:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '1:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '2:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '3:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '4:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '5:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '6:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '7:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '8:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '9:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '10:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '11:00AM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '12:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '1:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '2:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '3:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '4:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '5:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '6:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '7:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '8:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '9:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '10:00PM',\r\n commitCount: 0\r\n },{\r\n timeSlot: '11:00PM',\r\n commitCount: 0\r\n }];\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n commitActivities: this.initialCommitActivities,\r\n commitActivitiesLookupErrorMessage: null,\r\n commitActiviesLookupErrorStack: null,\r\n commitActivitiesLookupIsInProgress: false\r\n };\r\n\r\n am4core.useTheme(am4themes_animated);\r\n }\r\n\r\n componentDidMount() {\r\n this.lookUpCommits(this.props.userLogin);\r\n }\r\n\r\n lookUpCommits(userLogin) {\r\n this.setState({\r\n commits: this.initialCommitActivities,\r\n commitActivitiesLookupErrorMessage: null,\r\n commitActivitiesLookupErrorStack: null,\r\n commitActivitiesLookupIsInProgress: true\r\n });\r\n\r\n axios.get(\r\n `https://api.github.com/users/${userLogin}/repos`, {\r\n headers: {\r\n Authorization: 'Bearer ' + this.githubPersonalAccessToken\r\n }\r\n })\r\n .then(\r\n res => {\r\n let currentCommits = [];\r\n let reposToProcess = res.data.length;\r\n\r\n res.data.map(repo => {\r\n if (this.state.commitActivitiesLookupIsInProgress) {\r\n axios.get(\r\n repo.commits_url.replace('{/sha}', ''), {\r\n headers: {\r\n Authorization: 'Bearer ' + this.githubPersonalAccessToken\r\n }\r\n }\r\n )\r\n .then(\r\n commitsRes => {\r\n commitsRes.data.map(commit => {\r\n if (commit && commit.committer && commit.committer.login === this.props.userLogin) {\r\n currentCommits.push({\r\n committer: commit.committer.login,\r\n date: new Date(commit.commit.committer.date)\r\n });\r\n }\r\n });\r\n\r\n reposToProcess--;\r\n\r\n if (reposToProcess === 0) {\r\n let currentCommitActivities = this.initialCommitActivities;\r\n\r\n currentCommits.map(commit => {\r\n currentCommitActivities[commit.date.getHours()].commitCount++;\r\n });\r\n\r\n console.dir(currentCommitActivities);\r\n\r\n this.setState({\r\n commitActivities: currentCommitActivities,\r\n commitActivitiesLookupIsInProgress: false\r\n });\r\n }\r\n },\r\n commitsErr => {\r\n this.setState({\r\n commitActivitiesLookupErrorMessage: commitsErr.message,\r\n commitActivitiesLookupErrorStack: commitsErr.stack,\r\n commitActivitiesLookupIsInProgress: false\r\n });\r\n }\r\n )\r\n }\r\n });\r\n },\r\n err => {\r\n this.setState({\r\n commitActivitiesLookupErrorMessage: err.message,\r\n commitActivitiesLookupErrorStack: err.stack,\r\n commitActivitiesLookupIsInProgress: false\r\n });\r\n });\r\n }\r\n\r\n render() {\r\n const commitActivitiesLookupIsInProgress = this.state.commitActivitiesLookupIsInProgress;\r\n\r\n const commitActivities = this.state.commitActivities;\r\n\r\n const commitActivitiesLookupErrorMessage = this.state.commitActivitiesLookupErrorMessage;\r\n const commitActivitiesLookupErrorStack = this.state.commitActivitiesLookupErrorStack;\r\n\r\n let cardContent;\r\n\r\n const cardContentToLookup = 'user commit activity information.';\r\n\r\n let displayChart = false;\r\n\r\n if (commitActivitiesLookupIsInProgress) {\r\n cardContent = ;\r\n } else {\r\n if (commitActivitiesLookupErrorMessage && commitActivitiesLookupErrorMessage.length > 0) {\r\n cardContent = (\r\n \r\n );\r\n } else if (commitActivities && commitActivities.length > 0 && commitActivities.filter(ca => {\r\n return ca.commitCount > 0;\r\n }).length > 0\r\n ) {\r\n displayChart = true;\r\n\r\n let commitActivitiesChart = am4core.create('commit-activities-chart', am4charts.XYChart);\r\n commitActivitiesChart.data = commitActivities;\r\n commitActivitiesChart.colors.list = [\r\n am4core.color('#504caf')\r\n ];\r\n\r\n let commitActivitiesTitle = commitActivitiesChart.titles.create();\r\n commitActivitiesTitle.text = \"Most Active Times\";\r\n commitActivitiesTitle.fontSize = 24;\r\n commitActivitiesTitle.fontWeight = 'bold';\r\n commitActivitiesTitle.marginTop = -20;\r\n commitActivitiesTitle.marginBottom = 24;\r\n\r\n let commitActivitiesCategoryAxis = commitActivitiesChart.xAxes.push(new am4charts.CategoryAxis());\r\n commitActivitiesCategoryAxis.dataFields.category = \"timeSlot\";\r\n commitActivitiesCategoryAxis.title.text = \"Time of Day\";\r\n\r\n let commitActivitiesValueAxis = commitActivitiesChart.yAxes.push(new am4charts.ValueAxis());\r\n commitActivitiesValueAxis.baseValue = 0;\r\n commitActivitiesValueAxis.title.text = \"Number of Commits\"; \r\n\r\n let commitActivitiesSeries = commitActivitiesChart.series.push(new am4charts.LineSeries());\r\n commitActivitiesSeries.dataFields.valueY = \"commitCount\";\r\n commitActivitiesSeries.dataFields.categoryX = \"timeSlot\";\r\n commitActivitiesSeries.strokeWidth = 2;\r\n commitActivitiesSeries.tensionX = 0.77;\r\n\r\n let commitActivitiesBullet = new am4charts.CircleBullet();\r\n commitActivitiesBullet.tooltipText = \"{categoryX}: {valueY}\";\r\n commitActivitiesSeries.bullets.push(commitActivitiesBullet);\r\n \r\n commitActivitiesChart.cursor = new am4charts.XYCursor();\r\n \r\n cardContent = null;\r\n } else {\r\n cardContent =

User has no public commit information.

;\r\n }\r\n }\r\n\r\n return (\r\n \r\n
\r\n {cardContent}\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default CommitsActivityCard;","import React from 'react';\r\nimport axios from 'axios';\r\n\r\nimport UserLookup from './UserLookup';\r\nimport UserLookupLoading from './UserLookupLoading';\r\nimport UserLookupError from './UserLookupError';\r\nimport UserInfoCard from './UserInfoCard';\r\nimport CommitsInfoCard from './CommitsInfoCard';\r\nimport RepoLanguagesCard from './RepoLanguagesCard';\r\nimport CommitsActivityCard from './CommitsActivityCard';\r\n\r\nimport './Dashboard.css';\r\n\r\nclass Dashboard extends React.Component {\r\n githubPersonalAccessToken = '0d7a6ac0c75fa178712a5e4cd8d7667695cdb7f3';\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleSearch = this.handleSearch.bind(this);\r\n\r\n this.state = {\r\n userName: null,\r\n user: null,\r\n userLookupErrorMessage: null,\r\n userLookupErrorStack: null,\r\n userLookupIsInProgress: false\r\n };\r\n }\r\n\r\n handleSearch(userLogin) {\r\n this.setState({\r\n user: null,\r\n userLookupErrorMessage: null,\r\n userLookupErrorStack: null,\r\n userLookupIsInProgress: true\r\n });\r\n\r\n axios.get(\r\n `https://api.github.com/users/${userLogin}`, {\r\n headers: {\r\n Authorization: 'Bearer ' + this.githubPersonalAccessToken\r\n }\r\n })\r\n .then(\r\n res => {\r\n this.setState({\r\n user: {\r\n id: res.data.id,\r\n login: res.data.login,\r\n name: res.data.name,\r\n avatarUrl: res.data.avatar_url,\r\n numberOfRepos: res.data.public_repos,\r\n numberOfFollowers: res.data.followers,\r\n numberOfFollowing: res.data.following\r\n },\r\n userLookupIsInProgress: false\r\n });\r\n },\r\n err => {\r\n this.setState({\r\n userLookupErrorMessage: err.message,\r\n userLookupErrorStack: err.stack,\r\n userLookupIsInProgress: false\r\n })\r\n });\r\n }\r\n\r\n render() {\r\n const userLookupIsInProgress = this.state.userLookupIsInProgress;\r\n\r\n const user = this.state.user;\r\n\r\n const userLookupErrorMessage = this.state.userLookupErrorMessage;\r\n const userLookupErrorStack = this.state.userLookupErrorStack;\r\n\r\n let dashboardContent;\r\n\r\n if (userLookupIsInProgress) {\r\n dashboardContent = ;\r\n } else {\r\n if (userLookupErrorMessage && userLookupErrorMessage.length > 0) {\r\n dashboardContent = \r\n ;\r\n } else if (user) {\r\n dashboardContent = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n dashboardContent = null;\r\n }\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n {dashboardContent}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Dashboard;","import React from 'react';\r\n\r\nclass About extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n

The GitHub Dashboard retrieves information about a GitHub user and displays it, along with other insights about the user and their GitHub activity that GitHub itself does not necessarily provide.

\r\n

The Dashboard is written in React.js v16.12.0, and uses the GitHub API to retrieve information.

\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default About;","import React from 'react';\r\nimport {\r\n BrowserRouter as Router,\r\n Switch,\r\n Route\r\n} from 'react-router-dom';\r\n\r\nimport NavbarWithRouter from './navigation/Navbar';\r\nimport Dashboard from './dashboard/Dashboard';\r\nimport About from './about/About';\r\n\r\nimport './App.css';\r\n\r\nfunction App() {\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}