Discuss and resolve questions on Liquid, JavaScript, themes, sales channels, and site speed enhancements.
I'm currently trying to build a custom bundle app - but I'm encountering issues with the extension's output. Unfortunately, the only docs they have for custom bundles are in Rust language - which I need to be more comfortable in for a production app. I appreciate any help/input, below I've attached the input/output/error of the extension runs and the source code of both the run.js and the run.graphql
Input
{
"cart": {
"lines": [
{
"id": "gid://shopify/CartLine/17d66918-72fc-4f23-9b67-8105c4e85e4b",
"quantity": 1,
"merchandise": {
"__typename": "ProductVariant",
"id": "gid://shopify/ProductVariant/43739736604825",
"component_reference": {
"value": "[\"gid://shopify/ProductVariant/43702370304153\",\"gid://shopify/ProductVariant/43738015236249\",\"gid://shopify/ProductVariant/43738015334553\",\"gid://shopify/ProductVariant/43738015465625\"]"
}
}
}
]
}
}
Output:
{
"operations": [
{
"merge": {
"parentVariantId": "gid://shopify/ProductVariant/43739736604825",
"cartLines": [
{
"cart_line_id": "gid://shopify/CartLine/17d66918-72fc-4f23-9b67-8105c4e85e4b",
"quantity": 1,
"merchandise_id": [
"gid://shopify/ProductVariant/gid://shopify/ProductVariant/43702370304153",
"gid://shopify/ProductVariant/gid://shopify/ProductVariant/43738015236249",
"gid://shopify/ProductVariant/gid://shopify/ProductVariant/43738015334553",
"gid://shopify/ProductVariant/gid://shopify/ProductVariant/43738015465625"
]
}
],
"title": "Mix Merge"
}
}
]
}
Error:
[
{
"path": [
"operations",
0,
"merge",
"cartLines",
0,
"cartLineId"
],
"explanation": "Expected value to not be null"
},
{
"path": [
"operations",
0,
"merge",
"cartLines",
0,
"cart_line_id"
],
"explanation": "Field is not defined on CartLineInput"
},
{
"path": [
"operations",
0,
"merge",
"cartLines",
0,
"merchandise_id"
],
"explanation": "Field is not defined on CartLineInput"
}
]
Source Run.js
// @TS-check
/**
* @typedef {import("../generated/api").RunInput} RunInput
* @typedef {import("../generated/api").FunctionRunResult} FunctionRunResult
*/
/**
* @type {FunctionRunResult}
*/
const NO_CHANGES = {
operations: [],
};
/**
* @Anonymous {RunInput} input
* @returns {FunctionRunResult}
*/
function run(input) {
const cartOperations = getExpandCartOperations(input.cart);
return {
operations: cartOperations,
};
}
function getExpandCartOperations(cart) {
const result = [];
for (const line of cart.lines) {
const variant = line.merchandise;
if (!variant || variant.__typename !== "ProductVariant") {
continue;
}
const componentReferences = getComponentReferences(variant);
if (componentReferences.length === 0) {
continue;
}
const expandedCartItems = componentReferences.map((reference) => ({
merchandise_id: `gid://shopify/ProductVariant/${reference}`,
quantity: 1,
}));
const expandOperation = {
merge: {
parentVariantId: `gid://shopify/ProductVariant/${variant.id}`,
cartLines: componentReferences.map((reference) => ({
cartLineId: line.id, // use the line id here
merchandise: {
id: `gid://shopify/ProductVariant/${reference}`,
},
quantity: 1,
})),
title: "Mix Merge",
},
};
result.push(expandOperation);
}
return result;
}
function getComponentReferences(variant) {
if (variant.component_reference) {
return JSON.parse(variant.component_reference.value);
}
return [];
}
Source run.graphql
query Input {
cart {
lines {
id
quantity
merchandise {
__typename
... on ProductVariant {
id
component_reference: metafield(
namespace: "custom"
key: "component_reference"
) {
value
}
}
}
}
}
}
Sample output should be like the one below.
{
"operations": [
{
"merge": {
"cartLines": [
{
"cartLineId": "gid://shopify/CartLine/2",
"quantity": 1
},
{
"cartLineId": "gid://shopify/CartLine/3",
"quantity": 1
},
{
"cartLineId": "gid://shopify/CartLine/4",
"quantity": 1
}
],
"parentVariantId": "gid://shopify/ProductVariant/123",
"price": {
"percentageDecrease": {
"value": 10.5
}
},
"title": "Meal Kit",
"image": {
"url": "https://cdn.shopify.com/[...]/custom-image.png"
}
}
}
]
}
Starting a B2B store is a big undertaking that requires careful planning and execution. W...
By JasonH Sep 23, 2024By investing 30 minutes of your time, you can unlock the potential for increased sales,...
By Jacqui Sep 11, 2024We appreciate the diverse ways you participate in and engage with the Shopify Communi...
By JasonH Sep 9, 2024