Skip to content

Commit 75c74b5

Browse files
committed
Grocery Project
1 parent 3a9dc56 commit 75c74b5

2 files changed

Lines changed: 182 additions & 2 deletions

File tree

‎14-todo/setup/app.js‎

Lines changed: 162 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,172 @@
11
// ****** SELECT ITEMS **********
2+
const alert = document.querySelector(".alert");
3+
const form = document.querySelector(".grocery-form");
4+
const grocery = document.getElementById("grocery");
5+
const submitBtn = document.querySelector(".submit-btn");
6+
const container = document.querySelector(".grocery-container");
7+
const list = document.querySelector(".grocery-list");
8+
const clearBtn = document.querySelector(".clear-btn");
9+
210

311
// edit option
12+
let editElement;
13+
let editFlag = false;
14+
let editID = "";
415

516
// ****** EVENT LISTENERS **********
17+
form.addEventListener('submit', addItem)
18+
19+
clearBtn.addEventListener('click', clearItems)
620

21+
window.addEventListener("DOMContentLoaded", setupItems);
722
// ****** FUNCTIONS **********
23+
function addItem(e){
24+
e.preventDefault();
25+
const value = grocery.value;
26+
const id = new Date().getTime().toString();
27+
if(value && !editFlag){
28+
createListItem(id,value);
29+
30+
31+
displayAlert("item added to the list", "success");
32+
container.classList.add("show-container");
33+
addToLocalStorage(id,value);
34+
setBackToDefault();
35+
}
36+
else if(value && editFlag){
37+
editElement.innerHTML = value;
38+
displayAlert('value changed', 'success');
39+
//edit local storage
40+
editLocalStorage(editID,value);
41+
setBackToDefault();
42+
}
43+
else{
44+
displayAlert("please enter value", "danger");
45+
}
46+
}
47+
function displayAlert(text, action){
48+
alert.textContent = text;
49+
alert.classList.add(`alert-${action}`);
50+
setTimeout(function(){
51+
alert.textContent = "";
52+
alert.classList.remove(`alert-${action}`);
53+
}, 1000);
54+
}
55+
56+
function clearItems(){
57+
const items = document.querySelectorAll('.grocery-item');
58+
59+
if(items.length > 0){
60+
items.forEach(function(item){
61+
list.removeChild(item);
62+
});
63+
}
64+
container.classList.remove("show-container");
65+
displayAlert("empty list", "danger");
66+
setBackToDefault();
67+
localStorage.removeItem('list');
68+
}
69+
function deleteItem(e){
70+
const element = e.currentTarget.parentElement.parentElement;
71+
const id = element.dataset.id;
72+
list.removeChild(element);
73+
if(list.children.length === 0){
74+
container.classList.remove("show-container");
75+
}
76+
displayAlert('item removed', 'danger');
77+
setBackToDefault();
78+
79+
//remove from local storage
80+
//removeFromLocalStorage(id);
81+
}
82+
//edit function
83+
function editItem(e){
84+
const element = e.currentTarget.parentElement.parentElement;
85+
editElement = e.currentTarget.parentElement.previousElementSibling;
86+
grocery.value = editElement.innerHTML;
87+
editFlag = true;
88+
editID = element.dataset.id;
89+
submitBtn.textContent = "edit";
90+
}
891

92+
function setBackToDefault(){
93+
grocery.value = "";
94+
editFlag = false;
95+
editID = '';
96+
submitBtn.textContent = "submit";
97+
}
998
// ****** LOCAL STORAGE **********
99+
function addToLocalStorage(id, value){
100+
const grocery = {id, value};
101+
let items = getLocalStorage();
102+
items.push(grocery);
103+
localStorage.setItem('list', JSON.stringify(items));
104+
105+
}
106+
function removeFromLocalStorage(id){
107+
let items = getLocalStorage();
108+
109+
items = items.filter(function(item){
110+
if(item.id !==id){
111+
return item;
112+
}
113+
})
114+
localStorage.setItem('list', JSON.stringify(items));
115+
116+
}
117+
function editLocalStorage(id, value){
118+
let items = getLocalStorage();
119+
items = items.map(function(item){
120+
if(item.id === id){
121+
item.value = value;
122+
}
123+
return item;
124+
});
125+
localStorage.setItem('list', JSON.stringify(items));
126+
127+
}
128+
function getLocalStorage(){
129+
return localStorage.getItem("list")?JSON.parse(localStorage.getItem('list')) : [];
130+
}
131+
//localStorage API
132+
//setItem
133+
//getItem
134+
//removeItem
135+
//save as string
136+
//localStorage.setItem('orange', JSON.stringify(["item", //"item2"]));
137+
//const oranges = JSON.parse(localStorage.getItem("orange"));
138+
//console.log(oranges);
139+
//localStorage.removeItem('orange');
140+
// ****** SETUP ITEMS *********
141+
function setupItems(){
142+
let items = getLocalStorage();
143+
if(items.length > 0){
144+
items.forEach(function(item){
145+
createListItem(item.id,item.value)
146+
})
147+
container.classList.add('show-container');
148+
}
149+
}
150+
151+
function createListItem(id,value){
152+
const element = document.createElement('article');
153+
element.classList.add('grocery-item');
154+
const attr = document.createAttribute('data-id');
155+
attr.value = id;
156+
element.setAttributeNode(attr);
157+
element.innerHTML = ` <p class="title">${value}</p>
158+
<div class="btn-container">
159+
<button type="button" class="edit-btn">
160+
<i class="fas fa-edit"></i>
161+
</button>
162+
<button type="button" class="delete-btn">
163+
<i class="fas fa-trash"></i>
164+
</button>
165+
</div>`;
10166

11-
// ****** SETUP ITEMS **********
167+
const deleteBtn = element.querySelector(".delete-btn");
168+
const editBtn = element.querySelector(".edit-btn");
169+
deleteBtn.addEventListener('click', deleteItem);
170+
editBtn.addEventListener('click', editItem);
171+
list.appendChild(element);
172+
}

‎14-todo/setup/index.html‎

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,26 @@
1313
<link rel="stylesheet" href="styles.css" />
1414
</head>
1515
<body>
16-
<h1>grocery bud project</h1>
16+
<section class="section-center">
17+
<form class="grocery-form">
18+
<p class="alert">
19+
<h3>grocery bud</h3>
20+
<div class="form-control">
21+
<input type="text" id="grocery" placeholder="e.g. eggs" />
22+
<button type="submit" class="submit-btn">submit</button>
23+
</div>
24+
</p>
25+
</form>
26+
<div class="grocery-container">
27+
<div class="grocery-list">
28+
<article class="grocery-item">
29+
30+
</article>
31+
</div>
32+
33+
<button type="button" class="clear-btn">clear items</button>
34+
</div>
35+
</section>
1736
<!-- javascript -->
1837
<script src="app.js"></script>
1938
</body>

0 commit comments

Comments
 (0)