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
+6
View File
@@ -10,4 +10,10 @@ public sealed class Candidate
public string DisplayName { get; set; } = string.Empty;
public string ChannelSlug { get; set; } = string.Empty;
public string Platform { get; set; } = "Twitch";
public string AcceptanceStatus { get; set; } = "open";
public string? AcceptanceNote { get; set; }
public string? ClipCompilationUrl { get; set; }
public string? ClipCompilationTitle { get; set; }
public string? ClipCompilationPlatform { get; set; }
public string ClipEmbedStatus { get; set; } = "unchecked";
}
+23
View File
@@ -0,0 +1,23 @@
namespace Backend.Domain;
public sealed class ShowactApplication
{
public int Id { get; set; }
public int SeasonId { get; set; }
public Season Season { get; set; } = null!;
public string ArtistName { get; set; } = string.Empty;
public string ContactEmail { get; set; } = string.Empty;
public string ContactDiscord { get; set; } = string.Empty;
public string PlatformUrl { get; set; } = string.Empty;
public string PerformanceType { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public string TechnicalNotes { get; set; } = string.Empty;
public string ReferenceUrl { get; set; } = string.Empty;
public string Status { get; set; } = "pending";
public string? ReviewNote { get; set; }
public string? ReviewedByTwitchId { get; set; }
public string CreatedFromIp { get; set; } = string.Empty;
public string UserAgent { get; set; } = string.Empty;
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
public DateTimeOffset? ReviewedAt { get; set; }
}
+11
View File
@@ -16,9 +16,20 @@ public sealed class SiteSettings
public string ContactContent { get; set; } = string.Empty;
public string SponsorsUrl { get; set; } = string.Empty;
public string SponsorsContent { get; set; } = string.Empty;
public string ShowactsUrl { get; set; } = string.Empty;
public string ShowactsContent { get; set; } = string.Empty;
public string SocialLinksJson { get; set; } = "[]";
public string FaqJson { get; set; } = "[]";
public string RiskRulesJson { get; set; } = "[]";
public string WorkflowRulesJson { get; set; } = "[]";
public string NominationLinkBlacklistJson { get; set; } = "[]";
public bool ClipSubmissionsEnabled { get; set; }
public bool ClipReviewEnabled { get; set; } = true;
public bool ClipAdminMenuVisible { get; set; } = true;
public string ClipSubmissionDisabledMessage { get; set; } = "Clip-Einreichungen sind aktuell geschlossen.";
public bool ShowactApplicationsEnabled { get; set; }
public string ShowactApplicationDisabledMessage { get; set; } = "Showact-Bewerbungen sind aktuell geschlossen.";
public bool SponsorsVisible { get; set; } = true;
public bool DemoLoginManagedByDatabase { get; set; }
public bool DemoLoginEnabled { get; set; }
public string DemoLoginEmail { get; set; } = string.Empty;
+17
View File
@@ -0,0 +1,17 @@
namespace Backend.Domain;
public sealed class Sponsor
{
public int Id { get; set; }
public int SeasonId { get; set; }
public Season Season { get; set; } = null!;
public string Name { get; set; } = string.Empty;
public string WebsiteUrl { get; set; } = string.Empty;
public string LogoUrl { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public string Tier { get; set; } = "Partner";
public int SortOrder { get; set; }
public bool IsVisible { get; set; } = true;
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
public DateTimeOffset? UpdatedAt { get; set; }
}