Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Inserir paciente com sua numeração

Olha o chato do Flávio aqui de novo.

Eu estou adicionando o paciente exatamente como o esperado, porem eu gostaria de adicionar uma numeração junto com o paciente, ou seja o primeiro = 1, segundo =2, etc.

Porem eu tenho que criar uma função que saiba qual o último paciente da lista e some mais 1 a numeração dele e acrescente esse valor ao novo paciente.

Não faço de idéia que como ficaria essa função.

Segue as funções que adicionam os pacientes na tabela, se eu não esqueci de nenhuma.

function montarTr(paciente) {
    var pacienteTr = document.createElement("tr");
    pacienteTr.classList.add("paciente");

    pacienteTr.appendChild(montaTd("1", "num"));

    pacienteTr.appendChild(montaTd(paciente.nome, "nome"));
    pacienteTr.appendChild(montaTd(paciente.peso, "peso"));
    pacienteTr.appendChild(montaTd(paciente.altura, "altura"));
    pacienteTr.appendChild(montaTd(paciente.imc, "imc"));        

    return pacienteTr;
}
function montaTd(dado, classe) {
    var td = document.createElement("td");
    td.textContent = dado;
    td.classList.add(classe);

    return td;
}
function adicionaPacienteNaTabela(paciente) {
    var pacienteTr = montarTr(paciente);
    var tabelaPaciente = document.querySelector("#lista-de-pacientes");
    var primeiroPaciente = tabelaPaciente.querySelector("tr:first-child");
    tabelaPaciente.insertBefore(pacienteTr, primeiroPaciente);
}

6 respostas

Faz assim:

declare uma variável que armazenará o último inserido logo no início do script:

// Declarando dentro de "app" pra não ficar jogado no escopo global
var app.ultimoPacienteInserido;

ai dentro das funções de manipulação da tabela acrescente um manipulador correspondente dessa variável. Ex:

function adicionaPacienteNaTabela(paciente) {
    var pacienteTr = montarTr(paciente);
    var tabelaPaciente = document.querySelector("#lista-de-pacientes");
    var primeiroPaciente = tabelaPaciente.querySelector("tr:first-child");
    tabelaPaciente.insertBefore(pacienteTr, primeiroPaciente);

    // Adicione isso por exemplo:
    app.ultimoPacienteInserido = paciente;
}

E adapta sua função "montarTr":

function montarTr(paciente) {
    var pacienteTr = document.createElement("tr");
    pacienteTr.classList.add("paciente");

    //Modificação aqui
    pacienteTr.appendChild(montaTd(paciente.numero, "num"));

    pacienteTr.appendChild(montaTd(paciente.nome, "nome"));
    pacienteTr.appendChild(montaTd(paciente.peso, "peso"));
    pacienteTr.appendChild(montaTd(paciente.altura, "altura"));
    pacienteTr.appendChild(montaTd(paciente.imc, "imc"));        

    return pacienteTr;
}

Perceba que você precisará adicionar esse atributo (numero) na definição de "Paciente" e atribuir os valores. Não sei como você está criando objetos "Paciente", mas seja como for, você poderá acessar "app.ultimoPacienteInserido.numero" e acrescentar um nesse momento.

Espero ter ajudado. Até...

Quando eu declaro a variável

var app.ultimoPacienteInserido;

o console exibe o seguinte erro.

Uncaught SyntaxError: Unexpected token   funcoes.js:1

Ops... desculpe Flávio. Realmente essa sintaxe ta errada. Substitua por:

var app = {};

Aparentemente está funcionando, porem meu objeto não possui o item numero.

//FUNÇÃO PARA OBTER AS INFORMAÇÕES DO FORM
function obterInformacoesForm (form) {

    var paciente = {
        nome: form.nome.value,
        peso: parseFloat(form.peso.value).toFixed(1),
        altura: parseFloat(form.altura.value).toFixed(2),

        imc: calculaImc(form.peso.value, form.altura.value),
    }

    return paciente;
}
solução!

Uai... ta sussa, então..

Você pode adicionar assim:

//FUNÇÃO PARA OBTER AS INFORMAÇÕES DO FORM
function obterInformacoesForm (form) {
    var paciente = {
        numero:  0,
        nome: form.nome.value,
        peso: parseFloat(form.peso.value).toFixed(1),
        altura: parseFloat(form.altura.value).toFixed(2),
        imc: calculaImc(form.peso.value, form.altura.value)
    }
    // Se o último inserido não existe, considera o número como 1
    // Caso contrário, pega o último inserido e soma um, atribuindo o valor para o número do paciente atual.
    if(app.ultimoPacienteInserido === undefined){
        paciente.numero = 1;
    }else{
        paciente.id = app.ultimoPacienteInserido.numero + 1;
    }
    return paciente;
}

Pra ficar mais bonito, pode ser feito assim também:

//FUNÇÃO PARA OBTER AS INFORMAÇÕES DO FORM
function obterInformacoesForm (form) {
    var paciente = {
        numero:  proximoNumero(),
        nome: form.nome.value,
        peso: parseFloat(form.peso.value).toFixed(1),
        altura: parseFloat(form.altura.value).toFixed(2),
        imc: calculaImc(form.peso.value, form.altura.value)
    }
    return paciente;
}

function proximoNumero(){
    // Se o último inserido não existe, considera o número como 1
    // Caso contrário, pega o último inserido e soma um, atribuindo o valor para o número do paciente atual.
    if(app.ultimoPacienteInserido === undefined){
        return 1;
    }else{
        return (app.ultimoPacienteInserido.numero + 1);
    }
}

Capito?

Funcionou perfeitamente, muito obrigado mesmo.