-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
133 lines (100 loc) · 4.57 KB
/
script.js
File metadata and controls
133 lines (100 loc) · 4.57 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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
const allTransactions = JSON.parse(localStorage.getItem("transactions")) || []
let deleteItemId = ''
// Show transaction history
updateTransactionHistory()
// Show balance
updateTotalBalanceCard()
// Function to close any modal
const closeModal = () => {
const infoModalElement = document.getElementById('infoModal')
const customModalElement = document.getElementById('customModal')
if (infoModalElement) (infoModalElement.style.display = 'none')
if (customModalElement) (customModalElement.style.display = 'none')
}
// Function to show info modal and delete modal
const showModal = (title, message, modalId, transactionId) => {
deleteItemId = transactionId;
const modalElement = document.getElementById(modalId)
document.getElementById('infoTitle').innerText = title
document.getElementById('infoMessage').innerText = message
modalElement.style.display = 'flex'
}
function collectUserInput(inputFieldsId) {
const userInputDictionary = {}
for (let id = 0; id < inputFieldsId.length; id++) {
const dictionaryKey = `user${inputFieldsId[id]}`
userInputDictionary[dictionaryKey] = document.getElementById(`${inputFieldsId[id]}`).value.trim();
}
return userInputDictionary;
}
function updateTransactionHistory() {
const listElement = document.getElementById('transactionList')
listElement.innerHTML = ''
if (allTransactions.length === 0) {
listElement.innerHTML = '<li class="empty-state">No transaction yet. Add one above to get started.</li>'
return
}
for (let transaction = 0; transaction < allTransactions.length; transaction++) {
const transactionName = allTransactions[transaction].usertransactionName
const transactionAmount = allTransactions[transaction].usertransactionAmount
const transactionType = allTransactions[transaction].usertransactionType
listElement.innerHTML += `<li class="${transactionType}">
<span class="transaction-name">${transactionName}</span>
<div class="transaction-actions">
<span class="transaction-amount">₦${transactionAmount}</span>
<button class="delete-btn" type="button" onclick="showModal('', '', 'customModal', ${transaction})">Delete</button>
</div>
</li>`
}
}
function updateTotalBalanceCard() {
const transactionIncome = []
const transactionExpense = []
const balanceElement = document.getElementById('totalBalance')
for (let transaction = 0; transaction < allTransactions.length; transaction++) {
const transactionAmount = Number(allTransactions[transaction].usertransactionAmount)
const transactionType = allTransactions[transaction].usertransactionType
if (transactionType == 'income') {transactionIncome.push(transactionAmount)}
if (transactionType == 'expense') {transactionExpense.push(transactionAmount)}
}
// Add all income
const totalTransactionIncome = transactionIncome.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
}, 0);
// Add all expense
const totalTransactionExpense = transactionExpense.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
}, 0);
const totalBalance = (totalTransactionIncome - totalTransactionExpense).toFixed(2);
balanceElement.innerText = `₦${totalBalance}`
}
function deleteItem() {
// Delete transaction from list and add list to local storage
allTransactions.splice(deleteItemId, 1)
localStorage.setItem("transactions", JSON.stringify(allTransactions))
// Update transaction history
updateTransactionHistory()
// updateTotalBalanceCard()
updateTotalBalanceCard()
// Close all modal
closeModal()
}
const addTransaction = () => {
// Collect user's input
let userInput = collectUserInput(["transactionName", "transactionAmount", "transactionType"])
// Input validation
if (userInput.usertransactionName === '' || userInput.usertransactionAmount === '') {
showModal("Missing Details", "Please fill in all input fields before adding a transaction", 'infoModal', '');
return;
}
// Add user's input to allTransactions array and local storage
allTransactions.unshift(userInput)
localStorage.setItem("transactions", JSON.stringify(allTransactions))
// Clear input fields
document.getElementById('transactionName').value = ''
document.getElementById('transactionAmount').value = ''
// Update transaction history
updateTransactionHistory()
// updateTotalBalanceCard()
updateTotalBalanceCard()
}