use crate::core::types::state::ScrollState;
#[derive(Debug, Clone)]
pub struct PanelState {
pub scroll: ScrollState,
pub sort_column: Option<String>,
pub sort_ascending: bool,
pub active_filter: Option<String>,
pub hovered_action: Option<String>,
pub hovered_column: Option<String>,
}
impl Default for PanelState {
fn default() -> Self {
Self {
scroll: ScrollState::default(),
sort_column: None,
sort_ascending: true,
active_filter: None,
hovered_action: None,
hovered_column: None,
}
}
}
impl PanelState {
pub fn toggle_sort(&mut self, column_id: impl Into<String>) {
let id = column_id.into();
if self.sort_column.as_deref() == Some(&id) {
self.sort_ascending = !self.sort_ascending;
} else {
self.sort_column = Some(id);
self.sort_ascending = true;
}
}
pub fn set_filter(&mut self, filter: Option<impl Into<String>>) {
self.active_filter = filter.map(Into::into);
}
}