Skip to main content
Ações leem e alteram o carrinho. Elas ficam em window.aftersell.cart.actions.
Ações são executadas depois que o carrinho está pronto, dentro de ready() ou de um handler de evento.
Antes de o carrinho carregar, as ações são stubs. Cada uma registra um aviso no console nomeando a ação, por exemplo cart.actions.addItem() called before the cart loaded, e não faz nada. As ações assíncronas ainda resolvem uma Promise, então uma cadeia .then() roda normalmente em vez de lançar um erro; getCart() retorna null e formatMoney() retorna uma string vazia.Nada quebra se você chamar uma cedo demais, mas nada acontece também. Fique de olho no console procurando esse aviso quando uma ação parecer não fazer nada.

Todas as ações

Chamar uma ação de dentro de um handler de cart_updated pode criar um loop. Leia as duas regras primeiro.

Drawer

open e close

Abrem ou fecham o cart drawer. Ambas são síncronas e não recebem argumentos.

Leitura

getCart()

Retorna o objeto de carrinho atual, ou null antes de ele ter carregado. O resultado é uma cópia, então mutá-lo não altera o carrinho real.
Como é um snapshot, não guarde o resultado; leia-o de novo cada vez que precisar de dados atuais. Em um handler de evento você já tem o carrinho atualizado como payload, então getCart() é redundante ali.

formatMoney(cents)

Formata um valor em unidades menores usando o formato de moeda da sua loja. Todo preço no SDK está em centavos, então é assim que você transforma um deles em algo exibível.
Substitua o formato com configure({ money_format }).

Alterando o carrinho

As ações de item identificam uma linha pelo seu key do Shopify, não pelo ID da variante, porque um carrinho pode conter a mesma variante em várias linhas com propriedades diferentes. Leia-o em getCart().items[n].key.

addItem(variantId, quantity?)

Adiciona uma variante ao carrinho. quantity tem padrão 1. Resolve quando o carrinho estabiliza.
Adicionar uma variante que já está no carrinho aumenta a quantidade daquela linha em vez de criar uma segunda linha, desde que a linha existente não tenha propriedades de item de linha. Uma linha com propriedades é uma linha distinta, então você recebe uma nova.

removeItem(key)

Remove uma linha inteiramente.

updateItemQuantity(key, quantity)

Define a quantidade de uma linha. Passar 0 remove a linha.
Esse segundo exemplo é seguro para rodar em cart_updated porque a verificação > 1 é falsa na segunda passagem. Veja as duas regras.

replaceLineVariant(key, variantId)

Troca a variante de uma linha mantendo a quantidade e as propriedades. Útil para um seletor de tamanho ou sabor dentro do carrinho.
O selling plan da linha é redefinido em uma troca. Uma linha de assinatura vira uma compra única, a menos que você reaplique um plano.
A troca é uma adição seguida de uma remoção, não uma edição no lugar, então o resultado é uma linha nova: ela recebe um novo key e vai para o final do carrinho. Releia getCart() depois, em vez de reutilizar o key que você passou.

Atualização

refresh()

Rebusca o carrinho no Shopify. Use-o depois que algo fora do SDK alterou o carrinho e o drawer não percebeu.
Na maior parte do tempo você não precisa disso, já que o Aftersell escuta os eventos padrão de carrinho do Shopify e rebusca sozinho. Recorra a ele quando uma integração personalizada passar por fora deles.

visualRefresh()

Reexecuta os transforms de renderização sem rebuscar o carrinho no Shopify. Você raramente precisa dele: registrar (ou desregistrar) um line transform, comparator, enricher ou qualquer um dos hooks de assinatura dispara um para você. Apenas os dois hooks de adicionar ao carrinho não disparam, já que não mudam nada que já está na tela. Recorra a ele quando algo de que um transform depende muda, mas o carrinho em si não:

Observações e casos extremos

  • Ações assíncronas resolvem quando a alteração estabiliza. Aguardar uma delas permite sequenciar trabalho depois que o carrinho realmente foi atualizado.
  • getCart() retorna uma cópia. Mutá-la não faz nada no carrinho real.
  • Não há ação para códigos de desconto. Códigos aplicados são legíveis no carrinho (discountCodes, totalDiscount) e por linha (discountAllocations); os compradores os aplicam pelo bloco Discount code.
  • Não há ação para atributos ou notas do carrinho. Atributos são legíveis no objeto de carrinho; os compradores escrevem notas pelo bloco Notes.
  • Para ocultar uma linha em vez de removê-la, use registerLineTransform. Remover altera o total do comprador; ocultar não.

Para onde ir agora

  • Objeto de carrinho: o que getCart() devolve.
  • Eventos: quando executar essas ações.
  • Hooks: mude como uma linha é renderizada em vez de mudar o carrinho.
  • Casos de uso: soluções completas para pedidos comuns.