/** * 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 { PaymentMethodViewModel } from "./PaymentMethodViewModel"; import { InvoiceViewModel } from "./InvoiceViewModel"; import { BillingStatsViewModel } from "./BillingStatsViewModel"; /** * 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); } }