UNPKG

@react-md/menu

Version:

Create menus that auto-position themselves within the viewport and adhere to the accessibility guidelines

57 lines 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useItemVisibility = void 0; var react_1 = require("react"); var utils_1 = require("@react-md/utils"); var useVisibility_1 = require("./useVisibility"); function useItemVisibility(_a) { var _b = _a === void 0 ? {} : _a, _c = _b.horizontal, horizontal = _c === void 0 ? false : _c, propOnClick = _b.onClick, propOnKeyDown = _b.onKeyDown, defaultVisible = _b.defaultVisible, propDefaultFocus = _b.defaultFocus, onVisibilityChange = _b.onVisibilityChange; var cache = utils_1.useRefCache({ horizontal: horizontal, onClick: propOnClick, onKeyDown: propOnKeyDown, }); var _d = useVisibility_1.useVisibility({ defaultVisible: defaultVisible, defaultFocus: propDefaultFocus, onVisibilityChange: onVisibilityChange, }), visible = _d.visible, defaultFocus = _d.defaultFocus, hide = _d.hide, showWithFocus = _d.showWithFocus, toggle = _d.toggle; var onClick = react_1.useCallback(function (event) { var onClick = cache.current.onClick; if (onClick) { onClick(event); } toggle(); }, // disabled since useRefCache // eslint-disable-next-line react-hooks/exhaustive-deps [toggle]); var onKeyDown = react_1.useCallback(function (event) { var _a = cache.current, onKeyDown = _a.onKeyDown, horizontal = _a.horizontal; if (onKeyDown) { onKeyDown(event); } var firstKey = horizontal ? "ArrowDown" : "ArrowRight"; var lastKey = horizontal ? "ArrowUp" : "ArrowLeft"; if (event.key !== firstKey && event.key !== lastKey) { return; } // don't want to trigger default behavior of screen scrolling event.preventDefault(); // don't want parent menus to be effected by this as well. event.stopPropagation(); showWithFocus(event.key === firstKey ? "first" : "last"); }, // disabled since useRefCache // eslint-disable-next-line react-hooks/exhaustive-deps [showWithFocus]); return { visible: visible, defaultFocus: defaultFocus, hide: hide, onClick: onClick, onKeyDown: onKeyDown, }; } exports.useItemVisibility = useItemVisibility; //# sourceMappingURL=useItemVisibility.js.map