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,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]);
}
}
_ => {}
}
}