@@ -104,23 +104,19 @@ export const Presets: React.FC<Presets.Props> = (props) => {
104104 return visible_presets
105105 }
106106
107- const is_preset_in_group = ( original_index : number | undefined ) : boolean => {
108- if ( original_index === undefined || original_index === 0 ) {
109- return false
110- }
111- for ( let i = original_index - 1 ; i >= 0 ; i -- ) {
112- const p = props . presets [ i ]
113- // group header
114- if ( ! p . chatbot && p . name ) {
115- return true
116- }
117- // separator
118- if ( ! p . chatbot && ! p . name ) {
119- return false
107+ const preset_indices_in_group = new Set < number > ( )
108+ let current_group_active = false
109+ props . presets . forEach ( ( p , index ) => {
110+ if ( ! p . chatbot ) {
111+ if ( p . name ) {
112+ current_group_active = true
113+ } else {
114+ current_group_active = false
120115 }
116+ } else if ( current_group_active ) {
117+ preset_indices_in_group . add ( index )
121118 }
122- return false
123- }
119+ } )
124120
125121 const sortable_list = with_ids ( get_visible_presets ( props . presets ) )
126122
@@ -443,24 +439,24 @@ export const Presets: React.FC<Presets.Props> = (props) => {
443439 >
444440 < span className = "codicon codicon-gripper" />
445441 </ div >
446- { preset . chatbot && (
447- < Checkbox
448- checked = {
449- ! ! preset . is_selected &&
450- is_preset_in_group ( preset . original_index )
451- }
452- on_change = { ( ) = >
453- props . on_toggle_selected_preset ( preset . name ! )
454- }
455- on_click = { ( e ) => e . stopPropagation ( ) }
456- title = {
457- ! is_preset_in_group ( preset . original_index )
458- ? 'Place in a group to select for multi-run'
459- : ''
460- }
461- disabled = { ! is_preset_in_group ( preset . original_index ) }
462- />
463- ) }
442+ { preset . chatbot &&
443+ preset_indices_in_group . has ( preset . original_index ) && (
444+ < div
445+ className = {
446+ styles [ 'presets__item__left__indent-guide' ]
447+ }
448+ / >
449+ ) }
450+ { preset . chatbot &&
451+ preset_indices_in_group . has ( preset . original_index ) && (
452+ < Checkbox
453+ checked = { ! ! preset . is_selected }
454+ on_change = { ( ) =>
455+ props . on_toggle_selected_preset ( preset . name ! )
456+ }
457+ on_click = { ( e ) => e . stopPropagation ( ) }
458+ />
459+ ) }
464460 { preset . chatbot && (
465461 < div className = { styles . presets__item__left__icon } >
466462 < Icon variant = { chatbot_to_icon [ preset . chatbot ] } />
0 commit comments