UNPKG

decentralized-internet

Version:

An NPM library of programs to create decentralized web and distributed computing projects

78 lines (69 loc) 2.07 kB
import { randomObjectId } from '@ecomplus/utils' import fixItemQuantity from './../lib/fix-item-quantity' import fixSubtotal from './../lib/fix-subtotal' /** * @method * @name EcomCart#addItem * @description Push new item to cart data and save. * * @param {object} newItem - New cart item object valid for * {@link https://developers.e-com.plus/docs/api/#/store/carts/carts E-Com Plus `cart.items`} * @param {boolean} [canSave=true] - Save cart data * * @returns {object|null} Returns the saved item object (with `_id`) or null * when new item object is invalid. * * @example ecomCart.addItem({ _id: '12300000000000000000000f', product_id: '123a5432109876543210cdef', sku: 's-MP_2B4', name: 'Mens Pique Polo Shirt', quantity: 4, price: 42.9, keep_item_price: false }) */ export default ({ data, save }, emitter, [newItem, canSave = false]) => { if ( typeof newItem.product_id !== 'string' || typeof newItem.quantity !== 'number' || !(newItem.quantity >= 0) || typeof newItem.price !== 'number' || !(newItem.price >= 0) ) { return null } let fixedItem for (let i = 0; i < data.items.length; i++) { const item = data.items[i] if (item.product_id === newItem.product_id && item.variation_id === newItem.variation_id) { item.quantity += newItem.quantity if (newItem.price) { item.price = newItem.price } if (newItem.final_price) { item.final_price = newItem.final_price } fixedItem = fixItemQuantity(item) } } if (!fixedItem) { if (!newItem._id) { newItem._id = randomObjectId() } data.items.push(newItem) fixedItem = fixItemQuantity(newItem) } fixSubtotal(data) /** * @event EcomCart#addItem * @type {object} * @property {object} data - Shopping cart data * @property {object} item - Item added to cart * @example ecomCart.on('addItem', ({ data, item }) => { console.log(data, item) }) */ emitter.emit('addItem', { data, item: fixedItem }) if (canSave) { save(false) } return fixedItem }