import type { TeamDetailPageDto } from '@/lib/page-queries/TeamDetailPageQuery'; import type { TeamDetailViewData, TeamDetailData, TeamMemberData } from '@/templates/TeamDetailViewData'; /** * TeamDetailPresenter - Client-side presenter for team detail page * Transforms PageQuery DTO into ViewData for the template * Deterministic; no hooks; no side effects */ export class TeamDetailPresenter { static createViewData(pageDto: TeamDetailPageDto): TeamDetailViewData { const team: TeamDetailData = { id: pageDto.team.id, name: pageDto.team.name, tag: pageDto.team.tag, description: pageDto.team.description, ownerId: pageDto.team.ownerId, leagues: pageDto.team.leagues, createdAt: pageDto.team.createdAt, specialization: pageDto.team.specialization, region: pageDto.team.region, languages: pageDto.team.languages, category: pageDto.team.category, membership: pageDto.team.membership, canManage: pageDto.team.canManage, }; const memberships: TeamMemberData[] = pageDto.memberships.map(membership => ({ driverId: membership.driverId, driverName: membership.driverName, role: membership.role, joinedAt: membership.joinedAt, isActive: membership.isActive, avatarUrl: membership.avatarUrl, })); // Calculate isAdmin based on current driver's role const currentDriverMembership = memberships.find(m => m.driverId === pageDto.currentDriverId); const isAdmin = currentDriverMembership?.role === 'owner' || currentDriverMembership?.role === 'manager'; return { team, memberships, currentDriverId: pageDto.currentDriverId, isAdmin, }; } }