UNPKG

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
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 } }