From 7f9fd84beead64ef8fe259f1174e01cbc0dd4cfa Mon Sep 17 00:00:00 2001 From: edouard Date: Tue, 6 Sep 2022 16:46:25 +0200 Subject: [PATCH] Add balance to panel home --- gui/src/app/state/mod.rs | 37 ++++++++++++++++++++++++++++++------- gui/src/app/view/home.rs | 17 +++++++++++++++++ gui/src/app/view/mod.rs | 1 + 3 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 gui/src/app/view/home.rs diff --git a/gui/src/app/state/mod.rs b/gui/src/app/state/mod.rs index 6e47ea8e..6f2203bd 100644 --- a/gui/src/app/state/mod.rs +++ b/gui/src/app/state/mod.rs @@ -2,15 +2,14 @@ mod settings; use std::sync::Arc; +use bitcoin::Amount; use iced::pure::{column, Element}; use iced::{widget::qr_code, Command, Subscription}; use super::{cache::Cache, error::Error, menu::Menu, message::Message, view}; - +use crate::daemon::{model::Coin, Daemon}; pub use settings::SettingsState; -use crate::daemon::Daemon; - pub trait State { fn view<'a>(&'a self, cache: &'a Cache) -> Element<'a, view::Message>; fn update( @@ -27,12 +26,23 @@ pub trait State { } } -pub struct Home {} +pub struct Home { + balance: Amount, +} + +impl Home { + pub fn new(coins: &Vec) -> Self { + Self { + balance: Amount::from_sat(coins.iter().map(|coin| coin.amount.as_sat()).sum()), + } + } +} impl State for Home { - fn view<'a>(&self, _cache: &'a Cache) -> Element<'a, view::Message> { - view::dashboard(&Menu::Home, None, column()) + fn view<'a>(&'a self, _cache: &'a Cache) -> Element<'a, view::Message> { + view::dashboard(&Menu::Home, None, view::home::home_view(&self.balance)) } + fn update( &mut self, _daemon: Arc, @@ -41,6 +51,19 @@ impl State for Home { ) -> Command { Command::none() } + + fn load(&self, daemon: Arc) -> Command { + let daemon = daemon.clone(); + Command::perform( + async move { + daemon + .list_coins() + .map(|res| res.coins) + .map_err(|e| e.into()) + }, + Message::Coins, + ) + } } impl From for Box { @@ -140,7 +163,7 @@ mod tests { let sandbox: Sandbox = Sandbox::new(ReceivePanel::default()); let client = Arc::new(Minisafed::new(daemon.run(), fake_daemon_config())); - let sandbox = sandbox.load(client, &Cache { blockheight: 0 }).await; + let sandbox = sandbox.load(client, &Cache::default()).await; let panel = sandbox.state(); assert_eq!(panel.address, Some(addr)); diff --git a/gui/src/app/view/home.rs b/gui/src/app/view/home.rs new file mode 100644 index 00000000..17fb1107 --- /dev/null +++ b/gui/src/app/view/home.rs @@ -0,0 +1,17 @@ +use iced::{ + pure::{column, Element}, + Alignment, +}; + +use crate::ui::component::text::*; + +use super::message::Message; + +pub fn home_view<'a>(balance: &'a bitcoin::Amount) -> Element<'a, Message> { + column() + .push(column().padding(40)) + .push(text(&format!("{} BTC", balance.as_btc())).bold().size(50)) + .align_items(Alignment::Center) + .spacing(20) + .into() +} diff --git a/gui/src/app/view/mod.rs b/gui/src/app/view/mod.rs index d5d05d5d..9814bc64 100644 --- a/gui/src/app/view/mod.rs +++ b/gui/src/app/view/mod.rs @@ -1,6 +1,7 @@ mod message; mod warning; +pub mod home; pub mod receive; pub mod settings;