mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-26 00:00:03 +03:00
search now filters the list first
This commit is contained in:
parent
547a9d947b
commit
abf1228a0a
|
@ -38,7 +38,7 @@ fn handle_list(app_state: &mut AppState, stdout: &mut StdoutLock) -> Result<()>
|
||||||
if is_searching {
|
if is_searching {
|
||||||
match curr_key {
|
match curr_key {
|
||||||
KeyCode::Esc | KeyCode::Enter => {
|
KeyCode::Esc | KeyCode::Enter => {
|
||||||
is_searching = false; // not sure why rust analyzer thinks this is unused
|
is_searching = false;
|
||||||
list_state.search_query.clear();
|
list_state.search_query.clear();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -352,6 +352,27 @@ impl<'a> ListState<'a> {
|
||||||
.app_state
|
.app_state
|
||||||
.exercises()
|
.exercises()
|
||||||
.iter()
|
.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()
|
.enumerate()
|
||||||
.find_map(|(i, s)| {
|
.find_map(|(i, s)| {
|
||||||
if s.name.contains(self.search_query.as_str()) {
|
if s.name.contains(self.search_query.as_str()) {
|
||||||
|
@ -363,8 +384,6 @@ impl<'a> ListState<'a> {
|
||||||
|
|
||||||
match idx {
|
match idx {
|
||||||
Some(i) => {
|
Some(i) => {
|
||||||
// ? do we need this function call?
|
|
||||||
// let exercise_ind = self.selected_to_exercise_ind(i).unwrap();
|
|
||||||
let exercise_ind = i;
|
let exercise_ind = i;
|
||||||
self.scroll_state.set_selected(exercise_ind);
|
self.scroll_state.set_selected(exercise_ind);
|
||||||
self.update_rows();
|
self.update_rows();
|
||||||
|
|
Loading…
Reference in a new issue