UNPKG

6.04 kBSource Map (JSON)View Raw
1{"version":3,"file":"react-toggled.umd.js","sources":["../src/index.js"],"sourcesContent":["import {Component} from 'react'\nimport PropTypes from 'prop-types'\n\nconst callAll = (...fns) => (...args) => fns.forEach(fn => fn && fn(...args))\nconst noop = () => {}\n\nclass Toggle extends Component {\n static propTypes = {\n defaultOn: PropTypes.bool,\n on: PropTypes.bool,\n onToggle: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.array]).isRequired,\n }\n static defaultProps = {\n defaultOn: false,\n onToggle: noop,\n }\n state = {\n on: this.getOn({on: this.props.defaultOn}),\n }\n\n getOn(state = this.state, props = this.props) {\n return this.isOnControlled() ? props.on : state.on\n }\n\n isOnControlled() {\n return this.props.on !== undefined\n }\n\n getTogglerProps = (props = {}) => ({\n 'aria-expanded': Boolean(this.getOn()),\n tabIndex: 0,\n ...props,\n onClick: callAll(props.onClick, this.toggle),\n })\n\n toggleKeys = ['Enter', ' '] // This matches <button> behavior\n\n getInputTogglerProps = (props = {}) =>\n this.getTogglerProps({\n ...props,\n onKeyUp: callAll(props.onKeyUp, event => {\n if (event.key === 'Enter') {\n // <input> already respond to Enter\n this.toggle()\n }\n }),\n })\n\n getElementTogglerProps = (props = {}) =>\n this.getTogglerProps({\n ...props,\n onKeyUp: callAll(props.onKeyUp, event => {\n if (this.toggleKeys.indexOf(event.key) > -1) {\n this.toggle()\n }\n }),\n })\n\n getTogglerStateAndHelpers() {\n return {\n on: this.getOn(),\n getTogglerProps: this.getTogglerProps,\n getInputTogglerProps: this.getInputTogglerProps,\n getElementTogglerProps: this.getElementTogglerProps,\n setOn: this.setOn,\n setOff: this.setOff,\n toggle: this.toggle,\n }\n }\n\n setOnState = (state = !this.getOn()) => {\n const cb =\n this.getOn() === state\n ? noop\n : () => {\n this.props.onToggle(state, this.getTogglerStateAndHelpers())\n }\n this.setState({on: state}, cb)\n }\n\n setOn = this.setOnState.bind(this, true)\n setOff = this.setOnState.bind(this, false)\n toggle = this.setOnState.bind(this, undefined)\n\n componentWillReceiveProps({on}) {\n if (on !== this.props.on && on !== this.state.on) {\n this.setOnState(on)\n }\n }\n\n render() {\n const renderProp = unwrapArray(this.props.children)\n return renderProp(this.getTogglerStateAndHelpers())\n }\n}\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array\n * otherwise returns the argument\n * @param {*} arg the maybe-array\n * @return {*} the arg or it's first item\n */\nfunction unwrapArray(arg) {\n return Array.isArray(arg) ? arg[0] : arg\n}\n\nexport default Toggle\n"],"names":["callAll","fns","args","forEach","fn","noop","Toggle","state","on","getOn","props","defaultOn","getTogglerProps","Boolean","tabIndex","onClick","toggle","toggleKeys","getInputTogglerProps","onKeyUp","event","key","getElementTogglerProps","indexOf","setOnState","cb","onToggle","getTogglerStateAndHelpers","setState","setOn","bind","setOff","undefined","isOnControlled","componentWillReceiveProps","render","renderProp","unwrapArray","children","Component","defaultProps","propTypes","PropTypes","bool","func","oneOfType","array","isRequired","arg","Array","isArray"],"mappings":"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"}
\No newline at end of file