import { useQuery } from '@tanstack/react-query'; import { useInject } from '@/lib/di/hooks/useInject'; import { LEAGUE_SERVICE_TOKEN } from '@/lib/di/tokens'; import { enhanceQueryResult } from '@/lib/di/hooks/useReactQueryWithApiError'; import { LeagueScheduleViewModel, LeagueScheduleRaceViewModel } from '@/lib/view-models/LeagueScheduleViewModel'; import type { LeagueScheduleDTO } from '@/lib/types/generated/LeagueScheduleDTO'; import type { RaceDTO } from '@/lib/types/generated/RaceDTO'; function mapRaceDtoToViewModel(race: RaceDTO): LeagueScheduleRaceViewModel { const scheduledAt = race.date ? new Date(race.date) : new Date(0); const now = new Date(); const isPast = scheduledAt.getTime() < now.getTime(); const isUpcoming = !isPast; return { id: race.id, name: race.name, scheduledAt, isPast, isUpcoming, status: isPast ? 'completed' : 'scheduled', track: undefined, car: undefined, sessionType: undefined, isRegistered: undefined, }; } export function useLeagueSchedule(leagueId: string) { const leagueService = useInject(LEAGUE_SERVICE_TOKEN); const queryResult = useQuery({ queryKey: ['leagueSchedule', leagueId], queryFn: async (): Promise => { const dto = await leagueService.getLeagueSchedule(leagueId); const races = dto.races.map(mapRaceDtoToViewModel); return new LeagueScheduleViewModel(races); }, enabled: !!leagueId, }); return enhanceQueryResult(queryResult); }