UNPKG

3.99 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 _helperFunctions = require('./helperFunctions');
24
25function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
27var SelectOpen = function SelectOpen(_ref) {
28 var externalCurrentOption = _ref.externalCurrentOption,
29 _ref$isSwitch = _ref.isSwitch,
30 isSwitch = _ref$isSwitch === undefined ? false : _ref$isSwitch,
31 className = _ref.className,
32 options = _ref.options,
33 renderOption = _ref.renderOption,
34 _ref$onChange = _ref.onChange,
35 onChange = _ref$onChange === undefined ? function () {
36 return null;
37 } : _ref$onChange,
38 defaultCurrentOption = _ref.defaultCurrentOption;
39
40 var _useReducer = (0, _react.useReducer)(function (state, newState) {
41 return (0, _extends3.default)({}, state, newState);
42 }, {
43 currentOption: defaultCurrentOption ? defaultCurrentOption : options[0]
44 }),
45 _useReducer2 = (0, _slicedToArray3.default)(_useReducer, 2),
46 state = _useReducer2[0],
47 setState = _useReducer2[1];
48
49 var setCurrentOption = function setCurrentOption(option) {
50 return setState({ currentOption: option });
51 };
52 var currentOption = state.currentOption;
53
54
55 (0, _react.useEffect)(function () {
56 externalCurrentOption && externalCurrentOption.value && setCurrentOption(externalCurrentOption);
57 }, [externalCurrentOption]);
58
59 var isActive = function isActive(option) {
60 return option.value === currentOption.value;
61 };
62
63 var getNextOption = function getNextOption(option) {
64 var index = options.findIndex(function (o) {
65 return o.value === option.value;
66 });
67 if (index >= options.length - 1) {
68 return options[0];
69 } else {
70 return options[index + 1];
71 }
72 };
73 var _getOptionProps = function _getOptionProps(_ref2) {
74 var onClick = _ref2.onClick,
75 style = _ref2.style,
76 className = _ref2.className,
77 option = _ref2.option,
78 props = (0, _objectWithoutProperties3.default)(_ref2, ['onClick', 'style', 'className', 'option']);
79
80 var optionIsActive = isActive(option);
81 var handleClassName = (0, _helperFunctions.advancedMulti)({
82 unflattenedBases: [className, 'selectopen__option'],
83 flipVars: [[optionIsActive, 'active', 'inactive']]
84 });
85 var handleOnClick = function handleOnClick(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 if (!isSwitch) {
92 setCurrentOption(option);
93 onChange(option);
94 } else {
95 setCurrentOption(getNextOption(currentOption));
96 onChange(getNextOption(currentOption));
97 }
98 onClick && onClick.apply(undefined, [e].concat(args));
99 };
100 return (0, _extends3.default)({
101 onClick: handleOnClick,
102 className: handleClassName,
103 style: style
104 }, props);
105 };
106 return _react2.default.createElement(
107 'div',
108 {
109 className: className ? 'selectopen__container' : 'selectopen__container ' + className
110 },
111 options.map(function (option) {
112 return renderOption({
113 option: option,
114 isActive: isActive(option),
115 getOptionProps: function getOptionProps(props) {
116 return _getOptionProps((0, _extends3.default)({ option: option }, props));
117 }
118 });
119 })
120 );
121};
122
123exports.default = _react2.default.memo(SelectOpen);
\No newline at end of file