diff options
| author | Joe Carstairs <me@joeac.net> | 2026-02-22 08:49:25 +0000 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2026-02-22 08:49:25 +0000 |
| commit | 6137e4bec5fd7f34c66162b32424343a30b3c5f2 (patch) | |
| tree | ccaa976de636aedf03a8fa7cfea63be8e6d811d2 /schist_desktop_gui/src | |
| parent | 376ad725248c9c50596adb8bbebab9d6c5c9dea7 (diff) | |
task-085: formats bucket cells
Diffstat (limited to 'schist_desktop_gui/src')
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()), } |
