-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathsmart.filterpanel.js
6 lines (4 loc) · 31.9 KB
/
smart.filterpanel.js
1
2
3
4
5
6
/* Smart UI v15.2.0 (2023-04-20)
Copyright (c) 2011-2023 jQWidgets.
License: https://htmlelements.com/license/ */ //
Smart("smart-filter-panel",class extends Smart.BaseElement{static get properties(){return{buttons:{value:["clear","filter"],type:"array"},data:{value:null,type:"array?",reflectToAttribute:!1},dataField:{value:null,type:"string?"},dataSource:{value:null,type:"any",reflectToAttribute:!1},evaluateFilterExpression:{value:null,type:"function?",reflectToAttribute:!1},filterType:{value:"string",allowedValues:["numeric","string","date","boolean"],type:"string"},formatString:{value:"d",type:"string"},messages:{value:{en:{addCondition:"Add Condition",addGroup:"Add Group",and:"and",blanks:"(Blanks)",cancel:"Cancel",clear:"Clear",contains:"contains",containsCaseSensitive:"contains (case sensitive)",dateTabLabel:"DATE",doesNotContain:"does not contain",doesNotContainCaseSensitive:"does not contain (case sensitive)",empty:"empty",endsWith:"ends with",endsWithCaseSensitive:"ends with (case sensitive)",equal:"equal",equalCaseSensitive:"equal (case sensitive)",filter:"Filter",greaterThan:"greater than",greaterThanOrEqual:"greater than or equal",lessThan:"less than",lessThanOrEqual:"less than or equal",mismatchedProperties:'smartFilterPanel: The "filterType" and the data type of the selected "dataField" are mismatched.',missingProperty:'smartFilterPanel: When mode is \'excel\', either "data" and "dataField" or "dataSource" of type Array have to be set.',notEmpty:"not empty",notEqual:"not equal",notNull:"not null",null:"null ",or:"or",placeholderBoolean:"Select value",placeholderDate:"Enter date",placeholderNumber:"Enter number",placeholderTime:"Enter time",placeholderValue:"Enter value",selectAll:"(Select All)",showRows:"Show rows where:",startsWith:"starts with",startsWithCaseSensitive:"starts with (case sensitive)",matchCase:"Match Case",timeTabLabel:"TIME"}},type:"object",extend:!0},mode:{value:"default",allowedValues:["basic","default","excel"],type:"string"}}}static get listeners(){return{"cancelButton.click":"cancel","clearButton.click":"clear","filterButton.click":"filter"}}template(){return'<div id="container" class="smart-container" role="presentation">\n <div id="label" class="smart-filter-panel-label"></div>\n <div id="mainContainer" role="presentation"></div>\n <div id="buttonContainer" class="smart-filter-panel-button-container" role="presentation">\n <smart-button id="filterButton" class="primary" animation="[[animation]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></smart-button>\n <smart-button id="clearButton" animation="[[animation]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></smart-button>\n <smart-button id="cancelButton" animation="[[animation]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></smart-button>\n </div>\n </div>'}static get styleUrls(){return["smart.grid.css","smart.dropdownlist.css","smart.menu.css","smart.filterpanel.css","smart.textbox.css"]}ready(){super.ready()}render(){const e=this,t=e.filterType;e.$.label.id||(e.$.label.id=e.id+"Label"),e.setAttribute("role","dialog"),e.setAttribute("aria-labelledby",e.$.label.id),e._localize(),e._setButtonsVisibility(),e._filterType=t+"Filter",e._filterHandler=new(Smart.Utilities[t.slice(0,1).toUpperCase()+t.slice(1)+"FilterHandler"])(e),super.render()}cancel(){const e=this;e._filterHandler[e.mode+"Cancel"](),e.$.fireEvent("cancel")}clear(){const e=this;e._filterHandler[e.mode+"Clear"](),e.$.fireEvent("clear")}reset(){const e=this;e.$.clearButton.removeAttribute("hover"),e.$.filterButton.removeAttribute("hover"),e.$.cancelButton.removeAttribute("hover"),e._filterHandler.firstInputMatchCase&&e._filterHandler.firstInputMatchCase.classList.remove("active"),e._filterHandler.secondInputMatchCase&&e._filterHandler.secondInputMatchCase.classList.remove("active"),e._filterHandler[e.mode+"Clear"](),e._filterHandler.filterObject=new Smart.Utilities.FilterGroup}getFilter(){if(this._filterHandler){const e=new Smart.Utilities.FilterGroup;for(let t in this._filterHandler.filterObject)e[t]=this._filterHandler.filterObject[t];return e}return null}evaluate(e){try{return this._filterHandler.evaluate(e)}catch(e){return!1}}filter(){const e=this;e._filterHandler[e.mode+"Filter"](),e.$.fireEvent("filter")}getState(){return this._filterHandler.cachedFilter}loadState(e){try{const t=this;t._filterHandler.cachedFilter=e,t._filterHandler[t.mode+"Cancel"]()}catch(e){}}propertyChangedHandler(e,t,l){super.propertyChangedHandler(e,t,l);const a=this,i=a._filterHandler;function s(){a.$.mainContainer.innerHTML="",function(){const e=["cachedFilter","caseSensitive","customExcelFilterObjects","customItems","dataSource","defaultListSelection","defaultListSource","displayMode","filterBuilder","filterBuilderObject","filterBuilderOperations","filterObject","firstInput","firstList","operationsMapping","operatorList","secondInput","secondList","timeOnly","tree"];e.forEach((function(t){delete i[e[t]]})),delete a._filterHandler}(),a._filterHandler=new(Smart.Utilities[a.filterType.slice(0,1).toUpperCase()+a.filterType.slice(1)+"FilterHandler"])(a)}switch(e){case"animation":case"disabled":case"rightToLeft":case"unfocusable":switch(a.mode){case"default":case"basic":[i.firstList,i.firstInput,i.logicalOperatorList,i.secondList,i.secondInput].forEach((function(t){t[e]=l}));break;case"excel":i.tree[e]=l;break;case"filterBuilder":i.filterBuilder[e]=l,i.caseSensitive&&(i.caseSensitive[e]=l)}break;case"buttons":a._setButtonsVisibility();break;case"data":case"dataField":"excel"!==a.mode||Array.isArray(a.dataSource)||s();break;case"dataSource":"excel"===a.mode&&s();break;case"filterType":a._filterType=l+"Filter",s();break;case"mode":s();break;case"formatString":if("date"!==a.filterType)return;switch(a.mode){case"default":case"basic":i.firstInput.formatString=l,i.secondInput.formatString=l;break;case"excel":s();break;case"filterBuilder":i.filterBuilder.formatStringDate=l,i.filterBuilder.formatStringDateTime=l}break;case"locale":case"messages":switch(a._localize(),a.mode){case"default":case"basic":{const t=i.firstList.selectedIndex,l=i.logicalOperatorList.selectedIndex,s=i.secondList.selectedIndex,r=[i.firstInput,i.secondInput];switch(i.setDefaults(),i.firstList.dataSource=JSON.parse(JSON.stringify(i.defaultListSource)),i.logicalOperatorList.dataSource=[{value:0,label:a.localize("and")},{value:1,label:a.localize("or")}],i.secondList.dataSource=JSON.parse(JSON.stringify(i.defaultListSource)),a.filterType){case"date":r.forEach((function(t){t.messages[a.locale]||(t.messages[a.locale]={});const l=a.localize("dateTabLabel");l&&(t.messages[a.locale].dateTabLabel=l);const i=a.localize("timeTabLabel");if(i&&(t.messages[a.locale].timeTabLabel=i),"locale"===e&&(t.locale=a.locale),"timePicker"===t._dropDownDisplayMode){const e=a.localize("placeholderTime");e&&(t.placeholder=e,t.placeholder=e)}else{const e=a.localize("placeholderDate");e&&(t.placeholder=e,t.placeholder=e)}}));break;case"numeric":r[0].placeholder=a.localize("placeholderNumber"),r[1].placeholder=a.localize("placeholderNumber");break;case"string":r[0].placeholder=a.localize("placeholderValue"),r[1].placeholder=a.localize("placeholderValue");break;case"boolean":r[0].placeholder=a.localize("placeholderBoolean"),r[1].placeholder=a.localize("placeholderBoolean")}i.firstList.selectedIndex=t,i.logicalOperatorList.selectedIndex=l,i.secondList.selectedIndex=s;break}case"excel":i.tree.selectAll&&(i.tree.selectAll.label=a.localize("selectAll")),i.tree.blanks&&(i.tree.blanks.label=a.localize("blanks"));break;case"filterBuilder":i.localizeFilterBuilder(),"messages"===e&&(i.filterBuilder._localizeInitialValues(),i.filterBuilder._refresh()),i.filterBuilder.$.scrollableContainer.refresh()}}}_localize(){const e=this;e.localize("showRows")&&(e.$.label.innerHTML=e.localize("showRows")),e.localize("filter")&&(e.$.filterButton.innerHTML=e.localize("filter")),e.localize("clear")&&(e.$.clearButton.innerHTML=e.localize("clear")),e.localize("cancel")&&(e.$.cancelButton.innerHTML=e.localize("cancel"))}_setButtonsVisibility(){const e=this,t=e.buttons;["cancel","clear","filter"].forEach((function(l){-1!==t.indexOf(l)?e["$"+l+"Button"].removeClass("smart-hidden"):e["$"+l+"Button"].addClass("smart-hidden")}))}}),Smart.Utilities.Assign("BaseFilterHandler",class{constructor(e){const t=this;if(t.basicFilter=t.defaultFilter,t.basicClear=t.defaultClear,t.basicCancel=t.defaultCancel,t.context=e,t.filterObject=new Smart.Utilities.FilterGroup,t.setDefaults(),"date"===e.filterType){const l=new Smart.Utilities.DateTime,a=e.formatString,i=l.getParseRegExp(l.calendar,a.replace(/y+/g,"yyyyy"));t.displayMode=Smart.Utilities.DateTime.detectDisplayMode(l,a,i),t.timeOnly="timePicker"===t.displayMode}"default"!==e.mode&&"basic"!==e.mode?(t.operationsMapping={"=":"EQUAL","<>":"NOT_EQUAL","<":"LESS_THAN",">":"GREATER_THAN","<=":"LESS_THAN_OR_EQUAL",">=":"GREATER_THAN_OR_EQUAL",isblank:"EMPTY",isnotblank:"NOT_EMPTY",contains:"CONTAINS",notcontains:"DOES_NOT_CONTAIN",startswith:"STARTS_WITH",endswith:"ENDS_WITH",NULL:"NULL",NOT_NULL:"NOT_NULL"},"excel"===e.mode?t.createExcelHTMLStructure():"filterBuilder"===e.mode&&t.createBuilderHTMLStructure()):t.createDefaultHTMLStructure()}setDefaults(){const e=this,t=e.context;e.defaultListSource=[{prefix:'<span class="smart-icon smart-icon-equal"></span>',value:"EQUAL",label:t.localize("equal")},{prefix:'<span class="smart-icon smart-icon-not-equal"></span>',value:"NOT_EQUAL",label:t.localize("notEqual")},{prefix:'<span class="smart-icon smart-icon-less-than"></span>',value:"LESS_THAN",label:t.localize("lessThan")},{prefix:'<span class="smart-icon smart-icon-less-than-equal"></span>',value:"LESS_THAN_OR_EQUAL",label:t.localize("lessThanOrEqual")},{prefix:'<span class="smart-icon smart-icon-greater-than"></span>',value:"GREATER_THAN",label:t.localize("greaterThan")},{prefix:'<span class="smart-icon smart-icon-greater-than-equal"></span>',value:"GREATER_THAN_OR_EQUAL",label:t.localize("greaterThanOrEqual")},{prefix:'<span class="smart-icon smart-icon-null"></span>',value:"NULL",label:t.localize("null")},{prefix:'<span class="smart-icon smart-icon-not-null"></span>',value:"NOT_NULL",label:t.localize("notNull")}],e.filterBuilderOperations=["<","=","<>","<=",">",">=","NULL","NOT_NULL"],e.defaultListSelection=2}createDefaultHTMLStructure(){const e=this,t=e.context,l=document.createElement("smart-input"),a=document.createElement("smart-input"),i=document.createElement("smart-input"),s=document.createDocumentFragment(),r=e=>{e.readonly=!0,e.dropDownButtonPosition="right"};l.classList.add("smart-filter-panel-list"),l.dataSource=JSON.parse(JSON.stringify(this.defaultListSource)),l.selectedIndex=e.defaultListSelection,r(l),a.classList.add("smart-filter-panel-operator-list"),a.dataSource=[{value:0,label:t.localize("and")},{value:1,label:t.localize("or")}],r(a),i.classList.add("smart-filter-panel-list"),i.dataSource=JSON.parse(JSON.stringify(this.defaultListSource)),i.selectedIndex=e.defaultListSelection,r(i),e.firstList=l,e.logicalOperatorList=a,e.secondList=i;const n=document.createElement("span");n.classList.add("smart-icon","smart-icon-font-size"),n.title=t.localize("matchCase");const c=document.createElement("span");c.classList.add("smart-icon","smart-icon-font-size"),c.title=t.localize("matchCase"),e.firstInputMatchCase=n,e.secondInputMatchCase=c,e.appendInputs(),e.firstInput.classList.add("smart-filter-panel-input"),e.secondInput.classList.add("smart-filter-panel-input"),"basic"===t.mode&&(e.secondList.classList.add("smart-hidden"),e.secondInput.classList.add("smart-hidden"),e.logicalOperatorList.classList.add("smart-hidden"),e.secondInputMatchCase.classList.add("smart-hidden")),a.dropDownHeight="auto",a.selectedIndex=0,[l,e.firstInput,e.firstInputMatchCase,a,i,e.secondInput,e.secondInputMatchCase].forEach((function(e){e.animation=t.animation,e.disabled=t.disabled,e.unfocusable=t.unfocusable,e.dropDownPosition="bottom",e.dropDownAppendTo="body",e.dropDownMaxHeight=200,e.rightToLeft=t.rightToLeft,s.appendChild(e)})),e.context.$.mainContainer.appendChild(s),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}cacheFilter(e,t,l){const a=this;a.cachedFilter={firstFilterComparison:e,firstFilterValue:a.firstInput.value,firstFilterCaseSensitive:a.firstInputMatchCase.classList.contains("active"),logicalOperator:t,secondFilterComparison:l,secondFilterValue:a.secondInput.value,secondFilterCaseSensitive:a.secondInputMatchCase.classList.contains("active")}}defaultFilter(){const e=this,t=e.context,l=e.getFilterInputValue(e.firstInput),a=parseFloat(e.logicalOperatorList.selectedValues[0]),i=e.getFilterInputValue(e.secondInput),s=e.filterObject;let r=e.firstList.selectedValues[0],n=e.secondList.selectedValues[0];s.clear();const c=e=>"CONTAINS"===e?"CONTAINS_CASE_SENSITIVE":"DOES_NOT_CONTAIN"===e?"DOES_NOT_CONTAIN_CASE_SENSITIVE":"STARTS_WITH"===e?"STARTS_WITH_CASE_SENSITIVE":"ENDS_WITH"===e?"ENDS_WITH_CASE_SENSITIVE":"EQUAL"===e?"EQUAL_CASE_SENSITIVE":"NOT_EQUAL"===e?"NOT_EQUAL_CASE_SENSITIVE":void 0;if(e.firstInputMatchCase.classList.contains("active")&&(r=c(r)),e.secondInputMatchCase.classList.contains("active")&&(n=c(n)),""!==l||-1!==["NULL","NOT_NULL","EMPTY","NOT_EMPTY"].indexOf(r)){const i=s.createFilter(t._filterType,l,r,void 0,t.formatString,t.locale,"timePicker"===e.firstInput._dropDownDisplayMode);s.addFilter(a,i)}if(""!==i||-1!==["NULL","NOT_NULL","EMPTY","NOT_EMPTY"].indexOf(n)){const l=s.createFilter(t._filterType,i,n,void 0,t.formatString,t.locale,"timePicker"===e.secondInput._dropDownDisplayMode);s.addFilter(a,l)}let o=e.firstList.selectedIndexes[0],d=e.secondList.selectedIndexes[0];const u=s.stringConditions;l&&"string"==typeof l&&(o=u.findIndex((e=>e===r))),i&&"string"==typeof i&&(d=u.findIndex((e=>e===n))),e.cacheFilter(o,e.logicalOperatorList.selectedIndexes[0],d)}getFilterInputValue(e){return e.value}excelFilter(){const e=this,t=e.context;if(Array.isArray(t.dataSource))return void e.customExcelFilter();const l=e.tree,a=e.filterObject;if(a.clear(),e.customItems=[],l._menuItems[0].selected)return void e.excelClear();const i=l.selectedIndexes;if(i.forEach((function(i){const s=l._menuItems[i];if(s instanceof Smart.TreeItem){const l=s.value;if(s.hasAttribute("default-item"))if(l instanceof Date){const i=new Smart.FilterGroup,s=new Date(l.getFullYear(),l.getMonth(),1),r=new Date(l.getFullYear(),l.getMonth()+1,0),n=i.createFilter(t._filterType,s,"GREATER_THAN_OR_EQUAL",void 0,t.formatString,t.locale,e.timeOnly),c=i.createFilter(t._filterType,r,"LESS_THAN_OR_EQUAL",void 0,t.formatString,t.locale,e.timeOnly);i.addFilter("and",n),i.addFilter("and",c),a.addFilter("or",i)}else{const i=e.getExcelComparison(l),s=a.createFilter(t._filterType,l,i,void 0,t.formatString,t.locale,e.timeOnly);a.addFilter("or",s)}else e.customItems.push(s)}})),0===i.length){const l=e.getExcelComparison("Empty Filter"),i=a.createFilter(t._filterType,"Empty Filter",l,void 0,t.formatString,t.locale,e.timeOnly);a.addFilter("or",i)}e.cachedFilter=i.slice(0)}customExcelFilter(){const e=this,t=e.tree;if(delete e.customExcelFilterObjects,t._menuItems[0].selected)return;const l=e.context,a=[],i=t.selectedIndexes;i.forEach((function(i){const s=t._menuItems[i];if(s instanceof Smart.TreeItem){let t=s.value;if(!Array.isArray(t))return;Array.isArray(t[0])||(t=[t]);const i=new Smart.Utilities.FilterGroup;for(let a=0;a<t.length;a++){const s=t[a],r=e.operationsMapping[s[1]],n=i.createFilter(l._filterType,s[2],r,void 0,l.formatString,l.locale,e.timeOnly);i.addFilter("and",n)}a.push(i)}})),e.customExcelFilterObjects=a,e.cachedFilter=i.slice(0)}getExcelComparison(e){return""===e?"NULL":"EQUAL"}filterBuilderFilter(){const e=this,t=e.filterBuilder.value,l="string"===e.context.filterType&&e.caseSensitive.checked,a={filters:[]};!function t(a,i){const s=new Smart.Utilities.FilterGroup,r=a[1];i.logicalOperator=r;for(let n=0;n<a.length;n++){if(1===n)continue;const c=a[n];if(Array.isArray(c))if(Array.isArray(c[0])){const e={filters:[]};i.filters.push(e),t(c,e)}else s.addFilter(r,e.createFilterBuilderFilter(s,c,l))}s.filters.length>0&&i.filters.push(s)}(t,a),e.filterBuilderObject=a,e.cachedFilter={filterBuilder:JSON.parse(JSON.stringify(e.filterBuilder.value),(function(e,t){return/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{3})Z$/.test(t)?new Date(t):t})),caseSensitive:l}}createFilterBuilderFilter(e,t,l){const a=this.context;let i=this.operationsMapping[t[1]];return l&&-1!==["CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","EQUAL"].indexOf(i)&&(i+="_CASE_SENSITIVE"),e.createFilter(a._filterType,t[2],i,void 0,a.formatString,a.locale,!1)}defaultClear(){const e=this;e.firstList.selectedIndexes=[e.defaultListSelection],e.firstInput.value="",e.logicalOperatorList.selectedIndexes=[0],e.secondList.selectedIndexes=[e.defaultListSelection],e.secondInput.value="",e.filterObject.clear(),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}excelClear(){const e=this;0!==e.tree.offsetHeight&&e.tree.select("0"),e.filterObject.clear(),e.cachedFilter=e.tree.selectedIndexes.slice(0)}filterBuilderClear(){const e=this;e.filterBuilder.value=["and"],"string"===e.context.filterType&&(e.caseSensitive.checked=!1),e.cachedFilter={filterBuilder:["and"],caseSensitive:!1}}defaultCancel(){const e=this;let t=null,l=null;if(e.filterObject){const a=e.filterObject.stringConditions,i=e.filterObject.numericConditions,s=e.filterObject.booleanConditions,r=e.filterObject.dateConditions;t=a[e.cachedFilter.firstFilterComparison],l=a[e.cachedFilter.secondFilterComparison],e.cachedFilter.firstFilterValue&&"string"!=typeof e.cachedFilter.firstFilterValue&&(!0===e.cachedFilter.firstFilterValue||!1===e.cachedFilter.firstFilterValue?(t=s[e.cachedFilter.firstFilterComparison],l=s[e.cachedFilter.secondFilterComparison]):e.cachedFilter.firstFilterValue&&e.cachedFilter.firstFilterValue instanceof Date?(t=r[e.cachedFilter.firstFilterComparison],l=r[e.cachedFilter.secondFilterComparison]):(t=i[e.cachedFilter.firstFilterComparison],l=i[e.cachedFilter.secondFilterComparison]))}let a=-1;e.firstList.dataSource.find(((e,l)=>{if(e.value===t)return a=l,e}));let i=-1;e.secondList.dataSource.find(((e,t)=>{if(e.value===l)return i=t,e})),e.firstList.selectedIndexes=[a],e.firstInput.value=e.cachedFilter.firstFilterValue,e.cachedFilter.firstFilterCaseSensitive&&e.firstInputMatchCase.classList.add("active"),e.logicalOperatorList.selectedIndexes=[e.cachedFilter.logicalOperator],e.secondList.selectedIndexes=[i],e.secondInput.value=e.cachedFilter.secondFilterValue,e.cachedFilter.firstFilterCaseSensitive&&e.firstInputMatchCase.classList.add("active"),e.cachedFilter.secondFilterCaseSensitive&&e.secondInputMatchCase.classList.add("active")}excelCancel(){const e=this;if(e.cachedFilter&&e.cachedFilter.firstFilterValue){const t=e.cachedFilter.firstFilterValue,l=e.cachedFilter.secondFilterValue,a=e.cachedFilter.firstFilterComparison,i=e.cachedFilter.secondFilterComparison;let s=e.filterObject.stringConditions;if(isNaN(parseFloat(t))||(s=e.filterObject.numericConditions),e.dataSource){let r=[];return e.dataSource.forEach(((e,n)=>{r.push("0."+n),e.label===t||e.label===l?("NOT_EQUAL"!==s[a]&&"DOES_NOT_CONTAIN"!==s[a]||r.pop(),"NOT_EQUAL"!==s[i]&&"DOES_NOT_CONTAIN"!==s[i]||r.pop()):e.label===t&&e.label===l||("EQUAL"!==s[a]&&"EQUAL_CASE_SENSITIVE"!==s[a]&&"CONTAINS"!==s[a]&&"ENDS_WITH"!==s[a]&&"STARTS_WITH"!==s[a]||r.pop(),"EQUAL"!==s[i]&&"EQUAL_CASE_SENSITIVE"!==s[i]&&"CONTAINS"!==s[i]&&"ENDS_WITH"!==s[i]&&"STARTS_WITH"!==s[i]||r.pop())})),void setTimeout((()=>{e.tree.selectedIndexes=r}))}}else if(e.cachedFilter&&e.cachedFilter.filters&&e.dataSource){let t=[];return e.dataSource.forEach(((l,a)=>{t.push("0."+a);let i=!1;e.cachedFilter.filters.forEach((e=>{e.value===l.label&&(i=!0)})),i||t.pop()})),void setTimeout((()=>{e.tree.selectedIndexes=t}))}e.tree.selectedIndexes=e.cachedFilter.slice(0)}filterBuilderCancel(){const e=this;e.filterBuilder.value=e.cachedFilter.filterBuilder,"string"===e.context.filterType&&(e.caseSensitive.checked=e.cachedFilter.caseSensitive)}createExcelHTMLStructure(){const e=this,t=e.context,l=document.createElement("smart-tree"),a={data:t.data,dataField:t.dataField,filterType:t._filterType};if(t.dataSource&&Array.isArray(t.dataSource))e.processCustomDataSource(l);else{if(t.data&&t.dataField||t.error(t.localize("missingProperty")),"date"===t.filterType){a.formatString=t.formatString,a.displayMode=e.displayMode,e.dataSource=e.filterObject.getUniqueValues(a,t);try{e.getHierarchicalDataSource(e.displayMode)}catch(e){t.error(t.localize("mismatchedProperties"))}e.timeOnly?l.classList.add("standard-excel"):l.classList.add("date-excel")}else e.dataSource=e.filterObject.getUniqueValues(a,t),l.classList.add("standard-excel");"function"==typeof t.dataSource&&(e.dataSource=t.dataSource(e.dataSource)||e.dataSource)}l.animation=t.animation,l.disabled=t.disabled,l.unfocusable=t.unfocusable,l.dataSource=[{label:t.localize("selectAll"),value:"",items:e.dataSource,expanded:!0,selected:!0}],l.selectionMode="checkBox",l.hasThreeStates=!0,l.theme=t.theme,l.animation="none",l.toggleMode="arrow",l.rightToLeft=t.rightToLeft,l.addEventListener("collapsing",(function(e){1===e.detail.item.level&&e.preventDefault()})),l._onCompleted=function(){if(e.cachedFilter=l.selectedIndexes.slice(0),l.classList.contains("date-excel"))for(let e in l._menuItems){if("0"===e)continue;const t=l._menuItems[e];t.firstElementChild.style.paddingLeft=20*(t.level-1)-10+"px"}else l._menuItems[0].firstElementChild.style.paddingLeft=0;l.selectAll=l._menuItems[0],l.blanks=l.querySelector('[label="'+t.localize("blanks")+'"]'),"en"!==t.locale&&(l.selectAll&&(l.selectAll.label=t.localize("selectAll")),l.blanks&&(l.blanks.label=t.localize("blanks")))},e.tree=l,t.$.mainContainer.appendChild(l)}processCustomDataSource(e){const t=this.context.dataSource;e.classList.add("standard-excel"),this.dataSource=t}createBuilderHTMLStructure(){const e=this,t=e.context,l=document.createElement("smart-filter-builder"),a=t.dataField,i="numeric"===t.filterType?"number":t.filterType;if(e.filterBuilder=l,l.animation=t.animation,l.disabled=t.disabled,l.unfocusable=t.unfocusable,l.value=["and"],l.fields=[{label:a,dataField:a,dataType:i,filterOperations:e.filterBuilderOperations}],e.localizeFilterBuilder(),t.$.mainContainer.appendChild(l),"string"===i){const l=document.createElement("smart-check-box");l.classList.add("case-sensitive"),l.innerHTML="Case sensitive",l.animation=t.animation,l.disabled=t.disabled,l.unfocusable=t.unfocusable,l.checked=!1,e.caseSensitive=l,t.$.mainContainer.appendChild(l)}e.filterBuilderObject={filters:[]},e.cachedFilter={filterBuilder:["and"],caseSensitive:!1}}localizeFilterBuilder(){const e=this.context,t=this.filterBuilder;let l=t.messages[e.locale];l||(l={},t.messages[e.locale]=l),t.customOperations=[{name:"NULL",label:e.localize("null"),hideValue:!0},{name:"NOT_NULL",label:e.localize("notNull"),hideValue:!0}],l.addCondition=e.localize("addCondition"),l.addGroup=e.localize("addGroup"),l["<"]=e.localize("lessThan"),l["<="]=e.localize("lessThanOrEqual"),l["<>"]=e.localize("notEqual"),l["="]=e.localize("equal"),l[">"]=e.localize("greaterThan"),l[">="]=e.localize("greaterThanOrEqual"),l.and=e.localize("and"),l.contains=e.localize("contains"),l.endswith=e.localize("endsWith"),l.isblank=e.localize("empty"),l.isnotblank=e.localize("notEmpty"),l.notcontains=e.localize("doesNotContain"),l.or=e.localize("or"),l.startswith=e.localize("startsWith"),l.dateTabLabel=e.localize("dateTabLabel"),l.timeTabLabel=e.localize("timeTabLabel"),t.formatStringDate=e.formatString,t.formatStringDateTime=e.formatString,t.locale=e.locale,t.valuePlaceholder=e.localize("filterBuilderPlaceholder")}evaluate(e){const t=this,l=t.context;if("default"===l.mode||"basic"===l.mode)return t.filterObject.evaluate(e);if("excel"===l.mode){let a=!1;if(Array.isArray(l.dataSource)){if(!t.customExcelFilterObjects||0===t.customExcelFilterObjects.length)return!0;for(let l=0;l<t.customExcelFilterObjects.length;l++)a=a||t.customExcelFilterObjects[l].evaluate(e);return a}if(t.customItems&&t.customItems.length>0){if(t.filterObject.filters.length>0&&(a=t.filterObject.evaluate(e)),t.customItems&&l.evaluateFilterExpression)for(let i=0;i<t.customItems.length;i++){const s=l.evaluateFilterExpression(e,t.customItems[i].value);void 0!==s&&(a=a||s)}}else a=t.filterObject.evaluate(e);return a}return!t.filterBuilderObject.logicalOperator||function t(l){let a="and"===l.logicalOperator;for(let i=0;i<l.filters.length;i++){let s;s=l.filters[i]instanceof Smart.Utilities.FilterGroup?l.filters[i].evaluate(e):t(l.filters[i]),a="and"===l.logicalOperator?a&&s:a||s}return a}(t.filterBuilderObject)}}),Smart.Utilities.Assign("NumericFilterHandler",class extends Smart.Utilities.BaseFilterHandler{appendInputs(){let e=this,t=document.createElement("smart-number-input"),l=document.createElement("smart-number-input");t.placeholder=e.context.localize("placeholderNumber"),l.placeholder=e.context.localize("placeholderNumber"),t.nullable=!0,t.spinButtons=!0,t.value=null,l.nullable=!0,l.spinButtons=!0,l.value=null,e.firstInput=t,e.secondInput=l}getFilterInputValue(e){return null===e.value||""===e.value?"":parseFloat(e.value)}}),Smart.Utilities.Assign("StringFilterHandler",class extends Smart.Utilities.BaseFilterHandler{setDefaults(){const e=this,t=e.context;e.defaultListSource=[{prefix:'<span class="smart-icon smart-icon-empty"></span>',value:"EMPTY",label:t.localize("empty")},{prefix:'<span class="smart-icon smart-icon-not-empty"></span>',value:"NOT_EMPTY",label:t.localize("notEmpty")},{prefix:'<span class="smart-icon smart-icon-contains"></span>',value:"CONTAINS",label:t.localize("contains")},{prefix:'<span class="smart-icon smart-icon-does-not-contain"></span>',value:"DOES_NOT_CONTAIN",label:t.localize("doesNotContain")},{prefix:'<span class="smart-icon smart-icon-starts-with"></span>',value:"STARTS_WITH",label:t.localize("startsWith")},{prefix:'<span class="smart-icon smart-icon-ends-with"></span>',value:"ENDS_WITH",label:t.localize("endsWith")},{prefix:'<span class="smart-icon smart-icon-equal"></span>',value:"EQUAL",label:t.localize("equal")},{prefix:'<span class="smart-icon smart-icon-not-equal"></span>',value:"NOT_EQUAL",label:t.localize("notEqual")},{prefix:'<span class="smart-icon smart-icon-null"></span>',value:"NULL",label:t.localize("null")},{prefix:'<span class="smart-icon smart-icon-not-null"></span>',value:"NOT_NULL",label:t.localize("notNull")}],e.filterBuilderOperations=["contains","isblank","isnotblank","notcontains","startswith","endswith","=","NULL","NOT_NULL"],e.defaultListSelection=2}appendInputs(){const e=this,t=document.createElement("input"),l=document.createElement("input");t.placeholder=e.context.localize("placeholderValue"),t.setAttribute("aria-label",t.placeholder),l.placeholder=e.context.localize("placeholderValue"),l.setAttribute("aria-label",l.placeholder),t.classList.add("smart-input"),l.classList.add("smart-input"),e.firstInput=t,e.secondInput=l,e.firstInputMatchCase.onclick=()=>{e.firstInputMatchCase.classList.toggle("active")},e.secondInputMatchCase.onclick=()=>{e.secondInputMatchCase.classList.toggle("active")};const a=(e,t,l)=>{if(0===e.selectedValues.length)return t.classList.remove("case-sensitive"),void l.classList.remove("case-sensitive");const a=e.selectedValues[0];t.classList.remove("case-sensitive"),l.classList.remove("case-sensitive"),["EQUAL","NOT_EQUAL","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH"].indexOf(a)>=0&&(t.classList.add("case-sensitive"),l.classList.add("case-sensitive"))};e.firstList.onchange=()=>{a(e.firstList,e.firstInput,e.firstInputMatchCase)},e.secondList.onchange=()=>{a(e.secondList,e.secondInput,e.secondInputMatchCase)},setTimeout((()=>{a(e.firstList,e.firstInput,e.firstInputMatchCase),a(e.secondList,e.secondInput,e.secondInputMatchCase)}),50)}getExcelComparison(e){return""===e?"EMPTY":"EQUAL_CASE_SENSITIVE"}}),Smart.Utilities.Assign("DateFilterHandler",class extends Smart.Utilities.BaseFilterHandler{cacheFilter(e,t,l){const a=this;a.cachedFilter={firstFilterComparison:e,firstFilterValue:a.firstInput.getValue(),logicalOperator:t,secondFilterComparison:l,secondFilterValue:a.secondInput.getValue()}}appendInputs(){let e=this,t=e.context,l=document.createElement("smart-date-input"),a=document.createElement("smart-date-input");t.formatString&&!(t.formatString.indexOf("d")>=0||t.formatString.indexOf("M")>=0||t.formatString.indexOf("y")>=0)&&(l=document.createElement("smart-time-input"),a=document.createElement("smart-time-input")),l.calendarButton=!0,l.editMode="partial",l.formatString=t.formatString,l.dropDownDisplayMode="auto",l.locale=t.locale,l.autoClose=!0,l.messages[t.locale]||(l.messages[t.locale]={}),l.messages[t.locale].dateTabLabel=t.localize("dateTabLabel"),l.messages[t.locale].timeTabLabel=t.localize("timeTabLabel"),l.nullable=!0,l.value=null,a.autoClose=!0,a.calendarButton=!0,a.formatString=t.formatString,a.dropDownDisplayMode="auto",a.locale=t.locale,a.messages[t.locale]||(a.messages[t.locale]={}),a.messages[t.locale].dateTabLabel=t.localize("dateTabLabel"),a.messages[t.locale].timeTabLabel=t.localize("timeTabLabel"),a.nullable=!0,a.value=null,e.firstInput=l,e.secondInput=a}getFilterInputValue(e){if(null===e.value)return"";const t=e.getDate();return"calendar"===this.displayMode&&t&&t.setHours(0,0,0),t}defaultClear(){const e=this;e.firstList.selectedIndexes=[e.defaultListSelection],e.firstInput.value=null,e.logicalOperatorList.selectedIndexes=[0],e.secondList.selectedIndexes=[e.defaultListSelection],e.secondInput.value=null,e.filterObject.clear(),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}getHierarchicalDataSource(e){const t=this,l=t.dataSource,a={},i=[];let s;if("timePicker"!==e){""===l[l.length-1].value&&(s=l[l.length-1],l.pop()),l.forEach((function(e){const l=e.value,i=l.getFullYear(),s=new Intl.DateTimeFormat(t.context.locale,{month:"long"}).format(l);a[i]||(a[i]={}),a[i][s]||(a[i][s]=e.value)}));for(let e in a){const t={expanded:!0,label:e,items:[],customAttribute:"default-item"};i.push(t);for(let l in a[e]){const i={value:a[e][l],expanded:!0,label:l,items:[],customAttribute:"default-item"};t.items.push(i)}}s&&i.push(s),t.dataSource=i}}}),Smart.Utilities.Assign("BooleanFilterHandler",class extends Smart.Utilities.BaseFilterHandler{cacheFilter(e,t,l){const a=this;a.cachedFilter={firstFilterComparison:e,firstFilterValue:a.firstInput.selectedIndexes.slice(0),logicalOperator:t,secondFilterComparison:l,secondFilterValue:a.secondInput.selectedIndexes.slice(0)}}setDefaults(){const e=this,t=e.context;e.defaultListSource=[{prefix:'<span class="smart-icon smart-icon-equal"></span>',value:"EQUAL",label:t.localize("equal")},{prefix:'<span class="smart-icon smart-icon-not-equal"></span>',value:"NOT_EQUAL",label:t.localize("notEqual")},{prefix:'<span class="smart-icon smart-icon-null"></span>',value:"NULL",label:t.localize("null")},{prefix:'<span class="smart-icon smart-icon-not-null"></span>',value:"NOT_NULL",label:t.localize("notNull")}],e.filterBuilderOperations=["=","<>","NULL","NOT_NULL"],e.defaultListSelection=0}appendInputs(){const e=this,t=document.createElement("smart-input"),l=document.createElement("smart-input");t.dataSource=[{value:!0,label:"true"},{value:!1,label:"false"}],t.placeholder=e.context.localize("placeholderBoolean"),t.selectedIndexes=[],t.selectionMode="zeroOrOne",t.readonly=!0,t.dropDownButtonPosition="right",l.dataSource=[{value:!0,label:"true"},{value:!1,label:"false"}],l.placeholder=e.context.localize("placeholderBoolean"),l.selectedIndexes=[],l.selectionMode="zeroOrOne",l.readonly=!0,l.dropDownButtonPosition="right",e.firstInput=t,e.secondInput=l}getFilterInputValue(e){return 0===e.selectedValues.length?"":!0===e.selectedValues[0]}defaultClear(){const e=this;e.firstList.selectedIndexes=[e.defaultListSelection],e.firstInput.selectedIndexes=[],e.logicalOperatorList.selectedIndexes=[0],e.secondList.selectedIndexes=[e.defaultListSelection],e.secondInput.selectedIndexes=[],e.filterObject.clear(),e.cacheFilter(e.defaultListSelection,0,e.defaultListSelection)}defaultCancel(){const e=this;e.firstList.selectedIndexes=[e.cachedFilter.firstFilterComparison],e.firstInput.selectedIndexes=e.cachedFilter.firstFilterValue,e.logicalOperatorList.selectedIndexes=[e.cachedFilter.logicalOperator],e.secondList.selectedIndexes=[e.cachedFilter.secondFilterComparison],e.secondInput.selectedIndexes=e.cachedFilter.secondFilterValue}});