use filamento::{presence::PresenceType, user::User}; use leptos::prelude::*; use reactive_stores::Store; use crate::{components::icon::{show_to_icon, IconComponent}, icon::Icon, user::get_avatar, user_presences::UserPresences}; #[component] pub fn AvatarWithPresence(user: Store) -> impl IntoView { let avatar = LocalResource::new(move || get_avatar(user)); let user_presences: Store = use_context().expect("no user presences in context"); let presence = move || user_presences.write().get_user_presences(&user.read().jid).read().presence(); let show_icon = move || presence().map(|(_, presence)| { match presence.presence { PresenceType::Online(online) => if let Some(show) = online.show { Some(show_to_icon(show)) } else { Some(Icon::Available16Color) }, PresenceType::Offline(offline) => None, } }).unwrap_or_default(); view! {
{move || if let Some(icon) = show_icon() { view!{ }.into_any() } else { view! {}.into_any() }}
} }