Files
gridpilot.gg/apps/website/lib/view-models/BillingViewModel.ts
2026-01-24 01:25:46 +01:00

33 lines
1.2 KiB
TypeScript

/**
* Billing View Model
*
* View model for sponsor billing data with UI-specific transformations.
* Transforms BillingViewData into UI-ready state with formatting and derived fields.
*/
import type { BillingViewData } from '@/lib/view-data/BillingViewData';
import { ViewModel } from "../contracts/view-models/ViewModel";
import { BillingStatsViewModel } from "./BillingStatsViewModel";
import { InvoiceViewModel } from "./InvoiceViewModel";
import { PaymentMethodViewModel } from "./PaymentMethodViewModel";
/**
* BillingViewModel
*
* View Model for sponsor billing data.
* Transforms BillingViewData into UI-ready state with formatting and derived fields.
*/
export class BillingViewModel extends ViewModel {
private readonly data: BillingViewData;
readonly paymentMethods: PaymentMethodViewModel[];
readonly invoices: InvoiceViewModel[];
readonly stats: BillingStatsViewModel;
constructor(data: BillingViewData) {
super();
this.data = data;
this.paymentMethods = data.paymentMethods.map(pm => new PaymentMethodViewModel(pm));
this.invoices = data.invoices.map(inv => new InvoiceViewModel(inv));
this.stats = new BillingStatsViewModel(data.stats);
}
}