UNPKG

teamsfx-extension

Version:

Create, debug, and deploy Teams apps with Teams Toolkit

171 lines 7.75 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.multiQuickPick = exports.FxMultiQuickPickItem = void 0; const teamsfx_api_1 = require("@microsoft/teamsfx-api"); const vscode_1 = require("vscode"); const error_1 = require("../error"); const extensionVariables_1 = require("../extensionVariables"); class FxMultiQuickPickItem { constructor(option) { if (typeof option === "string") { this.id = option; this.label = option; this.rawLabel = option; this.picked = false; } else { const item = option; this.id = item.id; this.label = item.label; this.description = item.description; this.detail = item.detail; this.rawLabel = item.label; this.data = item.data; this.picked = false; } } getOptionItem() { return { id: this.id, label: this.rawLabel, description: this.description, detail: this.detail, data: this.data, }; } click() { this.picked = !this.picked; this.label = (this.picked === true ? "$(check) " : " ") + this.rawLabel; } check() { this.picked = true; this.label = "$(check) " + this.rawLabel; } uncheck() { this.picked = false; this.label = " " + this.rawLabel; } } exports.FxMultiQuickPickItem = FxMultiQuickPickItem; function multiQuickPick(option) { return __awaiter(this, void 0, void 0, function* () { const okButton = { iconPath: vscode_1.Uri.file(extensionVariables_1.ext.context.asAbsolutePath("media/ok.svg")), tooltip: "ok", }; const disposables = []; try { const quickPick = vscode_1.window.createQuickPick(); disposables.push(quickPick); quickPick.title = option.title; if (option.backButton) quickPick.buttons = [vscode_1.QuickInputButtons.Back, okButton]; else quickPick.buttons = [okButton]; quickPick.placeholder = option.placeholder; quickPick.ignoreFocusOut = true; quickPick.matchOnDescription = true; quickPick.matchOnDetail = true; quickPick.canSelectMany = false; // quickPick.step = option.step; // quickPick.totalSteps = option.totalSteps; let previousSelectedItems = []; let selectNum = option.defaultValue ? option.defaultValue.length : 0; const firstItem = new FxMultiQuickPickItem({ description: "", detail: `${option.prompt ? option.prompt + ", p" : "P"}ress <Enter> to continue, press <Alt+LeftArrow> to go back. `, id: "", label: `$(checklist) Selected ${selectNum} item${selectNum > 1 ? "s" : ""}`, }); return yield new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { const onDidAccept = () => __awaiter(this, void 0, void 0, function* () { const item = quickPick.selectedItems[0]; if (item === undefined || item === firstItem) { const selectedItems = quickPick.items.filter((i) => i.picked); const strArray = Array.from(selectedItems.map((i) => i.id)); if (option.validation) { const validateRes = yield option.validation(strArray); if (validateRes) { return; } } if (option.returnObject) resolve({ type: teamsfx_api_1.InputResultType.sucess, result: selectedItems.map((i) => i.getOptionItem()), }); else resolve({ type: teamsfx_api_1.InputResultType.sucess, result: selectedItems.map((i) => i.id) }); } item.click(); if (option.onDidChangeSelection) { const newIds = (yield option.onDidChangeSelection(quickPick.items.filter((i) => i.picked).map((i) => i.getOptionItem()), previousSelectedItems)).sort(); previousSelectedItems = []; quickPick.items.forEach((i) => { if (newIds.includes(i.id)) { i.check(); previousSelectedItems.push(i.getOptionItem()); } else i.uncheck(); }); } selectNum = quickPick.items.filter((i) => i.picked).length; firstItem.label = `$(checklist) Selected ${selectNum} item${selectNum > 1 ? "s" : ""}`; quickPick.items = quickPick.items; }); disposables.push(quickPick.onDidAccept(onDidAccept), quickPick.onDidHide(() => { resolve({ type: teamsfx_api_1.InputResultType.cancel }); })); disposables.push(quickPick.onDidTriggerButton((button) => { if (button === vscode_1.QuickInputButtons.Back) resolve({ type: teamsfx_api_1.InputResultType.back }); else onDidAccept(); })); try { // set items const items = [firstItem]; option.items.forEach((element) => { items.push(new FxMultiQuickPickItem(element)); }); // default if (option.defaultValue) { const ids = option.defaultValue; items.forEach((i) => { if (ids.includes(i.id)) { i.check(); } }); previousSelectedItems = items.filter((i) => i.picked).map((i) => i.getOptionItem()); } quickPick.items = items; disposables.push(quickPick); quickPick.show(); } catch (err) { resolve({ type: teamsfx_api_1.InputResultType.error, error: teamsfx_api_1.returnSystemError(err, error_1.ExtensionSource, error_1.ExtensionErrors.UnknwonError), }); } })); } finally { disposables.forEach((d) => { d.dispose(); }); } }); } exports.multiQuickPick = multiQuickPick; //# sourceMappingURL=quickpick.js.map