1+ const APIURL = "https://api.github.com/users/" ;
2+ const form = document . getElementById ( "form" ) ;
3+ const main = document . getElementById ( "main" ) ;
4+ const search = document . getElementById ( "search" ) ;
5+
6+ const createUserCard = ( user ) => {
7+ const cardHTML = `
8+ <div class="card">
9+ <div>
10+ <img
11+ src="${ user . avatar_url } "
12+ alt="${ user . name } "
13+ class="avatar"
14+ />
15+ </div>
16+ <div class="user-info">
17+ <h2>${ user . name } </h2>
18+ <p>
19+ ${ user . bio }
20+ </p>
21+ <ul>
22+ <li>${ user . followers } <strong>Followers</strong></li>
23+ <li>${ user . following } <strong>Following</strong></li>
24+ <li>${ user . public_repos } <strong>Repos</strong></li>
25+ </ul>
26+ <div id="repos">
27+ </div>
28+ </div>
29+ </div>
30+ ` ;
31+ main . innerHTML = cardHTML ;
32+ } ;
33+
34+ const createErrorCard = ( message ) => {
35+ const cardHTML = `
36+ <div class="card"><h1>${ message } </h1></div>
37+ ` ;
38+ main . innerHTML = cardHTML ;
39+ } ;
40+
41+ const addReposToCard = ( repos ) => {
42+ const reposElement = document . getElementById ( "repos" ) ;
43+ repos . slice ( 0 , 5 ) . forEach ( ( repo ) => {
44+ const repoElement = document . createElement ( "a" ) ;
45+ repoElement . classList . add ( "repo" ) ;
46+ repoElement . href = repo . html_url ;
47+ repoElement . target = "_blank" ;
48+ repoElement . innerText = repo . name ;
49+ reposElement . appendChild ( repoElement ) ;
50+ } ) ;
51+ } ;
52+
53+ const getUser = async ( username ) => {
54+ try {
55+ const { data } = await axios ( APIURL + username ) ;
56+ createUserCard ( data ) ;
57+ getRepos ( username ) ;
58+ } catch ( error ) {
59+ if ( error . response . status == 404 )
60+ createErrorCard ( "No profile with this username" ) ;
61+ }
62+ } ;
63+
64+ const getRepos = async ( username ) => {
65+ try {
66+ const { data } = await axios ( APIURL + username + "/repos?sort=created" ) ;
67+ addReposToCard ( data ) ;
68+ } catch ( error ) {
69+ createErrorCard ( "Problem fetching repos" ) ;
70+ }
71+ } ;
72+
73+ form . addEventListener ( "submit" , ( e ) => {
74+ e . preventDefault ( ) ;
75+ const user = search . value ;
76+ if ( user ) {
77+ getUser ( user ) ;
78+ search . value = "" ;
79+ }
80+ } ) ;
0 commit comments