@@ -213,39 +213,76 @@ export const CreateWorkspacePageViewExperimental: FC<
213
213
214
214
setPresetParameterNames ( selectedPreset . Parameters . map ( ( p ) => p . Name ) ) ;
215
215
216
- for ( const presetParameter of selectedPreset . Parameters ) {
216
+ const currentValues = form . values . rich_parameter_values ?? [ ] ;
217
+
218
+ const updates = selectedPreset . Parameters . map ( ( presetParameter ) => {
217
219
const parameterIndex = parameters . findIndex (
218
220
( p ) => p . name === presetParameter . Name ,
219
221
) ;
220
- if ( parameterIndex === - 1 ) continue ;
222
+ if ( parameterIndex === - 1 ) return null ;
221
223
222
224
const parameterField = `rich_parameter_values.${ parameterIndex } ` ;
225
+ const parameter = parameters [ parameterIndex ] ;
226
+ const currentValue = currentValues . find (
227
+ ( p ) => p . name === presetParameter . Name ,
228
+ ) ?. value ;
229
+
230
+ if ( currentValue !== presetParameter . Value ) {
231
+ return {
232
+ field : parameterField ,
233
+ fieldValue : {
234
+ name : presetParameter . Name ,
235
+ value : presetParameter . Value ,
236
+ } ,
237
+ parameter,
238
+ presetValue : presetParameter . Value ,
239
+ } ;
240
+ }
241
+ return null ;
242
+ } ) . filter (
243
+ ( update ) : update is NonNullable < typeof update > => update !== null ,
244
+ ) ;
245
+
246
+ if ( updates . length > 0 ) {
247
+ for ( const update of updates ) {
248
+ form . setFieldValue ( update . field , update . fieldValue ) ;
249
+ form . setFieldTouched ( update . parameter . name , true ) ;
250
+ }
223
251
224
- form . setFieldValue ( parameterField , {
225
- name : presetParameter . Name ,
226
- value : presetParameter . Value ,
227
- } ) ;
252
+ sendDynamicParamsRequest (
253
+ updates . map ( ( update ) => ( {
254
+ parameter : update . parameter ,
255
+ value : update . presetValue ,
256
+ } ) ) ,
257
+ ) ;
228
258
}
229
259
} , [
230
260
presetOptions ,
231
261
selectedPresetIndex ,
232
262
presets ,
233
263
form . setFieldValue ,
264
+ form . setFieldTouched ,
234
265
parameters ,
266
+ form . values . rich_parameter_values ,
235
267
] ) ;
236
268
237
269
// send the last user modified parameter and all touched parameters to the websocket
238
270
const sendDynamicParamsRequest = (
239
- parameter : PreviewParameter ,
240
- value : string ,
271
+ parameters : Array < { parameter : PreviewParameter ; value : string } > ,
241
272
) => {
242
273
const formInputs : Record < string , string > = { } ;
243
- formInputs [ parameter . name ] = value ;
244
- const parameters = form . values . rich_parameter_values ?? [ ] ;
274
+ const formParameters = form . values . rich_parameter_values ?? [ ] ;
275
+
276
+ for ( const { parameter, value } of parameters ) {
277
+ formInputs [ parameter . name ] = value ;
278
+ }
245
279
246
280
for ( const [ fieldName , isTouched ] of Object . entries ( form . touched ) ) {
247
- if ( isTouched && fieldName !== parameter . name ) {
248
- const param = parameters . find ( ( p ) => p . name === fieldName ) ;
281
+ if (
282
+ isTouched &&
283
+ ! parameters . some ( ( p ) => p . parameter . name === fieldName )
284
+ ) {
285
+ const param = formParameters . find ( ( p ) => p . name === fieldName ) ;
249
286
if ( param ?. value ) {
250
287
formInputs [ fieldName ] = param . value ;
251
288
}
@@ -260,12 +297,20 @@ export const CreateWorkspacePageViewExperimental: FC<
260
297
parameterField : string ,
261
298
value : string ,
262
299
) => {
300
+ const currentFormValue = form . values . rich_parameter_values ?. find (
301
+ ( p ) => p . name === parameter . name ,
302
+ ) ?. value ;
303
+
263
304
await form . setFieldValue ( parameterField , {
264
305
name : parameter . name ,
265
306
value,
266
307
} ) ;
267
- form . setFieldTouched ( parameter . name , true ) ;
268
- sendDynamicParamsRequest ( parameter , value ) ;
308
+
309
+ // Only send the request if the value has changed from the form value
310
+ if ( currentFormValue !== value ) {
311
+ form . setFieldTouched ( parameter . name , true ) ;
312
+ sendDynamicParamsRequest ( [ { parameter, value } ] ) ;
313
+ }
269
314
} ;
270
315
271
316
useSyncFormParameters ( {
0 commit comments