use dioxus::prelude::*;
#[component]
pub fn BridgeStatusIndicator(bridge_type: String, is_connected: bool) -> Element {
let (icon, label) = match bridge_type.as_str() {
"telegram" => ("🔗", "Telegram Bridge"),
"discord" => ("🔗", "Discord Bridge"),
"slack" => ("🔗", "Slack Bridge"),
"irc" => ("🔗", "IRC Bridge"),
"signal" => ("🔗", "Signal Bridge"),
"whatsapp" => ("🔗", "WhatsApp Bridge"),
"facebook" => ("🔗", "Facebook Bridge"),
"twitter" => ("🔗", "Twitter Bridge"),
"email" => ("🔗", "Email Bridge"),
_ => ("🔗", "Bridge"),
};
let status_class = if is_connected {
"bridge-status bridge-status--connected"
} else {
"bridge-status bridge-status--disconnected"
};
rsx! {
span {
class: status_class,
title: if is_connected { format!("{label}: Connected") } else { format!("{label}: Disconnected") },
span { class: "bridge-status__icon", "{icon}" }
span { class: "bridge-status__label", "{label}" }
span {
class: if is_connected { "bridge-status__dot bridge-status__dot--ok" } else { "bridge-status__dot bridge-status__dot--error" },
}
}
}
}
pub fn detect_bridge_from_user_id(user_id: &str) -> Option<String> {
if user_id.contains("@telegram_") || user_id.contains("@telegrambot:") {
Some("telegram".to_string())
} else if user_id.contains("@_discord_") || user_id.contains("@discordbot:") {
Some("discord".to_string())
} else if user_id.contains("@slack_") || user_id.contains("@slackbot:") {
Some("slack".to_string())
} else if user_id.contains("@irc_") || user_id.contains("@appservice-irc:") {
Some("irc".to_string())
} else if user_id.contains("@signal_") || user_id.contains("@signalbot:") {
Some("signal".to_string())
} else if user_id.contains("@whatsapp_") || user_id.contains("@whatsappbot:") {
Some("whatsapp".to_string())
} else {
None
}
}