wip
This commit is contained in:
@@ -34,6 +34,7 @@ import {
|
||||
ArrowLeft,
|
||||
Scale,
|
||||
} from 'lucide-react';
|
||||
import { RaceDetailPresenter } from '@/lib/presenters/RaceDetailPresenter';
|
||||
|
||||
export default function RaceDetailPage() {
|
||||
const router = useRouter();
|
||||
@@ -57,8 +58,9 @@ export default function RaceDetailPage() {
|
||||
setError(null);
|
||||
try {
|
||||
const useCase = getGetRaceDetailUseCase();
|
||||
await useCase.execute({ raceId, driverId: currentDriverId });
|
||||
const vm = useCase.presenter.getViewModel();
|
||||
const presenter = new RaceDetailPresenter();
|
||||
await useCase.execute({ raceId, driverId: currentDriverId }, presenter);
|
||||
const vm = presenter.getViewModel();
|
||||
if (!vm) {
|
||||
throw new Error('Race detail not available');
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ import {
|
||||
getGetRaceResultsDetailUseCase,
|
||||
getImportRaceResultsUseCase,
|
||||
} from '@/lib/di-container';
|
||||
import { RaceWithSOFPresenter } from '@/lib/presenters/RaceWithSOFPresenter';
|
||||
import { RaceResultsDetailPresenter } from '@/lib/presenters/RaceResultsDetailPresenter';
|
||||
import type {
|
||||
RaceResultsHeaderViewModel,
|
||||
RaceResultsLeagueViewModel,
|
||||
@@ -71,7 +73,7 @@ export default function RaceResultsPage() {
|
||||
const [currentDriverId, setCurrentDriverId] = useState<string | undefined>(undefined);
|
||||
const [raceSOF, setRaceSOF] = useState<number | null>(null);
|
||||
const [penalties, setPenalties] = useState<PenaltyData[]>([]);
|
||||
const [pointsSystem, setPointsSystem] = useState<Record<number, number>>({});
|
||||
const [pointsSystem, setPointsSystem] = useState<Record<number, number> | undefined>(undefined);
|
||||
const [fastestLapTime, setFastestLapTime] = useState<number | undefined>(undefined);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
@@ -81,9 +83,10 @@ export default function RaceResultsPage() {
|
||||
const loadData = async () => {
|
||||
try {
|
||||
const raceResultsUseCase = getGetRaceResultsDetailUseCase();
|
||||
await raceResultsUseCase.execute({ raceId });
|
||||
const raceResultsPresenter = new RaceResultsDetailPresenter();
|
||||
await raceResultsUseCase.execute({ raceId }, raceResultsPresenter);
|
||||
|
||||
const viewModel = raceResultsUseCase.presenter.getViewModel();
|
||||
const viewModel = raceResultsPresenter.getViewModel();
|
||||
|
||||
if (!viewModel) {
|
||||
setError('Failed to load race data');
|
||||
@@ -130,8 +133,9 @@ export default function RaceResultsPage() {
|
||||
|
||||
try {
|
||||
const raceWithSOFUseCase = getGetRaceWithSOFUseCase();
|
||||
await raceWithSOFUseCase.execute({ raceId });
|
||||
const raceViewModel = raceWithSOFUseCase.presenter.getViewModel();
|
||||
const sofPresenter = new RaceWithSOFPresenter();
|
||||
await raceWithSOFUseCase.execute({ raceId }, sofPresenter);
|
||||
const raceViewModel = sofPresenter.getViewModel();
|
||||
if (raceViewModel) {
|
||||
setRaceSOF(raceViewModel.strengthOfField);
|
||||
}
|
||||
@@ -290,7 +294,7 @@ export default function RaceResultsPage() {
|
||||
<ResultsTable
|
||||
results={results}
|
||||
drivers={drivers}
|
||||
pointsSystem={pointsSystem}
|
||||
pointsSystem={pointsSystem ?? {}}
|
||||
fastestLapTime={fastestLapTime ?? 0}
|
||||
penalties={penalties}
|
||||
currentDriverId={currentDriverId ?? ''}
|
||||
|
||||
@@ -8,6 +8,7 @@ import Button from '@/components/ui/Button';
|
||||
import Heading from '@/components/ui/Heading';
|
||||
import Breadcrumbs from '@/components/layout/Breadcrumbs';
|
||||
import { getGetAllRacesPageDataUseCase } from '@/lib/di-container';
|
||||
import { AllRacesPagePresenter } from '@/lib/presenters/AllRacesPagePresenter';
|
||||
import type {
|
||||
AllRacesPageViewModel,
|
||||
AllRacesListItemViewModel,
|
||||
@@ -53,8 +54,9 @@ export default function AllRacesPage() {
|
||||
const loadRaces = async () => {
|
||||
try {
|
||||
const useCase = getGetAllRacesPageDataUseCase();
|
||||
await useCase.execute();
|
||||
const viewModel = useCase.presenter.getViewModel();
|
||||
const presenter = new AllRacesPagePresenter();
|
||||
await useCase.execute(undefined, presenter);
|
||||
const viewModel = presenter.getViewModel();
|
||||
setPageData(viewModel);
|
||||
} catch (err) {
|
||||
console.error('Failed to load races:', err);
|
||||
|
||||
@@ -7,6 +7,7 @@ import Card from '@/components/ui/Card';
|
||||
import Button from '@/components/ui/Button';
|
||||
import Heading from '@/components/ui/Heading';
|
||||
import { getGetRacesPageDataUseCase } from '@/lib/di-container';
|
||||
import { RacesPagePresenter } from '@/lib/presenters/RacesPagePresenter';
|
||||
import type {
|
||||
RacesPageViewModel,
|
||||
RaceListItemViewModel,
|
||||
@@ -46,8 +47,9 @@ export default function RacesPage() {
|
||||
const loadRaces = async () => {
|
||||
try {
|
||||
const useCase = getGetRacesPageDataUseCase();
|
||||
await useCase.execute();
|
||||
const data = useCase.presenter.getViewModel();
|
||||
const presenter = new RacesPagePresenter();
|
||||
await useCase.execute(undefined, presenter);
|
||||
const data = presenter.getViewModel();
|
||||
setPageData(data);
|
||||
} catch (err) {
|
||||
console.error('Failed to load races:', err);
|
||||
|
||||
Reference in New Issue
Block a user