public async run()

in src/archetype/createProject/SelectArchetypeStep.ts [22:62]


    public async run(metadata: IProjectCreationMetadata): Promise<StepResult> {
        const disposables: Disposable[] = [];
        const specifyAchetypePromise = new Promise<StepResult>(async (resolve, _reject) => {
            const pickBox: QuickPick<IArchetypePickItem> = window.createQuickPick<IArchetypePickItem>();
            pickBox.title = "Create Maven Project";
            pickBox.placeholder = "Select an archetype ...";
            pickBox.matchOnDescription = true;
            pickBox.ignoreFocusOut = true;
            pickBox.items = await this.getArchetypePickItems(false);
            disposables.push(
                pickBox.onDidTriggerButton(async (item) => {
                    if (item === QuickInputButtons.Back) {
                        pickBox.items = await this.getArchetypePickItems(false);
                        pickBox.buttons = [];
                    }
                }),
                pickBox.onDidAccept(async () => {
                    if (pickBox.selectedItems[0].archetype === undefined) {
                        pickBox.items = await this.getArchetypePickItems(true);
                        pickBox.buttons = [QuickInputButtons.Back];
                    } else {
                        metadata.archetypeArtifactId = pickBox.selectedItems[0].archetype.artifactId;
                        metadata.archetypeGroupId = pickBox.selectedItems[0].archetype.groupId;
                        metadata.archetype = pickBox.selectedItems[0].archetype;
                        resolve(StepResult.NEXT);
                    }
                }),
                pickBox.onDidHide(() => {
                    resolve(StepResult.STOP);
                })
            );
            disposables.push(pickBox);
            pickBox.show();
        });

        try {
            return await specifyAchetypePromise;
        } finally {
            disposables.forEach(d => d.dispose());
        }
    }