105 lines
3.4 KiB
Plaintext
105 lines
3.4 KiB
Plaintext
|
@using TaikoWebUI.Shared.Models
|
||
|
@using System.Collections.Immutable
|
||
|
@inject IGameDataService GameDataService
|
||
|
|
||
|
<MudDialog>
|
||
|
<DialogContent>
|
||
|
<MudTable Items="@titles" Filter="@Filter" @bind-SelectedItem="@selectedTitle" Height="40vh" Hover="true">
|
||
|
<ColGroup>
|
||
|
<col style="width: 50px;" />
|
||
|
<col />
|
||
|
</ColGroup>
|
||
|
<ToolBarContent>
|
||
|
<MudTextField @bind-Value="searchString" Placeholder="Search" Adornment="Adornment.Start" Immediate="true"
|
||
|
AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Medium" Class="mt-0">
|
||
|
</MudTextField>
|
||
|
</ToolBarContent>
|
||
|
<HeaderContent>
|
||
|
<MudTh>
|
||
|
<MudTableSortLabel SortBy="@(new Func<Title, object>(x => x.TitleId))">
|
||
|
ID
|
||
|
</MudTableSortLabel>
|
||
|
</MudTh>
|
||
|
<MudTh>
|
||
|
<MudTableSortLabel SortBy="@(new Func<Title, object>(x => x.TitleName))">
|
||
|
Title
|
||
|
</MudTableSortLabel>
|
||
|
</MudTh>
|
||
|
</HeaderContent>
|
||
|
<RowTemplate>
|
||
|
@{
|
||
|
// Disable nullable warnings, which seems to be a false positive
|
||
|
# pragma warning disable CS8602
|
||
|
}
|
||
|
<MudTd DataLabel="Id" Class="cursor-pointer">@context.TitleId</MudTd>
|
||
|
<MudTd DataLabel="Title" Class="cursor-pointer">@context.TitleName</MudTd>
|
||
|
@{
|
||
|
#pragma warning restore CS8602
|
||
|
}
|
||
|
</RowTemplate>
|
||
|
<PagerContent>
|
||
|
<MudTablePager/>
|
||
|
</PagerContent>
|
||
|
</MudTable>
|
||
|
<MudText Class="mt-4 d-block" Typo="Typo.caption"><b>Selected Title:</b> @selectedTitle?.TitleName</MudText>
|
||
|
</DialogContent>
|
||
|
<DialogActions>
|
||
|
<MudButton OnClick="Cancel">Cancel</MudButton>
|
||
|
<MudButton Color="Color.Primary" OnClick="Submit">Ok</MudButton>
|
||
|
</DialogActions>
|
||
|
</MudDialog>
|
||
|
|
||
|
@code {
|
||
|
|
||
|
[CascadingParameter]
|
||
|
MudDialogInstance MudDialog { get; set; } = null!;
|
||
|
|
||
|
[Parameter]
|
||
|
public UserSetting UserSetting { get; set; } = new();
|
||
|
|
||
|
private IEnumerable<Title> titles = new List<Title>();
|
||
|
|
||
|
private Title? selectedTitle;
|
||
|
|
||
|
private string searchString = string.Empty;
|
||
|
|
||
|
protected override void OnInitialized()
|
||
|
{
|
||
|
base.OnInitialized();
|
||
|
var titleSet = GameDataService.GetTitles();
|
||
|
titles = titleSet.ToImmutableList().Sort((title, title1) => title.TitleId.CompareTo(title1.TitleId));
|
||
|
var currentTitle = new Title
|
||
|
{
|
||
|
TitleName = UserSetting.Title
|
||
|
};
|
||
|
if (titleSet.Contains(currentTitle))
|
||
|
{
|
||
|
titleSet.TryGetValue(new Title
|
||
|
{
|
||
|
TitleName = UserSetting.Title
|
||
|
}, out selectedTitle);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private bool Filter(Title? title)
|
||
|
{
|
||
|
if (title is null)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
return string.IsNullOrEmpty(searchString) ||
|
||
|
title.TitleName.Contains(searchString, StringComparison.InvariantCultureIgnoreCase);
|
||
|
}
|
||
|
|
||
|
private void Submit()
|
||
|
{
|
||
|
if (selectedTitle is not null)
|
||
|
{
|
||
|
UserSetting.Title = selectedTitle.TitleName;
|
||
|
}
|
||
|
MudDialog.Close(DialogResult.Ok(true));
|
||
|
}
|
||
|
|
||
|
private void Cancel() => MudDialog.Cancel();
|
||
|
|
||
|
}
|