Skip to main content

Shop actions

The React Native SDK will allow Shop Minis to trigger existing Shop actions. Instead of building existing actions such as “favoriting”, “unfavoriting”, and “add product to bag”, Shop Minis must use the ones from the Shop app. These Shop actions can be triggered by using the useShopActions hook.

const shopActions = useShopActions()

This hook will return an object with all the available actions that you can use.

Each Shop action will return a Promise with a ShopActionResult object, which can either be a ShopActionOk or a ShopActionError, depending if the operation was completed successfuly or not. This ShopActionResult will look like this:

{
ok: boolean
data?: T
error?: Error
}

Where ok tells us if the action was successful or not. If it returns true you can use data if any was returned from the action. Otherwise, if it's false, an Error instance will be present in the error property.

Favorite a product

Favoriting a product can be done using the following Shop action. It requires three parameters.

const actionResult = await shopActions.favorite({
shopId: 'gid://shopify/Shop/1234567890',
productId: 'gid://shopify/Product/1234567890',
productVariantId: 'gid://shopify/ProductVariant/1234567890',
})

Unfavorite a product

Unfavoriting a product can be done using the following Shop action. It requires three parameters.

const actionResult = await shopActions.unfavorite({
shopId: 'gid://shopify/Shop/1234567890',
productId: 'gid://shopify/Product/1234567890',
productVariantId: 'gid://shopify/ProductVariant/1234567890',
})

Follow a store

Following a store can be done using the Shop action below. It requires one parameter:

const actionResult = await shopActions.followShop({
shopId: 'gid://shopify/Shop/1234567890'
})

Unfollow a store

Unfollowing a store can be done using the Shop action below. It requires one parameter:

const actionResult = await shopActions.unfollowShop({
shopId: 'gid://shopify/Shop/1234567890'
})

Attribute an existing order

The createOrderAttribution action allows you to initiate the attribution process when your Shop Mini adds an item to an existing order. Orders created through your Shop Mini will be automatically attributed, but if you add a line item to an existing order (e.g. post-purchase upsell) you must manually call createOrderAttribution. You should do this before adding the line item to the order or presenting the payment screen to the user. The attribution will only activate once the payment is processed. See also: Attribution.

const actionResult = await shopActions.createOrderAttribution({
orderId: 'gid://shopify/Order/123',
productVariantId: 'gid://shopify/ProductVariant/42',
})

You can optionally attach custom attribution data:

await shopActions.createOrderAttribution({
orderId: 'gid://shopify/Order/123',
productVariantId: 'gid://shopify/ProductVariant/42',
attribution: {
sourceName: 'foo',
sourceIdentifier: 'abc123',
},
})

Open the Product Detail Page

The navigateToProduct Shop action will launch the in-built Shop product detail screen (PDP). The PDP will slide on top of the Shop Mini.

const actionResult = await shopActions.navigateToProduct({
productId: 'gid://shopify/Product/1234567890',
// The variant id is optional in this context.
// If not provided, the PDP will render the default variant.
productVariantId: 'gid://shopify/ProductVariant/1234567890',
})

Start a checkout process

The navigateToCheckout Shop action will launch the in-built Shop checkout process. This Shop action can start checkout for a given shop's shopping bag or a given payment URL.

To start checkout for a given shop, pass the shop ID in action params. For example:

const actionResult = await shopActions.navigateToCheckout({
shopId: 'gid://shopify/Shop/1234567890',
})

To pass a discount code to checkout, add discountCode to the action params.

const actionResult = await shopActions.navigateToCheckout({
shopId: 'gid://shopify/Shop/1234567890',
discountCode: 'FREESHIPPING',
})

To start checkout for a given payment URL, pass the URL in action params. For example:

const actionResult = await shopActions.navigateToCheckout({
url: 'https://shop-minis-testing.myshopify.com/1234/order_payment/5678?secret=abcd1234',
})

Buy a product

The buyProduct Shop action requires three parameters.

const actionResult = await shopActions.buyProduct({
productId: 'gid://shopify/Product/1234567890',
productVariantId: 'gid://shopify/ProductVariant/1234567890',
quantity: 1,
})

There is also a fourth, optional parameter called "attribution" that allows you to add metadata to a product variant that is being purchased. See also: Attribution of line items

const actionResult = await shopActions.buyProduct({
productId: 'gid://shopify/Product/1234567890',
productVariantId: 'gid://shopify/ProductVariant/1234567890',
quantity: 1,
attribution: {
sourceName: 'some useful category',
sourceIdentifier: 'some interesting id that is associated with this event.',
},
})

Attribution of line items

The actions navigateToProduct and buyProduct allow optional line item attribution data to be set on them. This allows a Shop Mini developer to tag items that are purchased via their Shop Mini with some custom attributes that allow that order to be identified by the developer. The attribution has the following shape:

{
sourceName: "some useful category",
sourceIdentifier: "some interesting id that is associated with this event.",
}

The sourceName and sourceIdentifier are both required parameters and are free form - the Shop Mini developer is free to put any string value in there that suits their usecase. It is recommended, however, that sourceName be used to categorize the attribution and sourceIdentifier be used for specific information about the attribution. For example:

{
sourceName: "purchsed-through-product-recommendations",
sourceIdentifier: "123456",
}

This attribution shows that the product was purchased through a particular part of a Shop Mini that gives product recommendations and the particular recommendation is identified by its unique id 123456.

Error handling

When your Shop Mini reaches a recoverable or non-recoverable error state, you can use the actions showErrorToast or showErrorScreen to send feedback to the user.

Toast

showErrorToast displays a toast at the bottom of the screen with an error theme UI. It accepts an optional param to customise the error message (defaults to "Something went wrong")

Error screen

showErrorScreen will present a new screen that takes over the UI and won't allow the user to go back to the previous flow. This screen presents a title, description and a button to close the Shop Mini. Both message and title are customisable via params (message defaults to "Something has gone wrong and we are unable to load what you are looking for." and title defaults to "Whoops!").