Olá. Ao implementar o lista todos, passou a dar problema no meu DataHelper.js. O erro no console é:
Uncaught (in promise) TypeError: Cannot read property 'getDate' of undefined
at Function.dataParaTexto (DateHelper.js:10)
at NegociacoesView.js:25
at Array.map (<anonymous>)
at NegociacoesView.template (NegociacoesView.js:22)
at NegociacoesView.update (View.js:14)
at Bind.js:6
at Proxy.<anonymous> (ProxyFactory.js:14)
at NegociacaoController.js:27
at Array.forEach (<anonymous>)
at NegociacaoController.js:26
Segue meu controller:
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', 'esvazia', 'ordena');
this._mensagem = new Bind(
new Mensagem(), new MensagemView($('#mensagemView')),
'texto');
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)
.adicona(negociacao)
.then(() => {
this._listaNegociacoes.adiciona(negociacao);
this._mensagem.texto = 'Negociação adicionada com sucesso';
this._limpaFormulario();
});
})
.catch(erro => this._mensagem.texto = erro);
}
//outros métodos
}
Data Helper:
class DateHelper {
constructor() {
throw new Error('Esta classe não pode ser instanciada');
}
static dataParaTexto(data) {
return `${data.getDate()}/${data.getMonth()+1}/${data.getFullYear()}`;
}
static textoParaData(texto) {
if(!/\d{4}-\d{2}-\d{2}/.test(texto))
throw new Error('Deve estar no formato aaaa-mm-dd');
return new Date(...texto.split('-').map((item, indice) => item - indice % 2));
}
}
NegociacaoDao:
class NegociacaoDao {
constructor (connection){
this._connection = connection;
this._store = 'negociacoes';
}
adicona(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 no DB a negociaçã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 NegociacaoDao(dado._data, dado._quantidade, dado._valor));
atual.continue();
} else {
resolve(negociacoes);
}
};
cursor.onerror = e => {
console.log(e.target.error.name);
reject("Não foi possível listar as negociações!");
};
});
}
}