@@ -9,13 +9,15 @@ import {
99 type PropsOf ,
1010 useContextProvider ,
1111 sync$ ,
12+ useOnWindow ,
13+ QRL ,
1214} from '@builder.io/qwik' ;
1315import { isServer , isBrowser } from '@builder.io/qwik/build' ;
1416import SelectContextId , {
1517 SelectItemContext ,
1618 selectItemContextId ,
1719} from './select-context' ;
18- import { useSelect , useTypeahead } from './use-select' ;
20+ import { useSelect } from './use-select' ;
1921
2022export type SelectItemProps = PropsOf < 'li' > & {
2123 /** Internal index we get from the inline component. Please see select-inline.tsx */
@@ -35,11 +37,18 @@ export const HSelectItem = component$<SelectItemProps>((props) => {
3537 const itemRef = useSignal < HTMLLIElement > ( ) ;
3638 const localIndexSig = useSignal < number | null > ( null ) ;
3739 const itemId = `${ context . localId } -${ _index } ` ;
40+ const typeaheadFnSig = useSignal < QRL < ( key : string ) => Promise < void > > > ( ) ;
3841
3942 const { selectionManager$, getNextEnabledItemIndex$, getPrevEnabledItemIndex$ } =
4043 useSelect ( ) ;
4144
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+ ) ;
4352
4453 const isSelectedSig = useComputed$ ( ( ) => {
4554 const index = _index ?? null ;
@@ -144,7 +153,7 @@ export const HSelectItem = component$<SelectItemProps>((props) => {
144153 } ) ;
145154
146155 const handleKeyDown$ = $ ( async ( e : KeyboardEvent ) => {
147- typeahead$ ( e . key ) ;
156+ typeaheadFnSig . value ?. ( e . key ) ;
148157
149158 switch ( e . key ) {
150159 case 'ArrowDown' :
0 commit comments