Radish alpha
r
rad:z39mP9rQAaGmERfUMPULfPUi473tY
Radicle terminal user interface
Radicle
Git
Fix browser selection on search update
Merged did:key:z6MkswQE...2C1V opened 1 year ago
7 files changed +23 -7 a16c82f2 fe3580fb
modified bin/commands/inbox/select.rs
@@ -238,6 +238,12 @@ impl store::State<Selection> for State {
                self.browser.filter = NotificationItemFilter::from_str(&self.browser.search.read())
                    .unwrap_or_default();

+
                if let Some(selected) = self.browser.selected {
+
                    if selected > self.browser.notifications().len() {
+
                        self.browser.selected = Some(0);
+
                    }
+
                }
+

                None
            }
            Message::ApplySearch => {
modified bin/commands/inbox/select/ui.rs
@@ -164,6 +164,7 @@ impl<'a: 'static> Widget for Browser<'a> {
                            TableProps::default()
                                .columns(props.columns)
                                .items(state.browser.notifications())
+
                                .selected(state.browser.selected)
                                .footer(!state.browser.show_search)
                                .page_size(state.browser.page_size)
                                .cutoff(props.cutoff, props.cutoff_after)
modified bin/commands/issue/select.rs
@@ -155,6 +155,12 @@ impl store::State<Selection> for State {
                self.browser.filter =
                    IssueItemFilter::from_str(&self.browser.search.read()).unwrap_or_default();

+
                if let Some(selected) = self.browser.selected {
+
                    if selected > self.browser.issues().len() {
+
                        self.browser.selected = Some(0);
+
                    }
+
                }
+

                None
            }
            Message::ApplySearch => {
modified bin/commands/issue/select/ui.rs
@@ -178,6 +178,7 @@ impl<'a: 'static> Widget for Browser<'a> {
                            TableProps::default()
                                .columns(props.columns)
                                .items(state.browser.issues())
+
                                .selected(state.browser.selected)
                                .footer(!state.browser.show_search)
                                .page_size(state.browser.page_size)
                                .cutoff(props.cutoff, props.cutoff_after)
modified bin/commands/patch/select.rs
@@ -156,6 +156,12 @@ impl store::State<Selection> for State {
                self.browser.filter =
                    PatchItemFilter::from_str(&self.browser.search.read()).unwrap_or_default();

+
                if let Some(selected) = self.browser.selected {
+
                    if selected > self.browser.patches().len() {
+
                        self.browser.selected = Some(0);
+
                    }
+
                }
+

                None
            }
            Message::ApplySearch => {
modified bin/commands/patch/select/ui.rs
@@ -178,6 +178,7 @@ impl<'a: 'static> Widget for Browser<'a> {
                            TableProps::default()
                                .columns(props.columns)
                                .items(state.browser.patches())
+
                                .selected(state.browser.selected)
                                .footer(!state.browser.show_search)
                                .page_size(state.browser.page_size)
                                .cutoff(props.cutoff, props.cutoff_after)
modified src/ui/widget/list.rs
@@ -197,8 +197,6 @@ where
            _ => {}
        }

-
        self.props.selected = self.state.selected();
-

        if let Some(on_event) = self.base.on_event {
            (on_event)(self);
        }
@@ -208,11 +206,8 @@ where
        self.props =
            TableProps::from_callback(self.base.on_update, state).unwrap_or(self.props.clone());

-
        // TODO: Move to state reducer
-
        if let Some(selected) = self.state.selected() {
-
            if selected > self.props.items.len() {
-
                self.begin();
-
            }
+
        if self.props.selected != self.state.selected() {
+
            self.state.select(self.props.selected);
        }
    }