UNPKG

4.52 kBSource Map (JSON)View Raw
1{"version":3,"file":"react-toggled.umd.min.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","_this","getOn","on","props","defaultOn","getTogglerProps","Boolean","onClick","toggle","toggleKeys","getInputTogglerProps","onKeyUp","event","key","getElementTogglerProps","indexOf","setOnState","cb","onToggle","getTogglerStateAndHelpers","setState","setOn","bind","setOff","undefined","this","isOnControlled","componentWillReceiveProps","render","arg","children","Array","isArray","Component","defaultProps"],"mappings":"muBAGMA,EAAU,sCAAIC,gDAAQ,sCAAIC,gDAASD,EAAIE,QAAQ,mBAAMC,GAAMA,eAAMF,OACjEG,EAAO,aAEPC,uKAWJC,UACMC,EAAKC,OAAOC,GAAIF,EAAKG,MAAMC,eAWjCC,gBAAkB,eAACF,sFACAG,QAAQN,EAAKC,kBACpB,GACPE,WACMX,EAAQW,EAAMI,QAASP,EAAKQ,aAGvCC,YAAc,QAAS,OAEvBC,qBAAuB,eAACP,mEACtBH,EAAKK,qBACAF,WACMX,EAAQW,EAAMQ,QAAS,YACZ,UAAdC,EAAMC,OAEHL,iBAKbM,uBAAyB,eAACX,mEACxBH,EAAKK,qBACAF,WACMX,EAAQW,EAAMQ,QAAS,YAC1BX,EAAKS,WAAWM,QAAQH,EAAMC,MAAQ,KACnCL,iBAiBbQ,WAAa,eAACjB,0DAASC,EAAKC,QACpBgB,EACJjB,EAAKC,UAAYF,EACbF,EACA,aACOM,MAAMe,SAASnB,EAAOC,EAAKmB,gCAEnCC,UAAUlB,GAAIH,GAAQkB,MAG7BI,MAAQrB,EAAKgB,WAAWM,QAAW,KACnCC,OAASvB,EAAKgB,WAAWM,QAAW,KACpCd,OAASR,EAAKgB,WAAWM,YAAWE,4VA9DpCvB,qBAAMF,yDAAQ0B,KAAK1B,MAAOI,yDAAQsB,KAAKtB,aAC9BsB,KAAKC,iBAAmBvB,EAAMD,GAAKH,EAAMG,gBAGlDwB,sCAC2BF,IAAlBC,KAAKtB,MAAMD,gBAiCpBiB,+CAEQM,KAAKxB,wBACQwB,KAAKpB,qCACAoB,KAAKf,4CACHe,KAAKX,6BACtBW,KAAKJ,aACJI,KAAKF,cACLE,KAAKjB,qBAkBjBmB,0CAA2BzB,IAAAA,GACrBA,IAAOuB,KAAKtB,MAAMD,IAAMA,IAAOuB,KAAK1B,MAAMG,SACvCc,WAAWd,gBAIpB0B,sBAYmBC,SAAAA,EAXcJ,KAAKtB,MAAM2B,SAYrCC,MAAMC,QAAQH,GAAOA,EAAI,GAAKA,GAXjBJ,KAAKN,iCAvFNc,oBAAfnC,EAOGoC,yBACM,WACDrC"}
\No newline at end of file