refactor(patch): Return review app state

This commit is contained in:
Erik Kundt
2025-02-11 16:07:49 +01:00
parent 08f6f5d06b
commit 5bf495d04e
2 changed files with 15 additions and 16 deletions
+7 -6
View File
@@ -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)
+8 -10
View File
@@ -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 => {