Files
FrontOffice/src/FrontOffice.Main/Pages/Store/Cart.razor.cs
T
masoodafar-web 025e8d3c3e
Build and Deploy / build (push) Successful in 1m25s
feat: add withdrawal requests feature and update VAT loading mechanism
2025-12-20 04:03:11 +03:30

76 lines
2.3 KiB
C#

using Microsoft.AspNetCore.Components;
using FrontOffice.Main.Utilities;
using System.Linq;
namespace FrontOffice.Main.Pages.Store;
public partial class Cart : ComponentBase, IDisposable
{
[Inject] private CartService CartService { get; set; } = default!;
[Inject] private VATService VAT { get; set; } = default!;
// Navigation and Snackbar are available via _Imports.razor
private CartService CartData => CartService;
protected override async Task OnInitializedAsync()
{
// لود سبد خرید (فقط اگر کاربر لاگین کرده باشد)
await CartService.EnsureInitializedAsync();
CartService.OnChange += StateHasChanged;
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
// بارگذاری نرخ VAT
await VAT.LoadAsync();
}
await base.OnAfterRenderAsync(firstRender);
}
private async Task IncrementQty(long productId)
{
var item = CartData.Items.FirstOrDefault(i => i.ProductId == productId);
if (item is null) return;
await CartService.UpdateQuantity(productId, item.Quantity + 1);
}
private async Task DecrementQty(long productId)
{
var item = CartData.Items.FirstOrDefault(i => i.ProductId == productId);
if (item is null) return;
await CartService.UpdateQuantity(productId, item.Quantity - 1);
}
private async Task ChangeQty(long productId, int value)
{
await CartService.UpdateQuantity(productId, value);
}
private async Task Remove(long cartId)
{
await CartService.Remove(cartId);
}
private void ProceedCheckout()
{
Navigation.NavigateTo(RouteConstants.Store.CheckoutSummary);
}
private string FormatPrice(long price) => $"{price:N0} ";
private string FormatPriceWithVAT(long price) => $"{VAT.AddVAT(price):N0} ";
private long TotalWithVAT => VAT.AddVAT(CartData.Total);
private long VATAmount => VAT.CalculateVAT(CartData.Total);
private static string GetProductImageUrl(string? imageUrl)
=> string.IsNullOrWhiteSpace(imageUrl) ? "/images/product-placeholder.svg" : imageUrl;
public void Dispose()
{
CartService.OnChange -= StateHasChanged;
}
}