vue-storefront
Version:
A Vue.js, PWA eCommerce frontend
76 lines (72 loc) • 2.98 kB
JavaScript
import * as types from '../../mutation-types'
import EventBus from 'core/plugins/event-bus'
import config from 'config'
export default {
/**
* Add product to cart
* @param {Object} product data format for products is described in /doc/ElasticSearch data formats.md
*/
[types.CART_ADD_ITEM] (state, { product }) {
const record = state.cartItems.find(p => p.sku === product.sku)
if (!record) {
let item = {
...product,
qty: product.qty ? product.qty : 1
}
EventBus.$emit('cart-before-add', { product: item })
state.cartItems.push(item)
} else {
record.qty += (product.qty ? product.qty : 1)
}
},
[types.CART_SAVE] (state) {
EventBus.$emit('cart-before-save', { items: state.cartItems })
state.cartSavedAt = new Date()
},
[types.CART_DEL_ITEM] (state, { product }) {
EventBus.$emit('cart-before-delete', { items: state.cartItems })
state.cartItems = state.cartItems.filter(p => p.sku !== product.sku)
EventBus.$emit('cart-after-delete', { items: state.cartItems })
state.cartSavedAt = new Date()
},
[types.CART_UPD_ITEM] (state, { product, qty }) {
const record = state.cartItems.find(p => p.sku === product.sku)
if (record) {
EventBus.$emit('cart-before-update', { product: record })
record.qty = qty
EventBus.$emit('cart-after-update', { product: record })
state.cartSavedAt = new Date()
}
},
[types.CART_UPD_ITEM_PROPS] (state, { product }) {
let record = state.cartItems.find(p => (p.sku === product.sku || (p.server_item_id && p.server_item_id === product.server_item_id)))
if (record) {
EventBus.$emit('cart-before-itemchanged', { item: record })
record = Object.assign(record, product)
EventBus.$emit('cart-after-itemchanged', { item: record })
}
state.cartSavedAt = new Date()
},
[types.CART_UPD_SHIPPING] (state, { shippingMethod, shippingCost }) {
state.shipping.cost = shippingCost
state.shipping.code = shippingMethod
state.cartSavedAt = new Date()
},
[types.CART_LOAD_CART] (state, storedItems) {
state.cartItems = storedItems || []
state.cartIsLoaded = true
state.cartSavedAt = new Date()
EventBus.$emit('order/PROCESS_QUEUE', { config: config }) // process checkout queue
EventBus.$emit('sync/PROCESS_QUEUE', { config: config }) // process checkout queue
EventBus.$emit('application-after-loaded')
},
[types.CART_LOAD_CART_SERVER_TOKEN] (state, token) {
state.cartServerToken = token
},
[types.CART_UPD_TOTALS] (state, { itemsAfterTotals, totals, platformTotalSegments }) {
state.itemsAfterPlatformTotals = itemsAfterTotals
state.platformTotals = totals
state.platformTotalSegments = platformTotalSegments
EventBus.$emit('cart-after-updatetotals', { platformTotals: totals, platformTotalSegments: platformTotalSegments })
}
}