Skip to content

Commit c8cc5d2

Browse files
committed
Add close buttons and proper disposal to all quick pick dialogs
1 parent 212c9f4 commit c8cc5d2

5 files changed

Lines changed: 286 additions & 57 deletions

File tree

packages/vscode/src/commands/apply-context-command/apply-context-command.ts

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ export function apply_context_command(
8181
main_quick_pick.title = 'Select Context Source'
8282
main_quick_pick.items = final_quick_pick_options
8383
main_quick_pick.placeholder = 'Select option'
84+
main_quick_pick.buttons = [
85+
{ iconPath: new vscode.ThemeIcon('close'), tooltip: 'Close' }
86+
]
8487
if (last_main_selection_value) {
8588
const active_item = final_quick_pick_options.find(
8689
(opt) => opt.value === last_main_selection_value
@@ -97,17 +100,24 @@ export function apply_context_command(
97100
| undefined
98101
>((resolve) => {
99102
let is_accepted = false
100-
main_quick_pick.onDidAccept(() => {
101-
is_accepted = true
102-
resolve(main_quick_pick.selectedItems[0])
103-
main_quick_pick.hide()
104-
})
105-
main_quick_pick.onDidHide(() => {
106-
if (!is_accepted) {
107-
resolve(undefined)
108-
}
109-
main_quick_pick.dispose()
110-
})
103+
const disposables: vscode.Disposable[] = []
104+
disposables.push(
105+
main_quick_pick.onDidTriggerButton((_button) => {
106+
main_quick_pick.hide()
107+
}),
108+
main_quick_pick.onDidAccept(() => {
109+
is_accepted = true
110+
resolve(main_quick_pick.selectedItems[0])
111+
main_quick_pick.hide()
112+
}),
113+
main_quick_pick.onDidHide(() => {
114+
if (!is_accepted) {
115+
resolve(undefined)
116+
}
117+
disposables.forEach((d) => d.dispose())
118+
main_quick_pick.dispose()
119+
})
120+
)
111121
main_quick_pick.show()
112122
})
113123

packages/vscode/src/commands/save-context-command.ts

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,9 @@ export function save_context_command(
411411
quick_pick.title = 'Save Context'
412412
quick_pick.items = quick_pick_storage_options
413413
quick_pick.placeholder = 'Where do you want to save this context?'
414+
quick_pick.buttons = [
415+
{ iconPath: new vscode.ThemeIcon('close'), tooltip: 'Close' }
416+
]
414417

415418
if (last_save_location) {
416419
const active_item = quick_pick_storage_options.find(
@@ -425,17 +428,24 @@ export function save_context_command(
425428
(vscode.QuickPickItem & { value: 'internal' | 'file' }) | undefined
426429
>((resolve) => {
427430
let is_accepted = false
428-
quick_pick.onDidAccept(() => {
429-
is_accepted = true
430-
resolve(quick_pick.selectedItems[0])
431-
quick_pick.hide()
432-
})
433-
quick_pick.onDidHide(() => {
434-
if (!is_accepted) {
435-
resolve(undefined)
436-
}
437-
quick_pick.dispose()
438-
})
431+
const disposables: vscode.Disposable[] = []
432+
disposables.push(
433+
quick_pick.onDidTriggerButton((_button) => {
434+
quick_pick.hide()
435+
}),
436+
quick_pick.onDidAccept(() => {
437+
is_accepted = true
438+
resolve(quick_pick.selectedItems[0])
439+
quick_pick.hide()
440+
}),
441+
quick_pick.onDidHide(() => {
442+
if (!is_accepted) {
443+
resolve(undefined)
444+
}
445+
disposables.forEach((d) => d.dispose())
446+
quick_pick.dispose()
447+
})
448+
)
439449
quick_pick.show()
440450
})
441451

packages/vscode/src/views/panel/backend/message-handlers/handle-at-sign-quick-pick/handle-at-sign-quick-pick.ts

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,38 @@ const at_sign_quick_pick = async (params: {
5959
const quick_pick_items_to_show = all_quick_pick_items
6060
quick_pick_items_to_show.sort((a, b) => natural_sort(a.fullPath, b.fullPath))
6161

62-
const selected_path_item = await vscode.window.showQuickPick(
63-
quick_pick_items_to_show,
64-
{
65-
placeHolder: 'Select a path to place in the prompt field',
66-
matchOnDescription: true,
67-
title: 'Reference File'
62+
const quick_pick = vscode.window.createQuickPick<QuickPickItem>()
63+
quick_pick.items = quick_pick_items_to_show
64+
quick_pick.placeholder = 'Select a path to place in the prompt field'
65+
quick_pick.matchOnDescription = true
66+
quick_pick.title = 'Reference File'
67+
quick_pick.buttons = [
68+
{ iconPath: new vscode.ThemeIcon('close'), tooltip: 'Close' }
69+
]
70+
71+
const selected_path_item = await new Promise<QuickPickItem | undefined>(
72+
(resolve) => {
73+
let is_accepted = false
74+
const disposables: vscode.Disposable[] = []
75+
76+
disposables.push(
77+
quick_pick.onDidTriggerButton((_button) => {
78+
quick_pick.hide()
79+
}),
80+
quick_pick.onDidAccept(() => {
81+
is_accepted = true
82+
resolve(quick_pick.selectedItems[0])
83+
quick_pick.hide()
84+
}),
85+
quick_pick.onDidHide(() => {
86+
if (!is_accepted) {
87+
resolve(undefined)
88+
}
89+
disposables.forEach((d) => d.dispose())
90+
quick_pick.dispose()
91+
})
92+
)
93+
quick_pick.show()
6894
}
6995
)
7096

packages/vscode/src/views/panel/backend/message-handlers/handle-show-prompt-template-quick-pick.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ export const handle_show_prompt_template_quick_pick = async (
8080
templates_quick_pick.matchOnDetail = true
8181
templates_quick_pick.title = 'Prompt Templates'
8282
templates_quick_pick.placeholder = 'Manage and use your prompt templates'
83+
templates_quick_pick.buttons = [
84+
{ iconPath: new vscode.ThemeIcon('close'), tooltip: 'Close' }
85+
]
8386

8487
const edit_button = {
8588
iconPath: new vscode.ThemeIcon('edit'),
@@ -246,6 +249,9 @@ export const handle_show_prompt_template_quick_pick = async (
246249
let is_template_accepted = false
247250

248251
disposables.push(
252+
templates_quick_pick.onDidTriggerButton((_button) => {
253+
templates_quick_pick.hide()
254+
}),
249255
templates_quick_pick.onDidAccept(async () => {
250256
const [selected_template] = templates_quick_pick.selectedItems
251257
if (!selected_template) {

0 commit comments

Comments
 (0)