summaryrefslogtreecommitdiff
path: root/schist_desktop_gui/src/gui/components
diff options
context:
space:
mode:
Diffstat (limited to 'schist_desktop_gui/src/gui/components')
-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
2 files changed, 22 insertions, 11 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()