Radish alpha
r
rad:z39mP9rQAaGmERfUMPULfPUi473tY
Radicle terminal user interface
Radicle
Git
issue/list: Store state and fix issue pre-selection
Erik Kundt committed 3 months ago
commit ae40ca27a9edeb01c3df34f15709c4f38836c9a5
parent c06a8c2
3 files changed +37 -10
modified bin/commands/issue.rs
@@ -270,19 +270,34 @@ pub async fn run(options: Options, ctx: impl Context) -> anyhow::Result<()> {
                                    }
                                }
                            }
-
                            IssueOperation::Solve { id } => {
+
                            IssueOperation::Solve { id, search } => {
+
                                state = PreviousState {
+
                                    issue_id: Some(id),
+
                                    comment_id: None,
+
                                    search: Some(search),
+
                                };
                                terminal::run_rad(
                                    Some("issue"),
                                    &["state".into(), id.to_string().into(), "--solved".into()],
                                )?;
                            }
-
                            IssueOperation::Close { id } => {
+
                            IssueOperation::Close { id, search } => {
+
                                state = PreviousState {
+
                                    issue_id: Some(id),
+
                                    comment_id: None,
+
                                    search: Some(search),
+
                                };
                                terminal::run_rad(
                                    Some("issue"),
                                    &["state".into(), id.to_string().into(), "--closed".into()],
                                )?;
                            }
-
                            IssueOperation::Reopen { id } => {
+
                            IssueOperation::Reopen { id, search } => {
+
                                state = PreviousState {
+
                                    issue_id: Some(id),
+
                                    comment_id: None,
+
                                    search: Some(search),
+
                                };
                                terminal::run_rad(
                                    Some("issue"),
                                    &["state".into(), id.to_string().into(), "--open".into()],
modified bin/commands/issue/common.rs
@@ -16,12 +16,15 @@ pub enum IssueOperation {
    },
    Close {
        id: IssueId,
+
        search: String,
    },
    Solve {
        id: IssueId,
+
        search: String,
    },
    Reopen {
        id: IssueId,
+
        search: String,
    },
    Comment {
        id: IssueId,
modified bin/commands/issue/list.rs
@@ -295,17 +295,17 @@ impl TryFrom<(&Context, &TerminalInfo)> for App {
            .collect();

        let browser = state::Browser {
-
            issues: TableState::new(
+
            issues: TableState::new(Some(
                context
                    .issue
-
                    .map(|id| {
+
                    .and_then(|id| {
                        issues
                            .iter()
                            .filter(|item| filter.matches(item))
                            .position(|item| item.id() == id)
                    })
-
                    .unwrap_or(issues.first().map(|_| 0)),
-
            ),
+
                    .unwrap_or(0),
+
            )),
            search: BufferedValue::new(TextEditState {
                text: search.read().clone(),
                cursor: search.read().len(),
@@ -657,19 +657,28 @@ impl App {

            if ui.has_input(|key| key == Key::Char('s')) {
                ui.send_message(Message::Exit {
-
                    operation: Some(IssueOperation::Solve { id: issue.id }),
+
                    operation: Some(IssueOperation::Solve {
+
                        id: issue.id,
+
                        search: browser.search.read().text,
+
                    }),
                });
            }

            if ui.has_input(|key| key == Key::Char('l')) {
                ui.send_message(Message::Exit {
-
                    operation: Some(IssueOperation::Close { id: issue.id }),
+
                    operation: Some(IssueOperation::Close {
+
                        id: issue.id,
+
                        search: browser.search.read().text,
+
                    }),
                });
            }

            if ui.has_input(|key| key == Key::Char('o')) {
                ui.send_message(Message::Exit {
-
                    operation: Some(IssueOperation::Reopen { id: issue.id }),
+
                    operation: Some(IssueOperation::Reopen {
+
                        id: issue.id,
+
                        search: browser.search.read().text,
+
                    }),
                });
            }
        }