@riqra/hierarchy-parser
Version:
<p align="center"> <img src="https://res.cloudinary.com/riqra/image/upload/v1513825837/github/hierarchy-parser.svg" /> </p>
69 lines (55 loc) • 1.61 kB
JavaScript
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
var defaultOptions = {
parentKey: 'parentId',
identifier: 'id',
initialParentId: null
};
function hierarchyParser(dataSource, options) {
if (options === void 0) {
options = {};
}
var _defaultOptions$optio = _extends({}, defaultOptions, options),
parentKey = _defaultOptions$optio.parentKey,
identifier = _defaultOptions$optio.identifier,
initialParentId = _defaultOptions$optio.initialParentId;
var initialParents;
if (!initialParentId) {
initialParents = dataSource.filter(function (item) {
return item[parentKey] === null;
});
} else {
initialParents = dataSource.filter(function (item) {
return item[identifier] === initialParentId;
});
}
function getChildren(parent) {
return dataSource.filter(function (item) {
return item[parentKey] === parent[identifier];
});
}
function toHierarchyItem(parent) {
var children = getChildren(parent);
if (children.length === 0) {
return parent;
}
return _extends({}, parent, {
children: children.map(toHierarchyItem)
});
}
return initialParents.map(toHierarchyItem);
}
export default hierarchyParser;
//# sourceMappingURL=hierarchy-parser.esm.js.map