Improve admin candidate modal UX and add clip menu visibility toggle

- Widen AdminCandidateEditorModal to size lg for better readability
- Rename "Clip-Compilation" section to "Clip / Compilation", update copy to reflect single clips too, drop upload hint and Clip-Plattform field, rename label to "Link"
- Fix NativeSelect dropdown clipping inside overflow-y-auto modals by teleporting the menu to body with fixed positioning, flip-up logic, and dynamic maxHeight capped to viewport
- Add ClipAdminMenuVisible setting (backend domain, contracts, endpoint, migration) with matching frontend types, defaults, form wiring, and toggle in the Clip-Workflow modal — hides the Clips nav item from the admin sidebar when disabled

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
AzuTear
2026-06-27 18:39:35 +02:00
parent 494eba5edd
commit 18b61bed52
119 changed files with 15638 additions and 367 deletions
@@ -91,6 +91,14 @@ public sealed record ApproveNominationRequest(
public sealed record RejectNominationRequest(string? ReviewNote);
public sealed record AdminNominationLinkBlacklistEntryDto(string Url);
public sealed record AdminNominationLinkBlacklistResponse(AdminNominationLinkBlacklistEntryDto[] Entries);
public sealed record UpdateNominationLinkBlacklistRequest(string[] Urls);
public sealed record AddNominationLinkBlacklistEntryRequest(string Url);
public sealed record UpdateClipStatusRequest(
string Status,
string? ReviewNote);
@@ -116,3 +124,15 @@ public sealed record AdminRiskRuleDto(
public sealed record AdminRiskRulesResponse(AdminRiskRuleDto[] Rules);
public sealed record UpdateRiskRulesRequest(AdminRiskRuleDto[] Rules);
public sealed record AdminWorkflowRuleDto(
string Key,
string Label,
bool Enabled,
int Limit,
string Mode,
string Description);
public sealed record AdminWorkflowRulesResponse(AdminWorkflowRuleDto[] Rules);
public sealed record UpdateWorkflowRulesRequest(AdminWorkflowRuleDto[] Rules);
+14 -2
View File
@@ -23,7 +23,13 @@ public sealed record AdminCandidateItemDto(
int CategoryId,
string DisplayName,
string ChannelSlug,
string Platform);
string Platform,
string AcceptanceStatus,
string? AcceptanceNote,
string? ClipCompilationUrl,
string? ClipCompilationTitle,
string? ClipCompilationPlatform,
string ClipEmbedStatus);
public sealed record AdminAwardResultItemDto(
int Id,
@@ -102,7 +108,13 @@ public sealed record UpsertCandidateRequest(
int CategoryId,
string DisplayName,
string ChannelSlug,
string Platform);
string Platform,
string? AcceptanceStatus = null,
string? AcceptanceNote = null,
string? ClipCompilationUrl = null,
string? ClipCompilationTitle = null,
string? ClipCompilationPlatform = null,
string? ClipEmbedStatus = null);
public sealed record SetAwardResultRequest(
int CategoryId,
@@ -14,6 +14,8 @@ public sealed record AdminSiteSettingsResponse(
string ContactContent,
string SponsorsUrl,
string SponsorsContent,
string ShowactsUrl,
string ShowactsContent,
IEnumerable<PublicSocialLinkDto> SocialLinks,
IEnumerable<FaqItemDto> Faq);
@@ -29,6 +31,8 @@ public sealed record UpdateSiteSettingsRequest(
string ContactContent,
string SponsorsUrl,
string SponsorsContent,
string ShowactsUrl,
string ShowactsContent,
PublicSocialLinkDto[] SocialLinks,
FaqItemDto[] Faq);
@@ -49,6 +53,24 @@ public sealed record AdminOperationalSettingsResponse(
string MaintenanceTitle,
string MaintenanceMessage);
public sealed record AdminOptionalFeatureSettingsResponse(
bool ClipSubmissionsEnabled,
bool ClipReviewEnabled,
bool ClipAdminMenuVisible,
string ClipSubmissionDisabledMessage,
bool ShowactApplicationsEnabled,
string ShowactApplicationDisabledMessage,
bool SponsorsVisible);
public sealed record UpdateOptionalFeatureSettingsRequest(
bool ClipSubmissionsEnabled,
bool ClipReviewEnabled,
bool ClipAdminMenuVisible,
string ClipSubmissionDisabledMessage,
bool ShowactApplicationsEnabled,
string ShowactApplicationDisabledMessage,
bool SponsorsVisible);
public sealed record UpdateOperationalSettingsRequest(
bool DemoLoginEnabled,
string DemoLoginEmail,
+51
View File
@@ -0,0 +1,51 @@
namespace Backend.Contracts;
public sealed record SponsorDto(
int Id,
int SeasonId,
string Name,
string WebsiteUrl,
string LogoUrl,
string Description,
string Tier,
int SortOrder,
bool IsVisible);
public sealed record PublicSponsorsResponse(int Year, SponsorDto[] Items);
public sealed record UpsertSponsorRequest(
string Name,
string WebsiteUrl,
string LogoUrl,
string Description,
string Tier,
int SortOrder,
bool IsVisible);
public sealed record ShowactApplicationDto(
int Id,
int SeasonId,
string ArtistName,
string ContactEmail,
string ContactDiscord,
string PlatformUrl,
string PerformanceType,
string Description,
string TechnicalNotes,
string ReferenceUrl,
string Status,
string? ReviewNote,
DateTimeOffset CreatedAt,
DateTimeOffset? ReviewedAt);
public sealed record CreateShowactApplicationRequest(
string ArtistName,
string ContactEmail,
string ContactDiscord,
string PlatformUrl,
string PerformanceType,
string Description,
string TechnicalNotes,
string ReferenceUrl);
public sealed record UpdateShowactStatusRequest(string Status, string? ReviewNote);
+14 -1
View File
@@ -20,7 +20,11 @@ public sealed record WinnerPreviewDto(
string WinnerName,
string WinnerSlug,
string WinnerPlatform,
string WinnerUrl);
string WinnerUrl,
string? ClipUrl,
string? ClipTitle,
string? ClipPlatform,
string? ClipEmbedStatus);
public sealed record ArchiveYearDto(
int Year,
@@ -57,6 +61,14 @@ public sealed record PublicSiteStatusResponse(
string MaintenanceTitle,
string MaintenanceMessage);
public sealed record PublicFeatureFlagsDto(
bool ClipSubmissionsEnabled,
bool ClipReviewEnabled,
string ClipSubmissionDisabledMessage,
bool ShowactApplicationsEnabled,
string ShowactApplicationDisabledMessage,
bool SponsorsVisible);
public sealed record OverviewResponse(
int SeasonId,
int Year,
@@ -72,4 +84,5 @@ public sealed record OverviewResponse(
IEnumerable<WinnerPreviewDto> WinnersPreview,
IEnumerable<ArchiveYearDto> ArchiveYears,
PublicSiteContentDto SiteContent,
PublicFeatureFlagsDto FeatureFlags,
IEnumerable<FaqItemDto> Faq);
@@ -4,10 +4,12 @@ public sealed record CandidateSummaryDto(
int Id,
string DisplayName,
string ChannelSlug,
string ChannelUrl,
string Platform,
string? ClipUrl,
string? ClipTitle,
string? ClipPlatform);
string? ClipPlatform,
string? ClipEmbedStatus);
public sealed record PublicCategoryDetailDto(
int Id,
@@ -5,7 +5,11 @@ public sealed record WinnerArchiveItemDto(
string WinnerName,
string WinnerSlug,
string WinnerPlatform,
string WinnerUrl);
string WinnerUrl,
string? ClipUrl,
string? ClipTitle,
string? ClipPlatform,
string? ClipEmbedStatus);
public sealed record WinnerArchiveResponse(
int Year,