109 lines
3.5 KiB
C#
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());
|
|
} |