Skip to main content

forge_dioxus/
context.rs

1
2use dioxus::prelude::*;
3
4use crate::signals::{ForgeSignals, SignalsConfig, setup_auto_capture};
5use crate::{ConnectionState, ForgeClient, ForgeClientConfig};
6
7#[component]
8pub fn ForgeProvider(
9    url: String,
10    #[props(default)] signals: Option<SignalsConfig>,
11    children: Element,
12) -> Element {
13    let connection_state = use_context_provider(|| Signal::new(ConnectionState::Disconnected));
14    let client = use_context_provider(|| {
15        let config = ForgeClientConfig::new(url).with_connection_state(connection_state);
16        ForgeClient::new(config)
17    });
18
19    let signals_config = signals.unwrap_or_default();
20    let signals_instance = use_context_provider(|| {
21        let s = ForgeSignals::new(client.clone(), signals_config);
22        client.set_signals(s.clone());
23        s
24    });
25
26    use_hook(|| {
27        setup_auto_capture(signals_instance);
28    });
29
30    rsx! { {children} }
31}
32
33pub fn use_forge_client() -> ForgeClient {
34    use_context::<ForgeClient>()
35}
36
37pub fn use_connection_state() -> Signal<ConnectionState> {
38    use_context::<Signal<ConnectionState>>()
39}