From d8d44376d193d925582a0a12373e1403df49cf63 Mon Sep 17 00:00:00 2001 From: "Adam T. Carpenter" Date: Thu, 3 Dec 2020 19:25:12 -0500 Subject: basic cart subtotaling, sidebar with total and checkout controls, better navbar cart buttons --- iridescence/src/store/index.js | 49 +++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 13 deletions(-) (limited to 'iridescence/src/store') diff --git a/iridescence/src/store/index.js b/iridescence/src/store/index.js index 48cae11..e2d970d 100644 --- a/iridescence/src/store/index.js +++ b/iridescence/src/store/index.js @@ -24,6 +24,13 @@ export default new Vuex.Store({ .includes(state.searchTerm.toLowerCase()); }) .sort(state.compare); + }, + cartTotal(state) { + let cents = state.products + .filter(p => state.cart[p.id]) + .map(p => p.cents * state.cart[p.id]) + .reduce((acc, cur) => acc + cur, 0); + return "$ " + (cents / 100).toFixed(2); } }, mutations: { @@ -34,22 +41,38 @@ export default new Vuex.Store({ state.productDetailId = id; }, cartItem(state, { id, by }) { + let newCount = 1; if (state.cart[id]) { - let newCount = (state.cart[id] += by); - if (newCount <= 0) { - // remove from cart entirely - delete state.cart[id]; - return; - } - state.cart = { - ...state.cart, - [id]: newCount - }; + newCount = state.cart[id] += by; + //if (newCount <= 0) { + // // remove from cart entirely + // delete state.cart[id]; + // return; + //} + //state.cart = { + // ...state.cart, + // [id]: newCount + } + + let cart = { + ...state.cart + }; + + if (newCount) { + cart[id] = newCount; } else { - state.cart = { - ...state.cart, - [id]: 1 + // remove entirely + delete cart[id]; + } + state.cart = cart; + }, + removeItemFromCart(state, id) { + if (state.cart[id]) { + let cart = { + ...state.cart }; + delete cart[id]; + state.cart = cart; } }, compare(state, compare) { -- cgit v1.2.3