35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
// Analytics metrics view model
|
|
// Represents metrics data for analytics
|
|
|
|
export class AnalyticsMetricsViewModel {
|
|
pageViews: number;
|
|
uniqueVisitors: number;
|
|
averageSessionDuration: number;
|
|
bounceRate: number;
|
|
|
|
constructor(data: { pageViews: number; uniqueVisitors: number; averageSessionDuration: number; bounceRate: number }) {
|
|
Object.assign(this, data);
|
|
}
|
|
|
|
/** UI-specific: Formatted page views */
|
|
get formattedPageViews(): string {
|
|
return this.pageViews.toLocaleString();
|
|
}
|
|
|
|
/** UI-specific: Formatted unique visitors */
|
|
get formattedUniqueVisitors(): string {
|
|
return this.uniqueVisitors.toLocaleString();
|
|
}
|
|
|
|
/** UI-specific: Formatted session duration */
|
|
get formattedSessionDuration(): string {
|
|
const minutes = Math.floor(this.averageSessionDuration / 60);
|
|
const seconds = Math.floor(this.averageSessionDuration % 60);
|
|
return `${minutes}:${seconds.toString().padStart(2, '0')}`;
|
|
}
|
|
|
|
/** UI-specific: Formatted bounce rate */
|
|
get formattedBounceRate(): string {
|
|
return `${this.bounceRate.toFixed(1)}%`;
|
|
}
|
|
} |