setInternalProperties é como você diz ao carrinho que elas são uma coisa só.
Como o agrupamento funciona
Elas passam por
setInternalProperties, não pela Shopify. Elas são uma camada só de renderização: nunca chegam a properties, nunca são persistidas na Shopify e nunca aparecem no pedido.
Passo 1: descubra o que seu app escreve
_) contendo um ID, uma referência ou o nome do bundle. Algo como _bundle_id, _bundle_ref ou _parent_id é típico. Anote a chave exata e se uma linha está marcada como o produto principal.
Passo 2: mapeie para as propriedades canônicas
Se seu app não marca um produto principal, deixe
_aftersell_cart_bundle_role de fora por completo. O carrinho escolhe uma âncora para você.O que você ganha
bundle e o drawer renderiza o bundle como um único item:
- Os filhos ficam aninhados sob a âncora em vez de aparecer como linhas separadas.
- A quantidade é atômica. Alterar a quantidade do bundle escala todos os membros juntos, usando a proporção
perAnchorQtyde cada filho, então um bundle com dois de um componente mantém essa relação de dois para um. - A remoção é atômica. Remover o bundle remove todas as linhas membro em uma única requisição, em vez de deixar componentes órfãos para trás.
- Uma única linha de preço. O que ela mostra segue a configuração de preço do bundle no bloco Cart items: o total de todos os membros, ou apenas o preço do produto principal.
Como a âncora é escolhida
- A linha com
_aftersell_cart_bundle_roledefinido comoparent. - Caso contrário, o membro de maior preço.
- Caso contrário, o primeiro membro no carrinho.
Regras que vale a pena conhecer
- Um bundle precisa de pelo menos duas linhas. Uma única linha com um ID de bundle é deixada em paz e renderiza normalmente.
- Bundles nativos da Shopify já são tratados. Linhas que a própria Shopify marca como componentizadas são ignoradas por este agrupamento e adaptadas automaticamente. Você só precisa disto para apps que adicionam linhas separadas.
- O transform executa em toda renderização. Mantenha-o leve e livre de efeitos colaterais. Não chame ações nem faça fetch de dentro dele.
- A mesclagem é aditiva. Suas propriedades se mesclam com quaisquer definidas por outro transform. Em um conflito genuíno pela mesma chave, o último transform registrado vence.
- O agrupamento executa depois de ocultar e renomear, e antes da ordenação. Então uma linha que você oculta com
setHiddennunca vira parte de um bundle, e um comparator vê a âncora, não os filhos.
Lendo um bundle de volta
bundle.memberKeys, que contém a key de cada membro, incluindo a âncora.
Usando para outras coisas
setInternalProperties foi construído, mas a camada é um canal geral para dados só de renderização que você deriva de uma linha. Qualquer coisa que você colocar lá é legível em line.internalProperties e em um bloco Custom code, sem tocar no carrinho real:
properties[...] oculto no formulário do produto para que chegue ao Shopify seja quem for que realize a adição.
Para onde ir a seguir
registerLineTransform: o hook pelo qual isto executa.- Cart object: o formato de
bundlee seus filhos. - Cart items block: a configuração de preço do bundle.