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

[Desafio 01]

apps.js

let precoTotal;
limpar();

function adicionar()
{                
    let sectionNode = adicionarClasse('carrinho__produtos__produto', document.createElement('section')); 
    let listaSpanNode = [adicionarClasse('texto-azul', document.createElement('span')), adicionarClasse('texto-azul', document.createElement('span'))];
    let listaTextNode = obterDadosDoProduto();
    if (validarEntrada(listaTextNode)) //Desafio 01
    {
        alert('O formulário não foi preenchido corretamente.');
        return;
    }
    precoTotal = precoTotal + parseInt(listaTextNode[2]) * parseInt(listaTextNode[0]);
    adicionarElemento(sectionNode, adicionarElemento(listaSpanNode[0], listaTextNode[0] + 'x '));
    adicionarElemento(sectionNode, listaTextNode[1]);
    adicionarElemento(sectionNode, adicionarElemento(listaSpanNode[1], ' R$' + listaTextNode[2]));
    adicionarElemento(document.getElementById('lista-produtos'), sectionNode);
    document.getElementById('valor-total').textContent = 'R$' + precoTotal;
    document.getElementById('quantidade').value = '';
}

function limpar()
{    
    removerFilhos();
    document.getElementById('valor-total').textContent = 'R$' + (precoTotal = 0);
    document.getElementById('quantidade').value = '';
}

function validarEntrada(listaTextNode) //Desafio 01
{
    return listaTextNode[0] < 1 || listaTextNode[0] == '' || 'undefined' === typeof listaTextNode[0] || listaTextNode[1] == '' || 'undefined' === typeof listaTextNode[1] || listaTextNode[2] < 1 || listaTextNode[2] == '' || 'undefined' === typeof listaTextNode[2];
}

function separarDados(texto, separador)
{
    return texto.split(separador);
}

function obterDadosDoProduto()
{
    let listaDadosDoProduto = [document.getElementById('quantidade').value];
    for (const valor of separarDados(document.getElementById('produto').value, ' - R$').values())
    {
        listaDadosDoProduto.push(valor);
    }
    return listaDadosDoProduto;
}

function adicionarClasse(classe, elemento)
{
    elemento.classList.add(classe);    
    return elemento;
}

function adicionarElemento(elementoPai, elementoFilho)
{
    elementoPai.append(elementoFilho);
    return elementoPai;
}

function removerFilhos()
{
    for (const filho of document.querySelectorAll('.carrinho__produtos__produto'))
    {
        document.getElementById('lista-produtos').removeChild(filho);
    }
}
2 respostas

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@700&family=Inter:wght@400;600;700&display=swap"
    rel="stylesheet">
  <link rel="stylesheet" href="style.css">

  <title>Carrinho de compras</title>
</head>

<body>
  <main class="conteudo-principal">
    <div class="grafismo-azul"></div>
    <section class="adicionar-produto">
      <h1 class="titulo">
        Carrinho de <span class="texto-azul">compras</span>
      </h1>

      <form class="formulario">
        <label class="campo-grupo">
          <span class="texto-medio-azul">Produto</span>
          <select class="produto-input" name="produto" id="produto">
            <option value="Fone de ouvido - R$100">Fone de ouvido - R$100</option>
            <option value="Celular - R$1400">Celular - R$1400</option>
            <option value="Oculus VR - R$5000">Oculus VR - R$5000</option>
          </select>
          </div>
        </label>

        <section class="parte-inferior">
          <label class="campo-grupo">
            <span class="texto-medio-azul">Qtde.</span>
            <input class="quantidade-input" id="quantidade" type="number" placeholder="100">
          </label>

          <section class="botoes-wrapper">
            <button onclick="adicionar()" type="button" class="botao-form botao-adicionar">Adicionar</button>
            <button onclick="limpar()" type="button" class="botao-form botao-limpar">Limpar</button>
          </section>
        </section>
      </form>
    </section>
    <section class="carrinho">
      <img src="./assets/carrinho-cinza.svg" alt="Imagem de um carrinho de compras cinza">

      <div class="titulo-wrapper">
        <img src="./assets/icone-carrinho.svg" alt="ícone de carrinho">

        <h2 class="carrinho__titulo">Produtos no carrinho</h2>
      </div>

      <section class="carrinho__produtos" id="lista-produtos">
        <section class="carrinho__produtos__produto">
          <span class="texto-azul">1x</span> Celular <span class="texto-azul">R$1400</span>
        </section>
      </section>

      <div class="divisoria"></div>

      <p class="carrinho__total">
        Total: <span class="texto-azul" id="valor-total">R$1400</span>
      </p>
    </section>
  </main>

  <script src="js/app.js"></script>
</body>

</html>

Os exercicios estão ficando grandes e terão que ser postados separadamente.

solução!

Oi Leonardo, tudo bem?

Muito obrigada por compartilhar! Parabéns pela implementação do código. É ótimo ver a organização e estrutura do seu script JavaScript para manipular um carrinho de compras. A função adicionar e limpar estão bem definidas, e o uso de funções auxiliares, como validarEntrada, mostra uma boa prática de modularização.

Além disso, a estrutura do HTML está bem alinhada com os requisitos da aplicação. A aplicação dos desafios, como o Desafio 01, demonstra um esforço em lidar com possíveis entradas inválidas de forma proativa.

Continue praticando e construindo projetos!

Um abraço e bons estudos.