Help page for view mode
This commit is contained in:
parent
353d422730
commit
1d1778037c
2 changed files with 85 additions and 0 deletions
18
src/app.rs
18
src/app.rs
|
|
@ -21,6 +21,7 @@ pub enum Screen {
|
||||||
NewEntry,
|
NewEntry,
|
||||||
ReassignProject,
|
ReassignProject,
|
||||||
LogView,
|
LogView,
|
||||||
|
LogViewHelp,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum LogViewPeriod {
|
pub enum LogViewPeriod {
|
||||||
|
|
@ -97,6 +98,7 @@ impl App {
|
||||||
Screen::NewEntry => self.handle_new_entry_event(event),
|
Screen::NewEntry => self.handle_new_entry_event(event),
|
||||||
Screen::ReassignProject => self.handle_reassign_project_event(event),
|
Screen::ReassignProject => self.handle_reassign_project_event(event),
|
||||||
Screen::LogView => self.handle_log_view_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
|
// If we switched screens, signal that we need to clear
|
||||||
|
|
@ -246,6 +248,19 @@ impl App {
|
||||||
Ok(false)
|
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> {
|
fn handle_reassign_project_event(&mut self, event: Event) -> anyhow::Result<bool> {
|
||||||
match event {
|
match event {
|
||||||
Event::Key(KeyEvent {
|
Event::Key(KeyEvent {
|
||||||
|
|
@ -299,6 +314,9 @@ impl App {
|
||||||
self.log_view_selected = 0;
|
self.log_view_selected = 0;
|
||||||
self.needs_clear = true;
|
self.needs_clear = true;
|
||||||
}
|
}
|
||||||
|
KeyCode::Char('?') => {
|
||||||
|
self.current_screen = Screen::LogViewHelp;
|
||||||
|
}
|
||||||
KeyCode::Char('d') => {
|
KeyCode::Char('d') => {
|
||||||
self.log_view_period = LogViewPeriod::Day;
|
self.log_view_period = LogViewPeriod::Day;
|
||||||
self.log_view_scroll = 0;
|
self.log_view_scroll = 0;
|
||||||
|
|
|
||||||
67
src/ui.rs
67
src/ui.rs
|
|
@ -22,6 +22,7 @@ pub fn render(frame: &mut Frame, app: &App) {
|
||||||
Screen::NewEntry => render_new_entry(frame, app),
|
Screen::NewEntry => render_new_entry(frame, app),
|
||||||
Screen::ReassignProject => render_reassign_project(frame, app),
|
Screen::ReassignProject => render_reassign_project(frame, app),
|
||||||
Screen::LogView => render_log_view(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"),
|
("e", "edit"),
|
||||||
("x", "delete"),
|
("x", "delete"),
|
||||||
("c", "copy"),
|
("c", "copy"),
|
||||||
|
("?", "help"),
|
||||||
("q/ESC", "back"),
|
("q/ESC", "back"),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -586,3 +588,68 @@ fn render_log_view(frame: &mut Frame, app: &App) {
|
||||||
|
|
||||||
frame.render_widget(command_bar, chunks[1]);
|
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);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue