import Category from "../../types/category"; import './Histogram.scss'; function Histogram({ categories }: Props) { const maxAbsBalanceToBudgetRatio = Math.max( ...categories.map((c) => Math.abs(c.balanceToBudgetRatio)) ); return ( { categories .sort((c1, c2) => c1.balanceToBudgetRatio - c2.balanceToBudgetRatio) .map((category) => Row({ category, maxAbsBalanceToBudgetRatio })) }
Category Balance-to-Budget Ratio Balance
); } 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;