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]
version = "0.3"
features = [
"AddEventListenerOptions",
"BinaryType",
"CssStyleDeclaration",
"CloseEvent",
@ -38,6 +39,9 @@ features = [
"DataTransfer",
"DragEvent",
"Element",
"EventListener",
"EventListenerOptions",
"EventTarget",
"File",
"FileList",
"HtmlElement",

View file

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

View file

@ -25,6 +25,7 @@ use crate::utils::CloneableFnWithArg;
/// ```
/// # use leptos::*;
/// # use leptos_use::{use_websocket, UseWebsocketReturn};
/// # use leptos_use::core::ConnectionReadyState;
/// #
/// # #[component]
/// # fn Demo() -> impl IntoView {
@ -37,16 +38,14 @@ use crate::utils::CloneableFnWithArg;
/// open,
/// close,
/// ..
/// } = use_websocket("wss://echo.websocket.events/".to_string());
/// } = use_websocket("wss://echo.websocket.events/");
///
/// let send_message = move |_| {
/// let m = "Hello, world!".to_string();
/// send(m.clone());
/// send("Hello, world!".to_string());
/// };
///
/// let send_byte_message = move |_| {
/// let m = b"Hello, world!\r\n".to_vec();
/// send_bytes(m.clone());
/// send_bytes(b"Hello, world!\r\n".to_vec());
/// };
///
/// 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);
// 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_message_ref = store_value(options.on_message);
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));
}))
});
// }}
}}
// Send text (String)
let send = {