From 1d1cbda219f9a7f22878f84e703e34e7bbb05cd6 Mon Sep 17 00:00:00 2001 From: Alexander XX Date: Sun, 26 Dec 2021 12:42:08 +0300 Subject: [PATCH 1/3] Add pending event listener on the VTag --- packages/yew/src/virtual_dom/vtag.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/yew/src/virtual_dom/vtag.rs b/packages/yew/src/virtual_dom/vtag.rs index 51eeb8677df..fd0b30e1d5d 100644 --- a/packages/yew/src/virtual_dom/vtag.rs +++ b/packages/yew/src/virtual_dom/vtag.rs @@ -8,6 +8,7 @@ use std::borrow::Cow; use std::cmp::PartialEq; use std::hint::unreachable_unchecked; use std::marker::PhantomData; +use std::mem; use std::ops::Deref; use std::rc::Rc; use wasm_bindgen::JsCast; @@ -430,8 +431,28 @@ impl VTag { .insert(key, value.into_prop_value()); } - /// Set event listeners on the [VTag]'s [Element] + /// Add pending event listener on the [VTag]'s [Element] + pub fn add_pending_listener(&mut self, listener: Rc) -> bool { + if let Listeners::Pending(listeners) = &mut self.listeners { + let mut listeners = mem::take(listeners).into_vec(); + listeners.push(Some(listener)); + + self.set_listeners(listeners.into_boxed_slice()); + true + } else { + false + } + } + + #[deprecated( + note = "The `set_listener` method is deprecated and will be removed in the future. Use the `set_listeners` method instead." + )] pub fn set_listener(&mut self, listeners: Box<[Option>]>) { + self.set_listeners(listeners) + } + + /// Set event listeners on the [VTag]'s [Element] + pub fn set_listeners(&mut self, listeners: Box<[Option>]>) { self.listeners = Listeners::Pending(listeners); } From e5dcd181ff57be68e13826dee522087f85782ef7 Mon Sep 17 00:00:00 2001 From: Alexander XX Date: Mon, 27 Dec 2021 17:34:08 +0300 Subject: [PATCH 2/3] Remove deprecated set_listener and rename add_listener --- packages/yew/src/virtual_dom/vtag.rs | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/yew/src/virtual_dom/vtag.rs b/packages/yew/src/virtual_dom/vtag.rs index fd0b30e1d5d..eac9b869aae 100644 --- a/packages/yew/src/virtual_dom/vtag.rs +++ b/packages/yew/src/virtual_dom/vtag.rs @@ -431,8 +431,8 @@ impl VTag { .insert(key, value.into_prop_value()); } - /// Add pending event listener on the [VTag]'s [Element] - pub fn add_pending_listener(&mut self, listener: Rc) -> bool { + /// Add event listener on the [VTag]'s [Element] + pub fn add_listener(&mut self, listener: Rc) -> bool { if let Listeners::Pending(listeners) = &mut self.listeners { let mut listeners = mem::take(listeners).into_vec(); listeners.push(Some(listener)); @@ -444,13 +444,6 @@ impl VTag { } } - #[deprecated( - note = "The `set_listener` method is deprecated and will be removed in the future. Use the `set_listeners` method instead." - )] - pub fn set_listener(&mut self, listeners: Box<[Option>]>) { - self.set_listeners(listeners) - } - /// Set event listeners on the [VTag]'s [Element] pub fn set_listeners(&mut self, listeners: Box<[Option>]>) { self.listeners = Listeners::Pending(listeners); From 60b6871d512de11fb7e1aedbe25ed2c1aff1f351 Mon Sep 17 00:00:00 2001 From: Alexander XX Date: Mon, 27 Dec 2021 18:54:32 +0300 Subject: [PATCH 3/3] Add return value comment --- packages/yew/src/virtual_dom/vtag.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/yew/src/virtual_dom/vtag.rs b/packages/yew/src/virtual_dom/vtag.rs index eac9b869aae..2dc5bb57f76 100644 --- a/packages/yew/src/virtual_dom/vtag.rs +++ b/packages/yew/src/virtual_dom/vtag.rs @@ -431,7 +431,8 @@ impl VTag { .insert(key, value.into_prop_value()); } - /// Add event listener on the [VTag]'s [Element] + /// Add event listener on the [VTag]'s [Element]. + /// Returns `true` if the listener has been added, `false` otherwise. pub fn add_listener(&mut self, listener: Rc) -> bool { if let Listeners::Pending(listeners) = &mut self.listeners { let mut listeners = mem::take(listeners).into_vec();