UNPKG

1.92 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _uniq2 = require('lodash/uniq');
8
9var _uniq3 = _interopRequireDefault(_uniq2);
10
11var _getChildren = require('./get-children');
12
13var _getChildren2 = _interopRequireDefault(_getChildren);
14
15var _getParents = require('./get-parents');
16
17var _getParents2 = _interopRequireDefault(_getParents);
18
19function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
21function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
22
23function searchTree() {
24 var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
25 _ref$idField = _ref.idField,
26 idField = _ref$idField === undefined ? 'id' : _ref$idField,
27 _ref$parentField = _ref.parentField,
28 parentField = _ref$parentField === undefined ? 'parent' : _ref$parentField,
29 operation = _ref.operation;
30
31 if (!operation) {
32 throw new Error('tree.search - Missing operation!');
33 }
34
35 return function (rows) {
36 var _ref2;
37
38 // Track fetched parents to get them into the results only once
39 var fetchedParents = {};
40
41 return (0, _uniq3.default)((_ref2 = []).concat.apply(_ref2, _toConsumableArray(operation(rows).map(function (row) {
42 var rowParent = row[parentField];
43
44 if (fetchedParents[rowParent]) {
45 return row;
46 }
47
48 fetchedParents[rowParent] = true;
49
50 var children = (0, _getChildren2.default)({ index: row._index, idField: idField, parentField: parentField })(rows);
51 var parents = (0, _getParents2.default)({ index: row._index, idField: idField, parentField: parentField })(rows);
52
53 return parents.concat(row).concat(children);
54 }).filter(function (a) {
55 return a;
56 }))));
57 };
58}
59
60exports.default = searchTree;
\No newline at end of file