Skip to main content

flams_web_utils/components/
mod.rs

1#![allow(clippy::must_use_candidate)]
2
3mod r#await;
4mod drawer;
5mod trees;
6
7mod errors;
8pub use errors::*;
9use leptos::prelude::*;
10
11mod layout;
12pub use layout::*;
13
14pub use drawer::*;
15pub use r#await::*;
16pub use trees::*;
17
18pub use ftml_component_utils::Header;
19#[leptos::prelude::slot]
20pub struct Trigger {
21    children: leptos::prelude::Children,
22}
23
24#[macro_export]
25macro_rules! client_only {
26    ($b:expr) => {{
27        let sig = ::leptos::prelude::RwSignal::new(false);
28        ::leptos::prelude::Effect::new(move || {
29            #[cfg(feature = "hydrate")]
30            {
31                sig.set(true);
32            }
33        });
34        move || if sig.get() { Some($b) } else { None }
35    }};
36}
37
38#[component]
39pub fn ClientOnly(children: Children) -> impl IntoView {
40    let children = std::cell::Cell::new(Some(children));
41    let sig = RwSignal::new(false);
42    let rf = NodeRef::new();
43    rf.on_load(move |_| sig.set(true));
44    move || {
45        if sig.get() {
46            leptos::either::Either::Left(children.take().map(|c| c()))
47        } else {
48            leptos::either::Either::Right(view!(<div node_ref = rf/>))
49        }
50    }
51}