@@ -32,7 +32,7 @@ import {
32
32
TooltipTrigger ,
33
33
} from "components/Tooltip/Tooltip" ;
34
34
import { Info , Settings , TriangleAlert } from "lucide-react" ;
35
- import { type FC , useId } from "react" ;
35
+ import { type FC , useId , useState , useEffect } from "react" ;
36
36
import type { AutofillBuildParameter } from "utils/richParameters" ;
37
37
import * as Yup from "yup" ;
38
38
@@ -164,14 +164,18 @@ const ParameterField: FC<ParameterFieldProps> = ({
164
164
id,
165
165
} ) => {
166
166
const value = validValue ( parameter . value ) ;
167
- const defaultValue = validValue ( parameter . default_value ) ;
167
+ const [ localValue , setLocalValue ] = useState ( value ) ;
168
+
169
+ useEffect ( ( ) => {
170
+ setLocalValue ( value ) ;
171
+ } , [ value ] ) ;
168
172
169
173
switch ( parameter . form_type ) {
170
174
case "dropdown" :
171
175
return (
172
176
< Select
173
177
onValueChange = { onChange }
174
- defaultValue = { defaultValue }
178
+ value = { value }
175
179
disabled = { disabled }
176
180
required = { parameter . required }
177
181
>
@@ -195,13 +199,13 @@ const ParameterField: FC<ParameterFieldProps> = ({
195
199
196
200
case "multi-select" : {
197
201
// Map parameter options to MultiSelectCombobox options format
198
- const comboboxOptions : Option [ ] = parameter . options . map ( ( opt ) => ( {
202
+ const options : Option [ ] = parameter . options . map ( ( opt ) => ( {
199
203
value : opt . value . value ,
200
204
label : opt . name ,
201
205
disable : false ,
202
206
} ) ) ;
203
207
204
- const defaultOptions : Option [ ] = JSON . parse ( defaultValue ) . map (
208
+ const selectedOptions : Option [ ] = JSON . parse ( value ) . map (
205
209
( val : string ) => {
206
210
const option = parameter . options . find ( ( o ) => o . value . value === val ) ;
207
211
return {
@@ -217,8 +221,8 @@ const ParameterField: FC<ParameterFieldProps> = ({
217
221
inputProps = { {
218
222
id : `${ id } -${ parameter . name } ` ,
219
223
} }
220
- options = { comboboxOptions }
221
- defaultOptions = { defaultOptions }
224
+ options = { options }
225
+ defaultOptions = { selectedOptions }
222
226
onChange = { ( newValues ) => {
223
227
const values = newValues . map ( ( option ) => option . value ) ;
224
228
onChange ( JSON . stringify ( values ) ) ;
@@ -254,7 +258,7 @@ const ParameterField: FC<ParameterFieldProps> = ({
254
258
< RadioGroup
255
259
onValueChange = { onChange }
256
260
disabled = { disabled }
257
- defaultValue = { defaultValue }
261
+ value = { value }
258
262
>
259
263
{ parameter . options . map ( ( option ) => (
260
264
< div
@@ -282,7 +286,6 @@ const ParameterField: FC<ParameterFieldProps> = ({
282
286
< Checkbox
283
287
id = { parameter . name }
284
288
checked = { value === "true" }
285
- defaultChecked = { defaultValue === "true" } // TODO: defaultChecked is always overridden by checked
286
289
onCheckedChange = { ( checked ) => {
287
290
onChange ( checked ? "true" : "false" ) ;
288
291
} }
@@ -299,14 +302,11 @@ const ParameterField: FC<ParameterFieldProps> = ({
299
302
< div className = "flex flex-row items-baseline gap-3" >
300
303
< Slider
301
304
className = "mt-2"
302
- defaultValue = { [
303
- Number (
304
- parameter . default_value . valid
305
- ? parameter . default_value . value
306
- : 0 ,
307
- ) ,
308
- ] }
309
- onValueChange = { ( [ value ] ) => onChange ( value . toString ( ) ) }
305
+ value = { [ Number ( localValue ?? 0 ) ] }
306
+ onValueChange = { ( [ value ] ) => {
307
+ setLocalValue ( value . toString ( ) ) ;
308
+ onChange ( value . toString ( ) ) ;
309
+ } }
310
310
min = { parameter . validations [ 0 ] ?. validation_min ?? 0 }
311
311
max = { parameter . validations [ 0 ] ?. validation_max ?? 100 }
312
312
disabled = { disabled }
@@ -319,8 +319,11 @@ const ParameterField: FC<ParameterFieldProps> = ({
319
319
return (
320
320
< Textarea
321
321
className = "max-w-2xl"
322
- defaultValue = { defaultValue }
323
- onChange = { ( e ) => onChange ( e . target . value ) }
322
+ value = { localValue }
323
+ onChange = { ( e ) => {
324
+ setLocalValue ( e . target . value ) ;
325
+ onChange ( e . target . value ) ;
326
+ } }
324
327
onInput = { ( e ) => {
325
328
const target = e . currentTarget ;
326
329
target . style . maxHeight = "700px" ;
@@ -354,8 +357,11 @@ const ParameterField: FC<ParameterFieldProps> = ({
354
357
return (
355
358
< Input
356
359
type = { inputType }
357
- defaultValue = { defaultValue }
358
- onChange = { ( e ) => onChange ( e . target . value ) }
360
+ value = { localValue }
361
+ onChange = { ( e ) => {
362
+ setLocalValue ( e . target . value ) ;
363
+ onChange ( e . target . value ) ;
364
+ } }
359
365
disabled = { disabled }
360
366
required = { parameter . required }
361
367
placeholder = {
0 commit comments