diff --git a/bin/commands/patch/common/ui.rs b/bin/commands/patch/common/ui.rs index 1024405b..0e273c5c 100644 --- a/bin/commands/patch/common/ui.rs +++ b/bin/commands/patch/common/ui.rs @@ -1,5 +1,6 @@ use radicle::cob::patch::{Patch, PatchId}; +use tui::ui::widget::context::{ContextBar, Progress}; use tuirealm::command::{Cmd, CmdResult}; use tuirealm::tui::layout::Rect; use tuirealm::{AttrValue, Attribute, Frame, MockComponent, Props, State}; @@ -8,7 +9,7 @@ use radicle_tui as tui; use tui::context::Context; use tui::ui::cob::PatchItem; -use tui::ui::theme::Theme; +use tui::ui::theme::{Theme, style}; use tui::ui::widget::{Widget, WidgetComponent}; use tui::ui::widget::label::{self}; @@ -91,3 +92,66 @@ impl WidgetComponent for PatchBrowser { self.table.perform(cmd) } } + +pub fn browse_context(context: &Context, _theme: &Theme, progress: Progress) -> Widget { + use radicle::cob::patch::State; + + let mut draft = 0; + let mut open = 0; + let mut archived = 0; + let mut merged = 0; + + let patches = context.patches().as_ref().unwrap(); + for (_, patch) in patches { + match patch.state() { + State::Draft => draft += 1, + State::Open { conflicts: _ } => open += 1, + State::Archived => archived += 1, + State::Merged { + commit: _, + revision: _, + } => merged += 1, + } + } + + let context = label::default(""); + let divider = label::default(" | "); + + let draft_n = label::default(&format!("{draft}")).style(style::gray_dim()); + let draft = label::default(" Draft"); + + let open_n = label::default(&format!("{open}")).style(style::green()); + let open = label::default(" Open"); + + let archived_n = label::default(&format!("{archived}")).style(style::yellow()); + let archived = label::default(" Archived"); + + let merged_n = label::default(&format!("{merged}")).style(style::cyan()); + let merged = label::default(" Merged "); + + let progress = + label::default(&format!(" {} ", progress.to_string())).style(style::magenta_reversed()); + let spacer = label::default(""); + + let context_bar = ContextBar::new( + label::group(&[context]), + label::group(&[spacer.clone()]), + label::group(&[spacer]), + label::group(&[ + draft_n, + draft, + divider.clone(), + open_n, + open, + divider.clone(), + archived_n, + archived, + divider, + merged_n, + merged, + ]), + label::group(&[progress]), + ); + + Widget::new(context_bar).height(1) +} diff --git a/bin/commands/patch/list/page.rs b/bin/commands/patch/list/page.rs index 1d08d990..e5b9e0db 100644 --- a/bin/commands/patch/list/page.rs +++ b/bin/commands/patch/list/page.rs @@ -14,6 +14,7 @@ use tui::ui::{layout, subscription}; use tui::ViewPage; use super::{ui, Application, Cid, ListCid, Message}; +use super::super::common; /// /// Home @@ -64,7 +65,7 @@ impl ListView { } _ => Progress::None, }; - let context = ui::browse_context(context, theme, progress); + let context = common::ui::browse_context(context, theme, progress); app.remount(Cid::List(ListCid::Context), context.to_boxed(), vec![])?; diff --git a/bin/commands/patch/list/ui.rs b/bin/commands/patch/list/ui.rs index 6da37fbb..af22542a 100644 --- a/bin/commands/patch/list/ui.rs +++ b/bin/commands/patch/list/ui.rs @@ -7,7 +7,6 @@ use tui::ui::theme::{style, Theme}; use tui::ui::widget::Widget; use tui::ui::widget::container::Tabs; -use tui::ui::widget::context::{ContextBar, Progress}; use tui::ui::widget::label::{self}; use super::super::common; @@ -26,66 +25,3 @@ pub fn patches( ) -> Widget { Widget::new(common::ui::PatchBrowser::new(context, theme, selected)) } - -pub fn browse_context(context: &Context, _theme: &Theme, progress: Progress) -> Widget { - use radicle::cob::patch::State; - - let mut draft = 0; - let mut open = 0; - let mut archived = 0; - let mut merged = 0; - - let patches = context.patches().as_ref().unwrap(); - for (_, patch) in patches { - match patch.state() { - State::Draft => draft += 1, - State::Open { conflicts: _ } => open += 1, - State::Archived => archived += 1, - State::Merged { - commit: _, - revision: _, - } => merged += 1, - } - } - - let context = label::default(""); - let divider = label::default(" | "); - - let draft_n = label::default(&format!("{draft}")).style(style::gray_dim()); - let draft = label::default(" Draft"); - - let open_n = label::default(&format!("{open}")).style(style::green()); - let open = label::default(" Open"); - - let archived_n = label::default(&format!("{archived}")).style(style::yellow()); - let archived = label::default(" Archived"); - - let merged_n = label::default(&format!("{merged}")).style(style::cyan()); - let merged = label::default(" Merged "); - - let progress = - label::default(&format!(" {} ", progress.to_string())).style(style::magenta_reversed()); - let spacer = label::default(""); - - let context_bar = ContextBar::new( - label::group(&[context]), - label::group(&[spacer.clone()]), - label::group(&[spacer]), - label::group(&[ - draft_n, - draft, - divider.clone(), - open_n, - open, - divider.clone(), - archived_n, - archived, - divider, - merged_n, - merged, - ]), - label::group(&[progress]), - ); - - Widget::new(context_bar).height(1) -} diff --git a/bin/commands/patch/select/page.rs b/bin/commands/patch/select/page.rs index f97857d4..f91b5b44 100644 --- a/bin/commands/patch/select/page.rs +++ b/bin/commands/patch/select/page.rs @@ -13,6 +13,7 @@ use tui::ui::widget::Widget; use tui::ui::{layout, subscription}; use tui::ViewPage; +use super::super::common; use super::{ui, Application, Cid, ListCid, Message}; /// @@ -63,7 +64,7 @@ impl ListView { } _ => Progress::None, }; - let context = ui::browse_context(context, theme, progress); + let context = common::ui::browse_context(context, theme, progress); app.remount(Cid::List(ListCid::Context), context.to_boxed(), vec![])?; diff --git a/bin/commands/patch/select/ui.rs b/bin/commands/patch/select/ui.rs index 6da37fbb..af22542a 100644 --- a/bin/commands/patch/select/ui.rs +++ b/bin/commands/patch/select/ui.rs @@ -7,7 +7,6 @@ use tui::ui::theme::{style, Theme}; use tui::ui::widget::Widget; use tui::ui::widget::container::Tabs; -use tui::ui::widget::context::{ContextBar, Progress}; use tui::ui::widget::label::{self}; use super::super::common; @@ -26,66 +25,3 @@ pub fn patches( ) -> Widget { Widget::new(common::ui::PatchBrowser::new(context, theme, selected)) } - -pub fn browse_context(context: &Context, _theme: &Theme, progress: Progress) -> Widget { - use radicle::cob::patch::State; - - let mut draft = 0; - let mut open = 0; - let mut archived = 0; - let mut merged = 0; - - let patches = context.patches().as_ref().unwrap(); - for (_, patch) in patches { - match patch.state() { - State::Draft => draft += 1, - State::Open { conflicts: _ } => open += 1, - State::Archived => archived += 1, - State::Merged { - commit: _, - revision: _, - } => merged += 1, - } - } - - let context = label::default(""); - let divider = label::default(" | "); - - let draft_n = label::default(&format!("{draft}")).style(style::gray_dim()); - let draft = label::default(" Draft"); - - let open_n = label::default(&format!("{open}")).style(style::green()); - let open = label::default(" Open"); - - let archived_n = label::default(&format!("{archived}")).style(style::yellow()); - let archived = label::default(" Archived"); - - let merged_n = label::default(&format!("{merged}")).style(style::cyan()); - let merged = label::default(" Merged "); - - let progress = - label::default(&format!(" {} ", progress.to_string())).style(style::magenta_reversed()); - let spacer = label::default(""); - - let context_bar = ContextBar::new( - label::group(&[context]), - label::group(&[spacer.clone()]), - label::group(&[spacer]), - label::group(&[ - draft_n, - draft, - divider.clone(), - open_n, - open, - divider.clone(), - archived_n, - archived, - divider, - merged_n, - merged, - ]), - label::group(&[progress]), - ); - - Widget::new(context_bar).height(1) -}