UNPKG

@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
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