wip
This commit is contained in:
@@ -9,6 +9,7 @@ import Button from '@/components/ui/Button';
|
||||
import Breadcrumbs from '@/components/layout/Breadcrumbs';
|
||||
import SponsorInsightsCard, { useSponsorMode, MetricBuilders, SlotTemplates } from '@/components/sponsors/SponsorInsightsCard';
|
||||
import { getImageService } from '@/lib/di-container';
|
||||
import { TeamMembersPresenter } from '@/lib/presenters/TeamMembersPresenter';
|
||||
import TeamRoster from '@/components/teams/TeamRoster';
|
||||
import TeamStandings from '@/components/teams/TeamStandings';
|
||||
import TeamAdmin from '@/components/teams/TeamAdmin';
|
||||
@@ -19,9 +20,17 @@ import {
|
||||
getTeamMembershipRepository,
|
||||
} from '@/lib/di-container';
|
||||
import { useEffectiveDriverId } from '@/lib/currentDriver';
|
||||
import type { Team, TeamMembership, TeamRole } from '@gridpilot/racing';
|
||||
import type { Team } from '@gridpilot/racing';
|
||||
import { Users, Trophy, TrendingUp, Star, Zap } from 'lucide-react';
|
||||
|
||||
type TeamRole = 'owner' | 'manager' | 'driver';
|
||||
|
||||
interface TeamMembership {
|
||||
driverId: string;
|
||||
role: TeamRole;
|
||||
joinedAt: Date;
|
||||
}
|
||||
|
||||
type Tab = 'overview' | 'roster' | 'standings' | 'admin';
|
||||
|
||||
export default function TeamDetailPage() {
|
||||
@@ -42,16 +51,32 @@ export default function TeamDetailPage() {
|
||||
const detailsUseCase = getGetTeamDetailsUseCase();
|
||||
const membersUseCase = getGetTeamMembersUseCase();
|
||||
|
||||
await detailsUseCase.execute({ teamId, driverId: currentDriverId });
|
||||
const detailsViewModel = detailsUseCase.presenter.getViewModel();
|
||||
|
||||
await membersUseCase.execute({ teamId });
|
||||
const membersViewModel = membersUseCase.presenter.getViewModel();
|
||||
const teamMemberships = membersViewModel.members;
|
||||
await detailsUseCase.execute(teamId, currentDriverId);
|
||||
const detailsPresenter = detailsUseCase.presenter;
|
||||
const detailsViewModel = detailsPresenter
|
||||
? (detailsPresenter as any).getViewModel?.() as { team: Team } | null
|
||||
: null;
|
||||
|
||||
if (!detailsViewModel) {
|
||||
setTeam(null);
|
||||
setMemberships([]);
|
||||
setIsAdmin(false);
|
||||
return;
|
||||
}
|
||||
|
||||
const teamMembersPresenter = new TeamMembersPresenter();
|
||||
await membersUseCase.execute({ teamId }, teamMembersPresenter);
|
||||
const membersViewModel = teamMembersPresenter.getViewModel();
|
||||
|
||||
const teamMemberships: TeamMembership[] = (membersViewModel?.members ?? []).map((m) => ({
|
||||
driverId: m.driverId,
|
||||
role: m.role as TeamRole,
|
||||
joinedAt: new Date(m.joinedAt),
|
||||
}));
|
||||
|
||||
const adminStatus =
|
||||
teamMemberships.some(
|
||||
(m) =>
|
||||
(m: TeamMembership) =>
|
||||
m.driverId === currentDriverId &&
|
||||
(m.role === 'owner' || m.role === 'manager'),
|
||||
) ?? false;
|
||||
|
||||
Reference in New Issue
Block a user