57 lines
1.5 KiB
TypeScript
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';
|
|
}
|
|
} |