This commit is contained in:
MeysamMoghaddam
2025-10-13 10:30:22 +03:30
parent edc8733ae4
commit 19960547a4
5 changed files with 110 additions and 26 deletions

View File

@@ -1,7 +1,7 @@
<MudDialog> <MudDialog>
<TitleContent> <TitleContent>
<MudText Typo="Typo.h4" Align="Align.Center">@(IsEdit ? "ویرایش آدرس" : "افزودن آدرس جدید")</MudText> <MudText Typo="Typo.h4" Align="Align.Center">افزودن آدرس جدید</MudText>
</TitleContent> </TitleContent>
<DialogContent> <DialogContent>
<MudForm @ref="_form" Model="_request" Validation="@(_validator.ValidateValue)"> <MudForm @ref="_form" Model="_request" Validation="@(_validator.ValidateValue)">
@@ -46,7 +46,7 @@
OnClick="SaveAddress" OnClick="SaveAddress"
Disabled="_isSaving" Disabled="_isSaving"
FullWidth="true"> FullWidth="true">
@(IsEdit ? "ویرایش آدرس" : "افزودن آدرس") افزودن آدرس
</MudButton> </MudButton>
</DialogActions> </DialogActions>
</MudDialog> </MudDialog>

View File

@@ -0,0 +1,45 @@
using FrontOffice.BFF.UserAddress.Protobuf.Protos.UserAddress;
using FrontOffice.BFF.UserAddress.Protobuf.Validator;
using Microsoft.AspNetCore.Components;
using MudBlazor;
using Severity = MudBlazor.Severity;
namespace FrontOffice.Main.Pages.Profile.Components;
public partial class AddAddressDialog : ComponentBase
{
[CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!;
[Inject] private UserAddressContract.UserAddressContractClient UserAddressContract { get; set; } = default!;
private MudForm? _form;
private readonly CreateNewUserAddressRequestValidator _validator = new();
private bool _isSaving;
private CreateNewUserAddressRequest _request = new();
private async Task SaveAddress()
{
if (_form == null) return;
await _form.Validate();
if (!_form.IsValid) return;
_isSaving = true;
try
{
var response = await UserAddressContract.CreateNewUserAddressAsync(_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.Cancel();
}

View File

@@ -0,0 +1,52 @@
<MudDialog>
<TitleContent>
<MudText Typo="Typo.h4" Align="Align.Center">ویرایش آدرس</MudText>
</TitleContent>
<DialogContent>
<MudForm @ref="_form" Model="_request" Validation="@(_validator.ValidateValue)">
<MudStack Spacing="3">
<MudTextField @bind-Value="_request.Title"
For="@(() => _request.Title)"
Label="عنوان آدرس"
Variant="Variant.Outlined"
Required="true"
RequiredError="عنوان آدرس الزامی است." />
<MudTextField @bind-Value="_request.Address"
For="@(() => _request.Address)"
Label="آدرس کامل"
Variant="Variant.Outlined"
Lines="3"
Required="true"
RequiredError="آدرس الزامی است." />
<MudTextField @bind-Value="_request.PostalCode"
For="@(() => _request.PostalCode)"
Label="کد پستی"
Variant="Variant.Outlined"
InputType="InputType.Text"
Required="true"
RequiredError="کد پستی الزامی است." />
<MudTextField @bind-Value="_request.CityId"
For="@(() => _request.CityId)"
Label="شناسه شهر"
Variant="Variant.Outlined"
InputType="InputType.Number"
Required="true"
RequiredError="شهر الزامی است." />
</MudStack>
</MudForm>
</DialogContent>
<DialogActions>
<MudButton Variant="Variant.Text"
OnClick="Cancel"
Disabled="_isSaving">لغو</MudButton>
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
OnClick="SaveAddress"
Disabled="_isSaving">
ذخیره تغییرات
</MudButton>
</DialogActions>
</MudDialog>

View File

@@ -5,26 +5,27 @@ using Microsoft.AspNetCore.Components;
using MudBlazor; using MudBlazor;
using Severity = MudBlazor.Severity; using Severity = MudBlazor.Severity;
namespace FrontOffice.Main.Pages.Profile; namespace FrontOffice.Main.Pages.Profile.Components;
public partial class AddressDialog : ComponentBase public partial class EditAddressDialog : ComponentBase
{ {
[CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!;
[Inject] private UserAddressContract.UserAddressContractClient UserAddressContract { get; set; } = default!; [Inject] private UserAddressContract.UserAddressContractClient UserAddressContract { get; set; } = default!;
[Parameter] public GetAllUserAddressByFilterResponseModel? Model { get; set; } [Parameter] public GetAllUserAddressByFilterResponseModel? Model { get; set; }
[Parameter] public bool IsEdit { get; set; }
private MudForm? _form; private MudForm? _form;
private readonly UpdateUserAddressRequestValidator _validator = new(); private readonly UpdateUserAddressRequestValidator _validator = new();
private bool _isSaving; private bool _isSaving;
private UpdateUserAddressRequest _request = new(); private UpdateUserAddressRequest _request = new();
protected override void OnInitialized() protected override void OnInitialized()
{ {
base.OnInitialized(); base.OnInitialized();
if (Model != null) if (Model != null)
_request = Model.Adapt<UpdateUserAddressRequest>(); _request = Model.Adapt<UpdateUserAddressRequest>();
} }
private async Task SaveAddress() private async Task SaveAddress()
{ {
if (_form == null) return; if (_form == null) return;
@@ -35,19 +36,9 @@ public partial class AddressDialog : ComponentBase
_isSaving = true; _isSaving = true;
try try
{ {
if (IsEdit) await UserAddressContract.UpdateUserAddressAsync(_request);
{ Snackbar.Add("آدرس با موفقیت ویرایش شد.", Severity.Success);
await UserAddressContract.UpdateUserAddressAsync(_request); MudDialog.Close(DialogResult.Ok(true));
Snackbar.Add("آدرس با موفقیت ویرایش شد.", Severity.Success);
MudDialog.Close(DialogResult.Ok(true));
}
else
{
var createRequest = _request.Adapt<CreateNewUserAddressRequest>();
var response = await UserAddressContract.CreateNewUserAddressAsync(createRequest);
Snackbar.Add("آدرس با موفقیت اضافه شد.", Severity.Success);
MudDialog.Close(DialogResult.Ok(true));
}
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@@ -3,6 +3,7 @@ using FrontOffice.BFF.User.Protobuf.Protos.User;
using FrontOffice.BFF.User.Protobuf.Validator; using FrontOffice.BFF.User.Protobuf.Validator;
using FrontOffice.BFF.UserAddress.Protobuf.Protos.UserAddress; using FrontOffice.BFF.UserAddress.Protobuf.Protos.UserAddress;
using FrontOffice.BFF.UserAddress.Protobuf.Validator; using FrontOffice.BFF.UserAddress.Protobuf.Validator;
using FrontOffice.Main.Pages.Profile.Components;
using FrontOffice.Main.Utilities; using FrontOffice.Main.Utilities;
using Mapster; using Mapster;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
@@ -186,11 +187,7 @@ public partial class Index
private async Task OpenAddAddressDialog() private async Task OpenAddAddressDialog()
{ {
_newAddressRequest = new CreateNewUserAddressRequest(); var dialog = await DialogService.ShowAsync<AddAddressDialog>("افزودن آدرس جدید");
var dialog = await DialogService.ShowAsync<AddressDialog>("افزودن آدرس جدید", new DialogParameters<AddressDialog>
{
{ x => x.IsEdit, false }
});
var result = await dialog.Result; var result = await dialog.Result;
if (!result.Canceled) if (!result.Canceled)
@@ -201,10 +198,9 @@ public partial class Index
private async Task OpenEditAddressDialog(GetAllUserAddressByFilterResponseModel address) private async Task OpenEditAddressDialog(GetAllUserAddressByFilterResponseModel address)
{ {
var dialog = await DialogService.ShowAsync<AddressDialog>("ویرایش آدرس", new DialogParameters<AddressDialog> var dialog = await DialogService.ShowAsync<EditAddressDialog>("ویرایش آدرس", new DialogParameters<EditAddressDialog>
{ {
{ x => x.Model, address }, { x => x.Model, address }
{ x => x.IsEdit, true }
}); });
var result = await dialog.Result; var result = await dialog.Result;