synpad 0.1.0

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

use crate::components::avatar::Avatar;
use crate::state::room_state::ReadReceipt;

/// Read receipt indicators beside messages.
#[component]
pub fn ReadReceiptList(receipts: Vec<ReadReceipt>) -> Element {
    if receipts.is_empty() {
        return rsx! {};
    }

    // Show at most 3 avatars, plus overflow count
    let display_count = receipts.len().min(3);
    let overflow = receipts.len().saturating_sub(3);

    rsx! {
        div {
            class: "read-receipts",
            for receipt in receipts.iter().take(display_count) {
                Avatar {
                    name: receipt.display_name.clone().unwrap_or_else(|| receipt.user_id.to_string()),
                    url: receipt.avatar_url.clone(),
                    size: 16,
                }
            }
            if overflow > 0 {
                span {
                    class: "read-receipts__overflow",
                    "+{overflow}"
                }
            }
        }
    }
}