summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2026-02-22 08:49:25 +0000
committerJoe Carstairs <me@joeac.net>2026-02-22 08:49:25 +0000
commit6137e4bec5fd7f34c66162b32424343a30b3c5f2 (patch)
treeccaa976de636aedf03a8fa7cfea63be8e6d811d2
parent376ad725248c9c50596adb8bbebab9d6c5c9dea7 (diff)
task-085: formats bucket cells
-rw-r--r--schist_desktop_gui/src/gui/components/transactions_view.rs12
-rw-r--r--schist_desktop_gui/src/gui/components/transactions_view/view_transactions_view.rs21
-rw-r--r--schist_desktop_gui/src/gui/screens/main_screen/main_screen.rs6
3 files changed, 26 insertions, 13 deletions
diff --git a/schist_desktop_gui/src/gui/components/transactions_view.rs b/schist_desktop_gui/src/gui/components/transactions_view.rs
index 491049d..11249a1 100644
--- a/schist_desktop_gui/src/gui/components/transactions_view.rs
+++ b/schist_desktop_gui/src/gui/components/transactions_view.rs
@@ -3,7 +3,7 @@ mod view_transactions_view;
use std::collections::HashMap;
use itertools::Itertools;
-use schist_models::{Account, Transaction};
+use schist_models::{Account, Bucket, Transaction};
use crate::{
gui::components::{navigation, AccountNavigationEntry, Navigation},
@@ -12,6 +12,7 @@ use crate::{
#[derive(Clone, Debug)]
pub struct TransactionsView {
+ buckets: Vec<Bucket>,
navigation: Navigation<AccountNavigationEntry>,
transactions_by_account_id: HashMap<i32, Vec<Transaction>>,
}
@@ -22,6 +23,7 @@ pub enum Message {
SelectNextAccount,
SelectPrevAccount,
SetAccounts(Vec<Account>),
+ SetBuckets(Vec<Bucket>),
SetTransactions(Vec<Transaction>),
}
@@ -30,7 +32,7 @@ pub enum Action {
}
impl TransactionsView {
- pub fn new(accounts: &[Account], transactions: &[Transaction]) -> Self {
+ pub fn new(accounts: &[Account], buckets: &[Bucket], transactions: &[Transaction]) -> Self {
let account_navigation_entries: Vec<AccountNavigationEntry> = accounts
.iter()
.cloned()
@@ -41,6 +43,7 @@ impl TransactionsView {
account_navigation_entries,
);
Self {
+ buckets: buckets.to_vec(),
navigation: navigation,
transactions_by_account_id: transactions
.into_iter()
@@ -63,6 +66,11 @@ impl<'a> Component<'a, Message, Action> for TransactionsView {
self.update_navigation(navigation::Message::SetOptions(account_navigation_entries))
}
+ Message::SetBuckets(buckets) => {
+ self.buckets = buckets;
+ Action::None
+ }
+
Message::SetTransactions(transactions) => {
self.transactions_by_account_id =
transactions.into_iter().into_group_map_by(|t| t.account_id);
diff --git a/schist_desktop_gui/src/gui/components/transactions_view/view_transactions_view.rs b/schist_desktop_gui/src/gui/components/transactions_view/view_transactions_view.rs
index 7ceadda..f43ee48 100644
--- a/schist_desktop_gui/src/gui/components/transactions_view/view_transactions_view.rs
+++ b/schist_desktop_gui/src/gui/components/transactions_view/view_transactions_view.rs
@@ -9,7 +9,7 @@ use iced::{
},
Element, Length,
};
-use schist_models::Transaction;
+use schist_models::{Bucket, Transaction};
use crate::{gui::components::Text, style::SPACING_LG, traits::Viewable};
@@ -26,7 +26,7 @@ impl<'a> Viewable<'a, Message> for TransactionsView {
),
column(
Text::default("Bucket").width(iced::Length::Fixed(128.0)),
- |t: Transaction| view_bucket_cell(t),
+ |t: Transaction| view_bucket_cell(t, &self.buckets),
),
column(
Text::default("Payee").width(iced::Length::Fixed(256.0)),
@@ -76,13 +76,16 @@ fn view_date_cell(transaction: Transaction) -> Text {
.clip()
}
-fn view_bucket_cell(t: Transaction) -> Text {
- Text::default(
- t.bucket_id
- .map(|id| id.to_string())
- .unwrap_or(String::from("None"))
- .as_str(),
- )
+fn view_bucket_cell(t: Transaction, buckets: &[Bucket]) -> Text {
+ (t.bucket_id.map_or_else(
+ || Text::default("None").italic(),
+ |id| {
+ buckets.iter().find(|b| b.id == id).map_or_else(
+ || Text::default(format!("<{}>", id).as_str()).italic(),
+ |b| Text::default(&b.name),
+ )
+ },
+ ))
.width(iced::Length::Fixed(128.0))
.small()
.clip()
diff --git a/schist_desktop_gui/src/gui/screens/main_screen/main_screen.rs b/schist_desktop_gui/src/gui/screens/main_screen/main_screen.rs
index 86ce910..038d65f 100644
--- a/schist_desktop_gui/src/gui/screens/main_screen/main_screen.rs
+++ b/schist_desktop_gui/src/gui/screens/main_screen/main_screen.rs
@@ -109,7 +109,9 @@ impl<'a> Component<'a, Message, Action> for MainScreen {
self.balances_view
.update(balances_view::Message::SetBuckets(buckets.clone()));
self.buckets_view
- .update(buckets_view::Message::SetBuckets(buckets));
+ .update(buckets_view::Message::SetBuckets(buckets.clone()));
+ self.transactions_view
+ .update(transactions_view::Message::SetBuckets(buckets));
Action::None
}
@@ -204,7 +206,7 @@ impl MainScreen {
balances_view: BalancesView::new(Vec::new()),
buckets: Vec::new(),
buckets_view: BucketsView::new(Vec::new(), "Hello, buckets!"),
- transactions_view: TransactionsView::new(&[], &[]),
+ transactions_view: TransactionsView::new(&[], &[], &[]),
active_view: View::Balances,
view_navigation: Navigation::new(Some(View::Balances), View::views()),
}