1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
|
8 |
|
9 | var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
|
10 |
|
11 | var _extends2 = require('babel-runtime/helpers/extends');
|
12 |
|
13 | var _extends3 = _interopRequireDefault(_extends2);
|
14 |
|
15 | var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
16 |
|
17 | var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
18 |
|
19 | var _react = require('react');
|
20 |
|
21 | var _react2 = _interopRequireDefault(_react);
|
22 |
|
23 | var _helperFunctions = require('./helperFunctions');
|
24 |
|
25 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
26 |
|
27 | var 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 |
|
123 | exports.default = _react2.default.memo(SelectOpen); |
\ | No newline at end of file |