Skip to main content

dioxus_docs_kit/blog/
hooks.rs

1use dioxus::prelude::*;
2
3use crate::BlogContext;
4use crate::blog::registry::BlogRegistry;
5use crate::components::DrawerOpen;
6
7/// Signals returned by [`use_blog_providers`].
8pub struct BlogProviders {
9    pub search_open: Signal<bool>,
10    pub drawer_open: Signal<bool>,
11    pub active_tag: Signal<Option<String>>,
12    pub current_page: Signal<usize>,
13}
14
15/// One-call setup for all context providers that `BlogLayout` and its children expect.
16pub fn use_blog_providers(registry: &'static BlogRegistry, blog_ctx: BlogContext) -> BlogProviders {
17    use_context_provider(|| registry);
18    use_context_provider(|| blog_ctx);
19
20    let search_open = use_signal(|| false);
21    let drawer_open = use_signal(|| false);
22    let active_tag: Signal<Option<String>> = use_signal(|| None);
23    let current_page = use_signal(|| 0usize);
24
25    use_context_provider(|| search_open);
26    use_context_provider(|| DrawerOpen(drawer_open));
27    use_context_provider(|| active_tag);
28    use_context_provider(|| current_page);
29
30    BlogProviders {
31        search_open,
32        drawer_open,
33        active_tag,
34        current_page,
35    }
36}