Radish alpha
r
Radicle terminal user interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
patch: Cleanup base and props usage
Erik Kundt committed 2 years ago
commit 2c9a9275457d9540e08fb47fb2091c044195c5ef
parent 6b7f94611890ae44421ab11ac51bec0c1977a961
1 file changed +38 -23
modified bin/commands/patch/select/ui.rs
@@ -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;