Oi, Henrique, tudo bem?
Para que o valor das estatísticas não fique negativo e para que o cálculo respeite a manipulação de peças aumentando o valor da estatística referente ao aumentar o número de peças e diminuindo o valor da estatística ao remover peças, podemos alterar a função atualizaEstatistica()
da seguinte maneira:
function atualizaEstatisticas (peca, operacao) {
estatisticas.forEach((elemento)=>{
const estatisticaAtual = parseInt(elemento.textContent);
const somaEstatistica = estatisticaAtual + pecas[peca][elemento.dataset.estatistica];
const subtraiEstatistica = estatisticaAtual - pecas[peca][elemento.dataset.estatistica];
if(operacao==="-"){
if(subtraiEstatistica>=0){
elemento.textContent=subtraiEstatistica;
}
} else if(operacao==="+"){
if(somaEstatistica>=0){
elemento.textContent = somaEstatistica;
}
}
})
}
Agora que temos o código, vamos entender a lógica por trás dele:
A função atualizaEstatistica()
vai realizar a atualização dos valores da estatística na tela do navegador assim que uma peça for adicionada ou removida. Ela possui como parâmetros a peça e a operação, para identificar qual peça e qual operação está sendo realizada.
Essa funcionalidade irá acontecer para todos os elementos da lista por meio do método .forEach()
.
No interior do .forEach()
criamos três variáveis: estatisticaAtual
, somaEstatistica
e subtraiEstatistica
. Na primeira variável temos o valor atual do campo de cada uma das estatísticas. Na segunda realizaremos a soma dos valores atribuídos na variável pecas
, onde para cada incremento ou remoção de novas peças temos valores referentes a cada estatística. E na última variável realizamos a subtração dos valores da variável pecas
.
Em seguida, validaremos algumas estruturas condicionais para verificar qual o tipo da operação matemática que queremos executar, no caso se somamos ou subtraímos o número de peças . E em seguida realizaremos outra verificação para saber se o valor da variável somaEstatistica
e subtraiEstatistica
é maior que zero e só então iremos realizar a mudança no valor da estatística.
Além de alterar a função atualizaEstatisticas()
precisamos atualizar os parâmetros dessa função ao realizar o forEach()
no controle. Dessa forma teremos o seguinte código:
controle.forEach( (elemento) => {
elemento.addEventListener("click", (evento) => {
manipulaDados(evento.target.dataset.controle, evento.target.parentNode)
atualizaEstatisticas(evento.target.dataset.peca, evento.target.dataset.controle)
})
})
Espero ter ajudado. Caso tenha dúvidas, estarei à disposição!
Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!