UNPKG

koval-ui

Version:

React components collection with minimalistic design. Supports theming, layout, and input validation.

3 lines (2 loc) 3 kB
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),C=require("react"),m=require("../cells/CellWrapper.cjs"),D=require("../cells/ColumnHeaderCell.cjs"),H=require("../cells/ColumnFooterCell.cjs"),e=require("../types.cjs"),N=require("../columns/rowSelection.cjs"),z=require("../cells/ViewTextCell.cjs"),G=require("../cells/ViewDecimalCell.cjs"),I=require("../cells/ViewUnitCell.cjs"),U=require("../cells/ViewDateCell.cjs"),B=require("../cells/ViewCurrencyCell.cjs"),E=require("../cells/ViewPercentageCell.cjs"),O=n=>typeof n=="string"||typeof n=="number"?n:n?.toString(),k={[e.ColumnTypes.text]:z.ViewTextCell,[e.ColumnTypes.unit]:I.ViewUnitCell,[e.ColumnTypes.date]:U.ViewDateCell,[e.ColumnTypes.decimal]:G.ViewDecimalCell,[e.ColumnTypes.currency]:B.ViewCurrencyCell,[e.ColumnTypes.percentage]:E.ViewPercentageCell,[e.ColumnTypes.select]:void 0},A={[e.ColumnTypes.text]:e.SortingModes.text,[e.ColumnTypes.decimal]:e.SortingModes.basic,[e.ColumnTypes.currency]:e.SortingModes.basic,[e.ColumnTypes.percentage]:e.SortingModes.basic,[e.ColumnTypes.unit]:e.SortingModes.basic,[e.ColumnTypes.date]:e.SortingModes.basic,[e.ColumnTypes.select]:void 0},J=(n,t)=>t!==void 0?t:A[n],L={[e.ColumnTypes.text]:e.FilterModes.includesString,[e.ColumnTypes.decimal]:e.FilterModes.inNumberRange,[e.ColumnTypes.currency]:e.FilterModes.inNumberRange,[e.ColumnTypes.percentage]:e.CustomFilterFns.isInPercentRange,[e.ColumnTypes.unit]:e.FilterModes.inNumberRange,[e.ColumnTypes.date]:e.CustomFilterFns.isInDateRange,[e.ColumnTypes.select]:void 0},P=(n,t)=>t!==void 0?t:L[n],Q=(n,t)=>n?[N.rowSelection,...t]:t,X=({columnsProp:n=[],selectable:t})=>{const c=C.useMemo(()=>Q(!!t,[...n.map(({id:i,size:l=166,name:u,accessorKey:s,accessorFn:d,editable:M=!0,filterable:f=!0,sortable:S=!0,pinnable:w=!0,columnCell:g,sortingFn:V,cellProps:y={},columnType:a=e.ColumnTypes.text,filterFn:q,headerCell:T,footerCell:b,filterInput:j})=>{const R=g!==void 0?g:k[a],h=T!==void 0?T:D.ColumnHeaderCell,v=b!==void 0?b:H.ColumnFooterCell;return{meta:{type:a,editable:M,accessorKey:s,cellProps:y,name:u,filterInput:j},...s&&{accessorKey:s},...d&&{accessorFn:d},id:i,sortingFn:J(a,V),filterFn:P(a,q),size:l,enableColumnFilter:f,enableSorting:S,enablePinning:w,enableMultiSort:!1,enableGrouping:!1,enableResizing:!1,enableGlobalFilter:!1,enableHiding:!1,header:r=>o.jsx(m.CellWrapper,{columnWidth:l,children:o.jsx(h,{headerContext:r,title:u})}),cell:r=>{const W=O(r.getValue());return o.jsx(m.CellWrapper,{columnWidth:l,children:o.jsx(R,{...y,cellContext:r,value:W})})},footer:r=>o.jsx(m.CellWrapper,{columnWidth:l,children:o.jsx(v,{cellContext:r})})}})]),[n,t]),[x,p]=C.useState(c);C.useEffect(()=>{p(c)},[c]);const F=C.useMemo(()=>n.map(({id:i,name:l,columnType:u,editable:s=!0})=>({id:i,name:l,type:u,editable:s})).filter(({editable:i})=>i),[n]);return{columns:x,setColumns:p,editableColumns:F}};exports.useTableColumns=X; //# sourceMappingURL=useTableColumns.cjs.map