Skip to main content

dx_ether_rs/hooks/
use_ether_initialize.rs

1use dioxus::{logger::tracing, prelude::*};
2
3use crate::adapters::ether_adapter::EtherAdapter;
4
5pub struct UseEtherInitialize {
6    pub allowed_info_log: Option<bool>,
7    pub allowed_error_log: Option<bool>,
8}
9
10pub fn use_ether_initialize(options: Option<UseEtherInitialize>) -> (Signal<String>, Signal<bool>) {
11    let options = options.unwrap_or(UseEtherInitialize {
12        allowed_info_log: Some(true),
13        allowed_error_log: Some(true),
14    });
15
16    let allowed_info_log = use_memo(move || options.allowed_info_log.unwrap_or(true));
17    let allowed_error_log = use_memo(move || options.allowed_error_log.unwrap_or(true));
18
19    let mut error = use_signal(String::new);
20    let mut loading = use_signal(|| true);
21
22    use_future(move || {
23        let allowed_info_log = allowed_info_log();
24        let allowed_error_log = allowed_error_log();
25
26        async move {
27            match EtherAdapter::new().wait_js_scripts().await {
28                Ok(_) => {
29                    loading.set(false);
30
31                    if allowed_info_log {
32                        tracing::info!("Ether has initialized.");
33                    }
34                }
35                Err(e) => {
36                    error.set(e.to_string());
37                    loading.set(false);
38
39                    if allowed_error_log {
40                        tracing::error!("Ether has been failed: {}", e.to_string());
41                    }
42                }
43            };
44        }
45    });
46
47    (error, loading)
48}