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);
}