@progress/kendo-vue-grid
Version:
9 lines (8 loc) • 7.29 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 strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("vue"),m=require("@progress/kendo-vue-common"),S=require("@progress/kendo-data-query"),R=require("./GridColumnMenuItem.js"),w=require("./GridColumnMenuItemGroup.js"),U=require("./GridColumnMenuItemContent.js"),M=require("@progress/kendo-vue-buttons"),_=require("@progress/kendo-vue-intl"),f=require("../filterCommon.js"),u=require("../messages/main.js"),k=require("./GridColumnMenuFilterCell.js"),L=require("./GridColumnMenuFilterOperators.js"),K=require("@progress/kendo-vue-dropdowns"),Q=require("@progress/kendo-svg-icons");function N(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!o.isVNode(e)}const F=e=>e||{filters:[],logic:"and"},C=(e,r)=>F(r).filters.filter(l=>S.isCompositeFilterDescriptor(l)?l.filters&&l.filters.length&&l.filters.length<=2&&!l.filters.find(n=>S.isCompositeFilterDescriptor(n)||n.field!==e):!1)[0]||null,A=o.defineComponent({name:"KendoGridColumnMenuFilter",props:{column:Object,filter:Object,expanded:{type:Boolean,default:void 0},filterable:Boolean,filterOperators:{type:Object,default:function(){return f.operators}},hideSecondFilter:{type:[Boolean,Object],default:function(){}},filterUI:[String,Function,Object],onFilterfocus:Function,onFilterchange:Function,onExpandchange:Function,onClosemenu:Function},inject:{kendoLocalizationService:{default:null}},data(){return{currentExpanded:!1,filterGroup:null}},created(){let e;if(this.$props.column&&this.$props.column.field){const r=f.getFilterType(this.$props.column.filter),t=f.getDefaultOperator(this.$props.filterOperators,r);e=C(this.$props.column.field,this.$props.filter),e=e?{...e,filters:e.filters.map(i=>({...i}))}:{logic:"and",filters:[{field:this.$props.column.field,operator:t},{field:this.$props.column.field,operator:t}]},e.filters.filter(i=>i.field===this.$props.column.field).length===1&&e.filters.splice(1,0,{field:this.$props.column.field,operator:t})}this.currentExpanded=this.$props.expanded||!1,this.filterGroup=e},methods:{removeGroup(e,r){const t=[...r.filters],i=t.findIndex(l=>l===e);return i>-1&&t.splice(i,1),{...r,filters:t}},insertGroup(e,r){return{...r,filters:[e,...r.filters]}},isControlled(){return this.$props.expanded!==void 0},onFilterExpand(){const e=this.isControlled(),r=!(e?this.$props.expanded:this.currentExpanded);this.$emit("expandchange",r),e||(this.currentExpanded=r)},filterChangeHandler(e,r){this.filterChange(r||0,e)},firstFilterChange(e){this.filterChange(0,e)},secondFilterChange(e){this.filterChange(1,e)},filterChange(e,r){const t=this.filterGroup.filters.map((i,l)=>l===e?{...i,value:r.value,operator:r.operator}:i);this.filterGroup={...this.filterGroup,filters:t}},logicChange(e){this.filterGroup={...this.filterGroup,logic:e.target.value.operator}},clear(e){if(e.preventDefault(),!m.hasListener.call(this,"filterchange"))return;const r=this.$props.column.field,t=F(this.$props.filter),i=C(r,this.$props.filter),l=t.filters.filter(n=>n!==i);l.length?this.$emit("filterchange",{...t,filters:l},{event:e,field:this.$props.column.field}):this.$emit("filterchange",null,{event:e,field:this.$props.column.field}),this.$emit("closemenu")},currentFilterGroup(){return{...this.filterGroup,filters:this.filterGroup.filters.filter(e=>e.value!==void 0&&e.value!==null&&e.value!==""||e.value===null&&e.operator)}},submit(e){if(e.preventDefault(),!m.hasListener.call(this,"filterchange"))return;const r=this.$props.column.field,t=F(this.$props.filter),i=C(r,this.$props.filter),l=this.currentFilterGroup();let n=null;if(i&&l.filters.length>0){const c=t.filters.map(s=>s===i?l:s);n={...t,filters:c}}else if(l.filters.length===0){const c=t.filters.filter(s=>s!==i);c.length&&(n={...t,filters:c})}else n={...t,filters:[...t.filters,l]};this.$emit("filterchange",n,{event:e,field:this.$props.column.field}),this.$emit("closemenu")},handleFocus(e){this.$emit("filterfocus",e)}},setup(){return{kendoLocalizationService:o.inject("kendoLocalizationService",{})}},render(){let e,r;const{column:t,filterUI:i,hideSecondFilter:l,filterOperators:n}=this.$props;if(!t||!t.field)return o.createVNode("div",null,null);const c=t.filter||"text",s=_.provideLocalizationService(this),g=this.filterGroup.filters,d=f.operatorMap(n[c],s),v=f.operatorMap(f.booleanFilterValues,s),p={field:t.field,value:g[0].value,operator:g[0].operator,operators:d,booleanValues:v,filterType:c},h={field:t.field,value:g[1].value,operator:g[1].operator,operators:d,booleanValues:v,filterType:c},G=this.filterGroup.logic,V=f.operatorMap(f.filterLogicList,s),$={value:V.find(a=>a.operator===(G===null?"":G)),data:V},I=this.currentFilterGroup().filters.length!==0,T=this.isControlled()?this.$props.expanded:this.currentExpanded,q=p.field,B=p.value,b=p.operator,D=p.booleanValues,y=p.filterType,j=h.field,E=h.value,x=h.operator,z=h.booleanValues,O=h.filterType,H=i&&m.templateRendering.call(this,i,m.getListeners.call(this)),P=m.getTemplate.call(this,{h:o.h,template:H,defaultRendering:void 0,additionalProps:this.$props,additionalListeners:{change:this.filterChangeHandler,logicchange:this.logicChange}});return o.createVNode(w.GridColumnMenuItemGroup,null,{default:()=>[o.createVNode(R.GridColumnMenuItem,{title:s.toLanguageString(u.filterTitle,u.messages[u.filterTitle]),icon:"filter",svgIcon:Q.filterIcon,onMenuitemclick:this.onFilterExpand},null),o.createVNode(U.GridColumnMenuItemContent,{show:!!T},{default:()=>[o.createVNode("div",{class:"kendo-grid-filter-menu-container"},[o.createVNode("form",{class:"k-filter-menu k-border-up",onSubmit:this.submit,onReset:this.clear},[o.createVNode("div",{class:"k-filter-menu-container"},[!i&&[o.createVNode(L.ColumnMenuFilterOperators,{operator:b,filterType:y,onChange:a=>{this.filterChangeHandler(a,0)},operators:d},null),o.createVNode(k.GridColumnMenuFilterCell,{field:q,value:B,operator:b,booleanValues:D,filterType:y,onFiltercellfocus:this.handleFocus,onChange:a=>{this.filterChangeHandler(a,0)},operators:d},null)],!l&&!i&&[o.createVNode(K.DropDownList,{onChange:this.logicChange,class:"k-filter-and","data-items":$.data,value:$.value,textField:"text"},null),o.createVNode(L.ColumnMenuFilterOperators,{operator:x,filterType:O,onChange:a=>{this.filterChangeHandler(a,1)},operators:d},null),o.createVNode(k.GridColumnMenuFilterCell,{field:j,value:E,operator:x,booleanValues:z,filterType:O,onFiltercellfocus:this.handleFocus,onChange:a=>{this.filterChangeHandler(a,1)},operators:d},null)],i&&P,o.createVNode("div",{class:"k-columnmenu-actions"},[o.createVNode(M.Button,{themeColor:"primary",disabled:!I},N(e=s.toLanguageString(u.filterSubmitButton,u.messages[u.filterSubmitButton]))?e:{default:()=>[e]}),o.createVNode(M.Button,{type:"reset"},N(r=s.toLanguageString(u.filterClearButton,u.messages[u.filterClearButton]))?r:{default:()=>[r]})])])])])]})]})}});exports.GridColumnMenuFilter=A;exports.filterGroupByField=C;exports.rootFilterOrDefault=F;