use dioxus::prelude::*;
use crate::pages::room_directory::RoomDirectory;
use crate::room_list::create_room_dialog::CreateRoomDialog;
use crate::room_list::join_room_dialog::JoinRoomDialog;
use crate::state::app_state::AppState;
#[component]
pub fn RoomListHeader() -> Element {
let mut state = use_context::<Signal<AppState>>();
let mut show_create_room = use_signal(|| false);
let mut show_join_room = use_signal(|| false);
let mut show_directory = use_signal(|| false);
let search_query = state.read().room_search_query.clone();
let on_search = move |evt: Event<FormData>| {
let query = evt.value();
state.write().room_search_query = query;
state.write().update_sorted_rooms();
};
let user_name = state
.read()
.user_profile
.as_ref()
.and_then(|p| p.display_name.clone())
.unwrap_or_else(|| "User".to_string());
rsx! {
div {
class: "room-list-header",
div {
class: "room-list-header__user",
div {
class: "room-list-header__avatar",
"{user_name.chars().next().unwrap_or('?')}"
}
span {
class: "room-list-header__name",
"{user_name}"
}
button {
class: "room-list-header__action-btn",
title: "Browse public rooms",
onclick: move |_| show_directory.set(true),
"🌐"
}
button {
class: "room-list-header__action-btn",
title: "Join room by ID",
onclick: move |_| show_join_room.set(true),
"#"
}
button {
class: "room-list-header__action-btn",
title: "Create room",
onclick: move |_| show_create_room.set(true),
"+"
}
}
div {
class: "room-list-header__search",
input {
r#type: "text",
placeholder: "Search rooms...",
value: "{search_query}",
oninput: on_search,
class: "room-list-header__search-input",
}
}
}
if *show_create_room.read() {
CreateRoomDialog {
on_close: move |_| show_create_room.set(false),
}
}
if *show_join_room.read() {
JoinRoomDialog {
on_close: move |_| show_join_room.set(false),
}
}
if *show_directory.read() {
crate::components::modal::Modal {
title: "Room Directory".to_string(),
on_close: move |_| show_directory.set(false),
wide: true,
RoomDirectory {}
}
}
}
}