♻️ Replace flume with tokio and share Matrix client infos to chats
- Remove of the flume dependency. - Add the capability to share data provided by the Matrix client to the ChatsWindow. Indeed, until the 0.6 Dioxus release, each window runs in a separate virtual DOM so the context and Fermi states are completely seperate (cf. https://discord.com/channels/899851952891002890/1188206938215948378).
This commit is contained in:
@@ -1,25 +1,40 @@
|
||||
use dioxus::prelude::*;
|
||||
use fermi::*;
|
||||
use tracing::debug;
|
||||
|
||||
use crate::base::{sync_rooms, ROOMS};
|
||||
use crate::components::avatar_selector::AvatarSelector;
|
||||
use crate::components::chats_window::edit_section::EditSection;
|
||||
use crate::components::icons::DownArrowIcon;
|
||||
use crate::matrix_interface::requester::Receivers;
|
||||
|
||||
use super::edit_section::EditSection;
|
||||
|
||||
turf::style_sheet!("src/components/chats_window/chats_window.scss");
|
||||
|
||||
pub fn ChatsWindow(cx: Scope) -> Element {
|
||||
pub struct ChatsWindowProps {
|
||||
pub receivers: Receivers,
|
||||
}
|
||||
|
||||
pub fn ChatsWindow(cx: Scope<ChatsWindowProps>) -> Element {
|
||||
debug!("ChatsWindow rendering");
|
||||
|
||||
let room_names = vec![
|
||||
"MON POTE",
|
||||
"Second room",
|
||||
"Third room",
|
||||
"AAAAAAAAAAAA",
|
||||
"BBBBBBBBBBBBBBBBBBB",
|
||||
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC",
|
||||
];
|
||||
let receivers = &cx.props.receivers;
|
||||
|
||||
let rendered_room_tabs = room_names.into_iter().map(|room_name| {
|
||||
use_init_atom_root(cx);
|
||||
|
||||
let rooms_ref = use_atom_ref(cx, &ROOMS);
|
||||
|
||||
let sync_rooms_coro = use_coroutine(cx, |rx| {
|
||||
to_owned![receivers];
|
||||
|
||||
sync_rooms(rx, receivers, rooms_ref.clone())
|
||||
});
|
||||
sync_rooms_coro.send(true);
|
||||
|
||||
let rooms = rooms_ref.read();
|
||||
let rendered_room_tabs = rooms.values().map(|room| {
|
||||
let room = room.borrow();
|
||||
let room_name = room.name().unwrap_or(room.id().to_string());
|
||||
rsx!(
|
||||
div {
|
||||
class: ClassName::TAB,
|
||||
|
@@ -1,8 +1,8 @@
|
||||
use dioxus::prelude::*;
|
||||
use fermi::*;
|
||||
// use fermi::*;
|
||||
use tracing::debug;
|
||||
|
||||
use crate::base::APP_SETTINGS;
|
||||
// use crate::base::APP_SETTINGS;
|
||||
use crate::components::avatar_selector::AvatarSelector;
|
||||
use crate::components::icons::DownArrowIcon;
|
||||
|
||||
@@ -13,28 +13,28 @@ static MESSAGE_PLACEHOLDER: &str = "<Enter a personal message>";
|
||||
pub fn UserInfos(cx: Scope) -> Element {
|
||||
debug!("UserInfos rendering");
|
||||
|
||||
let app_settings = use_atom_ref(cx, &APP_SETTINGS);
|
||||
let store = &app_settings.read().store;
|
||||
// let app_settings = use_atom_ref(cx, &APP_SETTINGS);
|
||||
// let store = &app_settings.read().store;
|
||||
|
||||
println!("----------------------------------");
|
||||
println!("UserInfos rendering");
|
||||
// println!("store={:?}", &store);
|
||||
dbg!(&store.user_id);
|
||||
println!("----------------------------------");
|
||||
// println!("----------------------------------");
|
||||
// println!("UserInfos rendering");
|
||||
// // println!("store={:?}", &store);
|
||||
// dbg!(&store.user_id);
|
||||
// println!("----------------------------------");
|
||||
|
||||
// let user_id = store.user_id..as_ref().unwrap();
|
||||
|
||||
// let mut user_info_option = None;
|
||||
let mut user_display_name_option = None;
|
||||
let user_display_name_option: Option<bool> = None;
|
||||
|
||||
let user_id_option = &store.user_id;
|
||||
if user_id_option.is_some() {
|
||||
let user_id = user_id_option.as_ref().unwrap();
|
||||
let user_info_option = store.user_infos.get(user_id);
|
||||
if user_info_option.is_some() {
|
||||
user_display_name_option = user_info_option.unwrap().display_name.as_ref();
|
||||
}
|
||||
}
|
||||
// let user_id_option = &store.user_id;
|
||||
// if user_id_option.is_some() {
|
||||
// let user_id = user_id_option.as_ref().unwrap();
|
||||
// let user_info_option = store.user_infos.get(user_id);
|
||||
// if user_info_option.is_some() {
|
||||
// user_display_name_option = user_info_option.unwrap().display_name.as_ref();
|
||||
// }
|
||||
// }
|
||||
|
||||
cx.render(rsx! {
|
||||
style { STYLE_SHEET },
|
||||
|
@@ -2,14 +2,11 @@ use std::str::FromStr;
|
||||
|
||||
use dioxus::prelude::*;
|
||||
use fermi::*;
|
||||
use matrix_sdk::ruma::user_id;
|
||||
use tracing::{debug, error};
|
||||
use tracing::debug;
|
||||
|
||||
use crate::base::{APP_SETTINGS, SESSION};
|
||||
use crate::base::SESSION;
|
||||
use crate::components::avatar_selector::AvatarSelector;
|
||||
use crate::components::header::Header;
|
||||
use crate::matrix_interface::client::Client;
|
||||
use crate::matrix_interface::worker_tasks::LoginStyle;
|
||||
|
||||
turf::style_sheet!("src/components/login.scss");
|
||||
|
||||
|
Reference in New Issue
Block a user