@@ -9,13 +9,15 @@ import {
9
9
type PropsOf ,
10
10
useContextProvider ,
11
11
sync$ ,
12
+ useOnWindow ,
13
+ QRL ,
12
14
} from '@builder.io/qwik' ;
13
15
import { isServer , isBrowser } from '@builder.io/qwik/build' ;
14
16
import SelectContextId , {
15
17
SelectItemContext ,
16
18
selectItemContextId ,
17
19
} from './select-context' ;
18
- import { useSelect , useTypeahead } from './use-select' ;
20
+ import { useSelect } from './use-select' ;
19
21
20
22
export type SelectItemProps = PropsOf < 'li' > & {
21
23
/** Internal index we get from the inline component. Please see select-inline.tsx */
@@ -35,11 +37,18 @@ export const HSelectItem = component$<SelectItemProps>((props) => {
35
37
const itemRef = useSignal < HTMLLIElement > ( ) ;
36
38
const localIndexSig = useSignal < number | null > ( null ) ;
37
39
const itemId = `${ context . localId } -${ _index } ` ;
40
+ const typeaheadFnSig = useSignal < QRL < ( key : string ) => Promise < void > > > ( ) ;
38
41
39
42
const { selectionManager$, getNextEnabledItemIndex$, getPrevEnabledItemIndex$ } =
40
43
useSelect ( ) ;
41
44
42
- const { typeahead$ } = useTypeahead ( ) ;
45
+ // we're getting the same function instance from the trigger, without needing to restructure context
46
+ useOnWindow (
47
+ 'typeaheadFn' ,
48
+ $ ( ( e : CustomEvent ) => {
49
+ typeaheadFnSig . value = e . detail ;
50
+ } ) ,
51
+ ) ;
43
52
44
53
const isSelectedSig = useComputed$ ( ( ) => {
45
54
const index = _index ?? null ;
@@ -144,7 +153,7 @@ export const HSelectItem = component$<SelectItemProps>((props) => {
144
153
} ) ;
145
154
146
155
const handleKeyDown$ = $ ( async ( e : KeyboardEvent ) => {
147
- typeahead$ ( e . key ) ;
156
+ typeaheadFnSig . value ?. ( e . key ) ;
148
157
149
158
switch ( e . key ) {
150
159
case 'ArrowDown' :
0 commit comments