For now, only the ChatsWindow tabs are toggled on clicks on room names (from ContactsSection).
33 lines
764 B
Rust
33 lines
764 B
Rust
use dioxus::prelude::*;
|
|
use matrix_sdk::ruma::OwnedRoomId;
|
|
use tokio::sync::broadcast::error::SendError;
|
|
use tokio::sync::broadcast::{channel, Receiver, Sender};
|
|
|
|
#[derive(Clone)]
|
|
pub enum Tasks {
|
|
ToggleRoom(OwnedRoomId),
|
|
}
|
|
|
|
pub struct Interface {
|
|
sender: Sender<Tasks>,
|
|
receiver: RefCell<Receiver<Tasks>>,
|
|
}
|
|
|
|
impl Interface {
|
|
pub fn new() -> Self {
|
|
let (sender, receiver) = channel::<Tasks>(32);
|
|
Self {
|
|
sender,
|
|
receiver: RefCell::new(receiver),
|
|
}
|
|
}
|
|
|
|
pub(super) fn receiver(&self) -> &RefCell<Receiver<Tasks>> {
|
|
&self.receiver
|
|
}
|
|
|
|
pub fn toggle_room(&self, room_id: OwnedRoomId) -> Result<usize, SendError<Tasks>> {
|
|
self.sender.send(Tasks::ToggleRoom(room_id))
|
|
}
|
|
}
|