mirror of
https://seed.radicle.dev/rad:z39mP9rQAaGmERfUMPULfPUi473tY.git
synced 2026-11-11 06:00:43 +08:00
patch: Cleanup base and props usage
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user