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 {