Files
cfw-autumn/shared/utils/displayUtils.ts
2025-06-11 19:44:09 +01:00

114 lines
2.3 KiB
TypeScript

import { Feature } from "../models/featureModels/featureModels.js";
import { Decimal } from "decimal.js";
export const getFeatureName = ({
feature,
plural,
capitalize = false,
}: {
feature?: Feature;
plural: boolean;
capitalize?: boolean;
}) => {
if (!feature) {
return "";
}
let featureName = feature.name || "";
if (feature.display) {
if (plural) {
featureName = feature.display.plural || featureName;
} else {
featureName = feature.display.singular || featureName;
}
}
if (capitalize) {
featureName = featureName.charAt(0).toUpperCase() + featureName.slice(1);
}
return featureName;
};
export const getFeatureNameWithCapital = ({
feature,
}: {
feature: Feature;
}) => {
if (feature.name && feature.name.length > 0) {
return `${feature.name.charAt(0).toUpperCase()}${feature.name.slice(1)}`;
}
return feature.name;
};
export const getSingularAndPlural = ({
feature,
capitalize = false,
}: {
feature: Feature;
capitalize?: boolean;
}) => {
return {
singular: getFeatureName({ feature, plural: false, capitalize }),
plural: getFeatureName({ feature, plural: true, capitalize }),
};
};
export const numberWithCommas = (x: number) => {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
};
export const usageToFeatureName = ({
usage,
feature,
}: {
usage: number;
feature: Feature;
}) => {
const { singular, plural } = getSingularAndPlural({ feature });
if (usage == 1) {
return singular;
}
return plural;
};
export const getFeatureInvoiceDescription = ({
feature,
usage,
billingUnits = 1,
prodName,
isPrepaid = false,
}: {
feature: Feature;
usage: number;
billingUnits?: number | null;
prodName?: string;
isPrepaid?: boolean;
}) => {
const { singular, plural } = getSingularAndPlural({ feature });
const usageStr = numberWithCommas(Math.ceil(usage));
let result = "";
if (isPrepaid && billingUnits && billingUnits > 1) {
result = `${usageStr} x ${billingUnits} ${plural}`; // eg. 4 x 100 credits
} else {
if (usage == 1) {
result = `${usageStr} ${singular}`; // eg. 1 credit
} else {
result = `${usageStr} ${plural}`; // eg. 4 credits
}
}
if (prodName) {
result = `${prodName} - ${result}`;
}
return result;
};