Não entendi o por que da página fazer o reload quando é deletado na tabela. Tentei usar o preventDefault e não funcionou. O código está de acordo com o do professor e não encontrei a solução nas outros tópicos abertos.
Segue o link do código: https://github.com/mmorilhas/crud-com-js-assincrono/tree/feature-deletandoCliente
Em cliente-service.js
const listaCLientes = () =>{
return fetch(`http://localhost:3000/profile`)
.then(resposta => {
return resposta.json();
})
}
const criaCLiente = (nome, email) => {
return fetch(`http://localhost:3000/profile`, {
method: 'POST',
headers:{
'Content-Type': 'application/json'
},
body: JSON.stringify({
nome: nome,
email: email
})
})
.then(resposta => {
return resposta.body
})
}
const removeCliente = (id) => {
return fetch(`http://localhost:3000/profile/${id}`, {
method: 'DELETE',
})
}
export const clienteService = {
listaCLientes,
criaCLiente,
removeCliente
}
Em listaClientes-controller.js
import { clienteService } from "../service/cliente-service.js";
const criaNovaLinha = (nome, email, id) => {
const novaLinhaCliente = document.createElement('tr');
const conteudo = `
<td class="td" data-td>${nome}</td>
<td>${email}</td>
<td>
<ul class="tabela__botoes-controle">
<li><a href="../telas/edita_cliente.html" class="botao-simples botao-simples--editar">Editar</a></li>
<li><button class="botao-simples botao-simples--excluir" type="button">Excluir</button></li>
</ul>
</td>
`;
novaLinhaCliente.innerHTML = conteudo;
novaLinhaCliente.dataset.id = id;
return novaLinhaCliente;
}
const tabela = document.querySelector('[data-tabela]');
tabela.addEventListener('click', (evento) => {
let ehBotaoDeletar = evento.target.className === 'botao-simples botao-simples--excluir'
if(ehBotaoDeletar){
const linhaCliente = evento.target.closest('[data-id]');
let id = linhaCliente.dataset.id;
clienteService.removeCliente(id)
.then(() => {
linhaCliente.remove()
})
}
})
clienteService.listaCLientes()
.then(data => {
data.forEach(element => {
tabela.appendChild(criaNovaLinha(element.nome, element.email, element.id));
});
})