| export function handleTree(data, id, parentId, children) { | |
|   let config = { | |
|     id: id || 'id', | |
|     parentId: parentId || 'parentId', | |
|     childrenList: children || 'children' | |
|   }; | |
| 
 | |
|   var childrenListMap = {}; | |
|   var nodeIds = {}; | |
|   var tree = []; | |
| 
 | |
|   for (let d of data) { | |
|     let parentId = d[config.parentId]; | |
|     if (childrenListMap[parentId] == null) { | |
|       childrenListMap[parentId] = []; | |
|     } | |
|     nodeIds[d[config.id]] = d; | |
|     childrenListMap[parentId].push(d); | |
|   } | |
| 
 | |
|   for (let d of data) { | |
|     let parentId = d[config.parentId]; | |
|     if (nodeIds[parentId] == null) { | |
|       tree.push(d); | |
|     } | |
|   } | |
| 
 | |
|   for (let t of tree) { | |
|     adaptToChildrenList(t); | |
|   } | |
| 
 | |
|   function adaptToChildrenList(o) { | |
|     if (childrenListMap[o[config.id]] !== null) { | |
|       o[config.childrenList] = childrenListMap[o[config.id]]; | |
|     } | |
|     if (o[config.childrenList]) { | |
|       for (let c of o[config.childrenList]) { | |
|         adaptToChildrenList(c); | |
|       } | |
|     } | |
|   } | |
|   return tree; | |
| }
 |