import React from 'react'; import assign from 'object-assign'; import Column from './Column'; import ColumnGroup from './ColumnGroup'; export function flatArray(data: Object[] = [], childrenName = 'children') { const result: Object[] = []; const loop = (array) => { array.forEach(item => { const newItem = assign({}, item); delete newItem[childrenName]; result.push(newItem); if (item[childrenName] && item[childrenName].length > 0) { loop(item[childrenName]); } }); }; loop(data); return result; } export function treeMap(tree: Object[], mapper: Function, childrenName = 'children') { return tree.map((node, index) => { const extra = {}; if (node[childrenName]) { extra[childrenName] = treeMap(node[childrenName], mapper, childrenName); } return assign({}, mapper(node, index), extra); }); } export function normalizeColumns(elements) { const columns: any[] = []; React.Children.forEach(elements, (element: React.ReactElement) => { if (!isColumnElement(element)) { return; } const column = assign({}, element.props); if (element.key) { column.key = element.key; } if (element.type as any === ColumnGroup) { column.children = normalizeColumns(column.children); } columns.push(column); }); return columns; } function isColumnElement(element) { return element && (element.type === Column || element.type === ColumnGroup); }