UNPKG

react-native-navigation-drilldown

Version:
48 lines 1.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var differenceBy = require("lodash/differenceBy"); var includesAll_1 = require("./includesAll"); var isChildOf_1 = require("./isChildOf"); var updateSelection = function (options, item, selected, multi) { if (multi) { return updateMultiSelection(options, item, selected); } return item; }; var updateMultiSelection = function (options, item, selected) { if (!selected) { return [item]; } var selectedArray = Array.isArray(selected) ? selected : [selected]; var xored = []; var removed = false; for (var _i = 0, selectedArray_1 = selectedArray; _i < selectedArray_1.length; _i++) { var selectedItem = selectedArray_1[_i]; if (selectedItem.id === item.id) { removed = true; } else if (!isChildOf_1.default(item, selectedItem)) { xored.push(selectedItem); } } if (!removed) { xored.push(item); } var result = collapseSubtrees(options, xored); return result.length ? result : null; }; var collapseSubtrees = function (options, selected) { var result = selected; if (options.children) { options.children.forEach(function (subtree) { result = collapseSubtrees(subtree, result); }); if (includesAll_1.default(options, result)) { result = differenceBy(result, options.children, 'id'); result.push(options); } } return result; }; exports.default = updateSelection; //# sourceMappingURL=updateSelection.js.map