@ozen-ui/kit
Version:
React component library
39 lines (38 loc) • 1.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useMenuFocusList = useMenuFocusList;
var react_1 = require("react");
var getNextIndex_1 = require("../../utils/getNextIndex");
var getPrevIndex_1 = require("../../utils/getPrevIndex");
var isKey_1 = require("../../utils/isKey");
var isKeys_1 = require("../../utils/isKeys");
function useMenuFocusList(nodes) {
var savedNodes = (0, react_1.useRef)(nodes);
(0, react_1.useEffect)(function () {
savedNodes.current = nodes;
}, [nodes]);
var onKeyDown = (0, react_1.useCallback)(function (event) {
var _a, _b;
if (!(0, isKeys_1.isKeys)(event, ['ArrowUp', 'ArrowDown', 'Home', 'End'])) {
return;
}
event.preventDefault();
var items = savedNodes.current;
if ((0, isKey_1.isKey)(event, 'Home')) {
(_a = items === null || items === void 0 ? void 0 : items[0]) === null || _a === void 0 ? void 0 : _a.focus();
return;
}
if ((0, isKey_1.isKey)(event, 'End')) {
(_b = items === null || items === void 0 ? void 0 : items[items.length - 1]) === null || _b === void 0 ? void 0 : _b.focus();
return;
}
var currentEl = event.target;
var currentIndex = items.indexOf(currentEl);
var newIndex = (0, isKey_1.isKey)(event, 'ArrowUp')
? (0, getPrevIndex_1.getPrevIndex)(currentIndex, items.length)
: (0, getNextIndex_1.getNextIndex)(currentIndex, items.length);
var newEl = items[newIndex];
newEl === null || newEl === void 0 ? void 0 : newEl.focus();
}, []);
return { onKeyDown: onKeyDown };
}