initial commit
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I4a6b498153eccd5407510dd541b7f4816a6a6964
This commit is contained in:
commit
6a73d11c4b
124 changed files with 34856 additions and 0 deletions
63
crates/pinakes-tui/src/ui/tasks.rs
Normal file
63
crates/pinakes-tui/src/ui/tasks.rs
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
use ratatui::Frame;
|
||||
use ratatui::layout::Rect;
|
||||
use ratatui::style::{Color, Modifier, Style};
|
||||
use ratatui::text::{Line, Span};
|
||||
use ratatui::widgets::{Block, Borders, List, ListItem};
|
||||
|
||||
use crate::app::AppState;
|
||||
|
||||
pub fn render(f: &mut Frame, state: &AppState, area: Rect) {
|
||||
let items: Vec<ListItem> = if state.scheduled_tasks.is_empty() {
|
||||
vec![ListItem::new(Line::from(Span::styled(
|
||||
" No scheduled tasks. Press T to refresh.",
|
||||
Style::default().fg(Color::DarkGray),
|
||||
)))]
|
||||
} else {
|
||||
state
|
||||
.scheduled_tasks
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, task)| {
|
||||
let is_selected = state.scheduled_tasks_selected == Some(i);
|
||||
let enabled_marker = if task.enabled { "[ON] " } else { "[OFF]" };
|
||||
let enabled_color = if task.enabled {
|
||||
Color::Green
|
||||
} else {
|
||||
Color::DarkGray
|
||||
};
|
||||
|
||||
let last_run = task
|
||||
.last_run
|
||||
.as_deref()
|
||||
.map(super::format_date)
|
||||
.unwrap_or("-");
|
||||
let next_run = task
|
||||
.next_run
|
||||
.as_deref()
|
||||
.map(super::format_date)
|
||||
.unwrap_or("-");
|
||||
let status = task.last_status.as_deref().unwrap_or("-");
|
||||
|
||||
let text = format!(
|
||||
" {enabled_marker} {:<20} {:<16} Last: {:<12} Next: {:<12} Status: {}",
|
||||
task.name, task.schedule, last_run, next_run, status
|
||||
);
|
||||
|
||||
let style = if is_selected {
|
||||
Style::default()
|
||||
.fg(Color::Cyan)
|
||||
.add_modifier(Modifier::BOLD)
|
||||
} else {
|
||||
Style::default().fg(enabled_color)
|
||||
};
|
||||
|
||||
ListItem::new(Line::from(Span::styled(text, style)))
|
||||
})
|
||||
.collect()
|
||||
};
|
||||
|
||||
let title = format!(" Scheduled Tasks ({}) ", state.scheduled_tasks.len());
|
||||
let list = List::new(items).block(Block::default().borders(Borders::ALL).title(title));
|
||||
|
||||
f.render_widget(list, area);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue