react-native-navigation-drilldown
Version:
Drilldown screens to use with react-navigation
48 lines • 1.6 kB
JavaScript
;
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