products.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. const state = {
  2. products: [],
  3. filteredProducts: [],
  4. filteredVariants: [],
  5. selectedProduct: null
  6. }
  7. const getters = {
  8. getProducts(state) {
  9. return state.filteredProducts.length === 0 ? state.products : state.filteredProducts
  10. },
  11. getSelectedProduct(state) {
  12. return state.selectedProduct
  13. },
  14. getVariants(state) {
  15. if (!!state.selectedProduct) {
  16. return state.filteredVariants.length === 0 ? state.selectedProduct.variants : state.filteredVariants
  17. }
  18. return []
  19. }
  20. }
  21. const mutations = {
  22. pushProducts(state, payload) {
  23. state.products = [...payload.products]
  24. },
  25. setSelectedProduct(state, payload) {
  26. state.selectedProduct = payload.product
  27. },
  28. applyProductsFilter(state, payload) {
  29. state.filteredProducts = payload
  30. },
  31. applyVariantsFilter(state, payload) {
  32. state.filteredVariants = payload
  33. }
  34. }
  35. const actions = {
  36. fetchProducts ({ commit, dispatch }) {
  37. return new Promise((resolve, reject) => {
  38. let pos = new openerp.web.Model('product.template')
  39. ProductTemplate.call('get_products').then(response => {
  40. commit('pushProducts', {
  41. products: response
  42. })
  43. dispatch('loaded', {
  44. module: 'products'
  45. })
  46. resolve()
  47. }).fail(error => {
  48. console.log(error)
  49. reject(error)
  50. })
  51. })
  52. },
  53. selectProduct({ commit, dispatch }, payload) {
  54. if (payload.variant_count > 1) {
  55. commit('setSelectedProduct', {
  56. product: payload
  57. })
  58. } else {
  59. dispatch('addToCart', payload.variants[0])
  60. }
  61. },
  62. selectVariant({ commit, dispatch }, payload) {
  63. commit('setSelectedProduct', {
  64. product: null
  65. })
  66. if (!payload)
  67. return
  68. dispatch('addToCart', payload)
  69. },
  70. filterProducts({ commit }, payload) {
  71. commit('applyProductsFilter', payload)
  72. },
  73. filterVariants({ commit }, payload) {
  74. commit('applyVariantsFilter', payload)
  75. }
  76. }
  77. export default {
  78. state,
  79. getters,
  80. mutations,
  81. actions
  82. }