const state = { products: [], filteredProducts: [], filteredVariants: [], selectedProduct: null } const getters = { getProducts(state) { return state.filteredProducts.length === 0 ? state.products : state.filteredProducts }, getSelectedProduct(state) { return state.selectedProduct }, getVariants(state) { if (!!state.selectedProduct) { return state.filteredVariants.length === 0 ? state.selectedProduct.variants : state.filteredVariants } return [] } } const mutations = { pushProducts(state, payload) { state.products = [...payload.products] }, setSelectedProduct(state, payload) { state.selectedProduct = payload.product }, applyProductsFilter(state, payload) { state.filteredProducts = payload }, applyVariantsFilter(state, payload) { state.filteredVariants = payload } } const actions = { fetchProducts ({ commit, dispatch }) { return new Promise((resolve, reject) => { let pos = new openerp.web.Model('product.template') ProductTemplate.call('get_products').then(response => { commit('pushProducts', { products: response }) dispatch('loaded', { module: 'products' }) resolve() }).fail(error => { console.log(error) reject(error) }) }) }, selectProduct({ commit, dispatch }, payload) { if (payload.variant_count > 1) { commit('setSelectedProduct', { product: payload }) } else { dispatch('addToCart', payload.variants[0]) } }, selectVariant({ commit, dispatch }, payload) { commit('setSelectedProduct', { product: null }) if (!payload) return dispatch('addToCart', payload) }, filterProducts({ commit }, payload) { commit('applyProductsFilter', payload) }, filterVariants({ commit }, payload) { commit('applyVariantsFilter', payload) } } export default { state, getters, mutations, actions }