From 68a1da224074af765f1a5287aca85bfc77971c8d Mon Sep 17 00:00:00 2001 From: Erik Kundt Date: Wed, 24 Apr 2024 14:33:07 +0200 Subject: [PATCH] patch: Move out browse footer --- bin/commands/patch/select/ui.rs | 174 ++++++++++++++++---------------- 1 file changed, 86 insertions(+), 88 deletions(-) diff --git a/bin/commands/patch/select/ui.rs b/bin/commands/patch/select/ui.rs index c9f8bc3f..d06d0dd3 100644 --- a/bin/commands/patch/select/ui.rs +++ b/bin/commands/patch/select/ui.rs @@ -131,93 +131,6 @@ pub struct BrowsePage<'a> { shortcuts: BoxedWidget, } -impl<'a> BrowsePage<'a> { - fn build_footer(props: &BrowsePageProps<'a>, selected: Option) -> Vec> { - let filter = PatchItemFilter::from_str(&props.search).unwrap_or_default(); - - let search = Line::from(vec![ - span::default(" Search ").cyan().dim().reversed(), - span::default(" "), - span::default(&props.search.to_string()).gray().dim(), - ]); - - let draft = Line::from(vec![ - span::default(&props.stats.get("Draft").unwrap_or(&0).to_string()).dim(), - span::default(" Draft").dim(), - ]); - - let open = Line::from(vec![ - span::positive(&props.stats.get("Open").unwrap_or(&0).to_string()).dim(), - span::default(" Open").dim(), - ]); - - let merged = Line::from(vec![ - span::default(&props.stats.get("Merged").unwrap_or(&0).to_string()) - .magenta() - .dim(), - span::default(" Merged").dim(), - ]); - - let archived = Line::from(vec![ - span::default(&props.stats.get("Archived").unwrap_or(&0).to_string()) - .yellow() - .dim(), - span::default(" Archived").dim(), - ]); - - let sum = Line::from(vec![ - span::default("Σ ").dim(), - span::default(&props.patches.len().to_string()).dim(), - ]); - - let progress = selected - .map(|selected| TableUtils::progress(selected, props.patches.len(), props.page_size)) - .unwrap_or_default(); - let progress = span::default(&format!("{}%", progress)).dim(); - - match filter.status() { - Some(state) => { - let block = match state { - Status::Draft => draft, - Status::Open => open, - Status::Merged => merged, - Status::Archived => archived, - }; - - vec![ - Column::new(Text::from(search), Constraint::Fill(1)), - Column::new( - Text::from(block.clone()), - Constraint::Min(block.width() as u16), - ), - Column::new(Text::from(progress), Constraint::Min(4)), - ] - } - None => vec![ - Column::new(Text::from(search), Constraint::Fill(1)), - Column::new( - Text::from(draft.clone()), - Constraint::Min(draft.width() as u16), - ), - Column::new( - Text::from(open.clone()), - Constraint::Min(open.width() as u16), - ), - Column::new( - Text::from(merged.clone()), - Constraint::Min(merged.width() as u16), - ), - Column::new( - Text::from(archived.clone()), - Constraint::Min(archived.width() as u16), - ), - Column::new(Text::from(sum.clone()), Constraint::Min(sum.width() as u16)), - Column::new(Text::from(progress), Constraint::Min(4)), - ], - } - } -} - impl<'a: 'static> Widget for BrowsePage<'a> { type Action = Action; type State = State; @@ -269,7 +182,7 @@ impl<'a: 'static> Widget for BrowsePage<'a> { let props = BrowsePageProps::from(state); FooterProps::default() - .columns(Self::build_footer(&props, props.selected)) + .columns(browse_footer(&props, props.selected)) .to_boxed() }) .to_boxed(), @@ -664,6 +577,91 @@ impl<'a: 'static> Widget for HelpPage<'a> { } } +fn browse_footer<'a>(props: &BrowsePageProps<'a>, selected: Option) -> Vec> { + let filter = PatchItemFilter::from_str(&props.search).unwrap_or_default(); + + let search = Line::from(vec![ + span::default(" Search ").cyan().dim().reversed(), + span::default(" "), + span::default(&props.search.to_string()).gray().dim(), + ]); + + let draft = Line::from(vec![ + span::default(&props.stats.get("Draft").unwrap_or(&0).to_string()).dim(), + span::default(" Draft").dim(), + ]); + + let open = Line::from(vec![ + span::positive(&props.stats.get("Open").unwrap_or(&0).to_string()).dim(), + span::default(" Open").dim(), + ]); + + let merged = Line::from(vec![ + span::default(&props.stats.get("Merged").unwrap_or(&0).to_string()) + .magenta() + .dim(), + span::default(" Merged").dim(), + ]); + + let archived = Line::from(vec![ + span::default(&props.stats.get("Archived").unwrap_or(&0).to_string()) + .yellow() + .dim(), + span::default(" Archived").dim(), + ]); + + let sum = Line::from(vec![ + span::default("Σ ").dim(), + span::default(&props.patches.len().to_string()).dim(), + ]); + + let progress = selected + .map(|selected| TableUtils::progress(selected, props.patches.len(), props.page_size)) + .unwrap_or_default(); + let progress = span::default(&format!("{}%", progress)).dim(); + + match filter.status() { + Some(state) => { + let block = match state { + Status::Draft => draft, + Status::Open => open, + Status::Merged => merged, + Status::Archived => archived, + }; + + vec![ + Column::new(Text::from(search), Constraint::Fill(1)), + Column::new( + Text::from(block.clone()), + Constraint::Min(block.width() as u16), + ), + Column::new(Text::from(progress), Constraint::Min(4)), + ] + } + None => vec![ + Column::new(Text::from(search), Constraint::Fill(1)), + Column::new( + Text::from(draft.clone()), + Constraint::Min(draft.width() as u16), + ), + Column::new( + Text::from(open.clone()), + Constraint::Min(open.width() as u16), + ), + Column::new( + Text::from(merged.clone()), + Constraint::Min(merged.width() as u16), + ), + Column::new( + Text::from(archived.clone()), + Constraint::Min(archived.width() as u16), + ), + Column::new(Text::from(sum.clone()), Constraint::Min(sum.width() as u16)), + Column::new(Text::from(progress), Constraint::Min(4)), + ], + } +} + fn help_text() -> Text<'static> { Text::from( [