UNPKG

react-bootstrap

Version:

Bootstrap 3 components build with React

80 lines (70 loc) 2.1 kB
import ReactPropTransferer from './react-es6/lib/ReactPropTransferer'; export default = { /** * Modify each item in a React children array without * unnecessarily allocating a new array. * * @param {array|object} children * @param {function} modifier * @returns {*} */ modifyChildren: function (children, modifier) { if (children == null) { return children; } return Array.isArray(children) ? children.map(modifier) : modifier(children, 0); }, /** * Filter each item in a React children array without * unnecessarily allocating a new array. * * @param {array|object} children * @param {function} filter * @returns {*} */ filterChildren: function (children, filter) { if (children == null) { return children; } if (Array.isArray(children)) { return children.filter(filter); } else { return filter(children, 0) ? children : null; } }, /** * Safe chained function * * Will only create a new function if needed, * otherwise will pass back existing functions or null. * * @param {function} one * @param {function} two * @returns {function|null} */ createChainedFunction: function (one, two) { var hasOne = typeof one === 'function'; var hasTwo = typeof two === 'function'; if (!hasOne && !hasTwo) { return null; } if (!hasOne) { return two; } if (!hasTwo) { return one; } return function chainedFunction() { one.apply(this, arguments); two.apply(this, arguments); }; }, /** * Sometimes you want to change the props of a child passed to you. Usually * this is to add a CSS class. * * @param {object} child child component you'd like to clone * @param {object} props props you'd like to modify. They will be merged * as if you used `transferPropsTo()`. * @return {object} a clone of child with props merged in. */ cloneWithProps: function (child, props) { return child.constructor.ConvenienceConstructor( ReactPropTransferer.mergeProps(child.props, props) ); } };