Files
gridpilot.gg/apps/website/lib/view-models/TeamDetailsViewModel.ts
2025-12-18 00:08:47 +01:00

57 lines
1.5 KiB
TypeScript

import { TeamMemberViewModel } from './TeamMemberViewModel';
// Note: No generated DTO available for TeamDetails yet
interface TeamDetailsDTO {
id: string;
name: string;
description?: string;
logoUrl?: string;
memberCount: number;
ownerId: string;
members: any[];
}
export class TeamDetailsViewModel {
id: string;
name: string;
description?: string;
logoUrl?: string;
memberCount: number;
ownerId: string;
members: TeamMemberViewModel[];
private currentUserId: string;
constructor(dto: TeamDetailsDTO, currentUserId: string) {
this.id = dto.id;
this.name = dto.name;
this.description = dto.description;
this.logoUrl = dto.logoUrl;
this.memberCount = dto.memberCount;
this.ownerId = dto.ownerId;
this.members = dto.members.map(m => new TeamMemberViewModel(m, currentUserId, dto.ownerId));
this.currentUserId = currentUserId;
}
/** UI-specific: Whether current user is owner */
get isOwner(): boolean {
return this.currentUserId === this.ownerId;
}
/** UI-specific: Whether can add members */
get canAddMembers(): boolean {
return this.isOwner && this.memberCount < 10; // Assuming max 10
}
/** UI-specific: Member management actions available */
get memberActionsAvailable(): boolean {
return this.isOwner;
}
/** UI-specific: Team status */
get teamStatus(): string {
if (this.memberCount < 5) return 'Recruiting';
if (this.memberCount < 10) return 'Active';
return 'Full';
}
}