summaryrefslogtreecommitdiff
path: root/gui/src/components/histogram
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-09-17 13:20:04 +0100
committerJoe Carstairs <me@joeac.net>2024-09-17 13:20:04 +0100
commitcd269b3540fb5e3a988c1b59d3763db360b1fb34 (patch)
treea728403d8d5708ad29eeed2b391706b09a93fe4c /gui/src/components/histogram
parentf0e3e0cfb183253e03b1a61ddecb7b9330d47fdb (diff)
many, many changes
Diffstat (limited to 'gui/src/components/histogram')
-rw-r--r--gui/src/components/histogram/Histogram.tsx44
1 files changed, 19 insertions, 25 deletions
diff --git a/gui/src/components/histogram/Histogram.tsx b/gui/src/components/histogram/Histogram.tsx
index ee4b7b0..3a8309b 100644
--- a/gui/src/components/histogram/Histogram.tsx
+++ b/gui/src/components/histogram/Histogram.tsx
@@ -1,10 +1,18 @@
-import Category from "../../types/category";
+import { BalanceToBudgetRatio } from "../../types/balanceToBudgetRatio";
+import { Category } from "../../types/category";
import './Histogram.scss';
function Histogram({ categories }: Props) {
- const maxAbsBalanceToBudgetRatio = Math.max(
- ...categories.map((c) => Math.abs(c.balanceToBudgetRatio))
- );
+ if (categories === null) {
+ return (
+ <p>No categories to show</p>
+ );
+ }
+
+ const balanceToBudgetRatioNormaliser = BalanceToBudgetRatio.makeNormaliser(...categories.map(c => c.balanceToBudgetRatio));
+ for (const category of categories) {
+ category.balanceToBudgetRatio = balanceToBudgetRatioNormaliser(category.balanceToBudgetRatio);
+ }
return (
<table>
@@ -19,27 +27,24 @@ function Histogram({ categories }: Props) {
<tbody>
{
categories
- .sort((c1, c2) => c1.balanceToBudgetRatio - c2.balanceToBudgetRatio)
- .map((category) => Row({ category, maxAbsBalanceToBudgetRatio }))
+ .sort((c1, c2) => BalanceToBudgetRatio.compare(c1.balanceToBudgetRatio, c2.balanceToBudgetRatio))
+ .map((category) => Row({ category }))
}
</tbody>
</table>
);
}
-function Row({ category, maxAbsBalanceToBudgetRatio }: RowProps) {
- const normalisedRatio = category.balanceToBudgetRatio / maxAbsBalanceToBudgetRatio;
- const variant = getRowVariant(new Number(normalisedRatio).valueOf());
-
+function Row({ category }: RowProps) {
return (
<tr>
<td class="name">{category.name}</td>
<td
- class={`ratio ratio--${variant}`}
- style={`--normal-abs-ratio: ${Math.abs(normalisedRatio)};`}
+ class={`ratio ratio--${category.balanceToBudgetRatio?.recommendedAction ?? ''}`}
+ style={`--normal-abs-ratio: ${Math.abs(category.balanceToBudgetRatio?.normalisedRatio ?? 0)};`}
>
<span class="ratio__text">
- {category.balanceToBudgetRatio.toFixed(2)}
+ {category.balanceToBudgetRatio?.toString() ?? ''}
</span>
<span class="ratio__bar"></span>
</td>
@@ -48,23 +53,12 @@ function Row({ category, maxAbsBalanceToBudgetRatio }: RowProps) {
);
}
-function getRowVariant(balanceToBudgetRatio: number) {
- if (balanceToBudgetRatio < 0) {
- return 'arrears';
- }
- if (balanceToBudgetRatio >= 1) {
- return 'spend';
- }
- return 'save';
-}
-
type Props = {
- categories: Category[],
+ categories: Category[] | null,
};
type RowProps = {
category: Category,
- maxAbsBalanceToBudgetRatio: number,
};
export default Histogram;