@progress/kendo-react-grid
Version:
React Data Grid (Table) provides 100+ ready-to-use data grid features. KendoReact Grid package
10 lines (9 loc) • 5.54 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
"use client";
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const le=require("react"),w=require("@progress/kendo-data-query"),re=require("./GridColumnMenuItem.js"),ne=require("./GridColumnMenuItemGroup.js"),ie=require("./GridColumnMenuItemContent.js"),oe=require("@progress/kendo-react-intl"),i=require("../filterCommon.js"),u=require("../messages/index.js"),ae=require("./GridColumnMenuFilterUI.js"),R=require("@progress/kendo-react-buttons"),ue=require("@progress/kendo-svg-icons"),se=require("../utils/GridContext.js"),ce=require("./adaptiveContent/GridAdaptiveFilterMenu.js");function de(e){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const c in e)if(c!=="default"){const g=Object.getOwnPropertyDescriptor(e,c);Object.defineProperty(o,c,g.get?g:{enumerable:!0,get:()=>e[c]})}}return o.default=e,Object.freeze(o)}const l=de(le),E=e=>e||{filters:[],logic:"and"},h=(e,o)=>E(o).filters.filter(C=>w.isCompositeFilterDescriptor(C)?C.filters&&C.filters.length&&!C.filters.find(M=>w.isCompositeFilterDescriptor(M)||M.field!==e):!1)[0]||null,fe=(e,o)=>!!h(e,o),me=e=>{const o=l.useContext(se.GridContext),c=l.useCallback(()=>{let t;if(e.column&&e.column.field){const n=i.getFilterType(e.column.filter),r=i.getDefaultOperator(e.filterOperators,n);t=h(e.column.field,e.filter),t=t?{...t,filters:t.filters.map(a=>({...a}))}:{logic:"and",filters:[{field:e.column.field,operator:r,value:i.IsUnaryFilter(r)?null:void 0},{field:e.column.field,operator:r,value:i.IsUnaryFilter(r)?null:void 0}]},t.filters.filter(a=>a.field===e.column.field).length===1&&t.filters.splice(1,0,{field:e.column.field,operator:r})}return t},[e.column]),[g,C]=l.useState(e.expanded||!1),[M,b]=l.useState(!1),[d,k]=l.useState(c()),q=()=>e.expanded!==void 0,z=()=>{const t=q(),n=!(t?e.expanded:g);e.onExpandChange&&e.onExpandChange(n),b(!M),!t&&!o.mobileMode&&C(n)},H=t=>{O(0,t)},$=t=>{O(1,t)},O=(t,n)=>{const r=d.filters.map((a,s)=>s===t?{...a,value:n.value,operator:n.operator}:a);k({...d,filters:r})},Q=t=>{let n=t.target.value;t.target.tagName==="SPAN"&&(n=t.target.parentElement.value),k({...d,logic:n})},T=t=>{if(t.preventDefault(),!e.onFilterChange)return;const n=e.column.field,r=E(e.filter),a=h(n,e.filter),s=r.filters.filter(v=>v!==a);s.length?e.onFilterChange({...r,filters:s},t):e.onFilterChange(null,t),e.onCloseMenu&&e.onCloseMenu()},D=()=>({...d,filters:d.filters.filter(t=>t.value!==void 0&&t.value!==null&&t.value!==""||t.value===null&&t.operator)}),B=t=>{if(t.preventDefault(),!e.onFilterChange)return;const n=e.column.field,r=E(e.filter),a=h(n,e.filter),s=D();let v=null;if(a&&s.filters.length>0){const p=r.filters.map(x=>x===a?s:x);v={...r,filters:p}}else if(s.filters.length===0){const p=r.filters.filter(x=>x!==a);p.length&&(v={...r,filters:p})}else v={...r,filters:[...r.filters,s]};e.onFilterChange(v,t),e.onCloseMenu&&e.onCloseMenu()},{column:f,filterUI:J,hideSecondFilter:P,filterOperators:K}=e,m=oe.useLocalization();if(!f||!f.field)return l.createElement("div",null);const G=i.getFilterType(f.filter),W=P!==void 0?P:i.defaultHideSecondFilter[G],F=d.filters,L=i.operatorMap(K[G],m),U=i.operatorMap(i.booleanFilterValues,m),X={field:f.field,value:F[0].value,operator:F[0].operator,operators:L,booleanValues:U,onChange:H,filterType:G},Y={field:f.field,value:F[1].value,operator:F[1].operator,operators:L,booleanValues:U,onChange:$,filterType:G},A=d.logic,N=i.operatorMap(i.filterLogicList,m),S={value:N.find(t=>t.operator===(A===null?"":A)),onChange:Q,data:N},y=J,I={firstFilterProps:X,secondFilterProps:Y,logicData:S.data,logicValue:S.value,onLogicChange:S.onChange,hideSecondFilter:W},V=D().filters.length!==0||i.IsUnaryFilter(F[0].operator)||i.IsUnaryFilter(F[1].operator),_=q()?e.expanded:g,j=e.alwaysExpand&&!o.mobileMode,Z=()=>{b(!1)},ee=()=>{b(!1),e.onCloseMenu&&e.onCloseMenu()},te=`${m.toLanguageString(u.adaptiveColumnMenuFilterTitle,u.messages[u.adaptiveColumnMenuFilterTitle])} ${f.title||f.field}`;return l.createElement(ne.GridColumnMenuItemGroup,null,!j&&l.createElement("div",{className:"k-expander"},l.createElement(re.GridColumnMenuItem,{title:m.toLanguageString(u.filterTitle,u.messages[u.filterTitle]),iconClass:"k-i-filter",svgIcon:ue.filterIcon,expandable:!0,expanded:!!_,onClick:z})),o.mobileMode&&M?l.createElement(ce.GridAdaptiveFilterMenu,{FilterUI:y,filterUIProps:I,onBackView:Z,adaptiveTitle:te,handleClose:ee,submit:B,clear:T,isFilterValid:V}):l.createElement(ie.GridColumnMenuItemContent,{show:(j||!!_)&&!o.mobileMode},l.createElement("form",{className:"k-filter-menu",onSubmit:B,onReset:T},l.createElement("div",{className:"k-filter-menu-container"},y?l.createElement(y,{...I}):l.createElement(ae.GridColumnMenuFilterUI,{...I}),l.createElement("div",{className:"k-actions k-actions-stretched"},l.createElement(R.Button,{themeColor:"primary",disabled:!V},m.toLanguageString(u.filterSubmitButton,u.messages[u.filterSubmitButton])),l.createElement(R.Button,{type:"reset"},m.toLanguageString(u.filterClearButton,u.messages[u.filterClearButton])))))))};exports.GridColumnMenuFilter=me;exports.filterGroupByField=h;exports.isColumnMenuFilterActive=fe;exports.rootFilterOrDefault=E;