import { BalanceToBudgetRatio } from "../../types/balanceToBudgetRatio"; import { Category } from "../../types/category"; import { Group } from "../../types/group"; import { groupCategories } from "../../util/groupCategories"; import './Histogram.scss'; function Histogram({ categories }: Props) { if (categories === null) { return (

No categories to show

); } const balanceToBudgetRatioNormaliser = BalanceToBudgetRatio.makeNormaliser(...categories.map(c => c.balanceToBudgetRatio)); for (const category of categories) { category.balanceToBudgetRatio = balanceToBudgetRatioNormaliser(category.balanceToBudgetRatio); } const groups = [...groupCategories(categories)]; return ( { groups.map(g => ) }
Category Balance-to-Budget Ratio Balance
); } function RowGroup({ group }: GroupProps) { return ( {group.name} { group.categories .sort((c1, c2) => BalanceToBudgetRatio.compare(c1.balanceToBudgetRatio, c2.balanceToBudgetRatio)) .map((category) => Row({ category })) } ); } function Row({ category }: RowProps) { return ( {category.name} {category.balanceToBudgetRatio?.toString() ?? ''} {category.currentBalance.toString()} ); } type Props = { categories: Category[] | null, }; type GroupProps = { group: Group; } type RowProps = { category: Category, }; export default Histogram;