synpad 0.1.0

A full-featured Matrix chat client built with Dioxus
use dioxus::prelude::*;

/// @mention autocomplete popup.
#[component]
pub fn MentionAutocomplete(
    query: String,
    members: Vec<MentionSuggestion>,
    on_select: EventHandler<String>,
) -> Element {
    if members.is_empty() {
        return rsx! {};
    }

    rsx! {
        div {
            class: "mention-autocomplete",
            for member in members.iter() {
                {
                    let user_id = member.user_id.clone();
                    let display = member.display_name.clone();
                    let uid_display = member.user_id.clone();
                    rsx! {
                        button {
                            class: "mention-autocomplete__item",
                            onclick: move |_| on_select.call(user_id.clone()),
                            span {
                                class: "mention-autocomplete__name",
                                "{display}"
                            }
                            span {
                                class: "mention-autocomplete__id",
                                "{uid_display}"
                            }
                        }
                    }
                }
            }
        }
    }
}

/// A mention suggestion entry.
#[derive(Clone, Debug, PartialEq)]
pub struct MentionSuggestion {
    pub user_id: String,
    pub display_name: String,
    pub avatar_url: Option<String>,
}