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, options?: IOptions ): IFormation => { /** * `Обьект с ключом и максимальной длинной колонки, которое имеет одно из его значений.` */ let columnLength: IlengthColumn[] = []; /** * `Все ключи обьекта.` */ const keysObj: string[] = Object.keys(arrObj[0]); keysObj.forEach(key => { const values: (string | number)[] = []; arrObj.forEach(item => { //TODO Моя доработка. /** * `Доработка, если длинна больше 20 символов ставим три точки в конце.` */ if(typeof item[key] === 'string' && item[key].length > 30) { const newValue = item[key].slice(0, 30) + '...'; item[key] = newValue; console.log('newValue = ', newValue); values.push(newValue); } else { 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 } }