forked from AlanKostrick/grocery-tracker-javascript-demo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
124 lines (103 loc) · 3.33 KB
/
index.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
const itemInput = document.querySelector('#itemInput');
const itemSubmitBtn = document.querySelector('#itemSubmit');
const itemList = document.querySelector('.itemList');
const popularItemsList = document.querySelector('.popularItems');
const warning = document.querySelector('.warning');
// object
const popularItems = [
{
name: 'Milk',
price: '$3'
},
{
name: 'Eggs',
price: '$2'
},
{
name: 'Sugar',
price: '$1.50'
}
]
let items = [];
//load our view
renderPage();
function renderPage() {
//control our views in here
displayPopularItems(popularItems);
addItems();
strikeItem();
// removeItem();
}
function displayPopularItems(popularItems) {
popularItems.map(popularItem => {
const popItemsSection = document.createElement('section');
popItemsSection.className = 'popularItemsSection';
const popItemNamePara = document.createElement('p');
popItemNamePara.innerText = popularItem.name;
popItemsSection.appendChild(popItemNamePara);
const popItemPricePara = document.createElement('p');
popItemPricePara.innerHTML = popularItem.price;
popItemsSection.appendChild(popItemPricePara);
popularItemsList.appendChild(popItemsSection);
popItemsSection.addEventListener('click', () => {
let hasItemBeenAdded = items.some(item => item.name === popularItem.name);
if (hasItemBeenAdded) {
warning.innerText = 'Item has already been added';
}
else {
warning.innerText = '';
items.push(popularItem);
const addedPopularItem = document.createElement('p');
addedPopularItem.className = 'itemAdded';
addedPopularItem.innerText = popularItem.name;
const removeBtn = document.createElement('button');
removeBtn.className = 'remove';
removeBtn.innerText = 'x';
addedPopularItem.appendChild(removeBtn);
removeItem(addedPopularItem, popularItem);
itemList.appendChild(addedPopularItem);
}
})
})
}
function addItems() {
itemSubmitBtn.addEventListener('click', () => {
const itemAdded = {};
itemAdded.name = itemInput.value;
let hasItemBeenAdded = items.some(item => item.name === itemAdded.name);
if (hasItemBeenAdded) {
warning.innerText = 'Item has already been added';
} else {
warning.innerText = '';
itemInput.value = '';
items.push(itemAdded);
const itemAddedPara = document.createElement('p');
itemAddedPara.className = 'itemAdded';
itemAddedPara.innerText = itemAdded.name;
const removeBtn = document.createElement('button');
removeBtn.className = 'remove';
removeBtn.innerText = 'x';
itemAddedPara.appendChild(removeBtn);
removeItem(itemAddedPara, itemAdded);
itemList.appendChild(itemAddedPara);
}
}
)
}
//Event delegation: look for existing elem on the dom because children may not yet exist
function strikeItem() {
itemList.addEventListener('click', (e) => {
if (e.target.classList.contains('itemAdded')) {
const elemSelected = e.target;
elemSelected.classList.toggle('itemRemoved');
}
})
}
function removeItem(itemElem, itemToRemove) {
itemElem.addEventListener('click', (e) => {
if (e.target.classList.contains('remove')) {
items = items.filter(item => item.name !== itemToRemove.name);
itemList.removeChild(itemElem);
}
})
}