ShopOnlineSolution/ShopOnline.Web/Pages/ShoppingCartBase.cs

139 lines
3.7 KiB
C#

using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using ShopOnline.Models.Dtos;
using ShopOnline.Web.Services.Contracts;
namespace ShopOnline.Web.Pages
{
public class ShoppingCartBase:ComponentBase
{
[Inject]
public IJSRuntime Js { get; set; }
[Inject]
public IShoppingCartService ShoppingCartService { get; set; }
public List<CartItemDto> ShoppingCartItems { get; set; }
public string ErrorMessage { get; set; }
protected string TotalPrice { get; set; }
protected int TotalQuantity { get; set; }
protected override async Task OnInitializedAsync()
{
try
{
ShoppingCartItems = await ShoppingCartService.GetItems(HardCoded.UserId);
CartChanged();
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
}
}
protected async Task DeleteCartItem_Click(int id)
{
var cartItemDto = await ShoppingCartService.DeleteItem(id);
RemoveCartItem(id);
CartChanged();
}
protected async Task UpdateQuantityCartItem_Click(int id, int quantity)
{
try
{
if(quantity > 0)
{
var updateItemDto = new CartItemQuantityUpdateDto
{
CartItemId = id,
Quantity = quantity
};
var returnedUpdateItemDto = await this.ShoppingCartService.UpdateQuantity(updateItemDto);
UpdateItemTotalPrice(returnedUpdateItemDto);
CartChanged();
await MakeUpdateQuantityButtonVisible(id, false);
}
else
{
var item = this.ShoppingCartItems.FirstOrDefault(i => i.Id == id);
if(item != null)
{
item.Quantity = 1;
item.TotalPrice = item.Price;
}
}
}
catch (Exception)
{
throw;
}
}
protected async Task UpdateQuantity_Input(int id)
{
await MakeUpdateQuantityButtonVisible(id, true);
}
private async Task MakeUpdateQuantityButtonVisible(int id, bool visible)
{
await Js.InvokeVoidAsync("MakeUpdateQuantityButtonVisible", id, visible);
}
private void UpdateItemTotalPrice(CartItemDto cartItemDto)
{
var item = GetCartItem(cartItemDto.Id);
if(item != null)
{
item.TotalPrice = cartItemDto.Price * cartItemDto.Quantity;
}
}
private void CalculateCartSummaryTotals()
{
SetTotalPrice();
SetTotalQuantity();
}
private void SetTotalPrice()
{
TotalPrice = this.ShoppingCartItems.Sum(p => p.TotalPrice).ToString("C");
}
private void SetTotalQuantity()
{
TotalQuantity = this.ShoppingCartItems.Sum(p => p.Quantity);
}
private CartItemDto GetCartItem(int id)
{
return ShoppingCartItems.FirstOrDefault(i => i.Id == id);
}
private void RemoveCartItem(int id)
{
var CartItemDto = GetCartItem(id);
ShoppingCartItems.Remove(CartItemDto);
}
private void CartChanged()
{
CalculateCartSummaryTotals();
ShoppingCartService.RaiseEventOnShoppingCartChanged(TotalQuantity);
}
}
}