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

Não consigo exibir todas as negociações

As negociações não querem aparecer. Já fiz tudo de acordo com os vídeos e as transcrições, mas não consigo achar onde estou errando. Ai no console apareceu essa mensagem de erro, mas quando resolvi tirar o getTime() da linha que é informado o erro, acaba aparecendo outro erro, mas não no console, mas sim na lista que finalmente aparece. Não sei mais o que fazer. Alguém me ajuda, por favor!!

Mensagem de erro no console -

Uncaught TypeError: Cannot read property 'getTime' of undefined
    at new Negociacao (Negociacao.js:5)
    at IDBRequest.cursor.onsuccess.e (NegociacaoDao.js:51)

class Negociacao -

class Negociacao {

    constructor(data, quantidade, valor){

        this._data = new Date(data.getTime());
        this._quantidade = quantidade;
        this._valor = valor;

        Object.freeze(this);
    }

    get volume(){
        return this._quantidade * this._valor;
    }

    get data(){
        return new Date(this._data.getTime());
    }

    get quantidade(){
        return this._quantidade;
    }

    get valor(){
        return this._valor;
    }
}

class NegociacaoDao

class NegociacaoDao {

    constructor(connection) {

        this._connection = connection;
        this._store = 'negociacoes';
    }

    adiciona(negociacao) {

        return new Promise ((resolve, reject) => {

            let request = this._connection
                .transaction([this._store], 'readwrite')
                .objectStore(this._store)
                .add(negociacao);

            request.onsuccess = e => {

                resolve();
            };

            request.onerror = e => {

                console.log(e.target.error);
                reject('Não foi possível adicionar a conexão.');

            };
        });
    }

    listaTodos() {

        return new Promise((resolve, reject) => {

            let  cursor = this._connection
                .transaction([this._store], 'readwrite')
                .objectStore(this._store)
                .openCursor();

            let negociacoes = [];

            cursor.onsuccess = e => {

                let atual = e.target.result;

                if(atual) {

                    let dado = atual.value;

                    negociacoes.push(new Negociacao(dado._data, dado._quantidade, dado._valor));

                    atual.continue();

                } else {

                    resolve(negociacoes);
                }
            }

            cursor.onerror = e => {

                console.log(e.target.error);
                reject('Não foi possível listar as negociações.');
            }
        });
    }
}

Quando eu retirei o getTime, no console o erro sumiu, mas a lista ficou assim.

DATA    QUANTIDADE    VALOR    VOLUME
12/12/2018    1    200    200
NaN/NaN/NaN    undefined    undefined    NaN
4/1/2019    7    100    700
12/12/2019    2    12    24
12/12/2019    2    33    66
NaN
2 respostas

Oi Marcela tudo bem ?

Pode postar seu NegociacaoController.js também pra gente dar uma olhada ?

solução!
class NegociacaoController {

    constructor() {

        let $ = document.querySelector.bind(document);

        this._inputData = $('#data');
        this._inputQuantidade = $('#quantidade');
        this._inputValor = $('#valor');

        this._listaNegociacoes = new Bind(
            new ListaNegociacoes(), 
            new NegociacoesView($('#negociacoesView')), 'adiciona', 'esvaiza', 'ordena', 'inverteOrdem');

        this._mensagem = new Bind(
            new Mensagem(), 
            new MensagemView($('#mensagemView')), 'texto');

        this._ordemAtual = '';

        ConnectionFactory
            .getConnection()
            .then(connection => {
                new NegociacaoDao(connection).listaTodos().then(negociacoes => {
                negociacoes.forEach(negociacao => {
                    this._listaNegociacoes.adiciona(negociacao);
                });
            });
        });
    }  

    adiciona(event) {

        event.preventDefault();

        ConnectionFactory.getConnection().then(connection => {

            let negociacao = this._criaNegociacao();

            new NegociacaoDao(connection).adiciona(negociacao).then(() => {
                this._listaNegociacoes.adiciona(negociacao);
                this._mensagem.texto = 'Negociação adicionada com sucesso';
                this._limpaFormulario();
            })
        })
        .catch(erro => this._mensagem.texto = erro);
    }

    importaNegociacoes() {

        let service = new NegociacaoService();

        service
            .obterNegociacoes()
            .then(negociacoes => {
                negociacoes.forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));
                this._mensagem.texto = 'Negociações importadas com sucesso.'
            })
            .catch(erro => this._mensagem.texto.erro);
    }

    apaga() {

        this._listaNegociacoes.esvazia();
        this._mensagem.texto = 'Negociações apagadas com sucesso';
    }

    _criaNegociacao() {

        return new Negociacao(
            DateHelper.textoParaData(this._inputData.value),
            parseInt(this._inputQuantidade.value),
            parseFloat(this._inputValor.value)
        );
    }
    _limpaFormulario() {

        this._inputData.value = '';
        this._inputQuantidade.value = 1;
        this._inputValor.value = 0.0;

        this._inputData.focus();
    }

    ordena (coluna) {

        if(this._ordemAtual == coluna) {

            this._listaNegociacoes.inverteOrdem();

        }else {

            this._listaNegociacoes.ordena((a, b) => a[coluna] - b[coluna]); 
        }
        this._ordemAtual = coluna;
    }
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software