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

IndexedDB atualiza apenas manualmente

Quando adiciono alguma negociação na tabela e no banco de dados, o IndexedDB não atualiza automaticamente.

indexed_DB.jpg

Não consigo encontrar o erro no código:

// NegociacaoController.js

  adiciona(event) {
    event.preventDefault();
    ConnectionFactory.getConnection()
      .then(conexao => {
        let negociacao = this._criaNegociacao();
        new NegociacaoDao(conexao).adiciona(negociacao)
          .then(() => {
            this._listaNegociacoes.adiciona(negociacao);
            this._mensagem.texto = `Negociação adicionada com sucesso`;
            this._limpaForm();
          });
      })
      .catch(erro => this._mensagem.texto = erro);
  }
// ConnectionFactory.js

var ConnectionFactory = (function() {
  const stores = ['negociacoes'];
  const version = 4;
  const dbName = 'aluraframe';
  var connection = null;
  var close = null;

  return class ConnectionFactory {
    constructor() {
      throw new Error(`não é possível instanciar esta classe`);
    }

    static getConnection() {
      return new Promise((resolve, reject) => {
        let openRequest = window.indexedDB.open(dbName, version);
        openRequest.onupgradeneeded = e => {
          ConnectionFactory._createStores(e.target.result);
        };
        openRequest.onsuccess = e => {
          if(!connection) {
            connection = e.target.result;
            close = connection.close.bind(connection);
            connection.close = function() {
              throw new Error(`Você não pode fechar diretamente a conexão`);
            };
          }
          resolve(connection);
        };
        openRequest.onerror = e => {
          console.log(e.target.error);
          reject(e.target.error.name);
        };
      });
    }

    static _createStores(connection) {
      stores.forEach(store => {
        if(connection.objectStoreNames.contains(store))
          connection.deleteObjectStore(store);
        connection.createObjectStore(store, { autoIncrement: true});
      });
    }

    static closeConnection() {
      if(connection) {
        close();
        connection = null;
        close = null;
      }
    }
  }
})();
3 respostas
solução!

Se você fechar e abrir o navegador aparece? Eu acho que comentei no vídeo que há um bug no Chrome que você não consegue visualizar os últimos gravados, apenas dando refresh. Isso é apenas na visualização, pois os dados já estão salvos. Não há com o que se preocupar. Veja se não é esse caso.

Desculpe, professor, acho que não lembrei da parte do vídeo sobre o bug do chrome. Obrigado!

Sem problema. É muita informação mesmo.

Sucesso e bom estudo Roger!