cart.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. const state = {
  2. cartItems: {
  3. default: [],
  4. values: []
  5. },
  6. cartTotal: {
  7. default: 0,
  8. value: 0
  9. }
  10. }
  11. const getters = {
  12. /**
  13. *
  14. * @param {*} state
  15. */
  16. cartItems(state) {
  17. return state.cartItems.values
  18. },
  19. /**
  20. *
  21. * @param {*} state
  22. */
  23. cartTotal(state) {
  24. return state.cartTotal.value
  25. }
  26. }
  27. const mutations = {
  28. /**
  29. *
  30. * @param {*} state
  31. * @param {*} payload
  32. */
  33. setCartItems(state, payload) {
  34. state.cartItems.values = [...payload]
  35. },
  36. /**
  37. *
  38. * @param {*} state
  39. * @param {*} payload
  40. */
  41. setTotal(state, payload) {
  42. state.cartTotal.value = payload
  43. },
  44. /**
  45. *
  46. * @param {*} state
  47. * @param {*} payload
  48. */
  49. addToCart(state, payload) {
  50. let productFound = state.cartItems.values.find(item => item.id === payload.id)
  51. if(productFound) {
  52. payload.qty = (payload.qty || 0) + 1
  53. return
  54. }
  55. state.cartItems.values = [payload, ...state.cartItems.values]
  56. },
  57. /**
  58. *
  59. * @param {*} state
  60. * @param {*} payload
  61. */
  62. removeFromCart(state, payload) {
  63. let foundIndex = state.cartItems.values.findIndex(item => item.id === payload.id)
  64. state.cartItems.values.splice(foundIndex, 1)
  65. },
  66. /**
  67. *
  68. * @param {*} state
  69. * @param {*} payload
  70. */
  71. decrementFromCart(state, payload) {
  72. let productFound = state.cartItems.values.find(item => item.id === payload.id)
  73. productFound.qty = productFound.qty - 1
  74. },
  75. /**
  76. *
  77. * @param {*} state
  78. */
  79. computeTotal(state) {
  80. state.cartTotal.value = state.cartItems.values.reduce((sum, item) => sum + ((item.price || item.listPrice) * (item.qty || 1)), 0)
  81. }
  82. }
  83. const actions = {
  84. /**
  85. * Add item to cart or increment item quantity if exist
  86. * @param {*} param0
  87. * @param {*} payload
  88. */
  89. addToCart({ commit }, payload) {
  90. commit('addToCart', payload)
  91. commit('computeTotal')
  92. },
  93. /**
  94. * Remove item from cart
  95. * @param {*} param0
  96. * @param {*} payload
  97. */
  98. removeFromCart({ commit }, payload) {
  99. commit('removeFromCart', payload)
  100. commit('computeTotal')
  101. },
  102. /**
  103. * Decrement item quantity from cart
  104. * @param {*} param0
  105. * @param {*} payload
  106. */
  107. decrementFromCart({ commit }, payload) {
  108. if (payload.qty > 1) {
  109. commit('decrementFromCart', payload)
  110. } else {
  111. commit('removeFromCart', payload)
  112. }
  113. commit('computeTotal')
  114. }
  115. }
  116. export default {
  117. state,
  118. getters,
  119. mutations,
  120. actions
  121. }