lmerza-accounts-ui
Version:
Accounts UI component library with React Strangler integration for legacy frontend modernization
2 lines (1 loc) • 1.97 kB
JavaScript
import{a as h,r as C}from"./discover.js";import{j as e}from"./jsx-runtime.js";const I="_table_1nakz_1",N="_sortable_1nakz_28",S="_sortIcon_1nakz_37",z="_clickable_1nakz_42",P="_pagination_1nakz_54",v="_pageInfo_1nakz_80",D="_empty_1nakz_85",i={table:I,sortable:N,sortIcon:S,clickable:z,pagination:P,pageInfo:v,empty:D};function M({data:o=[],columns:g=[],sortable:u=!0,paginated:_=!0,pageSize:d=10,onRowClick:f,emptyMessage:y="No data available"}){const[r,j]=h.useState({key:null,direction:"asc"}),[a,k]=h.useState(1),c=h.useMemo(()=>r.key?[...o].sort((t,n)=>{const s=t[r.key],b=n[r.key];return s<b?r.direction==="asc"?-1:1:s>b?r.direction==="asc"?1:-1:0}):o,[o,r]),x=h.useMemo(()=>{if(!_)return c;const t=(a-1)*d;return c.slice(t,t+d)},[c,a,d,_]),l=Math.ceil(c.length/d),p=t=>{u&&j(n=>({key:String(t),direction:n.key===t&&n.direction==="asc"?"desc":"asc"}))},m=t=>r.key!==t?"↕️":r.direction==="asc"?"↑":"↓";return o.length===0?e.jsx("div",{className:i.empty,children:y}):e.jsxs("div",{className:i.table,children:[e.jsxs("table",{children:[e.jsx("thead",{children:e.jsx("tr",{children:g.map((t,n)=>t?e.jsxs("th",{className:u?i.sortable:"",onClick:()=>p(t.key),children:[t.label||String(t.key),u&&e.jsx("span",{className:i.sortIcon,children:m(t.key)})]},String(t.key)||n):null)})}),e.jsx("tbody",{children:x.map((t,n)=>e.jsx("tr",{className:f?i.clickable:"",onClick:()=>f?.(t,n),children:g.map((s,b)=>s?e.jsx("td",{children:s.render?s.render(t?.[s.key],t,n):t?.[s.key]},String(s.key)||b):null)},n))})]}),_&&l>1&&e.jsxs("div",{className:i.pagination,children:[e.jsx("button",{disabled:a===1,onClick:()=>k(1),children:"⏮️"}),e.jsx("button",{disabled:a===1,onClick:()=>k(t=>t-1),children:"⬅️"}),e.jsxs("span",{className:i.pageInfo,children:["Page ",a," of ",l," (",c.length," total)"]}),e.jsx("button",{disabled:a===l,onClick:()=>k(t=>t+1),children:"➡️"}),e.jsx("button",{disabled:a===l,onClick:()=>k(l),children:"⏭️"})]})]})}C("datatable-widget",M);