Skip to content

Commit 9538f9f

Browse files
committed
Correct preset deletion confirmation logic and refine group quick pick navigation and button display
1 parent 675b861 commit 9538f9f

3 files changed

Lines changed: 79 additions & 47 deletions

File tree

‎packages/vscode/src/views/panel/backend/message-handlers/handle-create-group.ts‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ export const handle_create_group = async (
5050
new_group.isCollapsed = !!options.instant
5151
updated_presets = [new_group, ...current_presets]
5252
} else {
53-
new_group.isCollapsed = !!options.instant
5453
updated_presets = [...current_presets, new_group]
5554
}
5655

‎packages/vscode/src/views/panel/backend/message-handlers/handle-delete-preset.ts‎

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,36 @@ export const handle_delete_preset = async (
2121
const deleted_preset = current_presets[preset_index]
2222
const item_type = deleted_preset.chatbot ? 'preset' : 'group'
2323

24-
const is_unnamed = !preset_name || /^\(\d+\)$/.test(preset_name.trim())
25-
const display_preset_name = is_unnamed ? 'Unnamed' : preset_name
26-
27-
const delete_button = 'Delete'
28-
const result = await vscode.window.showInformationMessage(
29-
'Please confirm',
30-
{
31-
modal: true,
32-
detail: is_unnamed
33-
? `Are you sure you want to delete this ${item_type}?`
34-
: `Are you sure you want to delete ${item_type} "${display_preset_name}"?`
35-
},
36-
delete_button
37-
)
38-
39-
if (result != delete_button) {
40-
return
24+
let should_show_confirmation = true
25+
if (item_type == 'group') {
26+
const next_preset = current_presets[preset_index + 1]
27+
const is_empty = !next_preset || !next_preset.chatbot
28+
const has_affixes =
29+
!!deleted_preset.promptPrefix || !!deleted_preset.promptSuffix
30+
if (is_empty && !has_affixes) {
31+
should_show_confirmation = false
32+
}
33+
}
34+
35+
if (should_show_confirmation) {
36+
const is_unnamed = !preset_name || /^\(\d+\)$/.test(preset_name.trim())
37+
const display_preset_name = is_unnamed ? 'Unnamed' : preset_name
38+
39+
const delete_button = 'Delete'
40+
const result = await vscode.window.showInformationMessage(
41+
'Please confirm',
42+
{
43+
modal: true,
44+
detail: is_unnamed
45+
? `Are you sure you want to delete this ${item_type}?`
46+
: `Are you sure you want to delete ${item_type} "${display_preset_name}"?`
47+
},
48+
delete_button
49+
)
50+
51+
if (result != delete_button) {
52+
return
53+
}
4154
}
4255

4356
const updated_presets = current_presets.filter((p) => p.name != preset_name)

‎packages/vscode/src/views/panel/backend/message-handlers/handle-send-prompt.ts‎

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,6 @@ async function show_presets_in_group_quick_pick(params: {
268268
}
269269
}
270270

271-
if (presets_in_group.length === 0) {
272-
vscode.window.showWarningMessage('This group contains no presets.')
273-
return null
274-
}
275-
276271
const quick_pick = vscode.window.createQuickPick<
277272
vscode.QuickPickItem & { preset_name: string }
278273
>()
@@ -424,23 +419,44 @@ async function show_preset_quick_pick(params: {
424419
}
425420
}
426421

427-
const preset_name_from_group = await show_presets_in_group_quick_pick({
428-
...params,
429-
group_name: group_name
430-
})
422+
const presets_in_group: ConfigPresetFormat[] = []
423+
if (group_name == 'Ungrouped') {
424+
const first_group_index = presets.findIndex((p) => !p.chatbot)
425+
const ungrouped_presets =
426+
first_group_index == -1
427+
? presets
428+
: presets.slice(0, first_group_index)
429+
presets_in_group.push(...ungrouped_presets.filter((p) => p.chatbot))
430+
} else {
431+
const group_index = presets.findIndex((p) => p.name === group_name)
432+
if (group_index != -1) {
433+
for (let i = group_index + 1; i < presets.length; i++) {
434+
const preset = presets[i]
435+
if (!preset.chatbot) break
436+
presets_in_group.push(preset)
437+
}
438+
}
439+
}
431440

432-
if (preset_name_from_group === BACK_ACTION) {
433-
// Fall through to show the main quick pick
434-
group_to_highlight_on_back = group_name
435-
} else if (preset_name_from_group) {
436-
update_last_used_preset_or_group({
437-
panel_provider,
438-
preset_name: preset_name_from_group,
441+
if (presets_in_group.length > 0) {
442+
const preset_name_from_group = await show_presets_in_group_quick_pick({
443+
...params,
439444
group_name: group_name
440445
})
441-
return [preset_name_from_group]
442-
} else {
443-
return [] // User dismissed quick pick
446+
447+
if (preset_name_from_group === BACK_ACTION) {
448+
// Fall through to show the main quick pick
449+
group_to_highlight_on_back = group_name
450+
} else if (preset_name_from_group) {
451+
update_last_used_preset_or_group({
452+
panel_provider,
453+
preset_name: preset_name_from_group,
454+
group_name: group_name
455+
})
456+
return [preset_name_from_group]
457+
} else {
458+
return [] // User dismissed quick pick
459+
}
444460
}
445461
}
446462
}
@@ -481,7 +497,7 @@ async function show_preset_quick_pick(params: {
481497
label: 'Ungrouped',
482498
group_name: 'Ungrouped',
483499
description,
484-
buttons: [run_group_button]
500+
buttons: selected_presets_count > 0 ? [run_group_button] : undefined
485501
})
486502
}
487503

@@ -497,13 +513,16 @@ async function show_preset_quick_pick(params: {
497513
if (p_in_group.isSelected) selected_presets_count++
498514
}
499515

500-
const description = `${group_presets_count} ${
501-
group_presets_count == 1 ? 'preset' : 'presets'
502-
}${
503-
selected_presets_count > 0
504-
? ` · ${selected_presets_count} selected`
505-
: ''
506-
}`
516+
let description = ''
517+
if (group_presets_count > 0) {
518+
description = `${group_presets_count} ${
519+
group_presets_count == 1 ? 'preset' : 'presets'
520+
}`
521+
if (selected_presets_count > 0) {
522+
description += ` · ${selected_presets_count} selected`
523+
}
524+
}
525+
507526
const is_unnamed_group =
508527
!preset.name || /^\(\d+\)$/.test(preset.name.trim())
509528
items.push({
@@ -512,7 +531,7 @@ async function show_preset_quick_pick(params: {
512531
: preset.name.replace(/ \(\d+\)$/, ''),
513532
group_name: preset.name,
514533
description,
515-
buttons: [run_group_button]
534+
buttons: selected_presets_count > 0 ? [run_group_button] : undefined
516535
})
517536
}
518537
}
@@ -789,9 +808,10 @@ async function resolve_presets(params: {
789808
const last_preset_name =
790809
params.context.workspaceState.get<string>(last_selected_preset_key) ??
791810
params.context.globalState.get<string>(last_selected_preset_key)
811+
792812
if (last_preset_name !== undefined) {
793813
const preset = all_presets.find((p) => p.name === last_preset_name)
794-
if (preset) {
814+
if (preset && preset.chatbot) {
795815
if (get_is_preset_disabled(preset)) {
796816
if (
797817
!is_in_code_completions_mode &&

0 commit comments

Comments
 (0)