mod make_balances_view_greeting; mod update_balances_view; mod view_balances_view; mod view_group_names; use self::{ update_balances_view::update_balances_view, view_balances_view::view_balances_view, view_group_names::view_group_names, }; use schist_models::bucket::Bucket; use crate::{ gui::components::{ balances_view::make_balances_view_greeting::make_balances_view_greeting, navigation, Navigation, Text, }, traits::{Component, Viewable}, }; #[derive(Clone, Debug)] pub struct BalancesView { buckets: Vec, greeting: String, navigation: Navigation, } #[derive(Clone, Debug)] pub enum Message { NavigationMessage(navigation::Message), SelectNextBucket, SelectPrevBucket, SetBuckets(Vec), } pub enum Action { None, } impl BalancesView { pub fn new(buckets: Vec) -> Self { let groups = view_group_names(buckets.clone()); let active_group = groups.clone().first().cloned(); let navigation = Navigation::new(active_group.clone(), groups); Self { buckets: buckets.clone(), greeting: make_balances_view_greeting(active_group), navigation: navigation, } } } impl<'a> Viewable<'a, Message> for BalancesView { fn view(&'a self) -> iced::Element<'a, Message> { view_balances_view(self) } } impl<'a> Component<'a, Message, Action> for BalancesView { fn update(&mut self, message: Message) -> Action { update_balances_view(self, message) } }