@page "/user/{CardId:long}" @using SharedProject.models @using SharedProject.enums @using SharedProject.common @inject HttpClient Client @inject IDialogService DialogService @inject ILogger Logger User @if (userDetail == null) { } else { Player Name: @userDetail.PlayerName Total Score: @userDetail.TotalScore Average Score: @userDetail.AverageScore Played Song Count: @userDetail.PlayedSongCount / @userDetail.TotalSongCount Cleared Stage Count: @userDetail.ClearedStageCount / @userDetail.TotalStageCount No Miss Stage Count: @userDetail.NoMissStageCount / @userDetail.TotalStageCount Full Chain Stage Count: @userDetail.FullChainStageCount / @userDetail.TotalStageCount Perfect Stage Count: @userDetail.PerfectStageCount / @userDetail.TotalStageCount S and Above Stage Count: @userDetail.SAboveStageCount / @userDetail.TotalStageCount S+ and Above Stage Count: @userDetail.SPlusAboveStageCount / @userDetail.TotalStageCount S++ and Above Stage Count: @userDetail.SPlusPlusAboveStageCount / @userDetail.TotalStageCount @foreach (var item in Enum.GetValues()) { @item.GetHelpText() } @foreach (var item in Enum.GetValues()) { @item.GetHelpText() } @if (isSavingOptions) { Saving... } else { Save } Played Songs @(context.Item.ShowDetails ? "Hide" : "Show") Song Play Details @if (context.ShowDetails) { Song Play Details Difficulty Clear State Play Count Rating Score Max Chain @SongPlayDetail.Difficulty @(SongPlayDetail.Score != 1000000 ? SongPlayDetail.ClearState : ClearState.Perfect) @SongPlayDetail.PlayCount @CalculateRating(SongPlayDetail.Score) @SongPlayDetail.Score @SongPlayDetail.MaxChain } } @code { [Parameter] public long CardId { get; set; } private PlayOptions.FeverTranceShow feverTranceShow; private PlayOptions.FastSlowIndicator fastSlowIndicator; private UserDetail? userDetail; private List songPlayDataList = new(); private bool isSavingOptions; protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); userDetail = await Client.GetFromJsonAsync($"api/UserDetail/{CardId}") ?? new(); songPlayDataList = userDetail.SongPlayDataList ?? new List(); feverTranceShow = userDetail.PlayOption.FeverTrance; fastSlowIndicator = userDetail.PlayOption.FastSlowIndicator; } private void OnShowDetailsClick(SongPlayData data) { data.ShowDetails = !data.ShowDetails; } private async Task SaveOptions() { isSavingOptions = true; var postData = new PlayOption { CardId = CardId, FastSlowIndicator = fastSlowIndicator, FeverTrance = feverTranceShow }; var result = await Client.PostAsJsonAsync("api/UserDetail/SetPlayOption", postData); isSavingOptions = false; } private static string CalculateRating(int score) { var grade = SharedConstants.GRADES.Where(g => g.Score <= score).Select(g => g.Grade).Last(); return grade; } private async Task OnFavoriteToggled(SongPlayData data) { var options = new DialogOptions { CloseOnEscapeKey = false, DisableBackdropClick = true, FullWidth = true }; var parameters = new DialogParameters(); parameters.Add("Data", data); parameters.Add("CardId", CardId); var dialog = DialogService.Show("Favorite", parameters, options); var result = await dialog.Result; if (result.Cancelled) { return; } if ((bool)result.Data) { Logger.LogInformation("Changed!"); data.IsFavorite = !data.IsFavorite; } } }