use crate::app::{AppState, Action};
use crate::input::InputEvent;
use crate::errors::ComponentError;
use crossterm::event::KeyCode::*;
pub fn handle_rebase_todo(event: InputEvent, state: &AppState) -> Result<Option<Action>, ComponentError> {
if let InputEvent::Key(key) = &event {
if key.kind == crossterm::event::KeyEventKind::Press {
if state.rebase_todo_editing {
return Ok(match key.code {
Esc => Some(Action::RebaseTodoRewriteLine(state.rebase_todo_selected, state.rebase_todo_edit_buffer.clone())),
Enter => Some(Action::RebaseTodoRewriteLine(state.rebase_todo_selected, state.rebase_todo_edit_buffer.clone())),
Backspace => {
let mut buf = state.rebase_todo_edit_buffer.clone();
buf.pop();
Some(Action::RebaseTodoEditBuffer(buf))
}
Char(c) => {
let mut buf = state.rebase_todo_edit_buffer.clone();
buf.push(c);
Some(Action::RebaseTodoEditBuffer(buf))
}
_ => None,
});
}
return Ok(match key.code {
Esc => Some(Action::HideRebaseTodo),
Up | Char('k') => Some(Action::RebaseTodoUp),
Down | Char('j') => Some(Action::RebaseTodoDown),
Enter => Some(Action::StartRebaseTodoEdit(
state.rebase_todo_selected,
state.rebase_todo
.get(state.rebase_todo_selected)
.cloned()
.unwrap_or_default(),
)),
Char('c') => Some(Action::RebaseContinue),
Char('a') => Some(Action::RebaseAbort),
Char('x') => Some(Action::RebaseSkip),
Char('o') => Some(Action::OpenRebaseTodoInEditor),
Char('p') => Some(Action::RebaseTodoToggleKind(state.rebase_todo_selected, "pick".into())),
Char('e') => Some(Action::RebaseTodoToggleKind(state.rebase_todo_selected, "edit".into())),
Char('s') => Some(Action::RebaseTodoToggleKind(state.rebase_todo_selected, "squash".into())),
Char('f') => Some(Action::RebaseTodoToggleKind(state.rebase_todo_selected, "fixup".into())),
Char('d') => Some(Action::RebaseTodoToggleKind(state.rebase_todo_selected, "drop".into())),
Char('w') => Some(Action::RebaseTodoToggleKind(state.rebase_todo_selected, "reword".into())),
Char('S') => Some(Action::SaveRebaseTodo),
_ => None,
});
}
}
Ok(None)
}
pub fn handle_rebase_builder(event: InputEvent, state: &AppState) -> Result<Option<Action>, ComponentError> {
if let InputEvent::Key(key) = &event {
if key.kind == crossterm::event::KeyEventKind::Press {
return Ok(match key.code {
Esc => Some(Action::RebaseCancel),
Enter => Some(Action::RebaseSaveAndRun),
Char('j') | Down => Some(Action::RebaseNext),
Char('k') | Up => Some(Action::RebasePrev),
Char('[') => Some(Action::RebaseMoveUp),
Char(']') => Some(Action::RebaseMoveDown),
Left | Right => Some(Action::RebaseCycleAction),
Char('p') => Some(Action::RebaseSetAction(crate::app::rebase::RebaseAction::Pick)),
Char('r') => Some(Action::RebaseSetAction(crate::app::rebase::RebaseAction::Reword)),
Char('e') => Some(Action::RebaseSetAction(crate::app::rebase::RebaseAction::Edit)),
Char('s') => Some(Action::RebaseSetAction(crate::app::rebase::RebaseAction::Squash)),
Char('f') => Some(Action::RebaseSetAction(crate::app::rebase::RebaseAction::Fixup)),
Char('d') => Some(Action::RebaseSetAction(crate::app::rebase::RebaseAction::Drop)),
Char('A') => Some(Action::RebaseAbortFromBuilder),
Char('R') => Some(Action::RebaseToggleUseRoot), Char('b') => state
.rebase_session
.entries
.get(state.rebase_session.cursor)
.map(|entry| Action::RebaseSetBase(entry.hash.clone())),
_ => None,
});
}
}
Ok(None)
}
pub fn handle_rebase_recovery(event: InputEvent, _state: &AppState) -> Result<Option<Action>, ComponentError> {
if let InputEvent::Key(key) = &event {
if key.kind == crossterm::event::KeyEventKind::Press {
return Ok(match key.code {
Esc => Some(Action::HideRebaseRecovery),
Char('c') => Some(Action::RebaseContinueInterrupted),
Char('a') => Some(Action::RebaseAbortInterrupted),
_ => None,
});
}
}
Ok(None)
}
pub fn handle_reword_input(_event: InputEvent, _state: &AppState) -> Result<Option<Action>, ComponentError> {
Ok(None)
}
pub fn handle_edit_input(_event: InputEvent, _state: &AppState) -> Result<Option<Action>, ComponentError> {
Ok(None)
}