From 2e4678c40a7c92a981bf67845a2888893ea9b758 Mon Sep 17 00:00:00 2001 From: Mateja Date: Sun, 25 Jul 2021 00:55:53 +0200 Subject: Boilerplate checkout cart. --- client/src/store/index.js | 28 +++++++++++++++++++++++++++- client/src/views/Checkout.vue | 30 ++++++++++++++++++++++++++++-- client/src/views/Product.vue | 6 +++++- 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/client/src/store/index.js b/client/src/store/index.js index d2fe9b7..2454977 100644 --- a/client/src/store/index.js +++ b/client/src/store/index.js @@ -3,16 +3,42 @@ import axios from 'axios'; export default createStore({ state: { - products: [] + products: [], + cart: [] }, getters: { getProducts(state) { return state.products; + }, + getCart(state) { + return state.cart; + }, + getCartSize(state) { + let sum = 0; + state.cart.forEach(x => sum += x.quantity); + return sum; + }, + getCartPrice(state) { + let sum = 0; + state.cart.forEach(x => sum += x.price * x.quantity); + return sum; } }, mutations: { setProducts(state, products) { state.products = products; + }, + addToCart(state, product) { + let foundProduct = state.cart.find(x => x.id == product._id); + if (foundProduct) + foundProduct.quantity++; + else + state.cart.push({ + id: product._id, + name: product.name, + price: product.price, + quantity: 1 + }); } }, actions: { diff --git a/client/src/views/Checkout.vue b/client/src/views/Checkout.vue index 42523ca..891597e 100644 --- a/client/src/views/Checkout.vue +++ b/client/src/views/Checkout.vue @@ -1,9 +1,35 @@ diff --git a/client/src/views/Product.vue b/client/src/views/Product.vue index 3c35b35..11643c1 100644 --- a/client/src/views/Product.vue +++ b/client/src/views/Product.vue @@ -46,7 +46,11 @@ export default { }, methods: { buy() { - + this.$store.commit('addToCart', { + _id: this.$route.params.id, + name: this.productName, + price: this.productPrice + }); } } } -- cgit v1.2.3