();
+/// # let target = NodeRef::
::new();
/// #
/// on_click_outside_with_options(
/// target,
diff --git a/src/storage/use_storage.rs b/src/storage/use_storage.rs
index d681793..6e01c1e 100644
--- a/src/storage/use_storage.rs
+++ b/src/storage/use_storage.rs
@@ -376,7 +376,7 @@ where
// Delete directly from storage
let result = storage
.remove_item(&key)
- .map_err(|e| UseStorageError::RemoveItemFailed(e));
+ .map_err(UseStorageError::RemoveItemFailed);
let _ = handle_error(&on_error, result);
notify.trigger();
dispatch_storage_event();
diff --git a/src/use_css_var.rs b/src/use_css_var.rs
index 3eae19f..2ec6949 100644
--- a/src/use_css_var.rs
+++ b/src/use_css_var.rs
@@ -155,7 +155,7 @@ where
);
}
- let _ = watch(
+ Effect::watch(
move || variable.get(),
move |val, _, _| {
if let Some(el) = el_signal.get() {
diff --git a/src/use_device_orientation.rs b/src/use_device_orientation.rs
index f9c0f67..0fb9c5b 100644
--- a/src/use_device_orientation.rs
+++ b/src/use_device_orientation.rs
@@ -44,6 +44,7 @@ pub fn use_device_orientation() -> UseDeviceOrientationReturn {
use leptos::prelude::*;
use crate::{use_event_listener_with_options, UseEventListenerOptions, use_supported, js};
use leptos::ev::deviceorientation;
+ use send_wrapper::SendWrapper;
let is_supported = use_supported(|| js!("DeviceOrientationEvent" in &window()));
let (absolute, set_absolute) = signal(false);
@@ -69,11 +70,13 @@ pub fn use_device_orientation() -> UseDeviceOrientationReturn {
on_cleanup({
let cleanup = SendWrapper::new(cleanup);
+ #[allow(clippy::redundant_closure)]
move || cleanup()
});
}
}}
+ #[allow(clippy::useless_conversion)]
UseDeviceOrientationReturn {
is_supported,
absolute: absolute.into(),
diff --git a/src/use_draggable.rs b/src/use_draggable.rs
index 54ad4b6..73ef1fe 100644
--- a/src/use_draggable.rs
+++ b/src/use_draggable.rs
@@ -2,7 +2,6 @@ use crate::core::{ElementMaybeSignal, MaybeRwSignal, PointerType, Position};
use crate::{use_event_listener_with_options, use_window, UseEventListenerOptions, UseWindow};
use default_struct_builder::DefaultBuilder;
use leptos::ev::{pointerdown, pointermove, pointerup};
-use leptos::prelude::diagnostics::SpecialNonReactiveZone;
use leptos::prelude::wrappers::read::Signal;
use leptos::prelude::*;
use std::marker::PhantomData;
@@ -138,7 +137,7 @@ where
};
#[cfg(debug_assertions)]
- let zone = SpecialNonReactiveZone::enter();
+ let zone = leptos::prelude::diagnostics::SpecialNonReactiveZone::enter();
if !on_start(UseDraggableCallbackArgs {
position,
@@ -173,7 +172,7 @@ where
set_position.set(position);
#[cfg(debug_assertions)]
- let zone = SpecialNonReactiveZone::enter();
+ let zone = leptos::prelude::diagnostics::SpecialNonReactiveZone::enter();
on_move(UseDraggableCallbackArgs {
position,
@@ -198,7 +197,7 @@ where
set_start_position.set(None);
#[cfg(debug_assertions)]
- let zone = SpecialNonReactiveZone::enter();
+ let zone = leptos::prelude::diagnostics::SpecialNonReactiveZone::enter();
on_end(UseDraggableCallbackArgs {
position: position.get_untracked(),
diff --git a/src/use_element_bounding.rs b/src/use_element_bounding.rs
index 74b495f..ac31381 100644
--- a/src/use_element_bounding.rs
+++ b/src/use_element_bounding.rs
@@ -124,7 +124,7 @@ where
}
});
- let _ = watch(
+ Effect::watch(
move || target.get(),
{
let update = update.clone();
diff --git a/src/use_event_listener.rs b/src/use_event_listener.rs
index c4020de..5f581fc 100644
--- a/src/use_event_listener.rs
+++ b/src/use_event_listener.rs
@@ -190,6 +190,7 @@ where
on_cleanup({
let stop = SendWrapper::new(stop.clone());
+ #[allow(clippy::redundant_closure)]
move || stop()
});
diff --git a/src/use_event_source.rs b/src/use_event_source.rs
index 4366372..759bfb1 100644
--- a/src/use_event_source.rs
+++ b/src/use_event_source.rs
@@ -2,7 +2,6 @@ use crate::core::ConnectionReadyState;
use crate::{js, use_event_listener, ReconnectLimit};
use codee::Decoder;
use default_struct_builder::DefaultBuilder;
-use leptos::prelude::diagnostics::SpecialNonReactiveZone;
use leptos::prelude::*;
use std::marker::PhantomData;
use std::sync::atomic::{AtomicBool, AtomicU32};
@@ -235,7 +234,7 @@ where
);
} else {
#[cfg(debug_assertions)]
- let _z = SpecialNonReactiveZone::enter();
+ let _z = leptos::prelude::diagnostics::SpecialNonReactiveZone::enter();
on_failed();
}
diff --git a/src/use_favicon.rs b/src/use_favicon.rs
index 5c1c791..b8fbc0e 100644
--- a/src/use_favicon.rs
+++ b/src/use_favicon.rs
@@ -92,7 +92,7 @@ pub fn use_favicon_with_options(
}
};
- let _ = watch(
+ Effect::watch(
move || favicon.get(),
move |new_icon, prev_icon, _| {
if Some(new_icon) != prev_icon {
diff --git a/src/use_infinite_scroll.rs b/src/use_infinite_scroll.rs
index 3723bbc..32b9eff 100644
--- a/src/use_infinite_scroll.rs
+++ b/src/use_infinite_scroll.rs
@@ -6,7 +6,6 @@ use crate::{
use default_struct_builder::DefaultBuilder;
use futures_util::join;
use gloo_timers::future::sleep;
-use leptos::prelude::diagnostics::SpecialNonReactiveZone;
use leptos::prelude::wrappers::read::Signal;
use leptos::prelude::*;
use std::future::Future;
@@ -160,7 +159,7 @@ where
let measure = measure.clone();
leptos::spawn::spawn_local(async move {
#[cfg(debug_assertions)]
- let zone = SpecialNonReactiveZone::enter();
+ let zone = leptos::prelude::diagnostics::SpecialNonReactiveZone::enter();
join!(
on_load_more.with_value(|f| f(state)),
diff --git a/src/use_interval_fn.rs b/src/use_interval_fn.rs
index a8432e8..b5c7fa3 100644
--- a/src/use_interval_fn.rs
+++ b/src/use_interval_fn.rs
@@ -3,11 +3,10 @@
use crate::utils::Pausable;
use default_struct_builder::DefaultBuilder;
use leptos::leptos_dom::helpers::IntervalHandle;
-use leptos::prelude::diagnostics::SpecialNonReactiveZone;
use leptos::prelude::*;
use send_wrapper::SendWrapper;
use std::cell::Cell;
-use std::rc::Rc;
+use std::sync::Arc;
use std::time::Duration;
/// Wrapper for `set_interval` with controls.
@@ -41,9 +40,9 @@ use std::time::Duration;
pub fn use_interval_fn(
callback: CbFn,
interval: N,
-) -> Pausable
+) -> Pausable
where
- CbFn: Fn() + Clone + 'static,
+ CbFn: Fn() + Clone + 'static + Send + Sync,
N: Into>,
{
use_interval_fn_with_options(callback, interval, UseIntervalFnOptions::default())
@@ -64,15 +63,16 @@ where
immediate_callback,
} = options;
- let timer: Rc>> = Rc::new(Cell::new(None));
+ let timer: Arc>>> =
+ Arc::new(SendWrapper::new(Cell::new(None)));
let (is_active, set_active) = signal(false);
let clean = {
- let timer = Rc::clone(&timer);
+ let timer = Arc::clone(&timer);
move || {
- if let Some(handle) = timer.take() {
+ if let Some(handle) = Cell::take(&timer) {
handle.clear();
}
}
@@ -104,7 +104,7 @@ where
move || {
#[cfg(debug_assertions)]
- let _z = SpecialNonReactiveZone::enter();
+ let _z = leptos::prelude::diagnostics::SpecialNonReactiveZone::enter();
callback();
}
@@ -127,6 +127,7 @@ where
}
if matches!(interval, MaybeSignal::Dynamic(_)) {
+ #[allow(clippy::clone_on_copy)]
let resume = resume.clone();
let effect = Effect::watch(
@@ -143,6 +144,7 @@ where
on_cleanup({
let pause = SendWrapper::new(pause.clone());
+ #[allow(clippy::redundant_closure)]
move || pause()
});
diff --git a/src/use_locales.rs b/src/use_locales.rs
index 1e6dbc5..110f4ff 100644
--- a/src/use_locales.rs
+++ b/src/use_locales.rs
@@ -1,7 +1,7 @@
use crate::utils::get_header;
use default_struct_builder::DefaultBuilder;
use leptos::prelude::*;
-use std::rc::Rc;
+use std::sync::Arc;
/// Reactive locales.
///
@@ -62,11 +62,12 @@ pub fn use_locales_with_options(options: UseLocalesOptions) -> Signal>()
};
- let (locales, set_locales) = create_signal(read_navigator_languages());
+ let (locales, set_locales) = signal(read_navigator_languages());
- let _ = crate::use_event_listener(crate::use_window(), ev::languagechange, move |_| {
- set_locales.update(|locales| *locales = read_navigator_languages());
- });
+ let _ =
+ crate::use_event_listener(crate::use_window(), leptos::ev::languagechange, move |_| {
+ set_locales.update(|locales| *locales = read_navigator_languages());
+ });
locales.into()
}
@@ -100,13 +101,13 @@ pub struct UseLocalesOptions {
/// Getter function to return the string value of the accept languange header.
/// When you use one of the features `"axum"`, `"actix"` or `"spin"` there's a valid default implementation provided.
#[allow(dead_code)]
- ssr_lang_header_getter: Rc Option>,
+ ssr_lang_header_getter: Arc Option>,
}
impl Default for UseLocalesOptions {
fn default() -> Self {
Self {
- ssr_lang_header_getter: Rc::new(move || {
+ ssr_lang_header_getter: Arc::new(move || {
get_header!(ACCEPT_LANGUAGE, use_locale, ssr_lang_header_getter)
}),
}
diff --git a/src/use_media_query.rs b/src/use_media_query.rs
index 0bfee2e..e63475b 100644
--- a/src/use_media_query.rs
+++ b/src/use_media_query.rs
@@ -96,6 +96,7 @@ pub fn use_media_query(query: impl Into>) -> Signal {
on_cleanup({
let cleanup = send_wrapper::SendWrapper::new(cleanup);
+ #[allow(clippy::redundant_closure)]
move || cleanup()
});
}}
diff --git a/src/use_mouse_in_element.rs b/src/use_mouse_in_element.rs
index e01f994..63f1560 100644
--- a/src/use_mouse_in_element.rs
+++ b/src/use_mouse_in_element.rs
@@ -108,7 +108,7 @@ where
let target = target.into();
let window = window();
- let stop = watch(
+ let effect = Effect::watch(
move || (target.get(), x.get(), y.get()),
move |(el, x, y), _, _| {
if let Some(el) = el {
@@ -146,6 +146,8 @@ where
false,
);
+ let stop = move || effect.stop();
+
let _ = use_event_listener(document(), mouseleave, move |_| set_outside.set(true));
}}
diff --git a/src/use_mutation_observer.rs b/src/use_mutation_observer.rs
index abf97f6..eb24c24 100644
--- a/src/use_mutation_observer.rs
+++ b/src/use_mutation_observer.rs
@@ -125,7 +125,7 @@ where
let stop_watch = {
let cleanup = cleanup.clone();
- leptos::prelude::watch(
+ let stop = Effect::watch(
move || targets.get(),
move |targets, _, _| {
cleanup();
@@ -144,7 +144,9 @@ where
}
},
false,
- )
+ );
+
+ move || stop.stop()
};
let stop = move || {
@@ -154,6 +156,7 @@ where
on_cleanup({
let stop = SendWrapper::new(stop.clone());
+ #[allow(clippy::redundant_closure)]
move || stop()
});
diff --git a/src/use_raf_fn.rs b/src/use_raf_fn.rs
index 0568caf..714e487 100644
--- a/src/use_raf_fn.rs
+++ b/src/use_raf_fn.rs
@@ -1,7 +1,6 @@
use crate::utils::Pausable;
use cfg_if::cfg_if;
use default_struct_builder::DefaultBuilder;
-use leptos::prelude::diagnostics::SpecialNonReactiveZone;
use leptos::prelude::*;
use std::cell::{Cell, RefCell};
use std::rc::Rc;
@@ -86,6 +85,7 @@ pub fn use_raf_fn_with_options(
};
let loop_fn = {
+ #[allow(clippy::clone_on_copy)]
let request_next_frame = request_next_frame.clone();
let previous_frame_timestamp = Cell::new(0.0_f64);
@@ -102,7 +102,7 @@ pub fn use_raf_fn_with_options(
};
#[cfg(debug_assertions)]
- let zone = SpecialNonReactiveZone::enter();
+ let zone = leptos::prelude::diagnostics::SpecialNonReactiveZone::enter();
callback(UseRafFnCallbackArgs { delta, timestamp });
@@ -140,6 +140,7 @@ pub fn use_raf_fn_with_options(
on_cleanup({
let pause = send_wrapper::SendWrapper::new(pause.clone());
+ #[allow(clippy::redundant_closure)]
move || pause()
});
diff --git a/src/use_resize_observer.rs b/src/use_resize_observer.rs
index 031508c..db4289f 100644
--- a/src/use_resize_observer.rs
+++ b/src/use_resize_observer.rs
@@ -126,7 +126,7 @@ where
let stop_watch = {
let cleanup = cleanup.clone();
- watch(
+ let stop = Effect::watch(
move || targets.get(),
move |targets, _, _| {
cleanup();
@@ -145,7 +145,9 @@ where
}
},
true,
- )
+ );
+
+ move || stop.stop()
};
let stop = move || {
@@ -155,6 +157,7 @@ where
on_cleanup({
let stop = send_wrapper::SendWrapper::new(stop.clone());
+ #[allow(clippy::redundant_closure)]
move || stop()
});
diff --git a/src/use_service_worker.rs b/src/use_service_worker.rs
index 4fed646..8095c97 100644
--- a/src/use_service_worker.rs
+++ b/src/use_service_worker.rs
@@ -1,6 +1,5 @@
use default_struct_builder::DefaultBuilder;
use leptos::prelude::actions::Action;
-use leptos::prelude::diagnostics::SpecialNonReactiveZone;
use leptos::prelude::wrappers::read::Signal;
use leptos::prelude::*;
use send_wrapper::SendWrapper;
@@ -55,7 +54,7 @@ pub fn use_service_worker_with_options(
let on_controller_change = options.on_controller_change.clone();
let js_closure = Closure::wrap(Box::new(move |_event: JsValue| {
#[cfg(debug_assertions)]
- let _z = SpecialNonReactiveZone::enter();
+ let _z = leptos::prelude::diagnostics::SpecialNonReactiveZone::enter();
on_controller_change();
}) as Box)
@@ -84,7 +83,7 @@ pub fn use_service_worker_with_options(
match a {
Some(res) => res.map_err(ServiceWorkerRegistrationError::Js),
None => match b {
- Some(res) => res.map_err(|e| ServiceWorkerRegistrationError::Js(e)),
+ Some(res) => res.map_err(ServiceWorkerRegistrationError::Js),
None => Err(ServiceWorkerRegistrationError::NeverQueried),
},
}
diff --git a/src/use_timestamp.rs b/src/use_timestamp.rs
index d05639c..a02812d 100644
--- a/src/use_timestamp.rs
+++ b/src/use_timestamp.rs
@@ -4,7 +4,6 @@ use crate::{
use_interval_fn_with_options, use_raf_fn_with_options, UseIntervalFnOptions, UseRafFnOptions,
};
use default_struct_builder::DefaultBuilder;
-use leptos::prelude::diagnostics::SpecialNonReactiveZone;
use leptos::prelude::wrappers::read::Signal;
use leptos::prelude::*;
use std::rc::Rc;
@@ -88,7 +87,7 @@ pub fn use_timestamp_with_controls_and_options(options: UseTimestampOptions) ->
update();
#[cfg(debug_assertions)]
- let _z = SpecialNonReactiveZone::enter();
+ let _z = leptos::prelude::diagnostics::SpecialNonReactiveZone::enter();
callback(ts.get_untracked());
}
diff --git a/src/use_web_notification.rs b/src/use_web_notification.rs
index 9f37854..34f528a 100644
--- a/src/use_web_notification.rs
+++ b/src/use_web_notification.rs
@@ -69,6 +69,7 @@ pub fn use_web_notification_with_options(
use leptos::ev::visibilitychange;
use wasm_bindgen::closure::Closure;
use wasm_bindgen::JsCast;
+ use send_wrapper::SendWrapper;
let on_click_closure = Closure::::new({
let on_click = Rc::clone(&options.on_click);
@@ -121,7 +122,7 @@ pub fn use_web_notification_with_options(
let on_error_closure = on_error_closure.clone();
let on_show_closure = on_show_closure.clone();
- move |options_override: ShowOptions| {
+ let show = move |options_override: ShowOptions| {
if !is_supported.get_untracked() {
return;
}
@@ -132,7 +133,7 @@ pub fn use_web_notification_with_options(
let on_error_closure = on_error_closure.clone();
let on_show_closure = on_show_closure.clone();
- spawn_local(async move {
+ leptos::spawn::spawn_local(async move {
set_permission.set(request_web_notification_permission().await);
let mut notification_options = web_sys::NotificationOptions::from(&options);
@@ -151,7 +152,9 @@ pub fn use_web_notification_with_options(
set_notification.set(Some(notification_value));
});
- }
+ };
+ let wrapped_show = SendWrapper::new(show);
+ move |options_override: ShowOptions| wrapped_show(options_override)
};
let close = {
@@ -165,7 +168,7 @@ pub fn use_web_notification_with_options(
}
};
- spawn_local(async move {
+ leptos::spawn::spawn_local(async move {
set_permission.set(request_web_notification_permission().await);
});
@@ -489,8 +492,8 @@ async fn request_web_notification_permission() -> NotificationPermission {
/// Return type for [`use_web_notification`].
pub struct UseWebNotificationReturn
where
- ShowFn: Fn(ShowOptions) + Clone,
- CloseFn: Fn() + Clone,
+ ShowFn: Fn(ShowOptions) + Clone + Send + Sync,
+ CloseFn: Fn() + Clone + Send + Sync,
{
pub is_supported: Signal,
pub notification: Signal |