1
1
import type { Interpolation , Theme } from "@emotion/react" ;
2
+ import FormControlLabel from "@mui/material/FormControlLabel" ;
2
3
import FormHelperText from "@mui/material/FormHelperText" ;
3
4
import TextField from "@mui/material/TextField" ;
4
5
import type * as TypesGen from "api/typesGenerated" ;
@@ -24,6 +25,7 @@ import { Pill } from "components/Pill/Pill";
24
25
import { RichParameterInput } from "components/RichParameterInput/RichParameterInput" ;
25
26
import { Spinner } from "components/Spinner/Spinner" ;
26
27
import { Stack } from "components/Stack/Stack" ;
28
+ import { Switch } from "components/Switch/Switch" ;
27
29
import { UserAutocomplete } from "components/UserAutocomplete/UserAutocomplete" ;
28
30
import { type FormikContextType , useFormik } from "formik" ;
29
31
import { generateWorkspaceName } from "modules/workspaces/generateWorkspaceName" ;
@@ -101,6 +103,7 @@ export const CreateWorkspacePageView: FC<CreateWorkspacePageViewProps> = ({
101
103
const [ suggestedName , setSuggestedName ] = useState ( ( ) =>
102
104
generateWorkspaceName ( ) ,
103
105
) ;
106
+ const [ showPresetParameters , setShowPresetParameters ] = useState ( false ) ;
104
107
105
108
const rerollSuggestedName = useCallback ( ( ) => {
106
109
setSuggestedName ( ( ) => generateWorkspaceName ( ) ) ;
@@ -273,33 +276,6 @@ export const CreateWorkspacePageView: FC<CreateWorkspacePageViewProps> = ({
273
276
</ Stack >
274
277
) }
275
278
276
- { presets . length > 0 && (
277
- < Stack direction = "column" spacing = { 2 } >
278
- < Stack direction = "row" spacing = { 2 } alignItems = "center" >
279
- < span css = { styles . description } >
280
- Select a preset to get started
281
- </ span >
282
- < FeatureStageBadge contentType = { "beta" } size = "md" />
283
- </ Stack >
284
- < Stack direction = "row" spacing = { 2 } >
285
- < SelectFilter
286
- label = "Preset"
287
- options = { presetOptions }
288
- onSelect = { ( option ) => {
289
- const index = presetOptions . findIndex (
290
- ( preset ) => preset . value === option ?. value ,
291
- ) ;
292
- if ( index === - 1 ) {
293
- return ;
294
- }
295
- setSelectedPresetIndex ( index ) ;
296
- } }
297
- placeholder = "Select a preset"
298
- selectedOption = { presetOptions [ selectedPresetIndex ] }
299
- />
300
- </ Stack >
301
- </ Stack >
302
- ) }
303
279
< div >
304
280
< TextField
305
281
{ ...getFieldHelpers ( "name" ) }
@@ -373,30 +349,89 @@ export const CreateWorkspacePageView: FC<CreateWorkspacePageViewProps> = ({
373
349
hence they require additional vertical spacing for better readability and
374
350
user experience. */ }
375
351
< FormFields css = { { gap : 36 } } >
352
+ { presets . length > 0 && (
353
+ < Stack direction = "column" spacing = { 2 } >
354
+ < Stack direction = "row" spacing = { 2 } alignItems = "center" >
355
+ < span css = { styles . description } >
356
+ Select a preset to get started
357
+ </ span >
358
+ < FeatureStageBadge contentType = { "beta" } size = "md" />
359
+ </ Stack >
360
+ < Stack direction = "column" spacing = { 2 } >
361
+ < Stack direction = "row" spacing = { 2 } >
362
+ < SelectFilter
363
+ label = "Preset"
364
+ options = { presetOptions }
365
+ onSelect = { ( option ) => {
366
+ const index = presetOptions . findIndex (
367
+ ( preset ) => preset . value === option ?. value ,
368
+ ) ;
369
+ if ( index === - 1 ) {
370
+ return ;
371
+ }
372
+ setSelectedPresetIndex ( index ) ;
373
+ } }
374
+ placeholder = "Select a preset"
375
+ selectedOption = { presetOptions [ selectedPresetIndex ] }
376
+ />
377
+ </ Stack >
378
+ < div
379
+ css = { {
380
+ display : "flex" ,
381
+ alignItems : "center" ,
382
+ gap : "8px" ,
383
+ } }
384
+ >
385
+ < Switch
386
+ id = "show-preset-parameters"
387
+ checked = { showPresetParameters }
388
+ onCheckedChange = { setShowPresetParameters }
389
+ />
390
+ < label
391
+ htmlFor = "show-preset-parameters"
392
+ css = { styles . description }
393
+ >
394
+ Show preset parameters
395
+ </ label >
396
+ </ div >
397
+ </ Stack >
398
+ </ Stack >
399
+ ) }
400
+
376
401
{ parameters . map ( ( parameter , index ) => {
377
402
const parameterField = `rich_parameter_values.${ index } ` ;
378
403
const parameterInputName = `${ parameterField } .value` ;
404
+ const isPresetParameter = presetParameterNames . includes (
405
+ parameter . name ,
406
+ ) ;
379
407
const isDisabled =
380
408
disabledParams ?. includes (
381
409
parameter . name . toLowerCase ( ) . replace ( / / g, "_" ) ,
382
410
) ||
383
411
creatingWorkspace ||
384
- presetParameterNames . includes ( parameter . name ) ;
412
+ isPresetParameter ;
413
+
414
+ // Hide preset parameters if showPresetParameters is false
415
+ if ( ! showPresetParameters && isPresetParameter ) {
416
+ return null ;
417
+ }
385
418
386
419
return (
387
- < RichParameterInput
388
- { ...getFieldHelpers ( parameterInputName ) }
389
- onChange = { async ( value ) => {
390
- await form . setFieldValue ( parameterField , {
391
- name : parameter . name ,
392
- value,
393
- } ) ;
394
- } }
395
- key = { parameter . name }
396
- parameter = { parameter }
397
- parameterAutofill = { autofillByName [ parameter . name ] }
398
- disabled = { isDisabled }
399
- />
420
+ < div key = { parameter . name } >
421
+ < RichParameterInput
422
+ { ...getFieldHelpers ( parameterInputName ) }
423
+ onChange = { async ( value ) => {
424
+ await form . setFieldValue ( parameterField , {
425
+ name : parameter . name ,
426
+ value,
427
+ } ) ;
428
+ } }
429
+ parameter = { parameter }
430
+ parameterAutofill = { autofillByName [ parameter . name ] }
431
+ disabled = { isDisabled }
432
+ isPreset = { isPresetParameter }
433
+ />
434
+ </ div >
400
435
) ;
401
436
} ) }
402
437
</ FormFields >
0 commit comments