react-native-console-table
Version:
Display an array of objects (with the same interface) as a table in the terminal.
59 lines (54 loc) • 2.17 kB
text/typescript
import { IlengthColumn, TObj, IOptions, IFormation } from '../types';
import { copyDash } from './copyDash';
import { formationHeader } from './formationHeader';
/**
* `Формирование:`
* - разделительной линии,
* - шапки таблицы,
* - обьекта с ключом и максимальной длинной колонки.
* @param arrObj Массив обьектов, с данными для отображения.
* @returns обьект c:
* - dash: разделительная линия,
* - header: шапка таблицы,
* - columnLength: обьект с ключом и максимальной длинной колонки.
*/
export const formation = (
arrObj: Array<TObj>,
options?: IOptions
): IFormation => {
/**
* `Обьект с ключом и максимальной длинной колонки, которое имеет одно из его значений.`
*/
let columnLength: IlengthColumn[] = [];
/**
* `Все ключи обьекта.`
*/
const keysObj: string[] = Object.keys(arrObj[0]);
keysObj.forEach(key => {
const values: (string | number)[] = [];
arrObj.forEach(item => {
values.push(item[key]);
});
/**
* `Максимальная длинна колонки, определенная по максимальной длинне значения находяшегося в колонке.`
*/
const maxLengthColumn = Math.max(key.length, ...values.map(value => String(value).length));
columnLength = [...columnLength, {key, length: maxLengthColumn}];
});
/**
* `Разделительная линия таблицы.`
*/
const {dashUp, dashCenter, dashBottom, dashIfExistTitle} = copyDash(columnLength);
/**
* `Шапка таблицы.`
*/
const header = formationHeader(columnLength, options);
return {
columnLength,
dashUp,
dashCenter,
dashBottom,
dashIfExistTitle,
header
}
}