123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import shop from '../../api/shop'
- import * as types from '../mutation-types'
- // initial state
- // shape: [{ id, quantity }]
- const state = {
- added: [],
- checkoutStatus: null
- }
- // getters
- const getters = {
- checkoutStatus: state => state.checkoutStatus
- }
- // actions
- const actions = {
- checkout ({ commit, state }, products) {
- const savedCartItems = [...state.added]
- commit(types.CHECKOUT_REQUEST)
- shop.buyProducts(
- products,
- () => commit(types.CHECKOUT_SUCCESS),
- () => commit(types.CHECKOUT_FAILURE, { savedCartItems })
- )
- }
- }
- // mutations
- const mutations = {
- [types.ADD_TO_CART] (state, { id }) {
- state.lastCheckout = null
- const record = state.added.find(p => p.id === id)
- if (!record) {
- state.added.push({
- id,
- quantity: 1
- })
- } else {
- record.quantity++
- }
- },
- [types.CHECKOUT_REQUEST] (state) {
- // clear cart
- state.added = []
- state.checkoutStatus = null
- },
- [types.CHECKOUT_SUCCESS] (state) {
- state.checkoutStatus = 'successful'
- },
- [types.CHECKOUT_FAILURE] (state, { savedCartItems }) {
- // rollback to the cart saved before sending the request
- state.added = savedCartItems
- state.checkoutStatus = 'failed'
- }
- }
- export default {
- state,
- getters,
- actions,
- mutations
- }
|