1
0
mirror of synced 2024-12-24 04:14:52 +01:00
TaikoLocalServer/TaikoWebUI/Pages/Dialogs/ChooseTitleDialog.razor

111 lines
3.5 KiB
Plaintext
Raw Normal View History

2024-08-14 16:48:32 +02:00
@inject IJSRuntime Js
2022-09-15 11:47:46 +02:00
<MudDialog>
<DialogContent>
<MudTable Items="@Titles" Filter="@Filter" @bind-SelectedItem="@selectedTitle" Height="40vh" Hover="true">
2022-09-15 13:05:36 +02:00
<ColGroup>
2024-08-14 16:48:32 +02:00
<col style="width: 50px;"/>
<col/>
2022-09-15 13:05:36 +02:00
</ColGroup>
2022-09-15 11:47:46 +02:00
<ToolBarContent>
2024-08-14 16:48:32 +02:00
<MudTextField @bind-Value="searchString" Placeholder=@Localizer["Search"] Adornment="Adornment.Start" Immediate="true"
AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Medium" Class="mt-0">
2022-09-15 11:47:46 +02:00
</MudTextField>
</ToolBarContent>
<HeaderContent>
<MudTh>
<MudTableSortLabel SortBy="@(new Func<Title, object>(x => x.TitleId))">
@Localizer["ID"]
2024-03-09 00:42:56 +01:00
</MudTableSortLabel>
2022-09-15 11:47:46 +02:00
</MudTh>
<MudTh>
<MudTableSortLabel SortBy="@(new Func<Title, object>(x => x.TitleName))">
@Localizer["Title"]
2022-09-15 11:47:46 +02:00
</MudTableSortLabel>
</MudTh>
</HeaderContent>
<RowTemplate>
2022-09-16 15:48:16 +02:00
@{
// Disable nullable warnings, which seems to be a false positive
2024-03-09 00:42:56 +01:00
#pragma warning disable CS8602
2022-09-16 15:48:16 +02:00
}
2022-09-15 13:05:36 +02:00
<MudTd DataLabel="Id" Class="cursor-pointer">@context.TitleId</MudTd>
2022-09-15 17:59:40 +02:00
<MudTd DataLabel="Title" Class="cursor-pointer">@context.TitleName</MudTd>
2022-09-16 15:48:16 +02:00
@{
2024-03-09 00:42:56 +01:00
#pragma warning restore CS8602
2022-09-16 15:48:16 +02:00
}
2022-09-15 11:47:46 +02:00
</RowTemplate>
<PagerContent>
2024-08-14 16:48:32 +02:00
<MudTablePager RowsPerPageString=@Localizer["Rows Per Page:"]/>
2022-09-15 11:47:46 +02:00
</PagerContent>
</MudTable>
2024-08-14 16:48:32 +02:00
<MudText Class="mt-4 d-block" Typo="Typo.caption">
<b>@Localizer["Currently Selected:"]</b> @selectedTitle?.TitleName
</MudText>
2022-09-15 11:47:46 +02:00
</DialogContent>
<DialogActions>
2024-03-09 00:42:56 +01:00
<MudButton OnClick="Cancel">
@Localizer["Cancel"]
</MudButton>
<MudButton Color="Color.Primary" OnClick="Submit">
2024-06-05 03:07:33 +02:00
@Localizer["Dialog OK"]
</MudButton>
2022-09-15 11:47:46 +02:00
</DialogActions>
</MudDialog>
@code {
2024-08-14 16:48:32 +02:00
[CascadingParameter] MudDialogInstance MudDialog { get; set; } = null!;
2022-09-15 11:47:46 +02:00
2024-08-14 16:48:32 +02:00
[Parameter] public UserSetting UserSetting { get; set; } = new();
2022-09-15 11:47:46 +02:00
2024-08-14 16:48:32 +02:00
[Parameter] public bool AllowFreeProfileEditing { get; set; }
[Parameter] public List<Title> Titles { get; set; } = new();
2022-09-15 11:47:46 +02:00
private Title? selectedTitle;
private string searchString = string.Empty;
protected override void OnInitialized()
{
base.OnInitialized();
var currentTitle = new Title
2024-08-14 16:48:32 +02:00
{
TitleName = UserSetting.Title
};
if (Titles.Contains(currentTitle))
2024-03-09 00:42:56 +01:00
{
selectedTitle = currentTitle;
}
2022-09-15 11:47:46 +02:00
}
2022-09-16 15:48:16 +02:00
private bool Filter(Title? title)
2022-09-15 11:47:46 +02:00
{
2022-09-16 15:48:16 +02:00
if (title is null)
{
return false;
}
2024-08-14 16:48:32 +02:00
2022-09-15 11:47:46 +02:00
return string.IsNullOrEmpty(searchString) ||
2024-08-14 16:48:32 +02:00
title.TitleName.Contains(searchString, StringComparison.InvariantCultureIgnoreCase);
2022-09-15 11:47:46 +02:00
}
private async Task Submit()
2022-09-15 11:47:46 +02:00
{
if (selectedTitle is not null)
{
UserSetting.Title = selectedTitle.TitleName;
UserSetting.TitlePlateId = selectedTitle.TitleRarity;
2022-09-15 11:47:46 +02:00
}
2024-08-14 16:48:32 +02:00
await Js.InvokeVoidAsync("updateTitleText", UserSetting.Title);
2022-09-15 11:47:46 +02:00
MudDialog.Close(DialogResult.Ok(true));
}
2024-08-14 16:48:32 +02:00
private void Cancel()
{
MudDialog.Cancel();
}
2022-09-15 11:47:46 +02:00
}