File tree Expand file tree Collapse file tree 2 files changed +31
-45
lines changed Expand file tree Collapse file tree 2 files changed +31
-45
lines changed Original file line number Diff line number Diff line change @@ -43,22 +43,12 @@ fn handle_list(app_state: &mut AppState, stdout: &mut StdoutLock) -> Result<()>
43
43
}
44
44
KeyCode :: Char ( k) => {
45
45
list_state. search_query . push ( k) ;
46
- list_state. message . push_str ( "search:" ) ;
47
- list_state. message . push_str ( & list_state. search_query ) ;
48
- list_state. message . push ( '|' ) ;
49
-
50
- list_state. select_if_matches_search_query ( ) ;
51
-
46
+ list_state. apply_search_query ( ) ;
52
47
list_state. draw ( stdout) ?;
53
48
}
54
49
KeyCode :: Backspace => {
55
50
list_state. search_query . pop ( ) ;
56
- list_state. message . push_str ( "search:" ) ;
57
- list_state. message . push_str ( & list_state. search_query ) ;
58
- list_state. message . push ( '|' ) ;
59
-
60
- list_state. select_if_matches_search_query ( ) ;
61
-
51
+ list_state. apply_search_query ( ) ;
62
52
list_state. draw ( stdout) ?;
63
53
}
64
54
_ => { }
Original file line number Diff line number Diff line change @@ -347,40 +347,36 @@ impl<'a> ListState<'a> {
347
347
Ok ( ( ) )
348
348
}
349
349
350
- pub fn select_if_matches_search_query ( & mut self ) {
350
+ pub fn apply_search_query ( & mut self ) {
351
+ self . message . push_str ( "search:" ) ;
352
+ self . message . push_str ( & self . search_query ) ;
353
+ self . message . push ( '|' ) ;
354
+
355
+ if self . search_query . is_empty ( ) { return ; }
356
+
351
357
let idx = self
352
- . app_state
353
- . exercises ( )
354
- . iter ( )
355
- . filter_map ( |exercise| {
356
- match self . filter ( ) {
357
- Filter :: None => {
358
- Some ( exercise)
359
- } ,
360
- Filter :: Done => {
361
- if exercise. done {
362
- Some ( exercise)
363
- } else {
364
- None
365
- }
366
- } ,
367
- Filter :: Pending => {
368
- if !exercise. done {
369
- Some ( exercise)
370
- } else {
371
- None
372
- }
373
- }
374
- }
375
- } )
376
- . enumerate ( )
377
- . find_map ( |( idx, exercise) | {
378
- if exercise. name . contains ( self . search_query . as_str ( ) ) {
379
- Some ( idx)
380
- } else {
381
- None
382
- }
383
- } ) ;
358
+ . app_state
359
+ . exercises ( )
360
+ . iter ( )
361
+ . filter_map ( |exercise| {
362
+ match self . filter ( ) {
363
+ Filter :: None => Some ( exercise) ,
364
+ Filter :: Done if exercise. done => Some ( exercise) ,
365
+ Filter :: Pending if !exercise. done => Some ( exercise) ,
366
+ _ => None ,
367
+ }
368
+ } )
369
+ . position ( |exercise| exercise. name . contains ( self . search_query . as_str ( ) ) ) ;
370
+
371
+ match idx {
372
+ Some ( exercise_ind) => {
373
+ self . scroll_state . set_selected ( exercise_ind) ;
374
+ }
375
+ None => {
376
+ let msg = String :: from ( " (not found)" ) ;
377
+ self . message . push_str ( & msg) ;
378
+ }
379
+ }
384
380
385
381
match idx {
386
382
Some ( x) => {
You can’t perform that action at this time.
0 commit comments