patch: Cleanup base and props usage

This commit is contained in:
Erik Kundt
2024-04-23 17:37:36 +02:00
parent 6b7f946118
commit 2c9a927545
+38 -23
View File
@@ -122,10 +122,12 @@ impl<'a> From<&State> for BrowsePageProps<'a> {
impl<'a: 'static> Properties for BrowsePageProps<'a> {}
pub struct BrowsePage<'a: 'static, B> {
pub struct BrowsePage<'a, B> {
/// Internal base
base: BaseView<State, Action, BrowsePageProps<'a>>,
/// Patches widget
base: BaseView<State, Action>,
/// Internal props
props: BrowsePageProps<'a>,
/// Notifications widget
patches: BoxedWidget<B>,
/// Search widget
search: BoxedWidget<B>,
@@ -143,10 +145,10 @@ where
Self {
base: BaseView {
action_tx: action_tx.clone(),
props: BrowsePageProps::from(state),
on_update: None,
on_event: None,
},
props: props.clone(),
patches: Container::new(state, action_tx.clone())
.header(
Header::new(state, action_tx.clone())
@@ -195,6 +197,10 @@ where
}
}
fn base_mut(&mut self) -> &mut BaseView<State, Action> {
&mut self.base
}
fn on_update(mut self, callback: UpdateCallback<State>) -> Self {
self.base.on_update = Some(callback);
self
@@ -206,7 +212,7 @@ where
}
fn update(&mut self, state: &State) {
self.base.props = BrowsePageProps::from_callback(self.base.on_update, state)
self.props = BrowsePageProps::from_callback(self.base.on_update, state)
.unwrap_or(BrowsePageProps::from(state));
self.patches.update(state);
@@ -215,7 +221,7 @@ where
}
fn handle_key_event(&mut self, key: Key) {
if self.base.props.show_search {
if self.props.show_search {
self.search.handle_key_event(key);
} else {
match key {
@@ -229,15 +235,14 @@ where
let _ = self.base.action_tx.send(Action::OpenSearch);
}
Key::Char('\n') => {
let operation = match self.base.props.mode {
let operation = match self.props.mode {
Mode::Operation => Some(PatchOperation::Show.to_string()),
Mode::Id => None,
};
self.base
.props
self.props
.selected
.and_then(|selected| self.base.props.patches.get(selected))
.and_then(|selected| self.props.patches.get(selected))
.and_then(|patch| {
self.base
.action_tx
@@ -252,10 +257,9 @@ where
});
}
Key::Char('c') => {
self.base
.props
self.props
.selected
.and_then(|selected| self.base.props.patches.get(selected))
.and_then(|selected| self.props.patches.get(selected))
.and_then(|patch| {
self.base
.action_tx
@@ -270,10 +274,9 @@ where
});
}
Key::Char('d') => {
self.base
.props
self.props
.selected
.and_then(|selected| self.base.props.patches.get(selected))
.and_then(|selected| self.props.patches.get(selected))
.and_then(|patch| {
self.base
.action_tx
@@ -389,7 +392,7 @@ where
fn render(&self, frame: &mut ratatui::Frame, area: Rect, props: Option<Box<dyn Any>>) {
let props = props
.and_then(BrowsePageProps::from_boxed_any)
.unwrap_or(self.base.props.clone());
.unwrap_or(self.props.clone());
let page_size = area.height.saturating_sub(6) as usize;
@@ -444,7 +447,9 @@ impl Properties for SearchProps {}
pub struct Search<B: Backend> {
/// Internal base
base: BaseView<State, Action, SearchProps>,
base: BaseView<State, Action>,
/// Internal props
_props: SearchProps,
/// Search input field
input: BoxedWidget<B>,
}
@@ -475,14 +480,18 @@ impl<B: Backend> View<State, Action> for Search<B> {
Self {
base: BaseView {
action_tx: action_tx.clone(),
props: SearchProps {},
on_update: None,
on_event: None,
},
_props: SearchProps {},
input,
}
}
fn base_mut(&mut self) -> &mut BaseView<State, Action> {
&mut self.base
}
fn on_update(mut self, callback: UpdateCallback<State>) -> Self {
self.base.on_update = Some(callback);
self
@@ -551,7 +560,9 @@ where
B: Backend,
{
/// Internal base
base: BaseView<State, Action, HelpPageProps<'a>>,
base: BaseView<State, Action>,
/// Internal props
props: HelpPageProps<'a>,
/// Content widget
content: BoxedWidget<B>,
/// Shortcut widget
@@ -569,10 +580,10 @@ where
Self {
base: BaseView {
action_tx: action_tx.clone(),
props: HelpPageProps::from(state),
on_update: None,
on_event: None,
},
props: HelpPageProps::from(state),
content: Container::new(state, action_tx.clone())
.header(
Header::new(state, action_tx.clone())
@@ -635,6 +646,10 @@ where
}
}
fn base_mut(&mut self) -> &mut BaseView<State, Action> {
&mut self.base
}
fn on_update(mut self, callback: UpdateCallback<State>) -> Self {
self.base.on_update = Some(callback);
self
@@ -646,7 +661,7 @@ where
}
fn update(&mut self, state: &State) {
self.base.props = HelpPageProps::from_callback(self.base.on_update, state)
self.props = HelpPageProps::from_callback(self.base.on_update, state)
.unwrap_or(HelpPageProps::from(state));
self.content.update(state);
@@ -674,7 +689,7 @@ where
fn render(&self, frame: &mut ratatui::Frame, area: Rect, props: Option<Box<dyn Any>>) {
let props = props
.and_then(HelpPageProps::from_boxed_any)
.unwrap_or(self.base.props.clone());
.unwrap_or(self.props.clone());
let page_size = area.height.saturating_sub(6) as usize;