feat(profile): enhance ChargeCreditWallet with return URL handling and continue shopping button
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 22m27s
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 22m27s
- Added support for return URL handling in ChargeCreditWallet to improve user experience after payment. - Introduced a "Continue Shopping" button that allows users to navigate back to their previous shopping session after successfully charging their wallet. - Updated the component to manage pending return URLs and ensure they are saved and retrieved correctly. These changes enhance the functionality of the ChargeCreditWallet page, providing a smoother transition for users post-transaction.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using CMSMicroservice.Protobuf.Protos.UserAddress;
|
||||
using CMSMicroservice.Protobuf.Protos.UserOrder;
|
||||
using FrontOffice.Main.Shared;
|
||||
using FrontOffice.Main.Utilities;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MudBlazor;
|
||||
@@ -33,7 +34,6 @@ public partial class CheckoutSummary : ComponentBase
|
||||
{
|
||||
await AuthDialogService.ShowAuthDialogAsync();
|
||||
}
|
||||
// لود سبد خرید (فقط اگر کاربر لاگین کرده باشد)
|
||||
await Cart.EnsureInitializedAsync();
|
||||
await LoadAddresses();
|
||||
await LoadWalletBalance();
|
||||
@@ -43,7 +43,6 @@ public partial class CheckoutSummary : ComponentBase
|
||||
{
|
||||
if (firstRender)
|
||||
{
|
||||
// بارگذاری نرخ VAT
|
||||
await VAT.LoadAsync();
|
||||
}
|
||||
await base.OnAfterRenderAsync(firstRender);
|
||||
@@ -52,9 +51,7 @@ public partial class CheckoutSummary : ComponentBase
|
||||
private async Task LoadWalletBalance()
|
||||
{
|
||||
var walletResult = await WalletService.GetBalancesAsync();
|
||||
walletBalance = walletResult.CreditBalance
|
||||
// + walletResult.NetworkBalance
|
||||
;
|
||||
walletBalance = walletResult.CreditBalance;
|
||||
}
|
||||
|
||||
private async Task LoadAddresses()
|
||||
@@ -93,11 +90,15 @@ public partial class CheckoutSummary : ComponentBase
|
||||
return;
|
||||
}
|
||||
|
||||
var totalRequired = VAT.AddVAT(Cart.Total);
|
||||
if (await TryHandleInsufficientBalanceAsync(totalRequired))
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
var request = new SubmitShopBuyOrderRequest
|
||||
{
|
||||
TotalAmount = VAT.AddVAT(Cart.Total)
|
||||
TotalAmount = totalRequired
|
||||
};
|
||||
|
||||
var response = await UserOrderContract.SubmitShopBuyOrderAsync(request);
|
||||
@@ -107,17 +108,56 @@ public partial class CheckoutSummary : ComponentBase
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (CreditChargeNavigation.IsInsufficientWalletBalance(ex))
|
||||
{
|
||||
await LoadWalletBalance();
|
||||
await TryHandleInsufficientBalanceAsync(totalRequired);
|
||||
return;
|
||||
}
|
||||
|
||||
Snackbar.Add($"خطا در ثبت سفارش: {ex.Message}", Severity.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<bool> TryHandleInsufficientBalanceAsync(long totalRequired)
|
||||
{
|
||||
if (walletBalance >= totalRequired)
|
||||
return false;
|
||||
|
||||
var shortfall = totalRequired - walletBalance;
|
||||
var parameters = new DialogParameters<InsufficientCreditDialog>
|
||||
{
|
||||
{ x => x.CurrentBalance, walletBalance },
|
||||
{ x => x.RequiredAmount, totalRequired },
|
||||
{ x => x.ShortfallAmount, shortfall }
|
||||
};
|
||||
|
||||
var dialog = await DialogService.ShowAsync<InsufficientCreditDialog>(
|
||||
"موجودی کافی نیست",
|
||||
parameters,
|
||||
new DialogOptions
|
||||
{
|
||||
CloseOnEscapeKey = true,
|
||||
MaxWidth = MaxWidth.Small,
|
||||
FullWidth = true
|
||||
});
|
||||
|
||||
var result = await dialog.Result;
|
||||
if (result is { Canceled: false, Data: long chargeShortfall })
|
||||
{
|
||||
var chargeAmount = CreditChargeNavigation.NormalizeChargeAmount(chargeShortfall);
|
||||
Navigation.NavigateTo(CreditChargeNavigation.BuildChargeUrl(
|
||||
chargeAmount,
|
||||
RouteConstants.Store.CheckoutSummary));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static string FormatPrice(long price) => string.Format("{0:N0} تومان", price);
|
||||
|
||||
/// <summary>
|
||||
/// محاسبه مالیات بر ارزش افزوده
|
||||
/// </summary>
|
||||
private long CalculateVAT() => VAT.CalculateVAT(Cart.Total);
|
||||
|
||||
private static string GetProductImageUrl(string? imageUrl)
|
||||
=> string.IsNullOrWhiteSpace(imageUrl) ? "/images/product-placeholder.svg" : imageUrl.TrimStart('/');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user