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