correction du parcours quand un filtre est actif

This commit is contained in:
2025-05-11 15:53:10 +02:00
parent b435f89655
commit d1439cca49

View File

@@ -85,21 +85,29 @@ impl<'a> App<'a> {
KeyCode::Char('q') => self.should_quit = true, KeyCode::Char('q') => self.should_quit = true,
KeyCode::Char('c') if key.modifiers.intersects(KeyModifiers::CONTROL) => self.should_quit = true, KeyCode::Char('c') if key.modifiers.intersects(KeyModifiers::CONTROL) => self.should_quit = true,
KeyCode::Down => { KeyCode::Down => {
if let Some(selected) = self.selected_session { if let Some(selected_idx) = self.selected_session {
if selected < self.sessions.len().saturating_sub(1) { if let Some(pos) = self.filtered_sessions.iter().position(|&i| i == selected_idx) {
self.selected_session = Some(selected + 1); if pos < self.filtered_sessions.len().saturating_sub(1) {
self.selected_session = Some(self.filtered_sessions[pos + 1]);
self.scroll = 0; self.scroll = 0;
} }
} else if !self.sessions.is_empty() { } else if !self.filtered_sessions.is_empty() {
self.selected_session = Some(0); self.selected_session = Some(self.filtered_sessions[0]);
}
} else if !self.filtered_sessions.is_empty() {
self.selected_session = Some(self.filtered_sessions[0]);
} }
} }
KeyCode::Up => { KeyCode::Up => {
if let Some(selected) = self.selected_session { if let Some(selected_idx) = self.selected_session {
if selected > 0 { if let Some(pos) = self.filtered_sessions.iter().position(|&i| i == selected_idx) {
self.selected_session = Some(selected - 1); if pos > 0 {
self.selected_session = Some(self.filtered_sessions[pos - 1]);
self.scroll = 0; self.scroll = 0;
} }
} else if !self.filtered_sessions.is_empty() {
self.selected_session = Some(self.filtered_sessions[0]);
}
} }
} }
KeyCode::Char('j') => { KeyCode::Char('j') => {
@@ -139,6 +147,40 @@ impl<'a> App<'a> {
self.filter_text.pop(); self.filter_text.pop();
self.apply_filters(); self.apply_filters();
} }
KeyCode::Home => {
if !self.filtered_sessions.is_empty() {
self.selected_session = Some(self.filtered_sessions[0]);
self.scroll = 0;
}
}
KeyCode::End => {
if let Some(&last_idx) = self.filtered_sessions.last() {
self.selected_session = Some(last_idx);
self.scroll = 0;
}
}
KeyCode::PageDown => {
if let Some(selected_idx) = self.selected_session {
if let Some(pos) = self.filtered_sessions.iter().position(|&i| i == selected_idx) {
let new_pos = (pos + 10).min(self.filtered_sessions.len().saturating_sub(1));
self.selected_session = Some(self.filtered_sessions[new_pos]);
self.scroll = 0;
}
} else if !self.filtered_sessions.is_empty() {
self.selected_session = Some(self.filtered_sessions[0]);
}
}
KeyCode::PageUp => {
if let Some(selected_idx) = self.selected_session {
if let Some(pos) = self.filtered_sessions.iter().position(|&i| i == selected_idx) {
let new_pos = pos.saturating_sub(10);
self.selected_session = Some(self.filtered_sessions[new_pos]);
self.scroll = 0;
}
} else if !self.filtered_sessions.is_empty() {
self.selected_session = Some(self.filtered_sessions[0]);
}
}
_ => {} _ => {}
} }
} }