website cleanup

This commit is contained in:
2025-12-25 00:19:36 +01:00
parent d78854a4c6
commit 9486455b9e
82 changed files with 1223 additions and 363 deletions

View File

@@ -5,14 +5,11 @@ import LeagueChampionshipStats from '@/components/leagues/LeagueChampionshipStat
import Card from '@/components/ui/Card';
import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId';
import type { LeagueMembership } from '@/lib/types/LeagueMembership';
import type { MembershipRoleDTO } from '@/lib/types/generated/MembershipRoleDTO';
import { LeagueRoleUtility } from '@/lib/utilities/LeagueRoleUtility';
import { useServices } from '@/lib/services/ServiceProvider';
import type { DriverDTO } from '@/lib/types/generated/DriverDTO';
import { DriverViewModel } from '@/lib/view-models/DriverViewModel';
import { LeagueStandingsViewModel } from '@/lib/view-models/LeagueStandingsViewModel';
import { StandingEntryViewModel } from '@/lib/view-models/StandingEntryViewModel';
import type { LeagueStandingDTO } from '@/lib/types/generated/LeagueStandingDTO';
import { useParams } from 'next/navigation';
import { useCallback, useEffect, useState } from 'react';
@@ -23,8 +20,7 @@ export default function LeagueStandingsPage() {
const { leagueService } = useServices();
const [standings, setStandings] = useState<StandingEntryViewModel[]>([]);
const [drivers, setDrivers] = useState<DriverDTO[]>([]);
const [driverVms, setDriverVms] = useState<DriverViewModel[]>([]);
const [drivers, setDrivers] = useState<DriverViewModel[]>([]);
const [memberships, setMemberships] = useState<LeagueMembership[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
@@ -34,8 +30,7 @@ export default function LeagueStandingsPage() {
try {
const vm = await leagueService.getLeagueStandings(leagueId, currentDriverId);
setStandings(vm.standings);
setDrivers(vm.drivers as unknown as DriverDTO[]);
setDriverVms(vm.drivers.map((d) => new DriverViewModel(d)));
setDrivers(vm.drivers.map((d) => new DriverViewModel(d)));
setMemberships(vm.memberships);
// Check if current user is admin
@@ -65,7 +60,7 @@ export default function LeagueStandingsPage() {
}
};
const handleUpdateRole = async (driverId: string, newRole: MembershipRoleDTO['value']) => {
const handleUpdateRole = async (driverId: string, newRole: string) => {
try {
await leagueService.updateMemberRole(leagueId, currentDriverId, driverId, newRole);
await loadData();
@@ -93,7 +88,7 @@ export default function LeagueStandingsPage() {
return (
<div className="space-y-6">
{/* Championship Stats */}
<LeagueChampionshipStats standings={standings} drivers={driverVms} />
<LeagueChampionshipStats standings={standings} drivers={drivers} />
<Card>
<h2 className="text-xl font-semibold text-white mb-4">Championship Standings</h2>

View File

@@ -25,7 +25,7 @@ import { useParams } from 'next/navigation';
import { useEffect, useMemo, useState } from 'react';
// Local type definitions to replace core imports
type PenaltyType = 'time_penalty' | 'grid_penalty' | 'points_deduction' | 'disqualification' | 'warning' | 'license_points';
type PenaltyType = 'time_penalty' | 'grid_penalty' | 'points_deduction' | 'disqualification' | 'warning' | 'license_points' | 'probation' | 'fine' | 'race_ban';
export default function LeagueStewardingPage() {
const params = useParams();

View File

@@ -19,8 +19,6 @@ import { TeamMemberViewModel } from '@/lib/view-models/TeamMemberViewModel';
import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId';
type TeamRole = 'owner' | 'admin' | 'member';
type Tab = 'overview' | 'roster' | 'standings' | 'admin';
export default function TeamDetailPage() {
@@ -51,7 +49,7 @@ export default function TeamDetailPage() {
const teamMembers = await teamService.getTeamMembers(teamId, currentDriverId, teamDetails.ownerId);
const adminStatus = teamDetails.isOwner ||
teamMembers.some((m) => m.driverId === currentDriverId && (m.role === 'admin' || m.role === 'owner'));
teamMembers.some((m) => m.driverId === currentDriverId && (m.role === 'manager' || m.role === 'owner'));
setTeam(teamDetails);
setMemberships(teamMembers);
@@ -76,7 +74,7 @@ export default function TeamDetailPage() {
try {
const performer = await teamService.getMembership(teamId, currentDriverId);
if (!performer || (performer.role !== 'owner' && performer.role !== 'admin')) {
if (!performer || (performer.role !== 'owner' && performer.role !== 'manager')) {
throw new Error('Only owners or admins can remove members');
}
@@ -95,10 +93,10 @@ export default function TeamDetailPage() {
}
};
const handleChangeRole = async (driverId: string, newRole: TeamRole) => {
const handleChangeRole = async (driverId: string, newRole: 'owner' | 'admin' | 'member') => {
try {
const performer = await teamService.getMembership(teamId, currentDriverId);
if (!performer || (performer.role !== 'owner' && performer.role !== 'admin')) {
if (!performer || (performer.role !== 'owner' && performer.role !== 'manager')) {
throw new Error('Only owners or admins can update roles');
}
@@ -110,7 +108,9 @@ export default function TeamDetailPage() {
throw new Error('Cannot change the owner role');
}
await teamService.updateMembership(teamId, driverId, newRole);
// Convert 'admin' to 'manager' for the service
const serviceRole = newRole === 'admin' ? 'manager' : newRole;
await teamService.updateMembership(teamId, driverId, serviceRole);
handleUpdate();
} catch (error) {
alert(error instanceof Error ? error.message : 'Failed to change role');
@@ -313,4 +313,4 @@ export default function TeamDetailPage() {
</div>
</div>
);
}
}