mirror of
https://github.com/adoyle0/leptos-use.git
synced 2025-02-02 10:54:15 -05:00
fixed use_timeout_fn to be SSR safe
This commit is contained in:
parent
f0d60e5d49
commit
da56771900
3 changed files with 76 additions and 48 deletions
|
@ -3,6 +3,12 @@
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [0.11.3] - 2024-07-31
|
||||||
|
|
||||||
|
### Fix 🍕
|
||||||
|
|
||||||
|
- Made `use_timeout_fn` SSR-safe
|
||||||
|
|
||||||
## [0.11.2] - 2024-07-30
|
## [0.11.2] - 2024-07-30
|
||||||
|
|
||||||
### Change 🔥
|
### Change 🔥
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "leptos-use"
|
name = "leptos-use"
|
||||||
version = "0.11.2"
|
version = "0.11.3"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["Marc-Stefan Cassola"]
|
authors = ["Marc-Stefan Cassola"]
|
||||||
categories = ["gui", "web-programming"]
|
categories = ["gui", "web-programming"]
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
use leptos::leptos_dom::helpers::TimeoutHandle;
|
|
||||||
use leptos::*;
|
use leptos::*;
|
||||||
use std::cell::Cell;
|
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
use std::rc::Rc;
|
|
||||||
use std::time::Duration;
|
|
||||||
|
|
||||||
/// Wrapper for `setTimeout` with controls.
|
/// Wrapper for `setTimeout` with controls.
|
||||||
///
|
///
|
||||||
|
@ -31,6 +27,11 @@ use std::time::Duration;
|
||||||
/// # view! { }
|
/// # view! { }
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
|
///
|
||||||
|
/// ## Server-Side Rendering
|
||||||
|
///
|
||||||
|
/// On the server the callback will never be run. The returned functions are all no-ops and
|
||||||
|
/// `is_pending` will always be `false`.
|
||||||
pub fn use_timeout_fn<CbFn, Arg, D>(
|
pub fn use_timeout_fn<CbFn, Arg, D>(
|
||||||
callback: CbFn,
|
callback: CbFn,
|
||||||
delay: D,
|
delay: D,
|
||||||
|
@ -40,10 +41,20 @@ where
|
||||||
Arg: 'static,
|
Arg: 'static,
|
||||||
D: Into<MaybeSignal<f64>>,
|
D: Into<MaybeSignal<f64>>,
|
||||||
{
|
{
|
||||||
let delay = delay.into();
|
|
||||||
|
|
||||||
let (is_pending, set_pending) = create_signal(false);
|
let (is_pending, set_pending) = create_signal(false);
|
||||||
|
|
||||||
|
let start;
|
||||||
|
let stop;
|
||||||
|
|
||||||
|
#[cfg(not(feature = "ssr"))]
|
||||||
|
{
|
||||||
|
use leptos::leptos_dom::helpers::TimeoutHandle;
|
||||||
|
use std::cell::Cell;
|
||||||
|
use std::rc::Rc;
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
let delay = delay.into();
|
||||||
|
|
||||||
let timer = Rc::new(Cell::new(None::<TimeoutHandle>));
|
let timer = Rc::new(Cell::new(None::<TimeoutHandle>));
|
||||||
|
|
||||||
let clear = {
|
let clear = {
|
||||||
|
@ -56,7 +67,7 @@ where
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let stop = {
|
stop = {
|
||||||
let clear = clear.clone();
|
let clear = clear.clone();
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
|
@ -65,7 +76,7 @@ where
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let start = {
|
start = {
|
||||||
let timer = Rc::clone(&timer);
|
let timer = Rc::clone(&timer);
|
||||||
let callback = callback.clone();
|
let callback = callback.clone();
|
||||||
|
|
||||||
|
@ -99,6 +110,17 @@ where
|
||||||
};
|
};
|
||||||
|
|
||||||
on_cleanup(clear);
|
on_cleanup(clear);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "ssr")]
|
||||||
|
{
|
||||||
|
let _ = set_pending;
|
||||||
|
let _ = callback;
|
||||||
|
let _ = delay;
|
||||||
|
|
||||||
|
start = move |_: Arg| ();
|
||||||
|
stop = move || ();
|
||||||
|
}
|
||||||
|
|
||||||
UseTimeoutFnReturn {
|
UseTimeoutFnReturn {
|
||||||
is_pending: is_pending.into(),
|
is_pending: is_pending.into(),
|
||||||
|
|
Loading…
Add table
Reference in a new issue