es-grid-template
Version:
es-grid-template
61 lines (59 loc) • 1.55 kB
JavaScript
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
};
}
};
}