use crossterm::event::{Event, KeyCode, KeyEvent};
use ratatui::widgets::ScrollbarState;
use super::app::{App, NewsPage, Page};
pub fn state(app: &mut App, event: Event) {
if let Event::Key(event) = event {
key_event(app, event)
}
}
fn key_event(app: &mut App, event: KeyEvent) {
match event.code {
KeyCode::Char('q') => app.online = false,
KeyCode::Tab | KeyCode::Char('l') => {
if let Page::Home(home) = &mut app.page {
home.selected_news = 0;
home.selected_index += 1;
if home.selected_index > app.categories.len() - 1 {
home.selected_index = 0
}
}
}
KeyCode::BackTab | KeyCode::Char('h') => {
if let Page::Home(home) = &mut app.page {
home.selected_news = 0;
if home.selected_index == 0 {
home.selected_index = app.categories.len() - 1
} else {
home.selected_index -= 1
}
}
}
KeyCode::Down | KeyCode::Char('j') => {
if let Page::Home(home) = &mut app.page {
home.selected_news += 1;
if home.selected_news
> app.categories.get(home.selected_index).unwrap().news.len() - 1
{
home.selected_news = 0;
}
} else if let Page::News(news) = &mut app.page {
news.scroll_position = news.scroll_position.saturating_add(1);
news.scroll_state = news.scroll_state.position(news.scroll_position);
}
}
KeyCode::Up | KeyCode::Char('k') => {
if let Page::Home(home) = &mut app.page {
if home.selected_news == 0 {
home.selected_news =
app.categories.get(home.selected_index).unwrap().news.len() - 1
} else {
home.selected_news -= 1
}
} else if let Page::News(news) = &mut app.page {
news.scroll_position = news.scroll_position.saturating_sub(1);
news.scroll_state = news.scroll_state.position(news.scroll_position);
}
}
KeyCode::Enter => {
if let Page::Home(home) = &mut app.page {
let news = app.categories[home.selected_index].news[home.selected_news].clone();
app.categories[home.selected_index].news[home.selected_news].seen = true;
app.page = Page::News(NewsPage {
news,
scroll_position: 0,
scroll_state: ScrollbarState::default(),
home_page: home.clone(),
});
}
}
KeyCode::Esc => {
if let Page::News(news_page) = &mut app.page {
app.page = Page::Home(news_page.home_page.clone());
}
}
_ => {}
}
}