Até então estava dando certo adicionar os IDs aos novos itens, porém quando fui utilizar o operador ternário, começou a apresentar o ID como null, com exceção do primeiro elemento adicionado na lista.
Abaixo o código:
let form = document.querySelector('#novoItem');
let lista = document.querySelector('.lista');
let itens = JSON.parse(localStorage.getItem('itens')) || [];
// loop para criar elementos no array
itens.forEach ((elemento)=>{
criaElemento(elemento);
})
//execução de ações após o botão submit ser clicado
form.addEventListener ('submit', (evento)=>{
evento.preventDefault();
let nome = evento.target.elements['nome'].value;
let quantidade = evento.target.elements['quantidade'].value;
let existe = itens.find(element=> element.nome === nome);
let itemAtual = {
'nome': nome,
'quantidade': quantidade
}
if (existe){
itemAtual.id = existe.id
atualizaElemento(itemAtual)
itens [ itens.findIndex(element=>element.id === item.id)] = itemAtual;
}else{
itemAtual.id = itens[itens.length-1]? [itens.length-1].id + 1 : 0;
criaElemento(itemAtual);
itens.push(itemAtual);
}
// insere o objeto no array itens e posteriormente o salva no localstorage
localStorage.setItem('itens', JSON.stringify(itens));
form.reset();
});
// criar elemento na lista
function criaElemento (item){
let newItem = document.createElement('li');
newItem.classList.add('item')
let numberItem = document.createElement('strong');
numberItem.innerHTML = item.quantidade;
numberItem.dataset.id = item.id;
newItem.appendChild(numberItem);
newItem.innerHTML+=item.nome;
newItem.appendChild(buttonErase(item.id));
lista.appendChild(newItem);
}
// atualiza elemento
function atualizaElemento (item) {
document.querySelector("[data-id='"+item.id+"']").innerHTML= item.quantidade;
}
//cria botão para excluir
function buttonErase (id){
let button = document.createElement('button');
button.innerHTML = 'X';
button.addEventListener('click',function (){
eraseItem(this.parentNode,id)
})
return button;
}
//exclui elementos
function eraseItem (tag, id){
tag.remove();
itens.splice(itens.findIndex(element=>element.id === id),1);
localStorage.setItem('itens',JSON.stringify(itens))
}