UNPKG

kui-shell

Version:

This is the monorepo for Kui, the hybrid command-line/GUI electron-based Kubernetes tool

163 lines 6.67 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 }); 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