@@ -5,16 +5,10 @@ import { ErrorAlert } from "components/Alert/ErrorAlert";
5
5
import { Avatar } from "components/Avatar/Avatar" ;
6
6
import { Badge } from "components/Badge/Badge" ;
7
7
import { Button } from "components/Button/Button" ;
8
+ import { Combobox } from "components/Combobox/Combobox" ;
8
9
import { Input } from "components/Input/Input" ;
9
10
import { Label } from "components/Label/Label" ;
10
11
import { Link } from "components/Link/Link" ;
11
- import {
12
- Select ,
13
- SelectContent ,
14
- SelectItem ,
15
- SelectTrigger ,
16
- SelectValue ,
17
- } from "components/Select/Select" ;
18
12
import { Spinner } from "components/Spinner/Spinner" ;
19
13
import { Switch } from "components/Switch/Switch" ;
20
14
import {
@@ -186,30 +180,31 @@ export const CreateWorkspacePageViewExperimental: FC<
186
180
} , [ form . submitCount , form . errors ] ) ;
187
181
188
182
const [ presetOptions , setPresetOptions ] = useState ( [
189
- { label : "None" , value : "None " } ,
183
+ { displayName : "None" , value : "undefined" , icon : "" , description : " " } ,
190
184
] ) ;
185
+ const [ selectedPresetIndex , setSelectedPresetIndex ] = useState ( 0 ) ;
186
+ // Build options and keep default label/value in sync
191
187
useEffect ( ( ) => {
192
- setPresetOptions ( [
193
- { label : "None" , value : "None " } ,
188
+ const options = [
189
+ { displayName : "None" , value : "undefined" , icon : "" , description : " " } ,
194
190
...presets . map ( ( preset ) => ( {
195
- label : preset . Default ? `${ preset . Name } (Default)` : preset . Name ,
191
+ displayName : preset . Default ? `${ preset . Name } (Default)` : preset . Name ,
196
192
value : preset . ID ,
193
+ icon : preset . Icon ,
194
+ description : preset . Description ,
197
195
} ) ) ,
198
- ] ) ;
199
- } , [ presets ] ) ;
200
-
201
- const [ selectedPresetIndex , setSelectedPresetIndex ] = useState ( 0 ) ;
202
-
203
- // Set default preset when presets are loaded
204
- useEffect ( ( ) => {
205
- const defaultPreset = presets . find ( ( preset ) => preset . Default ) ;
196
+ ] ;
197
+ setPresetOptions ( options ) ;
198
+ const defaultPreset = presets . find ( ( p ) => p . Default ) ;
206
199
if ( defaultPreset ) {
207
- // +1 because "None" is at index 0
208
- const defaultIndex =
209
- presets . findIndex ( ( preset ) => preset . ID === defaultPreset . ID ) + 1 ;
210
- setSelectedPresetIndex ( defaultIndex ) ;
200
+ const idx = presets . indexOf ( defaultPreset ) + 1 ; // +1 for "None"
201
+ setSelectedPresetIndex ( idx ) ;
202
+ form . setFieldValue ( "template_version_preset_id" , defaultPreset . ID ) ;
203
+ } else {
204
+ setSelectedPresetIndex ( 0 ) ; // Explicitly set to "None"
205
+ form . setFieldValue ( "template_version_preset_id" , undefined ) ;
211
206
}
212
- } , [ presets ] ) ;
207
+ } , [ presets , form . setFieldValue ] ) ;
213
208
214
209
const [ presetParameterNames , setPresetParameterNames ] = useState < string [ ] > (
215
210
[ ] ,
@@ -572,33 +567,30 @@ export const CreateWorkspacePageViewExperimental: FC<
572
567
</ div >
573
568
< div className = "flex flex-col gap-4" >
574
569
< div className = "max-w-lg" >
575
- < Select
576
- value = { presetOptions [ selectedPresetIndex ] ?. value }
577
- onValueChange = { ( option ) => {
570
+ < Combobox
571
+ value = {
572
+ presetOptions [ selectedPresetIndex ] ?. displayName || ""
573
+ }
574
+ options = { presetOptions }
575
+ placeholder = "Select a preset"
576
+ onSelect = { ( value ) => {
578
577
const index = presetOptions . findIndex (
579
- ( preset ) => preset . value === option ,
578
+ ( preset ) => preset . value === value ,
580
579
) ;
581
580
if ( index === - 1 ) {
582
581
return ;
583
582
}
584
583
setSelectedPresetIndex ( index ) ;
585
584
form . setFieldValue (
586
585
"template_version_preset_id" ,
587
- index === 0 ? undefined : option ,
586
+ // "undefined" string is equivalent to using None option
587
+ // Combobox requires a value in order to correctly highlight the None option
588
+ presetOptions [ index ] . value === "undefined"
589
+ ? undefined
590
+ : presetOptions [ index ] . value ,
588
591
) ;
589
592
} }
590
- >
591
- < SelectTrigger >
592
- < SelectValue placeholder = { "Select a preset" } />
593
- </ SelectTrigger >
594
- < SelectContent >
595
- { presetOptions . map ( ( option ) => (
596
- < SelectItem key = { option . value } value = { option . value } >
597
- { option . label }
598
- </ SelectItem >
599
- ) ) }
600
- </ SelectContent >
601
- </ Select >
593
+ />
602
594
</ div >
603
595
{ /* Only show the preset parameter visibility toggle if preset parameters are actually being modified, otherwise it is ineffectual */ }
604
596
{ presetParameterNames . length > 0 && (
0 commit comments