gm-tui 0.0.1

TUI-based Ethereum wallet
Documentation
use std::sync::{atomic::AtomicBool, mpsc::Sender, Arc};

use ratatui::{layout::Rect, widgets::Widget};

use crate::tui::{
    app::SharedState,
    traits::{Component, HandleResult},
    Event,
};

#[derive(Default)]
pub struct DevKeyCapturePage {
    data: Option<String>,
}

impl Component for DevKeyCapturePage {
    fn handle_event(
        &mut self,
        event: &Event,
        _area: Rect,
        _transmitter: &Sender<Event>,
        _shutdown_signal: &Arc<AtomicBool>,
        _shared_state: &SharedState,
    ) -> crate::Result<HandleResult> {
        if let Event::Input(key_event) = event {
            self.data = Some(format!("{key_event:?}"))
        }

        Ok(HandleResult::default())
    }

    fn render_component(
        &self,
        area: Rect,
        buf: &mut ratatui::prelude::Buffer,
        _shared_state: &crate::tui::app::SharedState,
    ) -> ratatui::prelude::Rect
    where
        Self: Sized,
    {
        if let Some(data) = self.data.as_ref() {
            data.render(area, buf);
        } else {
            "Press any key to capture the event".render(area, buf);
        }

        area
    }
}