use crate::command::chat::app::{Action, ChatApp, CursorDirection};
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
pub fn handle_browse_mode(app: &mut ChatApp, key: KeyEvent) {
let msg_count = app.state.session.messages.len();
if msg_count == 0 {
app.update(Action::ExitToChat);
app.ui.msg_lines_cache = None;
return;
}
let action = match key.code {
KeyCode::Esc => {
if !app.ui.browse_filter.is_empty() || app.ui.browse_role_filter.is_some() {
Action::BrowseClearFilter
} else {
Action::ExitToChat
}
}
KeyCode::Up => Action::BrowseNavigate(CursorDirection::Up),
KeyCode::Down => Action::BrowseNavigate(CursorDirection::Down),
KeyCode::PageUp => Action::BrowseFineScroll(CursorDirection::Up),
KeyCode::PageDown => Action::BrowseFineScroll(CursorDirection::Down),
KeyCode::Enter | KeyCode::Char('y') => Action::BrowseCopyMessage,
KeyCode::Tab => Action::BrowseToggleRole,
KeyCode::Backspace => Action::BrowseDeleteChar,
KeyCode::Char(c) => {
if key.modifiers.contains(KeyModifiers::CONTROL) {
return;
}
match c {
'j' => Action::BrowseNavigate(CursorDirection::Down),
'k' => Action::BrowseNavigate(CursorDirection::Up),
_ => Action::BrowseInputChar(c),
}
}
_ => return,
};
app.update(action);
if matches!(key.code, KeyCode::Esc)
&& app.ui.browse_filter.is_empty()
&& app.ui.browse_role_filter.is_none()
{
app.ui.msg_lines_cache = None;
}
}