-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
138 lines (118 loc) · 3.55 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import React from 'react';
import ReactDOM from 'react-dom';
// Usar somente uma vez este componente
class InpText extends React.Component {
render() {
return (
<div>
<input type="text" id="inp-text-01" placeholder="Digite o nome de usuário" className="inp-text"/>
<button className="inp-text-btn" onClick={()=>{APIprocess(document.getElementById("inp-text-01").value); this.props.jsonAtl();}}>Ok</button>
</div>
);
}
}
class Cards extends React.Component {
render() {
let itens = this.props.json.map((item, index) => {
let style = {
background: item.bg
}
return (
<div className="card" key={index}>
<img src={item.avatar_url}/>
<h2>{item.name}</h2>
<p className="card-fol"><b>{item.followers}</b> followers</p>
<p className="card-position" style={style}><b>#{item.pos}</b></p>
</div>
);
});
return (
<div>
{itens}
</div>
);
}
}
class Main extends React.Component {
constructor(props) {
super(props);
this.state = {
json: GH_DATA
};
}
render() {
return (
<div>
<InpText jsonAtl={()=>{this.setState({json: GH_DATA});}}/>
<Cards json={this.state.json}/>
</div>
)
}
}
let xhttp = new XMLHttpRequest();
let GH_DATA, GH_MAIN_POS;
/// API GITHUB - Execução
function APIprocess(user) {
GH_DATA = []
GH_MAIN_POS = 0;
let GH_MAIN = user;
let tmpGH_DATA = [];
xhttp.open("GET", `https://api.github.com/users/${GH_MAIN}`, false);
xhttp.send();
let GH_USER = JSON.parse(xhttp.responseText);
let GH_FLWG = JSON.parse(xhttp.responseText).following;
if (parseInt(GH_FLWG) <= 30) {
let GH_USERS = [GH_MAIN];
// Pega os usuários das contas que são seguidas pela principal
xhttp.open("GET", `https://api.github.com/users/${GH_MAIN}/following`, false);
xhttp.send();
let GH_FLWG_DATA = JSON.parse(xhttp.responseText);
for (let i = 0; i < parseInt(GH_FLWG); i++) {
GH_USERS.push(GH_FLWG_DATA[i].login);
}
// Pega os dados das contas
for (let i = 0; i < GH_USERS.length; i++) {
xhttp.open("GET", `https://api.github.com/users/${GH_USERS[i]}`, false);
xhttp.send();
GH_DATA.push(JSON.parse(xhttp.responseText));
}
// Ordena do que tem mais seguidores para o que tem menos
GH_DATA.sort(function(a, b) {
if (a.followers > b.followers) return -1;
if (a.followers < b.followers) return 1;
return 0;
});
// Pega a posição do usuário principal
for (let i = 0; i < GH_DATA.length; i++) {
if (GH_DATA[i].login == GH_MAIN) {
GH_MAIN_POS = i;
}
}
// Inseri o usuário principal caso ele esteja em uma posição acima da 10º
for (let i = 0; i < 10; i++) {
if (GH_MAIN_POS > 9 && i == 9) {
tmpGH_DATA.push(GH_USER);
tmpGH_DATA[i].pos = GH_MAIN_POS + 1;
tmpGH_DATA[i].bg = "grey";
} else {
tmpGH_DATA.push(GH_DATA[i]);
tmpGH_DATA[i].pos = i + 1;
if (tmpGH_DATA[i].pos < 4) {
tmpGH_DATA[i].bg = "gold";
} else {
tmpGH_DATA[i].bg = "#30acff";
}
}
}
GH_DATA = tmpGH_DATA;
} else if (GH_FLWG > 29) {
alert("A quantidade de pessoas que você Segue é muito Alta. O máximo permitido é 30 pessoas.")
} else {
alert("Foi atingido o limite de requisições com a API do GitHub. Em uma Hora voltará à funcionar!");
}
}
APIprocess("GabrielDSRodrigues");
ReactDOM.render(
<Main json={GH_DATA}></Main>,
document.getElementById('react-app')
);