@tamara027/lerna-terminal
Version:
Powerful cli ui for monorepos
85 lines (69 loc) • 2.18 kB
JavaScript
/* eslint no-console: 0*/
;
var getFilledArray = require('../getFilledArray');
var _require = require('../store'),
getState = _require.getState,
getUiState = _require.getUiState;
var _require2 = require('../getTerminalPanel'),
getTerminalPanel = _require2.getTerminalPanel;
var mergePanelsRow = require('../mergePanelsRow');
var _require3 = require('../getDimensions'),
getDimensions = _require3.getDimensions;
/**
* @param {number} amountOfProcesses - amount of processes
* @returns {void}
**/
function getColumnsAndRows(amountOfProcesses) {
var columns = Math.ceil(amountOfProcesses / 2);
if (amountOfProcesses === 2) {
columns = 2;
} else if (amountOfProcesses === 9) {
columns = 3;
} else if (amountOfProcesses >= 10) {
columns = 4;
}
return {
columns: columns,
rows: Math.ceil(amountOfProcesses / columns)
};
}
/**
* @returns {void}
**/
function renderAllPanels() {
var currentState = Object.assign({}, getState());
var dimensions = getDimensions();
var stateKeys = Object.keys(currentState);
var _getColumnsAndRows = getColumnsAndRows(stateKeys.length),
columns = _getColumnsAndRows.columns,
rows = _getColumnsAndRows.rows;
var panelWidth = parseInt(dimensions.width / columns, 10);
var panelHeight = parseInt(dimensions.height / rows, 10) - 1;
var renderArrInner = getFilledArray(columns, '');
var renderArr = getFilledArray(rows, renderArrInner);
// map panel into row structure
var counterColumn = 0;
var counterRow = 0;
stateKeys.forEach(function (packageName) {
if (!currentState[packageName].log) {
return;
}
renderArr[counterRow][counterColumn] = getTerminalPanel({
width: panelWidth,
height: panelHeight,
title: packageName,
lines: currentState[packageName].log,
isRunning: currentState[packageName].terminal.isRunning
});
counterColumn += 1;
if (counterColumn >= columns) {
counterColumn = 0;
counterRow += 1;
}
});
getUiState().print(renderArr.map(function (panelRow) {
return mergePanelsRow(panelRow, panelHeight).join('\n');
}).join('') + '\n');
}
module.exports = renderAllPanels;
module.exports.getColumnsAndRows = getColumnsAndRows;