44 lines
969 B
TypeScript
44 lines
969 B
TypeScript
/**
|
|
* View Model for Driver's Team
|
|
*
|
|
* Client-only UI helper built from ViewData.
|
|
*/
|
|
|
|
import { ViewModel } from "../contracts/view-models/ViewModel";
|
|
import { ProfileFormatter } from "../formatters/ProfileFormatter";
|
|
import type { TeamDetailData } from "../view-data/TeamDetailViewData";
|
|
|
|
export class DriverTeamViewModel extends ViewModel {
|
|
constructor(private readonly viewData: TeamDetailData) {
|
|
super();
|
|
}
|
|
|
|
get teamId(): string {
|
|
return this.viewData.id;
|
|
}
|
|
|
|
get teamName(): string {
|
|
return this.viewData.name;
|
|
}
|
|
|
|
get tag(): string {
|
|
return this.viewData.tag;
|
|
}
|
|
|
|
get role(): string {
|
|
return this.viewData.membership?.role ?? "member";
|
|
}
|
|
|
|
get canManage(): boolean {
|
|
return this.viewData.canManage;
|
|
}
|
|
|
|
get isOwner(): boolean {
|
|
return this.viewData.membership?.role === "owner";
|
|
}
|
|
|
|
/** UI-specific: Display role */
|
|
get displayRole(): string {
|
|
return ProfileFormatter.getTeamRole(this.role).text;
|
|
}
|
|
} |