export async function createPickBox()

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;
}