dioxus_docs_kit/blog/
hooks.rs1use dioxus::prelude::*;
2
3use crate::BlogContext;
4use crate::blog::registry::BlogRegistry;
5use crate::components::{DrawerOpen, SearchOpen};
6
7#[derive(Clone, Copy)]
9pub struct ActiveTag(pub Signal<Option<String>>);
10
11#[derive(Clone, Copy)]
13pub struct CurrentPage(pub Signal<usize>);
14
15pub struct BlogProviders {
17 pub search_open: Signal<bool>,
18 pub drawer_open: Signal<bool>,
19 pub active_tag: Signal<Option<String>>,
20 pub current_page: Signal<usize>,
21}
22
23pub fn use_blog_providers(registry: &'static BlogRegistry, blog_ctx: BlogContext) -> BlogProviders {
25 use_context_provider(|| registry);
26 use_context_provider(|| blog_ctx);
27
28 let search_open = use_signal(|| false);
29 let drawer_open = use_signal(|| false);
30 let active_tag: Signal<Option<String>> = use_signal(|| None);
31 let current_page = use_signal(|| 0usize);
32
33 use_context_provider(|| SearchOpen(search_open));
34 use_context_provider(|| DrawerOpen(drawer_open));
35 use_context_provider(|| ActiveTag(active_tag));
36 use_context_provider(|| CurrentPage(current_page));
37
38 BlogProviders {
39 search_open,
40 drawer_open,
41 active_tag,
42 current_page,
43 }
44}