client/utilities/discountPreview.ts (27 lines of code) (raw):
interface NonDiscountedPayments {
date: string;
amount: number;
}
export type DiscountPeriodType = `month${'s' | ''}` | `year${'s' | ''}`;
export type DiscountPreviewResponse = {
discountedPrice: number;
discountPercentage: number; // if this figure is anything other than 100 then you know your dealing with a percentage style offer
upToPeriods: number;
upToPeriodsType: DiscountPeriodType;
firstDiscountedPaymentDate: string;
nextNonDiscountedPaymentDate: string;
nonDiscountedPayments: NonDiscountedPayments[];
};
export const getMaxNonDiscountedPrice = (
nonDiscountedPayments: NonDiscountedPayments[],
asHumanReadable?: boolean,
) => {
const allNonDiscountedAmounts = nonDiscountedPayments.map((p) => p.amount);
const maxNonDiscountedPrice = Math.max(...allNonDiscountedAmounts);
if (!asHumanReadable) {
return maxNonDiscountedPrice;
}
return Number.isInteger(maxNonDiscountedPrice)
? maxNonDiscountedPrice
: maxNonDiscountedPrice.toFixed(2);
};