products.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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('eiru.pos')
  39. pos.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.item.variant_count > 1) {
  55. commit('setSelectedProduct', {
  56. product: payload.item
  57. })
  58. } else {
  59. dispatch('addToCart', {
  60. product: payload.item.variants[0]
  61. })
  62. }
  63. },
  64. selectVariant({ commit, dispatch }, payload) {
  65. commit('setSelectedProduct', {
  66. product: null
  67. })
  68. if (!payload)
  69. return
  70. dispatch('addToCart', {
  71. product: payload.data
  72. })
  73. },
  74. filterProducts({ commit }, payload) {
  75. commit('applyProductsFilter', payload)
  76. },
  77. filterVariants({ commit }, payload) {
  78. commit('applyVariantsFilter', payload)
  79. }
  80. }
  81. export default {
  82. state,
  83. getters,
  84. mutations,
  85. actions
  86. }