nexxtway/react-rainbow

View on GitHub
src/components/Tree/helpers/buildPlainListFromTree.js

Summary

Maintainability
A
3 hrs
Test Coverage
import getNodeName from './getNodeName';
import getNodeLevel from './getNodeLevel';

export default function buildPlainListFromTree(tree, parentName, parentPath) {
    if (!Array.isArray(tree)) return [];
    return tree.reduce((result, node, index) => {
        const nodeName = getNodeName({ parentName, index });
        const level = getNodeLevel({ name: nodeName });
        const nodePath = parentPath ? [...parentPath, index] : [index];
        const nodeLabel = typeof node.label === 'string' ? node.label.toLowerCase() : node.label;
        if (node.isExpanded) {
            return [
                ...result,
                {
                    name: nodeName,
                    label: nodeLabel,
                    level,
                    nodePath,
                    isExpanded: node.isExpanded,
                    hasChildren: node.children && node.children.length > 0,
                },
                ...buildPlainListFromTree(node.children, nodeName, nodePath),
            ];
        }
        return [
            ...result,
            {
                name: nodeName,
                label: nodeLabel,
                level,
                nodePath,
                isExpanded: node.isExpanded,
                hasChildren: node.children && node.children.length > 0,
            },
        ];
    }, []);
}