@@ -11,6 +11,7 @@ const clearBtn = document.querySelector(".clear-btn");
11
11
let editElement ;
12
12
let editFlag = false ;
13
13
let editValue = "" ;
14
+ let editID = "" ;
14
15
// ****** event listeners **********
15
16
16
17
// submit form
@@ -26,8 +27,13 @@ window.addEventListener("DOMContentLoaded", setupItems);
26
27
function addItem ( e ) {
27
28
e . preventDefault ( ) ;
28
29
const value = grocery . value ;
30
+ const id = new Date ( ) . getTime ( ) . toString ( ) ;
31
+
29
32
if ( value !== "" && ! editFlag ) {
30
33
const element = document . createElement ( "article" ) ;
34
+ let attr = document . createAttribute ( "data-id" ) ;
35
+ attr . value = id ;
36
+ element . setAttributeNode ( attr ) ;
31
37
element . classList . add ( "grocery-item" ) ;
32
38
element . innerHTML = `<p class="title">${ value } </p>
33
39
<div class="btn-container">
@@ -56,13 +62,13 @@ function addItem(e) {
56
62
// show container
57
63
container . classList . add ( "show-container" ) ;
58
64
// set local storage
59
- addToLocalStorage ( value ) ;
65
+ addToLocalStorage ( id , value ) ;
60
66
} else if ( value !== "" && editFlag ) {
61
67
editElement . innerHTML = value ;
62
68
displayAlert ( "value changed" , "success" ) ;
63
69
64
70
// edit local storage
65
- editLocalStorage ( editValue , value ) ;
71
+ editLocalStorage ( editID , value ) ;
66
72
setBackToDefault ( ) ;
67
73
} else {
68
74
displayAlert ( "please enter value" , "danger" ) ;
@@ -97,24 +103,29 @@ function clearItems() {
97
103
98
104
function deleteItem ( e ) {
99
105
const element = e . currentTarget . parentElement . parentElement ;
106
+ const id = element . dataset . id ;
107
+
100
108
list . removeChild ( element ) ;
101
- if ( ! list . hasChildNodes ( ) ) {
109
+
110
+ if ( list . children . length === 0 ) {
102
111
container . classList . remove ( "show-container" ) ;
103
112
}
104
113
displayAlert ( "item removed" , "danger" ) ;
105
114
106
115
setBackToDefault ( ) ;
107
116
// remove from local storage
108
- removeFromLocalStorage ( element . firstElementChild . textContent ) ;
117
+ removeFromLocalStorage ( id ) ;
109
118
}
110
119
// edit item
111
120
function editItem ( e ) {
121
+ const element = e . currentTarget . parentElement . parentElement ;
112
122
// set edit item
113
123
editElement = e . currentTarget . parentElement . previousElementSibling ;
114
124
// set form value
115
125
grocery . value = editElement . innerHTML ;
116
126
editFlag = true ;
117
127
editValue = editElement . innerHTML ;
128
+ editID = element . dataset . id ;
118
129
//
119
130
submitBtn . textContent = "edit" ;
120
131
}
@@ -123,13 +134,15 @@ function setBackToDefault() {
123
134
grocery . value = "" ;
124
135
editFlag = false ;
125
136
editValue = "" ;
137
+ editID = "" ;
126
138
submitBtn . textContent = "submit" ;
127
139
}
128
140
129
141
// ****** local storage **********
130
142
131
143
// add to local storage
132
- function addToLocalStorage ( grocery ) {
144
+ function addToLocalStorage ( id , value ) {
145
+ const grocery = { id, value } ;
133
146
let items = getLocalStorage ( ) ;
134
147
items . push ( grocery ) ;
135
148
localStorage . setItem ( "list" , JSON . stringify ( items ) ) ;
@@ -141,19 +154,23 @@ function getLocalStorage() {
141
154
: [ ] ;
142
155
}
143
156
144
- function removeFromLocalStorage ( grocery ) {
157
+ function removeFromLocalStorage ( id ) {
145
158
let items = getLocalStorage ( ) ;
159
+
146
160
items = items . filter ( function ( item ) {
147
- return item !== grocery ;
161
+ if ( item . id !== id ) {
162
+ return item ;
163
+ }
148
164
} ) ;
165
+
149
166
localStorage . setItem ( "list" , JSON . stringify ( items ) ) ;
150
167
}
151
- function editLocalStorage ( oldValue , newValue ) {
168
+ function editLocalStorage ( id , value ) {
152
169
let items = getLocalStorage ( ) ;
153
170
154
171
items = items . map ( function ( item ) {
155
- if ( item === oldValue ) {
156
- item = newValue ;
172
+ if ( item . id === id ) {
173
+ item . value = value ;
157
174
}
158
175
return item ;
159
176
} ) ;
@@ -166,16 +183,20 @@ function editLocalStorage(oldValue, newValue) {
166
183
167
184
function setupItems ( ) {
168
185
let items = getLocalStorage ( ) ;
186
+
169
187
if ( items . length > 0 ) {
170
188
items . forEach ( function ( item ) {
171
- createListItem ( item ) ;
189
+ createListItem ( item . id , item . value ) ;
172
190
} ) ;
173
191
container . classList . add ( "show-container" ) ;
174
192
}
175
193
}
176
194
177
- function createListItem ( value ) {
195
+ function createListItem ( id , value ) {
178
196
const element = document . createElement ( "article" ) ;
197
+ let attr = document . createAttribute ( "data-id" ) ;
198
+ attr . value = id ;
199
+ element . setAttributeNode ( attr ) ;
179
200
element . classList . add ( "grocery-item" ) ;
180
201
element . innerHTML = `<p class="title">${ value } </p>
181
202
<div class="btn-container">
0 commit comments