UNPKG

@react-md/menu

Version:

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

66 lines 2.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useButtonVisibility = void 0; var react_1 = require("react"); var utils_1 = require("@react-md/utils"); var useVisibility_1 = require("./useVisibility"); /** * This hook is used to provide the menu visibility based on interacting with * the `MenuButton` component. It'll merge and return the required `onClick` and * `onKeyDown` event handlers that should be passed down to the `MenuButton` as * well as the current visibility state and a `hide` function to pass to the * `Menu`. * * @private */ function useButtonVisibility(_a) { var _b = _a === void 0 ? {} : _a, propOnClick = _b.onClick, propOnKeyDown = _b.onKeyDown, defaultVisible = _b.defaultVisible, propDefaultFocus = _b.defaultFocus, onVisibilityChange = _b.onVisibilityChange; var handlers = utils_1.useRefCache({ onClick: propOnClick, onKeyDown: propOnKeyDown, }); var _c = useVisibility_1.useVisibility({ defaultVisible: defaultVisible, defaultFocus: propDefaultFocus, onVisibilityChange: onVisibilityChange, }), visible = _c.visible, defaultFocus = _c.defaultFocus, hide = _c.hide, showWithFocus = _c.showWithFocus, toggle = _c.toggle; var onClick = react_1.useCallback(function (event) { var onClick = handlers.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 onKeyDown = handlers.current.onKeyDown; if (onKeyDown) { onKeyDown(event); } switch (event.key) { case "ArrowDown": event.preventDefault(); showWithFocus("first"); break; case "ArrowUp": event.preventDefault(); showWithFocus("last"); break; // no default } }, // disabled since useRefCache // eslint-disable-next-line react-hooks/exhaustive-deps [showWithFocus]); return { visible: visible, defaultFocus: defaultFocus, hide: hide, onClick: onClick, onKeyDown: onKeyDown, }; } exports.useButtonVisibility = useButtonVisibility; //# sourceMappingURL=useButtonVisibility.js.map