@rescui/select 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE.txt +202 -0
  2. package/README.md +3 -0
  3. package/lib/common-prop-types.d.ts +25 -0
  4. package/lib/common-prop-types.js +18 -0
  5. package/lib/index.css +742 -0
  6. package/lib/index.d.ts +3 -0
  7. package/lib/index.js +4 -0
  8. package/lib/key-codes.d.ts +7 -0
  9. package/lib/key-codes.js +8 -0
  10. package/lib/parts/common-select.module.pcss.js +4 -0
  11. package/lib/parts/foldable.d.ts +34 -0
  12. package/lib/parts/foldable.js +297 -0
  13. package/lib/parts/form-trigger-wrapper.d.ts +13 -0
  14. package/lib/parts/form-trigger-wrapper.js +87 -0
  15. package/lib/parts/form-trigger.module.pcss.js +9 -0
  16. package/lib/parts/multiselect.d.ts +80 -0
  17. package/lib/parts/multiselect.js +399 -0
  18. package/lib/parts/native-select.d.ts +29 -0
  19. package/lib/parts/native-select.js +282 -0
  20. package/lib/parts/native-select.module.pcss.js +9 -0
  21. package/lib/parts/trigger.d.ts +37 -0
  22. package/lib/parts/trigger.js +307 -0
  23. package/lib/parts/trigger.module.pcss.js +30 -0
  24. package/lib/select.d.ts +86 -0
  25. package/lib/select.js +391 -0
  26. package/lib/state/multiselect/actions.d.ts +36 -0
  27. package/lib/state/multiselect/actions.js +45 -0
  28. package/lib/state/multiselect/reducer.d.ts +21 -0
  29. package/lib/state/multiselect/reducer.js +203 -0
  30. package/lib/state/multiselect/selectors.d.ts +6 -0
  31. package/lib/state/multiselect/selectors.js +39 -0
  32. package/lib/state/select/actions.d.ts +81 -0
  33. package/lib/state/select/actions.js +87 -0
  34. package/lib/state/select/reducer.d.ts +22 -0
  35. package/lib/state/select/reducer.js +199 -0
  36. package/lib/state/select/selectors.d.ts +20 -0
  37. package/lib/state/select/selectors.js +114 -0
  38. package/lib/types.d.ts +51 -0
  39. package/lib/utils.d.ts +8 -0
  40. package/lib/utils.js +102 -0
  41. package/package.json +46 -0
