Commit fc725ee2 authored by Artem's avatar Artem

imporve cart controller and model methods

parent 32f811cc
......@@ -2,10 +2,9 @@
namespace App;
//use Illuminate\Database\Eloquent\Model;
use App\Product;
class Cart /*extends Model*/
class Cart
{
public function __construct()
{
......@@ -39,7 +38,6 @@ class Cart /*extends Model*/
$this->items[$id] = [
'qty' => 1
];
}
$this->updateTotalPosAmount();
......@@ -57,10 +55,6 @@ class Cart /*extends Model*/
$this->addItem($product_id);
$this->items[$product_id]['qty'] = $changed_qty;
}
$this->updateCurrentItems();
$this->updatePrices();
}
public function removeItem($id)
......
......@@ -12,16 +12,7 @@ class CartController extends Controller
{
public function index()
{
if (!Session::has('cart')) {
return view('cart');
}
$cart = Session::get('cart');
// need to take products from database because product data may change
$cart->updateCurrentItems();
return view('cart', compact('cart'));
return view('cart');
}
public function addToCart(Product $product)
......@@ -41,31 +32,23 @@ class CartController extends Controller
public function updateQtyInCart(Request $request)
{
if (!Session::has('cart')) {
return route('homepage');
$cart = new Cart();
$cart->addItem($request->productId);
Session::put('cart', $cart);
}
$cart = Session::get('cart');
$cart->updateQty($request->productId, $request->changedQty);
if (!$cart->total_qty) {
Session::forget('cart');
return route('homepage');
}
}
public function removeFromCart(Request $request)
{
$cart = Session::get('cart');
$cart->removeItem($request->productId);
if (!$cart->total_qty) {
Session::forget('cart');
return route('homepage');
if (!Session::has('cart')) {
return ['redirectLinkWhenEmpty' => route('homepage')];
}
$cart->updateCurrentItems();
$cart = Session::get('cart');
$cart->removeItem($request->productId);
}
public function clearCart()
......@@ -78,6 +61,13 @@ class CartController extends Controller
{
$cart = Session::get('cart');
if (!$cart->total_qty) {
Session::forget('cart');
return ['redirectLinkWhenEmpty' => route('homepage')];
}
$cart->updateCurrentItems();
// make array of products in order to get correct order of items in js
$cart_products = [];
foreach ($cart->items as $item) {
......
......@@ -60,17 +60,15 @@ class Cart {
productId: productId,
})
.then( (response) => {
const redirectLinkWhenCartIsEmpty = response.data;
if (redirectLinkWhenCartIsEmpty) {
window.location.replace(redirectLinkWhenCartIsEmpty);
} else {
document.querySelector('.js-cart').removeEventListener('click', this.bindedRemoveItemFromCart);
this.show();
toastr.success('Product deleted');
const redirectLinkWhenEmpty = response.data.redirectLinkWhenEmpty;
if (redirectLinkWhenEmpty) {
window.location.replace(redirectLinkWhenEmpty);
return;
}
document.querySelector('.js-cart').removeEventListener('click', this.bindedRemoveItemFromCart);
this.show();
toastr.success('Product deleted');
})
.catch(function (error) {
console.log(error);
......@@ -82,7 +80,7 @@ class Cart {
setUpdateItemQtyEventListener() {
document.querySelectorAll('.js-qty-input').forEach(changeQtyInput => {
let isChanged;
changeQtyInput.addEventListener('input', (event) => {
changeQtyInput.addEventListener('change', (event) => {
if (isChanged) {
return;
}
......@@ -97,17 +95,9 @@ class Cart {
changedQty: event.target.value,
})
.then( (response) => {
const redirectLinkWhenCartIsEmpty = response.data;
if (redirectLinkWhenCartIsEmpty) {
window.location.replace(redirectLinkWhenCartIsEmpty);
} else {
if (this.bindedRemoveItemFromCart) {
document.querySelector('.js-cart').removeEventListener('click', this.bindedRemoveItemFromCart);
}
this.show();
toastr.success('Quantity updated');
}
document.querySelector('.js-cart').removeEventListener('click', this.bindedRemoveItemFromCart);
this.show();
toastr.success('Quantity updated');
})
.catch(function (error) {
console.log(error);
......@@ -129,6 +119,12 @@ class Cart {
show() {
axios.get(this.getItemsUrl)
.then( response => {
const redirectLinkWhenEmpty = response.data.redirectLinkWhenEmpty;
if (redirectLinkWhenEmpty) {
window.location.replace(redirectLinkWhenEmpty);
return;
}
this.products = response.data.products;
this.positionsAmount = response.data.cart.total_qty;
this.totalPrice = response.data.cart.total_price;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment