dx-ether-rs 0.1.1

Connect ether browser extension provider
Documentation
use dioxus::prelude::*;

use crate::{
    adapters::ether_adapter::EtherAdapter, ports::ether::personal_sign_port::PersonalSignPort,
};

pub fn use_ether_personal_sign(
    message: &str,
    address: &str,
    activated: Option<Signal<bool>>,
) -> (Signal<String>, Signal<String>, Signal<bool>) {
    let mut data = use_signal(String::new);
    let mut error = use_signal(|| String::new());
    let mut loading = use_signal(|| false);

    let message = message.to_string();
    let address = address.to_string();
    let activated = activated.unwrap_or(Signal::new(false));

    use_effect(move || {
        let activated = activated();
        let message = message.to_string();
        let address = address.to_string();

        spawn(async move {
            if activated {
                loading.set(true);

                match EtherAdapter::new().personal_sign(&message, &address).await {
                    Ok(r) => {
                        loading.set(false);
                        data.set(r);
                    }
                    Err(e) => {
                        error.set(e.to_string());
                        loading.set(false);
                    }
                };
            }
        });
    });

    (data, error, loading)
}