From de3d01922b0f2a5ba5b4b896696b8910755307c8 Mon Sep 17 00:00:00 2001 From: nnyyxxxx Date: Wed, 12 Feb 2025 04:11:57 -0500 Subject: [PATCH 1/2] fix(filter): prevent panic after tab completing After tab completing if you would press a key other than return (enter) then the tui would panic, this change fixes that issue. --- tui/src/filter.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tui/src/filter.rs b/tui/src/filter.rs index 734db164a..0daed22e0 100644 --- a/tui/src/filter.rs +++ b/tui/src/filter.rs @@ -92,8 +92,16 @@ impl Filter { let input = self.search_input.iter().collect::().to_lowercase(); self.items.iter().find_map(|item| { let item_name_lower = item.node.name.to_lowercase(); - (item_name_lower.starts_with(&input)) - .then_some(item_name_lower[input.len()..].to_string()) + item_name_lower + .starts_with(&input) + .then(|| { + if input.len() <= item_name_lower.len() { + Some(item_name_lower[input.len()..].to_string()) + } else { + None + } + }) + .flatten() }) } } From 8b04e8a7ae976b9154d469ed00a54a1b82a92cdc Mon Sep 17 00:00:00 2001 From: nnyyxxxx Date: Wed, 12 Feb 2025 04:16:05 -0500 Subject: [PATCH 2/2] refactor(filter): reduce nesting in update_completion_preview fn --- tui/src/filter.rs | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/tui/src/filter.rs b/tui/src/filter.rs index 0daed22e0..4e0fe0dd4 100644 --- a/tui/src/filter.rs +++ b/tui/src/filter.rs @@ -86,24 +86,23 @@ impl Filter { } fn update_completion_preview(&mut self) { - self.completion_preview = if self.items.is_empty() || self.search_input.is_empty() { - None - } else { - let input = self.search_input.iter().collect::().to_lowercase(); - self.items.iter().find_map(|item| { - let item_name_lower = item.node.name.to_lowercase(); - item_name_lower - .starts_with(&input) - .then(|| { - if input.len() <= item_name_lower.len() { - Some(item_name_lower[input.len()..].to_string()) - } else { - None - } - }) - .flatten() - }) + if self.items.is_empty() || self.search_input.is_empty() { + self.completion_preview = None; + return; } + + let input = self.search_input.iter().collect::().to_lowercase(); + + let completion = self + .items + .iter() + .find(|item| item.node.name.to_lowercase().starts_with(&input)) + .and_then(|item| { + let name = item.node.name.to_lowercase(); + (input.len() <= name.len()).then(|| name[input.len()..].to_string()) + }); + + self.completion_preview = completion; } pub fn draw_searchbar(&self, frame: &mut Frame, area: Rect, theme: &Theme) {