use crate::storage::new_storage_entry;
use crate::storage::SessionStorage;
use dioxus::prelude::*;
use dioxus_signals::Signal;
use serde::de::DeserializeOwned;
use serde::Serialize;
use super::StorageEntryTrait;
#[allow(clippy::needless_return)]
pub fn use_persistent<
T: Serialize + DeserializeOwned + Default + Clone + Send + Sync + PartialEq + 'static,
>(
key: impl ToString,
init: impl FnOnce() -> T,
) -> Signal<T> {
use_hook(|| new_persistent(key, init))
}
#[allow(clippy::needless_return)]
pub fn new_persistent<
T: Serialize + DeserializeOwned + Default + Clone + Send + Sync + PartialEq + 'static,
>(
key: impl ToString,
init: impl FnOnce() -> T,
) -> Signal<T> {
let storage_entry = new_storage_entry::<SessionStorage, T>(key.to_string(), init);
storage_entry.save_to_storage_on_change();
storage_entry.data
}
#[allow(clippy::needless_return)]
#[track_caller]
pub fn use_singleton_persistent<
T: Serialize + DeserializeOwned + Default + Clone + Send + Sync + PartialEq + 'static,
>(
init: impl FnOnce() -> T,
) -> Signal<T> {
use_hook(|| new_singleton_persistent(init))
}
#[allow(clippy::needless_return)]
#[track_caller]
pub fn new_singleton_persistent<
T: Serialize + DeserializeOwned + Default + Clone + Send + Sync + PartialEq + 'static,
>(
init: impl FnOnce() -> T,
) -> Signal<T> {
let caller = std::panic::Location::caller();
let key = format!("{}:{}", caller.file(), caller.line());
new_persistent(key, init)
}