1- import { PropsOf , component$ , useContext , useSignal , useTask$ } from '@builder.io/qwik' ;
1+ import { PropsOf , component$ , useContext , useSignal } from '@builder.io/qwik' ;
22import SelectContextId from './select-context' ;
3- import { isServer } from '@builder.io/qwik/build ' ;
3+ import { HiddenSelectOption } from './hidden-select-option ' ;
44import { VisuallyHidden } from '../../utils/visually-hidden' ;
55
66export type AriaHiddenSelectProps = {
@@ -19,6 +19,10 @@ export type AriaHiddenSelectProps = {
1919 disabled ?: boolean ;
2020
2121 required ?: boolean ;
22+
23+ // from modular forms
24+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25+ field ?: any ;
2226} ;
2327
2428export const HHiddenNativeSelect = component$ (
@@ -27,28 +31,15 @@ export const HHiddenNativeSelect = component$(
2731 const context = useContext ( SelectContextId ) ;
2832
2933 // modular forms does something with refs, doesn't seem we need it, and it overrides the ref we define here.
30- ref ;
31-
3234 const nativeSelectRef = useSignal < HTMLSelectElement > ( ) ;
3335
34- useTask$ ( function modularFormsValidation ( { track } ) {
35- track ( ( ) => context . selectedIndexSetSig . value ) ;
36-
37- if ( isServer ) return ;
38-
39- // modular forms expects the input event fired after interaction
40- const inputEvent = new Event ( 'input' , { bubbles : false } ) ;
41- nativeSelectRef . value ?. dispatchEvent ( inputEvent ) ;
42- } ) ;
43-
4436 // TODO: make conditional logic to show either input or select based on the size of the options.
4537 return (
4638 < VisuallyHidden >
4739 < div aria-hidden = "true" >
4840 < label >
4941 { label }
5042 < select
51- onFocus$ = { ( ) => context . triggerRef . value ?. focus ( ) }
5243 ref = { ( element : HTMLSelectElement ) => {
5344 nativeSelectRef . value = element ;
5445 // @ts -expect-error modular forms ref function
@@ -66,13 +57,13 @@ export const HHiddenNativeSelect = component$(
6657 >
6758 < option />
6859 { Array . from ( context . itemsMapSig . value . entries ( ) ) . map ( ( [ index , item ] ) => (
69- < option
70- value = { item . value }
71- selected = { context . selectedIndexSetSig . value . has ( index ) }
60+ < HiddenSelectOption
7261 key = { item . value }
73- >
74- { item . displayValue }
75- </ option >
62+ value = { item . value }
63+ displayValue = { item . displayValue }
64+ nativeSelectRef = { nativeSelectRef }
65+ index = { index }
66+ />
7667 ) ) }
7768 </ select >
7869 </ label >
0 commit comments