use ratatui::widgets::TableState;
use super::{events::custom::FlowrsEvent, worker::WorkerMessage};
pub mod config;
pub mod dagruns;
pub mod dags;
pub mod filter;
pub mod logs;
pub mod popup;
pub mod taskinstances;
pub trait Model {
fn update(&mut self, event: &FlowrsEvent) -> (Option<FlowrsEvent>, Vec<WorkerMessage>);
}
#[derive(Clone)]
pub struct StatefulTable<T> {
pub state: TableState,
pub items: Vec<T>,
}
impl<T> StatefulTable<T> {
pub fn new(items: Vec<T>) -> StatefulTable<T> {
StatefulTable {
state: TableState::default(),
items,
}
}
pub fn next(&mut self) {
let i = match self.state.selected() {
Some(i) => {
if i >= self.items.len() - 1 {
0
} else {
i + 1
}
}
None => 0,
};
self.state.select(Some(i));
}
pub fn previous(&mut self) {
let i = match self.state.selected() {
Some(i) => {
if i == 0 {
self.items.len() - 1
} else {
i - 1
}
}
None => 0,
};
self.state.select(Some(i));
}
}