55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
using LiteCharms.Features.MidrandBooks.Payments;
|
|
using LiteCharms.Features.MidrandBooks.Payments.Models;
|
|
|
|
namespace MidrandBookshop.Components.Pages;
|
|
|
|
public partial class Checkout(CartService cartService)
|
|
{
|
|
[Inject]
|
|
private AuthenticationStateProvider AuthStateProvider { get; set; } = default!;
|
|
|
|
private LiteCharms.Features.MidrandBooks.Payments.Models.Cart ShoppingCart => cartService.ShoppingCart;
|
|
|
|
private AuthenticationState? AuthState { get; set; }
|
|
private System.Security.Claims.ClaimsPrincipal? User { get; set; }
|
|
private bool IsAuthenticated => User?.Identity?.IsAuthenticated ?? false;
|
|
|
|
private decimal ShippingCost = 0;
|
|
private bool IsSameAddress = true;
|
|
|
|
private decimal OrderTotalAmount => ShoppingCart.TotalAmount + ShoppingCart.TotalVat + ShippingCost;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
AuthState = await AuthStateProvider.GetAuthenticationStateAsync();
|
|
User = AuthState!.User;
|
|
|
|
Navigation.LocationChanged += OnLocationChanged;
|
|
cartService.OnCartChanged += CartService_OnCartChanged;
|
|
}
|
|
|
|
private async void CartService_OnCartChanged() => await InvokeAsync(StateHasChanged);
|
|
|
|
private void OnLocationChanged(object? sender, LocationChangedEventArgs e) => StateHasChanged();
|
|
|
|
private async void ChangeQuantity(CartItem item, int delta)
|
|
{
|
|
var peekQuantity = item.Quantity + delta;
|
|
|
|
if (peekQuantity < 1) return;
|
|
|
|
cartService.UpdateQuantity(item.Price!.Id, delta);
|
|
|
|
await cartService.SaveCartToStorageAsync();
|
|
}
|
|
|
|
private async void RemoveFromCart(CartItem item)
|
|
{
|
|
cartService.RemoveOneItem(item.Price!.Id);
|
|
|
|
await cartService.SaveCartToStorageAsync();
|
|
}
|
|
|
|
private void CompletePurchase(MouseEventArgs args) => Navigation.NavigateTo("/payment-confirmation");
|
|
}
|