summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdhyan <adhyanpatel@gmail.com>2024-09-02 10:59:23 -0600
committerAdhyan <adhyanpatel@gmail.com>2024-09-02 10:59:23 -0600
commitabf1228a0a837e71d744f5f2881f386387802cc7 (patch)
tree111ea617483e12416965bd57f451fc0f75de6aab /src
parent547a9d947bf62052c263a6ee935b5451d3c0dbf1 (diff)
search now filters the list first
Diffstat (limited to 'src')
-rw-r--r--src/list.rs2
-rw-r--r--src/list/state.rs23
2 files changed, 22 insertions, 3 deletions
diff --git a/src/list.rs b/src/list.rs
index b41c891..069cdda 100644
--- a/src/list.rs
+++ b/src/list.rs
@@ -38,7 +38,7 @@ fn handle_list(app_state: &mut AppState, stdout: &mut StdoutLock) -> Result<()>
if is_searching {
match curr_key {
KeyCode::Esc | KeyCode::Enter => {
- is_searching = false; // not sure why rust analyzer thinks this is unused
+ is_searching = false;
list_state.search_query.clear();
continue;
}
diff --git a/src/list/state.rs b/src/list/state.rs
index be05f3b..8d5bf5b 100644
--- a/src/list/state.rs
+++ b/src/list/state.rs
@@ -352,6 +352,27 @@ impl<'a> ListState<'a> {
.app_state
.exercises()
.iter()
+ .filter_map(|exercise| {
+ match self.filter() {
+ Filter::None => {
+ Some(exercise)
+ },
+ Filter::Done => {
+ if exercise.done {
+ Some(exercise)
+ } else {
+ None
+ }
+ },
+ Filter::Pending => {
+ if !exercise.done {
+ Some(exercise)
+ } else {
+ None
+ }
+ }
+ }
+ })
.enumerate()
.find_map(|(i, s)| {
if s.name.contains(self.search_query.as_str()) {
@@ -363,8 +384,6 @@ impl<'a> ListState<'a> {
match idx {
Some(i) => {
- // ? do we need this function call?
- // let exercise_ind = self.selected_to_exercise_ind(i).unwrap();
let exercise_ind = i;
self.scroll_state.set_selected(exercise_ind);
self.update_rows();