use dioxus::prelude::*;
use serde::de::DeserializeOwned;
use std::env;
pub fn use_input_props<T>(default: impl FnOnce() -> T) -> T
where
T: DeserializeOwned + Clone + 'static,
{
use_hook(|| {
if let Ok(json_str) = env::var("DIOXUSCUT_PROPS") {
match serde_json::from_str::<T>(&json_str) {
Ok(props) => return props,
Err(e) => {
tracing::warn!("Failed to parse DIOXUSCUT_PROPS env var: {}", e);
}
}
}
#[cfg(all(target_arch = "wasm32", feature = "web"))]
{
if let Some(window) = web_sys::window() {
if let Ok(val) =
js_sys::Reflect::get(&window, &js_sys::JsString::from("DIOXUSCUT_PROPS"))
{
if let Some(json_str) = val.as_string() {
match serde_json::from_str::<T>(&json_str) {
Ok(props) => return props,
Err(e) => {
tracing::warn!("Failed to parse window.DIOXUSCUT_PROPS: {}", e)
}
}
}
}
}
}
default()
})
}