use ratatui::layout::Constraint;
use ratzgo::{
core::*,
widget::{MountPoint, TableState},
};
use crate::ui::{
HelpMsg, Message,
widgets::{keymap, keymap_at},
};
#[derive(Debug, Default)]
pub struct State {
pub page: Option<&'static str>,
pub state: TableState,
pub mount_point: MountPoint<Message>,
}
pub fn view<'a>(
State {
page,
state,
mount_point,
}: &'a mut State,
) -> Element<'a, Message> {
if let Some(page) = page {
mount_point.mount(keymap(state, page).into().map(Into::into), |area| {
area.centered(Constraint::Percentage(50), Constraint::Percentage(70))
});
}
mount_point.view().into()
}
pub fn update(state: &mut State, msg: HelpMsg) {
match msg {
HelpMsg::Page(page) => {
state.page = Some(page);
state.state.reset();
}
HelpMsg::Scroll(action) => {
if let Some(page) = state.page {
state.state.scroll_vertical(action, keymap_at(page).len());
}
}
HelpMsg::Close => {
state.page.take();
}
}
}