del UndoButton

This commit is contained in:
beo3000 2025-12-27 19:31:44 +01:00
parent ea08ff9a5b
commit 0a7fb1f0af
1 changed files with 0 additions and 103 deletions

View File

@ -1,103 +0,0 @@
@using Koogle.Web.Store.GameState
@inherits FluxorComponent
@inject IState<GameState> GameState
@inject IDispatcher Dispatcher
@* Only show when undo is available *@
@if (CanUndo)
{
<MudButton Variant="@Variant"
Color="Color.Secondary"
FullWidth="@FullWidth"
Size="@Size"
Disabled="@IsDisabled"
OnClick="HandleUndo"
StartIcon="@Icons.Material.Filled.Undo"
Class="@Class">
@ButtonText
</MudButton>
}
@code {
/// <summary>
/// Whether to show the button even when no undo is available.
/// </summary>
[Parameter]
public bool AlwaysShow { get; set; }
/// <summary>
/// Button variant (default: Outlined).
/// </summary>
[Parameter]
public Variant Variant { get; set; } = Variant.Outlined;
/// <summary>
/// Whether button should be full width.
/// </summary>
[Parameter]
public bool FullWidth { get; set; } = true;
/// <summary>
/// Button size.
/// </summary>
[Parameter]
public Size Size { get; set; } = Size.Medium;
/// <summary>
/// Additional CSS classes.
/// </summary>
[Parameter]
public string? Class { get; set; }
/// <summary>
/// Optional custom button text. If not set, shows count.
/// </summary>
[Parameter]
public string? CustomText { get; set; }
/// <summary>
/// Whether to show the undo count in the button text.
/// </summary>
[Parameter]
public bool ShowCount { get; set; } = true;
/// <summary>
/// Callback when undo is triggered.
/// </summary>
[Parameter]
public EventCallback OnUndoTriggered { get; set; }
private int UndoCount => GameState.Value.UndoStack.Count;
private bool CanUndo => UndoCount > 0 || AlwaysShow;
private bool IsDisabled => UndoCount == 0 || GameState.Value.IsSaving;
private string ButtonText
{
get
{
if (!string.IsNullOrEmpty(CustomText))
return CustomText;
var baseText = "Letzten Wurf rückgängig";
return ShowCount && UndoCount > 0
? $"{baseText} ({UndoCount})"
: baseText;
}
}
private async Task HandleUndo()
{
if (UndoCount == 0)
return;
var lastSnapshot = GameState.Value.UndoStack[^1];
Dispatcher.Dispatch(new UndoThrowSuccessAction(
lastSnapshot.ThrowPanel,
lastSnapshot.Participants,
lastSnapshot.GameModel));
await OnUndoTriggered.InvokeAsync();
}
}