yggdrasil/components/skeletons/
delayed_skeleton.rs1use crate::utils::time::sleep_ms;
7use dioxus::prelude::*;
8
9const SKELETON_DELAY_MS: u32 = 200;
13
14#[component]
23pub fn DelayedSkeleton(children: Element, #[props(default = true)] pulse: bool) -> Element {
24 let mut visible = use_signal(|| false);
25
26 use_effect(move || {
27 spawn(async move {
28 sleep_ms(SKELETON_DELAY_MS).await;
29 visible.set(true);
30 });
31 });
32
33 if visible() {
34 rsx! {
35 div { class: if pulse { "animate-pulse" } else { "" }, {children} }
36 }
37 } else {
38 rsx! {}
39 }
40}