product.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. const state = {
  2. products: [],
  3. loadingProducts: true,
  4. filteredProducts: [],
  5. productWithVariant: null
  6. }
  7. const getters = {
  8. products(state) {
  9. return state.products
  10. },
  11. visibleProducts(state) {
  12. return state.filteredProducts.length === 0 ? state.products : state.filteredProducts
  13. },
  14. variants(_, getters) {
  15. return getters.products.flatMap(p => p.variants)
  16. },
  17. productWithVariant(state) {
  18. return state.productWithVariant
  19. },
  20. showProductForm(state) {
  21. return !!state.productWithVariant
  22. },
  23. loadingProducts(state) {
  24. return state.loadingProducts
  25. }
  26. }
  27. const mutations = {
  28. setProducts(state, payload) {
  29. state.products = [...payload]
  30. },
  31. setProductWithVariant(state, payload) {
  32. state.productWithVariant = payload
  33. },
  34. setFilteredProducts(state, payload) {
  35. state.filteredProducts = [...payload]
  36. },
  37. setLoadingProducts(state, payload) {
  38. state.loadingProducts = !!payload
  39. }
  40. }
  41. const actions = {
  42. initProducts({ commit }, payload) {
  43. commit('setProducts', payload)
  44. commit('setLoadingProducts', false)
  45. },
  46. selectProduct({ commit, dispatch }, payload) {
  47. if(!payload) {
  48. commit('setProductWithVariant', null)
  49. return
  50. }
  51. if (payload.variantCount > 1) {
  52. commit('setProductWithVariant', payload)
  53. return
  54. }
  55. if (!payload.variantCount) {
  56. dispatch('addToCart', payload)
  57. commit('setProductWithVariant', null)
  58. } else {
  59. dispatch('addToCart', payload.variants[0])
  60. }
  61. },
  62. filterProducts({ commit }, payload) {
  63. commit('setFilteredProducts', payload)
  64. },
  65. selectProductVariant({ commit, dispatch }, payload) {
  66. commit('setProductVariant', null)
  67. if (!payload) return
  68. dispatch('addToCart', payload)
  69. },
  70. showProductForm({ commit }) {
  71. commit('setShowProductForm', true)
  72. },
  73. hideProductForm({ commit }) {
  74. commit('setShowProductForm', false)
  75. },
  76. submitProduct({ commit, dispatch }, payload) {
  77. if (payload) {
  78. if (!payload.name || !payload.price) {
  79. dispatch('notify', 'Complete los campos para guardar')
  80. return
  81. }
  82. commit('setLoadingProducts', true)
  83. dispatch('createProduct', payload)
  84. }
  85. dispatch('hideProductForm')
  86. },
  87. addProduct({ commit }, payload) {
  88. commit('addProduct', payload)
  89. commit('setLoadingProducts', false)
  90. },
  91. resetProduct({ commit }) {
  92. commit('setLoadingProducts', true)
  93. commit('setProducts', [])
  94. commit('setFilteredProducts', [])
  95. }
  96. }
  97. export default {
  98. state,
  99. getters,
  100. mutations,
  101. actions
  102. }