UNPKG

@vtex/styleguide

Version:

> VTEX Styleguide React components ([Docs](https://vtex.github.io/styleguide))

100 lines (80 loc) 2.21 kB
"use strict"; 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; }