Skip to content

Commit c32349b

Browse files
committed
Fetch repos from GitHub and display them on button click.
1 parent cae8448 commit c32349b

3 files changed

Lines changed: 54 additions & 14 deletions

File tree

Week8/solution/public/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ <h1>Async fetch</h1>
1010
<div>
1111
<button id="button" type="button">Click me!</button>
1212
</div>
13-
<div id="result"></div>
13+
<ul id="results"></ul>
1414
</body>
1515
<script src="./scripts/app.js"></script>
1616
</html>

Week8/solution/sources/app.js

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use strict";
22

3-
function buttonClicked() {
3+
function buttonClicked() { // eslint-disable-line no-unused-vars
44
console.log("You clicked me!"); // eslint-disable-line no-console
55
}
66

@@ -11,25 +11,27 @@ function createQueryString(params) {
1111
}, "") : "";
1212
}
1313

14-
function makeGetRequest(url, params, callback) { // eslint-disable-line no-unused-vars
14+
function makeGetRequest(url, params, callback) {
1515
const request = new XMLHttpRequest();
1616
request.onreadystatechange = () => {
1717
const response = {};
18-
if (request.readyState === 4 && request.status === 200) {
19-
response.responseText = request.responseText;
20-
} else {
21-
response.err = {
22-
readyState: request.readyState,
23-
status: request.status,
24-
message: request.statusText
25-
};
18+
if (request.readyState === XMLHttpRequest.DONE) {
19+
if (request.status === 200) {
20+
response.data = JSON.parse(request.responseText); // eslint-disable-line no-undef
21+
} else {
22+
response.err = {
23+
status: request.status,
24+
message: request.statusText
25+
};
26+
}
27+
callback(response);
2628
}
27-
callback(response);
2829
};
2930
const queryString = createQueryString(params);
3031
request.open("GET", url + queryString, true);
3132
request.send();
3233
}
3334

3435
module.exports.buttonClicked = buttonClicked; // eslint-disable-line no-undef
35-
module.exports.createQueryString = createQueryString; // eslint-disable-line no-undef
36+
module.exports.createQueryString = createQueryString; // eslint-disable-line no-undef
37+
module.exports.makeGetRequest = makeGetRequest; // eslint-disable-line no-undef

Week8/solution/sources/main.js

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,42 @@
11
"use strict";
22
const app = require("./app"); // eslint-disable-line no-undef
33
const buttonElem = document.getElementById("button");
4-
buttonElem.addEventListener("click", app.buttonClicked);
4+
const listElem = document.getElementById("results");
5+
6+
function listGitHubRepos() {
7+
const organization = "HackYourFuture";
8+
const url = `https://api.github.com/orgs/${organization}/repos`;
9+
const params = [
10+
{ name: "type", value: "public" }
11+
];
12+
app.makeGetRequest(url, params, handleResponse);
13+
}
14+
15+
function handleResponse(response) {
16+
let results = [];
17+
if (response.err) {
18+
console.log("Request failed: " + response.err); // eslint-disable-line no-console
19+
} else {
20+
results = response.data.map(function (entry) {
21+
return { name: entry.name, description: entry.description };
22+
});
23+
}
24+
updateList(results);
25+
}
26+
27+
function updateList(results) {
28+
clearList();
29+
results.forEach(element => {
30+
let item = document.createElement("li"); // eslint-disable-line no-undef
31+
item.innerText = `${element.name}${element.description ? " - " + element.description : ""}`;
32+
listElem.appendChild(item);
33+
});
34+
}
35+
36+
function clearList() {
37+
while (listElem.hasChildNodes()) {
38+
listElem.removeChild(listElem.lastChild);
39+
}
40+
}
41+
42+
buttonElem.addEventListener("click", listGitHubRepos);

0 commit comments

Comments
 (0)