use crate::event_bus::{EventBus, Request}; use crate::events::Event; use yew::{classes, html, Classes, Component, Context, Html, Properties}; use yew_agent::{Dispatched, Dispatcher}; pub enum Msg { SelectAccountNr(String), } #[derive(Properties, PartialEq)] pub struct AccountsProps { pub account_nrs: Vec, pub selected_nr: String } pub struct Accounts { event_bus: Dispatcher, } impl Component for Accounts { type Message = Msg; type Properties = AccountsProps; fn create(_: &Context) -> Self { Self { event_bus: EventBus::dispatcher(), } } fn update(&mut self, _: &Context, msg: Self::Message) -> bool { match msg { Msg::SelectAccountNr(nr) => { self.event_bus .send(Request::EventBusMsg(Event::SelectAccountNr(nr))); false } } } fn view(&self, ctx: &Context) -> Html { html! { <>
    { for ctx.props().account_nrs.iter().map(|e| self.account_entry(e, &ctx.props().selected_nr, ctx)) }
} } } impl Accounts { fn account_entry( &self, nr: &str, selected_nr: &str, ctx: &Context, ) -> Html { let mut class = Classes::from("accounts__item"); if selected_nr == nr { class.push("accounts__item-selected"); } let nr = nr.to_string(); let account_nr = nr.clone(); let onclick = ctx .link() .callback(move |_| Msg::SelectAccountNr(nr.clone())); html! {
  • {account_nr}
  • } } }