UNPKG

carbon-react

Version:

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

2 lines (1 loc) 5.42 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("./flat-table.style.js"),o=require("../drawer/__internal__/drawer-sidebar.context.js"),l=require("../../__internal__/utils/helpers/events/events.js"),n=require("./__internal__/strict-flat-table.context.js"),a=require("./__internal__/flat-table.context.js");function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),o.forEach((function(t){i(e,t,r[t])}))}return e}function u(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const c="tbody tr[tabindex], tbody tr td[tabindex], tbody tr th[tabindex]",d=i=>{var{caption:d,children:f,hasStickyHead:b,colorTheme:y="dark",footer:h,hasStickyFooter:p=!1,height:v,isZebra:m,size:g="medium",hasMaxHeight:O=!1,hasOuterVerticalBorders:S=!0,bottomBorderRadius:j="borderRadius100",ariaDescribedby:x,minHeight:w,overflowX:P,width:_,title:k}=i,A=function(e,t){if(null==e)return{};var r,o,l=function(e,t){if(null==e)return{};var r,o,l={},n=Object.keys(e);for(o=0;o<n.length;o++)r=n[o],t.indexOf(r)>=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)r=n[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}(i,["caption","children","hasStickyHead","colorTheme","footer","hasStickyFooter","height","isZebra","size","hasMaxHeight","hasOuterVerticalBorders","bottomBorderRadius","ariaDescribedby","minHeight","overflowX","width","title"]);const D=t.useRef(null),q=t.useRef(null),H=t.useRef(null),[T,F]=t.useState(!1),[I,R]=t.useState(!1),[C,E]=t.useState(-1),[B,K]=t.useState(-1),z=!v&&(b||p),M={caption:d,isZebra:m,size:g,"aria-describedby":x},{isInSidebar:V}=t.useContext(o.default),[X,Z]=t.useState(!1);t.useLayoutEffect((()=>{const e=(e,t)=>e.find(((e,r)=>{const o=Array.from(e.querySelectorAll("td, th")),l=t?o.shift():o.pop(),n=null==l?void 0:l.getAttribute("rowspan");return n&&Number(n)>=r+1}));if(D.current&&q.current){var t;const{offsetHeight:r,offsetWidth:o}=D.current,{top:l,bottom:n,right:a,left:i}=null===(t=q.current)||void 0===t?void 0:t.getBoundingClientRect();F(n-l>r),R(a-i>o);const s=q.current.querySelector("tbody"),u=s?Array.from(null==s?void 0:s.querySelectorAll("tr")):[],{length:c}=u,d=e(u.slice(0,c-1).reverse(),!0),f=e(u.slice(0,c-1).reverse());d&&E(u.indexOf(d)),f&&K(u.indexOf(f))}}),[h,v,w]);const N=e=>e.findIndex((e=>{const t=e.querySelectorAll("button, input, a, [tabindex]");return!(!t||!Array.from(t).find((e=>e===document.activeElement)))})),U=t.useCallback((e=>{var t;const r=null===(t=q.current)||void 0===t?void 0:t.querySelectorAll(c),o=Array.from(r||[]);if(!o.length)return;const n=o.findIndex((e=>e===document.activeElement));if(X&&(b||p))(l.default.isPageUpKey(e)||l.default.isPageDownKey(e)||l.default.isHomeKey(e)||l.default.isEndKey(e))&&e.preventDefault();else if(l.default.isDownKey(e))if(e.preventDefault(),-1!==n&&n<o.length){var a;null===(a=o[n+1])||void 0===a||a.focus()}else{const e=N(o);var i;-1!==e&&e<o.length&&(null===(i=o[e+1])||void 0===i||i.focus())}else if(l.default.isUpKey(e))if(e.preventDefault(),n>0){var s;null===(s=o[n-1])||void 0===s||s.focus()}else{const e=N(o);var u;e>0&&(null===(u=o[e-1])||void 0===u||u.focus())}}),[X,p,b]),W=t.useCallback((()=>{var e;const t=Array.from((null===(e=q.current)||void 0===e?void 0:e.querySelectorAll(c))||[]),r=t.find((e=>"true"===e.getAttribute("data-selected")||"true"===e.getAttribute("data-highlighted")))||t[0];return(null==r?void 0:r.getAttribute("id"))||""}),[]),L=t.useMemo((()=>({colorTheme:y,size:g,getTabStopElementId:W})),[y,g,W]),Y=t.useMemo((()=>({isInFlatTable:!0,setHasOpenDatePicker:Z})),[Z]);return e.jsxs(r.StyledFlatTableWrapper,u(s({ref:D,"data-role":"flat-table-wrapper",isInSidebar:V,hasStickyHead:b,colorTheme:y,minHeight:w,overflowY:b||p?"auto":void 0,height:z&&!O?"99%":v,maxHeight:O?"100%":void 0,hasOuterVerticalBorders:S,bottomBorderRadius:j,display:"flex",flexDirection:"column",justifyContent:p||v?"space-between":void 0,role:"region",overflowX:_?"hidden":void 0,width:_,hasStickyFooter:p,hasVerticalScrollbar:T,hasHorizontalScrollbar:I,footer:!!h,firstColRowSpanIndex:C,lastColRowSpanIndex:B,onKeyDown:U},A),{"data-component":"flat-table-wrapper",title:k,children:[e.jsx(r.StyledTableContainer,{ref:H,tabIndex:0,overflowX:P,width:_,"data-role":"flat-table-container",children:e.jsxs(r.StyledFlatTable,u(s({ref:q,"data-component":"flat-table"},M),{children:[d?e.jsx("caption",{children:d}):null,e.jsx(n.StrictFlatTableProvider,{value:L,children:e.jsx(a.default.Provider,{value:Y,children:f})})]}))}),h&&e.jsx(r.StyledFlatTableFooter,{hasStickyFooter:p,"data-role":"flat-table-footer",children:h})]}))};d.displayName="FlatTable",exports.FlatTable=d,exports.default=d;