From f638f4bd1e3a03bc2bdd5f9dcd57d4830fd3c553 Mon Sep 17 00:00:00 2001 From: Shav Kinderlehrer Date: Sun, 24 Mar 2024 14:18:53 -0400 Subject: Overhaul events system + add url_manager --- src/components/status.rs | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'src/components/status.rs') diff --git a/src/components/status.rs b/src/components/status.rs index d91782f..aa2b384 100644 --- a/src/components/status.rs +++ b/src/components/status.rs @@ -2,29 +2,31 @@ use ratatui::prelude::*; use ratatui::widgets::*; use crate::app_action::AppAction; +use crate::app_event::AppEvent; use crate::component::Component; use crate::keys::key_commands::serialize_key_event; #[derive(Default, Clone)] pub struct StatusBar { - message: String, - current_key: String, - error: bool, + pub message: String, + pub current_key: String, + pub error: bool, + pub url_to_open: Option, } impl Component for StatusBar { fn handle_key_event( &mut self, key: crossterm::event::KeyEvent, - ) -> eyre::Result> { + ) -> Option { let key_str = serialize_key_event(key); self.current_key = key_str; - Ok(None) + None } fn handle_action(&mut self, action: crate::app_action::AppAction) { - match action { + match action.clone() { AppAction::StatusBarSetMessage(message) => { self.error = false; self.message = message; @@ -33,14 +35,24 @@ impl Component for StatusBar { self.error = true; self.message = message; } - AppAction::StatusBarGetInput(_prompt) => todo!(), - _ => { - self.current_key += " "; - self.current_key += &action.to_string(); + AppAction::OpenUrl => { + self.url_to_open = + Some(url::Url::parse("molerat://example.com").unwrap()); } + _ => {} } } + fn update(&mut self) -> Option { + if let Some(url) = &self.url_to_open { + let event = AppEvent::OpenUrl(url.clone()); + self.url_to_open = None; + return Some(event); + } + + None + } + fn render( &mut self, frame: &mut ratatui::prelude::Frame, -- cgit v1.2.3