product.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. import {
  2. SET_PRODUCTS,
  3. SET_FILTERED_PRODUCTS,
  4. SET_LOADING_PRODUCTS,
  5. SET_SHOW_PRODUCT_FORM,
  6. SET_PRODUCT_WITH_VARIANT,
  7. ADD_PRODUCT
  8. } from '@/constants/mutationTypes'
  9. import {
  10. INIT_PRODUCTS,
  11. FILTER_PRODUCTS,
  12. SHOW_PRODUCT_FORM,
  13. HIDE_PRODUCT_FORM,
  14. SUBMIT_PRODUCT,
  15. CREATE_PRODUCT,
  16. RECEIVE_PRODUCT,
  17. SELECT_PRODUCT,
  18. ADD_TO_CART,
  19. RESET_PRODUCT
  20. } from '@/constants/actionTypes'
  21. const initialState = {
  22. products: [],
  23. filteredProducts: [],
  24. loadingProducts: false,
  25. showingProductForm: false,
  26. showVariants: false,
  27. productWithVariant: null
  28. }
  29. const state = {
  30. products: initialState.products,
  31. filteredProducts: initialState.filteredProducts,
  32. loadingProducts: !initialState.loadingProducts,
  33. showingProductForm: initialState.showingProductForm,
  34. showVariants: initialState.showVariants,
  35. productWithVariant: initialState.productWithVariant
  36. }
  37. const getters = {
  38. /**
  39. *
  40. * @param {*} state
  41. */
  42. products(state) {
  43. return state.products
  44. },
  45. /**
  46. *
  47. * @param {*} state
  48. */
  49. visibleProducts(state) {
  50. return state.filteredProducts.length === 0 ? state.products : state.filteredProducts
  51. },
  52. /**
  53. *
  54. * @param {*} state
  55. */
  56. loadingProducts(state) {
  57. return state.loadingProducts
  58. },
  59. /**
  60. *
  61. * @param {*} state
  62. */
  63. showingProductForm(state) {
  64. return state.showingProductForm
  65. },
  66. /**
  67. *
  68. * @param {*} state
  69. */
  70. showVariants(state) {
  71. return state.showVariants
  72. },
  73. /**
  74. *
  75. * @param {*} state
  76. */
  77. productWithVariant(state) {
  78. return state.productWithVariant
  79. }
  80. }
  81. const mutations = {
  82. /**
  83. *
  84. * @param {*} state
  85. * @param {*} payload
  86. */
  87. [SET_PRODUCTS] (state, payload) {
  88. state.products = payload
  89. },
  90. /**
  91. *
  92. * @param {*} state
  93. * @param {*} payload
  94. */
  95. [SET_FILTERED_PRODUCTS] (state, payload) {
  96. state.filteredProducts = [...payload]
  97. },
  98. /**
  99. *
  100. * @param {*} state
  101. * @param {*} payload
  102. */
  103. [SET_LOADING_PRODUCTS] (state, payload) {
  104. state.loadingProducts = !!payload
  105. },
  106. /**
  107. *
  108. * @param {*} state
  109. * @param {*} payload
  110. */
  111. [SET_SHOW_PRODUCT_FORM] (state, payload) {
  112. state.showingProductForm = !!payload
  113. },
  114. /**
  115. *
  116. * @param {*} state
  117. * @param {*} payload
  118. */
  119. [ADD_PRODUCT] (state, payload) {
  120. state.products = [payload, ...state.products]
  121. },
  122. /**
  123. *
  124. * @param {*} state
  125. * @param {*} payload
  126. */
  127. [SET_PRODUCT_WITH_VARIANT] (state, payload) {
  128. state.productWithVariant = payload
  129. }
  130. }
  131. const actions = {
  132. /**
  133. *
  134. * @param {*} param0
  135. * @param {*} payload
  136. */
  137. [INIT_PRODUCTS] ({ commit }, payload) {
  138. commit(SET_PRODUCTS, payload)
  139. commit(SET_LOADING_PRODUCTS)
  140. },
  141. /**
  142. *
  143. * @param {*} param0
  144. * @param {*} payload
  145. */
  146. [FILTER_PRODUCTS] ({ commit }, payload) {
  147. commit(SET_FILTERED_PRODUCTS, payload)
  148. },
  149. /**
  150. *
  151. * @param {*} param0
  152. * @param {*} payload
  153. */
  154. [SHOW_PRODUCT_FORM] ({ commit }) {
  155. commit(SET_SHOW_PRODUCT_FORM, true)
  156. },
  157. /**
  158. *
  159. * @param {*} param0
  160. */
  161. [HIDE_PRODUCT_FORM] ({ commit }) {
  162. commit(SET_SHOW_PRODUCT_FORM, false)
  163. },
  164. /**
  165. *
  166. * @param {*} param0
  167. * @param {*} payload
  168. */
  169. [SUBMIT_PRODUCT] ({ commit, dispatch }, payload) {
  170. commit(SET_LOADING_PRODUCTS, true)
  171. dispatch(CREATE_PRODUCT, payload)
  172. dispatch(HIDE_PRODUCT_FORM)
  173. },
  174. /**
  175. *
  176. * @param {*} param0
  177. * @param {*} payload
  178. */
  179. [RECEIVE_PRODUCT] ({ commit }, payload) {
  180. commit(ADD_PRODUCT, payload)
  181. commit(SET_LOADING_PRODUCTS, false)
  182. },
  183. /**
  184. *
  185. * @param {*} param0
  186. * @param {*} payload
  187. */
  188. selectProduct({ commit, dispatch }, payload) {
  189. if (!payload) {
  190. commit(SET_PRODUCT_WITH_VARIANT, null)
  191. return
  192. }
  193. if (payload.variantCount > 1) {
  194. commit(SET_PRODUCT_WITH_VARIANT, payload)
  195. return
  196. }
  197. if (!payload.variantCount) {
  198. dispatch(ADD_TO_CART, payload)
  199. commit(SET_PRODUCT_WITH_VARIANT, null)
  200. } else {
  201. dispatch(ADD_TO_CART, payload.variants[0])
  202. }
  203. },
  204. /**
  205. *
  206. * @param {*} param0
  207. */
  208. [RESET_PRODUCT] ({ commit }) {
  209. commit(SET_LOADING_PRODUCTS, true)
  210. commit(SET_PRODUCTS, [])
  211. commit(SET_FILTERED_PRODUCTS, [])
  212. }
  213. }
  214. export default {
  215. state,
  216. getters,
  217. mutations,
  218. actions
  219. }