diff --git a/Contracts/Dtos.cs b/Contracts/Dtos.cs index f715388..bff2d11 100644 --- a/Contracts/Dtos.cs +++ b/Contracts/Dtos.cs @@ -8,7 +8,7 @@ public record SuggestionDto(int Id, string Name, string? Genre, string? Descript public record VoteRequest(int SuggestionId, int Score); public record ResultsOpenRequest(bool ResultsOpen); public record VoteFinalizeRequest(bool Final); -public record VoteStatusDto(Guid PlayerId, string Name, string Username, Phase Phase, bool Finalized, bool HasJoker); +public record VoteStatusDto(Guid PlayerId, string Name, string Username, Phase Phase, bool Finalized, bool HasJoker, int SuggestionCount, IReadOnlyList SuggestionTitles); public record LinkSuggestionsRequest(int SourceSuggestionId, int TargetSuggestionId); public record UnlinkSuggestionsRequest(int SuggestionId); public record GrantJokerRequest(Guid PlayerId); diff --git a/Endpoints/AdminEndpoints.cs b/Endpoints/AdminEndpoints.cs index 48c3f3d..90e3067 100644 --- a/Endpoints/AdminEndpoints.cs +++ b/Endpoints/AdminEndpoints.cs @@ -42,13 +42,16 @@ public static class AdminEndpoints var voters = await db.Players .AsNoTracking() + .Include(p => p.Suggestions) .OrderBy(p => p.DisplayName ?? p.Username) .Select(p => new VoteStatusDto(p.Id, p.DisplayName ?? p.Username, p.Username, p.CurrentPhase, p.VotesFinal, - p.HasJoker)) + p.HasJoker, + p.Suggestions.Count, + p.Suggestions.Select(s => s.Name).ToList())) .ToListAsync(); var waiting = voters.Where(v => !v.Finalized).Select(v => v.Name).ToList(); diff --git a/wwwroot/index.html b/wwwroot/index.html index bee822d..aac29f9 100644 --- a/wwwroot/index.html +++ b/wwwroot/index.html @@ -153,6 +153,7 @@ Name Username Status + Games Joker Delete diff --git a/wwwroot/js/i18n.js b/wwwroot/js/i18n.js index efa59d3..a65945e 100644 --- a/wwwroot/js/i18n.js +++ b/wwwroot/js/i18n.js @@ -113,6 +113,7 @@ const translations = { "admin.playerName": "Name", "admin.playerUsername": "Username", "admin.playerStatus": "Status", + "admin.playerGames": "Games", "admin.playerJoker": "Joker", "admin.playerDelete": "Delete", "admin.grantJokerChip": "Grant", @@ -272,6 +273,7 @@ const translations = { "admin.playerName": "Name", "admin.playerUsername": "Benutzername", "admin.playerStatus": "Status", + "admin.playerGames": "Spiele", "admin.playerJoker": "Joker", "admin.playerDelete": "Löschen", "admin.grantJokerChip": "Joker", diff --git a/wwwroot/js/ui.js b/wwwroot/js/ui.js index f70024d..b1f5630 100644 --- a/wwwroot/js/ui.js +++ b/wwwroot/js/ui.js @@ -728,10 +728,12 @@ function renderAdminVoteStatus() { state.adminVoteStatus.voters.forEach((v) => { const tr = document.createElement("tr"); const statusText = displayPlayerStatus(v); + const gamesTooltip = (v.suggestionTitles || []).join(", "); tr.innerHTML = ` ${truncate(v.name, 28)} ${truncate(v.username, 24)} ${statusText} + ${v.suggestionCount ?? 0} `;