1
1
import { $ , Slot , component$ , sync$ , useContext , type PropsOf } from '@builder.io/qwik' ;
2
2
import SelectContextId from './select-context' ;
3
- import { useTypeahead } from './use-select' ;
4
- import { getNextEnabledOptionIndex , getPrevEnabledOptionIndex } from './utils' ;
3
+ import { useSelect , useTypeahead } from './use-select' ;
5
4
6
5
type SelectTriggerProps = PropsOf < 'button' > ;
7
6
export const SelectTrigger = component$ < SelectTriggerProps > ( ( props ) => {
8
7
const context = useContext ( SelectContextId ) ;
8
+ const { getNextEnabledOptionIndex, getPrevEnabledOptionIndex } = useSelect ( ) ;
9
9
const openKeys = [ 'ArrowUp' , 'ArrowDown' ] ;
10
10
const closedKeys = [ `Escape` ] ;
11
11
@@ -32,7 +32,7 @@ export const SelectTrigger = component$<SelectTriggerProps>((props) => {
32
32
}
33
33
} ) ;
34
34
35
- const handleKeyDown$ = $ ( ( e : KeyboardEvent ) => {
35
+ const handleKeyDown$ = $ ( async ( e : KeyboardEvent ) => {
36
36
typeahead$ ( e . key ) ;
37
37
const shouldOpen = ! context . isListboxOpenSig . value && openKeys . includes ( e . key ) ;
38
38
const shouldClose = context . isListboxOpenSig . value && closedKeys . includes ( e . key ) ;
@@ -47,15 +47,15 @@ export const SelectTrigger = component$<SelectTriggerProps>((props) => {
47
47
}
48
48
49
49
if ( e . key === 'Home' ) {
50
- context . highlightedIndexSig . value = getNextEnabledOptionIndex (
50
+ context . highlightedIndexSig . value = await getNextEnabledOptionIndex (
51
51
- 1 ,
52
52
context . optionsSig . value ,
53
53
context . loop ,
54
54
) ;
55
55
}
56
56
57
57
if ( e . key === 'End' ) {
58
- const lastEnabledOptionIndex = getPrevEnabledOptionIndex (
58
+ const lastEnabledOptionIndex = await getPrevEnabledOptionIndex (
59
59
context . optionsSig . value . length ,
60
60
context . optionsSig . value ,
61
61
context . loop ,
@@ -65,7 +65,7 @@ export const SelectTrigger = component$<SelectTriggerProps>((props) => {
65
65
66
66
if ( ! context . isListboxOpenSig . value ) {
67
67
if ( e . key === 'ArrowRight' && context . highlightedIndexSig . value === null ) {
68
- context . selectedIndexSig . value = getNextEnabledOptionIndex (
68
+ context . selectedIndexSig . value = await getNextEnabledOptionIndex (
69
69
- 1 ,
70
70
context . optionsSig . value ,
71
71
context . loop ,
@@ -76,17 +76,19 @@ export const SelectTrigger = component$<SelectTriggerProps>((props) => {
76
76
}
77
77
78
78
if ( e . key === 'ArrowRight' && context . highlightedIndexSig . value !== null ) {
79
- context . selectedIndexSig . value = getNextEnabledOptionIndex (
79
+ context . selectedIndexSig . value = await getNextEnabledOptionIndex (
80
80
context . selectedIndexSig . value ! ,
81
81
context . optionsSig . value ,
82
82
context . loop ,
83
83
) ;
84
84
85
+ console . log ( 'selectedIndex' , context . selectedIndexSig . value ) ;
86
+
85
87
context . highlightedIndexSig . value = context . selectedIndexSig . value ;
86
88
}
87
89
88
90
if ( e . key === 'ArrowLeft' && context . highlightedIndexSig . value === null ) {
89
- context . selectedIndexSig . value = getPrevEnabledOptionIndex (
91
+ context . selectedIndexSig . value = await getPrevEnabledOptionIndex (
90
92
context . optionsSig . value . length ,
91
93
context . optionsSig . value ,
92
94
context . loop ,
@@ -97,7 +99,7 @@ export const SelectTrigger = component$<SelectTriggerProps>((props) => {
97
99
}
98
100
99
101
if ( e . key === 'ArrowLeft' && context . highlightedIndexSig . value !== null ) {
100
- context . selectedIndexSig . value = getPrevEnabledOptionIndex (
102
+ context . selectedIndexSig . value = await getPrevEnabledOptionIndex (
101
103
context . highlightedIndexSig . value ,
102
104
context . optionsSig . value ,
103
105
context . loop ,
@@ -109,7 +111,7 @@ export const SelectTrigger = component$<SelectTriggerProps>((props) => {
109
111
110
112
/** When initially opening the listbox, we want to grab the first enabled option index */
111
113
if ( context . highlightedIndexSig . value === null ) {
112
- context . highlightedIndexSig . value = getNextEnabledOptionIndex (
114
+ context . highlightedIndexSig . value = await getNextEnabledOptionIndex (
113
115
- 1 ,
114
116
context . optionsSig . value ,
115
117
context . loop ,
@@ -128,15 +130,15 @@ export const SelectTrigger = component$<SelectTriggerProps>((props) => {
128
130
}
129
131
130
132
if ( e . key === 'ArrowDown' ) {
131
- context . highlightedIndexSig . value = getNextEnabledOptionIndex (
133
+ context . highlightedIndexSig . value = await getNextEnabledOptionIndex (
132
134
context . highlightedIndexSig . value ,
133
135
context . optionsSig . value ,
134
136
context . loop ,
135
137
) ;
136
138
}
137
139
138
140
if ( e . key === 'ArrowUp' ) {
139
- context . highlightedIndexSig . value = getPrevEnabledOptionIndex (
141
+ context . highlightedIndexSig . value = await getPrevEnabledOptionIndex (
140
142
context . highlightedIndexSig . value ,
141
143
context . optionsSig . value ,
142
144
context . loop ,
0 commit comments