diff --git a/src/flux/ui/widget.rs b/src/flux/ui/widget.rs index 167484ff..97ee0f38 100644 --- a/src/flux/ui/widget.rs +++ b/src/flux/ui/widget.rs @@ -169,6 +169,25 @@ impl Table { (cmp::min(step, len), len) } + + pub fn progress_percentage(&self, len: usize, page_size: usize) -> usize { + let step = self.selected().unwrap_or_default(); + let page_size = page_size as f64; + let len = len as f64; + + let lines = page_size + step.saturating_sub(page_size as usize) as f64; + let progress = (lines / len * 100_f64).ceil() as usize; + + if progress > 97 { + Self::map_range((0, progress), (0, 100), progress) + } else { + progress + } + } + + fn map_range(from: (usize, usize), to: (usize, usize), value: usize) -> usize { + to.0 + (value - from.0) * (to.1 - to.0) / (from.1 - from.0) + } } impl Widget for Table {