cart.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. import {
  2. SET_CART,
  3. PUSH_TO_CART,
  4. PULL_FROM_CART,
  5. SET_CART_TOTAL,
  6. SET_ITEM_TO_DISCOUNT,
  7. SET_ITEM_PRICE
  8. } from '@/constants/mutationTypes'
  9. import {
  10. ADD_TO_CART,
  11. DECREASE_FROM_CART,
  12. CHANGE_PRICE,
  13. APPLY_PRICE,
  14. REMOVE_FROM_CART,
  15. CHANGE_CART_TOTAL,
  16. RESET_CART
  17. } from '@/constants/actionTypes'
  18. const initialState = {
  19. cartItems: [],
  20. cartTotal: 0,
  21. itemToDiscount: null
  22. }
  23. const state = {
  24. cartItems: initialState.cartItems,
  25. cartTotal: initialState.cartTotal,
  26. itemToDiscount: null
  27. }
  28. const getters = {
  29. /**
  30. *
  31. * @param {*} state
  32. */
  33. cartItems(state) {
  34. return state.cartItems
  35. },
  36. /**
  37. *
  38. * @param {*} state
  39. */
  40. cartTotal(state) {
  41. return state.cartTotal
  42. },
  43. /**
  44. *
  45. * @param {*} state
  46. */
  47. itemToDiscount(state) {
  48. return state.itemToDiscount
  49. }
  50. }
  51. const mutations = {
  52. /**
  53. *
  54. * @param {*} state
  55. * @param {*} payload
  56. */
  57. [SET_CART] (state, payload) {
  58. state.cartItems = payload
  59. },
  60. /**
  61. *
  62. * @param {*} state
  63. * @param {*} payload
  64. */
  65. [PUSH_TO_CART] (state, payload) {
  66. let productFound = state.cartItems.find(item => item.id === payload.id)
  67. if (productFound) {
  68. if (payload.quantity > 1) {
  69. if (productFound.quantity === payload.quantity) {
  70. productFound.quantity = productFound.quantity + 1
  71. } else {
  72. productFound.quantity = payload.quantity
  73. }
  74. } else {
  75. productFound.quantity = productFound.quantity + payload.quantity
  76. }
  77. return
  78. }
  79. state.cartItems = [payload, ...state.cartItems]
  80. },
  81. /**
  82. *
  83. * @param {*} state
  84. * @param {*} payload
  85. */
  86. [PULL_FROM_CART] (state, payload) {
  87. let productFoundIndex = state.cartItems.findIndex(item => item.id === payload.item.id)
  88. if (state.cartItems[productFoundIndex].quantity === 1) {
  89. payload.mode = 'full'
  90. }
  91. if (payload.mode === 'partial') {
  92. if (payload.item.quantity !== -1) {
  93. state.cartItems[productFoundIndex].quantity = payload.item.quantity
  94. } else {
  95. state.cartItems[productFoundIndex].quantity = state.cartItems[productFoundIndex].quantity - 1
  96. }
  97. } else {
  98. state.cartItems.splice(productFoundIndex, 1)
  99. }
  100. },
  101. /**
  102. *
  103. * @param {*} state
  104. * @param {*} payload
  105. */
  106. [SET_CART_TOTAL] (state, payload) {
  107. state.cartTotal = payload
  108. },
  109. /**
  110. *
  111. * @param {*} state
  112. * @param {*} payload
  113. */
  114. [SET_ITEM_TO_DISCOUNT] (state, payload) {
  115. state.itemToDiscount = payload
  116. },
  117. /**
  118. *
  119. * @param {*} state
  120. * @param {*} payload
  121. */
  122. [SET_ITEM_PRICE] (state, payload) {
  123. let foundProduct = state.cartItems.find(item => item.id === state.itemToDiscount.id)
  124. foundProduct.price = payload
  125. }
  126. }
  127. const actions = {
  128. /**
  129. *
  130. * @param {*} param0
  131. * @param {*} payload
  132. */
  133. [ADD_TO_CART] ({ commit }, payload) {
  134. commit(PUSH_TO_CART, payload)
  135. },
  136. /**
  137. *
  138. * @param {*} param0
  139. * @param {*} payload
  140. */
  141. [DECREASE_FROM_CART] ({ commit }, payload) {
  142. commit(PULL_FROM_CART, {
  143. item: payload,
  144. mode: 'partial'
  145. })
  146. },
  147. /**
  148. *
  149. * @param {*} param0
  150. * @param {*} payload
  151. */
  152. [CHANGE_PRICE] ({ commit }, payload) {
  153. commit(SET_ITEM_TO_DISCOUNT, payload)
  154. },
  155. /**
  156. *
  157. * @param {*} param0
  158. * @param {*} payload
  159. */
  160. [APPLY_PRICE] ({ commit }, payload) {
  161. if (payload) {
  162. commit(SET_ITEM_PRICE, payload)
  163. }
  164. commit(SET_ITEM_TO_DISCOUNT, null)
  165. },
  166. /**
  167. *
  168. * @param {*} param0
  169. * @param {*} payload
  170. */
  171. [REMOVE_FROM_CART] ({ commit }, payload) {
  172. commit(PULL_FROM_CART, {
  173. item: payload,
  174. mode: 'full'
  175. })
  176. },
  177. /**
  178. *
  179. * @param {*} param0
  180. * @param {*} payload
  181. */
  182. [CHANGE_CART_TOTAL] ({ commit }, payload) {
  183. commit(SET_CART_TOTAL, payload)
  184. },
  185. /**
  186. *
  187. * @param {*} param0
  188. * @param {*} payload
  189. */
  190. [RESET_CART] ({ commit }) {
  191. commit(SET_CART, [])
  192. commit(SET_CART_TOTAL, 0)
  193. }
  194. }
  195. export default {
  196. state,
  197. getters,
  198. mutations,
  199. actions
  200. }