summaryrefslogtreecommitdiff
path: root/src/list/state.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-09-04 01:20:48 +0200
committermo8it <mo8it@proton.me>2024-09-04 01:20:48 +0200
commite5ed11528855f6dddc5759df3426ff1296aba87e (patch)
treebad1ef9adba6aa8058ccf426ba571337a6954d3f /src/list/state.rs
parent03baa471d94f9dfe7575b985e227df1d4e7803d4 (diff)
Match filter once
Diffstat (limited to 'src/list/state.rs')
-rw-r--r--src/list/state.rs21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/list/state.rs b/src/list/state.rs
index f932fab..468049a 100644
--- a/src/list/state.rs
+++ b/src/list/state.rs
@@ -356,16 +356,17 @@ impl<'a> ListState<'a> {
return;
}
- let ind = self
- .app_state
- .exercises()
- .iter()
- .filter(|exercise| match self.filter {
- Filter::None => true,
- Filter::Done => exercise.done,
- Filter::Pending => !exercise.done,
- })
- .position(|exercise| exercise.name.contains(self.search_query.as_str()));
+ let is_search_result = |exercise: &Exercise| exercise.name.contains(&self.search_query);
+ let mut iter = self.app_state.exercises().iter();
+ let ind = match self.filter {
+ Filter::None => iter.position(is_search_result),
+ Filter::Done => iter
+ .filter(|exercise| exercise.done)
+ .position(is_search_result),
+ Filter::Pending => iter
+ .filter(|exercise| !exercise.done)
+ .position(is_search_result),
+ };
match ind {
Some(exercise_ind) => self.scroll_state.set_selected(exercise_ind),