mirror of
https://github.com/adoyle0/leptos-use.git
synced 2025-01-23 09:09:21 -05:00
Add prototype use_storage option to listen to changes
This commit is contained in:
parent
2f3c72f2bb
commit
0f6b4aadc6
1 changed files with 17 additions and 4 deletions
|
@ -8,6 +8,7 @@ use web_sys::Storage;
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct UseStorageOptions<Err> {
|
pub struct UseStorageOptions<Err> {
|
||||||
on_error: Rc<dyn Fn(UseStorageError<Err>)>,
|
on_error: Rc<dyn Fn(UseStorageError<Err>)>,
|
||||||
|
listen_to_storage_changes: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Session handling errors returned by [`use_storage`].
|
/// Session handling errors returned by [`use_storage`].
|
||||||
|
@ -47,7 +48,10 @@ where
|
||||||
T: Clone + Default + PartialEq + TryFrom<String> + ToString,
|
T: Clone + Default + PartialEq + TryFrom<String> + ToString,
|
||||||
{
|
{
|
||||||
// TODO ssr
|
// TODO ssr
|
||||||
let UseStorageOptions { on_error } = options;
|
let UseStorageOptions {
|
||||||
|
on_error,
|
||||||
|
listen_to_storage_changes,
|
||||||
|
} = options;
|
||||||
let storage: Result<Storage, ()> = handle_error(&on_error, try_storage());
|
let storage: Result<Storage, ()> = handle_error(&on_error, try_storage());
|
||||||
|
|
||||||
let initial_value = storage
|
let initial_value = storage
|
||||||
|
@ -93,9 +97,9 @@ where
|
||||||
|
|
||||||
// Listen for storage events
|
// Listen for storage events
|
||||||
// Note: we only receive events from other tabs / windows, not from internal updates.
|
// Note: we only receive events from other tabs / windows, not from internal updates.
|
||||||
let _ = {
|
if listen_to_storage_changes {
|
||||||
let key = key.as_ref().to_owned();
|
let key = key.as_ref().to_owned();
|
||||||
use_event_listener_with_options(
|
let _ = use_event_listener_with_options(
|
||||||
use_window(),
|
use_window(),
|
||||||
leptos::ev::storage,
|
leptos::ev::storage,
|
||||||
move |ev| {
|
move |ev| {
|
||||||
|
@ -111,7 +115,7 @@ where
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
UseEventListenerOptions::default().passive(true),
|
UseEventListenerOptions::default().passive(true),
|
||||||
)
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
let value = create_memo(move |_| data.get().unwrap_or_default());
|
let value = create_memo(move |_| data.get().unwrap_or_default());
|
||||||
|
@ -152,6 +156,7 @@ impl<Err: std::fmt::Debug> Default for UseStorageOptions<Err> {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
on_error: Rc::new(|_err| ()),
|
on_error: Rc::new(|_err| ()),
|
||||||
|
listen_to_storage_changes: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,6 +165,14 @@ impl<Err> UseStorageOptions<Err> {
|
||||||
pub fn on_error(self, on_error: impl Fn(UseStorageError<Err>) + 'static) -> Self {
|
pub fn on_error(self, on_error: impl Fn(UseStorageError<Err>) + 'static) -> Self {
|
||||||
Self {
|
Self {
|
||||||
on_error: Rc::new(on_error),
|
on_error: Rc::new(on_error),
|
||||||
|
..self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn listen_to_storage_changes(self, listen_to_storage_changes: bool) -> Self {
|
||||||
|
Self {
|
||||||
|
listen_to_storage_changes,
|
||||||
|
..self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue