@vtex/styleguide
Version:
> VTEX Styleguide React components ([Docs](https://vtex.github.io/styleguide))
100 lines (80 loc) • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getBulkChecked = getBulkChecked;
exports.getBulkUnchecked = getBulkUnchecked;
exports.getToggledState = getToggledState;
exports.getFlat = getFlat;
/**
* Checks nested items
* @param checked
* @param item
* @param nodesKey
* @param comparator
*/
function getBulkChecked(checked, item, nodesKey, comparator, isDisabled) {
if (nodesKey === void 0) {
nodesKey = 'children';
}
var notDisabled = function notDisabled(item) {
return !isDisabled(item);
};
return [].concat(checked, getFlat(item, [], nodesKey)).filter(notDisabled).reduce(function (acc, item) {
return acc.some(comparator(item)) ? acc : [].concat(acc, [item]);
}, []);
}
/**
* Unchecks nested items
* @param checked
* @param item
* @param nodesKey
* @param comparator
*/
function getBulkUnchecked(checked, item, nodesKey, comparator) {
if (nodesKey === void 0) {
nodesKey = 'children';
}
var flatCurry = function flatCurry(item, nodesKey) {
return getFlat(item, [], nodesKey);
};
var flat = flatCurry(item, nodesKey);
var bulkFilter = function bulkFilter(row) {
return !flat.some(comparator(row));
};
return checked.filter(bulkFilter);
}
/**
* Return new state with items toggled
* @param state
* @param item
*/
function getToggledState(state, item, nodesKey, comparator, isDisabled) {
if (nodesKey === void 0) {
nodesKey = 'children';
}
var stateIncludesItem = state.some(comparator(item));
var filter = function filter(row) {
return !comparator(row)(item);
};
if (stateIncludesItem) {
return item[nodesKey] ? getBulkUnchecked(state, item, nodesKey, comparator) : state.filter(filter);
}
return item[nodesKey] ? getBulkChecked(state, item, nodesKey, comparator, isDisabled) : [].concat(state, [item]);
}
/**
* Represents a tree section on a single array.
*/
function getFlat(tree, arr, nodesKey) {
if (arr === void 0) {
arr = [];
}
if (nodesKey === void 0) {
nodesKey = 'children';
}
arr.push(tree);
if (tree[nodesKey]) tree[nodesKey].forEach(function (child) {
return getFlat(child, arr, nodesKey);
});
return arr;
}