Files
gridpilot.gg/apps/website/lib/view-data/TeamDetailViewData.ts
Marc Mintel 18133aef4c
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 5m42s
Contract Testing / contract-snapshot (pull_request) Has been skipped
view data fixes
2026-01-22 23:40:38 +01:00

67 lines
1.4 KiB
TypeScript

/**
* TeamDetailViewData - Pure ViewData for TeamDetailTemplate
* Contains only raw serializable data, no methods or computed properties
*/
import { ViewData } from "../contracts/view-data/ViewData";
export interface SponsorMetric {
icon: string; // Icon name (e.g. 'users', 'zap', 'calendar')
label: string;
value: string;
color?: string;
trend?: {
value: string;
isPositive: boolean;
};
}
export interface TeamDetailData {
id: string;
name: string;
tag: string;
description?: string;
ownerId: string;
leagues: string[];
createdAt?: string;
foundedDateLabel?: string;
specialization?: string;
region?: string;
languages?: string[];
category?: string;
membership?: {
role: string;
joinedAt: string;
isActive: boolean;
} | null;
canManage: boolean;
}
export interface TeamMemberData {
driverId: string;
driverName: string;
role: 'owner' | 'manager' | 'member';
joinedAt: string;
joinedAtLabel: string;
isActive: boolean;
avatarUrl: string;
}
export interface TeamTab {
id: 'overview' | 'roster' | 'standings' | 'admin';
label: string;
visible: boolean;
}
export interface TeamDetailViewData extends ViewData {
team: TeamDetailData;
memberships: TeamMemberData[];
currentDriverId: string;
isAdmin: boolean;
teamMetrics: SponsorMetric[];
tabs: TeamTab[];
memberCountLabel: string;
leagueCountLabel: string;
}