Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Minha solução para esta aula

Nessa última aula decidi implementar o código diferente do professor. Decidi implementar uma função que altera o id da listaitens para dai fazer a alteração no localStorage (me incomodou o fato do id não ficar sequencial kkkk).

const form = document.getElementById("novoItem");
const lista = document.getElementById("lista");
const listaItens = JSON.parse(localStorage.getItem("itens")) || [];

// localStorage.clear();

listaItens.forEach((element) => {
  criarElemento(element);
});

form.addEventListener("submit", (evento) => {
  evento.preventDefault();
  const nome = evento.target.elements["nome"];
  const quantidade = evento.target.elements["quantidade"];

  const item = {
    nome: nome.value,
    quantidade: quantidade.value,
  };

  verificaExistencia(item);
});

function criarElemento(item) {
  const novoElemento = document.createElement("li");
  const filhoNovoElemento = document.createElement("strong");

  novoElemento.appendChild(filhoNovoElemento);
  filhoNovoElemento.innerHTML = item.quantidade;

  novoElemento.classList.add("item");
  novoElemento.dataset.id = item.id;

  novoElemento.innerHTML += item.nome;
  novoElemento.appendChild(botaoDeleta(item.id));

  lista.appendChild(novoElemento);

  if (listaItens.find((element) => element.nome === item.nome)) {
  } else {
    listaItens.push(item);
  }

  nome = "";
  quantidade = "";
}

function verificaExistencia(item) {
  console.log(item);
  const existe = listaItens.find((element) => item.nome === element.nome);

  if (existe) {
    item.id = existe.id;

    const elemento = document.querySelector('[data-id="' + existe.id + '"]');
    elemento.firstChild.innerHTML = item.quantidade;

    listaItens[existe.id] = item;
    localStorage.setItem("itens", JSON.stringify(listaItens));
  } else {
    item.id = listaItens.length;

    criarElemento(item);
    localStorage.setItem("itens", JSON.stringify(listaItens));
  }
}

function botaoDeleta(id) {
  const elementoBotaoApaga = document.createElement("button");
  elementoBotaoApaga.innerText = "X";
  elementoBotaoApaga.classList.add("botao");

  elementoBotaoApaga.addEventListener("click", function (event) {
    //outra maneira de pegar o evento (dúvida)
    //console.log(event.target);
    console.log(document.querySelector('[data-id="' + id + '"]'));
    deletaElemento(this.parentNode, id);
  });

  return elementoBotaoApaga;
}

function deletaElemento(tag, id) {
  tag.remove();
  listaItens.splice(
    listaItens.findIndex((elemento) => elemento.id === id),
    1
  );
  lista;
  alteraIds(listaItens);
  localStorage.setItem("itens", JSON.stringify(listaItens));
}

function alteraIds(array) {
  for (let i = 0; i < array.length; i++) {
    array[i].id = i;
  }
}
1 resposta
solução!

Olá João, tudo bem? Pelo que entendi, você decidiu implementar uma função que altera o id da listaitens para fazer a alteração no localStorage. É uma boa ideia deixar o id sequencial para facilitar a identificação dos itens.

Seu código parece bem organizado e estruturado. A função verificaExistencia() está bem implementada e faz o que se propõe a fazer. Além disso, a função botaoDeleta() está bem escrita e é fácil de entender.

No entanto, não ficou muito claro o que a função alteraIds() faz. Talvez você pudesse adicionar um comentário explicando melhor o seu propósito, só uma dica.

No geral, acredito que você implementou uma solução interessante para o projeto proposto na aula. Parabéns!

Espero ter ajudado e bons estudos!