kui-shell
Version:
This is the monorepo for Kui, the hybrid command-line/GUI electron-based Kubernetes tool
163 lines • 6.67 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 });
const sidecar_1 = require("../../webapp/views/sidecar");
const bottom_stripe_1 = require("../../webapp/bottom-stripe");
const table_1 = require("../../webapp/models/table");
const table_2 = require("../../webapp/views/table");
const types_1 = require("./types");
const content_types_1 = require("./content-types");
function format(tab, mmr, resource) {
return __awaiter(this, void 0, void 0, function* () {
if (!content_types_1.hasContent(resource)) {
return format(tab, mmr, { content: resource });
}
else if (content_types_1.isFunctionContent(resource)) {
return format(tab, mmr, yield resource.content(tab, mmr));
}
else if (content_types_1.isCommandStringContent(resource)) {
const content = yield tab.REPL.qexec(resource.content);
return format(tab, mmr, content);
}
else if (sidecar_1.isCustomSpec(resource.content)) {
return resource.content;
}
else if (table_1.isTable(resource.content) || table_1.isMultiTable(resource.content)) {
return resource.content;
}
else {
return Object.assign({ resource: mmr, toolbarText: mmr.toolbarText, kind: mmr.kind, metadata: mmr.metadata, type: 'custom' }, resource);
}
});
}
exports.format = format;
function wrapTable(tab, table) {
const dom1 = document.createElement('div');
const dom2 = document.createElement('div');
dom1.classList.add('scrollable', 'scrollable-auto');
dom2.classList.add('result-as-table', 'repl-result');
dom1.appendChild(dom2);
table_2.formatTable(tab, table, dom2);
return dom1;
}
function formatButton(tab, resource, { mode, label, command, confirm, kind }) {
const cmd = typeof command === 'string' ? command : command(tab, resource);
return {
mode,
label,
flush: 'right',
actAsButton: true,
direct: confirm ? `confirm "${cmd}"` : cmd,
execOptions: {
exec: kind === 'view' ? 'qexec' : 'pexec'
}
};
}
exports.formatButton = formatButton;
function formatButtons(tab, mmr, buttons) {
return buttons.map(button => formatButton(tab, mmr, button));
}
function renderContent(tab, bearer, content) {
return __awaiter(this, void 0, void 0, function* () {
if (content_types_1.isStringWithOptionalContentType(content)) {
return content;
}
else if (table_1.isTable(content) || table_1.isMultiTable(content)) {
return {
content: wrapTable(tab, content)
};
}
else if (content_types_1.isFunctionContent(content)) {
const actualContent = yield content.content(tab, bearer);
if (!content_types_1.isScalarContent(actualContent)) {
if (table_1.isTable(actualContent) || table_1.isMultiTable(actualContent)) {
return {
content: wrapTable(tab, actualContent)
};
}
else {
return {
content: actualContent
};
}
}
else {
return actualContent;
}
}
else {
return {
content: content
};
}
});
}
function show(tab, mmr) {
return __awaiter(this, void 0, void 0, function* () {
const modes = yield Promise.all(mmr.modes.map((_) => __awaiter(this, void 0, void 0, function* () {
return ({
mode: _.mode,
label: _.label || _.mode,
direct: (tab) => {
if (sidecar_1.isCustomSpec(_)) {
return _;
}
else {
return format(tab, mmr, _);
}
},
defaultMode: _.defaultMode,
toolbarText: mmr.toolbarText,
leaveBottomStripeAlone: true
});
})));
if (!modes.find(_ => _.defaultMode) && modes.length > 0) {
modes[0].defaultMode = true;
}
const buttons = mmr.buttons ? formatButtons(tab, mmr, mmr.buttons) : [];
const modesWithButtons = modes.concat(buttons);
bottom_stripe_1.addModeButtons(tab, modesWithButtons, mmr, { preserveBackButton: true });
const defaultMode = modesWithButtons.find(_ => _.defaultMode) || modesWithButtons[0];
if (types_1.isButton(defaultMode)) {
console.error('default mode is a button', defaultMode, mmr);
throw new Error('Internal Error');
}
const content = content_types_1.hasContent(defaultMode)
? defaultMode
: typeof defaultMode.direct === 'function'
? yield defaultMode.direct(tab, mmr)
: defaultMode.direct;
if (content) {
if (sidecar_1.isCustomSpec(content)) {
return sidecar_1.showCustom(tab, Object.assign({ modes: modesWithButtons, toolbarText: mmr.toolbarText }, content), {
leaveBottomStripeAlone: true
});
}
else {
const customBase = {
type: 'custom',
resource: mmr,
modes: modesWithButtons,
toolbarText: mmr.toolbarText,
prettyName: mmr.prettyName,
nameHash: mmr.nameHash
};
const custom = Object.assign(customBase, yield renderContent(tab, mmr, content));
return sidecar_1.showCustom(tab, custom, { leaveBottomStripeAlone: true });
}
}
else {
console.error('empty content');
}
});
}
exports.show = show;
//# sourceMappingURL=show.js.map