summaryrefslogtreecommitdiffstats
path: root/src/views/macaw/open_chats_panel.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/macaw/open_chats_panel.rs')
-rw-r--r--src/views/macaw/open_chats_panel.rs73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/views/macaw/open_chats_panel.rs b/src/views/macaw/open_chats_panel.rs
new file mode 100644
index 0000000..062c786
--- /dev/null
+++ b/src/views/macaw/open_chats_panel.rs
@@ -0,0 +1,73 @@
+use leptos::prelude::*;
+use open_chat::OpenChatView;
+use reactive_stores::{ArcStore, Store};
+
+use crate::open_chats::{OpenChatsPanel, OpenChatsPanelStoreFields};
+
+// TODO: multiple panels
+// pub struct OpenChats {
+// panels:
+// }
+
+#[component]
+pub fn OpenChatsPanelView() -> impl IntoView {
+ let open_chats: Store<OpenChatsPanel> = use_context().expect("no open chats panel in context");
+
+ // TODO: tabs
+ // view! {
+ // {move || {
+ // if open_chats.chats().read().len() > 1 {
+ // Some(
+ // view! {
+ // <For
+ // each=move || open_chats.chats().get()
+ // key=|(jid, _)| jid.clone()
+ // let(chat)
+ // ></For>
+ // },
+ // )
+ // } else {
+ // None
+ // }
+ // }}
+ // }
+ view! {
+ <div class="open-chat-views">
+ {move || {
+ if let Some(open_chat) = open_chats.chat_view().get() {
+ if let Some(open_chat) = open_chats.chats().read().get(&open_chat) {
+ view! { <OpenChatView chat=open_chat.clone() /> }.into_any()
+ } else {
+ view! {}.into_any()
+ }
+ } else {
+ view! {}.into_any()
+ }
+ }}
+ </div>
+ }
+}
+
+mod open_chat {
+ use filamento::chat::{Chat, ChatStoreFields};
+ use leptos::prelude::*;
+ use reactive_stores::{ArcStore, Store};
+
+ use crate::{chat::MacawChat, components::{chat_header::ChatViewHeader, message_composer::ChatViewMessageComposer, message_history_buffer::MessageHistoryBuffer}};
+
+ #[component]
+ pub fn OpenChatView(chat: MacawChat) -> impl IntoView {
+ let chat_chat: Store<Chat> =
+ <ArcStore<filamento::chat::Chat> as Clone>::clone(&chat.chat).into();
+ let chat_jid = move || chat_chat.correspondent().get();
+
+ view! {
+ <div class="open-chat-view">
+ <ChatViewHeader chat=chat.clone() />
+ <MessageHistoryBuffer chat=chat.clone() />
+ <ChatViewMessageComposer chat=chat_jid() />
+ </div>
+ }
+ }
+}
+