setInternalProperties es cómo le dices al carrito que son una sola cosa.
Cómo funciona la agrupación
Estas van a través de
setInternalProperties, no a través de Shopify. Son una superposición de solo renderizado: nunca llegan a properties, nunca se persisten en Shopify y nunca aparecen en el pedido.
Paso 1: descubre qué escribe tu app
_) que contiene un ID, una referencia o el nombre del bundle. Algo como _bundle_id, _bundle_ref o _parent_id es típico. Anota la clave exacta, y si una línea está marcada como el producto principal.
Paso 2: mapéala a las propiedades canónicas
Si tu app no marca un producto principal, omite
_aftersell_cart_bundle_role por completo. El carrito elige un ancla por ti.Qué obtienes
bundle y el drawer renderiza el bundle como un solo artículo:
- Los hijos se anidan bajo el ancla en lugar de aparecer como filas separadas.
- La cantidad es atómica. Cambiar la cantidad del bundle escala todos los miembros juntos, usando la proporción
perAnchorQtyde cada hijo, así que un bundle con dos unidades de un componente mantiene esa relación de dos a uno. - La eliminación es atómica. Eliminar el bundle elimina cada línea miembro en una sola solicitud, en lugar de dejar componentes huérfanos.
- Una sola fila de precio. Lo que muestra sigue la configuración de bundle price en el bloque Cart items: el total de todos los miembros, o solo el precio del producto principal.
Cómo se elige el ancla
- La línea con
_aftersell_cart_bundle_roleestablecida enparent. - De lo contrario, el miembro de precio más alto.
- De lo contrario, el primer miembro en el carrito.
Reglas que vale la pena conocer
- Un bundle necesita al menos dos líneas. Una sola línea que lleva un ID de bundle se deja en paz y se renderiza normalmente.
- Los bundles nativos de Shopify ya están manejados. Las líneas que el propio Shopify marca como componentizadas son omitidas por esta agrupación y se adaptan automáticamente. Solo necesitas esto para apps que agregan líneas separadas.
- La transformación se ejecuta en cada renderizado. Mantenla barata y libre de efectos secundarios. No llames a acciones ni hagas fetch desde dentro.
- La fusión es aditiva. Tus propiedades se fusionan con las establecidas por otra transformación. En un conflicto genuino sobre la misma clave, gana la transformación registrada al último.
- La agrupación se ejecuta después de ocultar y renombrar, y antes de ordenar. Así que una línea que ocultas con
setHiddennunca se convierte en parte de un bundle, y un comparador ve el ancla, no los hijos.
Leer un bundle de vuelta
bundle.memberKeys, que contiene la key de cada miembro incluida el ancla.
Usarlo para otras cosas
setInternalProperties, pero la superposición es un canal general para datos de solo renderizado que derivas de una línea. Cualquier cosa que pongas ahí es legible en line.internalProperties y en un bloque Custom code, sin tocar el carrito real:
properties[...] en el formulario del producto para que llegue a Shopify sin importar quién realice el agregado.
Adónde ir después
registerLineTransform: el hook a través del cual esto se ejecuta.- Objeto cart: la forma de
bundley sus hijos. - Bloque Cart items: la configuración de bundle price.