Product Card
Quero um card de produto reutilizável para grids e listagens. Qual é a implementação recomendada?Referência:
seu tema (adaptado do cookbook) + sections/product-card/
Índice: Cookbooks
Contratos utilizados
- Product Contract — ProductSummary (campos do card)
- Section Contract
- Snippet Contract
- Data Contract —
defineSectionData - Field
product_list— valor =string[](UUID do produto) @corvex/runtime— PUBLIC_EDITOR_INTEGRATION:SectionChromeapenas
Contrato de dados do Product Card (público)
Campos oficialmente utilizáveis no snippet (ProductSummary / Product):
Não usar no card:
name (deprecated), stock, featured, reviewSummary nem o objeto de preço cru da API. Use title, availableForSale, price.formatted e featuredImage do contrato de produto.
Badge de promoção: compareAtPrice.amount > price.amount (valores públicos Money.amount).
Helpers SDK (getProductImage, getProductPrice) existem mas fazem fallback em campos não públicos — este cookbook usa somente featuredImage e price.formatted.
Separação de camadas
Resolução de dados
product_list persiste UUIDs (string[]). Resolver com API pública:
storefront.products.get(ref) aceita id ou handle (API pública StorefrontClient).
Loading: a runtime injeta data quando o loader termina; até então a section pode não renderizar (wrapper withSectionData). Empty/error são tratados na section com mensagens explícitas.
Snippet (UI)
- Link envolve o card (
product.url) - Fallback visual sem
featuredImage - Compare-at e badge só quando
compareAtPrice>price availableForSale === false→ badge esgotado (sem CTA de carrinho neste cookbook)
Section (grid responsivo)
Settings:title, products (product_list), showSaleBadge, saleBadgeLabel, columns (2–4 desktop).
CSS: grid 2 colunas mobile; columns via --product-card-columns em breakpoint 640px+.
Estados
Checklist
- Snippet importado via
@corvex/snippets/product-card - Resolução com
storefront.products.get(não inventar fetch) - Somente campos ProductSummary públicos
- Sem hooks de editor no snippet
-
corvex validate .