fixed use_event_listener removing of listener with non default options

This commit is contained in:
Maccesch 2023-07-29 15:12:09 +01:00
parent 413a6f933e
commit fa47bab2cd
3 changed files with 162 additions and 158 deletions

View file

@ -28,6 +28,7 @@ wasm-bindgen-futures = "0.4"
[dependencies.web-sys] [dependencies.web-sys]
version = "0.3" version = "0.3"
features = [ features = [
"AddEventListenerOptions",
"BinaryType", "BinaryType",
"CssStyleDeclaration", "CssStyleDeclaration",
"CloseEvent", "CloseEvent",
@ -38,6 +39,9 @@ features = [
"DataTransfer", "DataTransfer",
"DragEvent", "DragEvent",
"Element", "Element",
"EventListener",
"EventListenerOptions",
"EventTarget",
"File", "File",
"FileList", "FileList",
"HtmlElement", "HtmlElement",

View file

@ -112,11 +112,13 @@ where
let cleanup_fn = { let cleanup_fn = {
let closure_js = closure_js.clone(); let closure_js = closure_js.clone();
let options = options.clone();
move |element: &web_sys::EventTarget| { move |element: &web_sys::EventTarget| {
let _ = element.remove_event_listener_with_callback( let _ = element.remove_event_listener_with_callback_and_event_listener_options(
&event_name, &event_name,
closure_js.as_ref().unchecked_ref(), closure_js.as_ref().unchecked_ref(),
options.unchecked_ref(),
); );
} }
}; };
@ -125,8 +127,7 @@ where
let signal = (target).into(); let signal = (target).into();
let prev_element: Rc<RefCell<Option<web_sys::EventTarget>>> = let prev_element = Rc::new(RefCell::new(None::<web_sys::EventTarget>));
Rc::new(RefCell::new(signal.get_untracked().map(|e| e.into())));
let cleanup_prev_element = { let cleanup_prev_element = {
let prev_element = prev_element.clone(); let prev_element = prev_element.clone();

View file

@ -25,6 +25,7 @@ use crate::utils::CloneableFnWithArg;
/// ``` /// ```
/// # use leptos::*; /// # use leptos::*;
/// # use leptos_use::{use_websocket, UseWebsocketReturn}; /// # use leptos_use::{use_websocket, UseWebsocketReturn};
/// # use leptos_use::core::ConnectionReadyState;
/// # /// #
/// # #[component] /// # #[component]
/// # fn Demo() -> impl IntoView { /// # fn Demo() -> impl IntoView {
@ -37,16 +38,14 @@ use crate::utils::CloneableFnWithArg;
/// open, /// open,
/// close, /// close,
/// .. /// ..
/// } = use_websocket("wss://echo.websocket.events/".to_string()); /// } = use_websocket("wss://echo.websocket.events/");
/// ///
/// let send_message = move |_| { /// let send_message = move |_| {
/// let m = "Hello, world!".to_string(); /// send("Hello, world!".to_string());
/// send(m.clone());
/// }; /// };
/// ///
/// let send_byte_message = move |_| { /// let send_byte_message = move |_| {
/// let m = b"Hello, world!\r\n".to_vec(); /// send_bytes(b"Hello, world!\r\n".to_vec());
/// send_bytes(m.clone());
/// }; /// };
/// ///
/// let status = move || ready_state.get().to_string(); /// let status = move || ready_state.get().to_string();
@ -118,7 +117,7 @@ pub fn use_websocket_with_options(
let connect_ref: StoredValue<Option<Rc<dyn Fn()>>> = store_value(None); let connect_ref: StoredValue<Option<Rc<dyn Fn()>>> = store_value(None);
// cfg_if! { if #[cfg(not(feature = "ssr"))] { cfg_if! { if #[cfg(not(feature = "ssr"))] {
let on_open_ref = store_value(options.on_open); let on_open_ref = store_value(options.on_open);
let on_message_ref = store_value(options.on_message); let on_message_ref = store_value(options.on_message);
let on_message_bytes_ref = store_value(options.on_message_bytes); let on_message_bytes_ref = store_value(options.on_message_bytes);
@ -278,7 +277,7 @@ pub fn use_websocket_with_options(
ws_ref.set_value(Some(web_socket)); ws_ref.set_value(Some(web_socket));
})) }))
}); });
// }} }}
// Send text (String) // Send text (String)
let send = { let send = {