refactor page to use services
This commit is contained in:
@@ -8,8 +8,7 @@ import Button from '@/components/ui/Button';
|
||||
import Card from '@/components/ui/Card';
|
||||
import Heading from '@/components/ui/Heading';
|
||||
import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId';
|
||||
import { ServiceFactory } from '@/lib/services/ServiceFactory';
|
||||
import { LeagueMembershipService } from '@/lib/services/leagues/LeagueMembershipService';
|
||||
import { useServices } from '@/lib/services/ServiceProvider';
|
||||
import { LeagueMembershipUtility } from '@/lib/utilities/LeagueMembershipUtility';
|
||||
import type { RaceDetailViewModel } from '@/lib/view-models/RaceDetailViewModel';
|
||||
import {
|
||||
@@ -38,6 +37,7 @@ export default function RaceDetailPage() {
|
||||
const router = useRouter();
|
||||
const params = useParams();
|
||||
const raceId = params.id as string;
|
||||
const { raceService, leagueMembershipService } = useServices();
|
||||
|
||||
const [viewModel, setViewModel] = useState<RaceDetailViewModel | null>(null);
|
||||
const [loading, setLoading] = useState(true);
|
||||
@@ -57,15 +57,13 @@ export default function RaceDetailPage() {
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
try {
|
||||
const serviceFactory = new ServiceFactory(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');
|
||||
const raceService = serviceFactory.createRaceService();
|
||||
const vm = await raceService.getRaceDetail(raceId, currentDriverId);
|
||||
setViewModel(vm);
|
||||
|
||||
// Fetch league membership for admin controls
|
||||
if (vm.league) {
|
||||
await LeagueMembershipService.fetchLeagueMemberships(vm.league.id);
|
||||
const leagueMembership = LeagueMembershipService.getMembership(vm.league.id, currentDriverId);
|
||||
await leagueMembershipService.fetchLeagueMemberships(vm.league.id);
|
||||
const leagueMembership = leagueMembershipService.getMembership(vm.league.id, currentDriverId);
|
||||
setMembership(leagueMembership);
|
||||
}
|
||||
|
||||
@@ -123,8 +121,6 @@ export default function RaceDetailPage() {
|
||||
|
||||
setCancelling(true);
|
||||
try {
|
||||
const serviceFactory = new ServiceFactory(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');
|
||||
const raceService = serviceFactory.createRaceService();
|
||||
await raceService.cancelRace(race.id);
|
||||
await loadRaceData();
|
||||
} catch (err) {
|
||||
@@ -147,8 +143,6 @@ export default function RaceDetailPage() {
|
||||
|
||||
setRegistering(true);
|
||||
try {
|
||||
const serviceFactory = new ServiceFactory(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');
|
||||
const raceService = serviceFactory.createRaceService();
|
||||
await raceService.registerForRace(race.id, league.id, currentDriverId);
|
||||
await loadRaceData();
|
||||
} catch (err) {
|
||||
@@ -171,8 +165,6 @@ export default function RaceDetailPage() {
|
||||
|
||||
setRegistering(true);
|
||||
try {
|
||||
const serviceFactory = new ServiceFactory(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');
|
||||
const raceService = serviceFactory.createRaceService();
|
||||
await raceService.withdrawFromRace(race.id, currentDriverId);
|
||||
await loadRaceData();
|
||||
} catch (err) {
|
||||
@@ -973,8 +965,6 @@ export default function RaceDetailPage() {
|
||||
raceName={race.track}
|
||||
onConfirm={async () => {
|
||||
try {
|
||||
const serviceFactory = new ServiceFactory(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');
|
||||
const raceService = serviceFactory.createRaceService();
|
||||
await raceService.completeRace(race.id);
|
||||
await loadRaceData();
|
||||
setShowEndRaceModal(false);
|
||||
|
||||
@@ -7,7 +7,7 @@ import ResultsTable from '@/components/races/ResultsTable';
|
||||
import Button from '@/components/ui/Button';
|
||||
import Card from '@/components/ui/Card';
|
||||
import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId';
|
||||
import { raceResultsService } from '@/lib/services/races/RaceResultsService';
|
||||
import { useServices } from '@/lib/services/ServiceProvider';
|
||||
import type { RaceResultsDetailViewModel } from '@/lib/view-models';
|
||||
import { ArrowLeft, Calendar, Trophy, Users, Zap } from 'lucide-react';
|
||||
import { useParams, useRouter } from 'next/navigation';
|
||||
@@ -18,6 +18,7 @@ export default function RaceResultsPage() {
|
||||
const params = useParams();
|
||||
const raceId = params.id as string;
|
||||
const currentDriverId = useEffectiveDriverId();
|
||||
const { raceResultsService } = useServices();
|
||||
|
||||
const [raceData, setRaceData] = useState<RaceResultsDetailViewModel | null>(null);
|
||||
const [raceSOF, setRaceSOF] = useState<number | null>(null);
|
||||
|
||||
Reference in New Issue
Block a user