UNPKG

react-foundation-components-fork

Version:

Foundation Sites components built with the power of React and CSS Modules

221 lines (165 loc) 7.39 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.RadioSwitch = exports.Switch = exports.SwitchPadelLabel = exports.SwitchUncheckedLabel = exports.SwitchCheckedLabel = undefined; var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _bind = require('classnames/bind'); var _bind2 = _interopRequireDefault(_bind); var _uncontrollable = require('uncontrollable'); var _uncontrollable2 = _interopRequireDefault(_uncontrollable); var _includes = require('lodash/includes'); var _includes2 = _interopRequireDefault(_includes); var _noop = require('lodash/noop'); var _noop2 = _interopRequireDefault(_noop); var _constants = require('../util/constants'); var _visibility = require('../visibility'); var _styles = require('./_styles.scss'); var _styles2 = _interopRequireDefault(_styles); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var cxStyles = _bind2.default.bind(_styles2.default); function createCheckedLabel(baseClassName) { var displayName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'SwitchCheckedLabelBase'; var SwitchCheckedLabelBase = function SwitchCheckedLabelBase(_ref) { var className = _ref.className, restProps = (0, _objectWithoutProperties3.default)(_ref, ['className']); var classNames = (0, _classnames2.default)(className, cxStyles(baseClassName)); return _react2.default.createElement(_visibility.HideForScreenReader, (0, _extends3.default)({}, restProps, { className: classNames })); }; SwitchCheckedLabelBase.displayName = displayName; SwitchCheckedLabelBase.propTypes = { className: _propTypes2.default.string }; return SwitchCheckedLabelBase; } var SwitchCheckedLabel = exports.SwitchCheckedLabel = createCheckedLabel('switch-active', 'SwitchCheckedLabel'); var SwitchUncheckedLabel = exports.SwitchUncheckedLabel = createCheckedLabel('switch-inactive', 'SwitchUncheckedLabel'); var SwitchPadelLabel = exports.SwitchPadelLabel = function SwitchPadelLabel(props) { return _react2.default.createElement(_visibility.ShowForScreenReader, props); }; var SwitchControlled = function SwitchControlled(_ref2) { var checked = _ref2.checked, children = _ref2.children, className = _ref2.className, containerClassName = _ref2.containerClassName, containerStyle = _ref2.containerStyle, eventKey = _ref2.eventKey, id = _ref2.id, onChange = _ref2.onChange, onSelect = _ref2.onSelect, onToggle = _ref2.onToggle, paddleClassName = _ref2.paddleClassName, paddleStyle = _ref2.paddleStyle, size = _ref2.size, restProps = (0, _objectWithoutProperties3.default)(_ref2, ['checked', 'children', 'className', 'containerClassName', 'containerStyle', 'eventKey', 'id', 'onChange', 'onSelect', 'onToggle', 'paddleClassName', 'paddleStyle', 'size']); var containerClassNames = (0, _classnames2.default)(containerClassName, cxStyles('switch', (0, _defineProperty3.default)({}, size, (0, _includes2.default)(_constants.COMPONENT_SIZES, size)))); var classNames = (0, _classnames2.default)(className, cxStyles('switch-input')); var paddleClassNames = (0, _classnames2.default)(paddleClassName, cxStyles('switch-paddle')); var onInputChange = function onInputChange() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (onChange) { onChange.apply(undefined, args); } if (onToggle) { onToggle.apply(undefined, [!checked].concat(args)); } if (onSelect) { onSelect.apply(undefined, [eventKey].concat(args)); } }; var onLabelClick = function onLabelClick() { for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } var event = args[0]; event.preventDefault(); onInputChange.apply(undefined, args); }; return _react2.default.createElement( 'div', { className: containerClassNames, style: containerStyle }, _react2.default.createElement('input', (0, _extends3.default)({}, restProps, { checked: checked, className: classNames, id: id, onChange: onInputChange, type: 'checkbox' })), _react2.default.createElement( 'label', { className: paddleClassNames, htmlFor: id, onClick: onLabelClick, style: paddleStyle }, children ) ); }; SwitchControlled.propTypes = { checked: _propTypes2.default.bool, children: _propTypes2.default.node, className: _propTypes2.default.string, containerClassName: _propTypes2.default.string, containerStyle: _propTypes2.default.object, eventKey: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]), id: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]), onChange: _propTypes2.default.func, onSelect: _propTypes2.default.func, onToggle: _propTypes2.default.func, paddleClassName: _propTypes2.default.string, paddleStyle: _propTypes2.default.object, size: _propTypes2.default.oneOf(_constants.COMPONENT_SIZES) }; var Switch = exports.Switch = (0, _uncontrollable2.default)(SwitchControlled, { checked: 'onToggle' }); Switch.displayName = 'Switch'; var RadioSwitchControlled = function RadioSwitchControlled(_ref3) { var activeKey = _ref3.activeKey, children = _ref3.children, onSelect = _ref3.onSelect, size = _ref3.size, restProps = (0, _objectWithoutProperties3.default)(_ref3, ['activeKey', 'children', 'onSelect', 'size']); var clonedChildren = _react.Children.map(children, function (child) { if ((0, _react.isValidElement)(child)) { return (0, _react.cloneElement)(child, { checked: child.props.eventKey === activeKey, onSelect: onSelect, onToggle: _noop2.default, size: size }); } return child; }); return _react2.default.createElement( 'div', restProps, clonedChildren ); }; RadioSwitchControlled.propTypes = { activeKey: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]), children: _propTypes2.default.node, onSelect: _propTypes2.default.func, size: _propTypes2.default.oneOf(_constants.COMPONENT_SIZES) }; var RadioSwitch = exports.RadioSwitch = (0, _uncontrollable2.default)(RadioSwitchControlled, { activeKey: 'onSelect' }); RadioSwitch.displayName = 'RadioSwitch'; Switch.Radio = RadioSwitch; Switch.CheckedLabel = SwitchCheckedLabel; Switch.UncheckedLabel = SwitchUncheckedLabel; Switch.PadelLabel = SwitchPadelLabel; exports.default = Switch;