UNPKG

inspire-tree

Version:

Inspired JavaScript Tree UI Component

65 lines (53 loc) 1.8 kB
import { each } from 'lodash'; /** * Reset a node's state to the tree default. * * @private * @param {TreeNode} node Node object. * @returns {TreeNode} Node object. */ function resetState(node) { each(node._tree.defaultState, (val, prop) => { node.state(prop, val); }); return node; } /** * Stores repetitive state change logic for most state methods. * * @private * @param {string} prop State property name. * @param {boolean} value New state value. * @param {string} verb Verb used for events. * @param {TreeNode} node Node object. * @param {string} deep Optional name of state method to call recursively. * @return {TreeNode} Node object. */ export function baseStateChange(prop, value, verb, node, deep) { if (node.state(prop) !== value) { node.context().batch(); if (node._tree.config.nodes.resetStateOnRestore && verb === 'restored') { resetState(node); } // indeterminate may never be true if checked is if (value && prop === 'checked') { node.state('indeterminate', false); } node.state(prop, value); node._tree.emit('node.' + verb, node, false); if (deep && node.hasChildren()) { node.children.recurseDown(child => { baseStateChange(prop, value, verb, child); }); } // This node's "renderability" has changed, so we should // trigger a re-cache in the parent context. if (prop === 'hidden' || prop === 'removed') { node.context().indicesDirty = true; node.context().calculateRenderablePositions(); } node.markDirty(); node.context().end(); } return node; }