toggle pin by number

This commit is contained in:
beo3000 2026-02-08 16:44:09 +01:00
parent 37b39f6d52
commit 2853eeed23
2 changed files with 40 additions and 1 deletions

View File

@ -1,7 +1,7 @@
@using GoodWood.Domain.Enums
<div class="pin @GetPinClass()" @onclick="OnClick" style="@GetStyle()">
<span class="pin-number">@(ThrowMode == ThrowMode.Decrease ? "" : PinNumber)</span>
<span class="pin-number">@(ThrowMode == ThrowMode.Reposition ? "" : PinNumber)</span>
</div>
<style>

View File

@ -1,5 +1,8 @@
@using GoodWood.Domain.Enums
@using GoodWood.Web.Store.GameState
@using Microsoft.JSInterop
@inject IJSRuntime JS
@implements IAsyncDisposable
<div class="pin-panel">
@* Row 1: Pin 1 (top) *@
@ -128,6 +131,42 @@
_ => PinStatus.Standing
};
private DotNetObjectReference<PinPanel>? _dotNetRef;
private IJSObjectReference? _jsModule;
private IJSObjectReference? _keyListener;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
_dotNetRef = DotNetObjectReference.Create(this);
_jsModule = await JS.InvokeAsync<IJSObjectReference>("import", "/js/numberPanel.js");
_keyListener = await _jsModule.InvokeAsync<IJSObjectReference>("registerKeyListener", _dotNetRef);
}
}
[JSInvokable]
public async Task HandleKeyPress(int number)
{
if (!IsInteractive || ThrowMode != ThrowMode.Decrease)
return;
if (number >= 1 && number <= 9)
await OnPinClicked.InvokeAsync(number);
}
public async ValueTask DisposeAsync()
{
if (_keyListener is not null)
{
await _keyListener.InvokeVoidAsync("dispose");
await _keyListener.DisposeAsync();
}
if (_jsModule is not null)
await _jsModule.DisposeAsync();
_dotNetRef?.Dispose();
}
private async Task HandlePinClick(int pinNumber)
{
await OnPinClicked.InvokeAsync(pinNumber);