use yew::prelude::*;
use crate::manager::StyleManager;
#[derive(Properties, Clone, Debug, PartialEq)]
pub struct ManagerProviderProps {
pub manager: StyleManager,
#[prop_or_default]
pub children: Children,
}
#[component(ManagerProvider)]
pub fn manager_provider(props: &ManagerProviderProps) -> HtmlResult {
let ManagerProviderProps { manager, children } = props.clone();
#[cfg(any(feature = "ssr", feature = "hydration"))]
{
use crate::manager::StyleData;
let _manager = manager.clone();
let _style_data = use_transitive_state!((), move |_| -> StyleData {
_manager
.style_data()
.map(|m| m.clone())
.unwrap_or_else(StyleData::new)
})?;
#[cfg(feature = "hydration")]
{
let manager = manager.clone();
use_memo(manager, move |manager| {
if let Some(m) = _style_data {
manager.load_style_data(m.as_ref());
}
});
}
}
Ok(html! {
<ContextProvider<StyleManager> context={manager}>
{children}
</ContextProvider<StyleManager>>
})
}