use leptos::{component, ChildrenFn, ViewFn};
use leptos_dom::IntoView;
use leptos_reactive::signal_prelude::*;
#[cfg_attr(
any(debug_assertions, feature = "ssr"),
tracing::instrument(level = "trace", skip_all)
)]
#[component]
pub fn Show<W>(
children: ChildrenFn,
when: W,
#[prop(optional, into)]
fallback: ViewFn,
) -> impl IntoView
where
W: Fn() -> bool + 'static,
{
let memoized_when = create_memo(move |_| when());
move || match memoized_when.get() {
true => children().into_view(),
false => fallback.run(),
}
}