diff --git a/frontend/Cargo.toml b/frontend/Cargo.toml index eb37263..29dfdd1 100644 --- a/frontend/Cargo.toml +++ b/frontend/Cargo.toml @@ -27,7 +27,9 @@ web-sys = { version = "0.3", features = [ "EventTarget", "HtmlElement", "HtmlIFrameElement", + "HtmlInputElement", "HtmlLinkElement", + "InputEvent", "MediaQueryList", "NodeList", "Notification", diff --git a/frontend/src/overview.rs b/frontend/src/overview.rs index 88d6486..39ddb96 100644 --- a/frontend/src/overview.rs +++ b/frontend/src/overview.rs @@ -1,7 +1,8 @@ use futures::{StreamExt, channel::mpsc::Sender}; use gloo_console::error; +use wasm_bindgen::JsCast; use wasm_bindgen_futures::spawn_local; -use web_sys::NotificationOptions; +use web_sys::{HtmlInputElement, InputEvent, NotificationOptions}; use yew::prelude::*; use crate::{ @@ -21,6 +22,7 @@ pub enum Msg { Remove(String), Loading(bool), RemoveAll, + Search(String), } #[derive(Clone, PartialEq, Eq)] @@ -37,6 +39,7 @@ pub struct Overview { messages: Vec, sender: Sender, loading: bool, + search_query: String, } impl Component for Overview { @@ -73,6 +76,7 @@ impl Component for Overview { selected: Default::default(), sender: wss.sender, loading: true, + search_query: String::new(), } } @@ -129,6 +133,9 @@ impl Component for Overview { self.messages.clear(); } } + Msg::Search(query) => { + self.search_query = query; + } }; true @@ -141,6 +148,7 @@ impl Component for Overview { fn view(&self, ctx: &Context) -> Html { let link = ctx.link(); + let filtered_messages = self.filtered_messages(); let selected_message = self.messages.iter().find(|m| m.id == self.selected); let selected_id = self.selected.clone(); @@ -149,6 +157,20 @@ impl Component for Overview {

{"Mail"}{"Crab"}

+ ().ok()) + .map(|el| el.value()) + .unwrap_or_default(); + Msg::Search(query) + })} + /> if !self.messages.is_empty() {