1
resposta

[Dúvida] Desafio do carrinho de compras

Realizei algumas alterações como:
// Não tem como adicionar produto sem colocar uma quantidade
// Não tem como adicionar produto com a quantidade = 0 ou negativo
// Limite de 6 produtos para evitar bug visual no CSS de lista infinita
// Foram adicionados outros produtos
// Limpar zera o numero e quantidade também

Mas teve duas que eu tentei e não consegui, queria que aparecesse uma mensagem de "seu carrinho está vazio" enquanto nada fosse adicionado e ao adicionar um produto ela sumisse.
Outra coisa que eu tentei mas não tive sucesso foi fazer com que se eu adicionasse 2 vezes o mesmo item ele fizesse uma soma ao inves de adicionar por exemplo:
(1x Iphone
1x Iphone)

queria que quando fosse adicionado um mesmo item ele ficasse como

(2x Iphone)

Teria como fazer isso?

//Tudo que ficar fora da função está "salvo" na memória do site, se não é apagado sempre que a função resetar
let totalGeral;
limpar()

function adicionar() {
    //Variaveis principais
let nomeProduto = document.getElementById('produto').value;
let produto = nomeProduto.split('-')[0]
let valorProduto = parseInt(nomeProduto.split('R$')[1])
let quantidade = parseInt(document.getElementById('quantidade').value);
let contagem = document.querySelectorAll(".carrinho__produtos__produto").length;

//Verificação para saber se a quantidade é permitida
let quantidadeCampo = document.getElementById('quantidade').value; 

if (quantidadeCampo === "") {
    alert("Por favor, digite uma quantidade.");
    return;
}

let quantia = parseInt(quantidadeCampo);

if (quantia <= 0) {
    alert("A quantidade deve ser maior que zero.");
    return;
}

//Calculo da multiplicação do valor
function subtotal(valorProduto,quantidade){
    return valorProduto * quantidade;
}

let soma = subtotal(valorProduto,quantidade);

// Adicionando o produto ao carrinho

if(contagem > 5){
    alert('Você atingiu o limite de itens no carrinho!')
    return;
}

let listaDeCompras = document.getElementById('lista-produtos');
listaDeCompras.innerHTML = listaDeCompras.innerHTML + `<section class="carrinho__produtos" id="lista-produtos">
        <section class="carrinho__produtos__produto">
          <span class="texto-azul">${quantidade}x</span> ${produto} <span class="texto-azul">R$${valorProduto}</span>
        </section>`;

totalGeral = totalGeral + soma 
let valorTotal = document.getElementById('valor-total');
valorTotal.textContent = `R$ ${totalGeral}`;

document.getElementById('quantidade').value = 0;

}

function limpar(){ 
    document.getElementById('lista-produtos').textContent = '';
    document.getElementById('valor-total').textContent = 'R$ 0';
    totalGeral = 0;
    document.getElementById('quantidade').value = 0;

}

// Não tem como adicionar produto sem colocar uma quantidade
// Não tem como adicionar produto com a quantidade = 0 ou negativo
// Limite de 6 produtos para evitar bug visual no CSS de lista infinita
// Foram adicionados outros produtos 
// Limpar zera o numero e quantidade também

1 resposta

Oi, Henri. Como vai?

Gostei bastante das validações que você adicionou no projeto, como o bloqueio de quantidade vazia, valores menores que zero, limite de itens no carrinho e o reset completo no limpar(). Isso mostra um cuidado muito bom com a experiência de quem usa a aplicação.

Sobre sua dúvida, sim, dá para fazer das duas formas: mostrar a mensagem Seu carrinho esta vazio quando a lista estiver sem itens e também somar a quantidade quando o mesmo produto for adicionado novamente, em vez de repetir a linha.

Uma dica interessante para o futuro é usar o metodo find() para procurar se o produto ja existe no carrinho antes de adicionar outro item. Veja este exemplo:


let carrinho = [];

function adicionarProduto(nome, quantidade) {
  let itemExistente = carrinho.find(item => item.nome === nome);

  if (itemExistente) {
    itemExistente.quantidade += quantidade;
  } else {
    carrinho.push({ nome: nome, quantidade: quantidade });
  }

  console.log(carrinho);
}

Esse codigo procura um produto com o mesmo nome no array. Se encontrar, soma a quantidade. Se nao encontrar, adiciona um novo item. Para a mensagem de carrinho vazio, voce pode usar um if verificando se carrinho.length === 0.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!