import Category from "../../types/category";
import './Histogram.scss';
function Histogram({ categories }: Props) {
const maxAbsBalanceToBudgetRatio = Math.max(
...categories.map((c) => Math.abs(c.balanceToBudgetRatio))
);
return (
| Category |
Balance-to-Budget Ratio |
Balance |
{
categories
.sort((c1, c2) => c1.balanceToBudgetRatio - c2.balanceToBudgetRatio)
.map((category) => Row({ category, maxAbsBalanceToBudgetRatio }))
}
);
}
function Row({ category, maxAbsBalanceToBudgetRatio }: RowProps) {
const normalisedRatio = category.balanceToBudgetRatio / maxAbsBalanceToBudgetRatio;
const variant = getRowVariant(new Number(normalisedRatio).valueOf());
return (
| {category.name} |
{category.balanceToBudgetRatio.toFixed(2)}
|
{category.currentBalance.toString()} |
);
}
function getRowVariant(balanceToBudgetRatio: number) {
if (balanceToBudgetRatio < 0) {
return 'arrears';
}
if (balanceToBudgetRatio >= 1) {
return 'spend';
}
return 'save';
}
type Props = {
categories: Category[],
};
type RowProps = {
category: Category,
maxAbsBalanceToBudgetRatio: number,
};
export default Histogram;