Skip to main content

Cart Drawer

Quero um carrinho lateral (drawer) com atualizar quantidade e checkout. Como implementar?
Referência: seu tema (adaptado do cookbook) + sections/cart-drawer-demo/ Índice: Cookbooks

Objetivo

O snippet não busca carrinho — só renderiza props do hook.

Contratos utilizados

  • Cart Contract
  • Cart resource — StorefrontCartItem
  • @corvex/theme-sdk — formatPrice
  • @corvex/runtime — SectionChrome, useCorvexCart (demo section)

Shape público (useCorvexCart)

StorefrontCartItem: id, title, name, quantity, linePrice, price, image, productVariantId. Não usar: cart.lines, productTitle, variantTitle (não públicos).

Arquivos


Snippet (UI)


Estado open/close (local)

Abrir o drawer a partir do header

O SDK não expõe uma função para abrir o drawer de outra seção. Não existe evento global de carrinho. Opções no tema:
  1. Link /cart — página dedicada (cart template)
  2. Estado React elevado — layout theme.jsx ou provider local do tema compartilha open entre header e drawer
  3. Aguardar contrato futuro — não inventar window.openCart() ou similar
O cookbook header usa link /cart por design.

Subtotal e preços

  • Hook expõe subtotal (número) — use formatPrice(subtotal) do SDK
  • Linha: item.linePrice ou item.price (contrato público)

Checkout

Redireciona via checkoutUrl persistido pelo SDK. Botão desabilitado quando items vazio ou mutating.

Acessibilidade

  • role="dialog" + aria-modal="true"
  • Botão fechar com aria-label
  • Escape fecha (handler no overlay)
  • Overlay click fecha

Edge cases


Checklist

  • useCorvexCart no parent, não no snippet de dados
  • updateQuantity / removeItem com item.id
  • Somente campos públicos de StorefrontCartItem
  • Estado open local ou elevado no tema — sem API global inventada
  • corvex validate .

Veja também