UNPKG

@kiwicom/orbit-components

Version:

Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.

68 lines (54 loc) 1.84 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; exports.__esModule = true; exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _consts = _interopRequireDefault(require("./consts")); var _keyMaps = _interopRequireDefault(require("../../common/keyMaps")); const manageFocus = (ref, triggered) => { if (triggered && ref.current) { const focusableElements = ref.current.querySelectorAll(_consts.default); if (focusableElements.length > 0) { const firstFocusableEl = focusableElements[0]; const lastFocusableEl = focusableElements[focusableElements.length - 1]; return { first: firstFocusableEl, last: lastFocusableEl }; } } return { first: null, last: null }; }; const useFocusTrap = ref => { const [triggered, setTriggered] = React.useState(false); React.useEffect(() => { const handleKeyDown = ev => { if (ev.keyCode === _keyMaps.default.TAB) { if (!triggered) { setTriggered(true); } const { first, last } = manageFocus(ref, triggered); if (ev.shiftKey && last && (document.activeElement === first || document.activeElement === ref.current)) { ev.preventDefault(); last.focus(); } else if (!ev.shiftKey && first && document.activeElement === last) { ev.preventDefault(); first.focus(); } } }; document.addEventListener("keydown", handleKeyDown); return () => { document.removeEventListener("keydown", handleKeyDown); }; }, [triggered, ref]); }; var _default = useFocusTrap; exports.default = _default;