teamsfx-extension
Version:
Create, debug, and deploy Teams apps with Teams Toolkit
171 lines • 7.75 kB
JavaScript
;
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