use filamento::{presence::PresenceType, user::User}; use leptos::prelude::*; use reactive_stores::Store; use crate::{ components::icon::{IconComponent, show_to_icon}, icon::Icon, user::{MacawUser, get_avatar}, user_presences::UserPresences, }; #[component] pub fn AvatarWithPresence(user: MacawUser) -> impl IntoView { let user_presences: Store = use_context().expect("no user presences in context"); let presence = move || { user_presences .write() .get_user_presences(&user.get().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() } }}
} }