From 8e7d53aa9a0c047860a686760916042ff00fd134 Mon Sep 17 00:00:00 2001 From: Erik Kundt Date: Sun, 4 Jun 2023 15:52:40 +0200 Subject: [PATCH] tui: Fire proper list selection messages --- radicle-tui/src/app/event.rs | 26 ++- radicle-tui/src/ui/cob.rs | 6 - radicle-tui/src/ui/widget.rs | 1 + radicle-tui/src/ui/widget/common.rs | 8 +- radicle-tui/src/ui/widget/common/container.rs | 51 +++-- radicle-tui/src/ui/widget/common/list.rs | 200 +++++------------- radicle-tui/src/ui/widget/home.rs | 22 +- radicle-tui/src/ui/widget/utils.rs | 43 ++++ 8 files changed, 168 insertions(+), 189 deletions(-) create mode 100644 radicle-tui/src/ui/widget/utils.rs diff --git a/radicle-tui/src/app/event.rs b/radicle-tui/src/app/event.rs index 8b03958b..ca323870 100644 --- a/radicle-tui/src/app/event.rs +++ b/radicle-tui/src/app/event.rs @@ -60,9 +60,16 @@ impl tuirealm::Component for Widget { } Event::Keyboard(KeyEvent { code: Key::Enter, .. - }) => self - .selected_item() - .map(|item| Message::Patch(PatchMessage::Show(item.id().to_owned()))), + }) => { + let result = self.perform(Cmd::Submit); + match result { + CmdResult::Submit(State::One(StateValue::Usize(selected))) => { + let item = self.items().get(selected)?; + Some(Message::Patch(PatchMessage::Show(item.id().to_owned()))) + } + _ => None, + } + } _ => None, } } @@ -83,9 +90,16 @@ impl tuirealm::Component for Widget { } Event::Keyboard(KeyEvent { code: Key::Enter, .. - }) => self - .selected_item() - .map(|item| Message::Issue(IssueMessage::Show(item.id().to_owned()))), + }) => { + let result = self.perform(Cmd::Submit); + match result { + CmdResult::Submit(State::One(StateValue::Usize(selected))) => { + let item = self.items().get(selected)?; + Some(Message::Issue(IssueMessage::Show(item.id().to_owned()))) + } + _ => None, + } + } _ => None, } } diff --git a/radicle-tui/src/ui/cob.rs b/radicle-tui/src/ui/cob.rs index fa12ae2a..a1275acb 100644 --- a/radicle-tui/src/ui/cob.rs +++ b/radicle-tui/src/ui/cob.rs @@ -256,12 +256,6 @@ impl TableItem<7> for IssueItem { } } -impl TableItem<1> for () { - fn row(&self, _theme: &Theme) -> [Cell; 1] { - [Cell::default()] - } -} - pub fn format_patch_state(state: &PatchState) -> (String, Color) { match state { PatchState::Open { conflicts: _ } => (" ● ".into(), Color::Green), diff --git a/radicle-tui/src/ui/widget.rs b/radicle-tui/src/ui/widget.rs index f1f8b5cd..d085377a 100644 --- a/radicle-tui/src/ui/widget.rs +++ b/radicle-tui/src/ui/widget.rs @@ -2,6 +2,7 @@ pub mod common; pub mod home; pub mod issue; pub mod patch; +mod utils; use std::ops::Deref; diff --git a/radicle-tui/src/ui/widget/common.rs b/radicle-tui/src/ui/widget/common.rs index 31aaf7d0..faebab51 100644 --- a/radicle-tui/src/ui/widget/common.rs +++ b/radicle-tui/src/ui/widget/common.rs @@ -11,7 +11,7 @@ use context::{Shortcut, Shortcuts}; use label::Label; use list::{Property, PropertyList}; -use self::list::{ColumnWidth, TableModel}; +use self::list::ColumnWidth; use super::Widget; @@ -37,10 +37,10 @@ pub fn reversable_label(content: &str) -> Widget