-
-
Notifications
You must be signed in to change notification settings - Fork 81
Expand file tree
/
Copy pathindex.js
More file actions
107 lines (92 loc) · 3.24 KB
/
index.js
File metadata and controls
107 lines (92 loc) · 3.24 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
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
const URL = 'https://randomuser.me/api/?results=50';
const CARDS = document.querySelector('.cards');
let filterBy = 'all';
let allFriends = [];
let friends = [];
let sortedFriends;
const input = document.querySelector('input');
function initialApp() {
fetch(URL)
.then(response => response.json())
.then((data) => (allFriends = data.results))
.then(() => userTemplate(allFriends))
.then(()=> renderUsers(allFriends))
}
function userTemplate(array) {
allFriends = array.map(user => {
return {
name: `${user.name.first} ${user.name.last}`,
age: user.dob.age,
gender: user.gender,
photo: user.picture.large
}
});
}
function createCardItem(item) {
const BR = document.createElement("br")
const cardWrapper = document.createElement('div');
const img = document.createElement('img');
const name = document.createElement('p');
const userName = document.createTextNode(item.name);
const age = document.createElement('p');
const userAge = document.createTextNode(item.age);
const gender = document.createElement('p');
const userGender = document.createTextNode(item.gender);
cardWrapper.classList.add('card-wrapper');
img.classList.add('img-card');
CARDS.appendChild(cardWrapper);
cardWrapper.appendChild(img);
cardWrapper.appendChild(name);
name.appendChild(userName);
name.appendChild(BR);
cardWrapper.appendChild(age);
name.appendChild(userAge);
cardWrapper.appendChild(gender);
img.src = item.photo;
}
document.querySelector(".gender").addEventListener("click", filterByGender);
document.querySelector(".age").addEventListener("click", filterByGender);
document.querySelector(".name").addEventListener("click", filterByGender);
input.addEventListener('input', filterByGender);
function filterByGender({target}) {
let sortedArr = [...allFriends];
if (target.type != 'radio') {
sortedArr = sortedArr.filter(element =>
element.name.toLowerCase().includes(target.value.toLowerCase()));
}
sortedArr = getSortedFriends(sortedArr, target.value);
return renderUsers(sortedArr);
}
function getSortedFriends(dataToSort, choosedGender) {
if (choosedGender == 'ageo' || choosedGender == 'agey'){
dataToSort.sort(function(x,y){
return x.age - y.age;
});
if(choosedGender == 'ageo'){
dataToSort.reverse();
}
} else if (choosedGender == 'namea' || choosedGender == 'namez'){
dataToSort.sort(function(x,y){
let a = x.name.toUpperCase(),
b = y.name.toUpperCase();
return a == b ? 0 : a > b ? 1 : -1;
});
if (choosedGender == 'namez'){
dataToSort.reverse();
}
} else if (choosedGender == 'all' || choosedGender == 'female' || choosedGender == 'male'){
filterBy = choosedGender;
}
if (filterBy === 'all') {
return dataToSort;
} else {
return dataToSort.filter(element => element.gender === filterBy);
}
}
function renderUsers(item) {
CARDS.innerHTML = '';
item.forEach(elem => {
createCardItem(elem);
});
}
document.addEventListener('DOMContentLoaded', initialApp);