primereact
Version:
A rich set of premium UI Components for React.
4 lines (2 loc) • 4.82 kB
JavaScript
'use client';
import{Component as G,withComponent as j}from"@primereact/core/component";import{mergeProps as z}from"@primeuix/utils";import*as e from"react";import{createOptionalContext as L}from"@primereact/core/utils";var[$,F]=L();var T={as:"div",field:"",display:"row",showOperator:!0,showMatchModes:!0,showClearButton:!0,showApplyButton:!0,showAddButton:!0,maxConstraints:2,dataType:"text"};var U=[{label:"Starts With",value:"startsWith"},{label:"Contains",value:"contains"},{label:"Not Contains",value:"notContains"},{label:"Ends With",value:"endsWith"},{label:"Equals",value:"equals"},{label:"Not Equals",value:"notEquals"}],X=[{label:"Equals",value:"equals"},{label:"Not Equals",value:"notEquals"},{label:"Less Than",value:"lt"},{label:"Less Than or Equal",value:"lte"},{label:"Greater Than",value:"gt"},{label:"Greater Than or Equal",value:"gte"},{label:"Between",value:"between"}],Y=[{label:"Date Is",value:"dateIs"},{label:"Date Is Not",value:"dateIsNot"},{label:"Date Before",value:"dateBefore"},{label:"Date After",value:"dateAfter"}],J=[{label:"Equals",value:"equals"}],K=Object.freeze({value:null,matchMode:"contains"});function Q(t){switch(t){case"numeric":return X;case"date":return Y;case"boolean":return J;default:return U}}var st=j({name:"DataTable.Filter",defaultProps:T,setup({props:t}){let a=F(),s=t.display??"row",u=t.maxConstraints??2,h=t.matchModeOptions??Q(t.dataType),[M,f]=e.useState(!1),m=e.useMemo(()=>a?.filter?.getFieldFilterMeta(t.field)??K,[a?.filter,t.field]),[p,v]=e.useState(m);e.useEffect(()=>{s==="menu"&&M&&v(m)},[s,M,m]);let i=s==="menu"?p:m,D=e.useMemo(()=>i.constraints&&i.constraints.length>0?i.constraints[0].value??null:i.value??null,[i]),R=e.useMemo(()=>i.constraints&&i.constraints.length>0?i.constraints[0].matchMode??"contains":i.matchMode??"contains",[i]),E=e.useMemo(()=>i.operator??"and",[i]),y=e.useMemo(()=>i.constraints&&i.constraints.length>0?i.constraints.map(l=>({value:l.value,matchMode:l.matchMode??"contains"})):[{value:i.value??null,matchMode:i.matchMode??"contains"}],[i.constraints,i.value,i.matchMode]),O=e.useCallback((l,n,o)=>{s==="menu"?v(r=>({...r,value:n,matchMode:o??r.matchMode??"contains"})):a?.filter?.setFieldFilter(l,t.field,{value:n,matchMode:o??R})},[a?.filter,t.field,R,s]),x=e.useCallback(l=>{if(a?.filter?.clearFieldFilter(l,t.field),s==="menu"){let n=a?.filter?.getFieldFilterMeta(t.field);n&&v(n),f(!1)}},[a?.filter,t.field,s]),S=e.useMemo(()=>a?.filter?.hasFilterValue(t.field)??!1,[a?.filter,t.field]),c=e.useCallback(l=>{v(n=>l(n))},[]),A=e.useCallback((l,n)=>{s==="menu"?c(o=>{let r=o.constraints??[{value:o.value??null,matchMode:o.matchMode??"contains"}];return{...o,operator:n,constraints:r}}):a?.filter?.setOperator(l,t.field,n)},[a?.filter,t.field,s,c]),k=e.useCallback((l,n,o,r)=>{s==="menu"?c(d=>{let b=(d.constraints??[{value:d.value??null,matchMode:d.matchMode??"contains"}]).map((g,W)=>W===n?{value:o,matchMode:r??g.matchMode}:g);return{...d,constraints:b}}):a?.filter?.setConstraintValue(l,t.field,n,o,r)},[a?.filter,t.field,s,c]),w=e.useCallback((l,n,o)=>{s==="menu"?c(r=>{let C=(r.constraints??[{value:r.value??null,matchMode:r.matchMode??"contains"}]).map((b,g)=>g===n?{...b,matchMode:o}:b);return{...r,constraints:C}}):a?.filter?.setConstraintMatchMode(l,t.field,n,o)},[a?.filter,t.field,s,c]),q=e.useCallback(l=>{let n=h[0]?.value??"contains";s==="menu"?c(o=>{let r=o.constraints??[{value:o.value??null,matchMode:o.matchMode??"contains"}];return{...o,operator:o.operator??"and",constraints:[...r,{value:null,matchMode:n}]}}):a?.filter?.addConstraint(l,t.field,n)},[a?.filter,t.field,h,s,c]),P=e.useCallback((l,n)=>{s==="menu"?c(o=>{let r=o.constraints??[];return r.length<=1?o:{...o,constraints:r.filter((d,C)=>C!==n)}}):a?.filter?.removeConstraint(l,t.field,n)},[a?.filter,t.field,s,c]),_=e.useCallback(l=>{s==="menu"&&a?.filter?.setFieldFilter(l,t.field,p),f(!1)},[a?.filter,t.field,s,p]),N=y.length<u,B=y.length>1,I=e.useCallback(l=>{l.preventDefault(),l.stopPropagation(),f(n=>!n)},[]),H=e.useCallback(()=>{f(!0)},[]),V=e.useCallback(()=>{f(!1)},[]);return{datatable:a,field:t.field,display:s,value:D,matchMode:R,operator:E,constraints:y,isActive:S,canAddConstraint:N,canRemoveConstraint:B,overlayVisible:M,matchModeOptions:h,onChange:O,onClear:x,onOperatorChange:A,onConstraintChange:k,onMatchModeChange:w,onAddConstraint:q,onRemoveConstraint:P,onApply:_,onToggleOverlay:I,onShowOverlay:H,onHideOverlay:V}},render(t){let{props:a,ptmi:s,datatable:u,display:h}=t,M=z(u?.filter?.getFilterRootProps(a.field,h),{className:u?.cx("filter")},u?.ptm("filter"),s("root"));return e.createElement(G,{instance:t,attrs:M,children:a.children})}});export{J as BOOLEAN_MATCH_MODES,Y as DATE_MATCH_MODES,st as DataTableFilter,X as NUMERIC_MATCH_MODES,U as TEXT_MATCH_MODES,T as defaultFilterProps,Q as getDefaultMatchModes};