summaryrefslogtreecommitdiff
path: root/src/list/state.rs
diff options
context:
space:
mode:
authorAdhyan <adhyanpatel@gmail.com>2024-09-01 18:56:52 -0600
committerAdhyan <adhyanpatel@gmail.com>2024-09-01 18:56:52 -0600
commite1e316b9313bbd5b3865032c97bc4f4cc15a3e0f (patch)
tree1eeb03e3e197cae78b1a264d4d0f0a63b0cd912c /src/list/state.rs
parenta8b13f5a821d40f11e206922d990aa7b2e66801f (diff)
parentc4fd29541b049f38a9a898974b0b098f6bffe777 (diff)
Merge branch 'main' of https://github.com/frroossst/rustlings
Diffstat (limited to 'src/list/state.rs')
-rw-r--r--src/list/state.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/list/state.rs b/src/list/state.rs
index 7a2d3bf..53fed9a 100644
--- a/src/list/state.rs
+++ b/src/list/state.rs
@@ -44,6 +44,7 @@ pub struct ListState<'a> {
term_width: u16,
term_height: u16,
show_footer: bool,
+ pub search_query: String,
}
impl<'a> ListState<'a> {
@@ -76,6 +77,7 @@ impl<'a> ListState<'a> {
term_width: 0,
term_height: 0,
show_footer: true,
+ search_query: String::new(),
};
slf.set_term_size(width, height);
@@ -344,6 +346,41 @@ impl<'a> ListState<'a> {
Ok(())
}
+
+ pub fn select_if_matches_search_query(&mut self) {
+ eprintln!("search query: {:?}", self.search_query);
+
+ let idx = self
+ .app_state
+ .exercises()
+ .iter()
+ .enumerate()
+ .find_map(|(i, s)| {
+ if s.name.contains(self.search_query.as_str()) {
+ Some(i)
+ } else {
+ None
+ }
+ });
+ eprintln!("idx: {:?}", idx);
+
+ 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);
+ eprintln!("exercise_ind: {:?}", exercise_ind);
+ self.update_rows();
+ }
+ None => {
+ let msg = String::from("[NOT FOUND]") + &self.message.clone();
+ self.message.clear();
+ self.message.push_str(&msg);
+ }
+ }
+
+ }
// Return `true` if there was something to select.
pub fn selected_to_current_exercise(&mut self) -> Result<bool> {