use dioxus_core::prelude::try_consume_context;
use dioxus_hooks::{
use_context,
use_context_provider,
};
use dioxus_signals::{
Readable,
Signal,
};
use crate::theming::*;
pub fn use_init_theme(theme_cb: impl FnOnce() -> Theme) -> Signal<Theme> {
use_context_provider(|| Signal::new(theme_cb()))
}
pub fn use_init_default_theme() -> Signal<Theme> {
use_context_provider(|| Signal::new(Theme::default()))
}
pub fn use_theme() -> Signal<Theme> {
use_context::<Signal<Theme>>()
}
pub fn use_get_theme() -> Theme {
try_consume_context::<Signal<Theme>>()
.map(|v| v.read().clone())
.unwrap_or_default()
}
#[macro_export]
macro_rules! use_applied_theme {
($theme_prop:expr, $theme_name:ident) => {{
let mut theme = ::freya_hooks::use_get_theme();
let mut requested_theme = theme.$theme_name;
if let Some(theme_override) = $theme_prop {
requested_theme.apply_optional(theme_override);
}
requested_theme.apply_colors(&theme.colors);
requested_theme
}};
}