Files
gridpilot.gg/apps/website/lib/view-models/AvatarViewModel.ts
Marc Mintel 1b0a1f4aee
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 7m11s
Contract Testing / contract-snapshot (pull_request) Has been skipped
view data fixes
2026-01-24 23:29:55 +01:00

37 lines
1.2 KiB
TypeScript

import { AvatarViewData } from "@/lib/view-data/AvatarViewData";
import { ViewModel } from "../contracts/view-models/ViewModel";
import { AvatarFormatter } from "../formatters/AvatarFormatter";
/**
* Avatar View Model
*
* Represents avatar information for the UI layer.
* Transforms AvatarViewData into UI-ready state with formatting and derived fields.
*/
export class AvatarViewModel extends ViewModel {
private readonly data: any;
constructor(data: any) {
super();
this.data = data;
}
get driverId(): string { return this.data.driverId; }
get avatarUrl(): string | undefined { return this.data.avatarUrl; }
get hasAvatar(): boolean { return !!this.data.avatarUrl; }
/** UI-specific: Buffer is already base64 encoded in ViewData */
get bufferBase64(): string {
return this.data.buffer;
}
/** UI-specific: Derive content type label using Display Object */
get contentTypeLabel(): string {
return AvatarFormatter.formatContentType(this.data.contentType);
}
/** UI-specific: Derive validity check using Display Object */
get hasValidData(): boolean {
return AvatarFormatter.hasValidData(this.data.buffer, this.data.contentType);
}
}