Olá,
Clicando no botao de buscar (AJAX api), adicionamos indefinidamente os dados na tabela (novas linhas).
Qual a melhor maneira impossibilitar a duplicação de dados?
Olá,
Clicando no botao de buscar (AJAX api), adicionamos indefinidamente os dados na tabela (novas linhas).
Qual a melhor maneira impossibilitar a duplicação de dados?
Olá Daniel, tudo bem com você?
Peço desculpas pela demora em lhe responder.
Para adicionarmos a lógica para evitar duplicação dos dados precisaremos de verificar se já existe um paciente com o mesmo nome na tabela. Se já existir, podemos exibir uma mensagem de erro na tela e caso o dado seja único, iremos adicioná-lo à tabela.
Vamos à prática:
Modificaremos a função adicionaPacienteNaTabela
presente no arquivo forms.js. Onde, usando o método querySelector
selecionamos a tabela por sua tag e usando o método querySelectorAll
iremos obter uma lista dos elementos de cada linha dentro da tabela. Em seguida, basta verificar se cada novo paciente já existe na tabela antes de adicioná-lo**, verificando se o nome já está presente em um das células com a classe info-nome
da tabela. Conforme apresentado no trecho do código abaixo.
var tabela = document.querySelector('table');
var pacientesExistentes = tabela.querySelectorAll('.info-nome');
var pacienteJaExiste = Array.from(pacientesExistentes).some(function (elemento) {
return elemento.textContent === paciente.nome;
});
No código acima estamos usando método some
que retorna true
se pelo menos um elemento no array satisfaz a condição passada, ou seja, retorna true
se o paciente que vamos adicionar já está na tabela. Em seguida, caso o paciente não exista na tabela, basta adicioná-lo a ela. Usando o código abaixo.
// se o paciente não existe na tabela, adicione-o
if (!pacienteJaExiste) {
var pacienteTr = montaTr(paciente);
tabela.querySelector("#tabela-pacientes").appendChild(pacienteTr);
} else {
mostraMensagemDeDuplicacao('Paciente já existe. Confira novamente.');
}
Código completo da função adicionaPacienteNaTabela
function adicionaPacienteNaTabela(paciente) {
// verifica se o paciente já existe na tabela
var tabela = document.querySelector('table');
var pacientesExistentes = tabela.querySelectorAll('.info-nome');
var pacienteJaExiste = Array.from(pacientesExistentes).some(function (elemento) {
return elemento.textContent === paciente.nome;
});
// se o paciente não existe na tabela, adicione-o
if (!pacienteJaExiste) {
var pacienteTr = montaTr(paciente);
tabela.querySelector("#tabela-pacientes").appendChild(pacienteTr);
} else {
mostraMensagemDeDuplicacao('Paciente já existe. Confira novamente.');
}
}
Para que o usuário receba um alerta visual informando que ocorreu a tentativa de adição de um paciente repetido, podemos criar um alerta que mostra a mensagem: "Paciente já existe. Confira novamente.". Para isso, no arquivo form.js adicione a seguinte função.:
function mostraMensagemDeDuplicacao(mensagem) {
const flashMessage = document.createElement('div');
flashMessage.textContent = mensagem;
flashMessage.style.position = 'fixed';
flashMessage.style.top = '0';
flashMessage.style.width = '100%';
flashMessage.style.padding = '1rem';
flashMessage.style.textAlign = 'center';
flashMessage.style.backgroundColor = '#f44336';
flashMessage.style.color = '#fff';
flashMessage.style.fontWeight = 'bold';
document.body.appendChild(flashMessage);
setTimeout(function () {
flashMessage.parentNode.removeChild(flashMessage);
}, 3000);
}
A função acima é responsável por criar um alerta através de uma div
e adicionar as propriedades de estilos CSS a ela e além disso, mostrará a mensagem de paciente repetido por 3 segundos na tela.
Após as mudanças realizadas, salve os arquivos. Abra o arquivo index.html no navegador e realize o carregamento dos pacientes e a tentativa de adição de um paciente repetido.
Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.
Em caso de dúvidas estou à disposição.
Abraços e bons estudos!