@progress/kendo-vue-grid
Version:
9 lines (8 loc) • 7.38 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 i=require("vue"),f=require("@progress/kendo-vue-buttons"),S=require("./GridColumnMenuItem.js"),v=require("./GridColumnMenuItemGroup.js"),b=require("./GridColumnMenuItemContent.js"),m=require("@progress/kendo-vue-inputs"),N=require("@progress/kendo-vue-intl"),s=require("../messages/main.js"),B=require("@progress/kendo-data-query"),d=require("@progress/kendo-vue-common"),g=require("../utils/main.js"),x=require("@progress/kendo-svg-icons");function F(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!i.isVNode(e)}const q=(e,t)=>e.length!==t.length?!1:e.every((l,r)=>l===t[r]),D={name:"KendoGridColumnMenuCheckboxFilter",props:{column:Object,filter:Object,filterable:Boolean,filterOperators:Object,checkAllItem:[String,Object,Function],item:[String,Object,Function],expanded:{type:Boolean,default:void 0},dataItems:Array,searchBox:{type:Boolean,default:!0},uniqueData:{type:Boolean,default:!0}},data(){return{currentExpanded:!1,currentValue:"",currentData:void 0,dataFromProps:void 0,currentFilter:void 0}},created(){this.compositeFilterIndex=this.getFilterIndex(),this.currentExpanded=this.$props.expanded,this.currentData=this.parseData(this.$props.dataItems,this.$props.uniqueData)||[],this.dataFromProps=this.parseData(this.$props.dataItems,!1)||[],this.currentFilter=this.defaultFilter()},updated(){const e=this.$props.column.field||"",t=this.$props.dataItems.map(l=>g.getNestedValue(e,l));q(t,this.dataFromProps)||(this.currentData=t,this.dataFromProps=t)},inject:{kendoLocalizationService:{default:null}},setup(){return{kendoLocalizationService:i.inject("kendoLocalizationService",{})}},render(){let e,t;const{column:l}=this.$props;if(!l||!l.field)return i.createVNode("div",null,null);const r=N.provideLocalizationService(this),a=this.$props.expanded!==void 0?this.$props.expanded:this.currentExpanded,o=[];if(this.currentFilter){const n=[...this.currentFilter.filters];this.compositeFilterIndex=n.findIndex(c=>c.filters&&c.filters.length>0?c.filters[0].field===l.field:!1),this.compositeFilterIndex!==-1&&n[this.compositeFilterIndex].filters.length>0&&n[this.compositeFilterIndex].filters.forEach(c=>{c.field===this.$props.column.field&&o.push(c.value)})}const u=function(){return this.$props.searchBox&&i.createVNode("span",{class:"k-list-filter"},[i.createVNode("span",{class:"k-textbox k-input k-input-md k-rounded-md k-input-solid"},[i.createVNode(d.Icon,{name:"search",icon:x.searchIcon,class:"k-input-icon"},null),i.createVNode("input",{ref:"searchBox",placeholder:r.toLanguageString(s.searchPlaceholder,s.messages[s.searchPlaceholder]),class:"k-input-inner",value:this.currentValue,onInput:this.handleSearchChange},null)])])},h=o.filter((n,c)=>o.indexOf(n)===c),k=d.templateRendering.call(this,this.$props.item,d.getListeners.call(this)),I=d.templateRendering.call(this,this.$props.checkAllItem,d.getListeners.call(this)),C=i.createVNode("li",{class:"k-item"},[i.createVNode(m.Checkbox,{label:r.toLanguageString(s.filterCheckAll,s.messages[s.filterCheckAll]),onChange:n=>this.handleCheckBoxChange(n,"all"),checked:this.isAllSelected()},null)]),V=d.getTemplate.call(this,{h:i.h,template:I,defaultRendering:C,additionalProps:{checked:this.isAllSelected()},additionalListeners:{change:n=>this.handleCheckBoxChange(n,"all")}});return i.createVNode(v.GridColumnMenuItemGroup,null,{default:()=>[i.createVNode(S.GridColumnMenuItem,{title:r.toLanguageString(s.filterTitle,s.messages[s.filterTitle]),icon:"filter",svgIcon:x.filterIcon,onMenuitemclick:this.onFilterExpand},null),i.createVNode(b.GridColumnMenuItemContent,{show:!!a},{default:()=>[i.createVNode("div",{class:"kendo-grid-filter-menu-container"},[i.createVNode("form",{class:"k-filter-menu k-border-up",onSubmit:this.submit,onReset:this.clear},[i.createVNode("div",{class:"k-filter-menu-container"},[u.call(this),i.createVNode("ul",{class:"k-reset k-multicheck-wrap"},[V,this.currentData.map(function(n,c){const $=i.createVNode("li",{class:"k-item",key:c},[i.createVNode(m.Checkbox,{label:String(n),onChange:p=>this.handleCheckBoxChange(p,n),checked:h.includes(n)},null)]);return d.getTemplate.call(this,{h:i.h,template:k,defaultRendering:$,additionalProps:{item:n,index:c,checked:h.includes(n)},additionalListeners:{change:p=>this.handleCheckBoxChange(p,n)}})},this)]),i.createVNode("div",{class:"k-columnmenu-actions"},[i.createVNode(f.Button,{themeColor:"primary"},F(e=r.toLanguageString(s.filterSubmitButton,s.messages[s.filterSubmitButton]))?e:{default:()=>[e]}),i.createVNode(f.Button,{type:"reset"},F(t=r.toLanguageString(s.filterClearButton,s.messages[s.filterClearButton]))?t:{default:()=>[t]})])])])])]})]})},methods:{defaultFilter(){return this.$props.filter?d.clone(this.$props.filter):{filters:[],logic:"and"}},parseData(e,t){const l=this.$props.column.field||"",r=e.map(a=>g.getNestedValue(l,a));return t?r.filter((a,o)=>r.indexOf(a)===o):r},getFilterIndex(){const e=this.$props.column.field;return this.defaultFilter().filters.findIndex(r=>r.filters&&r.filters.length>0&&r.filters[0].field===e)},onFilterExpand(){const e=this.$props.expanded!==void 0,t=!(e?this.$props.expanded:this.currentExpanded);this.$emit("expandchange",t),e||(this.currentExpanded=t)},handleSearchChange(e){const t={logic:"and",filters:[{field:this.$props.column.field,operator:"startswith",value:e.target.value,ignoreCase:!0}]};this.currentValue=e.target.value,this.currentData=this.parseData(B.filterBy(this.$props.dataItems||[],t),this.$props.uniqueData)},clear(e){e.preventDefault();const t=this.currentFilter||null;t!==null&&t.filters.length>0?(this.compositeFilterIndex>=0&&t.filters.splice(this.compositeFilterIndex,1),this.$emit("filterchange",t,e)):this.$emit("filterchange",null,e),this.$emit("closemenu")},submit(e){e.preventDefault();const t=this.currentFilter||null;this.$emit("filterchange",t,e),this.$emit("closemenu")},handleCheckBoxChange(e,t){const l=this.$props.column.field||"",r={...this.currentFilter},a=[...this.currentFilter.filters];let o=[];if(this.compositeFilterIndex!==-1&&r.filters[this.compositeFilterIndex].filters&&t!=="all"&&(o=r.filters[this.compositeFilterIndex].filters),e.value&&t==="all")this.currentData.forEach(u=>{o.push({field:l,operator:"eq",value:u})});else if(e.value)o.push({field:l,operator:"eq",value:t});else if(this.currentFilter){const u=o.findIndex(h=>h.value===t);o.splice(u,1)}r.logic="and",this.compositeFilterIndex!==-1?a[this.compositeFilterIndex]={logic:"or",filters:o}:a.push({logic:"or",filters:o}),(!e.value&&t==="all"||o.length===0)&&a.splice(this.compositeFilterIndex,1),r.filters=a,this.currentFilter=r},isAllSelected(){let e=!1;if(this.currentFilter){const t=[...this.currentFilter.filters];return this.compositeFilterIndex===-1?!1:(e=this.currentData.every(l=>this.compositeFilterIndex!==-1&&t[this.compositeFilterIndex].filters?t[this.compositeFilterIndex].filters.findIndex(a=>a.value===l)>=0:!1),e)}return e}}};exports.GridColumnMenuCheckboxFilter=D;