UNPKG

hierarchy-js

Version:

Elegant and lightweight library for working with data structures

60 lines (49 loc) 1.84 kB
'use strict'; var _require = require('../services/createCopy'), createCopy = _require.createCopy; var _require2 = require('./options'), id = _require2.id, childrenKey = _require2.childrenKey, parentId = _require2.parentId, mergeOptionsBeforeCreateHierarchy = _require2.mergeOptionsBeforeCreateHierarchy; var hasParent = function hasParent(parentId, items) { return items.some(function (item) { return id(item) === parentId; }); }; var hasChildren = function hasChildren(item) { var key = childrenKey(); return !!(item && item[key] && item[key].length); }; var getParents = function getParents() { var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; return items.filter(function (item) { return id(item) && !hasParent(parentId(item), items); }); }; var getChildren = function getChildren(child, items) { var childId = id(child); return childId ? items.filter(function (item) { return parentId(item) === childId; }) : []; }; var getParentChildren = function getParentChildren(parent) { var key = childrenKey(); return Array.isArray(parent[key]) ? parent[key].slice() : []; }; var mergeChildren = function mergeChildren(parent, children) { if (children) { var parentChildren = getParentChildren(parent); parent[childrenKey()] = parentChildren.concat(children); } return parent; }; var createHierarchy = function createHierarchy(method) { return function (array, options) { if (array && array.length) { var OPTIONS = mergeOptionsBeforeCreateHierarchy(options); return method(createCopy(array), null, OPTIONS); } }; }; module.exports = { getParents: getParents, getChildren: getChildren, mergeChildren: mergeChildren, hasChildren: hasChildren, childrenKey: childrenKey, createHierarchy: createHierarchy };