Files
FrontOffice/src/FrontOffice.Main/Pages/Profile/Components/EditAddressDialog.razor.cs
T
masoodafar-web 081b9d3c10
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 3m8s
refactor: update user address models and methods to use CustomerAddressModel across multiple components
2026-02-08 00:25:12 +03:30

109 lines
3.5 KiB
C#

using CMSMicroservice.Protobuf.Protos.UserAddress;
using CMSMicroservice.Protobuf.Protos.City;
using Mapster;
using Microsoft.AspNetCore.Components;
using MudBlazor;
using Severity = MudBlazor.Severity;
namespace FrontOffice.Main.Pages.Profile.Components;
public partial class EditAddressDialog : ComponentBase
{
[CascadingParameter] private IMudDialogInstance MudDialog { get; set; } = default!;
[Inject] private UserAddressContract.UserAddressContractClient UserAddressContract { get; set; } = default!;
[Inject] private CityContract.CityContractClient CityContract { get; set; } = default!;
[Parameter] public CustomerAddressModel? Model { get; set; }
private MudForm? _form;
private bool _isSaving;
private UpdateCustomerAddressRequest _request = new();
private object? _selectedCity;
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
if (Model != null)
{
_request = Model.Adapt<UpdateCustomerAddressRequest>();
// Load selected city if CityId exists
if (Model.CityId > 0)
{
await LoadCurrentCity(Model.CityId);
}
}
}
private async Task LoadCurrentCity(long cityId)
{
try
{
var response = await CityContract.GetAllCitiesByFilterAsync(new GetAllCitiesByFilterRequest
{
PaginationState = new CMSMicroservice.Protobuf.Protos.City.PaginationState { PageNumber = 1, PageSize = 1 },
Filter = new GetAllCitiesByFilterFilter { Id = cityId }
});
_selectedCity = response?.Cities?.FirstOrDefault();
}
catch
{
// Ignore error loading city
}
}
private async Task<IEnumerable<object>> SearchCities(string value, CancellationToken ct)
{
if (string.IsNullOrWhiteSpace(value) || value.Length < 2)
return Enumerable.Empty<object>();
try
{
var response = await CityContract.GetAllCitiesByFilterAsync(new GetAllCitiesByFilterRequest
{
PaginationState = new CMSMicroservice.Protobuf.Protos.City.PaginationState { PageNumber = 1, PageSize = 20 },
Filter = new GetAllCitiesByFilterFilter { Name = value }
});
return response?.Cities?.Cast<object>() ?? Enumerable.Empty<object>();
}
catch
{
return Enumerable.Empty<object>();
}
}
private async Task SaveAddress()
{
if (_form == null) return;
await _form.Validate();
if (!_form.IsValid || _selectedCity == null)
{
if (_selectedCity == null)
Snackbar.Add("لطفاً شهر را انتخاب کنید.", Severity.Warning);
return;
}
_request.CityId = (long)((dynamic)_selectedCity).Id;
_isSaving = true;
try
{
await UserAddressContract.UpdateCustomerAddressAsync(_request);
Snackbar.Add("آدرس با موفقیت ویرایش شد.", Severity.Success);
MudDialog.Close(DialogResult.Ok(true));
}
catch (Exception ex)
{
Snackbar.Add($"خطا: {ex.Message}", Severity.Error);
}
finally
{
_isSaving = false;
await InvokeAsync(StateHasChanged);
}
}
private void Cancel() => MudDialog.Close(DialogResult.Cancel());
}