updateCart
Method updating an existing cart.
This method sends a POST request to the updateCart endpoint of the Vue Storefront API Middleware. In turn, it updates a cart in commercetools by sending a request to its GraphQL API. The default GraphQL query used by this method can be found here.
When the method is called with an incorrect cartVersion and commercetools API responds with the ConcurrentModification error, our Server Middleware automatically retries the failed request with the correct version. To disable that behavior, set the versionFallback to false.
This method allows for performing more complex cart updates with multiple update actions at once. For single-action updates, you should use one of the more specific SDK methods such as addProductToCart, removeProductFromCart, applyCartCoupon, removeCartCoupon, updateCartQuantity, setCartBillingAddress, setCartShippingAddress and setShippingMethod.
Signature
export declare function updateCart<Res extends PartialUpdateCartResponse = UpdateCartResponse>(
params: UpdateCartParams,
options?: MethodOptions<CustomQuery<"updateCart">>
): Promise<Res>;Parameters
| Name | Required | Type | Description |
|---|---|---|---|
params | Required | UpdateCartParams | Parameter object which can be used with this method. Refer to its type definition to learn about possible properties. |
options | Optional | MethodOptions<CustomQuery<"updateCart">> | Options that can be passed to additionally configure the request or customize the logic in a plugin. |
Returns
Returns a representation of the UpdateCartResponse.
Referenced Types
Examples
Updating cart with a single action.
import { sdk } from '~/sdk.config.ts';
const { cart } = await sdk.commerce.updateCart({
cartId: '6931b5d2-986f-4d2b-8cba-45007a26eb5e',
cartVersion: 1,
actions: [
{ addDiscountCode: { code: 'code' } }
]
});Updating cart with multiple actions.
import { sdk } from '~/sdk.config.ts';
const { cart } = await sdk.commerce.updateCart({
cartId: '6931b5d2-986f-4d2b-8cba-45007a26eb5e',
cartVersion: 1,
actions: [
{ addDiscountCode: { code: 'code' } },
{ addLineItem: { quantity: 1, sku: 'M0E20000000DHRL' } }
]
});Creating a custom GraphQL query for the method in middleware.config.js. We can use it to specify response fields as well as overwrite certain query variables.
module.exports = {
integrations: {
ct: {
// ...
customQueries: {
'update-cart-custom-query': ({ query, variables, metadata }) => ({
variables: Object.assign(variables, metadata?.variables),
query: `
mutation updateCart(
$id: String!,
$version: Long!,
$actions: [MyCartUpdateAction!]!,
$storeKey: KeyReferenceInput
) {
cart: updateMyCart(id: $id, version: $version, actions: $actions, storeKey: $storeKey) {
${metadata.fields}
}
}
`;
}
}
}
}
};Updating cart and selecting response fields using the custom GraphQL query from the previous example. Notice how we are using the type parameter to overwrite the default response interface.
import { sdk } from '~/sdk.config.ts';
type CustomUpdateCartResponse = {
cart: {
id: string;
version: string;
}
}
const { cart } = await sdk.commerce.updateCart<CustomUpdateCartResponse>({
cartId: '6931b5d2-986f-4d2b-8cba-45007a26eb5e',
cartVersion: 1,
actions: [
{ addDiscountCode: { code: 'code' } }
]
}, {
customQuery: {
updateCart: 'update-cart-custom-query',
metadata: {
fields: 'id, version'
}
}
})