Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Como fazer para não deixar os valores negativarem?

Bom dia!

Vi aqui no forum um tópico onde abordava uma solução para não deixar que os números das estatisticas de cada item negativem, porem tentei aplicar o código e não consegui entender direito a lógica...

Alguem pode me auxiliar para como eu posso fazer isso? Queria ajustar isso antes de fazer o upload no vercel...

2 respostas
solução!

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!

Perfeito!!

Muito obrigado pela atenção e esclarecimento da dúvida!!

Abração!!!