UNPKG

carbon-react

Version:

A library of reusable React components for easily building user interfaces.

2 lines (1 loc) 1.35 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../../__internal__/utils/helpers/events/events.js"),r=require("../../../__internal__/focus-trap/focus-trap-utils.js");exports.default=(u,n,l)=>{e.useEffect((()=>{const e=e=>{if((null==u?void 0:u.current)&&(null==n?void 0:n.current)){var i;const d=Array.from((null===(i=u.current)||void 0===i?void 0:i.querySelectorAll(r.defaultFocusableSelectors))||[]).filter((e=>-1!==Number(e.tabIndex)));var o;if((null==n?void 0:n.current)===document.activeElement)return void(t.default.isTabKey(e)&&!t.default.isShiftKey(e)&&d[0]&&(e.preventDefault(),null===(o=d[0])||void 0===o||o.focus()));if(!d.length)return;const s=d[d.length-1]===document.activeElement,f=d[0]===document.activeElement;if(t.default.isTabKey(e)){if(s&&!t.default.isShiftKey(e)){var c;e.preventDefault();const t=Array.from(document.querySelectorAll(r.defaultFocusableSelectors)||[]).filter((e=>e===n.current||-1!==Number(e.tabIndex))),u=t.indexOf(n.current)+1;return null==l||l(e),void(null===(c=t[u])||void 0===c||c.focus())}var a;f&&t.default.isShiftKey(e)&&(e.preventDefault(),null==l||l(e),n.current!==document.activeElement&&(null===(a=n.current)||void 0===a||a.focus()))}}};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[n,u,l])};