dce-dev-wizard
Version:
Wizard for managing development apps at Harvard DCE.
77 lines • 2.7 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var clear_1 = __importDefault(require("clear"));
// Import shared helpers
var print_1 = __importDefault(require("./print"));
var prompt_1 = __importDefault(require("./prompt"));
/**
* Show a chooser between many options
* @author Gabe Abrams
* @param question the question to ask
* @param options list of options to choose from
* @param title main title to show above the choices
* @param dontClear if true, don't clear the console before
* @returns chosen option
*/
var showChooser = function (opts) {
var question = opts.question, options = opts.options, title = opts.title, dontClear = opts.dontClear;
// Print the header
if (!dontClear) {
(0, clear_1.default)();
}
if (title) {
print_1.default.title(title);
console.log('');
}
print_1.default.subtitle(question);
// Make sure all options have tags
var nextNumber = 1;
var optionsWithTags = options.map(function (option) {
// Get/generate a tag
var tag = option.tag;
if (!tag) {
tag = String(nextNumber);
nextNumber += 1;
}
// Return complete option
return __assign(__assign({}, option), { tag: tag });
});
// Print options
for (var i = 0; i < optionsWithTags.length; i++) {
console.log("".concat(optionsWithTags[i].tag, " - ").concat(optionsWithTags[i].description));
}
// Ask user to choose
var responseTag = (0, prompt_1.default)('> ').trim();
// Find the appropriate option
for (var i = 0; i < optionsWithTags.length; i++) {
if (responseTag.toLowerCase() === optionsWithTags[i].tag.toLowerCase()) {
// Found the right option
return __assign(__assign({}, optionsWithTags[i]), { index: i });
}
}
// No tag found
(0, clear_1.default)();
print_1.default.title('Invalid Choice');
console.log('');
print_1.default.enterToContinue();
return showChooser({
question: question,
options: optionsWithTags,
});
};
exports.default = showChooser;
//# sourceMappingURL=showChooser.js.map