Repository navigation
Expand file tree
/
Copy pathlogic.js
More file actions
55 lines (50 loc) · 1.58 KB
/
Copy pathlogic.js
File metadata and controls
55 lines (50 loc) · 1.58 KB
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
export async function fetchUserData(username) {
let errorMessege = "";
let data = null;
try {
const response = await fetch(
`https://www.codewars.com/api/v1/users/${username}`,
);
if (!response.ok) {
if (response.status === 404) {
errorMessege = `User: "${username}" not found`;
return { response, errorMessege, username };
} else {
errorMessege = `API error: ${response.status} ${response.statusText}, please try again later.`;
throw new Error(`API error: ${response.status} ${response.statusText}`);
}
}
data = await response.json();
return { response, data, errorMessege, username };
} catch (error) {
alert("Network error. Please check your internet connection.");
return;
}
}
export function getLanguagesNames(usersData) {
let languagesNamesArray = [];
for (let user = 0; user < usersData.length; user++) {
const langsInUser = Object.keys(usersData[user].ranks.languages);
langsInUser.forEach((lang) => {
if (!languagesNamesArray.includes(lang)) {
languagesNamesArray.push(lang);
}
});
}
return languagesNamesArray;
}
export function sortUsersDataByScore(data, selectedLanguage) {
let scoreA = 0;
let scoreB = 0;
let sortedData = data.sort((a, b) => {
if (selectedLanguage === "overall") {
scoreA = a.ranks.overall.score;
scoreB = b.ranks.overall.score;
} else {
scoreA = a.ranks.languages[selectedLanguage].score;
scoreB = b.ranks.languages[selectedLanguage].score;
}
return scoreB - scoreA;
});
return sortedData;
}