2874b931df
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 4m48s
Guests can browse products and product details for presentation purposes, but prices are hidden behind a 'وارد شوید' prompt (lock icon). Authenticated users see prices as before. Affected pages: - Landing page (Index): top-selling regular + discount sections - Store/Products list - Store/ProductDetail (desktop price + mobile sticky bar) - DiscountStore/Products list - DiscountStore/ProductDetail (full price box) Each code-behind now checks AuthService.IsAuthenticatedAsync() on init and stores the result in _isAuthenticated for use in the template. Co-authored-by: Cursor <cursoragent@cursor.com>
86 lines
2.4 KiB
C#
86 lines
2.4 KiB
C#
using Microsoft.AspNetCore.Components;
|
|
using FrontOffice.Main.Utilities;
|
|
|
|
namespace FrontOffice.Main.Pages.DiscountStore;
|
|
|
|
public partial class ProductDetail
|
|
{
|
|
[Parameter] public long Id { get; set; }
|
|
|
|
[Inject] private DiscountProductService DiscountProductService { get; set; } = default!;
|
|
[Inject] private DiscountCartService DiscountCartService { get; set; } = default!;
|
|
[Inject] private VATService VAT { get; set; } = default!;
|
|
[Inject] private GuestActionGate GuestGate { get; set; } = default!;
|
|
[Inject] private AuthService AuthService { get; set; } = default!;
|
|
|
|
private bool _isAuthenticated;
|
|
|
|
private DiscountProductDetail? _product;
|
|
private string _selectedImage = string.Empty;
|
|
private int _quantity = 1;
|
|
private bool _loading = true;
|
|
private bool _addingToCart;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
_isAuthenticated = await AuthService.IsAuthenticatedAsync();
|
|
await LoadProductAsync();
|
|
}
|
|
|
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (firstRender)
|
|
{
|
|
await VAT.LoadAsync();
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
|
|
private async Task LoadProductAsync()
|
|
{
|
|
_loading = true;
|
|
try
|
|
{
|
|
_product = await DiscountProductService.GetByIdAsync(Id);
|
|
if (_product is not null)
|
|
{
|
|
_selectedImage = _product.Images.FirstOrDefault()?.ImageUrl
|
|
?? _product.ThumbnailUrl;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
Snackbar.Add("خطا در بارگذاری محصول", MudBlazor.Severity.Error);
|
|
}
|
|
finally
|
|
{
|
|
_loading = false;
|
|
}
|
|
}
|
|
|
|
private async Task AddToCart()
|
|
{
|
|
if (_product is null) return;
|
|
_addingToCart = true;
|
|
try
|
|
{
|
|
var productId = _product.Id;
|
|
var qty = _quantity;
|
|
var title = _product.Title;
|
|
await GuestGate.RunAsync(async () =>
|
|
{
|
|
await DiscountCartService.AddAsync(productId, qty);
|
|
Snackbar.Add($"{title} به سبد خرید اضافه شد", MudBlazor.Severity.Success);
|
|
});
|
|
}
|
|
catch
|
|
{
|
|
Snackbar.Add("خطا در افزودن به سبد خرید", MudBlazor.Severity.Error);
|
|
}
|
|
finally
|
|
{
|
|
_addingToCart = false;
|
|
}
|
|
}
|
|
}
|