118 lines
3.9 KiB
Plaintext
118 lines
3.9 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))">
|
|
@Localizer["ID"]
|
|
</MudTableSortLabel>
|
|
</MudTh>
|
|
<MudTh>
|
|
<MudTableSortLabel SortBy="@(new Func<Title, object>(x => x.TitleName))">
|
|
@Localizer["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>@Localizer["Selected Title:"]</b> @selectedTitle?.TitleName</MudText>
|
|
</DialogContent>
|
|
<DialogActions>
|
|
<MudButton OnClick="Cancel">
|
|
@Localizer["Cancel"]
|
|
</MudButton>
|
|
<MudButton Color="Color.Primary" OnClick="Submit">
|
|
@Localizer["Okay"]
|
|
</MudButton>
|
|
</DialogActions>
|
|
</MudDialog>
|
|
|
|
@code {
|
|
|
|
[CascadingParameter]
|
|
MudDialogInstance MudDialog { get; set; } = null!;
|
|
|
|
[Parameter]
|
|
public UserSetting UserSetting { get; set; } = new();
|
|
|
|
[Parameter]
|
|
public bool AllowFreeProfileEditing { get; set; }
|
|
|
|
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();
|
|
if (!AllowFreeProfileEditing)
|
|
{
|
|
var unlockedTitle = UserSetting.UnlockedTitle;
|
|
titleSet = titleSet.Where(title => unlockedTitle.Contains((uint)title.TitleId)).ToImmutableHashSet();
|
|
}
|
|
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;
|
|
UserSetting.TitlePlateId = selectedTitle.TitleRarity;
|
|
}
|
|
MudDialog.Close(DialogResult.Ok(true));
|
|
}
|
|
|
|
private void Cancel() => MudDialog.Cancel();
|
|
|
|
} |