@techsio/storefront-data
Version:
Medusa-first storefront data layer built on TanStack Query.
27 lines (26 loc) • 1.86 kB
JavaScript
const getProductListItems = (list)=>list?.items ?? [];
const getProductListItemCount = (list)=>{
if (!list) return 0;
if ("number" == typeof list.items_count) return list.items_count;
if ("number" == typeof list.item_count) return list.item_count;
return getProductListItems(list).length;
};
const isFavoriteProductList = (list)=>list?.type === "favorite" || list?.handle === "favorites";
const getProductListItemProductId = (item)=>item.product_id ?? item.product?.id ?? null;
const getProductListItemVariantId = (item)=>item.variant_id ?? item.variant?.id ?? null;
const resolveProductListItemQuantity = (item)=>"number" == typeof item.quantity && item.quantity > 0 ? Math.floor(item.quantity) : 1;
const normalizeVariantId = (variantId)=>{
if ("string" != typeof variantId) return null;
const trimmedVariantId = variantId.trim();
return trimmedVariantId ? trimmedVariantId : null;
};
const productListItemMatchesSelection = (item, productId, variantId)=>{
if (getProductListItemProductId(item) !== productId) return false;
const requestedVariantId = normalizeVariantId(variantId);
const itemVariantId = normalizeVariantId(getProductListItemVariantId(item));
if (requestedVariantId) return itemVariantId === requestedVariantId;
return !itemVariantId;
};
const isProductInProductList = (list, productId, variantId)=>(list?.items ?? []).some((item)=>productListItemMatchesSelection(item, productId, variantId));
const findProductListItem = (list, productId, variantId)=>(list?.items ?? []).find((item)=>productListItemMatchesSelection(item, productId, variantId));
export { findProductListItem, getProductListItemCount, getProductListItemProductId, getProductListItemVariantId, getProductListItems, isFavoriteProductList, isProductInProductList, productListItemMatchesSelection, resolveProductListItemQuantity };