From 13bc35a23dd091b18aee01462379bda54ff94d5d Mon Sep 17 00:00:00 2001 From: CRISTIANO DA SILVA FERREIRA <68359459+CristianoDaSilvaFerreira@users.noreply.github.com> Date: Wed, 4 Aug 2021 20:13:46 -0300 Subject: [PATCH] =?UTF-8?q?:package:=20projeto=20conclu=C3=ADdo=20com=20su?= =?UTF-8?q?cesso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 6 +-- js/script.js | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index 12de12f..f55c944 100644 --- a/index.html +++ b/index.html @@ -28,11 +28,7 @@

Despesas

Transações

- +

Adicionar transação

diff --git a/js/script.js b/js/script.js index e69de29..7ca53c3 100644 --- a/js/script.js +++ b/js/script.js @@ -0,0 +1,133 @@ +const transactionUl = document.querySelector('#transactions'); +const incomeDisplay = document.querySelector('#money-plus'); +const expenseDisplay = document.querySelector('#money-minus'); +const balanceDisplay = document.querySelector('#balance'); +const form = document.querySelector('#form'); +const inputTransactionName = document.querySelector('#text'); +const inputTransactionAmount = document.querySelector('#amount'); + +// Método para salvar as informações no localStorage +const localStorageTransactions = JSON.parse(localStorage + .getItem('transactions')); +let transactions = localStorage +.getItem('transactions') !== null ? localStorageTransactions : [] + +// Método para remover uma transação +const removeTransaction = ID => { + transactions = transactions.filter(transaction => + transaction.id !== ID); + updateLocalStorage(); + init(); +} // removeTransaction; + +// Método de adicionar uma transação +const addTransactionIntoDOM = ({ amount, name, id }) => { + // Obtendo o operador matemático + const operator = amount < 0 ? '-' : '+'; + const CSSClass = amount < 0 ? 'minus' : 'plus'; + const amountWithoutOperator = Math.abs(amount); + const li = document.createElement('li'); + + li.classList.add(CSSClass); + li.innerHTML = + ` + ${name} + ${operator} R$ ${amountWithoutOperator} + + ` + transactionUl.append(li); +} // addTranscationIntoDOM; + +// Método de recepimento de valores das despesas das transações +const getExpenses = transactionAmounts => Math.abs(transactionAmounts + .filter(value => value < 0) + .reduce((accumulator, value) => accumulator + value, 0)) + .toFixed(2); // getExpenses(); + +// Método reduce reduz o "array" para um único componente + +// Método filter retorna um novo array que o filter estar gerando. O Método icome gerar um novo array usando o filter somanto os valores positivos +const getIncome = transactionAmounts => transactionAmounts + .filter(value => value > 0) + .reduce((accumulator, value) => accumulator + value, 0) + .toFixed(2); //getIncome(); + +// Método para exibir o soldo total +const getTotal = transactionAmounts => transactionAmounts + .reduce((accumulator, transaction) => accumulator + transaction, 0) + .toFixed(2); + +// Método de atualização das informações das transações +const updateBalanceValues = () => { + const transactionAmounts = transactions.map(({ amount }) => amount); + + const total = getTotal(transactionAmounts); + + const income = getIncome(transactionAmounts); + + const expense = getExpenses(transactionAmounts); + + // Exibindo o soldo total no display + balanceDisplay.textContent = `R$ ${total}`; + // Exibindo o valor total das receitas no display + incomeDisplay.textContent = `R$ ${income}`; + // Exibindo o valor total despesas no display + expenseDisplay.textContent = `R$ ${expense}`; + +} // updateBalanceValues(); + +// A função init que executará o estado de preenchimento das aplicações quando a página for carregada +const init = () => { + transactionUl.innerHTML = ''; + transactions.forEach(addTransactionIntoDOM); + updateBalanceValues(); +} // init(); + +init(); + +// Função que irá inserir as informações no localStorage +const updateLocalStorage = () => { + localStorage.setItem('transactions', JSON.stringify(transactions)); +} + +// Função para gerar ID aleatório +const generateID = () => Math.round(Math.random() * 1000); + +// Método para adicionar as transações no array +const addToTransactionArray = (transactionName, transactionAmount) => { + transactions.push({ + id: generateID(), + name: transactionName, + amount: Number(transactionAmount) + }); +} // addToTransactionArray(); + +// Método para limpar os inputs +const clearInputs = () => { + inputTransactionName.value = ''; + inputTransactionAmount.value = ''; +} // clearInputs(); + +// Método para adicionar os componentes do form +const handleFormSubmit = event => { + event.preventDefault(); + + const transactionName = inputTransactionName.value.trim(); + const transactionAmount = inputTransactionAmount.value.trim(); + const isSomeInputEmpty = transactionName === '' || transactionAmount === ''; + + // Verificando se os inputs estão preenchidos + if (isSomeInputEmpty) { + alert('Por favor, preencha tanto o nome quando o valor da transação'); + return; + } + + addToTransactionArray(transactionName, transactionAmount); + init(); + updateLocalStorage(); + clearInputs(); + +} // form(); + +// Método de observação de eventos no form +form.addEventListener('submit', handleFormSubmit) \ No newline at end of file