diff --git a/src/use_idle.rs b/src/use_idle.rs index 1819929..3f0a20e 100644 --- a/src/use_idle.rs +++ b/src/use_idle.rs @@ -90,24 +90,28 @@ pub fn use_idle_with_options( let _ = set_idle; } else { use crate::utils::create_filter_wrapper; - use crate::{use_document, use_event_listener, use_event_listener_with_options,UseEventListenerOptions}; + use crate::{ + use_document, use_event_listener, use_event_listener_with_options, UseEventListenerOptions, + }; use leptos::ev::{visibilitychange, Custom}; use leptos::leptos_dom::helpers::TimeoutHandle; use std::cell::Cell; + use std::rc::Rc; use std::time::Duration; + let timer = Rc::new(Cell::new(None::)); + let reset = { - let timer = Cell::new(None::); + let timer = Rc::clone(&timer); move || { set_idle.set(false); - if let Some(timer) = timer.take() { - timer.clear(); - } - timer.replace( + if let Some(timer) = timer.replace( set_timeout_with_handle(move || set_idle.set(true), Duration::from_millis(timeout)) .ok(), - ); + ) { + timer.clear(); + } } };