koval-ui
Version:
React components collection with minimalistic design. Supports theming, layout, and input validation.
3 lines (2 loc) • 3.01 kB
JavaScript
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),a=require("react"),m=require("../cells/CellWrapper.cjs"),H=require("../cells/ColumnHeaderCell.cjs"),v=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==null?void 0: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=a.useMemo(()=>Q(!!t,[...n.map(({id:i,size:r=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:C=e.ColumnTypes.text,filterFn:q,headerCell:T,footerCell:b,filterInput:j})=>{const R=g!==void 0?g:k[C],h=T!==void 0?T:H.ColumnHeaderCell,W=b!==void 0?b:v.ColumnFooterCell;return{meta:{type:C,editable:M,accessorKey:s,cellProps:y,name:u,filterInput:j},...s&&{accessorKey:s},...d&&{accessorFn:d},id:i,sortingFn:J(C,V),filterFn:P(C,q),size:r,enableColumnFilter:f,enableSorting:S,enablePinning:w,enableMultiSort:!1,enableGrouping:!1,enableResizing:!1,enableGlobalFilter:!1,enableHiding:!1,header:l=>o.jsx(m.CellWrapper,{columnWidth:r,children:o.jsx(h,{headerContext:l,title:u})}),cell:l=>{const D=O(l.getValue());return o.jsx(m.CellWrapper,{columnWidth:r,children:o.jsx(R,{...y,cellContext:l,value:D})})},footer:l=>o.jsx(m.CellWrapper,{columnWidth:r,children:o.jsx(W,{cellContext:l})})}})]),[n,t]),[x,p]=a.useState(c);a.useEffect(()=>{p(c)},[c]);const F=a.useMemo(()=>n.map(({id:i,name:r,columnType:u,editable:s=!0})=>({id:i,name:r,type:u,editable:s})).filter(({editable:i})=>i),[n]);return{columns:x,setColumns:p,editableColumns:F}};exports.useTableColumns=X;
//# sourceMappingURL=useTableColumns.cjs.map