website cleanup

This commit is contained in:
2025-12-24 21:44:58 +01:00
parent 9b683a59d3
commit d78854a4c6
277 changed files with 6141 additions and 2693 deletions

View File

@@ -2,8 +2,7 @@
import React from 'react';
import { Scale, Users, Clock, Bell, Shield, Vote, UserCheck, AlertTriangle } from 'lucide-react';
import type { LeagueConfigFormModel, LeagueStewardingFormDTO } from '@core/racing/application';
import type { StewardingDecisionMode } from '@core/racing/domain/entities/League';
import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel';
interface LeagueStewardingSectionProps {
form: LeagueConfigFormModel;
@@ -12,7 +11,7 @@ interface LeagueStewardingSectionProps {
}
type DecisionModeOption = {
value: StewardingDecisionMode;
value: NonNullable<LeagueConfigFormModel['stewarding']>['decisionMode'];
label: string;
description: string;
icon: React.ReactNode;
@@ -21,40 +20,19 @@ type DecisionModeOption = {
const decisionModeOptions: DecisionModeOption[] = [
{
value: 'admin_only',
label: 'Admin Decision',
description: 'League admins make all penalty decisions',
value: 'single_steward',
label: 'Single Steward',
description: 'A single steward/admin makes all penalty decisions',
icon: <Shield className="w-5 h-5" />,
requiresVotes: false,
},
{
value: 'steward_vote',
label: 'Steward Vote',
description: 'Designated stewards vote to uphold protests',
value: 'committee_vote',
label: 'Committee Vote',
description: 'A group votes to uphold/dismiss protests',
icon: <Scale className="w-5 h-5" />,
requiresVotes: true,
},
{
value: 'member_vote',
label: 'Member Vote',
description: 'All league members vote on protests',
icon: <Users className="w-5 h-5" />,
requiresVotes: true,
},
{
value: 'steward_veto',
label: 'Steward Veto',
description: 'Protests upheld unless stewards vote against',
icon: <Vote className="w-5 h-5" />,
requiresVotes: true,
},
{
value: 'member_veto',
label: 'Member Veto',
description: 'Protests upheld unless members vote against',
icon: <UserCheck className="w-5 h-5" />,
requiresVotes: true,
},
];
export function LeagueStewardingSection({
@@ -64,7 +42,7 @@ export function LeagueStewardingSection({
}: LeagueStewardingSectionProps) {
// Provide default stewarding settings if not present
const stewarding = form.stewarding ?? {
decisionMode: 'admin_only' as const,
decisionMode: 'single_steward' as const,
requiredVotes: 2,
requireDefense: false,
defenseTimeLimit: 48,
@@ -75,7 +53,7 @@ export function LeagueStewardingSection({
notifyOnVoteRequired: true,
};
const updateStewarding = (updates: Partial<LeagueStewardingFormDTO>) => {
const updateStewarding = (updates: Partial<NonNullable<LeagueConfigFormModel['stewarding']>>) => {
onChange({
...form,
stewarding: {
@@ -147,7 +125,7 @@ export function LeagueStewardingSection({
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div>
<label className="block text-xs font-medium text-gray-400 mb-1.5">
Required votes to {stewarding.decisionMode.includes('veto') ? 'block' : 'uphold'}
Required votes to uphold
</label>
<select
value={stewarding.requiredVotes ?? 2}
@@ -375,7 +353,7 @@ export function LeagueStewardingSection({
</div>
{/* Warning about strict settings */}
{stewarding.requireDefense && stewarding.decisionMode !== 'admin_only' && (
{stewarding.requireDefense && stewarding.decisionMode !== 'single_steward' && (
<div className="flex items-start gap-3 p-4 rounded-xl bg-warning-amber/10 border border-warning-amber/20">
<AlertTriangle className="w-5 h-5 text-warning-amber shrink-0 mt-0.5" />
<div>
@@ -389,4 +367,4 @@ export function LeagueStewardingSection({
)}
</div>
);
}
}