@@ -10,7 +10,7 @@ import { useTasksApi } from "../hooks/useTasksApi";
1010
1111import { PromptInput } from "./PromptInput" ;
1212
13- import type { CreateTaskParams , TaskTemplate } from "@repo/shared" ;
13+ import type { CreateTaskParams , TaskPreset , TaskTemplate } from "@repo/shared" ;
1414
1515interface CreateTaskSectionProps {
1616 templates : readonly TaskTemplate [ ] ;
@@ -20,15 +20,16 @@ export function CreateTaskSection({ templates }: CreateTaskSectionProps) {
2020 const api = useTasksApi ( ) ;
2121 const [ prompt , setPrompt ] = useState ( "" ) ;
2222 const [ templateId , setTemplateId ] = useState ( templates [ 0 ] ?. id || "" ) ;
23- const [ presetId , setPresetId ] = useState ( "" ) ;
23+ const selectedTemplate = templates . find ( ( t ) => t . id === templateId ) ;
24+ const [ presetId , setPresetId ] = useState ( ( ) =>
25+ defaultPresetId ( selectedTemplate ?. presets ?? [ ] ) ,
26+ ) ;
2427
2528 const { mutate, isPending, error } = useMutation ( {
2629 mutationFn : ( params : CreateTaskParams ) => api . createTask ( params ) ,
2730 onSuccess : ( ) => setPrompt ( "" ) ,
2831 onError : ( err ) => logger . error ( "Failed to create task" , err ) ,
2932 } ) ;
30-
31- const selectedTemplate = templates . find ( ( t ) => t . id === templateId ) ;
3233 const presets = selectedTemplate ?. presets ?? [ ] ;
3334 const canSubmit = prompt . trim ( ) . length > 0 && selectedTemplate && ! isPending ;
3435
@@ -63,14 +64,20 @@ export function CreateTaskSection({ templates }: CreateTaskSectionProps) {
6364 className = "option-select"
6465 value = { templateId }
6566 onChange = { ( e ) => {
66- setTemplateId ( ( e . target as HTMLSelectElement ) . value ) ;
67- setPresetId ( "" ) ;
67+ const newId = ( e . target as HTMLSelectElement ) . value ;
68+ setTemplateId ( newId ) ;
69+ const newTemplate = templates . find ( ( t ) => t . id === newId ) ;
70+ setPresetId ( defaultPresetId ( newTemplate ?. presets ?? [ ] ) ) ;
6871 } }
6972 disabled = { isPending }
7073 >
7174 { templates . map ( ( template ) => (
72- < VscodeOption key = { template . id } value = { template . id } >
73- { template . displayName }
75+ < VscodeOption
76+ key = { template . id }
77+ value = { template . id }
78+ description = { template . description }
79+ >
80+ { template . name }
7481 </ VscodeOption >
7582 ) ) }
7683 </ VscodeSingleSelect >
@@ -86,9 +93,12 @@ export function CreateTaskSection({ templates }: CreateTaskSectionProps) {
8693 }
8794 disabled = { isPending }
8895 >
89- < VscodeOption value = "" > No preset</ VscodeOption >
9096 { presets . map ( ( preset ) => (
91- < VscodeOption key = { preset . id } value = { preset . id } >
97+ < VscodeOption
98+ key = { preset . id }
99+ value = { preset . id }
100+ description = { preset . description }
101+ >
92102 { preset . name }
93103 { preset . isDefault ? " (Default)" : "" }
94104 </ VscodeOption >
@@ -100,3 +110,10 @@ export function CreateTaskSection({ templates }: CreateTaskSectionProps) {
100110 </ div >
101111 ) ;
102112}
113+
114+ function defaultPresetId ( presets : readonly TaskPreset [ ] ) : string {
115+ if ( presets . length === 0 ) {
116+ return "" ;
117+ }
118+ return ( presets . find ( ( p ) => p . isDefault ) ?? presets [ 0 ] ) . id ;
119+ }
0 commit comments