-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
106 lines (82 loc) · 3.25 KB
/
script.js
File metadata and controls
106 lines (82 loc) · 3.25 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
// Declaring variable and DOCs
const balanceEl = document.querySelector('#balance')
const incomeAmountEl = document.querySelector('#income-amount')
const expenseAmountEl = document.querySelector('#expense-amount')
const transactionListEl = document.querySelector('#transaction-list')
const transactionFormEl = document.querySelector('#transaction-form')
const descriptionEl = document.querySelector('#description')
const amountEl = document.querySelector('#amount')
let transaction = JSON.parse(localStorage.getItem('transactions')) || []
//Creating removeTransaction function
const removeTransaction = (id) => {
transaction = transaction.filter(item => item.id !== id)
localStorage.setItem('transactions', JSON.stringify(transaction))
updateTransaction()
updateSummary()
}
//Creating createTransactionElement method
const createTransactionElement = (transaction) => {
const li = document.createElement('li')
li.classList.add('transaction');
li.classList.add(transaction.amount > 0 ? 'income' : 'expense');
li.innerHTML = `
<span>${transaction.description}</span>
<span>${transaction.amount}
<button class='delete-btn' onclick = 'removeTransaction(${transaction.id})'>X</button>
</span>
`
return li;
}
//Creating updateSummary function
const updateSummary = () => {
const balance = transaction.reduce((acc,transaction) => acc + transaction.amount, 0);
const income = transaction.filter((transaction) => transaction.amount > 0).reduce((acc,transaction) => acc + transaction.amount, 0);
const expense = transaction.filter((transaction) => transaction.amount < 0).reduce((acc,transaction) => acc + transaction.amount, 0);
//Update the UI
balanceEl.textContent = formatCurrancy(balance)
incomeAmountEl.textContent = formatCurrancy(income)
expenseAmountEl.textContent = formatCurrancy(expense)
}
// Format currancy
function formatCurrancy(number){
return new Intl.NumberFormat('en-US', {
style:'currency',
currency:'USD',
}).format(number)
}
//Creating updateTransaction function
const updateTransaction = () => {
transactionListEl.innerHTML = ''
const sortedTransactions = [...transaction].reverse()
sortedTransactions.forEach ((transaction) => {
const transactionEl = createTransactionElement(transaction)
transactionListEl.appendChild(transactionEl)
})
}
// Creating addTransaction function
const addTransaction = (e) => {
e.preventDefault();
const description = descriptionEl.value.trim();
const amount = parseFloat(amountEl.value);
//Checking the field validation
if(description !== '' && amount !== 0){
transaction.push({
id:Date.now(),
description,
amount,
})
}else {
alert('please put a valid information')
}
localStorage.setItem('transactions', JSON.stringify(transaction))
//Call the updateTransaction function to updating the transaction
updateTransaction()
//Call the updateSummary function to update the summary
updateSummary();
transactionFormEl.reset()
}
// addEventListners when form submit
transactionFormEl.addEventListener('submit', addTransaction)
// intial render
updateTransaction()
updateSummary()