@using TaikoWebUI.Shared.Models
@using System.Collections.Immutable
@inject IGameDataService GameDataService
@Localizer["ID"]
@Localizer["Title"]
@{
// Disable nullable warnings, which seems to be a false positive
#pragma warning disable CS8602
}
@context.TitleId
@context.TitleName
@{
#pragma warning restore CS8602
}
@Localizer["Selected Title:"] @selectedTitle?.TitleName
@Localizer["Cancel"]
@Localizer["Okay"]
@code {
[CascadingParameter]
MudDialogInstance MudDialog { get; set; } = null!;
[Parameter]
public UserSetting UserSetting { get; set; } = new();
[Parameter]
public bool AllowFreeProfileEditing { get; set; }
private IEnumerable
titles = new List();
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();
}