Files
midrandbooks/MidrandBookshop/Components/Pages/Checkout.razor.cs
T
Khwezi Mngoma 0765e63d8a
continuous-integration/drone/pr Build is passing
Using shared service for Cart management
2026-06-12 08:54:53 +02:00

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");
}