37 lines
1.2 KiB
TypeScript
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);
|
|
}
|
|
} |