dioxus_docs_kit/hooks.rs
1use dioxus::prelude::*;
2
3use crate::DocsContext;
4use crate::components::DrawerOpen;
5use crate::registry::DocsRegistry;
6
7/// Signals returned by [`use_docs_providers`] so the consumer's header RSX
8/// can reference them (e.g. to wire up a search button or drawer toggle).
9pub struct DocsProviders {
10 pub search_open: Signal<bool>,
11 pub drawer_open: Signal<bool>,
12}
13
14/// One-call setup for all the context providers that `DocsLayout` and its
15/// children expect.
16///
17/// Call this in your docs layout wrapper **before** rendering `DocsLayout`:
18///
19/// ```rust,ignore
20/// let providers = use_docs_providers(&*DOCS, docs_ctx);
21/// // Use providers.search_open / providers.drawer_open in your header RSX
22/// ```
23///
24/// This replaces the manual calls to:
25/// - `use_context_provider(|| registry)`
26/// - `use_context_provider(|| docs_ctx)`
27/// - `use_signal(|| false)` × 2 + `use_context_provider` for search_open / DrawerOpen
28pub fn use_docs_providers(registry: &'static DocsRegistry, docs_ctx: DocsContext) -> DocsProviders {
29 use_context_provider(|| registry);
30 use_context_provider(|| docs_ctx);
31
32 let search_open = use_signal(|| false);
33 let drawer_open = use_signal(|| false);
34
35 use_context_provider(|| search_open);
36 use_context_provider(|| DrawerOpen(drawer_open));
37
38 DocsProviders {
39 search_open,
40 drawer_open,
41 }
42}