diff options
author | Shav Kinderlehrer <[email protected]> | 2024-03-24 14:18:53 -0400 |
---|---|---|
committer | Shav Kinderlehrer <[email protected]> | 2024-03-24 14:18:53 -0400 |
commit | f638f4bd1e3a03bc2bdd5f9dcd57d4830fd3c553 (patch) | |
tree | fa42f60268450070fd8c25596c6bdc046369996b /src/components/status.rs | |
parent | 9d23304feba7b1ed50e582ea5a26deafedba505a (diff) | |
download | molehole-f638f4bd1e3a03bc2bdd5f9dcd57d4830fd3c553.tar.gz molehole-f638f4bd1e3a03bc2bdd5f9dcd57d4830fd3c553.zip |
Diffstat (limited to 'src/components/status.rs')
-rw-r--r-- | src/components/status.rs | 32 |
1 files changed, 22 insertions, 10 deletions
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<url::Url>, } impl Component for StatusBar { fn handle_key_event( &mut self, key: crossterm::event::KeyEvent, - ) -> eyre::Result<Option<AppAction>> { + ) -> Option<AppAction> { 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<AppEvent> { + 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, |