in src/handler/utils.ts [37:92]
export async function createPickBox<T extends Identifiable>(pickMetadata: IPickMetadata<T>): Promise<boolean> {
const disposables: Disposable[] = [];
const result: boolean = await new Promise<boolean>((resolve, reject) => {
const pickBox: QuickPick<IHandlerItem<T>> = window.createQuickPick<IHandlerItem<T>>();
pickBox.title = pickMetadata.title;
pickBox.placeholder = pickMetadata.placeholder;
pickBox.items = pickMetadata.items;
pickBox.ignoreFocusOut = true;
if (pickMetadata.metadata.pickSteps.length > 0) {
pickBox.buttons = [(QuickInputButtons.Back)];
disposables.push(
pickBox.onDidTriggerButton((item) => {
if (item === QuickInputButtons.Back) {
return resolve(false);
}
})
);
}
disposables.push(
pickBox.onDidAccept(() => {
if (!pickBox.selectedItems?.[0]) {
return;
}
if (pickMetadata.pickStep instanceof SpecifyLanguageStep) {
pickMetadata.metadata.language = pickBox.selectedItems[0].label?.toLowerCase();
} else if (pickMetadata.pickStep instanceof SpecifyJavaVersionStep) {
pickMetadata.metadata.javaVersion = pickBox.selectedItems[0].label;
} else if (pickMetadata.pickStep instanceof SpecifyPackagingStep) {
pickMetadata.metadata.packaging = pickBox.selectedItems[0].label?.toLowerCase();
} else if (pickMetadata.pickStep instanceof SpecifyBootVersionStep) {
pickMetadata.metadata.bootVersion = pickBox.selectedItems[0].value?.id;
}
pickMetadata.metadata.pickSteps.push(pickMetadata.pickStep);
return resolve(true);
}),
pickBox.onDidHide(() => {
if (pickMetadata.pickStep instanceof SpecifyLanguageStep) {
return reject(new OperationCanceledError("Language not specified."));
} else if (pickMetadata.pickStep instanceof SpecifyJavaVersionStep) {
return reject(new OperationCanceledError("Java version not specified."));
} else if (pickMetadata.pickStep instanceof SpecifyPackagingStep) {
return reject(new OperationCanceledError("Packaging not specified."));
} else if (pickMetadata.pickStep instanceof SpecifyBootVersionStep) {
return reject(new OperationCanceledError("BootVersion not specified."));
}
return reject(new Error("Unknown picking step"));
})
);
disposables.push(pickBox);
pickBox.show();
});
for (const d of disposables) {
d.dispose();
}
return result;
}