Help page for view mode

This commit is contained in:
Ian Keane 2025-11-22 11:57:28 -05:00
parent 353d422730
commit 1d1778037c
2 changed files with 85 additions and 0 deletions

View file

@ -21,6 +21,7 @@ pub enum Screen {
NewEntry,
ReassignProject,
LogView,
LogViewHelp,
}
pub enum LogViewPeriod {
@ -97,6 +98,7 @@ impl App {
Screen::NewEntry => self.handle_new_entry_event(event),
Screen::ReassignProject => self.handle_reassign_project_event(event),
Screen::LogView => self.handle_log_view_event(event),
Screen::LogViewHelp => self.handle_log_view_help_event(event),
};
// If we switched screens, signal that we need to clear
@ -246,6 +248,19 @@ impl App {
Ok(false)
}
fn handle_log_view_help_event(&mut self, event: Event) -> anyhow::Result<bool> {
match event {
Event::Key(KeyEvent { code, .. }) => match code {
KeyCode::Esc | KeyCode::Char('q') | KeyCode::Char('?') => {
self.current_screen = Screen::LogView;
}
_ => {}
},
_ => {}
}
Ok(false)
}
fn handle_reassign_project_event(&mut self, event: Event) -> anyhow::Result<bool> {
match event {
Event::Key(KeyEvent {
@ -299,6 +314,9 @@ impl App {
self.log_view_selected = 0;
self.needs_clear = true;
}
KeyCode::Char('?') => {
self.current_screen = Screen::LogViewHelp;
}
KeyCode::Char('d') => {
self.log_view_period = LogViewPeriod::Day;
self.log_view_scroll = 0;

View file

@ -22,6 +22,7 @@ pub fn render(frame: &mut Frame, app: &App) {
Screen::NewEntry => render_new_entry(frame, app),
Screen::ReassignProject => render_reassign_project(frame, app),
Screen::LogView => render_log_view(frame, app),
Screen::LogViewHelp => render_log_view_help(frame, app),
}
}
@ -568,6 +569,7 @@ fn render_log_view(frame: &mut Frame, app: &App) {
("e", "edit"),
("x", "delete"),
("c", "copy"),
("?", "help"),
("q/ESC", "back"),
];
@ -586,3 +588,68 @@ fn render_log_view(frame: &mut Frame, app: &App) {
frame.render_widget(command_bar, chunks[1]);
}
fn render_log_view_help(frame: &mut Frame, _app: &App) {
let width = frame.size().width.saturating_sub(4).min(60);
let area = centered_rect(width, frame.size().height.saturating_sub(2), frame.size());
frame.render_widget(Clear, area);
let help_text = vec![
"Watson Log Viewer Help",
"",
"This view displays your Watson time tracking logs with various options",
"for viewing and managing your tracked time.",
"",
"Time Periods:",
"- d: Switch to Day view (current day)",
"- w: Switch to Week view (current week)",
"- m: Switch to Month view (current month)",
"",
"Grouping:",
"- g: Toggle between grouping by Date or by Project",
" - By Date: Shows all entries chronologically",
" - By Project: Groups entries by project within each date",
"",
"Navigation:",
"- j/k or ↑/↓: Select entries",
"- PageUp/PageDown: Jump 10 entries",
"",
"Actions:",
"- e: Edit the selected entry (opens Watson's editor)",
"- x: Delete the selected entry (no confirmation)",
"- c: Copy all visible log entries to clipboard",
"",
"Other:",
"- ?: Show this help",
"- q or ESC: Return to main screen",
];
let text = help_text.join("\n");
let block = Block::default()
.title("Log View Help")
.borders(Borders::ALL)
.style(Style::default().fg(Color::White));
let paragraph = Paragraph::new(text)
.block(block)
.style(Style::default().fg(Color::White))
.wrap(ratatui::widgets::Wrap { trim: true });
frame.render_widget(paragraph, area);
// Render command bar
let bar_area = Rect::new(
0,
frame.size().height.saturating_sub(1),
frame.size().width,
1,
);
let command_bar = Paragraph::new(" q/ESC/? (back to log view)")
.style(Style::default().fg(Color::White))
.alignment(Alignment::Left);
frame.render_widget(command_bar, bar_area);
}