UNPKG

@ozen-ui/kit

Version:

React component library

39 lines (38 loc) 1.69 kB
"use strict"; 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 }; }