UNPKG

5.89 kBSource Map (JSON)View Raw
1{"version":3,"file":"RadioGroup.js","sources":["../src/components/Radio/RadioGroup.js"],"sourcesContent":["import React from 'react'\nimport PropTypes from 'prop-types'\nimport { stylingProps, noop } from '../../utils'\n\nconst { Provider, Consumer } = React.createContext({})\n\nclass RadioGroup extends React.PureComponent {\n static propTypes = {\n children: PropTypes.node,\n selected: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n onChange: PropTypes.func,\n }\n static defaultProps = {\n onChange: noop,\n }\n state = {\n // keep track of the radios buttons to handle keyboard navigation\n radios: new Set(),\n }\n handleChange = id => {\n this.props.onChange(id)\n }\n addRadio = id => {\n this.setState(state => {\n const radios = new Set(state.radios)\n radios.add(id)\n return { radios }\n })\n }\n removeRadio = id => {\n this.setState(state => {\n const radios = new Set(state.radios)\n radios.delete(id)\n return { radios }\n })\n }\n getSiblingId(position) {\n const { selected } = this.props\n const radios = [...this.state.radios]\n const selectedIndex = selected === undefined ? 0 : radios.indexOf(selected)\n const newSelectedIndex = selectedIndex + position\n\n // no radios\n if (radios.length === 0) {\n return null\n }\n\n // up on the first item: go to the last one\n if (newSelectedIndex === -1) {\n return radios[radios.length - 1]\n }\n\n // down on the last item: go to the first one\n if (newSelectedIndex === radios.length) {\n return radios[0]\n }\n\n // select the item item if possible\n if (selectedIndex > -1 && radios[newSelectedIndex]) {\n return radios[newSelectedIndex]\n }\n\n // default: select the first item if available\n return radios[0] === undefined ? null : radios[0]\n }\n selectPrev = () => {\n const id = this.getSiblingId(-1)\n if (id !== null) {\n this.props.onChange(id)\n }\n }\n selectNext = () => {\n const id = this.getSiblingId(1)\n if (id !== null) {\n this.props.onChange(id)\n }\n }\n render() {\n const { radios } = this.state\n const { children, selected } = this.props\n const focusableId = radios.has(selected) ? selected : [...radios][0]\n return (\n <Provider\n value={{\n selected,\n focusableId,\n onChange: this.handleChange,\n addRadio: this.addRadio,\n removeRadio: this.removeRadio,\n selectPrev: this.selectPrev,\n selectNext: this.selectNext,\n }}\n >\n <div role=\"radiogroup\" {...stylingProps(this)}>\n {children}\n </div>\n </Provider>\n )\n }\n}\n\nexport { Consumer as RadioGroupConsumer }\nexport default RadioGroup\n"],"names":["React","createContext","Provider","Consumer","RadioGroup","radios","Set","id","props","onChange","setState","state","add","delete","getSiblingId","position","selected","selectedIndex","undefined","indexOf","newSelectedIndex","length","children","focusableId","has","_toConsumableArray","handleChange","addRadio","removeRadio","selectPrev","selectNext","stylingProps","PureComponent","PropTypes","node","oneOfType","string","number","func","noop"],"mappings":"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"}
\No newline at end of file