view data fixes
This commit is contained in:
@@ -1,14 +1,10 @@
|
||||
import type { TeamDetailPageDto } from '@/lib/page-queries/TeamDetailPageQuery';
|
||||
import type { GetTeamDetailsOutputDTO } from '@/lib/types/generated/GetTeamDetailsOutputDTO';
|
||||
import type { TeamDetailViewData, TeamDetailData, TeamMemberData, SponsorMetric, TeamTab } from '@/lib/view-data/TeamDetailViewData';
|
||||
import { DateDisplay } from '@/lib/display-objects/DateDisplay';
|
||||
import { MemberDisplay } from '@/lib/display-objects/MemberDisplay';
|
||||
import { LeagueDisplay } from '@/lib/display-objects/LeagueDisplay';
|
||||
import { NumberDisplay } from '@/lib/display-objects/NumberDisplay';
|
||||
|
||||
/**
|
||||
* TeamDetailViewDataBuilder - Transforms TeamDetailPageDto into ViewData
|
||||
* Deterministic; side-effect free; no HTTP calls
|
||||
*/
|
||||
import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder";
|
||||
|
||||
export class TeamDetailViewDataBuilder implements ViewDataBuilder<any, any> {
|
||||
@@ -16,26 +12,25 @@ export class TeamDetailViewDataBuilder implements ViewDataBuilder<any, any> {
|
||||
return TeamDetailViewDataBuilder.build(input);
|
||||
}
|
||||
|
||||
static build(
|
||||
static build(apiDto: TeamDetailPageDto): TeamDetailViewData {
|
||||
static build(apiDto: GetTeamDetailsOutputDTO): TeamDetailViewData {
|
||||
const team: TeamDetailData = {
|
||||
id: apiDto.team.id,
|
||||
name: apiDto.team.name,
|
||||
tag: apiDto.team.tag,
|
||||
description: apiDto.team.description,
|
||||
ownerId: apiDto.team.ownerId,
|
||||
leagues: apiDto.team.leagues,
|
||||
leagues: (apiDto.team as any).leagues || [],
|
||||
createdAt: apiDto.team.createdAt,
|
||||
foundedDateLabel: apiDto.team.createdAt ? DateDisplay.formatMonthYear(apiDto.team.createdAt) : 'Unknown',
|
||||
specialization: apiDto.team.specialization,
|
||||
region: apiDto.team.region,
|
||||
languages: apiDto.team.languages,
|
||||
category: apiDto.team.category,
|
||||
membership: apiDto.team.membership,
|
||||
canManage: apiDto.team.canManage,
|
||||
specialization: (apiDto.team as any).specialization || null,
|
||||
region: (apiDto.team as any).region || null,
|
||||
languages: (apiDto.team as any).languages || [],
|
||||
category: (apiDto.team as any).category || null,
|
||||
membership: (apiDto.team as any).membership || 'open',
|
||||
canManage: apiDto.canManage,
|
||||
};
|
||||
|
||||
const memberships: TeamMemberData[] = apiDto.memberships.map((membership) => ({
|
||||
const memberships: TeamMemberData[] = ((apiDto as any).memberships || []).map((membership: any) => ({
|
||||
driverId: membership.driverId,
|
||||
driverName: membership.driverName,
|
||||
role: membership.role,
|
||||
@@ -46,7 +41,8 @@ export class TeamDetailViewDataBuilder implements ViewDataBuilder<any, any> {
|
||||
}));
|
||||
|
||||
// Calculate isAdmin based on current driver's role
|
||||
const currentDriverMembership = memberships.find(m => m.driverId === apiDto.currentDriverId);
|
||||
const currentDriverId = (apiDto as any).currentDriverId;
|
||||
const currentDriverMembership = memberships.find(m => m.driverId === currentDriverId);
|
||||
const isAdmin = currentDriverMembership?.role === 'owner' || currentDriverMembership?.role === 'manager';
|
||||
|
||||
// Build sponsor metrics
|
||||
@@ -89,7 +85,7 @@ export class TeamDetailViewDataBuilder implements ViewDataBuilder<any, any> {
|
||||
return {
|
||||
team,
|
||||
memberships,
|
||||
currentDriverId: apiDto.currentDriverId,
|
||||
currentDriverId: currentDriverId || null,
|
||||
isAdmin,
|
||||
teamMetrics,
|
||||
tabs,
|
||||
|
||||
Reference in New Issue
Block a user