vtex.js icon indicating copy to clipboard operation
vtex.js copied to clipboard

Pegar orderForm antes de todos os métodos caso ainda não tenha o orderForm ID

Open klzns opened this issue 9 years ago • 7 comments

Adicionar a todos os métodos do vtex.js uma verificação se o orderFormId já existe no contexto, se sim, o método é chamado normalmente. Caso não tenha, o vtex.js deve fazer um getOrderForm e quando completo, chamar o método chamado originalmente.

Isso pretende facilitar o uso para que o getOrderForm não seja chamado sem necessidade.

klzns avatar Jul 27 '16 18:07 klzns

Se alguem se sentir a vontade de contribuir com isso, posso ajudar dando as direções.

klzns avatar Jul 27 '16 18:07 klzns

@brenoc seria deixar em cache todos os dados do orderForm para que as próximas chamadas do getOrderForm não gerassem uma nova requisição? Se for isso, isso não pode ser um problema quando for uma situação em que realmente precise dos dados novos?

cvscarlos avatar Jul 28 '16 17:07 cvscarlos

Os métodos do vtex.js que alteram o carrinho precisam do ID do orderForm. Por isso que pedimos que se faça uma chamada ao getOrderForm antes de chamar algum método.

Mas isso está confuso na documentação, parece que isso é pra ser feito sempre, o que não é verdade.

Precisamos apenas de uma única chamada ao getOrderForm por página apenas para pegarmos e guardamos o ID do carrinho. Uma vez que essa chamada foi feita, não precisamos mais ficar chamando getOrderForm.

Com isso, podemos matar também esse cache do getOrderForm, para que ele seja sempre uma chamada a API pedindo os dados atualizados do carrinho.

klzns avatar Jul 28 '16 18:07 klzns

@brenoc ok, acho que entendi. Basicamente é fazer com que esse código:

var itemIndex = 0; var attachmentName = 'personalizacao'; var content = { "numero": "10" };

vtexjs.checkout.getOrderForm().then(function(){ return vtexjs.checkout.addItemAttachment(itemIndex, attachmentName, content); }).done(function(orderForm){ // Anexo incluído ao item! console.log(orderForm); });

Tenha o mesmo custo computacional que esse (ou seja, não fazer uma request do orderForm):

var itemIndex = 0; var attachmentName = 'personalizacao'; var content = { "numero": "10" };

vtexjs.checkout.addItemAttachment(itemIndex, attachmentName, content);

cvscarlos avatar Jul 29 '16 17:07 cvscarlos

@caljp13 exato!

O vtex.js vai cuidar internamente de pegar o orderFormId caso ele ainda nao tenha.

O código ficara algo assim:

function addItemAttachment(itemIndex, attachmentName, content) {
  var promise = Promise.resolve();
  // se nao tenho o orderFormId ainda, pego ele agora
  if (!this.orderFormId) {
    promise = this.getOrderForm();
  }
  return promise.then(function() {
    // aqui ja temos o orderFormId
    // aqui ficaria o codigo que temos hoje dentro da função addItemAttachment 
  });
}

klzns avatar Jul 29 '16 17:07 klzns

@brenoc faz com CoffeeScript ?

cvscarlos avatar Aug 02 '16 18:08 cvscarlos

@caljp13 por enquanto sim :+1:

klzns avatar Aug 02 '16 19:08 klzns