use dioxus_core::{prelude::suspense_context, use_hook};

/// Run a closure after the suspense boundary this is under is resolved. The
/// closure will be run immediately if the suspense boundary is already resolved
/// or the scope is not under a suspense boundary.
pub fn use_after_suspense_resolved(suspense_resolved: impl FnOnce() + 'static) {
    use_hook(|| {
        // If this is under a suspense boundary, we need to check if it is resolved
        match suspense_context() {
            Some(context) => {
                // If it is suspended, run the closure after the suspense is resolved
                context.after_suspense_resolved(suspense_resolved)
            }
            None => {
                // Otherwise, just run the resolved closure immediately
                suspense_resolved();
            }
        }
    })
}
