117 lines
2.7 KiB
JavaScript
117 lines
2.7 KiB
JavaScript
import Vue from "vue";
|
|
import { isEmpty } from "./functions";
|
|
|
|
export default {
|
|
state: Vue.observable({
|
|
cart: FleetCart.cart,
|
|
wishlist: FleetCart.wishlist,
|
|
compareList: FleetCart.compareList,
|
|
coupon: {},
|
|
}),
|
|
|
|
cartIsEmpty() {
|
|
return isEmpty(this.state.cart.items);
|
|
},
|
|
|
|
updateCart(cart) {
|
|
this.state.cart = cart;
|
|
|
|
this.setCoupon(cart);
|
|
},
|
|
|
|
removeCartItem(cartItem) {
|
|
Vue.delete(this.state.cart.items, cartItem.id);
|
|
},
|
|
|
|
clearCart() {
|
|
this.state.cart.items = {};
|
|
},
|
|
|
|
hasShippingMethod() {
|
|
return (
|
|
Object.keys(this.state.cart.availableShippingMethods).length !== 0
|
|
);
|
|
},
|
|
|
|
hasCoupon() {
|
|
return this.state.cart.coupon.hasOwnProperty("code");
|
|
},
|
|
|
|
getCoupon() {
|
|
return this.state.cart.coupon.code;
|
|
},
|
|
|
|
setCoupon(cart) {
|
|
if (cart.coupon.code) {
|
|
this.state.cart.coupon = cart.coupon;
|
|
}
|
|
},
|
|
|
|
compareCount() {
|
|
return this.state.compareList.length;
|
|
},
|
|
|
|
wishlistCount() {
|
|
return this.state.wishlist.length;
|
|
},
|
|
|
|
inWishlist(productId) {
|
|
return this.state.wishlist.includes(productId);
|
|
},
|
|
|
|
syncWishlist(productId) {
|
|
if (this.inWishlist(productId)) {
|
|
this.removeFromWishlist(productId);
|
|
} else {
|
|
this.addToWishlist(productId);
|
|
}
|
|
},
|
|
|
|
async addToWishlist(productId) {
|
|
if (FleetCart.loggedIn) {
|
|
this.state.wishlist.push(productId);
|
|
} else {
|
|
return (window.location.href = route("login"));
|
|
}
|
|
|
|
await axios.post(route("wishlist.store"), {
|
|
productId,
|
|
});
|
|
},
|
|
|
|
removeFromWishlist(productId) {
|
|
this.state.wishlist.splice(this.state.wishlist.indexOf(productId), 1);
|
|
|
|
axios.delete(route("wishlist.destroy", { productId }));
|
|
},
|
|
|
|
inCompareList(productId) {
|
|
return this.state.compareList.includes(productId);
|
|
},
|
|
|
|
syncCompareList(productId) {
|
|
if (this.inCompareList(productId)) {
|
|
this.removeFromCompareList(productId);
|
|
} else {
|
|
this.addToCompareList(productId);
|
|
}
|
|
},
|
|
|
|
addToCompareList(productId) {
|
|
this.state.compareList.push(productId);
|
|
|
|
axios.post(route("compare.store"), {
|
|
productId,
|
|
});
|
|
},
|
|
|
|
async removeFromCompareList(productId) {
|
|
this.state.compareList.splice(
|
|
this.state.compareList.indexOf(productId),
|
|
1
|
|
);
|
|
|
|
await axios.delete(route("compare.destroy", { productId }));
|
|
},
|
|
};
|