UNPKG

es-grid-template

Version:

es-grid-template

61 lines (59 loc) 1.55 kB
import isLeafNode from "./isLeafNode"; function normalizeAsArray(input) { if (input == null) { return []; } else if (Array.isArray(input)) { return input; } else { return [input]; } } /** @deprecated This API is deprecated. Please use `makeRecursiveMapper` instead. */ export default function traverseColumn(fn) { return ({ columns, dataSource }) => { return { dataSource, columns: dfs(columns, 0).result }; // eslint-disable-next-line @typescript-eslint/no-shadow function dfs(columns, parentStartColIndex) { let flatColCount = 0; const result = []; for (const col of columns) { const startColIndex = parentStartColIndex + flatColCount; let unNormalized; if (isLeafNode(col)) { unNormalized = fn(col, { range: { start: startColIndex, end: startColIndex + 1 }, dataSource }); flatColCount += 1; } else { const dfsResult = dfs(col.children ?? [], startColIndex); unNormalized = fn({ ...col, children: dfsResult.result }, { range: { start: startColIndex, end: startColIndex + dfsResult.flatColCount }, dataSource }); flatColCount += dfsResult.flatColCount; } result.push(...normalizeAsArray(unNormalized)); } return { result, flatColCount }; } }; }