-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
63 lines (50 loc) · 1.9 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
const db = new Dexie('ShoppingList')
console.log(db)
db.version(1).stores( {items: '++id, name, price, isPurchased'} )
const itemsForm = document.getElementById('itemsForm')
const itemsDiv = document.querySelector('.items-container')
const totalPriceText = document.querySelector('.totalPrice')
//populate data from indexDB to item div
const populateItemsDiv = async () => {
const allItems = await db.items.reverse().toArray()
itemsDiv.innerHTML = allItems.map(item => `
<div class="item ${item.isPurchased && 'purchased'}">
<div class="checkbox-cont">
<input type="checkbox" onchange="checkedItem(event, ${item.id})" ${item.isPurchased && 'checked'}>
</div>
<div class="info-cont">
<p>${item.name}</p>
<p>Ksh.${item.price} * ${item.quantity}</p>
</div>
<div class="close" onclick="deleteItem(${item.id})">
<i class="fa fa-close"></i>
</div>
</div>
`).join('')
const arrayOfPrices = allItems.map(item => item.price * item.quantity)
const totalPrice = arrayOfPrices.reduce((a, b) => a + b, 0)
totalPriceText.innerText = "KSh." + totalPrice
}
//load items added
window.onload = populateItemsDiv
//submit data to IndexDB
itemsForm.onsubmit = async (event) => {
event.preventDefault()
const name = document.querySelector('.name').value
const quantity = document.querySelector('.quantity').value
const price = document.querySelector('.price').value
await db.items.add({name, quantity, price})
itemsForm.reset()
//load items added
await populateItemsDiv()
}
//cross item when checked
const checkedItem = async (event, id) => {
await db.items.update(id, {isPurchased: !!event.target.checked})
await populateItemsDiv()
}
//delete item
const deleteItem = async(id) => {
await db.items.delete(id)
await populateItemsDiv()
}