synpad 0.1.0

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

use crate::pages::space_home::SpaceHome;
use crate::pages::welcome::Welcome;
use crate::room::room_screen::RoomScreen;
use crate::state::app_state::AppState;
use crate::state::room_state::RoomFilter;

/// Home page - shows the room view, space home, or welcome screen.
#[component]
pub fn Home() -> Element {
    let state = use_context::<Signal<AppState>>();
    let active_room = state.read().active_room_id.clone();
    let room_filter = state.read().room_filter.clone();

    match active_room {
        Some(room_id) => rsx! {
            RoomScreen {
                room_id: room_id.to_string(),
            }
        },
        None => {
            // Show space home when a space filter is active
            if let RoomFilter::Space(ref space_id) = room_filter {
                let sid = space_id.to_string();
                rsx! {
                    SpaceHome {
                        space_id: sid,
                    }
                }
            } else {
                rsx! {
                    Welcome {}
                }
            }
        },
    }
}