1
resposta

[Sugestão] Atualização do item no HTML e localStorage.

Peguei para resolver o problema antes de assistir as aulas de atualização do item. Para fixar o conteúdo que já sei mesmo antes de conhecer os novos recursos que serão abordados na aula. Aberto a sugestões sei que o código ainda tem muito o que melhorar. OBS: Ainda tenho algumas coisas para refatorar, principalmente na criaElementosNaTela(), é mais para compartilhar da lógica que pensei mesmo.

HTML Abaixo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mochila de viagem</title>
    <link rel="stylesheet" href="css/style.css">

    <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=Roboto&display=swap" rel="stylesheet"> 
</head>
<body>
    <main class="conteudo">
        <div class="principal">
            <div class="mochila"></div>
            <form action="" class="adicionar" id="novoItem">
                <label for="item">Nome</label>
                <input type="text" name="nome" id="nome">
                <label for="item">Quantidade</label>
                <input type="number" name="quantidade" id="quantidade">
                <input type="submit" value="Adicionar" class="cadastrar">
            </form>
        </div>

        <ul class="lista" id="lista">

        </ul>
    </main>
    <!--<script src="js/main.js"></script>>-->
    <script src="js/main2.js"></script>
</body>
</html>

JavaScript Abaixo

const formulario = document.getElementById("novoItem");
const listaItensNaTela = document.getElementById("lista");
const listaItensAdicionados = JSON.parse(localStorage.getItem("itens")) || [];

    listaItensAdicionados.forEach((itensAdicionados) => {
        criaElementosNaTela(itensAdicionados, listaItensNaTela);
    })


    formulario.addEventListener("submit", (event) => {
    event.preventDefault();

    let nomeCadastrado = event.target.elements.nome.value;
    let quantidadeCadastrada = parseInt(event.target.elements.quantidade.value);

    let novoItem = {
        nome: nomeCadastrado,
        quantidade: quantidadeCadastrada
    }

        if(verificaDuplicidade(nomeCadastrado)){
            atualizaDados(verificaDuplicidade(nomeCadastrado),quantidadeCadastrada, nomeCadastrado);
        }else{
            salvaDados(listaItensAdicionados, novoItem);
            criaElementosNaTela( listaItensAdicionados, listaItensNaTela, nomeCadastrado, quantidadeCadastrada);
        }

})


function atualizaDados (itemDuplicado, quantidade, nome) {
        listaItensAdicionados[listaItensAdicionados.indexOf(itemDuplicado)].quantidade = quantidade;
        localStorage.setItem("itens", JSON.stringify(listaItensAdicionados));

    let itens = document.querySelectorAll(".item");
        itens.forEach((item) => {
             if(item.lastChild.textContent === nome){
                item.firstChild.textContent = quantidade;
              }
         })
}

function verificaDuplicidade(nome){
    let objetoExistente = listaItensAdicionados.find((item)=>{
        return item.nome === nome;
    })
   // console.log(controleDuplicidade)
    return objetoExistente;
}

function salvaDados (listaItens, novoItem) {
    listaItens.push(novoItem);
    localStorage.setItem("itens", JSON.stringify(listaItens));
    //console.log(listaItens)
}

function criaElementosNaTela ( itensAdicionados, itensNaTela, nomeCadastrado, quantidadeCadastrada) {

   let quantidadeNovoItem = document.createElement("strong");
        quantidadeNovoItem.innerHTML = itensAdicionados.quantidade || quantidadeCadastrada;

    let novoItemNaTela = document.createElement("li");
        novoItemNaTela.classList.add("item");
        novoItemNaTela.appendChild(quantidadeNovoItem);
        novoItemNaTela.innerHTML += itensAdicionados.nome || nomeCadastrado;

        itensNaTela.appendChild(novoItemNaTela);

    //console.log(itensAdicionados);
}
1 resposta

Oi Lucas, tudo bem?

Muito obrigada por compartilhar com a gente o seu código! Treinar antes de ver como o instrutor fez é uma ótima maneira de praticar mesmo.

Gostei bastante de como fizestes.

Continue os bons estudos.

Um abraço.