Skip to content

Commit 60b7dfe

Browse files
committed
Add indent guides and optimize group membership checks for presets in groups
1 parent 8d36bc6 commit 60b7dfe

2 files changed

Lines changed: 38 additions & 33 deletions

File tree

packages/ui/src/components/editor/panel/Presets/Presets.module.scss

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@
7272
}
7373
}
7474

75+
&__indent-guide {
76+
flex-shrink: 0;
77+
background-color: var(--vscode-tree-indentGuidesStroke);
78+
height: 100%;
79+
width: 1px;
80+
margin-right: 11px;
81+
margin-left: 4px;
82+
}
83+
7584
&__icon {
7685
display: flex;
7786

packages/ui/src/components/editor/panel/Presets/Presets.tsx

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)