summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSebastian Thiel <sthiel@thoughtworks.com>2019-06-05 12:32:13 +0530
committerSebastian Thiel <sthiel@thoughtworks.com>2019-06-05 12:32:13 +0530
commit9a5ffd238470b511c4818e917f55ba4dafaf212c (patch)
tree261b2ebd4d52b12305ce4c9ae3ceeddbf3322d45 /src
parentc243521ea7466e9584ff0455f409b2a4160c4fb4 (diff)
add ReactFooter
Diffstat (limited to 'src')
-rw-r--r--src/interactive/widgets/footer.rs29
-rw-r--r--src/interactive/widgets/main.rs22
2 files changed, 34 insertions, 17 deletions
diff --git a/src/interactive/widgets/footer.rs b/src/interactive/widgets/footer.rs
index 2b6bc64..4303626 100644
--- a/src/interactive/widgets/footer.rs
+++ b/src/interactive/widgets/footer.rs
@@ -1,4 +1,5 @@
-use crate::ByteFormat;
+use crate::{interactive::react::Component, ByteFormat};
+use std::borrow::Borrow;
use tui::widgets::{Paragraph, Text};
use tui::{
buffer::Buffer,
@@ -8,31 +9,41 @@ use tui::{
widgets::Widget,
};
-pub struct Footer {
+pub struct ReactFooter;
+
+pub struct ReactFooterProps {
pub total_bytes: Option<u64>,
pub entries_traversed: u64,
pub format: ByteFormat,
pub message: Option<String>,
}
-impl Widget for Footer {
- fn draw(&mut self, area: Rect, buf: &mut Buffer) {
- assert_eq!(area.height, 1, "The footer must be a line");
+impl Component for ReactFooter {
+ type Props = ReactFooterProps;
+
+ fn render(&mut self, props: impl Borrow<Self::Props>, area: Rect, buf: &mut Buffer) {
+ let ReactFooterProps {
+ total_bytes,
+ entries_traversed,
+ format,
+ message,
+ } = props.borrow();
+
let bg_color = Color::White;
let text_color = Color::Black;
let lines = [
Some(Text::Raw(
format!(
" Total disk usage: {} Entries: {} ",
- match self.total_bytes {
- Some(b) => format!("{}", self.format.display(b)).to_owned(),
+ match total_bytes {
+ Some(b) => format!("{}", format.display(*b)).to_owned(),
None => "-".to_owned(),
},
- self.entries_traversed,
+ entries_traversed,
)
.into(),
)),
- self.message.as_ref().map(|m| {
+ message.as_ref().map(|m| {
Text::Styled(
m.into(),
Style {
diff --git a/src/interactive/widgets/main.rs b/src/interactive/widgets/main.rs
index bcb9a39..977e79f 100644
--- a/src/interactive/widgets/main.rs
+++ b/src/interactive/widgets/main.rs
@@ -1,6 +1,9 @@
use crate::interactive::{
react::Component,
- widgets::{Entries, Footer, Header, ListState, ReactHelpPane, ReactHelpPaneProps},
+ widgets::{
+ Entries, Header, ListState, ReactFooter, ReactFooterProps, ReactHelpPane,
+ ReactHelpPaneProps,
+ },
FocussedPane, TerminalApp,
};
use dua::traverse::Traversal;
@@ -104,12 +107,15 @@ impl<'a, 'b> Component for ReactMainWindow {
pane.render(props, help_area, buf);
}
- Footer {
- total_bytes: *total_bytes,
- entries_traversed: *entries_traversed,
- format: display.byte_format,
- message: state.message.clone(),
- }
- .draw(footer_area, buf);
+ ReactFooter.render(
+ ReactFooterProps {
+ total_bytes: *total_bytes,
+ entries_traversed: *entries_traversed,
+ format: display.byte_format,
+ message: state.message.clone(),
+ },
+ footer_area,
+ buf,
+ );
}
}