Radish alpha
r
rad:z39mP9rQAaGmERfUMPULfPUi473tY
Radicle terminal user interface
Radicle
Git
refactor(patch): Return review app state
Erik Kundt committed 1 year ago
commit 5bf495d04e7fee14d0ac873ccd70f7b4abe78103
parent 08f6f5d
2 files changed +15 -16
modified bin/commands/patch.rs
@@ -412,7 +412,7 @@ mod interface {
            } else {
                ReviewMode::Create
            };
-
            let selection = review::Tui::new(
+
            let response = review::Tui::new(
                mode,
                profile.storage.clone(),
                rid,
@@ -425,13 +425,14 @@ mod interface {
            .run()
            .await?;

-
            log::info!("Received selection from TUI: {:?}", selection);
+
            log::debug!("Received response from TUI: {:?}", response);

-
            if let Some(selection) = selection.as_ref() {
-
                match selection.action {
+
            if let Some(response) = response.as_ref() {
+
                match response.action {
                    ReviewAction::Comment => {
-
                        let hunk = selection
-
                            .hunk
+
                        let hunk = response
+
                            .state
+
                            .selected_hunk()
                            .ok_or_else(|| anyhow!("expected a selected hunk"))?;
                        let item = hunks
                            .get(hunk)
modified bin/commands/patch/review.rs
@@ -46,11 +46,10 @@ pub enum ReviewAction {
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Args(String);

-
#[derive(Clone, Debug, Eq, PartialEq)]
-
pub struct Selection {
+
#[derive(Clone, Debug)]
+
pub struct Response {
+
    pub state: AppState,
    pub action: ReviewAction,
-
    pub hunk: Option<usize>,
-
    pub args: Option<Args>,
}

pub enum ReviewMode {
@@ -93,7 +92,7 @@ impl Tui {
        }
    }

-
    pub async fn run(self) -> Result<Option<Selection>> {
+
    pub async fn run(self) -> Result<Option<Response>> {
        let viewport = Viewport::Fullscreen;

        let channel = Channel::default();
@@ -137,7 +136,7 @@ pub struct DiffViewState {
    cursor: Position,
}

-
#[derive(Clone)]
+
#[derive(Clone, Debug)]
pub struct AppState {
    /// The repository to operate on.
    _rid: RepoId,
@@ -516,7 +515,7 @@ impl<'a> Show<Message> for App<'a> {
}

impl<'a> store::Update<Message> for App<'a> {
-
    type Return = Selection;
+
    type Return = Response;

    fn update(&mut self, message: Message) -> Option<Exit<Self::Return>> {
        log::info!("Received message: {:?}", message);
@@ -549,10 +548,9 @@ impl<'a> store::Update<Message> for App<'a> {
                None
            }
            Message::Comment => Some(Exit {
-
                value: Some(Selection {
+
                value: Some(Response {
                    action: ReviewAction::Comment,
-
                    hunk: self.state.selected_hunk(),
-
                    args: None,
+
                    state: self.state.clone(),
                }),
            }),
            Message::Accept => {