diff --git a/client/src/app/basket/basket.component.html b/client/src/app/basket/basket.component.html
index 1d66a75..3eb0fb2 100644
--- a/client/src/app/basket/basket.component.html
+++ b/client/src/app/basket/basket.component.html
@@ -44,15 +44,15 @@
{{item.price | currency}} |
-
+
{{item.quantity}}
-
+
|
{{item.price * item.quantity | currency}} |
-
+
|
diff --git a/client/src/app/basket/basket.component.ts b/client/src/app/basket/basket.component.ts
index 42690f4..b47ea86 100644
--- a/client/src/app/basket/basket.component.ts
+++ b/client/src/app/basket/basket.component.ts
@@ -1,6 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
-import { IBasket } from '../shared/models/baskset';
+import { IBasket, IBasketItem } from '../shared/models/baskset';
import { BasketService } from './basket.service';
@Component({
@@ -17,4 +17,16 @@ export class BasketComponent implements OnInit {
this.basket$ = this.basketService.basket$;
}
+ removeBasketItem(item: IBasketItem){
+ this.basketService.removeItemFromBasket(item);
+ }
+
+ incrementItemQuantity(item: IBasketItem){
+ this.basketService.incrementItemQuantity(item);
+ }
+
+ decrementItemQuantity(item: IBasketItem){
+ this.basketService.decrementItemQuantity(item);
+ }
+
}
diff --git a/client/src/app/basket/basket.service.ts b/client/src/app/basket/basket.service.ts
index 8657dd0..04b0695 100644
--- a/client/src/app/basket/basket.service.ts
+++ b/client/src/app/basket/basket.service.ts
@@ -48,6 +48,48 @@ export class BasketService {
this.setBasket(basket);
}
+ incrementItemQuantity(item: IBasketItem){
+ const basket = this.getCurrentBasketValue();
+ const foundItemIndex = basket.items.findIndex(x => x.id === item.id);
+ basket.items[foundItemIndex].quantity++;
+ this.setBasket(basket);
+ }
+
+ decrementItemQuantity(item: IBasketItem){
+ const basket = this.getCurrentBasketValue();
+ const foundItemIndex = basket.items.findIndex(x => x.id === item.id);
+ if (basket.items[foundItemIndex].quantity > 1){
+ basket.items[foundItemIndex].quantity--;
+ this.setBasket(basket);
+ } else {
+ this.removeItemFromBasket(item);
+ }
+ }
+
+ removeItemFromBasket(item: IBasketItem) {
+ const basket = this.getCurrentBasketValue();
+ if(basket.items.some(x => x.id === item.id)) {
+ basket.items = basket.items.filter(i => i.id !== item.id);
+ if (basket.items.length > 0){
+ this.setBasket(basket);
+ } else {
+ this.deleteBasket(basket);
+ }
+ }
+ }
+
+ deleteBasket(basket: IBasket) {
+ return this.http.delete(this.baseUrl + 'basket?id=' + basket.id).subscribe({
+ next: () => {
+ this.basketSource.next(null);
+ this.basketTotalSource.next(null);
+ localStorage.removeItem('basket_id');
+ },
+ error: (e: any) => { console.log(e) },
+ complete: () => { console.log('Complete') }
+ });
+ }
+
private calculateTotals(){
const basket = this.getCurrentBasketValue();
const shipping = 0;
diff --git a/client/src/app/shop/product-details/product-details.component.html b/client/src/app/shop/product-details/product-details.component.html
index 33604e2..282c95c 100644
--- a/client/src/app/shop/product-details/product-details.component.html
+++ b/client/src/app/shop/product-details/product-details.component.html
@@ -7,10 +7,10 @@
{{product.name}}
{{product.price | currency}}
-
- 2
-
-
+
+ {{quantity}}
+
+
diff --git a/client/src/app/shop/product-details/product-details.component.ts b/client/src/app/shop/product-details/product-details.component.ts
index e4de7d4..d8da78f 100644
--- a/client/src/app/shop/product-details/product-details.component.ts
+++ b/client/src/app/shop/product-details/product-details.component.ts
@@ -1,5 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
+import { BasketService } from 'src/app/basket/basket.service';
import { IProduct } from 'src/app/shared/models/product';
import { BreadcrumbService } from 'xng-breadcrumb';
import { ShopService } from '../shop.service';
@@ -11,8 +12,9 @@ import { ShopService } from '../shop.service';
})
export class ProductDetailsComponent implements OnInit {
product: IProduct;
+ quantity = 1;
- constructor(private shopService: ShopService, private activatedRoute: ActivatedRoute, private bcService: BreadcrumbService) {
+ constructor(private shopService: ShopService, private activatedRoute: ActivatedRoute, private bcService: BreadcrumbService, private basketService: BasketService) {
this.bcService.set('@productDetails', ' ');
}
@@ -20,6 +22,20 @@ export class ProductDetailsComponent implements OnInit {
this.loadProduct();
}
+ addItemToBasket(){
+ this.basketService.addItemToBasket(this.product, this.quantity);
+ }
+
+ incrementQuantity(){
+ this.quantity++;
+ }
+
+ decrementQuantity(){
+ if(this.quantity > 1){
+ this.quantity--;
+ }
+ }
+
loadProduct(){
this.shopService.getProduct(+this.activatedRoute.snapshot.paramMap.get('id')).subscribe(
{