@@ -0,0 +1,203 @@
1
+ import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
2
+ import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
3
+ import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
4
+ import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
5
+ import _toConsumableArray from "@babel/runtime-corejs3/helpers/esm/toConsumableArray";
6
+ import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
7
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
8
+ import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
9
+ import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
10
+ import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
11
+ import "core-js/modules/web.dom-collections.for-each.js";
12
+
13
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) { symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
14
+
15
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { Object.defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
+
17
+ import { baseReducer } from '../select/reducer.js';
18
+ import { setGroups, clearSelectedAndCloseMenu, closeMenu, openMenu } from '../select/actions.js';
19
+ import { getDefaultCursorIndex, getOptionValue } from '../select/selectors.js';
20
+ import { getGroups, isEmpty } from './selectors.js';
21
+ import { setSelectedValue, setHideSelected, removeSelectedOption, removeSelectedIndex, addSelectedIndex } from './actions.js';
22
+
23
+ function getInitialState(groups) {
24
+ var defaultSelected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
25
+ var hideSelected = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
26
+ return {
27
+ groups: groups,
28
+ menuIsOpen: false,
29
+ selected: defaultSelected,
30
+ searchString: '',
31
+ filteredGroups: null,
32
+ cursorIndex: getDefaultCursorIndex(groups),
33
+ hideSelected: hideSelected,
34
+ groupsWithoutSelected: groups
35
+ };
36
+ }
37
+
38
+ function handleOpenMenu(state) {
39
+ return _objectSpread(_objectSpread({}, state), {}, {
40
+ menuIsOpen: true
41
+ });
42
+ }
43
+
44
+ function handleCloseMenu(state) {
45
+ return _objectSpread(_objectSpread({}, state), {}, {
46
+ menuIsOpen: false
47
+ });
48
+ }
49
+
50
+ function clearSelection(state) {
51
+ var groups = getGroups(state);
52
+ return {
53
+ selected: null,
54
+ cursorIndex: getDefaultCursorIndex(groups),
55
+ menuIsOpen: false
56
+ };
57
+ }
58
+
59
+ function filterSelected(groups, selected) {
60
+ var selectedValues = {};
61
+
62
+ if (selected) {
63
+ selected.forEach(function (s) {
64
+ selectedValues[getOptionValue(s)] = true;
65
+ });
66
+ }
67
+
68
+ return _mapInstanceProperty(groups).call(groups, function (g) {
69
+ var newOptions = [];
70
+
71
+ if (g.options) {
72
+ var _context;
73
+
74
+ newOptions = _filterInstanceProperty(_context = g.options).call(_context, function (opt) {
75
+ return !selectedValues[getOptionValue(opt)];
76
+ });
77
+ }
78
+
79
+ return _objectSpread(_objectSpread({}, g), {}, {
80
+ options: newOptions
81
+ });
82
+ });
83
+ }
84
+
85
+ function addSelectedByIndex(state, index) {
86
+ var _context2;
87
+
88
+ var groups = getGroups(state);
89
+
90
+ var _index = _slicedToArray(index, 2),
91
+ grpIndex = _index[0],
92
+ optIndex = _index[1];
93
+
94
+ var selected = Array.isArray(state.selected) ? state.selected : [state.selected];
95
+ var selectedOption = groups[grpIndex].options[optIndex];
96
+ var newSelected = !state.selected ? [selectedOption] : _concatInstanceProperty(_context2 = []).call(_context2, _toConsumableArray(selected), [selectedOption]);
97
+ return {
98
+ selected: newSelected,
99
+ menuIsOpen: false,
100
+ searchString: '',
101
+ groupsWithoutSelected: filterSelected(state.groups, newSelected)
102
+ };
103
+ }
104
+
105
+ function removeSelected(state, option) {
106
+ var selected = Array.isArray(state.selected) ? state.selected : [state.selected];
107
+
108
+ var selectedWithoutOne = _filterInstanceProperty(selected).call(selected, function (o) {
109
+ return getOptionValue(o) !== getOptionValue(option);
110
+ });
111
+
112
+ return {
113
+ selected: selectedWithoutOne,
114
+ menuIsOpen: false,
115
+ searchString: '',
116
+ groupsWithoutSelected: filterSelected(state.groups, selectedWithoutOne)
117
+ };
118
+ }
119
+
120
+ function removeSelectedByIndex(state, index) {
121
+ var groups = getGroups(state);
122
+
123
+ var _index2 = _slicedToArray(index, 2),
124
+ grpIndex = _index2[0],
125
+ optIndex = _index2[1];
126
+
127
+ var unselectedOption = groups[grpIndex].options[optIndex];
128
+ return removeSelected(state, unselectedOption);
129
+ }
130
+
131
+ function handleToggleHideSelected(state, hideSelected) {
132
+ var result = {
133
+ hideSelected: hideSelected
134
+ };
135
+
136
+ if (hideSelected) {
137
+ var selected = Array.isArray(state.selected) ? state.selected : [state.selected];
138
+ result.groupsWithoutSelected = filterSelected(state.groups, selected);
139
+ }
140
+
141
+ return result;
142
+ }
143
+
144
+ function setSelectedControllable(state, selected) {
145
+ var result = {
146
+ selected: selected
147
+ };
148
+
149
+ if (state.hideSelected) {
150
+ result.groupsWithoutSelected = filterSelected(state.groups, selected);
151
+ }
152
+
153
+ return result;
154
+ }
155
+
156
+ function addDefaultCursorPosFromNewState(state) {
157
+ return _objectSpread(_objectSpread({}, state), {}, {
158
+ cursorIndex: getDefaultCursorIndex(getGroups(state))
159
+ });
160
+ } // eslint-disable-next-line complexity
161
+
162
+
163
+ function multiselectReducer(state, action) {
164
+ switch (action.type) {
165
+ case openMenu.type:
166
+ return _objectSpread(_objectSpread({}, state), handleOpenMenu(state));
167
+
168
+ case closeMenu.type:
169
+ return _objectSpread(_objectSpread({}, state), handleCloseMenu(state));
170
+
171
+ case addSelectedIndex.type:
172
+ return addDefaultCursorPosFromNewState(_objectSpread(_objectSpread({}, state), addSelectedByIndex(state, action.index)));
173
+
174
+ case removeSelectedIndex.type:
175
+ return addDefaultCursorPosFromNewState(_objectSpread(_objectSpread({}, state), removeSelectedByIndex(state, action.index)));
176
+
177
+ case removeSelectedOption.type:
178
+ return addDefaultCursorPosFromNewState(_objectSpread(_objectSpread({}, state), removeSelected(state, action.unselectedOption)));
179
+
180
+ case setHideSelected.type:
181
+ return addDefaultCursorPosFromNewState(_objectSpread(_objectSpread({}, state), handleToggleHideSelected(state, action.hideSelected)));
182
+
183
+ case clearSelectedAndCloseMenu.type:
184
+ return _objectSpread(_objectSpread(_objectSpread({}, state), clearSelection(state)), {}, {
185
+ groupsWithoutSelected: state.groups
186
+ });
187
+
188
+ case setGroups.type:
189
+ var selected = Array.isArray(state.selected) ? state.selected : [state.selected];
190
+ return _objectSpread({}, getInitialState(action.groups, selected, state.hideSelected));
191
+
192
+ case setSelectedValue.type:
193
+ return addDefaultCursorPosFromNewState(_objectSpread(_objectSpread({}, state), setSelectedControllable(state, action.selected)));
194
+
195
+ default:
196
+ return baseReducer(state, action, {
197
+ getGroups: getGroups,
198
+ isEmpty: isEmpty
199
+ });
200
+ }
201
+ }
202
+
203
+ export { getInitialState, multiselectReducer };
@@ -0,0 +1,6 @@
1
+ import { SelectOption, State } from '../../types';
2
+ export declare const getGroups: (state: State) => import("../../types").Groups;
3
+ export declare const isEmpty: (state: State) => boolean;
4
+ export declare const getPlainOptions: (state: State) => any[];
5
+ export declare const isSelected: (state: State, value: string) => boolean;
6
+ export declare const getSelectedArray: (state: State) => SelectOption[];
@@ -0,0 +1,39 @@
1
+ import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
2
+ import { getPlainOptionsFromGroups, getOptionValue } from '../select/selectors.js';
3
+
4
+ var getGroups = function getGroups(state) {
5
+ var groups = state.searchString && state.searchString !== '' ? state.filteredGroups : state.groups;
6
+ return state.hideSelected ? state.groupsWithoutSelected : groups;
7
+ };
8
+
9
+ var isEmpty = function isEmpty(state) {
10
+ var groups = getGroups(state);
11
+ return groups.length === 0 || groups.every(function (g) {
12
+ return g.options.length === 0;
13
+ });
14
+ };
15
+
16
+ var getPlainOptions = function getPlainOptions(state) {
17
+ return getPlainOptionsFromGroups(getGroups(state));
18
+ };
19
+
20
+ var isSelected = function isSelected(state, value) {
21
+ if (!state.selected) {
22
+ return false;
23
+ }
24
+
25
+ var selected = Array.isArray(state.selected) ? state.selected : [state.selected];
26
+ return Boolean(_findInstanceProperty(selected).call(selected, function (o) {
27
+ return getOptionValue(o) === value;
28
+ }));
29
+ };
30
+
31
+ var getSelectedArray = function getSelectedArray(state) {
32
+ if (!state.selected) {
33
+ return [];
34
+ }
35
+
36
+ return Array.isArray(state.selected) ? state.selected : [state.selected];
37
+ };
38
+
39
+ export { getGroups, getPlainOptions, getSelectedArray, isEmpty, isSelected };
@@ -0,0 +1,81 @@
1
+ import { Index, Groups, SelectOption, FilterFn } from '../../types';
2
+ export declare function cursorMovedUp(): {
3
+ type: string;
4
+ };
5
+ export declare namespace cursorMovedUp {
6
+ var type: string;
7
+ }
8
+ export declare function cursorMovedDown(): {
9
+ type: string;
10
+ };
11
+ export declare namespace cursorMovedDown {
12
+ var type: string;
13
+ }
14
+ export declare function setCursorIndex(cursorIndex: Index): {
15
+ type: string;
16
+ cursorIndex: Index;
17
+ };
18
+ export declare namespace setCursorIndex {
19
+ var type: string;
20
+ }
21
+ export declare function setGroups(groups: Groups): {
22
+ type: string;
23
+ groups: Groups;
24
+ };
25
+ export declare namespace setGroups {
26
+ var type: string;
27
+ }
28
+ export declare function setSelectedValue(selected: SelectOption): {
29
+ type: string;
30
+ selected: SelectOption;
31
+ };
32
+ export declare namespace setSelectedValue {
33
+ var type: string;
34
+ }
35
+ export declare function setSelectedIndex(index: Index): {
36
+ type: string;
37
+ index: Index;
38
+ };
39
+ export declare namespace setSelectedIndex {
40
+ var type: string;
41
+ }
42
+ export declare function addSelectedIndex(index: Index): {
43
+ type: string;
44
+ index: Index;
45
+ };
46
+ export declare namespace addSelectedIndex {
47
+ var type: string;
48
+ }
49
+ export declare function removeSelectedIndex(index: Index): {
50
+ type: string;
51
+ index: Index;
52
+ };
53
+ export declare namespace removeSelectedIndex {
54
+ var type: string;
55
+ }
56
+ export declare function clearSelectedAndCloseMenu(): {
57
+ type: string;
58
+ };
59
+ export declare namespace clearSelectedAndCloseMenu {
60
+ var type: string;
61
+ }
62
+ export declare function setSearchString(searchString: string, filterFn?: FilterFn): {
63
+ type: string;
64
+ searchString: string;
65
+ filterFn: FilterFn;
66
+ };
67
+ export declare namespace setSearchString {
68
+ var type: string;
69
+ }
70
+ export declare function openMenu(): {
71
+ type: string;
72
+ };
73
+ export declare namespace openMenu {
74
+ var type: string;
75
+ }
76
+ export declare function closeMenu(): {
77
+ type: string;
78
+ };
79
+ export declare namespace closeMenu {
80
+ var type: string;
81
+ }
@@ -0,0 +1,87 @@
1
+ function cursorMovedUp() {
2
+ return {
3
+ type: cursorMovedUp.type
4
+ };
5
+ }
6
+
7
+ cursorMovedUp.type = 'STEP_UP';
8
+
9
+ function cursorMovedDown() {
10
+ return {
11
+ type: cursorMovedDown.type
12
+ };
13
+ }
14
+
15
+ cursorMovedDown.type = 'STEP_DOWN';
16
+
17
+ function setCursorIndex(cursorIndex) {
18
+ return {
19
+ type: setCursorIndex.type,
20
+ cursorIndex: cursorIndex
21
+ };
22
+ }
23
+
24
+ setCursorIndex.type = 'SET_CURSOR_INDEX';
25
+
26
+ function setGroups(groups) {
27
+ return {
28
+ type: setGroups.type,
29
+ groups: groups
30
+ };
31
+ }
32
+
33
+ setGroups.type = 'SET_GROUPS';
34
+
35
+ function setSelectedValue(selected) {
36
+ return {
37
+ type: setSelectedValue.type,
38
+ selected: selected
39
+ };
40
+ }
41
+
42
+ setSelectedValue.type = 'SET_SELECTED_VALUE';
43
+
44
+ function setSelectedIndex(index) {
45
+ return {
46
+ type: setSelectedIndex.type,
47
+ index: index
48
+ };
49
+ }
50
+
51
+ setSelectedIndex.type = 'SET_SELECTED_BY_INDEX';
52
+
53
+ function clearSelectedAndCloseMenu() {
54
+ return {
55
+ type: clearSelectedAndCloseMenu.type
56
+ };
57
+ }
58
+
59
+ clearSelectedAndCloseMenu.type = 'CLEAR_SELECTED_AND_CLOSE_MENU';
60
+
61
+ function setSearchString(searchString) {
62
+ var filterFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
63
+ return {
64
+ type: setSearchString.type,
65
+ searchString: searchString,
66
+ filterFn: filterFn
67
+ };
68
+ }
69
+
70
+ setSearchString.type = 'SET_SEARCH_STRING';
71
+
72
+ function openMenu() {
73
+ return {
74
+ type: openMenu.type
75
+ };
76
+ }
77
+
78
+ openMenu.type = 'OPEN_MENU';
79
+
80
+ function closeMenu() {
81
+ return {
82
+ type: closeMenu.type
83
+ };
84
+ }
85
+
86
+ closeMenu.type = 'CLOSE_MENU';
87
+ export { clearSelectedAndCloseMenu, closeMenu, cursorMovedDown, cursorMovedUp, openMenu, setCursorIndex, setGroups, setSearchString, setSelectedIndex, setSelectedValue };
@@ -0,0 +1,22 @@
1
+ import type { SelectOptionsGroup, SelectOption, Groups, State, Index, Action, SelectReducer } from '../../types';
2
+ export declare function getInitialState(groups: SelectOptionsGroup[], defaultSelected?: SelectOption): State;
3
+ export declare function baseReducer(state: State, action: Action, overrides?: {}): {
4
+ cursorIndex: any;
5
+ groups: Groups;
6
+ menuIsOpen: boolean;
7
+ selected: SelectOption | SelectOption[];
8
+ searchString: string;
9
+ filteredGroups: Groups;
10
+ hideSelected?: boolean;
11
+ groupsWithoutSelected?: Groups;
12
+ } | {
13
+ selected: any;
14
+ groups: Groups;
15
+ menuIsOpen: boolean;
16
+ searchString: string;
17
+ filteredGroups: Groups;
18
+ cursorIndex: Index;
19
+ hideSelected?: boolean;
20
+ groupsWithoutSelected?: Groups;
21
+ };
22
+ export declare const selectReducer: SelectReducer;
@@ -0,0 +1,199 @@
1
+ import "core-js/modules/web.dom-collections.for-each.js";
2
+ import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
3
+ import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
4
+ import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
5
+ import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
6
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
7
+ import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
8
+ import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
9
+ import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
10
+
11
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) { symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
12
+
13
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { Object.defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; }
14
+
15
+ import { setSelectedIndex, setSearchString, clearSelectedAndCloseMenu, setSelectedValue, setGroups, setCursorIndex, cursorMovedDown, cursorMovedUp, closeMenu, openMenu } from './actions.js';
16
+ import { getDefaultCursorIndex, getGroups, isEmpty, getCursorIndex } from './selectors.js';
17
+
18
+ function getInitialState(groups) {
19
+ var defaultSelected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
20
+ return {
21
+ groups: groups,
22
+ menuIsOpen: false,
23
+ selected: defaultSelected,
24
+ searchString: '',
25
+ filteredGroups: null,
26
+ cursorIndex: getDefaultCursorIndex(groups)
27
+ };
28
+ }
29
+
30
+ function setSelectedByIndex(state, index) {
31
+ var groups = getGroups(state);
32
+
33
+ var _index = _slicedToArray(index, 2),
34
+ grpIndex = _index[0],
35
+ optIndex = _index[1];
36
+
37
+ var selectedOption = groups[grpIndex].options[optIndex];
38
+ return {
39
+ selected: selectedOption,
40
+ cursorIndex: getDefaultCursorIndex(groups),
41
+ menuIsOpen: false,
42
+ searchString: ''
43
+ };
44
+ }
45
+
46
+ function clearSelection(state) {
47
+ var groups = getGroups(state);
48
+ return {
49
+ selected: null,
50
+ cursorIndex: getDefaultCursorIndex(groups),
51
+ menuIsOpen: false
52
+ };
53
+ }
54
+
55
+ function nextIndex(index, isDownDirection) {
56
+ return isDownDirection ? index + 1 : index - 1;
57
+ }
58
+
59
+ function isIndexOutOfRange(index, len) {
60
+ return index < 0 || index >= len;
61
+ }
62
+
63
+ function applySearchFilter(state, searchString, filterFn) {
64
+ if (searchString === '') {
65
+ var selected = Array.isArray(state.selected) ? state.selected[0] : state.selected;
66
+ return _objectSpread(_objectSpread({}, getInitialState(state.groups, selected)), {}, {
67
+ menuIsOpen: state.menuIsOpen
68
+ });
69
+ } else {
70
+ var _context;
71
+
72
+ var filteredGroups = _mapInstanceProperty(_context = state.groups).call(_context, function (g) {
73
+ var _context2;
74
+
75
+ return _objectSpread(_objectSpread({}, g), {}, {
76
+ options: _filterInstanceProperty(_context2 = g.options).call(_context2, filterFn)
77
+ });
78
+ });
79
+
80
+ return {
81
+ searchString: searchString,
82
+ filteredGroups: filteredGroups,
83
+ cursorIndex: getDefaultCursorIndex(filteredGroups),
84
+ menuIsOpen: true
85
+ };
86
+ }
87
+ }
88
+
89
+ function handleOpenMenu(state) {
90
+ return _objectSpread(_objectSpread({}, applySearchFilter(state, '')), {}, {
91
+ menuIsOpen: true
92
+ });
93
+ }
94
+
95
+ function handleCloseMenu(state) {
96
+ return _objectSpread(_objectSpread({}, applySearchFilter(state, '')), {}, {
97
+ menuIsOpen: false
98
+ });
99
+ } // eslint-disable-next-line complexity
100
+
101
+
102
+ function moveCursor(state, isDownDirection, overrides) {
103
+ var isGroupsEmpty = overrides.isEmpty ? overrides.isEmpty(state) : isEmpty(state);
104
+ if (isGroupsEmpty) return getCursorIndex(state);
105
+ var groups = overrides.getGroups ? overrides.getGroups(state) : getGroups(state);
106
+
107
+ var _getCursorIndex = getCursorIndex(state),
108
+ _getCursorIndex2 = _slicedToArray(_getCursorIndex, 2),
109
+ grpIndex = _getCursorIndex2[0],
110
+ optIndex = _getCursorIndex2[1];
111
+
112
+ var optLenByGroup = _mapInstanceProperty(groups).call(groups, function (g) {
113
+ return g.options ? g.options.length : 0;
114
+ });
115
+
116
+ var newGrpIndex = grpIndex;
117
+ var newOptIndex = nextIndex(optIndex, isDownDirection);
118
+
119
+ while (isIndexOutOfRange(newOptIndex, optLenByGroup[newGrpIndex]) || isIndexOutOfRange(newGrpIndex, groups.length)) {
120
+ newGrpIndex = nextIndex(newGrpIndex, isDownDirection);
121
+
122
+ if (isIndexOutOfRange(newGrpIndex, groups.length)) {
123
+ newGrpIndex = isDownDirection ? 0 : groups.length - 1;
124
+ }
125
+
126
+ newOptIndex = isDownDirection ? 0 : optLenByGroup[newGrpIndex] - 1;
127
+ }
128
+
129
+ return [newGrpIndex, newOptIndex];
130
+ }
131
+
132
+ function down(state, overrides) {
133
+ return moveCursor(state, true, overrides);
134
+ }
135
+
136
+ function up(state, overrides) {
137
+ return moveCursor(state, false, overrides);
138
+ } // eslint-disable-next-line complexity
139
+
140
+
141
+ function baseReducer(state, action) {
142
+ var overrides = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
143
+
144
+ switch (action.type) {
145
+ case openMenu.type:
146
+ return _objectSpread(_objectSpread({}, state), handleOpenMenu(state));
147
+
148
+ case closeMenu.type:
149
+ return _objectSpread(_objectSpread({}, state), handleCloseMenu(state));
150
+
151
+ case cursorMovedUp.type:
152
+ return _objectSpread(_objectSpread({}, state), {}, {
153
+ cursorIndex: up(state, overrides)
154
+ });
155
+
156
+ case cursorMovedDown.type:
157
+ return _objectSpread(_objectSpread({}, state), {}, {
158
+ cursorIndex: down(state, overrides)
159
+ });
160
+
161
+ case setCursorIndex.type:
162
+ return _objectSpread(_objectSpread({}, state), {}, {
163
+ cursorIndex: action.cursorIndex
164
+ });
165
+
166
+ case setGroups.type:
167
+ var selected = Array.isArray(state.selected) ? state.selected[0] : state.selected;
168
+ return _objectSpread({}, getInitialState(action.groups, selected));
169
+
170
+ case setSelectedValue.type:
171
+ return action.selected !== undefined ? _objectSpread(_objectSpread({}, state), {}, {
172
+ selected: action.selected
173
+ }) : _objectSpread({}, state);
174
+
175
+ case setSelectedIndex.type:
176
+ return _objectSpread(_objectSpread({}, state), setSelectedByIndex(state, action.index));
177
+
178
+ case clearSelectedAndCloseMenu.type:
179
+ return _objectSpread(_objectSpread({}, state), clearSelection(state));
180
+
181
+ case setSearchString.type:
182
+ return _objectSpread(_objectSpread({}, state), applySearchFilter(state, action.searchString, action.filterFn));
183
+
184
+ default:
185
+ throw new Error('Unexpected action in Select/Multiselect component');
186
+ }
187
+ }
188
+
189
+ var selectReducer = function selectReducer(state, action) {
190
+ switch (action.type) {
191
+ case setSelectedIndex.type:
192
+ return _objectSpread(_objectSpread({}, state), setSelectedByIndex(state, action.index));
193
+
194
+ default:
195
+ return baseReducer(state, action);
196
+ }
197
+ };
198
+
199
+ export { baseReducer, getInitialState, selectReducer };
@@ -0,0 +1,20 @@
1
+ import type { SelectOption, State, Index, Groups } from '../../types';
2
+ export declare const getGroups: (state: State) => Groups;
3
+ export declare const getCursorIndex: (state: State) => Index;
4
+ export declare const isIndexMatchCursor: (state: State, index: Index) => boolean;
5
+ export declare const isEmpty: (state: State) => boolean;
6
+ export declare const withoutGroupsLabel: ({ groups }: {
7
+ groups: Groups;
8
+ }) => boolean;
9
+ export declare const OptionGroupTypes: {
10
+ HEADER: string;
11
+ OPTION: string;
12
+ DIVIDER: string;
13
+ };
14
+ export declare const getPlainOptionsFromGroups: (groups: Groups) => any[];
15
+ export declare const getPlainOptions: (state: State) => any[];
16
+ export declare function getOptionValue(option: SelectOption): string;
17
+ export declare const getSelectedValue: (state: State) => string;
18
+ export declare const getSelectedLabel: (state: State) => string;
19
+ export declare const getSelected: (state: State) => SelectOption | SelectOption[];
20
+ export declare const getDefaultCursorIndex: (groups: Groups) => Index;