UNPKG

carbon-react

Version:

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

2 lines (1 loc) 1.33 kB
import{useState as t,useContext as e,useEffect as i}from"react";import n from"../flat-table-row/__internal__/flat-table-row.context.js";import{useStrictFlatTableContext as o}from"./strict-flat-table.context.js";var a=a=>{const{getTabStopElementId:l}=o(),[r,s]=t(-1),{expandable:c,firstCellId:d,firstColumnExpandable:f,leftPositions:m,rightPositions:g,onClick:b,onKeyDown:p,highlighted:u,selected:h}=e(n),v=m[a],x=g[a],y=void 0!==v||void 0!==x,T=a===d,E=c&&T&&f;return i((()=>{const t=setTimeout((()=>{s(E&&l()===a?0:-1)}),0);return()=>{clearTimeout(t)}}),[l,E,a]),{expandable:c,leftPosition:v,rightPosition:x,makeCellSticky:y,onClick:b,onKeyDown:p,isFirstCell:T,isExpandableCell:E,tabIndex:r,isInHighlightedRow:u,isInSelectedRow:h,bringToFront:(t,e)=>{if(!t||!t.nativeEvent||"function"!=typeof t.nativeEvent.composedPath)return;const{nativeEvent:i}=t,n=i.composedPath(),o=n.find((t=>t instanceof HTMLElement&&"TBODY"===t.tagName));if(!o)return;const a=Array.from(o.querySelectorAll("th, td")).filter((t=>"left"===t.getAttribute("data-sticky-align")||"right"===t.getAttribute("data-sticky-align")||t.classList.contains("isSticky")));a.map((t=>(t.classList.remove("bringToFront"),t)));const l=n.find((t=>t instanceof HTMLElement&&t.tagName===e)),r=a.indexOf(l);-1!==r&&a[r].classList.add("bringToFront")}}};export{a as default};