UNPKG

1.4 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = getUpdatedActiveIndex;
9exports.isDisabledOption = isDisabledOption;
10exports.skipDisabledOptions = skipDisabledOptions;
11
12var _nodash = require("./nodash");
13
14var _hasOwnProperty = _interopRequireDefault(require("./hasOwnProperty"));
15
16function isDisabledOption(index, items) {
17 var option = items[index];
18 return !!option && !(0, _nodash.isString)(option) && (0, _hasOwnProperty["default"])(option, 'disabled');
19}
20
21function skipDisabledOptions(currentIndex, key, items) {
22 var newIndex = currentIndex;
23
24 while (isDisabledOption(newIndex, items)) {
25 newIndex += key === 'ArrowUp' ? -1 : 1;
26 }
27
28 return newIndex;
29}
30
31function getUpdatedActiveIndex(currentIndex, key, items) {
32 var newIndex = currentIndex; // Increment or decrement index based on user keystroke.
33
34 newIndex += key === 'ArrowUp' ? -1 : 1; // Skip over any disabled options.
35
36 newIndex = skipDisabledOptions(newIndex, key, items); // If we've reached the end, go back to the beginning or vice-versa.
37
38 if (newIndex === items.length) {
39 newIndex = -1;
40 } else if (newIndex === -2) {
41 newIndex = items.length - 1; // Skip over any disabled options.
42
43 newIndex = skipDisabledOptions(newIndex, key, items);
44 }
45
46 return newIndex;
47}
\No newline at end of file