hierarchy-js
Version:
Elegant and lightweight library for working with data structures
60 lines (49 loc) • 1.84 kB
JavaScript
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 };
;