Files
gridpilot.gg/apps/website/lib/view-models/RecordEngagementInputViewModel.ts
Marc Mintel d97f50ed72
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 6m4s
Contract Testing / contract-snapshot (pull_request) Has been skipped
view data fixes
2026-01-23 11:59:49 +01:00

34 lines
1.0 KiB
TypeScript

/**
* Record engagement input view model
* Represents input data for recording an engagement event
*
* Note: No matching generated DTO available yet
*/
import { ViewModel } from "../contracts/view-models/ViewModel";
export class RecordEngagementInputViewModel extends ViewModel {
eventType: string;
userId?: string;
metadata?: Record<string, unknown>;
constructor(data: { eventType: string; userId?: string; metadata?: Record<string, unknown> }) {
this.eventType = data.eventType;
this.userId = data.userId;
this.metadata = data.metadata;
}
/** UI-specific: Formatted event type for display */
get displayEventType(): string {
return this.eventType.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
}
/** UI-specific: Has metadata */
get hasMetadata(): boolean {
return this.metadata !== undefined && Object.keys(this.metadata).length > 0;
}
/** UI-specific: Metadata keys count */
get metadataKeysCount(): number {
return this.metadata ? Object.keys(this.metadata).length : 0;
}
}