use yew::prelude::*; use yew_agent::{Bridge, Bridged}; use yew_router::prelude::*; use crate::agents; use crate::cookies; use crate::routes; pub enum Msg { LoggedIn(bool), } #[derive(Properties, PartialEq)] pub struct LoggedInHandlerProps { pub logged_in: bool, } pub struct LoggedInHandler { logged_in: bool, _logged_in_producer: Box>, } impl Component for LoggedInHandler { type Message = Msg; type Properties = LoggedInHandlerProps; fn create(ctx: &Context) -> Self { Self { logged_in: ctx.props().logged_in, _logged_in_producer: agents::logged_in::EventBus::bridge( ctx.link().callback(Msg::LoggedIn), ), } } fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { match msg { Msg::LoggedIn(x) => { if self.logged_in && !x { log::info!("Global logout!"); cookies::logout_clear(); ctx.link().history().unwrap().push(routes::Route::Login); } self.logged_in = x; false } } } fn view(&self, _ctx: &Context) -> Html { html! {} } }