76 lines
1.6 KiB
Plaintext
76 lines
1.6 KiB
Plaintext
@using Shogi.Contracts.Types
|
|
|
|
@inject ShogiApi Api
|
|
|
|
<gameBrowserEntry>
|
|
<AuthorizeView>
|
|
@if (showDeletePrompt)
|
|
{
|
|
<modal class="PrimaryTheme ThemeVariant--Contrast">
|
|
<div style="display: flex; gap: 1rem; justify-content: flex-end;">
|
|
@if (showDeleteError)
|
|
{
|
|
<p style="color: darkred;">An error occurred.</p>
|
|
<div style="flex: 1;" />
|
|
<button @onclick="HideModal">Cancel</button>
|
|
}
|
|
else
|
|
{
|
|
<p>Do you wish to delete this session?</p>
|
|
<div style="flex: 1;" />
|
|
<button @onclick="HideModal">No</button>
|
|
<button @onclick="DeleteSession">Yes</button>
|
|
}
|
|
</div>
|
|
</modal>
|
|
}
|
|
|
|
<div>
|
|
<a href="play/@Session.SessionId">@Session.Player1</a>
|
|
</div>
|
|
@if (string.IsNullOrEmpty(Session.Player2))
|
|
{
|
|
<span>1 / 2</span>
|
|
}
|
|
else
|
|
{
|
|
<span>Full</span>
|
|
}
|
|
@if (context.User.Identity?.Name == Session.Player1)
|
|
{
|
|
<IconButton OnClick="() => showDeletePrompt = true">
|
|
<TrashCanIcon />
|
|
</IconButton>
|
|
}
|
|
</AuthorizeView>
|
|
</gameBrowserEntry>
|
|
|
|
@code {
|
|
[Parameter][EditorRequired] public SessionMetadata Session { get; set; } = default!;
|
|
[Parameter][EditorRequired] public EventCallback OnSessionDeleted { get; set; }
|
|
private bool showDeletePrompt = false;
|
|
private bool showDeleteError = false;
|
|
|
|
|
|
void HideModal()
|
|
{
|
|
showDeletePrompt = showDeleteError = false;
|
|
}
|
|
|
|
async Task DeleteSession()
|
|
{
|
|
var response = await Api.DeleteSession(Session.SessionId);
|
|
if (response.IsSuccessStatusCode)
|
|
{
|
|
showDeletePrompt = false;
|
|
showDeleteError = false;
|
|
await OnSessionDeleted.InvokeAsync();
|
|
}
|
|
else
|
|
{
|
|
showDeletePrompt = true;
|
|
showDeleteError = true;
|
|
}
|
|
}
|
|
}
|