@@ -27,7 +27,7 @@ use crate::{
27
27
pub enum MenuFocus {
28
28
#[ default]
29
29
Schema ,
30
- Table ,
30
+ Tables ,
31
31
}
32
32
33
33
pub trait SettableTableList < ' a > {
@@ -71,7 +71,7 @@ impl Menu {
71
71
MenuFocus :: Schema => {
72
72
self . list_state = ListState :: default ( ) ;
73
73
} ,
74
- MenuFocus :: Table => {
74
+ MenuFocus :: Tables => {
75
75
self . list_state = ListState :: default ( ) . with_selected ( Some ( 0 ) ) ;
76
76
} ,
77
77
}
@@ -81,7 +81,7 @@ impl Menu {
81
81
82
82
pub fn scroll_down ( & mut self ) {
83
83
match self . menu_focus {
84
- MenuFocus :: Table => {
84
+ MenuFocus :: Tables => {
85
85
if let Some ( i) = self . list_state . selected ( ) {
86
86
let tables = self . table_map . get_index ( self . schema_index ) . unwrap ( ) . 1 . to_owned ( ) ;
87
87
let filtered_tables: Vec < String > = tables
@@ -106,7 +106,7 @@ impl Menu {
106
106
107
107
pub fn scroll_up ( & mut self ) {
108
108
match self . menu_focus {
109
- MenuFocus :: Table => {
109
+ MenuFocus :: Tables => {
110
110
if let Some ( i) = self . list_state . selected ( ) {
111
111
self . list_state = ListState :: default ( ) . with_selected ( Some ( i. saturating_sub ( 1 ) ) ) ;
112
112
}
@@ -117,7 +117,7 @@ impl Menu {
117
117
118
118
pub fn scroll_bottom ( & mut self ) {
119
119
match self . menu_focus {
120
- MenuFocus :: Table => {
120
+ MenuFocus :: Tables => {
121
121
if let Some ( i) = self . list_state . selected ( ) {
122
122
let tables = self . table_map . get_index ( self . schema_index ) . unwrap ( ) . 1 . to_owned ( ) ;
123
123
let filtered_tables: Vec < String > = tables
@@ -141,7 +141,7 @@ impl Menu {
141
141
142
142
pub fn scroll_top ( & mut self ) {
143
143
match self . menu_focus {
144
- MenuFocus :: Table => {
144
+ MenuFocus :: Tables => {
145
145
if let Some ( i) = self . list_state . selected ( ) {
146
146
self . list_state = ListState :: default ( ) . with_selected ( Some ( 0 ) ) ;
147
147
}
@@ -173,7 +173,7 @@ impl<'a> SettableTableList<'a> for Menu {
173
173
} ) ;
174
174
log:: info!( "table map: {:?}" , self . table_map) ;
175
175
if self . table_map . keys ( ) . len ( ) == 1 {
176
- self . menu_focus = MenuFocus :: Table ;
176
+ self . menu_focus = MenuFocus :: Tables ;
177
177
self . list_state = ListState :: default ( ) . with_selected ( Some ( 0 ) ) ;
178
178
} else {
179
179
self . menu_focus = MenuFocus :: Schema ;
@@ -210,7 +210,7 @@ impl Component for Menu {
210
210
}
211
211
if let Some ( Event :: Key ( key) ) = event {
212
212
match key. code {
213
- KeyCode :: Right => self . change_focus ( MenuFocus :: Table ) ,
213
+ KeyCode :: Right => self . change_focus ( MenuFocus :: Tables ) ,
214
214
KeyCode :: Left => self . change_focus ( MenuFocus :: Schema ) ,
215
215
KeyCode :: Down => self . scroll_down ( ) ,
216
216
KeyCode :: Up => self . scroll_up ( ) ,
@@ -228,7 +228,7 @@ impl Component for Menu {
228
228
self . search = Some ( "" . to_owned ( ) )
229
229
}
230
230
} ,
231
- KeyCode :: Char ( 'l' ) => self . change_focus ( MenuFocus :: Table ) ,
231
+ KeyCode :: Char ( 'l' ) => self . change_focus ( MenuFocus :: Tables ) ,
232
232
KeyCode :: Char ( 'h' ) => self . change_focus ( MenuFocus :: Schema ) ,
233
233
KeyCode :: Char ( 'j' ) => self . scroll_down ( ) ,
234
234
KeyCode :: Char ( 'k' ) => self . scroll_up ( ) ,
@@ -242,6 +242,8 @@ impl Component for Menu {
242
242
KeyCode :: Enter => {
243
243
if self . search . is_some ( ) && self . search_focused {
244
244
self . search_focused = false ;
245
+ } else if self . menu_focus == MenuFocus :: Schema {
246
+ self . change_focus ( MenuFocus :: Tables ) ;
245
247
} else if let Some ( selected) = self . list_state . selected ( ) {
246
248
let ( schema, tables) = self . table_map . get_index ( self . schema_index ) . unwrap ( ) ;
247
249
let filtered_tables: Vec < String > = tables
@@ -264,13 +266,17 @@ impl Component for Menu {
264
266
} ,
265
267
KeyCode :: Esc => self . reset_search ( ) ,
266
268
KeyCode :: Backspace => {
267
- if let Some ( search) = self . search . as_mut ( ) {
268
- if !search. is_empty ( ) {
269
- search. pop ( ) ;
270
- self . list_state = ListState :: default ( ) . with_selected ( Some ( 0 ) ) ;
271
- } else {
272
- self . reset_search ( ) ;
269
+ if self . search . is_some ( ) && self . search_focused {
270
+ if let Some ( search) = self . search . as_mut ( ) {
271
+ if !search. is_empty ( ) {
272
+ search. pop ( ) ;
273
+ self . list_state = ListState :: default ( ) . with_selected ( Some ( 0 ) ) ;
274
+ } else {
275
+ self . reset_search ( ) ;
276
+ }
273
277
}
278
+ } else if self . menu_focus == MenuFocus :: Tables {
279
+ self . change_focus ( MenuFocus :: Schema ) ;
274
280
}
275
281
} ,
276
282
_ => { } ,
@@ -343,11 +349,21 @@ impl Component for Menu {
343
349
let available_height = block. inner ( parent_block. inner ( area) ) . height as usize ;
344
350
let list = List :: default ( ) . items ( filtered_tables) . block ( block) . highlight_style (
345
351
Style :: default ( )
346
- . bg ( if focused && !self . search_focused { Color :: Green } else { Color :: White } )
352
+ . bg ( if focused && !self . search_focused && self . menu_focus == MenuFocus :: Tables {
353
+ Color :: Green
354
+ } else {
355
+ Color :: White
356
+ } )
347
357
. fg ( Color :: DarkGray ) ,
348
358
) ;
349
359
f. render_stateful_widget ( list, layout[ layout_index] , & mut self . list_state ) ;
350
- let vertical_scrollbar = Scrollbar :: new ( ScrollbarOrientation :: VerticalRight ) . symbols ( scrollbar:: VERTICAL ) ;
360
+ let vertical_scrollbar = Scrollbar :: new ( ScrollbarOrientation :: VerticalRight )
361
+ . symbols ( scrollbar:: VERTICAL )
362
+ . style ( Style :: default ( ) . fg ( if focused && !self . search_focused && self . menu_focus == MenuFocus :: Tables {
363
+ Color :: Green
364
+ } else {
365
+ Color :: DarkGray
366
+ } ) ) ;
351
367
let mut vertical_scrollbar_state =
352
368
ScrollbarState :: new ( table_length. saturating_sub ( available_height) ) . position ( self . list_state . offset ( ) ) ;
353
369
f. render_stateful_widget ( vertical_scrollbar, block_margin, & mut vertical_scrollbar_state) ;
0 commit comments