carbon-react
Version:
A library of reusable React components for easily building user interfaces.
2 lines (1 loc) • 1.23 kB
JavaScript
import{useEffect as e}from"react";import t from"../../../__internal__/utils/helpers/events/events.js";import{defaultFocusableSelectors as r}from"../../../__internal__/focus-trap/focus-trap-utils.js";var n=(n,u,l)=>{e((()=>{const e=e=>{if((null==n?void 0:n.current)&&(null==u?void 0:u.current)){var o;const a=Array.from((null===(o=n.current)||void 0===o?void 0:o.querySelectorAll(r))||[]).filter((e=>-1!==Number(e.tabIndex)));var i;if((null==u?void 0:u.current)===document.activeElement)return void(t.isTabKey(e)&&!t.isShiftKey(e)&&a[0]&&(e.preventDefault(),null===(i=a[0])||void 0===i||i.focus()));if(!a.length)return;const d=a[a.length-1]===document.activeElement,f=a[0]===document.activeElement;if(t.isTabKey(e)){if(d&&!t.isShiftKey(e)){var c;e.preventDefault();const t=Array.from(document.querySelectorAll(r)||[]).filter((e=>e===u.current||-1!==Number(e.tabIndex))),n=t.indexOf(u.current)+1;return null==l||l(e),void(null===(c=t[n])||void 0===c||c.focus())}var v;f&&t.isShiftKey(e)&&(e.preventDefault(),null==l||l(e),u.current!==document.activeElement&&(null===(v=u.current)||void 0===v||v.focus()))}}};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[u,n,l])};export{n as default};