# useCart
# Features
useCart composable can be used to:
- load cart information,
- add, update and remove items in the cart,
- applying and removing coupons,
- checking if product is already added to the cart.
# API
cart: Cart- a main data object.
type Cart = {
data: Partial<GuestCartData | UserCartData>;
products: CartItem[];
vouchers: Voucher[];
giftCards: GiftCard[];
};
load- function required to fetch cart from a server or create brand new if it doesn't exist.
load(): Promise<void>;
addItem- function for adding products to the cart. This method accepts a singleparamsobject. Theparamshas the following options:product: ProductVariantquantity: any
addItem(params: {
product: Product;
quantity: number;
}): Promise<void>;
interface Product extends ProductVariant {
type: string;
stock?: number;
images?: ProductImages[];
price?: number;
prices?: ProductPrice[];
reviews?: ProductReview[];
labels?: ProductLabel[];
categoryNodes?: Category[];
concreteProducts?: Product[];
}
updateItemQty- function for updating quantity of a product that is already in the cart. This method accepts a singleparamsobject. Theparamshas the following options:product: LineItemquantity: number
updateItemQty(params: {
product: CartItem;
quantity?: number;
}): Promise<void>;
type CartItem = {
meta: CartItemInclude;
data: CartConcreteProductAttributes;
image: string;
price: Record<'current', number> & Record<string, CartConcreteProductPrice>;
};
removeItem- function for removing a product that currently is in the cart. This method accepts a singleparamsobject. Theparamshas the following options:product: LineItem
removeItem(params: {
product: CartItem;
}): Promise<void>;
type CartItem = {
meta: CartItemInclude;
data: CartConcreteProductAttributes;
image: string;
price: Record<'current', number> & Record<string, CartConcreteProductPrice>;
};
isOnCart- function for checking if a product is currently in the cart. This method accepts a singleparamsobject. Theparamshas the following option:product: Product
isOnCart: ({ product: PRODUCT }: { product: Product }) => boolean;
interface Product extends ProductVariant {
type: string;
stock?: number;
images?: ProductImages[];
price?: number;
prices?: ProductPrice[];
reviews?: ProductReview[];
labels?: ProductLabel[];
categoryNodes?: Category[];
concreteProducts?: Product[];
}
clear- function for removing all items currently stored in cart.
clear(): Promise<void>;
applyCoupon- function for applying coupon to cart. This method accepts a singleparamsobject. Theparamshas the following options:couponCode: string
applyCoupon(params: {
couponCode: string;
}): Promise<void>;
removeCoupon- function for removing coupon applied to cart. This method accepts a singleparamsobject. Theparamshas the following options:coupon: Voucher
removeCoupon(params: {
coupon: Voucher;
}): Promise<void>;
loading: boolean- a reactive object containing information about loading state of the cart.
error: UseCartErrors- reactive object containing the error message, if some properties failed for any reason.
interface UseCartErrors {
addItem: Error;
removeItem: Error;
updateItemQty: Error;
load: Error;
clear: Error;
applyCoupon: Error;
removeCoupon: Error;
}
# Getters
getTotals- returns cart totals.getShippingPrice- returns current shipping price.getItems- returns all items from cart.getItemName- returns product name.getItemImage- returns product image.getItemPrice- returns product price.getItemQty- returns product quantity.getItemAttributes- returns product attribute.getItemSku- returns product SKU.getTotalItems- returns products amount.getFormattedPrice- returns product price with currency sign.
interface CartGetters {
getTotals: (cart: Cart) => AgnosticTotals;
getItems: (cart: Cart) => CartItem[];
getItemName: (product: CartItem) => string;
getItemImage: (product: CartItem) => string;
getItemPrice: (product: CartItem) => AgnosticPrice;
getItemQty: (product: CartItem) => number;
getItemAttributes: (
product: CartItem,
filterByAttributeName?: Array<string>,
) => Record<string, string>;
getItemSku: (product: CartItem) => string;
getTotalItems: (cart: Cart) => number;
getFormattedPrice: (price: number) => string;
getCoupons: (cart: Cart) => AgnosticCoupon[];
}
type CartItem = {
meta: CartItemInclude;
data: CartConcreteProductAttributes;
image: string;
price: Record<'current', number> & Record<string, CartConcreteProductPrice>;
};
interface AgnosticTotals {
total: number;
subtotal: number;
special?: number;
[x: string]: unknown;
}
interface AgnosticPrice {
regular: number | null;
special?: number | null;
}
interface AgnosticCoupon {
id: string;
name: string;
code: string;
value: number;
}
# Example
import { useCart, cartGetters } from '@spryker-vsf/composables';
import { onSSR } from '@vue-storefront/core';
export default {
setup() {
const { cart, removeItem, updateItemQty, load } = useCart();
onSSR(async () => {
await load();
});
return {
removeItem,
updateItemQty,
products: computed(() => cartGetters.getItems(cart.value)),
totals: computed(() => cartGetters.getTotals(cart.value)),
totalItems: computed(() => cartGetters.getTotalItems(cart.value)),
};
},
};