@@ -62,6 +62,7 @@ export const DynamicParameter: FC<DynamicParameterProps> = ({
62
62
data-testid = { `parameter-field-${ parameter . name } ` }
63
63
>
64
64
< ParameterLabel
65
+ id = { id }
65
66
parameter = { parameter }
66
67
isPreset = { isPreset }
67
68
autofill = { autofill }
@@ -86,12 +87,14 @@ interface ParameterLabelProps {
86
87
parameter : PreviewParameter ;
87
88
isPreset ?: boolean ;
88
89
autofill ?: AutofillBuildParameter ;
90
+ id : string ;
89
91
}
90
92
91
93
const ParameterLabel : FC < ParameterLabelProps > = ( {
92
94
parameter,
93
95
isPreset,
94
96
autofill,
97
+ id,
95
98
} ) => {
96
99
const hasDescription = parameter . description && parameter . description !== "" ;
97
100
const displayName = parameter . display_name
@@ -109,7 +112,10 @@ const ParameterLabel: FC<ParameterLabelProps> = ({
109
112
) }
110
113
111
114
< div className = "flex flex-col w-full gap-1" >
112
- < Label className = "flex gap-2 flex-wrap text-sm font-medium" >
115
+ < Label
116
+ htmlFor = { id }
117
+ className = "flex gap-2 flex-wrap text-sm font-medium"
118
+ >
113
119
< span className = "flex" >
114
120
{ displayName }
115
121
{ parameter . required && (
@@ -197,15 +203,12 @@ const ParameterField: FC<ParameterFieldProps> = ({
197
203
disabled,
198
204
id,
199
205
} ) => {
200
- const initialValue =
201
- value !== undefined ? value : validValue ( parameter . value ) ;
202
- const [ localValue , setLocalValue ] = useState ( initialValue ) ;
203
-
204
- useEffect ( ( ) => {
205
- if ( value !== undefined ) {
206
- setLocalValue ( value ) ;
207
- }
208
- } , [ value ] ) ;
206
+ const [ localValue , setLocalValue ] = useState (
207
+ value !== undefined ? value : validValue ( parameter . value )
208
+ ) ;
209
+ if ( value !== undefined && value !== localValue ) {
210
+ setLocalValue ( value ) ;
211
+ }
209
212
210
213
switch ( parameter . form_type ) {
211
214
case "dropdown" :
@@ -216,7 +219,7 @@ const ParameterField: FC<ParameterFieldProps> = ({
216
219
disabled = { disabled }
217
220
required = { parameter . required }
218
221
>
219
- < SelectTrigger >
222
+ < SelectTrigger id = { id } >
220
223
< SelectValue
221
224
placeholder = { parameter . styling ?. placeholder || "Select option" }
222
225
/>
@@ -256,7 +259,7 @@ const ParameterField: FC<ParameterFieldProps> = ({
256
259
return (
257
260
< MultiSelectCombobox
258
261
inputProps = { {
259
- id : ` ${ id } - ${ parameter . name } ` ,
262
+ id : id ,
260
263
} }
261
264
options = { options }
262
265
defaultOptions = { selectedOptions }
@@ -281,7 +284,7 @@ const ParameterField: FC<ParameterFieldProps> = ({
281
284
282
285
return (
283
286
< TagInput
284
- id = { parameter . name }
287
+ id = { id }
285
288
label = { parameter . display_name || parameter . name }
286
289
values = { values }
287
290
onChange = { ( values ) => {
@@ -294,6 +297,7 @@ const ParameterField: FC<ParameterFieldProps> = ({
294
297
case "switch" :
295
298
return (
296
299
< Switch
300
+ id = { id }
297
301
checked = { value === "true" }
298
302
onCheckedChange = { ( checked ) => {
299
303
onChange ( checked ? "true" : "false" ) ;
@@ -329,23 +333,24 @@ const ParameterField: FC<ParameterFieldProps> = ({
329
333
return (
330
334
< div className = "flex items-center space-x-2" >
331
335
< Checkbox
332
- id = { parameter . name }
336
+ id = { id }
333
337
checked = { value === "true" }
334
338
onCheckedChange = { ( checked ) => {
335
339
onChange ( checked ? "true" : "false" ) ;
336
340
} }
337
341
disabled = { disabled }
338
342
/>
339
- < Label htmlFor = { parameter . name } > { parameter . styling ?. label } </ Label >
343
+ < Label htmlFor = { id } > { parameter . styling ?. label } </ Label >
340
344
</ div >
341
345
) ;
342
346
343
347
case "slider" :
344
348
return (
345
349
< div className = "flex flex-row items-baseline gap-3" >
346
350
< Slider
351
+ id = { id }
347
352
className = "mt-2"
348
- value = { [ Number ( localValue ?? 0 ) ] }
353
+ value = { [ Number ( localValue ) ] }
349
354
onValueChange = { ( [ value ] ) => {
350
355
setLocalValue ( value . toString ( ) ) ;
351
356
onChange ( value . toString ( ) ) ;
@@ -361,6 +366,7 @@ const ParameterField: FC<ParameterFieldProps> = ({
361
366
case "textarea" :
362
367
return (
363
368
< Textarea
369
+ id = { id }
364
370
className = "max-w-2xl"
365
371
value = { localValue }
366
372
onChange = { ( e ) => {
@@ -397,6 +403,7 @@ const ParameterField: FC<ParameterFieldProps> = ({
397
403
398
404
return (
399
405
< Input
406
+ id = { id }
400
407
type = { inputType }
401
408
value = { localValue }
402
409
onChange = { ( e ) => {
0 commit comments