From d1439cca49f36189f616798efee25368f02f9ed8 Mon Sep 17 00:00:00 2001 From: Manu Date: Sun, 11 May 2025 15:53:10 +0200 Subject: [PATCH] correction du parcours quand un filtre est actif --- src/ui.rs | 62 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 0ab3656..34be178 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -85,20 +85,28 @@ impl<'a> App<'a> { KeyCode::Char('q') => self.should_quit = true, KeyCode::Char('c') if key.modifiers.intersects(KeyModifiers::CONTROL) => self.should_quit = true, KeyCode::Down => { - if let Some(selected) = self.selected_session { - if selected < self.sessions.len().saturating_sub(1) { - self.selected_session = Some(selected + 1); - self.scroll = 0; + if let Some(selected_idx) = self.selected_session { + if let Some(pos) = self.filtered_sessions.iter().position(|&i| i == selected_idx) { + if pos < self.filtered_sessions.len().saturating_sub(1) { + self.selected_session = Some(self.filtered_sessions[pos + 1]); + self.scroll = 0; + } + } else if !self.filtered_sessions.is_empty() { + self.selected_session = Some(self.filtered_sessions[0]); } - } else if !self.sessions.is_empty() { - self.selected_session = Some(0); + } else if !self.filtered_sessions.is_empty() { + self.selected_session = Some(self.filtered_sessions[0]); } } KeyCode::Up => { - if let Some(selected) = self.selected_session { - if selected > 0 { - self.selected_session = Some(selected - 1); - self.scroll = 0; + if let Some(selected_idx) = self.selected_session { + if let Some(pos) = self.filtered_sessions.iter().position(|&i| i == selected_idx) { + if pos > 0 { + self.selected_session = Some(self.filtered_sessions[pos - 1]); + self.scroll = 0; + } + } else if !self.filtered_sessions.is_empty() { + self.selected_session = Some(self.filtered_sessions[0]); } } } @@ -139,6 +147,40 @@ impl<'a> App<'a> { self.filter_text.pop(); 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]); + } + } _ => {} } }