cart.js 4.9 KB

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