UNPKG

react-misc-toolbox

Version:

[ ] imageviewer | gradual scroll [ ] imageviewer | cancellable scroll

215 lines (174 loc) 8.01 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray'); var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _RTGTransition = require('./RTGTransition'); var _RTGTransition2 = _interopRequireDefault(_RTGTransition); var _recompose = require('recompose'); var _helperFunctions = require('./helperFunctions'); var _defaultStyles = require('./defaultStyles'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var styleTemplate = void 0; var Switch = function Switch(props) { var children = props.children, defaultActiveOption = props.defaultActiveOption, customStyleTemplate = props.customStyleTemplate, styleTemplatePreset = props.styleTemplatePreset, transitionType = props.transitionType, options = props.options; var _useReducer = (0, _react.useReducer)(function (state, newState) { return (0, _extends3.default)({}, state, newState); }, { activeOption: defaultActiveOption }), _useReducer2 = (0, _slicedToArray3.default)(_useReducer, 2), state = _useReducer2[0], setState = _useReducer2[1]; var activeOption = state.activeOption; var setActiveOption = function setActiveOption(option) { return setState({ activeOption: option }); }; if (customStyleTemplate) { styleTemplate = customStyleTemplate; } else if (styleTemplatePreset) { styleTemplate = styleTemplatePreset ? _defaultStyles.switchStyleTemplates[styleTemplatePreset] : {}; } else { styleTemplate = _defaultStyles.switchStyleTemplates.default; } var isActive = function isActive(option) { return activeOption === option; }; var getOptionProps = function getOptionProps() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var className = _ref.className, style = _ref.style, _onClick = _ref.onClick, option = _ref.option, props = (0, _objectWithoutProperties3.default)(_ref, ['className', 'style', 'onClick', 'option']); return (0, _extends3.default)({ onClick: function onClick(e) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } e.stopPropagation; setActiveOption(option); _onClick && _onClick.apply(undefined, [e].concat(args)); }, className: className ? (0, _helperFunctions.flippyClass)(isActive(option), 'switch__option__container', 'active', 'inactive') + ' ' + (0, _helperFunctions.flippyClass)(isActive(option), className, 'active', 'inactive') : '' + (0, _helperFunctions.flippyClass)(isActive(option), 'switch__option__container', 'active', 'inactive'), style: (0, _extends3.default)({}, styleTemplate.option, style) }, props); }; var renderContent = function renderContent(func, option) { return _react2.default.createElement( _RTGTransition2.default, { in: isActive(option), transitionType: transitionType }, function (_ref2) { var transitionStyle = _ref2.style; var getContentProps = function getContentProps() { var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var className = _ref3.className, _ref3$style = _ref3.style, style = _ref3$style === undefined ? {} : _ref3$style, _onClick2 = _ref3.onClick, option = _ref3.option, props = (0, _objectWithoutProperties3.default)(_ref3, ['className', 'style', 'onClick', 'option']); return (0, _extends3.default)({ onClick: function onClick(e) { for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } e.stopPropagation; _onClick2 && _onClick2.apply(undefined, [e].concat(args)); }, className: className ? (0, _helperFunctions.flippyClass)(isActive(option), 'switch__option__content', 'active', 'inactive') + ' ' + (0, _helperFunctions.flippyClass)(isActive(option), className, 'active', 'inactive') : '' + (0, _helperFunctions.flippyClass)(isActive(option), 'switch__option__content', 'active', 'inactive'), style: (0, _extends3.default)({}, styleTemplate.content, transitionStyle, style) }, props); }; return func({ getContentProps: getContentProps }); } ); }; var getLabelProps = function getLabelProps() { var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var className = _ref4.className, style = _ref4.style, _onClick3 = _ref4.onClick, option = _ref4.option, props = (0, _objectWithoutProperties3.default)(_ref4, ['className', 'style', 'onClick', 'option']); return (0, _extends3.default)({ onClick: function onClick(e) { for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { args[_key3 - 1] = arguments[_key3]; } e.stopPropagation; _onClick3 && _onClick3.apply(undefined, [e].concat(args)); }, className: className ? (0, _helperFunctions.flippyClass)(isActive(option), 'switch__option__label', 'active', 'inactive') + ' ' + (0, _helperFunctions.flippyClass)(isActive(option), className, 'active', 'inactive') : '' + (0, _helperFunctions.flippyClass)(isActive(option), 'switch__option__label', 'active', 'inactive') }, props); }; if (typeof children === 'function') { return children({ getOptionProps: getOptionProps, renderContent: renderContent, getLabelProps: getLabelProps, activeOption: activeOption, isActive: isActive }); } else { return _react2.default.createElement( _react2.default.Fragment, null, console.log(props, activeOption), options.map(function (option) { return _react2.default.createElement( _react2.default.Fragment, { key: option.id }, _react2.default.createElement( 'div', (0, _extends3.default)({}, getOptionProps({ option: option.id })), option.label && _react2.default.createElement( 'div', (0, _extends3.default)({}, getLabelProps({ option: option.id })), option.label ), option.renderLabel && option.renderLabel({ getLabelProps: getLabelProps, option: option }) ), option.content && renderContent(function (_ref5) { var getContentProps = _ref5.getContentProps; return _react2.default.createElement( 'div', (0, _extends3.default)({}, getContentProps({ option: option.id, style: { height: '50rem', width: '50rem', background: '#227' } })), option.content ); }, option.id) ); }) ); } }; Switch.propTypes = { children: _propTypes2.default.func.isRequired }; Switch.defaultProps = { useStyleTemplate: 'default', defaultActiveOption: null }; var enhance = (0, _recompose.compose)((0, _recompose.onlyUpdateForKeys)(['children'])); exports.default = enhance(Switch);