use crate::{
ui::{Key, KeyModifiers},
EscapePolicy, InnerAction,
};
use super::config::SortConfig;
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum SortPromptAction {
MoveUp,
MoveDown,
PageUp,
PageDown,
MoveToStart,
MoveToEnd,
ToggleOption,
PressEscape,
Submit,
}
impl InnerAction for SortPromptAction {
const ESCAPE_POLICY: EscapePolicy = EscapePolicy::IgnoreEscape;
type Config = SortConfig;
fn from_key(key: Key, config: &SortConfig) -> Option<Self> {
if config.vim_mode {
let action = match key {
Key::Char('k', KeyModifiers::NONE) => Some(Self::MoveUp),
Key::Char('j', KeyModifiers::NONE) => Some(Self::MoveDown),
_ => None,
};
if action.is_some() {
return action;
}
}
let action = match key {
Key::Up(KeyModifiers::NONE) | Key::Char('p', KeyModifiers::CONTROL) => Self::MoveUp,
Key::Down(KeyModifiers::NONE) | Key::Char('n', KeyModifiers::CONTROL) => Self::MoveDown,
Key::PageUp(_) => Self::PageUp,
Key::Home => Self::MoveToStart,
Key::PageDown(_) => Self::PageDown,
Key::End => Self::MoveToEnd,
Key::Char(' ', KeyModifiers::NONE) | Key::Toggle => Self::ToggleOption,
Key::Escape => Self::PressEscape,
Key::Enter
| Key::Char('\n', KeyModifiers::NONE)
| Key::Char('j', KeyModifiers::CONTROL) => Self::Submit,
_ => return None,
};
Some(action)
}
}