use super::base::{try_handle_shared, SharedHandleResult};
use crate::input::handler::{DeferredAction, InputContext, InputResult};
use crate::view::popup::Popup;
use crossterm::event::{KeyCode, KeyEvent};
pub fn handle_action_input(
event: &KeyEvent,
popup: &mut Popup,
ctx: &mut InputContext,
) -> InputResult {
match try_handle_shared(event, Some(popup), ctx) {
SharedHandleResult::Handled(result) => return result,
SharedHandleResult::NotHandled => {}
}
match event.code {
KeyCode::Enter => {
ctx.defer(DeferredAction::ConfirmPopup);
InputResult::Consumed
}
KeyCode::Up if event.modifiers.is_empty() => {
popup.select_prev();
InputResult::Consumed
}
KeyCode::Down if event.modifiers.is_empty() => {
popup.select_next();
InputResult::Consumed
}
KeyCode::Tab if event.modifiers.is_empty() => {
popup.select_next();
InputResult::Consumed
}
KeyCode::BackTab => {
popup.select_prev();
InputResult::Consumed
}
_ => InputResult::Consumed,
}
}