UNPKG

8.01 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
8
9var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
10
11var _extends2 = require('babel-runtime/helpers/extends');
12
13var _extends3 = _interopRequireDefault(_extends2);
14
15var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
16
17var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
18
19var _react = require('react');
20
21var _react2 = _interopRequireDefault(_react);
22
23var _propTypes = require('prop-types');
24
25var _propTypes2 = _interopRequireDefault(_propTypes);
26
27var _RTGTransition = require('./RTGTransition');
28
29var _RTGTransition2 = _interopRequireDefault(_RTGTransition);
30
31var _recompose = require('recompose');
32
33var _helperFunctions = require('./helperFunctions');
34
35var _defaultStyles = require('./defaultStyles');
36
37function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
38
39var styleTemplate = void 0;
40
41var Switch = function Switch(props) {
42 var children = props.children,
43 defaultActiveOption = props.defaultActiveOption,
44 customStyleTemplate = props.customStyleTemplate,
45 styleTemplatePreset = props.styleTemplatePreset,
46 transitionType = props.transitionType,
47 options = props.options;
48
49 var _useReducer = (0, _react.useReducer)(function (state, newState) {
50 return (0, _extends3.default)({}, state, newState);
51 }, {
52 activeOption: defaultActiveOption
53 }),
54 _useReducer2 = (0, _slicedToArray3.default)(_useReducer, 2),
55 state = _useReducer2[0],
56 setState = _useReducer2[1];
57
58 var activeOption = state.activeOption;
59
60 var setActiveOption = function setActiveOption(option) {
61 return setState({ activeOption: option });
62 };
63 if (customStyleTemplate) {
64 styleTemplate = customStyleTemplate;
65 } else if (styleTemplatePreset) {
66 styleTemplate = styleTemplatePreset ? _defaultStyles.switchStyleTemplates[styleTemplatePreset] : {};
67 } else {
68 styleTemplate = _defaultStyles.switchStyleTemplates.default;
69 }
70
71 var isActive = function isActive(option) {
72 return activeOption === option;
73 };
74
75 var getOptionProps = function getOptionProps() {
76 var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
77
78 var className = _ref.className,
79 style = _ref.style,
80 _onClick = _ref.onClick,
81 option = _ref.option,
82 props = (0, _objectWithoutProperties3.default)(_ref, ['className', 'style', 'onClick', 'option']);
83
84 return (0, _extends3.default)({
85 onClick: function onClick(e) {
86 for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
87 args[_key - 1] = arguments[_key];
88 }
89
90 e.stopPropagation;
91 setActiveOption(option);
92 _onClick && _onClick.apply(undefined, [e].concat(args));
93 },
94 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'),
95 style: (0, _extends3.default)({}, styleTemplate.option, style)
96 }, props);
97 };
98
99 var renderContent = function renderContent(func, option) {
100 return _react2.default.createElement(
101 _RTGTransition2.default,
102 { in: isActive(option), transitionType: transitionType },
103 function (_ref2) {
104 var transitionStyle = _ref2.style;
105
106 var getContentProps = function getContentProps() {
107 var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
108
109 var className = _ref3.className,
110 _ref3$style = _ref3.style,
111 style = _ref3$style === undefined ? {} : _ref3$style,
112 _onClick2 = _ref3.onClick,
113 option = _ref3.option,
114 props = (0, _objectWithoutProperties3.default)(_ref3, ['className', 'style', 'onClick', 'option']);
115
116 return (0, _extends3.default)({
117 onClick: function onClick(e) {
118 for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
119 args[_key2 - 1] = arguments[_key2];
120 }
121
122 e.stopPropagation;
123 _onClick2 && _onClick2.apply(undefined, [e].concat(args));
124 },
125 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'),
126 style: (0, _extends3.default)({}, styleTemplate.content, transitionStyle, style)
127 }, props);
128 };
129 return func({ getContentProps: getContentProps });
130 }
131 );
132 };
133 var getLabelProps = function getLabelProps() {
134 var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
135
136 var className = _ref4.className,
137 style = _ref4.style,
138 _onClick3 = _ref4.onClick,
139 option = _ref4.option,
140 props = (0, _objectWithoutProperties3.default)(_ref4, ['className', 'style', 'onClick', 'option']);
141
142 return (0, _extends3.default)({
143 onClick: function onClick(e) {
144 for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
145 args[_key3 - 1] = arguments[_key3];
146 }
147
148 e.stopPropagation;
149 _onClick3 && _onClick3.apply(undefined, [e].concat(args));
150 },
151 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')
152
153 }, props);
154 };
155
156 if (typeof children === 'function') {
157 return children({
158 getOptionProps: getOptionProps,
159 renderContent: renderContent,
160 getLabelProps: getLabelProps,
161 activeOption: activeOption,
162 isActive: isActive
163 });
164 } else {
165 return _react2.default.createElement(
166 _react2.default.Fragment,
167 null,
168 console.log(props, activeOption),
169 options.map(function (option) {
170 return _react2.default.createElement(
171 _react2.default.Fragment,
172 { key: option.id },
173 _react2.default.createElement(
174 'div',
175 (0, _extends3.default)({}, getOptionProps({ option: option.id })),
176 option.label && _react2.default.createElement(
177 'div',
178 (0, _extends3.default)({}, getLabelProps({ option: option.id })),
179 option.label
180 ),
181 option.renderLabel && option.renderLabel({ getLabelProps: getLabelProps, option: option })
182 ),
183 option.content && renderContent(function (_ref5) {
184 var getContentProps = _ref5.getContentProps;
185 return _react2.default.createElement(
186 'div',
187 (0, _extends3.default)({}, getContentProps({
188 option: option.id,
189 style: {
190 height: '50rem',
191 width: '50rem',
192 background: '#227'
193 }
194 })),
195 option.content
196 );
197 }, option.id)
198 );
199 })
200 );
201 }
202};
203
204Switch.propTypes = {
205 children: _propTypes2.default.func.isRequired
206};
207
208Switch.defaultProps = {
209 useStyleTemplate: 'default',
210 defaultActiveOption: null
211};
212
213var enhance = (0, _recompose.compose)((0, _recompose.onlyUpdateForKeys)(['children']));
214
215exports.default = enhance(Switch);
\No newline at end of file