@@ -40,6 +40,21 @@ export const InstancesList = () => {
40
40
const user : User = useSelector ( ( state : AppState ) => state . user ) ;
41
41
const { data : instances , isLoading } = useGetInstancesQuery ( ) ;
42
42
43
+ const [ menuFocused , setMenuFocused ] = useState ( false ) ;
44
+
45
+ const handleArrowNavigation = ( e : React . KeyboardEvent ) => {
46
+ e . stopPropagation ( ) ;
47
+ e . preventDefault ( ) ;
48
+
49
+ if ( e . key === "ArrowDown" && ! menuFocused ) {
50
+ const menuItem = document . querySelector (
51
+ ".MuiListSubheader-root + div li:first-of-type"
52
+ ) ;
53
+ ( menuItem as HTMLElement ) ?. focus ( ) ;
54
+ setMenuFocused ( true ) ;
55
+ }
56
+ } ;
57
+
43
58
const favoriteInstances = useMemo ( ( ) => {
44
59
if ( user && instances ?. length ) {
45
60
let data : Instance [ ] = [ ] ;
@@ -140,6 +155,7 @@ export const InstancesList = () => {
140
155
< ArrowForwardIosRoundedIcon color = "action" fontSize = "small" />
141
156
</ >
142
157
}
158
+ onKeyDown = { handleArrowNavigation }
143
159
PopperProps = { {
144
160
popperOptions : {
145
161
modifiers : [
@@ -176,13 +192,6 @@ export const InstancesList = () => {
176
192
height : 72 ,
177
193
borderRadius : "8px 8px 0px 0px" ,
178
194
} }
179
- onKeyDown = { ( e : React . KeyboardEvent ) => {
180
- const allowedKeys = [ "ArrowUp" , "ArrowDown" , "Escape" ] ;
181
-
182
- if ( ! allowedKeys . includes ( e . key ) ) {
183
- e . stopPropagation ( ) ;
184
- }
185
- } }
186
195
>
187
196
< TextField
188
197
autoFocus
@@ -191,6 +200,16 @@ export const InstancesList = () => {
191
200
value = { filter }
192
201
onChange = { ( e ) => setFilter ( e . target . value ) }
193
202
inputRef = { searchField }
203
+ onFocus = { ( ) => {
204
+ setMenuFocused ( false ) ;
205
+ } }
206
+ onKeyDown = { ( e : React . KeyboardEvent ) => {
207
+ const allowedKeys = [ "ArrowUp" , "ArrowDown" , "Escape" ] ;
208
+
209
+ if ( ! allowedKeys . includes ( e . key ) ) {
210
+ e . stopPropagation ( ) ;
211
+ }
212
+ } }
194
213
/>
195
214
</ ListSubheader >
196
215
{ filter && ! filteredInstances ?. length ? (
0 commit comments