Refactor interaction and user deletion logic

Consolidated repeated methods for interaction/user deletion into reusable components to improve maintainability. Introduced a `ConfirmDialog` for consistent confirmation UI and streamlined associated logic across pages. Removed redundant methods and enhanced admin-specific page security checks.
This commit is contained in:
Andre Beging
2025-03-28 23:55:12 +01:00
parent 83257d1d2a
commit 027a36ce17
12 changed files with 174 additions and 234 deletions

View File

@@ -0,0 +1,10 @@
@inherits FsBase
<div class="mt-1 mb-3">
@Message
</div>
<div class="d-flex justify-content-end">
<Button Color="Color.Secondary" Clicked="@ModalService.Hide">Abbrechen</Button>
<Button Color="Color.Primary" Clicked="@ConfirmClickAsync" Class="ml-2">OK</Button>
</div>

View File

@@ -0,0 +1,63 @@
using Blazorise;
using FoodsharingSiegen.Server.BaseClasses;
using Microsoft.AspNetCore.Components;
namespace FoodsharingSiegen.Server.Dialogs
{
public partial class ConfirmDialog : FsBase
{
#region Parameters
[Parameter]
public Func<Task>? OnConfirm { get; set; }
[Parameter]
public string? Message { get; set; }
#endregion
#region Public Method ShowAsync
/// <summary>
/// Displays the confirm dialog with the specified title, message, and confirmation action.
/// </summary>
/// <param name="modalService">The modal service used to display the dialog.</param>
/// <param name="title">The title of the confirmation dialog. Defaults to "Bestätigen" if null.</param>
/// <param name="message">The message displayed in the confirmation dialog.</param>
/// <param name="onConfirm">The action to invoke when the user confirms.</param>
/// <returns>A task that represents the asynchronous operation of displaying the dialog.</returns>
public static async Task ShowAsync(IModalService modalService, string? title, string? message, Func<Task> onConfirm)
{
title ??= "Bestätigen";
var x = new Action<ModalProviderParameterBuilder<ConfirmDialog>>(b =>
{
b.Add(nameof(OnConfirm), onConfirm);
b.Add(nameof(Message), message);
});
var options = new ModalInstanceOptions
{
Size = ModalSize.Small
};
await modalService.Show(title, x, options);
}
#endregion
#region Private Method ConfirmClickAsync
/// <summary>
/// Invokes the confirmation action if it is set.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
private async Task ConfirmClickAsync()
{
if (OnConfirm != null) await OnConfirm.Invoke();
await ModalService.Hide();
}
#endregion
}
}